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"
# 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"
2019-05-30 19:24:47 +00:00
2020-12-06 14:29:48 +00:00
# ifdef DONT_TRUST_RECOGNIZED_JOYSTICKS
2021-01-16 13:44:59 +00:00
# include "crossplatform.h"
2020-12-06 14:29:48 +00:00
# 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
2021-01-19 10:38:51 +00:00
const char * pipelineNames [ ] = { " FED_PSP " , " FED_PS2 " , " FED_MOB " } ;
2020-12-27 20:26:00 +00:00
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-25 12:02:00 +00:00
FrontendOptionAddSelect ( " FED_VPL " , 0 , 0 , MENUALIGN_LEFT , pipelineNames , ARRAY_SIZE ( pipelineNames ) , ( int8 * ) & CustomPipes : : VehiclePipeSwitch , false , nil , " Graphics " , " VehiclePipeline " ) ;
FrontendOptionAddSelect ( " FED_WPL " , 0 , 0 , MENUALIGN_LEFT , pipelineNames , ARRAY_SIZE ( pipelineNames ) , ( int8 * ) & CustomPipes : : WorldPipeSwitch , false , nil , " Graphics " , " WorldPipeline " ) ;
2021-01-23 12:59:38 +00:00
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-25 12:02:00 +00:00
FrontendOptionAddSelect ( " FED_VPL " , 0 , 0 , MENUALIGN_LEFT , pipelineNames , ARRAY_SIZE ( pipelineNames ) , ( int8 * ) & CustomPipes : : VehiclePipeSwitch , false , nil , " Graphics " , " VehiclePipeline " ) ;
FrontendOptionAddSelect ( " FED_WPL " , 0 , 0 , MENUALIGN_LEFT , pipelineNames , ARRAY_SIZE ( pipelineNames ) , ( int8 * ) & CustomPipes : : WorldPipeSwitch , false , nil , " Graphics " , " WorldPipeline " ) ;
2021-01-23 12:59:38 +00:00
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 ;
2020-12-06 14:29:48 +00:00
}
2021-01-23 12:59:38 +00:00
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 , char * out , int size )
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 ' ) {
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 ) ;
2020-12-06 14:29:48 +00:00
}
2021-01-23 12:59:38 +00:00
void StoreIni ( const char * cat , const char * key , float val )
2020-12-06 14:29:48 +00:00
{
2021-01-23 12:59:38 +00:00
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: " } ;
2020-12-06 14:29:48 +00:00
2021-01-23 12:59:38 +00:00
const char * iniMouseButtons [ ] = { " LEFT " , " MIDDLE " , " RIGHT " , " WHLUP " , " WHLDOWN " , " X1 " , " X2 " } ;
2020-12-06 14:29:48 +00:00
2021-01-23 12:59:38 +00:00
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 ( )
{
2020-12-06 14:29:48 +00:00
# ifdef DONT_TRUST_RECOGNIZED_JOYSTICKS
2021-01-22 20:40:28 +00:00
ReadIniIfExists ( " Controller " , " JoystickName " , gSelectedJoystickName , 128 ) ;
# 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 ;
}
2020-12-06 14:29:48 +00:00
}
2021-01-23 12:59:38 +00:00
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 ;
}
}
2020-12-06 14:29:48 +00:00
}
2021-01-23 12:59:38 +00:00
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 ;
2020-12-06 14:29:48 +00:00
}
}
}
2021-01-23 12:59:38 +00:00
int len = strlen ( value ) ;
if ( len > 0 )
value [ len - 1 ] = ' \0 ' ; // to remove comma
StoreIni ( " Bindings " , iniControllerActions [ i ] , value , 128 ) ;
2020-12-06 14:29:48 +00:00
}
2021-01-23 12:59:38 +00:00
2021-01-22 20:40:28 +00:00
# ifdef DONT_TRUST_RECOGNIZED_JOYSTICKS
StoreIni ( " Controller " , " JoystickName " , gSelectedJoystickName , 128 ) ;
2020-12-06 14:29:48 +00:00
# endif
2021-01-22 20:40:28 +00:00
StoreIni ( " Controller " , " PadButtonsInited " , ControlsManager . ms_padButtonsInited ) ;
2021-01-23 16:16:47 +00:00
cfg . write_file ( " reLCS.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-23 16:16:47 +00:00
if ( ! cfg . load_file ( " reLCS.ini " ) )
2021-01-22 20:40:28 +00:00
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 ) ;
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 ) ;
2020-12-06 14:29:48 +00:00
# ifdef EXTENDED_COLOURFILTER
2021-01-23 12:59:38 +00:00
ReadIniIfExists ( " CustomPipesValues " , " PostFXIntensity " , & CPostFX : : Intensity ) ;
2020-12-06 14:29:48 +00:00
# endif
# ifdef EXTENDED_PIPELINES
2021-01-23 12:59:38 +00:00
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 ) ;
2020-12-06 14:29:48 +00:00
# endif
2021-01-23 12:59:38 +00:00
2021-01-08 22:01:41 +00:00
# ifdef PROPER_SCALING
2021-01-23 12:59:38 +00:00
ReadIniIfExists ( " 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
ReadIniIfExists ( " 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
ReadIniIfExists ( " 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
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 ) ;
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 ) ;
2020-12-06 14:29:48 +00:00
2021-01-08 22:01:41 +00:00
# ifdef PROPER_SCALING
2021-01-23 12:59:38 +00:00
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
}
}
}
2021-01-08 22:01:41 +00:00
# endif
2021-01-23 15:54:46 +00:00
cfg . write_file ( " reLCS.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 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 [ ] = {
2021-01-10 18:58:58 +00:00
" spider " , " landstal " , " idaho " , " stinger " , " linerun " , " peren " , " sentinel " , " patriot " , " firetruk " , " trash " , " stretch " ,
" manana " , " infernus " , " blista " , " pony " , " mule " , " cheetah " , " ambulan " , " fbicar " , " moonbeam " , " esperant " , " taxi " ,
" kuruma " , " bobcat " , " mrwhoop " , " bfinject " , " hearse " , " police " , " enforcer " , " securica " , " banshee " , " bus " , " rhino " ,
" barracks " , " dodo " , " coach " , " cabbie " , " stallion " , " rumpo " , " rcbandit " , " bellyup " , " mrwongs " , " mafia " , " yardie " ,
" yakuza " , " diablos " , " columb " , " hoods " , " panlant " , " flatbed " , " yankee " , " borgnine " , " toyz " , " campvan " , " ballot " ,
" shelby " , " pontiac " , " esprit " , " ammotruk " , " hotrod " , " Sindacco_Car " , " Forelli_Car " , " ferry " , " ghost " , " speeder " ,
" reefer " , " predator " , " train " , " escape " , " chopper " , " airtrain " , " deaddodo " , " angel " , " pizzaboy " , " noodleboy " ,
" pcj600 " , " faggio " , " freeway " , " angel2 " , " sanchez2 " , " sanchez " , " rcgoblin " , " rcraider " , " hunter " , " maverick " ,
" polmav " , " vcnmav "
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 )
2020-12-21 12:33:35 +00:00
TweakVarsList = ( CTweakVar * * ) realloc ( TweakVarsList , ( TweakVarsListSize + 1 ) * sizeof ( * var ) ) ;
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 " , " Pickup chicks " , PickUpChicksCheat ) ;
2019-06-27 08:58:51 +00:00
2019-07-19 09:57:12 +00:00
static int spawnCarId = MI_LANDSTAL ;
2021-01-10 18:58:58 +00:00
e = DebugMenuAddVar ( " Spawn " , " Spawn Car ID " , & spawnCarId , nil , 1 , MI_SPIDER , MI_VCNMAV , 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 ) ; } ) ;
2021-01-10 10:59:51 +00:00
DebugMenuAddCmd ( " Spawn " , " Spawn Esprit " , [ ] ( ) { SpawnCar ( MI_ESPRIT ) ; } ) ;
2020-05-31 15:05:49 +00:00
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 ) ; } ) ;
2021-01-10 10:59:51 +00:00
DebugMenuAddCmd ( " Spawn " , " Spawn Mafia " , [ ] ( ) { SpawnCar ( MI_MAFIA ) ; } ) ;
DebugMenuAddCmd ( " Spawn " , " Spawn Kuruma " , [ ] ( ) { SpawnCar ( MI_KURUMA ) ; } ) ;
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 ) ; } ) ;
2021-01-10 10:59:51 +00:00
DebugMenuAddCmd ( " Spawn " , " Spawn Diablo " , [ ] ( ) { SpawnCar ( MI_DIABLOS ) ; } ) ;
DebugMenuAddCmd ( " Spawn " , " Spawn Yardie " , [ ] ( ) { SpawnCar ( MI_YARDIE ) ; } ) ;
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 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 ) ; } ) ;
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 ) ;
2021-01-10 18:45:58 +00:00
DebugMenuAddVar ( " Render " , " Brightness " , & FrontEndMenuManager . m_PrefsBrightness , nil , 16 , 0 , 700 , 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
2021-01-19 19:42:16 +00:00
static const char * filternames [ ] = { " None " , " PSP " , " PS2 " } ;
e = DebugMenuAddVar ( " Render " , " Colourfilter " , & CPostFX : : EffectSwitch , nil , 1 , CPostFX : : POSTFX_OFF , CPostFX : : POSTFX_PS2 , filternames ) ;
2020-08-11 16:39:53 +00:00
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
2021-01-19 10:38:51 +00:00
static const char * worldpipenames [ ] = { " PSP " , " PS2 " , " Mobile " } ;
2021-01-10 18:45:58 +00:00
e = DebugMenuAddVar ( " Render " , " World Rendering " , & CustomPipes : : WorldPipeSwitch , nil ,
2021-01-19 10:38:51 +00:00
1 , CustomPipes : : WORLDPIPE_PSP , CustomPipes : : WORLDPIPE_MOBILE , worldpipenames ) ;
2021-01-10 18:45:58 +00:00
DebugMenuEntrySetWrap ( e , true ) ;
2021-01-19 10:38:51 +00:00
static const char * vehpipenames [ ] = { " PSP " , " PS2 " , " Mobile " } ;
2020-08-19 14:10:22 +00:00
e = DebugMenuAddVar ( " Render " , " Vehicle Pipeline " , & CustomPipes : : VehiclePipeSwitch , nil ,
2021-01-19 10:38:51 +00:00
1 , CustomPipes : : VEHICLEPIPE_PSP , CustomPipes : : VEHICLEPIPE_MOBILE , vehpipenames ) ;
2020-08-19 14:10:22 +00:00
DebugMenuEntrySetWrap ( e , true ) ;
2021-01-12 13:07:24 +00:00
DebugMenuAddVarBool8 ( " Render " , " Glass Cars cheat " , & CustomPipes : : gGlassCarsCheat , nil ) ;
2021-01-10 13:32:37 +00:00
extern bool gbRenderDebugEnvMap ;
DebugMenuAddVarBool8 ( " Render " , " Show Env map " , & gbRenderDebugEnvMap , nil ) ;
2021-01-12 12:41:22 +00:00
// 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 ) ;
2021-01-12 12:41:22 +00:00
// 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 [ ] = {
2021-01-18 20:58:26 +00:00
" initial: objects " , " initial: hidden packages " , " initial: car generators " , " initial: pickups " , " initial: unique stunt jumps " ,
" initial: player " , " initial: general info " , " initial: lods " , " initial: weapons " , " Home Sweet Home " , " Taxi-Driver Sub-Mission " ,
" Paramedic Sub-Mission " , " Vigilante Sub-Mission " , " Karmageddon " , " Firefighter Sub-Mission " , " Trash Dash " , " RC Triad Take-Down " ,
" Thrashin' RC " , " Ragin' RC " , " Chasin' RC " , " GO GO Faggio " , " Noodleboy " , " Pizzaboy " , " Wong Side Of The Tracks " , " Bumps and Grinds: Course 1 " ,
" Bumps and Grinds: Course 2 " , " Bumps and Grinds: Course 3 " , " Bumps and Grinds: Course 4 " , " Bumps and Grinds: Course 5 " , " Bumps and Grinds: Course 6 " ,
" Bumps and Grinds: Course 7 " , " Bumps and Grinds: Course 8 " , " Bumps and Grinds: Course 9 " , " Bumps and Grinds: Course 10 " , " Car Salesman " , " Bike Salesman " ,
" RACE: Low-Rider Rumble " , " RACE: Deimos Dash " , " RACE: Wi-Cheetah Run " , " RACE: Red Light Racing " , " RACE: Torrington TT " , " RACE: Gangsta GP " ,
" Scooter Shooter " , " AWOL Angel " , " 9mm Mayhem " , " Scrapyard Challenge " , " See the Sight Before your Flight " , " SlashTV " , " Slacker (Vincenzo) " ,
" Dealing Revenge (Vincenzo) " , " Snuff (Vincenzo) " , " Smash and Grab (Vincenzo) " , " Hot Wheels (Vincenzo) " , " The Portland Chainsaw Masquerade (Vincenzo) " ,
" The Offer (Salvatore) " , " Ho Selecta! (Salvatore) " , " Frighteners (Salvatore) " , " Rollercoaster Ride (Salvatore) " , " Contra-Banned (Salvatore) " ,
" Sindacco Sabotage (Salvatore) " , " The Trouble with Triads (Salvatore) " , " Driving Mr Leone (Salvatore) " , " conversation (JD) " , " Bone Voyeur! (JD) " ,
" Don in 60 Seconds (JD) " , " A Volatile Situation (JD) " , " Blow up 'Dolls' (JD) " , " Salvatore's Salvation (JD) " , " The Guns of Leone (JD) " ,
" Calm before the Storm (JD) " , " The Made Man (JD) " , " Snappy Dresser (Ma Cipriani) " , " Big Rumble in Little China (Ma Cipriani) " , " Grease Sucho (Ma Cipriani) " ,
" Dead Meat (Ma Cipriani) " , " No Son of Mine (Ma Cipriani) " , " Shop 'til you Strop (Maria) " , " Taken for a Ride (Maria) " , " Booby Prize (Maria) " ,
" Biker Heat (Maria) " , " Overdose of Trouble (Maria) " , " Making Toni (Salvatore) " , " A Walk In The Park (Salvatore) " , " Caught In The Act (Salvatore) " ,
" Search And Rescue (Salvatore) " , " Taking The Peace (Salvatore) " , " Shoot The Messenger (Salvatore) " , " Sayonara Sindaccos (Leon McAffrey) " ,
" The Whole 9 Yardies (Leon McAffrey) " , " Crazy '69' (Leon McAffrey) " , " Night Of The Livid Dreads (Leon McAffrey) " , " Munitions Dump (Leon McAffrey) " ,
" The Morgue Party Candidate (Donald Love) " , " Steering The Vote (Donald Love) " , " Cam-Pain (Donald Love) " , " Friggin' The Riggin' (Donald Love) " ,
" Love & Bullets (Donald Love) " , " Counterfeit Count (Donald Love) " , " Love On The Rocks (Donald Love) " , " L.C. Confidential (Church Confessional) " ,
" The Passion Of The Heist (Church Confessional) " , " Karmageddon (Church Confessional) " , " False Idols (Church Confessional) " , " Rough Justice (Salvatore) " ,
" Dead Reckoning (Salvatore) " , " Shogun Showdown (Salvatore) " , " The Shoreside Redemption (Salvatore) " , " The Sicilian Gambit (Salvatore) " ,
" Panlantic Land Grab (Donald Love) " , " Stop the Press (Donald Love) " , " Morgue Party Resurrection (Donald Love) " , " No Money, Mo' Problems (Donald Love) " ,
" Bringing the House Down (Donald Love) " , " Love on the Run (Donald Love) " , " More Deadly than the Male (Toshiko Kasen) " , " Cash Clash (Toshiko Kasen) " ,
" A Date with Death (Toshiko Kasen) " , " Cash in Kazuki's Chips (Toshiko Kasen) "
2020-08-10 21:04:33 +00:00
} ;
2021-01-23 20:04:24 +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