2019-06-02 21:42:51 +00:00
# include <csignal>
2020-04-21 10:28:06 +00:00
# define WITHWINDOWS
2019-05-30 19:24:47 +00:00
# include "common.h"
2021-02-05 14:51:57 +00:00
# if defined DETECT_JOYSTICK_MENU && defined XINPUT
# include <xinput.h>
# if !defined(PSAPI_VERSION) || (PSAPI_VERSION > 1)
# pragma comment( lib, "Xinput9_1_0.lib" )
# else
# pragma comment( lib, "Xinput.lib" )
# endif
# endif
2019-05-30 19:24:47 +00:00
# include "Renderer.h"
2020-07-20 21:25:04 +00:00
# include "Occlusion.h"
2019-05-30 22:32:50 +00:00
# include "Credits.h"
2019-05-31 09:44:43 +00:00
# include "Camera.h"
2019-06-27 08:58:51 +00:00
# include "Weather.h"
2020-08-09 17:11:44 +00:00
# include "Timecycle.h"
2019-06-27 08:58:51 +00:00
# include "Clock.h"
# include "World.h"
# include "Vehicle.h"
2019-07-19 09:57:12 +00:00
# include "ModelIndices.h"
2019-06-27 08:58:51 +00:00
# include "Streaming.h"
# include "Boat.h"
2019-08-03 22:31:00 +00:00
# include "Heli.h"
2019-06-27 08:58:51 +00:00
# include "Automobile.h"
2020-06-02 21:35:20 +00:00
# include "Bike.h"
2020-03-22 11:26:35 +00:00
# include "Console.h"
2020-03-26 13:16:06 +00:00
# include "Debug.h"
2020-04-10 15:06:49 +00:00
# include "Hud.h"
2020-04-13 18:50:56 +00:00
# include "SceneEdit.h"
# include "Pad.h"
2020-04-16 19:19:56 +00:00
# include "PlayerPed.h"
# include "Radar.h"
2020-04-24 11:27:02 +00:00
# include "debugmenu.h"
2020-05-02 08:08:58 +00:00
# include "Frontend.h"
2020-05-29 10:03:32 +00:00
# include "WaterLevel.h"
# include "main.h"
2020-06-13 20:39:14 +00:00
# include "Script.h"
2020-08-11 16:39:53 +00:00
# include "MBlur.h"
# include "postfx.h"
2020-08-19 14:10:22 +00:00
# include "custompipes.h"
2020-11-30 22:44:58 +00:00
# include "MemoryHeap.h"
2020-12-27 20:26:00 +00:00
# include "FileMgr.h"
2021-01-23 12:59:38 +00:00
# include "Camera.h"
# include "MBlur.h"
2020-12-06 14:29:48 +00:00
# include "ControllerConfig.h"
2021-02-05 14:51:57 +00:00
# ifdef DETECT_JOYSTICK_MENU
2021-01-16 13:44:59 +00:00
# include "crossplatform.h"
# endif
2020-05-11 02:55:57 +00:00
# ifndef _WIN32
# include "assert.h"
# include <stdarg.h>
# endif
2019-07-24 16:55:43 +00:00
# include <list>
2019-07-02 18:28:20 +00:00
2020-04-17 13:31:11 +00:00
# ifdef RWLIBS
2020-04-11 15:37:20 +00:00
extern " C " int vsprintf ( char * const _Buffer , char const * const _Format , va_list _ArgList ) ;
# endif
2019-05-30 19:24:47 +00:00
2019-06-02 22:25:46 +00:00
# ifdef USE_PS2_RAND
2020-05-11 02:55:57 +00:00
unsigned long long myrand_seed = 1 ;
2019-05-30 21:49:06 +00:00
# else
unsigned long int myrand_seed = 1 ;
# endif
2019-05-30 19:24:47 +00:00
int
myrand ( void )
{
2019-06-02 22:25:46 +00:00
# ifdef USE_PS2_RAND
2019-05-30 21:49:06 +00:00
// Use our own implementation of rand, stolen from PS2
2019-05-30 19:24:47 +00:00
myrand_seed = 0x5851F42D4C957F2D * myrand_seed + 1 ;
return ( ( myrand_seed > > 32 ) & 0x7FFFFFFF ) ;
2019-05-30 21:49:06 +00:00
# else
// or original codewarrior rand
myrand_seed = myrand_seed * 1103515245 + 12345 ;
return ( ( myrand_seed > > 16 ) & 0x7FFF ) ;
# endif
2019-05-30 19:24:47 +00:00
}
void
mysrand ( unsigned int seed )
{
myrand_seed = seed ;
}
2020-12-06 14:29:48 +00:00
# ifdef CUSTOM_FRONTEND_OPTIONS
# include "frontendoption.h"
void
CustomFrontendOptionsPopulate ( void )
{
// Moved to an array in MenuScreensCustom.cpp, but APIs are still available. see frontendoption.h
2020-12-27 20:26:00 +00:00
// These work only if we have neo folder, so they're dynamically added
# ifdef EXTENDED_PIPELINES
const char * vehPipelineNames [ ] = { " FED_MFX " , " FED_NEO " } ;
const char * off_on [ ] = { " FEM_OFF " , " FEM_ON " } ;
int fd = CFileMgr : : OpenFile ( " neo/neo.txd " , " r " ) ;
if ( fd ) {
# ifdef GRAPHICS_MENU_OPTIONS
FrontendOptionSetCursor ( MENUPAGE_GRAPHICS_SETTINGS , - 3 , false ) ;
2021-01-23 12:59:38 +00:00
FrontendOptionAddSelect ( " FED_VPL " , 0 , 0 , MENUALIGN_LEFT , vehPipelineNames , ARRAY_SIZE ( vehPipelineNames ) , ( int8 * ) & CustomPipes : : VehiclePipeSwitch , false , nil , " Graphics " , " VehiclePipeline " ) ;
FrontendOptionAddSelect ( " FED_PRM " , 0 , 0 , MENUALIGN_LEFT , off_on , 2 , ( int8 * ) & CustomPipes : : RimlightEnable , false , nil , " Graphics " , " NeoRimLight " ) ;
FrontendOptionAddSelect ( " FED_WLM " , 0 , 0 , MENUALIGN_LEFT , off_on , 2 , ( int8 * ) & CustomPipes : : LightmapEnable , false , nil , " Graphics " , " NeoLightMaps " ) ;
FrontendOptionAddSelect ( " FED_RGL " , 0 , 0 , MENUALIGN_LEFT , off_on , 2 , ( int8 * ) & CustomPipes : : GlossEnable , false , nil , " Graphics " , " NeoRoadGloss " ) ;
2020-12-27 20:26:00 +00:00
# else
FrontendOptionSetCursor ( MENUPAGE_DISPLAY_SETTINGS , - 3 , false ) ;
2021-01-23 12:59:38 +00:00
FrontendOptionAddSelect ( " FED_VPL " , 0 , 0 , MENUALIGN_LEFT , vehPipelineNames , ARRAY_SIZE ( vehPipelineNames ) , ( int8 * ) & CustomPipes : : VehiclePipeSwitch , false , nil , " Graphics " , " VehiclePipeline " ) ;
FrontendOptionAddSelect ( " FED_PRM " , 0 , 0 , MENUALIGN_LEFT , off_on , 2 , ( int8 * ) & CustomPipes : : RimlightEnable , false , nil , " Graphics " , " NeoRimLight " ) ;
FrontendOptionAddSelect ( " FED_WLM " , 0 , 0 , MENUALIGN_LEFT , off_on , 2 , ( int8 * ) & CustomPipes : : LightmapEnable , false , nil , " Graphics " , " NeoLightMaps " ) ;
FrontendOptionAddSelect ( " FED_RGL " , 0 , 0 , MENUALIGN_LEFT , off_on , 2 , ( int8 * ) & CustomPipes : : GlossEnable , false , nil , " Graphics " , " NeoRoadGloss " ) ;
2020-12-27 20:26:00 +00:00
# endif
CFileMgr : : CloseFile ( fd ) ;
}
# endif
2020-12-06 14:29:48 +00:00
}
# endif
# ifdef LOAD_INI_SETTINGS
# include "ini_parser.hpp"
linb : : ini cfg ;
2021-01-23 12:59:38 +00:00
bool ReadIniIfExists ( const char * cat , const char * key , uint32 * out )
2020-12-06 14:29:48 +00:00
{
2021-01-23 12:59:38 +00:00
std : : string strval = cfg . get ( cat , key , " \xBA " ) ;
2020-12-06 14:29:48 +00:00
const char * value = strval . c_str ( ) ;
2021-01-23 12:59:38 +00:00
char * endPtr ;
if ( value & & value [ 0 ] ! = ' \xBA ' ) {
* out = strtoul ( value , & endPtr , 0 ) ;
return true ;
}
return false ;
}
2020-12-06 14:29:48 +00:00
2021-01-23 12:59:38 +00:00
bool ReadIniIfExists ( const char * cat , const char * key , bool * out )
{
std : : string strval = cfg . get ( cat , key , " \xBA " ) ;
const char * value = strval . c_str ( ) ;
char * endPtr ;
if ( value & & value [ 0 ] ! = ' \xBA ' ) {
* out = strtoul ( value , & endPtr , 0 ) ;
return true ;
}
return false ;
2020-12-06 14:29:48 +00:00
}
2021-01-23 12:59:38 +00:00
bool ReadIniIfExists ( const char * cat , const char * key , int32 * out )
2020-12-06 14:29:48 +00:00
{
2021-01-23 12:59:38 +00:00
std : : string strval = cfg . get ( cat , key , " \xBA " ) ;
2020-12-06 14:29:48 +00:00
const char * value = strval . c_str ( ) ;
2021-01-23 12:59:38 +00:00
char * endPtr ;
if ( value & & value [ 0 ] ! = ' \xBA ' ) {
* out = strtol ( value , & endPtr , 0 ) ;
return true ;
}
return false ;
}
2020-12-06 14:29:48 +00:00
2021-01-23 12:59:38 +00:00
bool ReadIniIfExists ( const char * cat , const char * key , int8 * out )
{
std : : string strval = cfg . get ( cat , key , " \xBA " ) ;
const char * value = strval . c_str ( ) ;
char * endPtr ;
if ( value & & value [ 0 ] ! = ' \xBA ' ) {
* out = strtol ( value , & endPtr , 0 ) ;
return true ;
}
return false ;
2020-12-06 14:29:48 +00:00
}
2021-01-23 12:59:38 +00:00
bool ReadIniIfExists ( const char * cat , const char * key , float * out )
2020-12-06 14:29:48 +00:00
{
2021-01-23 12:59:38 +00:00
std : : string strval = cfg . get ( cat , key , " \xBA " ) ;
const char * value = strval . c_str ( ) ;
if ( value & & value [ 0 ] ! = ' \xBA ' ) {
* out = atof ( value ) ;
return true ;
}
return false ;
}
bool ReadIniIfExists ( const char * cat , const char * key , char * out , int size )
{
std : : string strval = cfg . get ( cat , key , " \xBA " ) ;
const char * value = strval . c_str ( ) ;
if ( value & & value [ 0 ] ! = ' \xBA ' ) {
strncpy ( out , value , size ) ;
return true ;
2020-12-06 14:29:48 +00:00
}
2021-01-23 12:59:38 +00:00
return false ;
}
void StoreIni ( const char * cat , const char * key , uint32 val )
{
char temp [ 10 ] ;
sprintf ( temp , " %u " , val ) ;
cfg . set ( cat , key , temp ) ;
}
void StoreIni ( const char * cat , const char * key , uint8 val )
{
char temp [ 10 ] ;
sprintf ( temp , " %u " , ( uint32 ) val ) ;
cfg . set ( cat , key , temp ) ;
}
void StoreIni ( const char * cat , const char * key , int32 val )
{
char temp [ 10 ] ;
sprintf ( temp , " %d " , val ) ;
cfg . set ( cat , key , temp ) ;
2020-12-06 14:29:48 +00:00
}
2021-01-23 12:59:38 +00:00
void StoreIni ( const char * cat , const char * key , int8 val )
2020-12-06 14:29:48 +00:00
{
char temp [ 10 ] ;
2021-01-23 12:59:38 +00:00
sprintf ( temp , " %d " , ( int32 ) val ) ;
cfg . set ( cat , key , temp ) ;
}
void StoreIni ( const char * cat , const char * key , float val )
{
char temp [ 10 ] ;
sprintf ( temp , " %f " , val ) ;
cfg . set ( cat , key , temp ) ;
}
void StoreIni ( const char * cat , const char * key , char * val , int size )
{
cfg . set ( cat , key , val ) ;
}
const char * iniControllerActions [ ] = { " PED_FIREWEAPON " , " PED_CYCLE_WEAPON_RIGHT " , " PED_CYCLE_WEAPON_LEFT " , " GO_FORWARD " , " GO_BACK " , " GO_LEFT " , " GO_RIGHT " , " PED_SNIPER_ZOOM_IN " ,
" PED_SNIPER_ZOOM_OUT " , " VEHICLE_ENTER_EXIT " , " CAMERA_CHANGE_VIEW_ALL_SITUATIONS " , " PED_JUMPING " , " PED_SPRINT " , " PED_LOOKBEHIND " , " PED_DUCK " , " PED_ANSWER_PHONE " ,
# ifdef BIND_VEHICLE_FIREWEAPON
" VEHICLE_FIREWEAPON " ,
# endif
" VEHICLE_ACCELERATE " , " VEHICLE_BRAKE " , " VEHICLE_CHANGE_RADIO_STATION " , " VEHICLE_HORN " , " TOGGLE_SUBMISSIONS " , " VEHICLE_HANDBRAKE " , " PED_1RST_PERSON_LOOK_LEFT " ,
" PED_1RST_PERSON_LOOK_RIGHT " , " VEHICLE_LOOKLEFT " , " VEHICLE_LOOKRIGHT " , " VEHICLE_LOOKBEHIND " , " VEHICLE_TURRETLEFT " , " VEHICLE_TURRETRIGHT " , " VEHICLE_TURRETUP " , " VEHICLE_TURRETDOWN " ,
" PED_CYCLE_TARGET_LEFT " , " PED_CYCLE_TARGET_RIGHT " , " PED_CENTER_CAMERA_BEHIND_PLAYER " , " PED_LOCK_TARGET " , " NETWORK_TALK " , " PED_1RST_PERSON_LOOK_UP " , " PED_1RST_PERSON_LOOK_DOWN " ,
" _CONTROLLERACTION_36 " , " TOGGLE_DPAD " , " SWITCH_DEBUG_CAM_ON " , " TAKE_SCREEN_SHOT " , " SHOW_MOUSE_POINTER_TOGGLE " , " UNKNOWN_ACTION " } ;
const char * iniControllerTypes [ ] = { " kbd: " , " 2ndKbd: " , " mouse: " , " joy: " } ;
const char * iniMouseButtons [ ] = { " LEFT " , " MIDDLE " , " RIGHT " , " WHLUP " , " WHLDOWN " , " X1 " , " X2 " } ;
const char * iniKeyboardButtons [ ] = { " ESC " , " F1 " , " F2 " , " F3 " , " F4 " , " F5 " , " F6 " , " F7 " , " F8 " , " F9 " , " F10 " , " F11 " , " F12 " ,
" INS " , " DEL " , " HOME " , " END " , " PGUP " , " PGDN " , " UP " , " DOWN " , " LEFT " , " RIGHT " , " DIVIDE " , " TIMES " , " PLUS " , " MINUS " , " PADDEL " ,
" PADEND " , " PADDOWN " , " PADPGDN " , " PADLEFT " , " PAD5 " , " NUMLOCK " , " PADRIGHT " , " PADHOME " , " PADUP " , " PADPGUP " , " PADINS " ,
" PADENTER " , " SCROLL " , " PAUSE " , " BACKSP " , " TAB " , " CAPSLK " , " ENTER " , " LSHIFT " , " RSHIFT " , " SHIFT " , " LCTRL " , " RCTRL " , " LALT " ,
" RALT " , " LWIN " , " RWIN " , " APPS " , " NULL " } ;
void LoadINIControllerSettings ( )
{
2021-02-05 14:51:57 +00:00
# ifdef DETECT_JOYSTICK_MENU
# ifdef XINPUT
int storedJoy1 = - 1 ;
if ( ReadIniIfExists ( " Controller " , " JoystickName " , & storedJoy1 ) ) {
CPad : : XInputJoy1 = - 1 ;
CPad : : XInputJoy2 = - 1 ;
XINPUT_STATE xstate ;
memset ( & xstate , 0 , sizeof ( XINPUT_STATE ) ) ;
// Firstly confirm & set joy 1
if ( XInputGetState ( storedJoy1 , & xstate ) = = ERROR_SUCCESS ) {
CPad : : XInputJoy1 = storedJoy1 ;
}
for ( int i = 0 ; i < = 3 ; i + + ) {
if ( XInputGetState ( i , & xstate ) = = ERROR_SUCCESS ) {
if ( CPad : : XInputJoy1 = = - 1 )
CPad : : XInputJoy1 = i ;
else if ( CPad : : XInputJoy2 = = - 1 & & i ! = CPad : : XInputJoy1 )
CPad : : XInputJoy2 = i ;
}
}
}
# else
2021-01-22 20:40:28 +00:00
ReadIniIfExists ( " Controller " , " JoystickName " , gSelectedJoystickName , 128 ) ;
2021-02-05 14:51:57 +00:00
# endif
2021-01-22 20:40:28 +00:00
# endif
// force to default GTA behaviour (never overwrite bindings on joy change/initialization) if user init'ed/set bindings before we introduced that
if ( ! ReadIniIfExists ( " Controller " , " PadButtonsInited " , & ControlsManager . ms_padButtonsInited ) ) {
ControlsManager . ms_padButtonsInited = cfg . category_size ( " Bindings " ) ! = 0 ? 16 : 0 ;
}
2021-01-23 12:59:38 +00:00
for ( int32 i = 0 ; i < MAX_CONTROLLERACTIONS ; i + + ) {
char value [ 128 ] ;
if ( ReadIniIfExists ( " Bindings " , iniControllerActions [ i ] , value , 128 ) ) {
for ( int32 j = 0 ; j < MAX_CONTROLLERTYPES ; j + + ) {
ControlsManager . ClearSettingsAssociatedWithAction ( ( e_ControllerAction ) i , ( eControllerType ) j ) ;
}
for ( char * binding = strtok ( value , " , " ) ; binding ! = nil ; binding = strtok ( nil , " , " ) ) {
int contType = - 1 ;
for ( int32 k = 0 ; k < ARRAY_SIZE ( iniControllerTypes ) ; k + + ) {
int len = strlen ( iniControllerTypes [ k ] ) ;
if ( strncmp ( binding , iniControllerTypes [ k ] , len ) = = 0 ) {
contType = k ;
binding + = len ;
break ;
}
}
if ( contType = = - 1 )
continue ;
int contKey ;
if ( contType = = JOYSTICK ) {
char * temp ;
contKey = strtol ( binding , & temp , 0 ) ;
} else if ( contType = = KEYBOARD | | contType = = OPTIONAL_EXTRA ) {
if ( strlen ( binding ) = = 1 ) {
contKey = binding [ 0 ] ;
} else if ( strcmp ( binding , " SPC " ) = = 0 ) {
contKey = ' ' ;
} else {
for ( int32 k = 0 ; k < ARRAY_SIZE ( iniKeyboardButtons ) ; k + + ) {
if ( strcmp ( binding , iniKeyboardButtons [ k ] ) = = 0 ) {
contKey = 1000 + k ;
break ;
}
}
}
} else if ( contType = = MOUSE ) {
for ( int32 k = 0 ; k < ARRAY_SIZE ( iniMouseButtons ) ; k + + ) {
if ( strcmp ( binding , iniMouseButtons [ k ] ) = = 0 ) {
contKey = 1 + k ;
break ;
}
}
}
ControlsManager . SetControllerKeyAssociatedWithAction ( ( e_ControllerAction ) i , contKey , ( eControllerType ) contType ) ;
}
}
2020-12-06 14:29:48 +00:00
}
}
2021-01-23 12:59:38 +00:00
void SaveINIControllerSettings ( )
{
for ( int32 i = 0 ; i < MAX_CONTROLLERACTIONS ; i + + ) {
char value [ 128 ] = { ' \0 ' } ;
// upper limit should've been GetNumOfSettingsForAction(i), but sadly even R* doesn't use it's own system correctly, and there are gaps between orders.
for ( int32 j = SETORDER_1 ; j < MAX_SETORDERS ; j + + ) {
// We respect the m_ContSetOrder, and join/implode/order the bindings according to that; using comma as seperator.
for ( int32 k = 0 ; k < MAX_CONTROLLERTYPES ; k + + ) {
if ( ControlsManager . m_aSettings [ i ] [ k ] . m_ContSetOrder = = j ) {
char next [ 32 ] ;
if ( k = = JOYSTICK ) {
snprintf ( next , 32 , " %s%d, " , iniControllerTypes [ k ] , ControlsManager . m_aSettings [ i ] [ k ] . m_Key ) ;
} else if ( k = = KEYBOARD | | k = = OPTIONAL_EXTRA ) {
if ( ControlsManager . m_aSettings [ i ] [ k ] . m_Key = = ' ' )
snprintf ( next , 32 , " %sSPC, " , iniControllerTypes [ k ] ) ;
else if ( ControlsManager . m_aSettings [ i ] [ k ] . m_Key < 256 )
snprintf ( next , 32 , " %s%c, " , iniControllerTypes [ k ] , ControlsManager . m_aSettings [ i ] [ k ] . m_Key ) ;
else
snprintf ( next , 32 , " %s%s, " , iniControllerTypes [ k ] , iniKeyboardButtons [ ControlsManager . m_aSettings [ i ] [ k ] . m_Key - 1000 ] ) ;
} else if ( k = = MOUSE ) {
snprintf ( next , 32 , " %s%s, " , iniControllerTypes [ k ] , iniMouseButtons [ ControlsManager . m_aSettings [ i ] [ k ] . m_Key - 1 ] ) ;
}
strcat ( value , next ) ;
break ;
}
}
}
int len = strlen ( value ) ;
if ( len > 0 )
value [ len - 1 ] = ' \0 ' ; // to remove comma
StoreIni ( " Bindings " , iniControllerActions [ i ] , value , 128 ) ;
}
2021-02-05 14:51:57 +00:00
# ifdef DETECT_JOYSTICK_MENU
# ifdef XINPUT
StoreIni ( " Controller " , " JoystickName " , CPad : : XInputJoy1 ) ;
# else
2021-01-22 20:40:28 +00:00
StoreIni ( " Controller " , " JoystickName " , gSelectedJoystickName , 128 ) ;
2021-02-05 14:51:57 +00:00
# endif
2021-01-22 20:40:28 +00:00
# endif
StoreIni ( " Controller " , " PadButtonsInited " , ControlsManager . ms_padButtonsInited ) ;
cfg . write_file ( " reVC.ini " ) ;
2021-01-23 12:59:38 +00:00
}
2021-01-22 20:40:28 +00:00
bool LoadINISettings ( )
2020-12-06 14:29:48 +00:00
{
2021-01-22 20:40:28 +00:00
if ( ! cfg . load_file ( " reVC.ini " ) )
return false ;
2020-12-06 14:29:48 +00:00
2021-01-23 12:59:38 +00:00
# ifdef IMPROVED_VIDEOMODE
ReadIniIfExists ( " VideoMode " , " Width " , & FrontEndMenuManager . m_nPrefsWidth ) ;
ReadIniIfExists ( " VideoMode " , " Height " , & FrontEndMenuManager . m_nPrefsHeight ) ;
ReadIniIfExists ( " VideoMode " , " Depth " , & FrontEndMenuManager . m_nPrefsDepth ) ;
ReadIniIfExists ( " VideoMode " , " Subsystem " , & FrontEndMenuManager . m_nPrefsSubsystem ) ;
// Windowed mode is loaded below in CUSTOM_FRONTEND_OPTIONS section
# else
ReadIniIfExists ( " Graphics " , " VideoMode " , & FrontEndMenuManager . m_nDisplayVideoMode ) ;
# endif
ReadIniIfExists ( " Controller " , " HeadBob1stPerson " , & TheCamera . m_bHeadBob ) ;
ReadIniIfExists ( " Controller " , " HorizantalMouseSens " , & TheCamera . m_fMouseAccelHorzntl ) ;
ReadIniIfExists ( " Controller " , " InvertMouseVertically " , & MousePointerStateHelper . bInvertVertically ) ;
ReadIniIfExists ( " Controller " , " DisableMouseSteering " , & CVehicle : : m_bDisableMouseSteering ) ;
2021-02-10 07:16:04 +00:00
ReadIniIfExists ( " Controller " , " Vibration " , & FrontEndMenuManager . m_PrefsUseVibration ) ;
2021-01-23 12:59:38 +00:00
ReadIniIfExists ( " Audio " , " SfxVolume " , & FrontEndMenuManager . m_PrefsSfxVolume ) ;
ReadIniIfExists ( " Audio " , " MusicVolume " , & FrontEndMenuManager . m_PrefsMusicVolume ) ;
ReadIniIfExists ( " Audio " , " MP3BoostVolume " , & FrontEndMenuManager . m_PrefsMP3BoostVolume ) ;
ReadIniIfExists ( " Audio " , " Radio " , & FrontEndMenuManager . m_PrefsRadioStation ) ;
ReadIniIfExists ( " Audio " , " SpeakerType " , & FrontEndMenuManager . m_PrefsSpeakers ) ;
ReadIniIfExists ( " Audio " , " Provider " , & FrontEndMenuManager . m_nPrefsAudio3DProviderIndex ) ;
ReadIniIfExists ( " Audio " , " DynamicAcoustics " , & FrontEndMenuManager . m_PrefsDMA ) ;
ReadIniIfExists ( " Display " , " Brightness " , & FrontEndMenuManager . m_PrefsBrightness ) ;
ReadIniIfExists ( " Display " , " DrawDistance " , & FrontEndMenuManager . m_PrefsLOD ) ;
ReadIniIfExists ( " Display " , " Subtitles " , & FrontEndMenuManager . m_PrefsShowSubtitles ) ;
ReadIniIfExists ( " Graphics " , " AspectRatio " , & FrontEndMenuManager . m_PrefsUseWideScreen ) ;
ReadIniIfExists ( " Graphics " , " FrameLimiter " , & FrontEndMenuManager . m_PrefsFrameLimiter ) ;
# ifdef LEGACY_MENU_OPTIONS
ReadIniIfExists ( " Graphics " , " VSync " , & FrontEndMenuManager . m_PrefsVsyncDisp ) ;
ReadIniIfExists ( " Graphics " , " Trails " , & CMBlur : : BlurOn ) ;
# endif
ReadIniIfExists ( " General " , " SkinFile " , FrontEndMenuManager . m_PrefsSkinFile , 256 ) ;
ReadIniIfExists ( " Controller " , " Method " , & FrontEndMenuManager . m_ControlMethod ) ;
ReadIniIfExists ( " General " , " Language " , & FrontEndMenuManager . m_PrefsLanguage ) ;
ReadIniIfExists ( " Display " , " ShowHud " , & FrontEndMenuManager . m_PrefsShowHud ) ;
ReadIniIfExists ( " Display " , " RadarMode " , & FrontEndMenuManager . m_PrefsRadarMode ) ;
ReadIniIfExists ( " Display " , " ShowLegends " , & FrontEndMenuManager . m_PrefsShowLegends ) ;
# ifdef EXTENDED_COLOURFILTER
ReadIniIfExists ( " CustomPipesValues " , " PostFXIntensity " , & CPostFX : : Intensity ) ;
# endif
# ifdef EXTENDED_PIPELINES
ReadIniIfExists ( " CustomPipesValues " , " NeoVehicleShininess " , & CustomPipes : : VehicleShininess ) ;
ReadIniIfExists ( " CustomPipesValues " , " NeoVehicleSpecularity " , & CustomPipes : : VehicleSpecularity ) ;
ReadIniIfExists ( " CustomPipesValues " , " RimlightMult " , & CustomPipes : : RimlightMult ) ;
ReadIniIfExists ( " CustomPipesValues " , " LightmapMult " , & CustomPipes : : LightmapMult ) ;
ReadIniIfExists ( " CustomPipesValues " , " GlossMult " , & CustomPipes : : GlossMult ) ;
# endif
2021-01-29 15:41:34 +00:00
ReadIniIfExists ( " Rendering " , " BackfaceCulling " , & gBackfaceCulling ) ;
# ifdef NEW_RENDERER
2021-01-29 15:43:17 +00:00
ReadIniIfExists ( " Rendering " , " NewRenderer " , & gbNewRenderer ) ;
2021-01-29 15:41:34 +00:00
# endif
2021-01-23 12:59:38 +00:00
# ifdef PROPER_SCALING
ReadIniIfExists ( " Draw " , " ProperScaling " , & CDraw : : ms_bProperScaling ) ;
# endif
# ifdef FIX_RADAR
ReadIniIfExists ( " Draw " , " FixRadar " , & CDraw : : ms_bFixRadar ) ;
# endif
# ifdef FIX_SPRITES
ReadIniIfExists ( " Draw " , " FixSprites " , & CDraw : : ms_bFixSprites ) ;
# endif
2020-12-06 14:29:48 +00:00
# ifdef CUSTOM_FRONTEND_OPTIONS
2021-01-23 13:04:19 +00:00
bool migrate = cfg . category_size ( " FrontendOptions " ) ! = 0 ;
2020-12-06 14:29:48 +00:00
for ( int i = 0 ; i < MENUPAGES ; i + + ) {
for ( int j = 0 ; j < NUM_MENUROWS ; j + + ) {
CMenuScreenCustom : : CMenuEntry & option = aScreens [ i ] . m_aEntries [ j ] ;
if ( option . m_Action = = MENUACTION_NOTHING )
break ;
// CFO check
if ( option . m_Action < MENUACTION_NOTHING & & option . m_CFO - > save ) {
// CFO only supports saving uint8 right now
2021-01-23 13:04:19 +00:00
// Migrate from old .ini to new .ini
if ( migrate & & ReadIniIfExists ( " FrontendOptions " , option . m_CFO - > save , option . m_CFO - > value ) )
cfg . remove ( " FrontendOptions " , option . m_CFO - > save ) ;
else
ReadIniIfExists ( option . m_CFO - > saveCat , option . m_CFO - > save , option . m_CFO - > value ) ;
2020-12-06 14:29:48 +00:00
if ( option . m_Action = = MENUACTION_CFO_SELECT ) {
option . m_CFOSelect - > lastSavedValue = option . m_CFOSelect - > displayedValue = * option . m_CFO - > value ;
}
}
}
}
# endif
2021-01-22 20:40:28 +00:00
return true ;
2021-01-23 12:59:38 +00:00
}
void SaveINISettings ( )
{
# ifdef IMPROVED_VIDEOMODE
StoreIni ( " VideoMode " , " Width " , FrontEndMenuManager . m_nPrefsWidth ) ;
StoreIni ( " VideoMode " , " Height " , FrontEndMenuManager . m_nPrefsHeight ) ;
StoreIni ( " VideoMode " , " Depth " , FrontEndMenuManager . m_nPrefsDepth ) ;
StoreIni ( " VideoMode " , " Subsystem " , FrontEndMenuManager . m_nPrefsSubsystem ) ;
// Windowed mode is loaded below in CUSTOM_FRONTEND_OPTIONS section
# else
StoreIni ( " Graphics " , " VideoMode " , FrontEndMenuManager . m_nDisplayVideoMode ) ;
# endif
StoreIni ( " Controller " , " HeadBob1stPerson " , TheCamera . m_bHeadBob ) ;
StoreIni ( " Controller " , " HorizantalMouseSens " , TheCamera . m_fMouseAccelHorzntl ) ;
StoreIni ( " Controller " , " InvertMouseVertically " , MousePointerStateHelper . bInvertVertically ) ;
StoreIni ( " Controller " , " DisableMouseSteering " , CVehicle : : m_bDisableMouseSteering ) ;
2021-02-10 07:16:04 +00:00
StoreIni ( " Controller " , " Vibration " , FrontEndMenuManager . m_PrefsUseVibration ) ;
2021-01-23 12:59:38 +00:00
StoreIni ( " Audio " , " SfxVolume " , FrontEndMenuManager . m_PrefsSfxVolume ) ;
StoreIni ( " Audio " , " MusicVolume " , FrontEndMenuManager . m_PrefsMusicVolume ) ;
StoreIni ( " Audio " , " MP3BoostVolume " , FrontEndMenuManager . m_PrefsMP3BoostVolume ) ;
StoreIni ( " Audio " , " Radio " , FrontEndMenuManager . m_PrefsRadioStation ) ;
StoreIni ( " Audio " , " SpeakerType " , FrontEndMenuManager . m_PrefsSpeakers ) ;
StoreIni ( " Audio " , " Provider " , FrontEndMenuManager . m_nPrefsAudio3DProviderIndex ) ;
StoreIni ( " Audio " , " DynamicAcoustics " , FrontEndMenuManager . m_PrefsDMA ) ;
StoreIni ( " Display " , " Brightness " , FrontEndMenuManager . m_PrefsBrightness ) ;
StoreIni ( " Display " , " DrawDistance " , FrontEndMenuManager . m_PrefsLOD ) ;
StoreIni ( " Display " , " Subtitles " , FrontEndMenuManager . m_PrefsShowSubtitles ) ;
StoreIni ( " Graphics " , " AspectRatio " , FrontEndMenuManager . m_PrefsUseWideScreen ) ;
# ifdef LEGACY_MENU_OPTIONS
StoreIni ( " Graphics " , " VSync " , FrontEndMenuManager . m_PrefsVsyncDisp ) ;
StoreIni ( " Graphics " , " Trails " , CMBlur : : BlurOn ) ;
# endif
StoreIni ( " Graphics " , " FrameLimiter " , FrontEndMenuManager . m_PrefsFrameLimiter ) ;
StoreIni ( " General " , " SkinFile " , FrontEndMenuManager . m_PrefsSkinFile , 256 ) ;
StoreIni ( " Controller " , " Method " , FrontEndMenuManager . m_ControlMethod ) ;
StoreIni ( " General " , " Language " , FrontEndMenuManager . m_PrefsLanguage ) ;
StoreIni ( " Display " , " ShowHud " , FrontEndMenuManager . m_PrefsShowHud ) ;
StoreIni ( " Display " , " RadarMode " , FrontEndMenuManager . m_PrefsRadarMode ) ;
StoreIni ( " Display " , " ShowLegends " , FrontEndMenuManager . m_PrefsShowLegends ) ;
2020-12-06 14:29:48 +00:00
# ifdef EXTENDED_COLOURFILTER
2021-01-23 12:59:38 +00:00
StoreIni ( " CustomPipesValues " , " PostFXIntensity " , CPostFX : : Intensity ) ;
2020-12-06 14:29:48 +00:00
# endif
# ifdef EXTENDED_PIPELINES
2021-01-23 12:59:38 +00:00
StoreIni ( " CustomPipesValues " , " NeoVehicleShininess " , CustomPipes : : VehicleShininess ) ;
StoreIni ( " CustomPipesValues " , " NeoVehicleSpecularity " , CustomPipes : : VehicleSpecularity ) ;
StoreIni ( " CustomPipesValues " , " RimlightMult " , CustomPipes : : RimlightMult ) ;
StoreIni ( " CustomPipesValues " , " LightmapMult " , CustomPipes : : LightmapMult ) ;
StoreIni ( " CustomPipesValues " , " GlossMult " , CustomPipes : : GlossMult ) ;
2020-12-06 14:29:48 +00:00
# endif
2021-01-23 12:59:38 +00:00
StoreIni ( " Rendering " , " BackfaceCulling " , gBackfaceCulling ) ;
2021-01-29 15:41:34 +00:00
# ifdef NEW_RENDERER
StoreIni ( " Rendering " , " NewRenderer " , gbNewRenderer ) ;
# endif
2021-01-23 12:59:38 +00:00
# ifdef PROPER_SCALING
StoreIni ( " Draw " , " ProperScaling " , CDraw : : ms_bProperScaling ) ;
2021-01-08 22:01:41 +00:00
# endif
# ifdef FIX_RADAR
2021-01-23 12:59:38 +00:00
StoreIni ( " Draw " , " FixRadar " , CDraw : : ms_bFixRadar ) ;
2021-01-08 22:01:41 +00:00
# endif
# ifdef FIX_SPRITES
2021-01-23 12:59:38 +00:00
StoreIni ( " Draw " , " FixSprites " , CDraw : : ms_bFixSprites ) ;
2021-01-08 22:01:41 +00:00
# endif
2020-12-06 14:29:48 +00:00
# ifdef CUSTOM_FRONTEND_OPTIONS
for ( int i = 0 ; i < MENUPAGES ; i + + ) {
for ( int j = 0 ; j < NUM_MENUROWS ; j + + ) {
CMenuScreenCustom : : CMenuEntry & option = aScreens [ i ] . m_aEntries [ j ] ;
if ( option . m_Action = = MENUACTION_NOTHING )
break ;
if ( option . m_Action < MENUACTION_NOTHING & & option . m_CFO - > save ) {
// Beware: CFO only supports saving uint8 right now
2021-01-23 12:59:38 +00:00
StoreIni ( option . m_CFO - > saveCat , option . m_CFO - > save , * option . m_CFO - > value ) ;
2020-12-06 14:29:48 +00:00
}
}
}
# endif
2021-01-23 12:59:38 +00:00
cfg . write_file ( " reVC.ini " ) ;
2020-12-06 14:29:48 +00:00
}
# endif
2020-05-09 13:06:13 +00:00
# ifdef DEBUGMENU
2020-06-03 21:48:26 +00:00
void WeaponCheat1 ( ) ;
void WeaponCheat2 ( ) ;
void WeaponCheat3 ( ) ;
2019-06-27 08:58:51 +00:00
void HealthCheat ( ) ;
2020-08-30 20:47:12 +00:00
void VehicleCheat ( int model ) ;
2019-06-27 08:58:51 +00:00
void BlowUpCarsCheat ( ) ;
void ChangePlayerCheat ( ) ;
void MayhemCheat ( ) ;
void EverybodyAttacksPlayerCheat ( ) ;
void WeaponsForAllCheat ( ) ;
void FastTimeCheat ( ) ;
void SlowTimeCheat ( ) ;
void MoneyCheat ( ) ;
void ArmourCheat ( ) ;
void WantedLevelUpCheat ( ) ;
void WantedLevelDownCheat ( ) ;
void SunnyWeatherCheat ( ) ;
void CloudyWeatherCheat ( ) ;
void RainyWeatherCheat ( ) ;
void FoggyWeatherCheat ( ) ;
void FastWeatherCheat ( ) ;
void OnlyRenderWheelsCheat ( ) ;
void ChittyChittyBangBangCheat ( ) ;
void StrongGripCheat ( ) ;
2020-10-07 21:21:44 +00:00
void SpecialCarCheats ( ) ;
void PickUpChicksCheat ( ) ;
2019-06-27 08:58:51 +00:00
2019-07-19 09:57:12 +00:00
DebugMenuEntry * carCol1 ;
DebugMenuEntry * carCol2 ;
2019-06-27 08:58:51 +00:00
void
2019-07-19 09:57:12 +00:00
SpawnCar ( int id )
2019-06-27 08:58:51 +00:00
{
CVector playerpos ;
CStreaming : : RequestModel ( id , 0 ) ;
CStreaming : : LoadAllRequestedModels ( false ) ;
2019-06-28 10:34:02 +00:00
if ( CStreaming : : HasModelLoaded ( id ) ) {
2019-07-19 09:57:12 +00:00
playerpos = FindPlayerCoors ( ) ;
2020-03-26 13:16:06 +00:00
int node ;
if ( ! CModelInfo : : IsBoatModel ( id ) ) {
node = ThePaths . FindNodeClosestToCoors ( playerpos , 0 , 100.0f , false , false ) ;
if ( node < 0 )
return ;
}
2019-06-27 08:58:51 +00:00
CVehicle * v ;
2019-07-19 09:57:12 +00:00
if ( CModelInfo : : IsBoatModel ( id ) )
2020-03-26 13:16:06 +00:00
v = new CBoat ( id , RANDOM_VEHICLE ) ;
2020-06-15 21:20:34 +00:00
else if ( CModelInfo : : IsBikeModel ( id ) )
2020-06-02 21:35:20 +00:00
v = new CBike ( id , RANDOM_VEHICLE ) ;
2019-07-19 09:57:12 +00:00
else
v = new CAutomobile ( id , RANDOM_VEHICLE ) ;
v - > bHasBeenOwnedByPlayer = true ;
if ( carCol1 )
DebugMenuEntrySetAddress ( carCol1 , & v - > m_currentColour1 ) ;
if ( carCol2 )
DebugMenuEntrySetAddress ( carCol2 , & v - > m_currentColour2 ) ;
2020-03-26 13:16:06 +00:00
if ( CModelInfo : : IsBoatModel ( id ) )
2020-05-02 12:28:19 +00:00
v - > SetPosition ( TheCamera . GetPosition ( ) + TheCamera . GetForward ( ) * 15.0f ) ;
2020-03-26 13:16:06 +00:00
else
2020-05-03 13:57:57 +00:00
v - > SetPosition ( ThePaths . m_pathNodes [ node ] . GetPosition ( ) ) ;
2020-03-26 13:16:06 +00:00
2020-05-02 12:28:19 +00:00
v - > GetMatrix ( ) . GetPosition ( ) . z + = 4.0f ;
2019-07-19 09:57:12 +00:00
v - > SetOrientation ( 0.0f , 0.0f , 3.49f ) ;
2020-04-30 13:45:45 +00:00
v - > SetStatus ( STATUS_ABANDONED ) ;
2019-07-19 09:57:12 +00:00
v - > m_nDoorLock = CARLOCK_UNLOCKED ;
2019-06-27 08:58:51 +00:00
CWorld : : Add ( v ) ;
}
}
2019-07-11 10:48:49 +00:00
static void
2019-07-08 19:37:47 +00:00
FixCar ( void )
{
CVehicle * veh = FindPlayerVehicle ( ) ;
2019-07-09 21:49:44 +00:00
if ( veh = = nil )
2019-07-08 19:37:47 +00:00
return ;
2019-07-09 21:49:44 +00:00
veh - > m_fHealth = 1000.0f ;
2020-06-02 21:35:20 +00:00
if ( veh - > IsCar ( ) ) {
( ( CAutomobile * ) veh ) - > Damage . SetEngineStatus ( 0 ) ;
( ( CAutomobile * ) veh ) - > Fix ( ) ;
} else if ( veh - > IsBike ( ) ) {
( ( CBike * ) veh ) - > Fix ( ) ;
}
2019-07-08 19:37:47 +00:00
}
2020-07-04 20:50:43 +00:00
# ifdef MAP_ENHANCEMENTS
2020-04-16 19:19:56 +00:00
static void
TeleportToWaypoint ( void )
{
if ( FindPlayerVehicle ( ) ) {
if ( CRadar : : TargetMarkerId ! = - 1 )
FindPlayerVehicle ( ) - > Teleport ( CRadar : : TargetMarkerPos + CVector ( 0.0f , 0.0f , FindPlayerVehicle ( ) - > GetColModel ( ) - > boundingSphere . center . z ) ) ;
} else
if ( CRadar : : TargetMarkerId ! = - 1 )
FindPlayerPed ( ) - > Teleport ( CRadar : : TargetMarkerPos + CVector ( 0.0f , 0.0f , FEET_OFFSET ) ) ;
}
# endif
2020-05-25 20:59:55 +00:00
static void
SwitchCarCollision ( void )
{
if ( FindPlayerVehicle ( ) & & FindPlayerVehicle ( ) - > IsCar ( ) )
FindPlayerVehicle ( ) - > bUsesCollision = ! FindPlayerVehicle ( ) - > bUsesCollision ;
}
2019-07-26 16:48:14 +00:00
static int engineStatus ;
static void
SetEngineStatus ( void )
{
CVehicle * veh = FindPlayerVehicle ( ) ;
if ( veh = = nil )
return ;
if ( ! veh - > IsCar ( ) )
return ;
( ( CAutomobile * ) veh ) - > Damage . SetEngineStatus ( engineStatus ) ;
}
2019-07-11 10:48:49 +00:00
static void
ToggleComedy ( void )
{
CVehicle * veh = FindPlayerVehicle ( ) ;
if ( veh = = nil )
return ;
veh - > bComedyControls = ! veh - > bComedyControls ;
}
2019-07-23 14:39:30 +00:00
static void
PlaceOnRoad ( void )
{
CVehicle * veh = FindPlayerVehicle ( ) ;
if ( veh = = nil )
return ;
if ( veh - > IsCar ( ) )
( ( CAutomobile * ) veh ) - > PlaceOnRoadProperly ( ) ;
}
2020-03-26 13:16:06 +00:00
static void
ResetCamStatics ( void )
{
TheCamera . Cams [ TheCamera . ActiveCam ] . ResetStatics = true ;
}
2020-06-13 20:39:14 +00:00
# ifdef MISSION_SWITCHER
int8 nextMissionToSwitch = 0 ;
static void
SwitchToMission ( void )
{
2020-06-14 21:26:19 +00:00
CTheScripts : : SwitchToMission ( nextMissionToSwitch ) ;
2020-06-13 20:39:14 +00:00
}
# endif
2019-07-19 09:57:12 +00:00
static const char * carnames [ ] = {
2020-05-07 09:47:08 +00:00
" landstal " , " idaho " , " stinger " , " linerun " , " peren " , " sentinel " , " rio " , " firetruk " , " trash " , " stretch " , " manana " ,
2020-05-07 09:33:20 +00:00
" infernus " , " voodoo " , " pony " , " mule " , " cheetah " , " ambulan " , " fbicar " , " moonbeam " , " esperant " , " taxi " , " washing " ,
" bobcat " , " mrwhoop " , " bfinject " , " hunter " , " police " , " enforcer " , " securica " , " banshee " , " predator " , " bus " ,
" rhino " , " barracks " , " cuban " , " chopper " , " angel " , " coach " , " cabbie " , " stallion " , " rumpo " , " rcbandit " , " romero " ,
" packer " , " sentxs " , " admiral " , " squalo " , " seaspar " , " pizzaboy " , " gangbur " , " airtrain " , " deaddodo " , " speeder " ,
" reefer " , " tropic " , " flatbed " , " yankee " , " caddy " , " zebra " , " topfun " , " skimmer " , " pcj600 " , " faggio " , " freeway " ,
" rcbaron " , " rcraider " , " glendale " , " oceanic " , " sanchez " , " sparrow " , " patriot " , " lovefist " , " coastg " , " dinghy " ,
" hermes " , " sabre " , " sabretur " , " pheonix " , " walton " , " regina " , " comet " , " deluxo " , " burrito " , " spand " , " marquis " ,
" baggage " , " kaufman " , " maverick " , " vcnmav " , " rancher " , " fbiranch " , " virgo " , " greenwoo " , " jetmax " , " hotring " ,
" sandking " , " blistac " , " polmav " , " boxville " , " benson " , " mesa " , " rcgoblin " , " hotrina " , " hotrinb " ,
2020-05-07 09:47:08 +00:00
" bloodra " , " bloodrb " , " vicechee "
2019-07-19 09:57:12 +00:00
} ;
2020-05-11 02:55:57 +00:00
static CTweakVar * * TweakVarsList ;
static int TweakVarsListSize = - 1 ;
2019-07-24 16:55:43 +00:00
static bool bAddTweakVarsNow = false ;
static const char * pTweakVarsDefaultPath = NULL ;
void CTweakVars : : Add ( CTweakVar * var )
{
2020-05-11 02:55:57 +00:00
if ( TweakVarsListSize = = - 1 ) {
TweakVarsList = ( CTweakVar * * ) malloc ( 64 * sizeof ( CTweakVar * ) ) ;
TweakVarsListSize = 0 ;
}
if ( TweakVarsListSize > 63 )
2021-01-31 14:01:46 +00:00
TweakVarsList = ( CTweakVar * * ) realloc ( TweakVarsList , ( TweakVarsListSize + 1 ) * sizeof ( CTweakVar * ) ) ;
2020-05-11 02:55:57 +00:00
TweakVarsList [ TweakVarsListSize + + ] = var ;
// TweakVarsList.push_back(var);
2019-07-24 16:55:43 +00:00
if ( bAddTweakVarsNow )
var - > AddDBG ( pTweakVarsDefaultPath ) ;
}
void CTweakVars : : AddDBG ( const char * path )
{
pTweakVarsDefaultPath = path ;
2020-05-11 02:55:57 +00:00
for ( int i = 0 ; i < TweakVarsListSize ; + + i )
TweakVarsList [ i ] - > AddDBG ( pTweakVarsDefaultPath ) ;
2019-07-24 16:55:43 +00:00
bAddTweakVarsNow = true ;
}
void CTweakSwitch : : AddDBG ( const char * path )
{
DebugMenuEntry * e = DebugMenuAddVar ( m_pPath = = NULL ? path : m_pPath , m_pVarName , ( int32_t * ) m_pIntVar , m_pFunc , 1 , m_nMin , m_nMax , m_aStr ) ;
DebugMenuEntrySetWrap ( e , true ) ;
}
void CTweakFunc : : AddDBG ( const char * path ) { DebugMenuAddCmd ( m_pPath = = NULL ? path : m_pPath , m_pVarName , m_pFunc ) ; }
void CTweakBool : : AddDBG ( const char * path ) { DebugMenuAddVarBool8 ( m_pPath = = NULL ? path : m_pPath , m_pVarName , ( int8_t * ) m_pBoolVar , NULL ) ; }
void CTweakInt8 : : AddDBG ( const char * path ) { DebugMenuAddVar ( m_pPath = = NULL ? path : m_pPath , m_pVarName , ( int8_t * ) m_pIntVar , NULL , m_nStep , m_nLoawerBound , m_nUpperBound , NULL ) ; }
void CTweakUInt8 : : AddDBG ( const char * path ) { DebugMenuAddVar ( m_pPath = = NULL ? path : m_pPath , m_pVarName , ( uint8_t * ) m_pIntVar , NULL , m_nStep , m_nLoawerBound , m_nUpperBound , NULL ) ; }
void CTweakInt16 : : AddDBG ( const char * path ) { DebugMenuAddVar ( m_pPath = = NULL ? path : m_pPath , m_pVarName , ( int16_t * ) m_pIntVar , NULL , m_nStep , m_nLoawerBound , m_nUpperBound , NULL ) ; }
void CTweakUInt16 : : AddDBG ( const char * path ) { DebugMenuAddVar ( m_pPath = = NULL ? path : m_pPath , m_pVarName , ( uint16_t * ) m_pIntVar , NULL , m_nStep , m_nLoawerBound , m_nUpperBound , NULL ) ; }
void CTweakInt32 : : AddDBG ( const char * path ) { DebugMenuAddVar ( m_pPath = = NULL ? path : m_pPath , m_pVarName , ( int32_t * ) m_pIntVar , NULL , m_nStep , m_nLoawerBound , m_nUpperBound , NULL ) ; }
void CTweakUInt32 : : AddDBG ( const char * path ) { DebugMenuAddVar ( m_pPath = = NULL ? path : m_pPath , m_pVarName , ( uint32_t * ) m_pIntVar , NULL , m_nStep , m_nLoawerBound , m_nUpperBound , NULL ) ; }
void CTweakFloat : : AddDBG ( const char * path ) { DebugMenuAddVar ( m_pPath = = NULL ? path : m_pPath , m_pVarName , ( float * ) m_pIntVar , NULL , m_nStep , m_nLoawerBound , m_nUpperBound ) ; }
/*
static const char * wt [ ] = {
" Sunny " , " Cloudy " , " Rainy " , " Foggy "
} ;
SETTWEAKPATH ( " TEST " ) ;
TWEAKSWITCH ( CWeather : : NewWeatherType , 0 , 3 , wt , NULL ) ;
*/
2020-08-23 11:27:37 +00:00
void
switchWeather ( void )
{
CWeather : : StreamAfterRainTimer = 0 ;
}
2019-06-12 10:34:22 +00:00
void
DebugMenuPopulate ( void )
2019-05-30 19:24:47 +00:00
{
2020-04-24 11:27:02 +00:00
if ( 1 ) {
2019-06-27 08:58:51 +00:00
static const char * weathers [ ] = {
2020-05-24 13:14:27 +00:00
" Sunny " , " Cloudy " , " Rainy " , " Foggy " , " Extrasunny " , " Stormy "
2019-06-27 08:58:51 +00:00
} ;
2020-08-09 17:11:44 +00:00
static const char * extracols [ ] = {
" 1 - Malibu club " ,
" 2 - Strib club " ,
" 3 - Hotel " ,
" 4 - Bank " ,
" 5 - Police HQ " ,
" 6 - Mall " ,
" 7 - Rifle Range " ,
" 8 - Mansion " ,
" 9 - Dirt ring " ,
" 10 - Blood ring " ,
" 11 - Hot ring " ,
" 12 - Concert hall " ,
" 13 - Auntie Poulets " ,
" 14 - Intro at docks " ,
" 15 - Biker bar " ,
" 16 - Intro cafe " ,
" 17 - Studio " ,
" 18 " , " 19 " , " 20 " , " 21 " , " 22 " , " 23 " , " 24 "
} ;
2019-06-27 08:58:51 +00:00
DebugMenuEntry * e ;
e = DebugMenuAddVar ( " Time & Weather " , " Current Hour " , & CClock : : GetHoursRef ( ) , nil , 1 , 0 , 23 , nil ) ;
DebugMenuEntrySetWrap ( e , true ) ;
e = DebugMenuAddVar ( " Time & Weather " , " Current Minute " , & CClock : : GetMinutesRef ( ) ,
[ ] ( ) { CWeather : : InterpolationValue = CClock : : GetMinutes ( ) / 60.0f ; } , 1 , 0 , 59 , nil ) ;
DebugMenuEntrySetWrap ( e , true ) ;
2020-08-23 11:27:37 +00:00
e = DebugMenuAddVar ( " Time & Weather " , " Old Weather " , ( int16 * ) & CWeather : : OldWeatherType , switchWeather , 1 , 0 , 5 , weathers ) ;
2019-06-27 08:58:51 +00:00
DebugMenuEntrySetWrap ( e , true ) ;
2020-08-23 11:27:37 +00:00
e = DebugMenuAddVar ( " Time & Weather " , " New Weather " , ( int16 * ) & CWeather : : NewWeatherType , switchWeather , 1 , 0 , 5 , weathers ) ;
2019-06-27 08:58:51 +00:00
DebugMenuEntrySetWrap ( e , true ) ;
2020-08-13 20:39:55 +00:00
DebugMenuAddVarBool32 ( " Time & Weather " , " Extracolours On " , & CTimeCycle : : m_bExtraColourOn , nil ) ;
2020-08-09 17:11:44 +00:00
DebugMenuAddVar ( " Time & Weather " , " Extracolour " , & CTimeCycle : : m_ExtraColour , nil , 1 , 0 , 23 , extracols ) ;
2020-04-24 11:27:02 +00:00
DebugMenuAddVar ( " Time & Weather " , " Time scale " , ( float * ) & CTimer : : GetTimeScale ( ) , nil , 0.1f , 0.0f , 10.0f ) ;
2019-06-27 08:58:51 +00:00
2020-06-03 21:48:26 +00:00
DebugMenuAddCmd ( " Cheats " , " Weapon set 1 " , WeaponCheat1 ) ;
DebugMenuAddCmd ( " Cheats " , " Weapon set 2 " , WeaponCheat2 ) ;
DebugMenuAddCmd ( " Cheats " , " Weapon set 3 " , WeaponCheat3 ) ;
2019-06-27 08:58:51 +00:00
DebugMenuAddCmd ( " Cheats " , " Money " , MoneyCheat ) ;
DebugMenuAddCmd ( " Cheats " , " Health " , HealthCheat ) ;
DebugMenuAddCmd ( " Cheats " , " Wanted level up " , WantedLevelUpCheat ) ;
DebugMenuAddCmd ( " Cheats " , " Wanted level down " , WantedLevelDownCheat ) ;
2020-08-30 20:47:12 +00:00
DebugMenuAddCmd ( " Cheats " , " Tank " , [ ] ( ) { VehicleCheat ( MI_TAXI ) ; } ) ;
2019-06-27 08:58:51 +00:00
DebugMenuAddCmd ( " Cheats " , " Blow up cars " , BlowUpCarsCheat ) ;
DebugMenuAddCmd ( " Cheats " , " Change player " , ChangePlayerCheat ) ;
DebugMenuAddCmd ( " Cheats " , " Mayhem " , MayhemCheat ) ;
DebugMenuAddCmd ( " Cheats " , " Everybody attacks player " , EverybodyAttacksPlayerCheat ) ;
DebugMenuAddCmd ( " Cheats " , " Weapons for all " , WeaponsForAllCheat ) ;
DebugMenuAddCmd ( " Cheats " , " Fast time " , FastTimeCheat ) ;
DebugMenuAddCmd ( " Cheats " , " Slow time " , SlowTimeCheat ) ;
DebugMenuAddCmd ( " Cheats " , " Armour " , ArmourCheat ) ;
DebugMenuAddCmd ( " Cheats " , " Sunny weather " , SunnyWeatherCheat ) ;
DebugMenuAddCmd ( " Cheats " , " Cloudy weather " , CloudyWeatherCheat ) ;
DebugMenuAddCmd ( " Cheats " , " Rainy weather " , RainyWeatherCheat ) ;
DebugMenuAddCmd ( " Cheats " , " Foggy weather " , FoggyWeatherCheat ) ;
DebugMenuAddCmd ( " Cheats " , " Fast weather " , FastWeatherCheat ) ;
DebugMenuAddCmd ( " Cheats " , " Only render wheels " , OnlyRenderWheelsCheat ) ;
DebugMenuAddCmd ( " Cheats " , " Chitty chitty bang bang " , ChittyChittyBangBangCheat ) ;
DebugMenuAddCmd ( " Cheats " , " Strong grip " , StrongGripCheat ) ;
2020-10-07 21:21:44 +00:00
DebugMenuAddCmd ( " Cheats " , " Special car " , SpecialCarCheats ) ;
DebugMenuAddCmd ( " Cheats " , " Pickup chicks " , PickUpChicksCheat ) ;
2019-06-27 08:58:51 +00:00
2019-07-19 09:57:12 +00:00
static int spawnCarId = MI_LANDSTAL ;
2020-05-07 09:33:20 +00:00
e = DebugMenuAddVar ( " Spawn " , " Spawn Car ID " , & spawnCarId , nil , 1 , MI_LANDSTAL , MI_VICECHEE , carnames ) ;
2019-07-19 09:57:12 +00:00
DebugMenuEntrySetWrap ( e , true ) ;
DebugMenuAddCmd ( " Spawn " , " Spawn Car " , [ ] ( ) {
2020-05-07 09:33:20 +00:00
if ( spawnCarId = = MI_CHOPPER | |
2019-07-19 09:57:12 +00:00
spawnCarId = = MI_AIRTRAIN | |
2020-05-07 09:33:20 +00:00
spawnCarId = = MI_DEADDODO )
2019-07-19 09:57:12 +00:00
return ;
SpawnCar ( spawnCarId ) ;
} ) ;
static uint8 dummy ;
carCol1 = DebugMenuAddVar ( " Spawn " , " First colour " , & dummy , nil , 1 , 0 , 255 , nil ) ;
carCol2 = DebugMenuAddVar ( " Spawn " , " Second colour " , & dummy , nil , 1 , 0 , 255 , nil ) ;
DebugMenuAddCmd ( " Spawn " , " Spawn Stinger " , [ ] ( ) { SpawnCar ( MI_STINGER ) ; } ) ;
DebugMenuAddCmd ( " Spawn " , " Spawn Infernus " , [ ] ( ) { SpawnCar ( MI_INFERNUS ) ; } ) ;
DebugMenuAddCmd ( " Spawn " , " Spawn Cheetah " , [ ] ( ) { SpawnCar ( MI_CHEETAH ) ; } ) ;
2020-05-31 15:05:49 +00:00
DebugMenuAddCmd ( " Spawn " , " Spawn Phoenix " , [ ] ( ) { SpawnCar ( MI_PHEONIX ) ; } ) ;
DebugMenuAddCmd ( " Spawn " , " Spawn Banshee " , [ ] ( ) { SpawnCar ( MI_BANSHEE ) ; } ) ;
2019-07-19 09:57:12 +00:00
DebugMenuAddCmd ( " Spawn " , " Spawn Esperanto " , [ ] ( ) { SpawnCar ( MI_ESPERANT ) ; } ) ;
DebugMenuAddCmd ( " Spawn " , " Spawn Stallion " , [ ] ( ) { SpawnCar ( MI_STALLION ) ; } ) ;
2020-05-28 08:37:13 +00:00
DebugMenuAddCmd ( " Spawn " , " Spawn Admiral " , [ ] ( ) { SpawnCar ( MI_ADMIRAL ) ; } ) ;
2020-05-07 09:33:20 +00:00
DebugMenuAddCmd ( " Spawn " , " Spawn Washington " , [ ] ( ) { SpawnCar ( MI_WASHING ) ; } ) ;
2019-07-19 09:57:12 +00:00
DebugMenuAddCmd ( " Spawn " , " Spawn Taxi " , [ ] ( ) { SpawnCar ( MI_TAXI ) ; } ) ;
DebugMenuAddCmd ( " Spawn " , " Spawn Police " , [ ] ( ) { SpawnCar ( MI_POLICE ) ; } ) ;
DebugMenuAddCmd ( " Spawn " , " Spawn Enforcer " , [ ] ( ) { SpawnCar ( MI_ENFORCER ) ; } ) ;
2020-05-07 09:33:20 +00:00
DebugMenuAddCmd ( " Spawn " , " Spawn Cuban " , [ ] ( ) { SpawnCar ( MI_CUBAN ) ; } ) ;
DebugMenuAddCmd ( " Spawn " , " Spawn Voodoo " , [ ] ( ) { SpawnCar ( MI_VOODOO ) ; } ) ;
2020-05-31 15:05:49 +00:00
DebugMenuAddCmd ( " Spawn " , " Spawn BF injection " , [ ] ( ) { SpawnCar ( MI_BFINJECT ) ; } ) ;
2020-05-24 13:14:27 +00:00
DebugMenuAddCmd ( " Spawn " , " Spawn Maverick " , [ ] ( ) { SpawnCar ( MI_MAVERICK ) ; } ) ;
DebugMenuAddCmd ( " Spawn " , " Spawn VCN Maverick " , [ ] ( ) { SpawnCar ( MI_VCNMAV ) ; } ) ;
2020-05-10 18:51:29 +00:00
DebugMenuAddCmd ( " Spawn " , " Spawn Sparrow " , [ ] ( ) { SpawnCar ( MI_SPARROW ) ; } ) ;
2020-05-24 13:14:27 +00:00
DebugMenuAddCmd ( " Spawn " , " Spawn Sea Sparrow " , [ ] ( ) { SpawnCar ( MI_SEASPAR ) ; } ) ;
DebugMenuAddCmd ( " Spawn " , " Spawn Hunter " , [ ] ( ) { SpawnCar ( MI_HUNTER ) ; } ) ;
2019-07-25 14:33:37 +00:00
DebugMenuAddCmd ( " Spawn " , " Spawn Rhino " , [ ] ( ) { SpawnCar ( MI_RHINO ) ; } ) ;
DebugMenuAddCmd ( " Spawn " , " Spawn Firetruck " , [ ] ( ) { SpawnCar ( MI_FIRETRUCK ) ; } ) ;
2020-04-12 22:02:11 +00:00
DebugMenuAddCmd ( " Spawn " , " Spawn Predator " , [ ] ( ) { SpawnCar ( MI_PREDATOR ) ; } ) ;
2020-06-02 21:35:20 +00:00
DebugMenuAddCmd ( " Spawn " , " Spawn PCJ 600 " , [ ] ( ) { SpawnCar ( MI_PCJ600 ) ; } ) ;
2020-06-04 22:24:42 +00:00
DebugMenuAddCmd ( " Spawn " , " Spawn Faggio " , [ ] ( ) { SpawnCar ( MI_FAGGIO ) ; } ) ;
DebugMenuAddCmd ( " Spawn " , " Spawn Freeway " , [ ] ( ) { SpawnCar ( MI_FREEWAY ) ; } ) ;
2020-07-01 16:03:39 +00:00
DebugMenuAddCmd ( " Spawn " , " Spawn Squalo " , [ ] ( ) { SpawnCar ( MI_SQUALO ) ; } ) ;
DebugMenuAddCmd ( " Spawn " , " Spawn Skimmer " , [ ] ( ) { SpawnCar ( MI_SKIMMER ) ; } ) ;
2019-07-19 09:57:12 +00:00
2020-05-05 11:02:42 +00:00
DebugMenuAddVarBool8 ( " Render " , " Draw hud " , & CHud : : m_Wants_To_Draw_Hud , nil ) ;
2020-05-11 15:03:32 +00:00
DebugMenuAddVarBool8 ( " Render " , " Backface Culling " , & gBackfaceCulling , nil ) ;
2020-04-25 10:16:50 +00:00
DebugMenuAddVarBool8 ( " Render " , " PS2 Alpha test Emu " , & gPS2alphaTest , nil ) ;
2020-05-02 08:08:58 +00:00
DebugMenuAddVarBool8 ( " Render " , " Frame limiter " , & FrontEndMenuManager . m_PrefsFrameLimiter , nil ) ;
DebugMenuAddVarBool8 ( " Render " , " VSynch " , & FrontEndMenuManager . m_PrefsVsync , nil ) ;
DebugMenuAddVar ( " Render " , " Max FPS " , & RsGlobal . maxFPS , nil , 1 , 1 , 1000 , nil ) ;
2020-11-03 19:40:33 +00:00
# ifdef NEW_RENDERER
2020-11-03 19:33:07 +00:00
DebugMenuAddVarBool8 ( " Render " , " new renderer " , & gbNewRenderer , nil ) ;
extern bool gbRenderRoads ;
extern bool gbRenderEverythingBarRoads ;
extern bool gbRenderFadingInUnderwaterEntities ;
extern bool gbRenderFadingInEntities ;
extern bool gbRenderWater ;
extern bool gbRenderBoats ;
extern bool gbRenderVehicles ;
extern bool gbRenderWorld0 ;
extern bool gbRenderWorld1 ;
extern bool gbRenderWorld2 ;
DebugMenuAddVarBool8 ( " Render " , " gbRenderRoads " , & gbRenderRoads , nil ) ;
DebugMenuAddVarBool8 ( " Render " , " gbRenderEverythingBarRoads " , & gbRenderEverythingBarRoads , nil ) ;
DebugMenuAddVarBool8 ( " Render " , " gbRenderFadingInUnderwaterEntities " , & gbRenderFadingInUnderwaterEntities , nil ) ;
DebugMenuAddVarBool8 ( " Render " , " gbRenderFadingInEntities " , & gbRenderFadingInEntities , nil ) ;
DebugMenuAddVarBool8 ( " Render " , " gbRenderWater " , & gbRenderWater , nil ) ;
DebugMenuAddVarBool8 ( " Render " , " gbRenderBoats " , & gbRenderBoats , nil ) ;
DebugMenuAddVarBool8 ( " Render " , " gbRenderVehicles " , & gbRenderVehicles , nil ) ;
DebugMenuAddVarBool8 ( " Render " , " gbRenderWorld0 " , & gbRenderWorld0 , nil ) ;
DebugMenuAddVarBool8 ( " Render " , " gbRenderWorld1 " , & gbRenderWorld1 , nil ) ;
DebugMenuAddVarBool8 ( " Render " , " gbRenderWorld2 " , & gbRenderWorld2 , nil ) ;
2020-11-03 19:40:33 +00:00
# endif
2020-11-03 19:33:07 +00:00
2020-08-11 16:39:53 +00:00
# ifdef EXTENDED_COLOURFILTER
static const char * filternames [ ] = { " None " , " Simple " , " Normal " , " Mobile " } ;
e = DebugMenuAddVar ( " Render " , " Colourfilter " , & CPostFX : : EffectSwitch , nil , 1 , CPostFX : : POSTFX_OFF , CPostFX : : POSTFX_MOBILE , filternames ) ;
DebugMenuEntrySetWrap ( e , true ) ;
DebugMenuAddVar ( " Render " , " Intensity " , & CPostFX : : Intensity , nil , 0.05f , 0 , 10.0f ) ;
DebugMenuAddVarBool8 ( " Render " , " Blur " , & CPostFX : : BlurOn , nil ) ;
DebugMenuAddVarBool8 ( " Render " , " Motion Blur " , & CPostFX : : MotionBlurOn , nil ) ;
# endif
DebugMenuAddVar ( " Render " , " Drunkness " , & CMBlur : : Drunkness , nil , 0.05f , 0 , 1.0f ) ;
2020-08-29 16:22:25 +00:00
# ifndef MASTER
2021-01-02 09:38:54 +00:00
DebugMenuAddVarBool8 ( " Render " , " Occlusion debug " , & bDispayOccDebugStuff , nil ) ;
2020-08-29 16:22:25 +00:00
# endif
2020-08-19 14:10:22 +00:00
# ifdef EXTENDED_PIPELINES
static const char * vehpipenames [ ] = { " MatFX " , " Neo " } ;
e = DebugMenuAddVar ( " Render " , " Vehicle Pipeline " , & CustomPipes : : VehiclePipeSwitch , nil ,
1 , CustomPipes : : VEHICLEPIPE_MATFX , CustomPipes : : VEHICLEPIPE_NEO , vehpipenames ) ;
DebugMenuEntrySetWrap ( e , true ) ;
DebugMenuAddVar ( " Render " , " Neo Vehicle Shininess " , & CustomPipes : : VehicleShininess , nil , 0.1f , 0 , 1.0f ) ;
DebugMenuAddVar ( " Render " , " Neo Vehicle Specularity " , & CustomPipes : : VehicleSpecularity , nil , 0.1f , 0 , 1.0f ) ;
2020-10-27 14:55:07 +00:00
DebugMenuAddVarBool8 ( " Render " , " Neo Ped Rim light enable " , & CustomPipes : : RimlightEnable , nil ) ;
DebugMenuAddVar ( " Render " , " Mult " , & CustomPipes : : RimlightMult , nil , 0.1f , 0 , 1.0f ) ;
DebugMenuAddVarBool8 ( " Render " , " Neo World Lightmaps enable " , & CustomPipes : : LightmapEnable , nil ) ;
DebugMenuAddVar ( " Render " , " Mult " , & CustomPipes : : LightmapMult , nil , 0.1f , 0 , 1.0f ) ;
DebugMenuAddVarBool8 ( " Render " , " Neo Road Gloss enable " , & CustomPipes : : GlossEnable , nil ) ;
DebugMenuAddVar ( " Render " , " Mult " , & CustomPipes : : GlossMult , nil , 0.1f , 0 , 1.0f ) ;
2020-08-19 14:10:22 +00:00
# endif
2020-05-05 11:02:42 +00:00
DebugMenuAddVarBool8 ( " Render " , " Show Ped Paths " , & gbShowPedPaths , nil ) ;
DebugMenuAddVarBool8 ( " Render " , " Show Car Paths " , & gbShowCarPaths , nil ) ;
DebugMenuAddVarBool8 ( " Render " , " Show Car Path Links " , & gbShowCarPathsLinks , nil ) ;
DebugMenuAddVarBool8 ( " Render " , " Show Collision Lines " , & gbShowCollisionLines , nil ) ;
DebugMenuAddVarBool8 ( " Render " , " Show Collision Polys " , & gbShowCollisionPolys , nil ) ;
DebugMenuAddVarBool8 ( " Render " , " Don't render Buildings " , & gbDontRenderBuildings , nil ) ;
DebugMenuAddVarBool8 ( " Render " , " Don't render Big Buildings " , & gbDontRenderBigBuildings , nil ) ;
DebugMenuAddVarBool8 ( " Render " , " Don't render Peds " , & gbDontRenderPeds , nil ) ;
DebugMenuAddVarBool8 ( " Render " , " Don't render Vehicles " , & gbDontRenderVehicles , nil ) ;
DebugMenuAddVarBool8 ( " Render " , " Don't render Objects " , & gbDontRenderObjects , nil ) ;
2020-06-01 11:21:19 +00:00
DebugMenuAddVarBool8 ( " Render " , " Don't Render Water " , & gbDontRenderWater , nil ) ;
2021-01-08 22:01:41 +00:00
# ifdef PROPER_SCALING
DebugMenuAddVarBool8 ( " Draw " , " Proper Scaling " , & CDraw : : ms_bProperScaling , nil ) ;
# endif
# ifdef FIX_RADAR
DebugMenuAddVarBool8 ( " Draw " , " Fix Radar " , & CDraw : : ms_bFixRadar , nil ) ;
# endif
# ifdef FIX_SPRITES
DebugMenuAddVarBool8 ( " Draw " , " Fix Sprites " , & CDraw : : ms_bFixSprites , nil ) ;
# endif
2020-04-25 10:16:50 +00:00
2020-11-30 22:44:58 +00:00
# ifndef FINAL
DebugMenuAddVarBool8 ( " Debug " , " Print Memory Usage " , & gbPrintMemoryUsage , nil ) ;
# ifdef USE_CUSTOM_ALLOCATOR
DebugMenuAddCmd ( " Debug " , " Parse Heap " , ParseHeap ) ;
# endif
# endif
2020-11-21 23:13:07 +00:00
2020-06-08 11:00:45 +00:00
DebugMenuAddVarBool8 ( " Debug " , " pad 1 -> pad 2 " , & CPad : : m_bMapPadOneToPadTwo , nil ) ;
2020-12-18 12:50:26 +00:00
# ifdef GTA_SCENE_EDIT
2020-04-25 10:16:50 +00:00
DebugMenuAddVarBool8 ( " Debug " , " Edit on " , & CSceneEdit : : m_bEditOn , nil ) ;
2020-12-18 12:50:26 +00:00
# endif
2020-07-04 20:50:43 +00:00
# ifdef MAP_ENHANCEMENTS
2020-04-17 04:01:54 +00:00
DebugMenuAddCmd ( " Debug " , " Teleport to map waypoint " , TeleportToWaypoint ) ;
# endif
2020-05-25 20:59:55 +00:00
DebugMenuAddCmd ( " Debug " , " Switch car collision " , SwitchCarCollision ) ;
2019-07-26 16:48:14 +00:00
DebugMenuAddVar ( " Debug " , " Engine Status " , & engineStatus , nil , 1 , 0 , 226 , nil ) ;
DebugMenuAddCmd ( " Debug " , " Set Engine Status " , SetEngineStatus ) ;
2019-07-08 19:37:47 +00:00
DebugMenuAddCmd ( " Debug " , " Fix Car " , FixCar ) ;
2019-07-11 10:48:49 +00:00
DebugMenuAddCmd ( " Debug " , " Toggle Comedy Controls " , ToggleComedy ) ;
2019-07-23 14:39:30 +00:00
DebugMenuAddCmd ( " Debug " , " Place Car on Road " , PlaceOnRoad ) ;
2019-07-11 10:48:49 +00:00
2020-04-25 10:16:50 +00:00
DebugMenuAddVarBool8 ( " Debug " , " Script Heli On " , & CHeli : : ScriptHeliOn , nil ) ;
2019-05-30 22:32:50 +00:00
DebugMenuAddCmd ( " Debug " , " Start Credits " , CCredits : : Start ) ;
DebugMenuAddCmd ( " Debug " , " Stop Credits " , CCredits : : Stop ) ;
2020-03-26 13:16:06 +00:00
2020-05-21 13:47:48 +00:00
# ifdef RELOADABLES
2020-05-21 13:25:46 +00:00
DebugMenuAddCmd ( " Reload " , " HUD.TXD " , CHud : : ReloadTXD ) ;
2020-05-21 13:47:48 +00:00
# endif
2020-05-29 10:03:32 +00:00
DebugMenuAddVarBool8 ( " Debug " , " Show DebugStuffInRelease " , & gbDebugStuffInRelease , nil ) ;
2020-06-01 11:21:19 +00:00
# ifdef TIMEBARS
2020-05-29 10:03:32 +00:00
DebugMenuAddVarBool8 ( " Debug " , " Show Timebars " , & gbShowTimebars , nil ) ;
2020-06-01 11:21:19 +00:00
# endif
2020-06-13 20:39:14 +00:00
# ifdef MISSION_SWITCHER
2020-08-10 21:04:33 +00:00
DebugMenuEntry * missionEntry ;
static const char * missions [ ] = {
" Initial " , " Intro " , " An Old Friend " , " The Party " , " Back Alley Brawl " , " Jury Fury " , " Riot " ,
" Treacherous Swine " , " Mall Shootout " , " Guardian Angels " , " Sir, Yes Sir! " , " All Hands On Deck! " ,
" The Chase " , " Phnom Penh '86 " , " The Fastest Boat " , " Supply & Demand " , " Rub Out " , " Death Row " ,
" Four Iron " , " Demolition Man " , " Two Bit Hit " , " No Escape? " , " The Shootist " , " The Driver " ,
" The Job " , " Gun Runner " , " Boomshine Saigon " , " Recruitment Drive " , " Dildo Dodo " , " Martha's Mug Shot " ,
" G-spotlight " , " Shakedown " , " Bar Brawl " , " Cop Land " , " Spilling the Beans " , " Hit the Courier " ,
" Printworks Buy " , " Sunshine Autos " , " Interglobal Films Buy " , " Cherry Popper Icecreams Buy " ,
" Kaufman Cabs Buy " , " Malibu Club Buy " , " The Boatyard Buy " , " Pole Position Club Buy " , " El Swanko Casa Buy " ,
" Links View Apartment Buy " , " Hyman Condo Buy " , " Ocean Heighs Aprt. Buy " , " 1102 Washington Street Buy " ,
" Vice Point Buy " , " Skumole Shack Buy " , " Cap the Collector " , " Keep your Friends Close... " ,
" Alloy Wheels of Steel " , " Messing with the Man " , " Hog Tied " , " Stunt Boat Challenge " , " Cannon Fodder " ,
" Naval Engagement " , " Trojan Voodoo " , " Juju Scramble " , " Bombs Away! " , " Dirty Lickin's " , " Love Juice " ,
" Psycho Killer " , " Publicity Tour " , " Weapon Range " , " Road Kill " , " Waste the Wife " , " Autocide " ,
" Check Out at the Check In " , " Loose Ends " , " V.I.P. " , " Friendly Rivalry " , " Cabmaggedon " , " TAXI DRIVER " ,
" PARAMEDIC " , " FIREFIGHTER " , " VIGILANTE " , " HOTRING " , " BLOODRING " , " DIRTRING " , " Sunshine Autos Races " ,
" Distribution " , " Downtown Chopper Checkpoint " , " Ocean Beach Chopper Checkpoint " , " Vice Point Chopper Checkpoint " ,
" Little Haiti Chopper Checkpoint " , " Trial by Dirt " , " Test Track " , " PCJ Playground " , " Cone Crazy " ,
" PIZZA BOY " , " RC Raider Pickup " , " RC Bandit Race " , " RC Baron Race " , " Checkpoint Charlie "
} ;
2021-01-23 20:10:59 +00:00
missionEntry = DebugMenuAddVar ( " Debug " , " Select mission " , & nextMissionToSwitch , nil , 1 , 0 , ARRAY_SIZE ( missions ) - 1 , missions ) ;
2020-08-10 21:04:33 +00:00
DebugMenuEntrySetWrap ( missionEntry , true ) ;
2020-06-13 20:39:14 +00:00
DebugMenuAddCmd ( " Debug " , " Start selected mission " , SwitchToMission ) ;
# endif
2020-03-26 13:16:06 +00:00
extern bool PrintDebugCode ;
2020-04-17 13:31:11 +00:00
extern int16 DebugCamMode ;
2020-04-25 10:16:50 +00:00
DebugMenuAddVarBool8 ( " Cam " , " Use mouse Cam " , & CCamera : : m_bUseMouse3rdPerson , nil ) ;
2020-03-29 12:05:21 +00:00
# ifdef FREE_CAM
2020-04-25 10:16:50 +00:00
DebugMenuAddVarBool8 ( " Cam " , " Free Cam " , & CCamera : : bFreeCam , nil ) ;
2020-03-29 12:05:21 +00:00
# endif
2020-04-25 10:16:50 +00:00
DebugMenuAddVarBool8 ( " Cam " , " Print Debug Code " , & PrintDebugCode , nil ) ;
2020-03-26 13:16:06 +00:00
DebugMenuAddVar ( " Cam " , " Cam Mode " , & DebugCamMode , nil , 1 , 0 , CCam : : MODE_EDITOR , nil ) ;
2020-03-27 17:19:08 +00:00
DebugMenuAddCmd ( " Cam " , " Normal " , [ ] ( ) { DebugCamMode = 0 ; } ) ;
2020-03-26 13:16:06 +00:00
DebugMenuAddCmd ( " Cam " , " Reset Statics " , ResetCamStatics ) ;
2019-07-24 16:55:43 +00:00
CTweakVars : : AddDBG ( " Debug " ) ;
2019-05-30 19:24:47 +00:00
}
2019-06-12 10:34:22 +00:00
}
2020-05-09 13:06:13 +00:00
# endif
2019-06-12 10:34:22 +00:00
2021-01-23 22:13:40 +00:00
# ifndef __MWERKS__
# ifndef MASTER
2019-06-02 21:42:51 +00:00
const int re3_buffsize = 1024 ;
static char re3_buff [ re3_buffsize ] ;
2021-01-23 22:13:40 +00:00
# endif
2019-06-02 21:42:51 +00:00
2021-01-23 22:13:40 +00:00
# ifndef MASTER
2019-06-02 21:42:51 +00:00
void re3_assert ( const char * expr , const char * filename , unsigned int lineno , const char * func )
{
2020-05-11 02:55:57 +00:00
# ifdef _WIN32
2019-06-02 21:42:51 +00:00
int nCode ;
strcpy_s ( re3_buff , re3_buffsize , " Assertion failed! " ) ;
strcat_s ( re3_buff , re3_buffsize , " \n " ) ;
strcat_s ( re3_buff , re3_buffsize , " File: " ) ;
strcat_s ( re3_buff , re3_buffsize , filename ) ;
strcat_s ( re3_buff , re3_buffsize , " \n " ) ;
strcat_s ( re3_buff , re3_buffsize , " Line: " ) ;
_itoa_s ( lineno , re3_buff + strlen ( re3_buff ) , re3_buffsize - strlen ( re3_buff ) , 10 ) ;
strcat_s ( re3_buff , re3_buffsize , " \n " ) ;
strcat_s ( re3_buff , re3_buffsize , " Function: " ) ;
strcat_s ( re3_buff , re3_buffsize , func ) ;
strcat_s ( re3_buff , re3_buffsize , " \n " ) ;
strcat_s ( re3_buff , re3_buffsize , " Expression: " ) ;
strcat_s ( re3_buff , re3_buffsize , expr ) ;
strcat_s ( re3_buff , re3_buffsize , " \n " ) ;
strcat_s ( re3_buff , re3_buffsize , " \n " ) ;
strcat_s ( re3_buff , re3_buffsize , " (Press Retry to debug the application) " ) ;
2019-06-30 10:53:39 +00:00
nCode = : : MessageBoxA ( nil , re3_buff , " RE3 Assertion Failed! " ,
2019-06-02 21:42:51 +00:00
MB_ABORTRETRYIGNORE | MB_ICONHAND | MB_SETFOREGROUND | MB_TASKMODAL ) ;
if ( nCode = = IDABORT )
{
raise ( SIGABRT ) ;
_exit ( 3 ) ;
}
if ( nCode = = IDRETRY )
{
__debugbreak ( ) ;
return ;
}
if ( nCode = = IDIGNORE )
return ;
abort ( ) ;
2020-05-11 02:55:57 +00:00
# else
// TODO
printf ( " \n RE3 ASSERT FAILED \n \t File: %s \n \t Line: %d \n \t Function: %s \n \t Expression: %s \n " , filename , lineno , func , expr ) ;
assert ( false ) ;
# endif
2019-06-02 21:42:51 +00:00
}
2021-01-23 22:13:40 +00:00
# endif
2019-06-02 21:42:51 +00:00
2019-08-16 18:17:15 +00:00
void re3_debug ( const char * format , . . . )
2019-06-02 21:42:51 +00:00
{
2021-01-23 22:13:40 +00:00
# ifndef MASTER
2019-06-02 21:42:51 +00:00
va_list va ;
va_start ( va , format ) ;
2020-05-11 02:55:57 +00:00
# ifdef _WIN32
2019-06-02 21:42:51 +00:00
vsprintf_s ( re3_buff , re3_buffsize , format , va ) ;
2020-05-11 02:55:57 +00:00
# else
vsprintf ( re3_buff , format , va ) ;
# endif
2019-06-02 21:42:51 +00:00
va_end ( va ) ;
2020-04-07 22:52:08 +00:00
printf ( " %s " , re3_buff ) ;
2020-03-26 13:16:06 +00:00
CDebug : : DebugAddText ( re3_buff ) ;
2021-01-23 22:13:40 +00:00
# endif
2019-06-02 21:42:51 +00:00
}
2021-01-23 22:13:40 +00:00
# ifndef MASTER
2019-08-16 18:17:15 +00:00
void re3_trace ( const char * filename , unsigned int lineno , const char * func , const char * format , . . . )
2019-06-02 21:42:51 +00:00
{
char buff [ re3_buffsize * 2 ] ;
va_list va ;
va_start ( va , format ) ;
2020-05-11 02:55:57 +00:00
# ifdef _WIN32
2019-06-02 21:42:51 +00:00
vsprintf_s ( re3_buff , re3_buffsize , format , va ) ;
va_end ( va ) ;
sprintf_s ( buff , re3_buffsize * 2 , " [%s.%s:%d]: %s " , filename , func , lineno , re3_buff ) ;
2020-05-11 02:55:57 +00:00
# else
vsprintf ( re3_buff , format , va ) ;
va_end ( va ) ;
2019-06-02 21:42:51 +00:00
2020-05-11 02:55:57 +00:00
sprintf ( buff , " [%s.%s:%d]: %s " , filename , func , lineno , re3_buff ) ;
# endif
OutputDebugString ( buff ) ;
2019-06-02 21:42:51 +00:00
}
2019-05-31 23:58:19 +00:00
2020-05-07 06:26:16 +00:00
void re3_usererror ( const char * format , . . . )
{
va_list va ;
va_start ( va , format ) ;
2020-05-11 02:55:57 +00:00
# ifdef _WIN32
2020-05-07 06:26:16 +00:00
vsprintf_s ( re3_buff , re3_buffsize , format , va ) ;
va_end ( va ) ;
: : MessageBoxA ( nil , re3_buff , " RE3 Error! " ,
MB_OK | MB_ICONHAND | MB_SETFOREGROUND | MB_TASKMODAL ) ;
raise ( SIGABRT ) ;
_exit ( 3 ) ;
2020-05-11 02:55:57 +00:00
# else
vsprintf ( re3_buff , format , va ) ;
printf ( " \n RE3 Error! \n \t %s \n " , re3_buff ) ;
assert ( false ) ;
# endif
2020-05-07 06:26:16 +00:00
}
2021-01-23 22:13:40 +00:00
# endif
# endif
2020-05-07 06:26:16 +00:00
2019-10-11 21:06:30 +00:00
# ifdef VALIDATE_SAVE_SIZE
2020-03-11 07:12:40 +00:00
int32 _saveBufCount ;
2019-10-11 21:06:30 +00:00
# endif