2016-02-01 08:56:25 +00:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
class CSettings
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
CSettings();
|
|
|
|
|
2017-01-24 19:08:33 +00:00
|
|
|
//Frame buffer emulation options
|
|
|
|
enum fb_bits_t
|
|
|
|
{
|
|
|
|
fb_emulation = (1 << 0), //frame buffer emulation
|
|
|
|
fb_hwfbe = (1 << 1), //hardware frame buffer emualtion
|
|
|
|
fb_motionblur = (1 << 2), //emulate motion blur
|
|
|
|
fb_ref = (1 << 3), //read every frame
|
|
|
|
fb_read_alpha = (1 << 4), //read alpha
|
|
|
|
fb_hwfbe_buf_clear = (1 << 5), //clear auxiliary texture frame buffers
|
|
|
|
fb_depth_render = (1 << 6), //enable software depth render
|
|
|
|
fb_optimize_texrect = (1 << 7), //fast texrect rendering with hwfbe
|
|
|
|
fb_ignore_aux_copy = (1 << 8), //do not copy auxiliary frame buffers
|
|
|
|
fb_useless_is_useless = (1 << 10), //
|
|
|
|
fb_get_info = (1 << 11), //get frame buffer info
|
|
|
|
fb_read_back_to_screen = (1 << 12), //render N64 frame buffer to screen
|
|
|
|
fb_read_back_to_screen2 = (1 << 13), //render N64 frame buffer to screen
|
|
|
|
fb_cpu_write_hack = (1 << 14), //show images writed directly by CPU
|
|
|
|
};
|
|
|
|
|
2016-02-01 08:56:25 +00:00
|
|
|
uint32_t res_x, scr_res_x;
|
|
|
|
uint32_t res_y, scr_res_y;
|
2016-03-27 16:51:14 +00:00
|
|
|
#ifndef ANDROID
|
2016-02-01 08:56:25 +00:00
|
|
|
uint32_t res_data, res_data_org;
|
2016-03-10 18:29:41 +00:00
|
|
|
#endif
|
2016-02-01 08:56:25 +00:00
|
|
|
|
|
|
|
int advanced_options;
|
|
|
|
int texenh_options;
|
|
|
|
int ssformat;
|
|
|
|
int vsync;
|
|
|
|
|
|
|
|
int clock;
|
|
|
|
int clock_24_hr;
|
2016-03-10 18:29:41 +00:00
|
|
|
int rotate;
|
2016-02-01 08:56:25 +00:00
|
|
|
|
|
|
|
int filtering;
|
|
|
|
int fog;
|
|
|
|
int buff_clear;
|
|
|
|
int swapmode;
|
|
|
|
int lodmode;
|
|
|
|
int aspectmode;
|
|
|
|
int use_hotkeys;
|
|
|
|
|
2017-01-24 19:08:33 +00:00
|
|
|
|
2016-02-01 08:56:25 +00:00
|
|
|
enum FBCRCMODE
|
|
|
|
{
|
|
|
|
fbcrcNone = 0,
|
|
|
|
fbcrcFast = 1,
|
|
|
|
fbcrcSafe = 2
|
|
|
|
} fb_crc_mode;
|
|
|
|
|
2017-01-24 19:08:33 +00:00
|
|
|
inline bool fb_emulation_enabled(void) const { return ((m_frame_buffer&fb_emulation) != 0); }
|
|
|
|
inline bool fb_ref_enabled(void) const { return ((m_frame_buffer&fb_ref) != 0); }
|
|
|
|
inline bool fb_hwfbe_enabled(void) const { return ((m_frame_buffer&(fb_emulation |fb_hwfbe)) == (fb_emulation | fb_hwfbe)); }
|
|
|
|
inline bool fb_hwfbe_set(void) const { return ((m_frame_buffer&fb_hwfbe) != 0); }
|
|
|
|
inline bool fb_depth_render_enabled(void) const { return ((m_frame_buffer&fb_depth_render) != 0); }
|
|
|
|
inline bool fb_get_info_enabled(void) const { return ((m_frame_buffer&fb_get_info) != 0); }
|
|
|
|
inline bool fb_read_back_to_screen_enabled(void) const { return ((m_frame_buffer&fb_read_back_to_screen) != 0); }
|
|
|
|
inline bool fb_read_back_to_screen2_enabled(void) const { return ((m_frame_buffer&fb_read_back_to_screen2) != 0); }
|
|
|
|
inline bool fb_cpu_write_hack_enabled(void) const { return ((m_frame_buffer&fb_cpu_write_hack) != 0); }
|
|
|
|
inline bool fb_ignore_aux_copy_enabled(void) const { return ((m_frame_buffer&fb_ignore_aux_copy) != 0); }
|
|
|
|
inline bool fb_hwfbe_buf_clear_enabled(void) const { return ((m_frame_buffer&fb_hwfbe_buf_clear) != 0); }
|
|
|
|
inline bool fb_useless_is_useless_enabled(void) const { return ((m_frame_buffer&fb_useless_is_useless) != 0); }
|
|
|
|
inline bool fb_motionblur_enabled(void) const { return ((m_frame_buffer&fb_motionblur) != 0); }
|
|
|
|
inline bool fb_read_alpha_enabled(void) const { return ((m_frame_buffer&fb_read_alpha) != 0); }
|
|
|
|
inline bool fb_optimize_texrect_enabled(void) const { return ((m_frame_buffer&fb_optimize_texrect) != 0); }
|
|
|
|
|
2017-01-23 21:16:25 +00:00
|
|
|
inline const char * log_dir(void) const { return m_log_dir; }
|
|
|
|
inline bool FlushLogs(void) const { return m_FlushLogs; }
|
|
|
|
|
2016-02-01 08:56:25 +00:00
|
|
|
//Texture filtering options
|
|
|
|
std::string texture_dir;
|
|
|
|
int ghq_fltr;
|
|
|
|
int ghq_enht;
|
|
|
|
int ghq_cmpr;
|
|
|
|
int ghq_hirs;
|
|
|
|
int ghq_use;
|
|
|
|
int ghq_enht_cmpr;
|
|
|
|
int ghq_enht_tile;
|
|
|
|
int ghq_enht_f16bpp;
|
|
|
|
int ghq_enht_gz;
|
|
|
|
int ghq_enht_nobg;
|
|
|
|
int ghq_hirs_cmpr;
|
|
|
|
int ghq_hirs_tile;
|
|
|
|
int ghq_hirs_f16bpp;
|
|
|
|
int ghq_hirs_gz;
|
|
|
|
int ghq_hirs_altcrc;
|
|
|
|
int ghq_cache_save;
|
|
|
|
int ghq_cache_size;
|
|
|
|
int ghq_hirs_let_texartists_fly;
|
|
|
|
int ghq_hirs_dump;
|
|
|
|
|
|
|
|
//Debug
|
|
|
|
int autodetect_ucode;
|
|
|
|
int ucode;
|
|
|
|
int logging;
|
|
|
|
int elogging;
|
|
|
|
int log_clear;
|
|
|
|
int run_in_window;
|
|
|
|
int filter_cache;
|
|
|
|
int unk_as_red;
|
|
|
|
int log_unk;
|
|
|
|
int unk_clear;
|
|
|
|
int wireframe;
|
|
|
|
int wfmode;
|
|
|
|
|
|
|
|
// Special fixes
|
|
|
|
int offset_x, offset_y;
|
|
|
|
int scale_x, scale_y;
|
|
|
|
int fast_crc;
|
|
|
|
int alt_tex_size;
|
|
|
|
int use_sts1_only;
|
|
|
|
int flame_corona; //hack for zeldas flame's corona
|
|
|
|
int increase_texrect_edge; // add 1 to lower right corner coordinates of texrect
|
|
|
|
int decrease_fillrect_edge; // sub 1 from lower right corner coordinates of fillrect
|
|
|
|
int texture_correction; // enable perspective texture correction emulation. is on by default
|
|
|
|
int stipple_mode; //used for dithered alpha emulation
|
|
|
|
uint32_t stipple_pattern; //used for dithered alpha emulation
|
|
|
|
int force_microcheck; //check microcode each frame, for mixed F3DEX-S2DEX games
|
|
|
|
int force_quad3d; //force 0xb5 command to be quad, not line 3d
|
|
|
|
int clip_zmin; //enable near z clipping
|
|
|
|
int clip_zmax; //enable far plane clipping;
|
|
|
|
int adjust_aspect; //adjust screen aspect for wide screen mode
|
|
|
|
int force_calc_sphere; //use spheric mapping only, Ridge Racer 64
|
|
|
|
int pal230; //set special scale for PAL games
|
|
|
|
int correct_viewport; //correct viewport values
|
|
|
|
int zmode_compare_less; //force GR_CMP_LESS for zmode=0 (opaque)and zmode=1 (interpenetrating)
|
|
|
|
int old_style_adither; //apply alpha dither regardless of alpha_dither_mode
|
|
|
|
int n64_z_scale; //scale vertex z value before writing to depth buffer, as N64 does.
|
|
|
|
|
|
|
|
//Special game hacks
|
|
|
|
#define hack_ASB (1<<0) //All-Star Baseball games
|
|
|
|
#define hack_Banjo2 (1<<1) //Banjo Tooie
|
|
|
|
#define hack_BAR (1<<2) //Beetle Adventure Racing
|
|
|
|
#define hack_Chopper (1<<3) //Chopper Attack
|
|
|
|
#define hack_Diddy (1<<4) //diddy kong racing
|
|
|
|
#define hack_Fifa98 (1<<5) //FIFA - Road to World Cup 98
|
|
|
|
#define hack_Fzero (1<<6) //F-Zero
|
|
|
|
#define hack_GoldenEye (1<<7) //Golden Eye
|
|
|
|
#define hack_Hyperbike (1<<8) //Top Gear Hyper Bike
|
|
|
|
#define hack_ISS64 (1<<9) //International Superstar Soccer 64
|
|
|
|
#define hack_KI (1<<10) //Killer Instinct
|
|
|
|
#define hack_Knockout (1<<11) //Knockout Kings 2000
|
|
|
|
#define hack_Lego (1<<12) //LEGO Racers
|
|
|
|
#define hack_MK64 (1<<13) //Mario Kart
|
|
|
|
#define hack_Megaman (1<<14) //Megaman64
|
|
|
|
#define hack_Makers (1<<15) //Mischief-makers
|
|
|
|
#define hack_WCWnitro (1<<16) //WCW Nitro
|
|
|
|
#define hack_Ogre64 (1<<17) //Ogre Battle 64
|
|
|
|
#define hack_Pilotwings (1<<18) //Pilotwings
|
|
|
|
#define hack_PMario (1<<19) //Paper Mario
|
|
|
|
#define hack_PPL (1<<20) //pokemon puzzle league requires many special fixes
|
|
|
|
#define hack_RE2 (1<<21) //Resident Evil 2
|
|
|
|
#define hack_Starcraft (1<<22) //StarCraft64
|
|
|
|
#define hack_Supercross (1<<23) //Supercross 2000
|
|
|
|
#define hack_TGR (1<<24) //Top Gear Rally
|
|
|
|
#define hack_TGR2 (1<<25) //Top Gear Rally 2
|
|
|
|
#define hack_Tonic (1<<26) //tonic trouble
|
2016-11-17 15:12:09 +00:00
|
|
|
#define hack_Winback (1<<27) //WinBack - Covert Operations
|
|
|
|
#define hack_Yoshi (1<<28) //Yoshi Story
|
|
|
|
#define hack_Zelda (1<<29) //zeldas hacks
|
|
|
|
#define hack_OoT (1<<30) //zelda OoT hacks
|
2016-02-01 08:56:25 +00:00
|
|
|
uint32_t hacks;
|
|
|
|
|
|
|
|
//wrapper settings
|
2016-03-27 16:51:14 +00:00
|
|
|
#ifndef ANDROID
|
2016-02-01 08:56:25 +00:00
|
|
|
int wrpResolution;
|
2016-03-10 18:29:41 +00:00
|
|
|
#endif
|
2016-02-01 08:56:25 +00:00
|
|
|
int wrpVRAM;
|
|
|
|
int wrpFBO;
|
|
|
|
int wrpAnisotropic;
|
2017-01-24 19:08:33 +00:00
|
|
|
void UpdateFrameBufferBits(uint32_t BitsToAdd, uint32_t BitsToRemove);
|
|
|
|
|
|
|
|
void ReadGameSettings(const char * name);
|
2017-01-27 06:30:19 +00:00
|
|
|
void WriteSettings(void);
|
2017-01-27 08:26:28 +00:00
|
|
|
void UpdateAspectRatio(void);
|
2017-01-24 19:08:33 +00:00
|
|
|
|
2017-01-23 18:35:27 +00:00
|
|
|
private:
|
2017-01-23 21:30:46 +00:00
|
|
|
void ReadSettings();
|
2017-01-23 18:35:27 +00:00
|
|
|
void RegisterSettings(void);
|
2017-01-23 21:16:25 +00:00
|
|
|
|
2017-01-24 19:08:33 +00:00
|
|
|
bool m_dirty;
|
2017-01-23 21:16:25 +00:00
|
|
|
bool m_FlushLogs;
|
|
|
|
char m_log_dir[260];
|
2017-01-24 19:08:33 +00:00
|
|
|
uint32_t m_frame_buffer;
|
2016-02-01 08:56:25 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
extern CSettings * g_settings;
|