Merge branch 'lcs' into lcs
This commit is contained in:
@@ -6,8 +6,6 @@
|
||||
#include "Pools.h"
|
||||
#include "World.h"
|
||||
|
||||
// --MIAMI: File done
|
||||
|
||||
CAccidentManager gAccidentManager;
|
||||
|
||||
CAccident*
|
||||
|
||||
@@ -81,7 +81,7 @@ CAnimViewer::Initialise(void) {
|
||||
CCollision::Init();
|
||||
CWorld::Initialise();
|
||||
mod_HandlingManager.Initialise();
|
||||
CTempColModels::Initialise();
|
||||
gpTempColModels->Initialise();
|
||||
CAnimManager::Initialise();
|
||||
CModelInfo::Initialise();
|
||||
CParticle::Initialise();
|
||||
|
||||
@@ -30,8 +30,6 @@
|
||||
#include "Bike.h"
|
||||
#include "Pickups.h"
|
||||
|
||||
//--MIAMI: file done
|
||||
|
||||
bool PrintDebugCode = false;
|
||||
int16 DebugCamMode;
|
||||
|
||||
@@ -953,7 +951,7 @@ CVector
|
||||
CCam::DoAverageOnVector(const CVector &vec)
|
||||
{
|
||||
int i;
|
||||
CVector Average = { 0.0f, 0.0f, 0.0f };
|
||||
CVector Average = CVector(0.0f, 0.0f, 0.0f);
|
||||
|
||||
if(ResetStatics){
|
||||
m_iRunningVectorArrayPos = 0;
|
||||
@@ -4035,7 +4033,7 @@ CCam::Process_Debug(const CVector&, float, float, float)
|
||||
if(CPad::GetPad(1)->GetLeftShockJustDown() && gbBigWhiteDebugLightSwitchedOn)
|
||||
CShadows::StoreShadowToBeRendered(SHADOWTYPE_ADDITIVE, gpShadowExplosionTex, &Source,
|
||||
12.0f, 0.0f, 0.0f, -12.0f,
|
||||
128, 128, 128, 128, 1000.0f, false, 1.0f);
|
||||
128, 128, 128, 128, 1000.0f, false, 1.0f, nil, 1.0f);
|
||||
|
||||
if(CHud::m_Wants_To_Draw_Hud){
|
||||
char str[256];
|
||||
|
||||
@@ -2955,7 +2955,7 @@ CCamera::TryToStartNewCamMode(int obbeMode)
|
||||
if (CReplay::IsPlayingBack())
|
||||
return false;
|
||||
#endif
|
||||
if(FindPlayerPed()->m_pWanted->m_nWantedLevel < 1)
|
||||
if(FindPlayerPed()->m_pWanted->GetWantedLevel() < 1)
|
||||
return false;
|
||||
if(FindPlayerVehicle() == nil)
|
||||
return false;
|
||||
@@ -2983,7 +2983,7 @@ CCamera::TryToStartNewCamMode(int obbeMode)
|
||||
if (CReplay::IsPlayingBack())
|
||||
return false;
|
||||
#endif
|
||||
if(FindPlayerPed()->m_pWanted->m_nWantedLevel < 1)
|
||||
if(FindPlayerPed()->m_pWanted->GetWantedLevel() < 1)
|
||||
return false;
|
||||
if(FindPlayerVehicle() == nil)
|
||||
return false;
|
||||
|
||||
@@ -7,9 +7,6 @@
|
||||
#include "RwHelper.h"
|
||||
#include "MemoryMgr.h"
|
||||
|
||||
#define CDDEBUG(f, ...) debug ("%s: " f "\n", "cdvd_stream", ## __VA_ARGS__)
|
||||
#define CDTRACE(f, ...) printf("%s: " f "\n", "cdvd_stream", ## __VA_ARGS__)
|
||||
|
||||
struct CdReadInfo
|
||||
{
|
||||
uint32 nSectorOffset;
|
||||
@@ -60,7 +57,7 @@ CdStreamInitThread(void)
|
||||
|
||||
if ( gpReadInfo[i].hSemaphore == nil )
|
||||
{
|
||||
CDTRACE("failed to create sync semaphore");
|
||||
printf("%s: failed to create sync semaphore\n", "cdvd_stream");
|
||||
ASSERT(0);
|
||||
return;
|
||||
}
|
||||
@@ -81,7 +78,7 @@ CdStreamInitThread(void)
|
||||
|
||||
if ( gCdStreamSema == nil )
|
||||
{
|
||||
CDTRACE("failed to create stream semaphore");
|
||||
printf("%s: failed to create stream semaphore\n", "cdvd_stream");
|
||||
ASSERT(0);
|
||||
return;
|
||||
}
|
||||
@@ -90,7 +87,7 @@ CdStreamInitThread(void)
|
||||
|
||||
if ( _gCdStreamThread == nil )
|
||||
{
|
||||
CDTRACE("failed to create streaming thread");
|
||||
printf("%s: failed to create streaming thread\n", "cdvd_stream");
|
||||
ASSERT(0);
|
||||
return;
|
||||
}
|
||||
@@ -138,7 +135,7 @@ CdStreamInit(int32 numChannels)
|
||||
gpReadInfo = (CdReadInfo *)LocalAlloc(LMEM_ZEROINIT, sizeof(CdReadInfo) * numChannels);
|
||||
ASSERT( gpReadInfo != nil );
|
||||
|
||||
CDDEBUG("read info %p", gpReadInfo);
|
||||
debug("%s: read info %p\n", "cdvd_stream", gpReadInfo);
|
||||
|
||||
CdStreamAddImage("MODELS\\GTA3.IMG");
|
||||
|
||||
|
||||
@@ -6,8 +6,6 @@
|
||||
#include "Stats.h"
|
||||
#include "VarConsole.h"
|
||||
|
||||
// --MIAMI: File done
|
||||
|
||||
_TODO("gbFastTime");
|
||||
bool gbFastTime;
|
||||
|
||||
|
||||
@@ -1,11 +1,7 @@
|
||||
#if defined RW_D3D9 || defined RWLIBS
|
||||
#define DIRECTINPUT_VERSION 0x0800
|
||||
#include <dinput.h>
|
||||
#endif
|
||||
|
||||
#define WITHDINPUT
|
||||
#include "common.h"
|
||||
#include "platform.h"
|
||||
#include "crossplatform.h" // for Windows version
|
||||
#include "crossplatform.h"
|
||||
#include "ControllerConfig.h"
|
||||
#include "Pad.h"
|
||||
#include "FileMgr.h"
|
||||
@@ -21,8 +17,6 @@
|
||||
#include "Camera.h"
|
||||
#include "GenericGameStorage.h"
|
||||
|
||||
// --MIAMI: file done
|
||||
|
||||
CControllerConfigManager ControlsManager;
|
||||
|
||||
CControllerConfigManager::CControllerConfigManager()
|
||||
@@ -37,6 +31,9 @@ CControllerConfigManager::CControllerConfigManager()
|
||||
|
||||
void CControllerConfigManager::MakeControllerActionsBlank()
|
||||
{
|
||||
#ifdef LOAD_INI_SETTINGS
|
||||
ms_padButtonsInited = 0;
|
||||
#endif
|
||||
for (int32 i = 0; i < MAX_CONTROLLERTYPES; i++)
|
||||
{
|
||||
for (int32 j = 0; j < MAX_CONTROLLERACTIONS; j++)
|
||||
@@ -323,6 +320,10 @@ void CControllerConfigManager::InitDefaultControlConfigMouse(CMouseControllerSta
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef LOAD_INI_SETTINGS
|
||||
uint32 CControllerConfigManager::ms_padButtonsInited = 0;
|
||||
#endif
|
||||
|
||||
void CControllerConfigManager::InitDefaultControlConfigJoyPad(uint32 buttons)
|
||||
{
|
||||
m_bFirstCapture = true;
|
||||
@@ -331,6 +332,22 @@ void CControllerConfigManager::InitDefaultControlConfigJoyPad(uint32 buttons)
|
||||
if (buttons > 16)
|
||||
btn = 16;
|
||||
|
||||
#ifdef LOAD_INI_SETTINGS
|
||||
uint32 buttonMin = ms_padButtonsInited;
|
||||
if (buttonMin >= btn)
|
||||
return;
|
||||
|
||||
ms_padButtonsInited = btn;
|
||||
|
||||
#define IF_BTN_IN_RANGE(n) \
|
||||
case n: \
|
||||
if (n <= buttonMin) \
|
||||
return;
|
||||
#else
|
||||
#define IF_BTN_IN_RANGE(n) \
|
||||
case n:
|
||||
#endif
|
||||
|
||||
// Now we use SDL Game Controller DB
|
||||
#if defined RW_D3D9 || defined RWLIBS
|
||||
if ( AllValidWinJoys.m_aJoys[JOYSTICK1].m_nVendorID == 0x3427
|
||||
@@ -343,50 +360,50 @@ void CControllerConfigManager::InitDefaultControlConfigJoyPad(uint32 buttons)
|
||||
|
||||
switch (btn)
|
||||
{
|
||||
case 16:
|
||||
IF_BTN_IN_RANGE(16)
|
||||
SetControllerKeyAssociatedWithAction(GO_LEFT, 16, JOYSTICK);
|
||||
case 15:
|
||||
IF_BTN_IN_RANGE(15)
|
||||
SetControllerKeyAssociatedWithAction(GO_BACK, 15, JOYSTICK);
|
||||
case 14:
|
||||
IF_BTN_IN_RANGE(14)
|
||||
SetControllerKeyAssociatedWithAction(GO_RIGHT, 14, JOYSTICK);
|
||||
case 13:
|
||||
IF_BTN_IN_RANGE(13)
|
||||
SetControllerKeyAssociatedWithAction(GO_FORWARD, 13, JOYSTICK);
|
||||
case 12:
|
||||
case 11:
|
||||
IF_BTN_IN_RANGE(12)
|
||||
IF_BTN_IN_RANGE(11)
|
||||
SetControllerKeyAssociatedWithAction(PED_LOOKBEHIND, 11, JOYSTICK);
|
||||
SetControllerKeyAssociatedWithAction(TOGGLE_SUBMISSIONS, 11, JOYSTICK);
|
||||
case 10:
|
||||
IF_BTN_IN_RANGE(10)
|
||||
SetControllerKeyAssociatedWithAction(VEHICLE_HORN, 10, JOYSTICK);
|
||||
SetControllerKeyAssociatedWithAction(PED_DUCK, 10, JOYSTICK);
|
||||
case 9:
|
||||
IF_BTN_IN_RANGE(9)
|
||||
SetControllerKeyAssociatedWithAction(CAMERA_CHANGE_VIEW_ALL_SITUATIONS, 9, JOYSTICK);
|
||||
case 8:
|
||||
IF_BTN_IN_RANGE(8)
|
||||
SetControllerKeyAssociatedWithAction(VEHICLE_HANDBRAKE, 8, JOYSTICK);
|
||||
SetControllerKeyAssociatedWithAction(PED_LOCK_TARGET, 8, JOYSTICK);
|
||||
case 7:
|
||||
IF_BTN_IN_RANGE(7)
|
||||
SetControllerKeyAssociatedWithAction(PED_ANSWER_PHONE, 7, JOYSTICK);
|
||||
SetControllerKeyAssociatedWithAction(VEHICLE_CHANGE_RADIO_STATION, 7, JOYSTICK);
|
||||
case 6:
|
||||
IF_BTN_IN_RANGE(6)
|
||||
SetControllerKeyAssociatedWithAction(PED_CYCLE_WEAPON_RIGHT, 6, JOYSTICK);
|
||||
SetControllerKeyAssociatedWithAction(VEHICLE_LOOKRIGHT, 6, JOYSTICK);
|
||||
case 5:
|
||||
IF_BTN_IN_RANGE(5)
|
||||
SetControllerKeyAssociatedWithAction(PED_CYCLE_WEAPON_LEFT, 5, JOYSTICK);
|
||||
SetControllerKeyAssociatedWithAction(VEHICLE_LOOKLEFT, 5, JOYSTICK);
|
||||
/*******************************************************************************************/
|
||||
case 4:
|
||||
IF_BTN_IN_RANGE(4)
|
||||
SetControllerKeyAssociatedWithAction(VEHICLE_BRAKE, 4, JOYSTICK);
|
||||
SetControllerKeyAssociatedWithAction(PED_JUMPING, 4, JOYSTICK);
|
||||
SetControllerKeyAssociatedWithAction(PED_SNIPER_ZOOM_IN, 4, JOYSTICK);
|
||||
case 3:
|
||||
IF_BTN_IN_RANGE(3)
|
||||
SetControllerKeyAssociatedWithAction(VEHICLE_ACCELERATE, 3, JOYSTICK);
|
||||
SetControllerKeyAssociatedWithAction(PED_SPRINT, 3, JOYSTICK);
|
||||
SetControllerKeyAssociatedWithAction(PED_SNIPER_ZOOM_OUT, 3, JOYSTICK);
|
||||
case 2:
|
||||
IF_BTN_IN_RANGE(2)
|
||||
SetControllerKeyAssociatedWithAction(PED_FIREWEAPON, 2, JOYSTICK);
|
||||
#ifdef BIND_VEHICLE_FIREWEAPON
|
||||
SetControllerKeyAssociatedWithAction(VEHICLE_FIREWEAPON, 2, JOYSTICK);
|
||||
#endif
|
||||
case 1:
|
||||
IF_BTN_IN_RANGE(1)
|
||||
SetControllerKeyAssociatedWithAction(VEHICLE_ENTER_EXIT, 1, JOYSTICK);
|
||||
/*******************************************************************************************/
|
||||
}
|
||||
@@ -395,47 +412,47 @@ void CControllerConfigManager::InitDefaultControlConfigJoyPad(uint32 buttons)
|
||||
{
|
||||
switch (btn)
|
||||
{
|
||||
case 16:
|
||||
IF_BTN_IN_RANGE(16)
|
||||
SetControllerKeyAssociatedWithAction(GO_LEFT, 16, JOYSTICK);
|
||||
case 15:
|
||||
IF_BTN_IN_RANGE(15)
|
||||
SetControllerKeyAssociatedWithAction(GO_BACK, 15, JOYSTICK);
|
||||
case 14:
|
||||
IF_BTN_IN_RANGE(14)
|
||||
SetControllerKeyAssociatedWithAction(GO_RIGHT, 14, JOYSTICK);
|
||||
case 13:
|
||||
IF_BTN_IN_RANGE(13)
|
||||
SetControllerKeyAssociatedWithAction(GO_FORWARD, 13, JOYSTICK);
|
||||
case 12:
|
||||
case 11:
|
||||
IF_BTN_IN_RANGE(12)
|
||||
IF_BTN_IN_RANGE(11)
|
||||
SetControllerKeyAssociatedWithAction(PED_LOOKBEHIND, 11, JOYSTICK);
|
||||
SetControllerKeyAssociatedWithAction(TOGGLE_SUBMISSIONS, 11, JOYSTICK);
|
||||
case 10:
|
||||
IF_BTN_IN_RANGE(10)
|
||||
SetControllerKeyAssociatedWithAction(VEHICLE_HORN, 10, JOYSTICK);
|
||||
SetControllerKeyAssociatedWithAction(PED_DUCK, 10, JOYSTICK);
|
||||
case 9:
|
||||
IF_BTN_IN_RANGE(9)
|
||||
SetControllerKeyAssociatedWithAction(CAMERA_CHANGE_VIEW_ALL_SITUATIONS, 9, JOYSTICK);
|
||||
case 8:
|
||||
IF_BTN_IN_RANGE(8)
|
||||
SetControllerKeyAssociatedWithAction(VEHICLE_HANDBRAKE, 8, JOYSTICK);
|
||||
SetControllerKeyAssociatedWithAction(PED_LOCK_TARGET, 8, JOYSTICK);
|
||||
case 7:
|
||||
IF_BTN_IN_RANGE(7)
|
||||
SetControllerKeyAssociatedWithAction(PED_ANSWER_PHONE, 7, JOYSTICK);
|
||||
SetControllerKeyAssociatedWithAction(VEHICLE_CHANGE_RADIO_STATION, 7, JOYSTICK);
|
||||
case 6:
|
||||
IF_BTN_IN_RANGE(6)
|
||||
SetControllerKeyAssociatedWithAction(PED_CYCLE_WEAPON_RIGHT, 6, JOYSTICK);
|
||||
SetControllerKeyAssociatedWithAction(VEHICLE_LOOKRIGHT, 6, JOYSTICK);
|
||||
case 5:
|
||||
IF_BTN_IN_RANGE(5)
|
||||
SetControllerKeyAssociatedWithAction(PED_CYCLE_WEAPON_LEFT, 5, JOYSTICK);
|
||||
SetControllerKeyAssociatedWithAction(VEHICLE_LOOKLEFT, 5, JOYSTICK);
|
||||
/*******************************************************************************************/
|
||||
case 4:
|
||||
IF_BTN_IN_RANGE(4)
|
||||
SetControllerKeyAssociatedWithAction(VEHICLE_ENTER_EXIT, 4, JOYSTICK);
|
||||
case 3:
|
||||
IF_BTN_IN_RANGE(3)
|
||||
SetControllerKeyAssociatedWithAction(VEHICLE_BRAKE, 3, JOYSTICK);
|
||||
SetControllerKeyAssociatedWithAction(PED_JUMPING, 3, JOYSTICK);
|
||||
SetControllerKeyAssociatedWithAction(PED_SNIPER_ZOOM_IN, 3, JOYSTICK);
|
||||
case 2:
|
||||
IF_BTN_IN_RANGE(2)
|
||||
SetControllerKeyAssociatedWithAction(VEHICLE_ACCELERATE, 2, JOYSTICK);
|
||||
SetControllerKeyAssociatedWithAction(PED_SPRINT, 2, JOYSTICK);
|
||||
SetControllerKeyAssociatedWithAction(PED_SNIPER_ZOOM_OUT, 2, JOYSTICK);
|
||||
case 1:
|
||||
IF_BTN_IN_RANGE(1)
|
||||
SetControllerKeyAssociatedWithAction(PED_FIREWEAPON, 1, JOYSTICK);
|
||||
#ifdef BIND_VEHICLE_FIREWEAPON
|
||||
SetControllerKeyAssociatedWithAction(VEHICLE_FIREWEAPON, 1, JOYSTICK);
|
||||
@@ -524,7 +541,7 @@ void CControllerConfigManager::UpdateJoyInConfigMenus_ButtonDown(int32 button, i
|
||||
break;
|
||||
case 12:
|
||||
#ifndef REGISTER_START_BUTTON
|
||||
if (padNumber == 1)
|
||||
if (padnumber == 1)
|
||||
#endif
|
||||
pad->PCTempJoyState.Start = 255;
|
||||
break;
|
||||
@@ -2738,9 +2755,10 @@ wchar *CControllerConfigManager::GetButtonComboText(e_ControllerAction action)
|
||||
void CControllerConfigManager::SetControllerKeyAssociatedWithAction(e_ControllerAction action, int32 key, eControllerType type)
|
||||
{
|
||||
ResetSettingOrder(action);
|
||||
int numOfSettings = GetNumOfSettingsForAction(action);
|
||||
|
||||
m_aSettings[action][type].m_Key = key;
|
||||
m_aSettings[action][type].m_ContSetOrder = GetNumOfSettingsForAction(action) + 1;
|
||||
m_aSettings[action][type].m_ContSetOrder = numOfSettings + 1;
|
||||
}
|
||||
|
||||
int32 CControllerConfigManager::GetMouseButtonAssociatedWithAction(e_ControllerAction action)
|
||||
@@ -2750,8 +2768,10 @@ int32 CControllerConfigManager::GetMouseButtonAssociatedWithAction(e_ControllerA
|
||||
|
||||
void CControllerConfigManager::SetMouseButtonAssociatedWithAction(e_ControllerAction action, int32 button)
|
||||
{
|
||||
int numOfSettings = GetNumOfSettingsForAction(action);
|
||||
|
||||
m_aSettings[action][MOUSE].m_Key = button;
|
||||
m_aSettings[action][MOUSE].m_ContSetOrder = GetNumOfSettingsForAction(action) + 1;
|
||||
m_aSettings[action][MOUSE].m_ContSetOrder = numOfSettings + 1;
|
||||
}
|
||||
|
||||
void CControllerConfigManager::ResetSettingOrder(e_ControllerAction action)
|
||||
@@ -2774,7 +2794,7 @@ void CControllerConfigManager::ResetSettingOrder(e_ControllerAction action)
|
||||
for (int32 k = 0; k < MAX_CONTROLLERTYPES; k++)
|
||||
{
|
||||
int32 setorder = m_aSettings[action][k].m_ContSetOrder;
|
||||
if (setorder > i && setorder != KEYBOARD)
|
||||
if (setorder > i && setorder != 0)
|
||||
{
|
||||
if (init)
|
||||
{
|
||||
|
||||
@@ -144,6 +144,10 @@ public:
|
||||
tControllerConfigBind m_aSettings[MAX_CONTROLLERACTIONS][MAX_CONTROLLERTYPES];
|
||||
bool m_aSimCheckers[MAX_SIMS][MAX_CONTROLLERTYPES];
|
||||
bool m_bMouseAssociated;
|
||||
|
||||
#ifdef LOAD_INI_SETTINGS
|
||||
static uint32 ms_padButtonsInited;
|
||||
#endif
|
||||
|
||||
CControllerConfigManager();
|
||||
|
||||
|
||||
@@ -10,8 +10,6 @@
|
||||
#include "main.h"
|
||||
#include "Accident.h"
|
||||
|
||||
// --MIAMI: file done
|
||||
|
||||
int32 CEventList::ms_nFirstFreeSlotIndex;
|
||||
CEvent gaEvent[NUMEVENTS];
|
||||
|
||||
@@ -220,7 +218,7 @@ CEventList::ReportCrimeForEvent(eEventType type, intptr crimeId, bool copsDontCa
|
||||
default: crime = CRIME_NONE; break;
|
||||
}
|
||||
|
||||
if (crime == CRIME_HIT_PED && IsPedPointerValid((CPed*)crimeId) && FindPlayerPed()->m_pWanted->m_nWantedLevel == 0 && ((CPed*)crimeId)->bBeingChasedByPolice) {
|
||||
if (crime == CRIME_HIT_PED && IsPedPointerValid((CPed*)crimeId) && FindPlayerPed()->m_pWanted->GetWantedLevel() == 0 && ((CPed*)crimeId)->bBeingChasedByPolice) {
|
||||
if (!((CPed*)crimeId)->DyingOrDead()) {
|
||||
CMessages::AddBigMessage(TheText.Get("GOODBOY"), 5000, 0);
|
||||
CWorld::Players[CWorld::PlayerInFocus].m_nMoney += 50;
|
||||
|
||||
@@ -30,8 +30,6 @@
|
||||
#include "ColStore.h"
|
||||
#include "Occlusion.h"
|
||||
|
||||
//--MIAMI: file done
|
||||
|
||||
char CFileLoader::ms_line[256];
|
||||
|
||||
const char*
|
||||
@@ -609,11 +607,14 @@ CFileLoader::LoadObjectTypes(const char *filename)
|
||||
int section;
|
||||
int pathIndex;
|
||||
int id, pathType;
|
||||
int minID, maxID;
|
||||
//int minID, maxID;
|
||||
|
||||
for(int i = 0; i < ARRAY_SIZE(m_sTempIdeData); i++)
|
||||
m_sTempIdeData[i].id = -1;
|
||||
|
||||
section = NONE;
|
||||
minID = INT32_MAX;
|
||||
maxID = -1;
|
||||
//minID = INT32_MAX;
|
||||
//maxID = -1;
|
||||
pathIndex = -1;
|
||||
debug("Loading object types from %s...\n", filename);
|
||||
|
||||
@@ -637,13 +638,13 @@ CFileLoader::LoadObjectTypes(const char *filename)
|
||||
}else switch(section){
|
||||
case OBJS:
|
||||
id = LoadObject(line);
|
||||
if(id > maxID) maxID = id;
|
||||
if(id < minID) minID = id;
|
||||
//if(id > maxID) maxID = id;
|
||||
//if(id < minID) minID = id;
|
||||
break;
|
||||
case TOBJ:
|
||||
id = LoadTimeObject(line);
|
||||
if(id > maxID) maxID = id;
|
||||
if(id < minID) minID = id;
|
||||
//if(id > maxID) maxID = id;
|
||||
//if(id < minID) minID = id;
|
||||
break;
|
||||
case WEAP:
|
||||
LoadWeaponObject(line);
|
||||
@@ -680,10 +681,10 @@ CFileLoader::LoadObjectTypes(const char *filename)
|
||||
}
|
||||
CFileMgr::CloseFile(fd);
|
||||
|
||||
for(id = minID; id <= maxID; id++){
|
||||
for(id = 0; id < MODELINFOSIZE; id++){
|
||||
CSimpleModelInfo *mi = (CSimpleModelInfo*)CModelInfo::GetModelInfo(id);
|
||||
if(mi && mi->IsBuilding())
|
||||
mi->SetupBigBuilding(minID, maxID);
|
||||
mi->SetupBigBuilding();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -716,6 +717,13 @@ CFileLoader::LoadObject(const char *line)
|
||||
if(sscanf(line, "%d %s %s %d", &id, model, txd, &numObjs) != 4)
|
||||
return 0; // game returns return value
|
||||
|
||||
for(int i = 0; i < ARRAY_SIZE(m_sTempIdeData); i++)
|
||||
if(m_sTempIdeData[i].id == -1){
|
||||
m_sTempIdeData[i].id = id;
|
||||
strcpy(m_sTempIdeData[i].name, model);
|
||||
break;
|
||||
}
|
||||
|
||||
switch(numObjs){
|
||||
case 1:
|
||||
sscanf(line, "%d %s %s %d %f %d",
|
||||
@@ -764,6 +772,13 @@ CFileLoader::LoadTimeObject(const char *line)
|
||||
if(sscanf(line, "%d %s %s %d", &id, model, txd, &numObjs) != 4)
|
||||
return 0; // game returns return value
|
||||
|
||||
for(int i = 0; i < ARRAY_SIZE(m_sTempIdeData); i++)
|
||||
if(m_sTempIdeData[i].id < 0){
|
||||
m_sTempIdeData[i].id = id;
|
||||
strcpy(m_sTempIdeData[i].name, model);
|
||||
break;
|
||||
}
|
||||
|
||||
switch(numObjs){
|
||||
case 1:
|
||||
sscanf(line, "%d %s %s %d %f %d %d %d",
|
||||
@@ -794,7 +809,7 @@ CFileLoader::LoadTimeObject(const char *line)
|
||||
mi->m_firstDamaged = damaged;
|
||||
mi->SetTimes(timeOn, timeOff);
|
||||
mi->SetTexDictionary(txd);
|
||||
other = mi->FindOtherTimeModel();
|
||||
other = mi->FindOtherTimeModel(model);
|
||||
if(other)
|
||||
other->SetOtherTimeModel(id);
|
||||
MatchModelString(model, id);
|
||||
@@ -818,7 +833,7 @@ CFileLoader::LoadWeaponObject(const char *line)
|
||||
mi->m_lodDistances[0] = dist;
|
||||
mi->SetTexDictionary(txd);
|
||||
mi->SetAnimFile(animFile);
|
||||
mi->SetColModel(&CTempColModels::ms_colModelWeapon);
|
||||
mi->SetColModel(&gpTempColModels->ms_colModelWeapon);
|
||||
MatchModelString(model, id);
|
||||
return id;
|
||||
}
|
||||
@@ -834,7 +849,7 @@ CFileLoader::LoadClumpObject(const char *line)
|
||||
mi = CModelInfo::AddClumpModel(id);
|
||||
mi->SetModelName(model);
|
||||
mi->SetTexDictionary(txd);
|
||||
mi->SetColModel(&CTempColModels::ms_colModelBBox);
|
||||
mi->SetColModel(&gpTempColModels->ms_colModelBBox);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -941,7 +956,7 @@ CFileLoader::LoadPedObject(const char *line)
|
||||
mi->SetModelName(model);
|
||||
mi->SetTexDictionary(txd);
|
||||
mi->SetAnimFile(animFile);
|
||||
mi->SetColModel(&CTempColModels::ms_colModelPed1);
|
||||
mi->SetColModel(&gpTempColModels->ms_colModelPed1);
|
||||
mi->m_pedType = CPedType::FindPedType(pedType);
|
||||
mi->m_pedStatType = CPedStats::GetPedStatType(pedStats);
|
||||
for(animGroupId = 0; animGroupId < NUM_ANIM_ASSOC_GROUPS; animGroupId++)
|
||||
@@ -1312,7 +1327,7 @@ CFileLoader::LoadOcclusionVolume(const char *line)
|
||||
}
|
||||
|
||||
|
||||
//--MIAMI: unused
|
||||
// unused
|
||||
void
|
||||
CFileLoader::ReloadPaths(const char *filename)
|
||||
{
|
||||
|
||||
@@ -18,8 +18,6 @@
|
||||
#include "GameLogic.h"
|
||||
#include "CarAI.h"
|
||||
|
||||
// --MIAMI: file done
|
||||
|
||||
CFireManager gFireManager;
|
||||
|
||||
CFire::CFire()
|
||||
|
||||
@@ -1,10 +1,6 @@
|
||||
#if defined RW_D3D9 || defined RWLIBS
|
||||
#define DIRECTINPUT_VERSION 0x0800
|
||||
#include <dinput.h>
|
||||
#endif
|
||||
|
||||
#define FORCE_PC_SCALING
|
||||
#define WITHWINDOWS
|
||||
#define WITHDINPUT
|
||||
#include "common.h"
|
||||
#ifndef PS2_MENU
|
||||
#include "crossplatform.h"
|
||||
@@ -41,7 +37,6 @@
|
||||
#include "sampman.h"
|
||||
|
||||
// --LCS: changed a bit to have lcs feel, needs more work
|
||||
|
||||
// Similar story to Hud.cpp:
|
||||
// Game has colors inlined in code.
|
||||
// For easier modification we collect them here:
|
||||
@@ -50,7 +45,7 @@ const CRGBA SELECTIONBORDER_COLOR(25, 130, 70, 255);
|
||||
const CRGBA MENUOPTION_COLOR = LABEL_COLOR;
|
||||
const CRGBA SELECTEDMENUOPTION_COLOR(255, 255, 255, 255);
|
||||
const CRGBA HEADER_COLOR(197, 0, 0, 255);
|
||||
const CRGBA DARKMENUOPTION_COLOR(195, 90, 165, 255);
|
||||
const CRGBA DARKMENUOPTION_COLOR(115/2, 173/2, 216 / 2, 255);
|
||||
const CRGBA SLIDERON_COLOR(97, 194, 247, 255);
|
||||
const CRGBA SLIDEROFF_COLOR(27, 89, 130, 255);
|
||||
const CRGBA LIST_BACKGROUND_COLOR(49, 101, 148, 130);
|
||||
@@ -582,13 +577,21 @@ CMenuManager::Initialise(void)
|
||||
DMAudio.Service();
|
||||
DMAudio.SetMusicMasterVolume(m_PrefsMusicVolume);
|
||||
DMAudio.SetEffectsMasterVolume(m_PrefsSfxVolume);
|
||||
#ifdef FIX_BUGS
|
||||
static bool firstTime = true;
|
||||
if (firstTime) {
|
||||
DMAudio.SetRadioInCar(m_PrefsRadioStation);
|
||||
firstTime = false;
|
||||
} else
|
||||
#endif
|
||||
m_PrefsRadioStation = DMAudio.GetRadioInCar();
|
||||
|
||||
DMAudio.SetMP3BoostVolume(m_PrefsMP3BoostVolume);
|
||||
if (DMAudio.IsMP3RadioChannelAvailable()) {
|
||||
if (m_PrefsRadioStation < WILDSTYLE || m_PrefsRadioStation > USERTRACK)
|
||||
m_PrefsRadioStation = CGeneral::GetRandomNumber() % 10;
|
||||
m_PrefsRadioStation = CGeneral::GetRandomNumber() % (USERTRACK + 1);
|
||||
} else if (m_PrefsRadioStation < WILDSTYLE || m_PrefsRadioStation > WAVE)
|
||||
m_PrefsRadioStation = CGeneral::GetRandomNumber() % 9;
|
||||
m_PrefsRadioStation = CGeneral::GetRandomNumber() % (WAVE + 1);
|
||||
|
||||
CFileMgr::SetDir("");
|
||||
//CFileMgr::SetDir("");
|
||||
@@ -672,7 +675,11 @@ CMenuManager::CheckCodesForControls(int typeOfControl)
|
||||
m_bWaitingForNewKeyBind = false;
|
||||
m_KeyPressedCode = -1;
|
||||
m_bStartWaitingForKeyBind = false;
|
||||
#ifdef LOAD_INI_SETTINGS
|
||||
SaveINIControllerSettings();
|
||||
#else
|
||||
SaveSettings();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@@ -909,14 +916,14 @@ CMenuManager::DrawStandardMenus(bool activeScreen)
|
||||
#endif
|
||||
|
||||
switch (m_nCurrScreen) {
|
||||
case MENUPAGE_CHOOSE_LOAD_SLOT:
|
||||
/*case MENUPAGE_CHOOSE_LOAD_SLOT:
|
||||
case MENUPAGE_CHOOSE_DELETE_SLOT:
|
||||
case MENUPAGE_CHOOSE_SAVE_SLOT:
|
||||
CSprite2d::Draw2DPolygon(MENU_X_LEFT_ALIGNED(38.0f), MENU_Y(85.0f),
|
||||
MENU_X_LEFT_ALIGNED(615.0f), MENU_Y(75.0f),
|
||||
MENU_X_LEFT_ALIGNED(30.0f), MENU_Y(320.0f),
|
||||
MENU_X_LEFT_ALIGNED(605.0f), MENU_Y(330.0f), CRGBA(LIST_BACKGROUND_COLOR.r, LIST_BACKGROUND_COLOR.g, LIST_BACKGROUND_COLOR.b, FadeIn(LIST_BACKGROUND_COLOR.a)));
|
||||
break;
|
||||
break;*/
|
||||
case MENUPAGE_SOUND_SETTINGS:
|
||||
PrintRadioSelector();
|
||||
break;
|
||||
@@ -993,7 +1000,9 @@ CMenuManager::DrawStandardMenus(bool activeScreen)
|
||||
}
|
||||
|
||||
wchar unicodeTemp[64];
|
||||
#ifdef ASPECT_RATIO_SCALE
|
||||
char asciiTemp[32];
|
||||
#endif
|
||||
|
||||
bool weHaveLabel = aScreens[m_nCurrScreen].m_aEntries[0].m_Action == MENUACTION_LABEL;
|
||||
uint8 section = 0; // 0: highlight trapezoid 1: texts
|
||||
@@ -1010,12 +1019,12 @@ CMenuManager::DrawStandardMenus(bool activeScreen)
|
||||
#endif
|
||||
wchar* rightText = nil;
|
||||
wchar* leftText;
|
||||
if (aScreens[m_nCurrScreen].m_aEntries[i].m_SaveSlot >= SAVESLOT_1 && aScreens[m_nCurrScreen].m_aEntries[i].m_SaveSlot <= SAVESLOT_8) {
|
||||
/*if (aScreens[m_nCurrScreen].m_aEntries[i].m_SaveSlot >= SAVESLOT_1 && aScreens[m_nCurrScreen].m_aEntries[i].m_SaveSlot <= SAVESLOT_8) {
|
||||
CFont::SetColor(CRGBA(0, 0, 0, FadeIn(255)));
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_STANDARD));
|
||||
CFont::SetScale(MENU_X(MEDIUMTEXT_X_SCALE), MENU_Y(MEDIUMTEXT_Y_SCALE));
|
||||
CFont::SetDropShadowPosition(0);
|
||||
} else {
|
||||
} else {*/
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_STANDARD));
|
||||
CFont::SetScale(MENU_X(BIGTEXT_X_SCALE), MENU_Y(BIGTEXT_Y_SCALE));
|
||||
CFont::SetDropShadowPosition(2);
|
||||
@@ -1024,7 +1033,7 @@ CMenuManager::DrawStandardMenus(bool activeScreen)
|
||||
CFont::SetColor(CRGBA(SELECTEDMENUOPTION_COLOR.r, SELECTEDMENUOPTION_COLOR.g, SELECTEDMENUOPTION_COLOR.b, FadeIn(255)));
|
||||
else
|
||||
CFont::SetColor(CRGBA(MENUOPTION_COLOR.r, MENUOPTION_COLOR.g, MENUOPTION_COLOR.b, FadeIn(255)));
|
||||
}
|
||||
//}
|
||||
if (aScreens[m_nCurrScreen].m_aEntries[i].m_Align == MENUALIGN_LEFT) {
|
||||
CFont::SetCentreOff();
|
||||
CFont::SetRightJustifyOff();
|
||||
@@ -3054,6 +3063,16 @@ CMenuManager::LoadSettings()
|
||||
CFileMgr::CloseFile(fileHandle);
|
||||
CFileMgr::SetDir("");
|
||||
|
||||
#ifdef LOAD_INI_SETTINGS
|
||||
if (LoadINISettings()) {
|
||||
LoadINIControllerSettings();
|
||||
} else {
|
||||
// no re3.ini, create it
|
||||
SaveINISettings();
|
||||
SaveINIControllerSettings();
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef FIX_BUGS
|
||||
TheCamera.m_fMouseAccelVertical = TheCamera.m_fMouseAccelHorzntl + 0.0005f;
|
||||
#endif
|
||||
@@ -3099,15 +3118,12 @@ CMenuManager::LoadSettings()
|
||||
strcpy(m_PrefsSkinFile, DEFAULT_SKIN_NAME);
|
||||
strcpy(m_aSkinName, DEFAULT_SKIN_NAME);
|
||||
}
|
||||
|
||||
#ifdef LOAD_INI_SETTINGS
|
||||
LoadINISettings(); // needs frontend options to be loaded
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
CMenuManager::SaveSettings()
|
||||
{
|
||||
#ifndef LOAD_INI_SETTINGS
|
||||
static char RubbishString[48] = "stuffmorestuffevenmorestuff etc";
|
||||
static int SomeVersion = 3;
|
||||
|
||||
@@ -3166,7 +3182,8 @@ CMenuManager::SaveSettings()
|
||||
CFileMgr::CloseFile(fileHandle);
|
||||
CFileMgr::SetDir("");
|
||||
|
||||
#ifdef LOAD_INI_SETTINGS
|
||||
#else
|
||||
m_lastWorking3DAudioProvider = m_nPrefsAudio3DProviderIndex;
|
||||
SaveINISettings();
|
||||
#endif
|
||||
}
|
||||
@@ -3222,7 +3239,7 @@ CMenuManager::SmallMessageScreen(const char* text)
|
||||
void
|
||||
CMenuManager::PrintBriefs()
|
||||
{
|
||||
CFont::SetColor(CRGBA(0, 0, 0, FadeIn(255)));
|
||||
CFont::SetColor(CRGBA(255, 255, 255, FadeIn(255)));
|
||||
CFont::SetRightJustifyOff();
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_STANDARD));
|
||||
CFont::SetScale(MENU_X(MEDIUMTEXT_X_SCALE), MENU_Y(MEDIUMTEXT_Y_SCALE));
|
||||
@@ -4446,19 +4463,19 @@ CMenuManager::ProcessUserInput(uint8 goDown, uint8 goUp, uint8 optionSelected, u
|
||||
MouseButtonJustClicked = false;
|
||||
|
||||
if (CPad::GetPad(0)->GetLeftMouseJustDown())
|
||||
MouseButtonJustClicked = 1;
|
||||
MouseButtonJustClicked = rsMOUSELEFTBUTTON;
|
||||
else if (CPad::GetPad(0)->GetRightMouseJustUp())
|
||||
MouseButtonJustClicked = 3;
|
||||
MouseButtonJustClicked = rsMOUSERIGHTBUTTON;
|
||||
else if (CPad::GetPad(0)->GetMiddleMouseJustUp())
|
||||
MouseButtonJustClicked = 2;
|
||||
MouseButtonJustClicked = rsMOUSMIDDLEBUTTON;
|
||||
else if (CPad::GetPad(0)->GetMouseWheelUpJustUp())
|
||||
MouseButtonJustClicked = 4;
|
||||
MouseButtonJustClicked = rsMOUSEWHEELUPBUTTON;
|
||||
else if (CPad::GetPad(0)->GetMouseWheelDownJustUp())
|
||||
MouseButtonJustClicked = 5;
|
||||
MouseButtonJustClicked = rsMOUSEWHEELDOWNBUTTON;
|
||||
else if (CPad::GetPad(0)->GetMouseX1JustUp())
|
||||
MouseButtonJustClicked = 6;
|
||||
MouseButtonJustClicked = rsMOUSEX1BUTTON;
|
||||
else if (CPad::GetPad(0)->GetMouseX2JustUp())
|
||||
MouseButtonJustClicked = 7;
|
||||
MouseButtonJustClicked = rsMOUSEX2BUTTON;
|
||||
|
||||
JoyButtonJustClicked = ControlsManager.GetJoyButtonJustDown();
|
||||
|
||||
@@ -4687,7 +4704,8 @@ CMenuManager::ProcessUserInput(uint8 goDown, uint8 goUp, uint8 optionSelected, u
|
||||
break;
|
||||
case MENUACTION_CANCELGAME:
|
||||
DMAudio.Service();
|
||||
SwitchToNewScreen(MENUPAGE_OUTRO);
|
||||
RsEventHandler(rsQUITAPP, nil);
|
||||
//SwitchToNewScreen(MENUPAGE_OUTRO);
|
||||
break;
|
||||
case MENUACTION_RESUME:
|
||||
#ifdef LEGACY_MENU_OPTIONS
|
||||
@@ -4818,6 +4836,9 @@ CMenuManager::ProcessUserInput(uint8 goDown, uint8 goUp, uint8 optionSelected, u
|
||||
TheCamera.m_bUseMouse3rdPerson = false;
|
||||
#endif
|
||||
SaveSettings();
|
||||
#ifdef LOAD_INI_SETTINGS
|
||||
SaveINIControllerSettings();
|
||||
#endif
|
||||
}
|
||||
SetHelperText(2);
|
||||
break;
|
||||
@@ -4848,7 +4869,8 @@ CMenuManager::ProcessUserInput(uint8 goDown, uint8 goUp, uint8 optionSelected, u
|
||||
|
||||
*option.m_CFO->value = option.m_CFOSelect->lastSavedValue = option.m_CFOSelect->displayedValue;
|
||||
|
||||
if (option.m_CFOSelect->save)
|
||||
// Now everything is saved in .ini, and LOAD_INI_SETTINGS is fundamental for CFO
|
||||
// if (option.m_CFOSelect->save)
|
||||
SaveSettings();
|
||||
|
||||
if (option.m_CFOSelect->displayedValue != oldValue && option.m_CFOSelect->changeFunc)
|
||||
@@ -5004,7 +5026,8 @@ CMenuManager::ProcessUserInput(uint8 goDown, uint8 goUp, uint8 optionSelected, u
|
||||
|
||||
*option.m_CFO->value = option.m_CFOSelect->lastSavedValue = option.m_CFOSelect->displayedValue;
|
||||
|
||||
if (option.m_CFOSelect->save)
|
||||
// Now everything is saved in .ini, and LOAD_INI_SETTINGS is fundamental for CFO
|
||||
// if (option.m_CFOSelect->save)
|
||||
SaveSettings();
|
||||
|
||||
if (option.m_CFOSelect->displayedValue != oldValue && option.m_CFOSelect->changeFunc)
|
||||
@@ -5446,6 +5469,9 @@ CMenuManager::SwitchMenuOnAndOff()
|
||||
ThingsToDoBeforeLeavingPage();
|
||||
#endif
|
||||
SaveSettings();
|
||||
#ifdef LOAD_INI_SETTINGS
|
||||
SaveINIControllerSettings();
|
||||
#endif
|
||||
pControlEdit = nil;
|
||||
pEditString = nil;
|
||||
DisplayComboButtonErrMsg = false;
|
||||
|
||||
@@ -392,6 +392,7 @@ struct CCustomScreenLayout {
|
||||
struct CCFO
|
||||
{
|
||||
int8 *value;
|
||||
const char *saveCat;
|
||||
const char *save;
|
||||
};
|
||||
|
||||
@@ -406,11 +407,12 @@ struct CCFOSelect : CCFO
|
||||
bool disableIfGameLoaded;
|
||||
|
||||
CCFOSelect() {};
|
||||
CCFOSelect(int8* value, const char* save, const char** rightTexts, int8 numRightTexts, bool onlyApplyOnEnter, ChangeFunc changeFunc = nil, bool disableIfGameLoaded = false){
|
||||
CCFOSelect(int8* value, const char* saveCat, const char* save, const char** rightTexts, int8 numRightTexts, bool onlyApplyOnEnter, ChangeFunc changeFunc = nil, bool disableIfGameLoaded = false){
|
||||
this->value = value;
|
||||
if (value)
|
||||
this->lastSavedValue = this->displayedValue = *value;
|
||||
|
||||
this->saveCat = saveCat;
|
||||
this->save = save;
|
||||
this->rightTexts = (char**)rightTexts;
|
||||
this->numRightTexts = numRightTexts;
|
||||
@@ -426,8 +428,9 @@ struct CCFODynamic : CCFO
|
||||
ButtonPressFunc buttonPressFunc;
|
||||
|
||||
CCFODynamic() {};
|
||||
CCFODynamic(int8* value, const char* save, DrawFunc drawFunc, ButtonPressFunc buttonPressFunc){
|
||||
CCFODynamic(int8* value, const char* saveCat, const char* save, DrawFunc drawFunc, ButtonPressFunc buttonPressFunc){
|
||||
this->value = value;
|
||||
this->saveCat = saveCat;
|
||||
this->save = save;
|
||||
this->drawFunc = drawFunc;
|
||||
this->buttonPressFunc = buttonPressFunc;
|
||||
@@ -581,7 +584,7 @@ public:
|
||||
int8 m_bLanguageLoaded;
|
||||
uint8 m_PrefsAllowNastyGame;
|
||||
int8 m_PrefsMP3BoostVolume;
|
||||
uint8 m_ControlMethod;
|
||||
int8 m_ControlMethod;
|
||||
int32 m_nPrefsVideoMode;
|
||||
int32 m_nDisplayVideoMode;
|
||||
int32 m_nMouseTempPosX;
|
||||
|
||||
@@ -1,6 +1,3 @@
|
||||
#pragma warning( push )
|
||||
#pragma warning( disable : 4005)
|
||||
#pragma warning( pop )
|
||||
#include "common.h"
|
||||
#include "platform.h"
|
||||
|
||||
@@ -10,7 +7,6 @@
|
||||
#include "Accident.h"
|
||||
#include "Antennas.h"
|
||||
#include "Bridge.h"
|
||||
#include "Camera.h"
|
||||
#include "CarCtrl.h"
|
||||
#include "CarGen.h"
|
||||
#include "CdStream.h"
|
||||
@@ -69,7 +65,6 @@
|
||||
#include "Skidmarks.h"
|
||||
#include "SetPieces.h"
|
||||
#include "SpecialFX.h"
|
||||
#include "Sprite2d.h"
|
||||
#include "Stats.h"
|
||||
#include "Streaming.h"
|
||||
#include "SurfaceTable.h"
|
||||
@@ -125,8 +120,6 @@ int gameTxdSlot;
|
||||
uint8 gameProcessPirateCheck = 0;
|
||||
#endif
|
||||
|
||||
// --MIAMI: File done
|
||||
|
||||
bool DoRWStuffStartOfFrame(int16 TopRed, int16 TopGreen, int16 TopBlue, int16 BottomRed, int16 BottomGreen, int16 BottomBlue, int16 Alpha);
|
||||
void DoRWStuffEndOfFrame(void);
|
||||
#ifdef PS2_MENU
|
||||
@@ -323,7 +316,7 @@ bool CGame::InitialiseOnceAfterRW(void)
|
||||
{
|
||||
TheText.Load();
|
||||
CTimer::Initialise();
|
||||
CTempColModels::Initialise();
|
||||
gpTempColModels->Initialise();
|
||||
mod_HandlingManager.Initialise();
|
||||
CSurfaceTable::Initialise("DATA\\SURFACE.DAT");
|
||||
CPedStats::Initialise();
|
||||
@@ -373,6 +366,9 @@ bool CGame::Initialise(const char* datFile)
|
||||
|
||||
CPools::Initialise();
|
||||
|
||||
if(gMakeResources)
|
||||
CVehicleModelInfo::Load(nil);
|
||||
|
||||
#ifndef GTA_PS2
|
||||
CIniFile::LoadIniFile();
|
||||
#endif
|
||||
@@ -858,9 +854,9 @@ void CGame::Process(void)
|
||||
gameProcessPirateCheck = 2;
|
||||
}
|
||||
#endif
|
||||
uint32 startTime = CTimer::GetCurrentTimeInCycles() / CTimer::GetCyclesPerMillisecond();
|
||||
//uint32 startTime = CTimer::GetCurrentTimeInCycles() / CTimer::GetCyclesPerMillisecond();
|
||||
CStreaming::Update();
|
||||
uint32 processTime = CTimer::GetCurrentTimeInCycles() / CTimer::GetCyclesPerMillisecond() - startTime;
|
||||
//uint32 processTime = CTimer::GetCurrentTimeInCycles() / CTimer::GetCyclesPerMillisecond() - startTime;
|
||||
CWindModifiers::Number = 0;
|
||||
if (!CTimer::GetIsPaused())
|
||||
{
|
||||
@@ -899,13 +895,13 @@ void CGame::Process(void)
|
||||
CEventList::Update();
|
||||
CParticle::Update();
|
||||
gFireManager.Update();
|
||||
if (processTime >= 2) {
|
||||
CPopulation::Update(false);
|
||||
} else {
|
||||
uint32 startTime = CTimer::GetCurrentTimeInCycles() / CTimer::GetCyclesPerMillisecond();
|
||||
//if (processTime >= 2) {
|
||||
// CPopulation::Update(false);
|
||||
//} else {
|
||||
// uint32 startTime = CTimer::GetCurrentTimeInCycles() / CTimer::GetCyclesPerMillisecond();
|
||||
CPopulation::Update(true);
|
||||
processTime = CTimer::GetCurrentTimeInCycles() / CTimer::GetCyclesPerMillisecond() - startTime;
|
||||
}
|
||||
// processTime = CTimer::GetCurrentTimeInCycles() / CTimer::GetCyclesPerMillisecond() - startTime;
|
||||
//}
|
||||
CWeapon::UpdateWeapons();
|
||||
if (!CCutsceneMgr::IsRunning())
|
||||
CTheCarGenerators::Process();
|
||||
@@ -943,7 +939,7 @@ void CGame::Process(void)
|
||||
if (!CReplay::IsPlayingBack())
|
||||
{
|
||||
PUSH_MEMID(MEMID_CARS);
|
||||
if (processTime < 2)
|
||||
//if (processTime < 2)
|
||||
CCarCtrl::GenerateRandomCars();
|
||||
CRoadBlocks::GenerateRoadBlocks();
|
||||
CCarCtrl::RemoveDistantCars();
|
||||
|
||||
@@ -2,8 +2,6 @@
|
||||
|
||||
#include <ctype.h>
|
||||
|
||||
// --MIAMI: file done
|
||||
|
||||
class CGeneral
|
||||
{
|
||||
public:
|
||||
@@ -135,7 +133,7 @@ public:
|
||||
static bool faststricmp(const char *str1, const char *str2)
|
||||
{
|
||||
for (; *str1; str1++, str2++) {
|
||||
#if MUCH_SLOWER || !defined _WIN32 || defined __MINGW32__
|
||||
#ifndef ASCII_STRCMP
|
||||
if (toupper(*str1) != toupper(*str2))
|
||||
#else
|
||||
if (__ascii_toupper(*str1) != __ascii_toupper(*str2))
|
||||
|
||||
@@ -7,8 +7,6 @@
|
||||
#include "main.h"
|
||||
#include "Population.h"
|
||||
|
||||
// --MIAMI: file done
|
||||
|
||||
float CIniFile::PedNumberMultiplier = 0.6f;
|
||||
float CIniFile::CarNumberMultiplier = 0.8f;
|
||||
|
||||
|
||||
14
src/core/Leeds.cpp
Normal file
14
src/core/Leeds.cpp
Normal file
@@ -0,0 +1,14 @@
|
||||
#include "common.h"
|
||||
#include "Leeds.h"
|
||||
|
||||
void LoadResource(RpAtomic *atomic) {}
|
||||
void LoadResource(RpClump *clump) {}
|
||||
|
||||
|
||||
void SaveResource(RwTexture *tex, base::cRelocatableChunkWriter &writer) {}
|
||||
void SaveResource(RwTexDictionary *txd, base::cRelocatableChunkWriter &writer) {}
|
||||
void SaveResource(RpMaterial *mat, base::cRelocatableChunkWriter &writer) {}
|
||||
void SaveResource(RpMaterialList *matlist, base::cRelocatableChunkWriter &writer) {}
|
||||
void SaveResource(RpGeometry *geo, base::cRelocatableChunkWriter &writer) {}
|
||||
void SaveResource(RpAtomic *atomic, base::cRelocatableChunkWriter &writer) {}
|
||||
void SaveResource(RpClump *clump, base::cRelocatableChunkWriter &writer) {}
|
||||
36
src/core/Leeds.h
Normal file
36
src/core/Leeds.h
Normal file
@@ -0,0 +1,36 @@
|
||||
#pragma once
|
||||
|
||||
/*
|
||||
PatchElementModelInfo(RslElement *,void *)
|
||||
ChunkName(char const*)
|
||||
DestroyAndFreeResourceImage(void)
|
||||
WriteOrder(char const*)
|
||||
UnpatchTextures(void)
|
||||
IsChunked(int)
|
||||
SaveResourceImage(void)
|
||||
LoadResourceImage(void)
|
||||
SaveResource(RslNode *,base::cRelocatableChunkWriter &)
|
||||
SaveResource(RslTAnimTree *,base::cRelocatableChunkWriter &)
|
||||
SaveResource(RslSkin *,base::cRelocatableChunkWriter &)
|
||||
SaveResource(CAnimBlendTree *,base::cRelocatableChunkWriter &)
|
||||
PatchElementTextures(RslElement *)
|
||||
PatchElementGroupTextures(RslElementGroup *)
|
||||
*/
|
||||
|
||||
void LoadResource(RpAtomic *atomic);
|
||||
void LoadResource(RpClump *clump);
|
||||
|
||||
/*
|
||||
cRelocatableChunkWriterGTA::Save(char const*,uint,uint,bool)
|
||||
cRelocatableChunkGTA::cRelocatableChunkGTA(char const*,uint,uint,bool)
|
||||
SaveAnimBlock(int)
|
||||
SaveModel(int,bool)
|
||||
*/
|
||||
|
||||
void SaveResource(RwTexture *tex, base::cRelocatableChunkWriter &writer);
|
||||
void SaveResource(RwTexDictionary *txd, base::cRelocatableChunkWriter &writer);
|
||||
void SaveResource(RpMaterial *mat, base::cRelocatableChunkWriter &writer);
|
||||
void SaveResource(RpMaterialList *matlist, base::cRelocatableChunkWriter &writer);
|
||||
void SaveResource(RpGeometry *geo, base::cRelocatableChunkWriter &writer);
|
||||
void SaveResource(RpAtomic *atomic, base::cRelocatableChunkWriter &writer);
|
||||
void SaveResource(RpClump *clump, base::cRelocatableChunkWriter &writer);
|
||||
@@ -1,7 +1,5 @@
|
||||
#pragma once
|
||||
|
||||
#include "common.h"
|
||||
|
||||
class CPtrNode
|
||||
{
|
||||
public:
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
#include "Collision.h"
|
||||
#include "ModelInfo.h"
|
||||
#include "Pad.h"
|
||||
#include "ControllerConfig.h"
|
||||
|
||||
// Menu screens array is at the bottom of the file.
|
||||
|
||||
@@ -24,51 +25,51 @@
|
||||
#ifdef CUSTOM_FRONTEND_OPTIONS
|
||||
|
||||
#ifdef IMPROVED_VIDEOMODE
|
||||
#define VIDEOMODE_SELECTOR MENUACTION_CFO_SELECT, "FEM_SCF", { new CCFOSelect((int8*)&FrontEndMenuManager.m_nPrefsWindowed, nil, screenModes, 2, true, ScreenModeAfterChange, true) }, 0, 0, MENUALIGN_LEFT,
|
||||
#define VIDEOMODE_SELECTOR MENUACTION_CFO_SELECT, "FEM_SCF", { new CCFOSelect((int8*)&FrontEndMenuManager.m_nPrefsWindowed, "VideoMode", "Windowed", screenModes, 2, true, ScreenModeAfterChange, true) }, 0, 0, MENUALIGN_LEFT,
|
||||
#else
|
||||
#define VIDEOMODE_SELECTOR
|
||||
#endif
|
||||
|
||||
#ifdef MULTISAMPLING
|
||||
#define MULTISAMPLING_SELECTOR MENUACTION_CFO_DYNAMIC, "FED_AAS", { new CCFODynamic((int8*)&FrontEndMenuManager.m_nPrefsMSAALevel, "MultiSampling", MultiSamplingDraw, MultiSamplingButtonPress) }, 0, 0, MENUALIGN_LEFT,
|
||||
#define MULTISAMPLING_SELECTOR MENUACTION_CFO_DYNAMIC, "FED_AAS", { new CCFODynamic((int8*)&FrontEndMenuManager.m_nPrefsMSAALevel, "Graphics", "MultiSampling", MultiSamplingDraw, MultiSamplingButtonPress) }, 0, 0, MENUALIGN_LEFT,
|
||||
#else
|
||||
#define MULTISAMPLING_SELECTOR
|
||||
#endif
|
||||
|
||||
#ifdef CUTSCENE_BORDERS_SWITCH
|
||||
#define CUTSCENE_BORDERS_TOGGLE MENUACTION_CFO_SELECT, "FEM_CSB", { new CCFOSelect((int8 *)&FrontEndMenuManager.m_PrefsCutsceneBorders, "CutsceneBorders", off_on, 2, false) }, 0, 0, MENUALIGN_LEFT,
|
||||
#define CUTSCENE_BORDERS_TOGGLE MENUACTION_CFO_SELECT, "FEM_CSB", { new CCFOSelect((int8 *)&FrontEndMenuManager.m_PrefsCutsceneBorders, "Display", "CutsceneBorders", off_on, 2, false) }, 0, 0, MENUALIGN_LEFT,
|
||||
#else
|
||||
#define CUTSCENE_BORDERS_TOGGLE
|
||||
#endif
|
||||
|
||||
#ifdef FREE_CAM
|
||||
#define FREE_CAM_TOGGLE MENUACTION_CFO_SELECT, "FEC_FRC", { new CCFOSelect((int8*)&TheCamera.bFreeCam, "FreeCam", off_on, 2, false) }, 0, 0, MENUALIGN_LEFT,
|
||||
#define FREE_CAM_TOGGLE MENUACTION_CFO_SELECT, "FEC_FRC", { new CCFOSelect((int8*)&TheCamera.bFreeCam, "Display", "FreeCam", off_on, 2, false) }, 0, 0, MENUALIGN_LEFT,
|
||||
#else
|
||||
#define FREE_CAM_TOGGLE
|
||||
#endif
|
||||
|
||||
#ifdef PS2_ALPHA_TEST
|
||||
#define DUALPASS_SELECTOR MENUACTION_CFO_SELECT, "FEM_2PR", { new CCFOSelect((int8*)&gPS2alphaTest, "PS2AlphaTest", off_on, 2, false) }, 0, 0, MENUALIGN_LEFT,
|
||||
#define DUALPASS_SELECTOR MENUACTION_CFO_SELECT, "FEM_2PR", { new CCFOSelect((int8*)&gPS2alphaTest, "Graphics", "PS2AlphaTest", off_on, 2, false) }, 0, 0, MENUALIGN_LEFT,
|
||||
#else
|
||||
#define DUALPASS_SELECTOR
|
||||
#endif
|
||||
|
||||
#ifdef NO_ISLAND_LOADING
|
||||
#define ISLAND_LOADING_SELECTOR MENUACTION_CFO_SELECT, "FEM_ISL", { new CCFOSelect((int8*)&FrontEndMenuManager.m_PrefsIslandLoading, "IslandLoading", islandLoadingOpts, ARRAY_SIZE(islandLoadingOpts), true, IslandLoadingAfterChange) }, 0, 0, MENUALIGN_LEFT,
|
||||
#define ISLAND_LOADING_SELECTOR MENUACTION_CFO_SELECT, "FEM_ISL", { new CCFOSelect((int8*)&FrontEndMenuManager.m_PrefsIslandLoading, "Graphics", "IslandLoading", islandLoadingOpts, ARRAY_SIZE(islandLoadingOpts), true, IslandLoadingAfterChange) }, 0, 0, MENUALIGN_LEFT,
|
||||
#else
|
||||
#define ISLAND_LOADING_SELECTOR
|
||||
#endif
|
||||
|
||||
#ifdef EXTENDED_COLOURFILTER
|
||||
#define POSTFX_SELECTORS \
|
||||
MENUACTION_CFO_SELECT, "FED_CLF", { new CCFOSelect((int8*)&CPostFX::EffectSwitch, "ColourFilter", filterNames, ARRAY_SIZE(filterNames), false) }, 0, 0, MENUALIGN_LEFT, \
|
||||
MENUACTION_CFO_SELECT, "FED_MBL", { new CCFOSelect((int8*)&CPostFX::MotionBlurOn, "MotionBlur", off_on, 2, false) }, 0, 0, MENUALIGN_LEFT,
|
||||
MENUACTION_CFO_SELECT, "FED_CLF", { new CCFOSelect((int8*)&CPostFX::EffectSwitch, "Graphics", "ColourFilter", filterNames, ARRAY_SIZE(filterNames), false) }, 0, 0, MENUALIGN_LEFT, \
|
||||
MENUACTION_CFO_SELECT, "FED_MBL", { new CCFOSelect((int8*)&CPostFX::MotionBlurOn, "Graphics", "MotionBlur", off_on, 2, false) }, 0, 0, MENUALIGN_LEFT,
|
||||
#else
|
||||
#define POSTFX_SELECTORS
|
||||
#endif
|
||||
|
||||
#ifdef INVERT_LOOK_FOR_PAD
|
||||
#define INVERT_PAD_SELECTOR MENUACTION_CFO_SELECT, "FEC_ILU", { new CCFOSelect((int8*)&CPad::bInvertLook4Pad, nil, off_on, 2, false) }, 150, 0, MENUALIGN_LEFT,
|
||||
#define INVERT_PAD_SELECTOR MENUACTION_CFO_SELECT, "FEC_ILU", { new CCFOSelect((int8*)&CPad::bInvertLook4Pad, "Controller", "InvertPad", off_on, 2, false) }, 150, 0, MENUALIGN_LEFT,
|
||||
#else
|
||||
#define INVERT_PAD_SELECTOR
|
||||
#endif
|
||||
@@ -278,6 +279,7 @@ void ScreenModeAfterChange(int8 before, int8 after)
|
||||
|
||||
#ifdef DONT_TRUST_RECOGNIZED_JOYSTICKS
|
||||
wchar selectedJoystickUnicode[128];
|
||||
int cachedButtonNum = -1;
|
||||
|
||||
wchar* DetectJoystickDraw(bool* disabled, bool userHovering) {
|
||||
int numButtons;
|
||||
@@ -306,6 +308,7 @@ wchar* DetectJoystickDraw(bool* disabled, bool userHovering) {
|
||||
|
||||
strcpy(gSelectedJoystickName, joyname);
|
||||
PSGLOBAL(joy1id) = found;
|
||||
cachedButtonNum = numButtons;
|
||||
}
|
||||
}
|
||||
if (PSGLOBAL(joy1id) == -1)
|
||||
@@ -315,6 +318,18 @@ wchar* DetectJoystickDraw(bool* disabled, bool userHovering) {
|
||||
|
||||
return selectedJoystickUnicode;
|
||||
}
|
||||
|
||||
void DetectJoystickGoBack() {
|
||||
if (cachedButtonNum != -1) {
|
||||
#ifdef LOAD_INI_SETTINGS
|
||||
ControlsManager.InitDefaultControlConfigJoyPad(cachedButtonNum);
|
||||
SaveINIControllerSettings();
|
||||
#else
|
||||
// Otherwise no way to save gSelectedJoystickName or ms_padButtonsInited anyway :shrug: Why do you even use this config.??
|
||||
#endif
|
||||
cachedButtonNum = -1;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
CMenuScreenCustom aScreens[] = {
|
||||
@@ -388,7 +403,7 @@ CMenuScreenCustom aScreens[] = {
|
||||
MENUACTION_RADARMODE, "FED_RDR", { nil, SAVESLOT_NONE, MENUPAGE_DISPLAY_SETTINGS }, 0, 0, MENUALIGN_LEFT,
|
||||
MENUACTION_HUD, "FED_HUD", { nil, SAVESLOT_NONE, MENUPAGE_DISPLAY_SETTINGS }, 0, 0, MENUALIGN_LEFT,
|
||||
MENUACTION_SUBTITLES, "FED_SUB", { nil, SAVESLOT_NONE, MENUPAGE_DISPLAY_SETTINGS }, 0, 0, MENUALIGN_LEFT,
|
||||
MENUACTION_CFO_DYNAMIC, "FET_DEF", { new CCFODynamic(nil, nil, nil, RestoreDefDisplay) }, 320, 0, MENUALIGN_CENTER,
|
||||
MENUACTION_CFO_DYNAMIC, "FET_DEF", { new CCFODynamic(nil, nil, nil, nil, RestoreDefDisplay) }, 320, 0, MENUALIGN_CENTER,
|
||||
MENUACTION_GOBACK, "FEDS_TB", { nil, SAVESLOT_NONE, MENUPAGE_NONE}, 320, 0, MENUALIGN_CENTER,
|
||||
},
|
||||
#endif
|
||||
@@ -401,9 +416,9 @@ CMenuScreenCustom aScreens[] = {
|
||||
MENUACTION_LANG_ITA, "FEL_ITA", {nil, SAVESLOT_NONE, MENUPAGE_LANGUAGE_SETTINGS}, 0, 0, MENUALIGN_CENTER,
|
||||
MENUACTION_LANG_SPA, "FEL_SPA", {nil, SAVESLOT_NONE, MENUPAGE_LANGUAGE_SETTINGS}, 0, 0, MENUALIGN_CENTER,
|
||||
#ifdef MORE_LANGUAGES
|
||||
MENUACTION_CFO_DYNAMIC, "FEL_POL", { new CCFODynamic(nil, nil, nil, LangPolSelect) }, 0, 0, MENUALIGN_CENTER,
|
||||
MENUACTION_CFO_DYNAMIC, "FEL_RUS", { new CCFODynamic(nil, nil, nil, LangRusSelect) }, 0, 0, MENUALIGN_CENTER
|
||||
MENUACTION_CFO_DYNAMIC, "FEL_JAP", { new CCFODynamic(nil, nil, nil, LangJapSelect) }, 0, 0, MENUALIGN_CENTER,
|
||||
MENUACTION_CFO_DYNAMIC, "FEL_POL", { new CCFODynamic(nil, nil, nil, nil, LangPolSelect) }, 0, 0, MENUALIGN_CENTER,
|
||||
MENUACTION_CFO_DYNAMIC, "FEL_RUS", { new CCFODynamic(nil, nil, nil, nil, LangRusSelect) }, 0, 0, MENUALIGN_CENTER
|
||||
MENUACTION_CFO_DYNAMIC, "FEL_JAP", { new CCFODynamic(nil, nil, nil, nil, LangJapSelect) }, 0, 0, MENUALIGN_CENTER,
|
||||
#endif
|
||||
MENUACTION_GOBACK, "FEDS_TB", {nil, SAVESLOT_NONE, MENUPAGE_NONE}, 0, 0, MENUALIGN_CENTER,
|
||||
},
|
||||
@@ -695,17 +710,16 @@ CMenuScreenCustom aScreens[] = {
|
||||
MENUACTION_TRAILS, "FED_TRA", { nil, SAVESLOT_NONE, MENUPAGE_GRAPHICS_SETTINGS }, 0, 0, MENUALIGN_LEFT,
|
||||
#endif
|
||||
// re3.cpp inserts here pipeline selectors if neo/neo.txd exists and EXTENDED_PIPELINES defined
|
||||
MENUACTION_CFO_DYNAMIC, "FET_DEF", { new CCFODynamic(nil, nil, nil, RestoreDefGraphics) }, 320, 0, MENUALIGN_CENTER,
|
||||
MENUACTION_CFO_DYNAMIC, "FET_DEF", { new CCFODynamic(nil, nil, nil, nil, RestoreDefGraphics) }, 320, 0, MENUALIGN_CENTER,
|
||||
MENUACTION_GOBACK, "FEDS_TB", {nil, SAVESLOT_NONE, MENUPAGE_NONE}, 320, 0, MENUALIGN_CENTER,
|
||||
},
|
||||
#endif
|
||||
|
||||
#ifdef DONT_TRUST_RECOGNIZED_JOYSTICKS
|
||||
// MENUPAGE_DETECT_JOYSTICK
|
||||
{ "FEC_JOD", MENUPAGE_CONTROLLER_PC, new CCustomScreenLayout({0, 0, 0, false, false, 30}), nil,
|
||||
|
||||
{ "FEC_JOD", MENUPAGE_CONTROLLER_PC, new CCustomScreenLayout({0, 0, 0, false, false, 30}), DetectJoystickGoBack,
|
||||
MENUACTION_LABEL, "FEC_JPR", { nil, SAVESLOT_NONE, MENUPAGE_NONE }, 0, 0, 0,
|
||||
MENUACTION_CFO_DYNAMIC, "FEC_JDE", { new CCFODynamic(nil, nil, DetectJoystickDraw, nil) }, 80, 200, MENUALIGN_LEFT,
|
||||
MENUACTION_CFO_DYNAMIC, "FEC_JDE", { new CCFODynamic(nil, nil, nil, DetectJoystickDraw, nil) }, 80, 200, MENUALIGN_LEFT,
|
||||
MENUACTION_GOBACK, "FEDS_TB", {nil, SAVESLOT_NONE, MENUPAGE_NONE}, 320, 225, MENUALIGN_CENTER,
|
||||
},
|
||||
#endif
|
||||
|
||||
@@ -1,11 +1,4 @@
|
||||
#pragma warning( push )
|
||||
#pragma warning( disable : 4005)
|
||||
#if defined RW_D3D9 || defined RWLIBS
|
||||
#define DIRECTINPUT_VERSION 0x0800
|
||||
#include <dinput.h>
|
||||
#endif
|
||||
#pragma warning( pop )
|
||||
|
||||
#define WITHDINPUT
|
||||
#include "common.h"
|
||||
#include "crossplatform.h"
|
||||
#include "platform.h"
|
||||
@@ -54,8 +47,6 @@
|
||||
#include "libpad.h"
|
||||
#endif
|
||||
|
||||
// --MIAMI: file done except Mobile(see TODOs) and PS2 stuff
|
||||
|
||||
CPad Pads[MAX_PADS];
|
||||
#ifdef GTA_PS2
|
||||
u_long128 pad_dma_buf[scePadDmaBufferMax] __attribute__((aligned(64)));
|
||||
@@ -459,7 +450,7 @@ void ArmourCheat()
|
||||
void WantedLevelUpCheat()
|
||||
{
|
||||
CHud::SetHelpMessage(TheText.Get("CHEAT5"), true);
|
||||
FindPlayerPed()->m_pWanted->CheatWantedLevel(Min(FindPlayerPed()->m_pWanted->m_nWantedLevel + 2, 6));
|
||||
FindPlayerPed()->m_pWanted->CheatWantedLevel(Min(FindPlayerPed()->m_pWanted->GetWantedLevel() + 2, 6));
|
||||
}
|
||||
|
||||
void WantedLevelDownCheat()
|
||||
|
||||
@@ -4,7 +4,7 @@ class CPlaceable
|
||||
{
|
||||
public:
|
||||
// disable allocation
|
||||
static void *operator new(size_t) = delete;
|
||||
static void *operator new(size_t);
|
||||
|
||||
CMatrix m_matrix;
|
||||
|
||||
|
||||
@@ -35,8 +35,6 @@
|
||||
#include "Automobile.h"
|
||||
#include "GameLogic.h"
|
||||
|
||||
// --MIAMI: File done
|
||||
|
||||
CVector lastPlayerPos;
|
||||
|
||||
void
|
||||
@@ -483,7 +481,7 @@ CPlayerInfo::Process(void)
|
||||
CStats::DistanceTravelledOnFoot += FindPlayerPed()->m_fDistanceTravelled;
|
||||
}
|
||||
|
||||
if (m_pPed->m_pWanted->m_nWantedLevel && !CTheScripts::IsPlayerOnAMission()) {
|
||||
if (m_pPed->m_pWanted->GetWantedLevel() && !CTheScripts::IsPlayerOnAMission()) {
|
||||
float maxDelta = 0.0f;
|
||||
static bool movedSignificantly = true;
|
||||
static bool thereIsACarPathNear = true;
|
||||
@@ -495,7 +493,7 @@ CPlayerInfo::Process(void)
|
||||
lastPlayerPos = FindPlayerCoors();
|
||||
thereIsACarPathNear = ThePaths.FindNodeClosestToCoors(FindPlayerCoors(), PATH_CAR, 60.0f, true, false, false, false) != 0;
|
||||
}
|
||||
switch (m_pPed->m_pWanted->m_nWantedLevel) {
|
||||
switch (m_pPed->m_pWanted->GetWantedLevel()) {
|
||||
case 1:
|
||||
maxDelta = 31.f;
|
||||
break;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
#include "Collision.h"
|
||||
#include "ColModel.h"
|
||||
|
||||
enum eWastedBustedState
|
||||
{
|
||||
|
||||
@@ -15,8 +15,6 @@
|
||||
#include "World.h"
|
||||
#include "MemoryHeap.h"
|
||||
|
||||
//--MIAMI: file done
|
||||
|
||||
CCPtrNodePool *CPools::ms_pPtrNodePool;
|
||||
CEntryInfoNodePool *CPools::ms_pEntryInfoNodePool;
|
||||
CPedPool *CPools::ms_pPedPool;
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
#if (!defined(GTA_PS2_STUFF) && defined(RWLIBS)) || defined(__MWERKS__)
|
||||
#define WITHD3D
|
||||
#endif
|
||||
#include "config.h"
|
||||
#include "common.h"
|
||||
|
||||
@@ -17,8 +20,6 @@
|
||||
#include "SpecialFX.h"
|
||||
#include "Font.h"
|
||||
|
||||
// --MIAMI: file done
|
||||
|
||||
float CRadar::m_radarRange;
|
||||
sRadarTrace CRadar::ms_RadarTrace[NUMRADARBLIPS];
|
||||
CVector2D vec2DRadarOrigin;
|
||||
@@ -54,7 +55,7 @@ CSprite2d CRadar::SpraySprite;
|
||||
CSprite2d CRadar::TShirtSprite;
|
||||
CSprite2d CRadar::TommySprite;
|
||||
CSprite2d CRadar::PhoneSprite;
|
||||
CSprite2d CRadar::RadioWildstyleSprite;
|
||||
/*CSprite2d CRadar::RadioWildstyleSprite;
|
||||
CSprite2d CRadar::RadioFlashSprite;
|
||||
CSprite2d CRadar::RadioKChatSprite;
|
||||
CSprite2d CRadar::RadioFeverSprite;
|
||||
@@ -62,7 +63,39 @@ CSprite2d CRadar::RadioVRockSprite;
|
||||
CSprite2d CRadar::RadioVCPRSprite;
|
||||
CSprite2d CRadar::RadioEspantosoSprite;
|
||||
CSprite2d CRadar::RadioEmotionSprite;
|
||||
CSprite2d CRadar::RadioWaveSprite;
|
||||
CSprite2d CRadar::RadioWaveSprite;*/
|
||||
CSprite2d CRadar::EightBallSprite;
|
||||
CSprite2d CRadar::BurnerSprite;
|
||||
CSprite2d CRadar::CiprianiSprite;
|
||||
CSprite2d CRadar::DonaldSprite;
|
||||
CSprite2d CRadar::JosephSprite;
|
||||
CSprite2d CRadar::LeoneSprite;
|
||||
CSprite2d CRadar::MariaSprite;
|
||||
CSprite2d CRadar::McraySprite;
|
||||
CSprite2d CRadar::ToshikoSprite;
|
||||
CSprite2d CRadar::VincenzoSprite;
|
||||
CSprite2d CRadar::BombSprite;
|
||||
CSprite2d CRadar::ClothesShopSprite;
|
||||
CSprite2d CRadar::PropertyRedSprite;
|
||||
CSprite2d CRadar::PhilCassidySprite;
|
||||
CSprite2d CRadar::PowerupSprite;
|
||||
CSprite2d CRadar::MPBase;
|
||||
CSprite2d CRadar::MPCheckPoint;
|
||||
CSprite2d CRadar::MPPlayer;
|
||||
CSprite2d CRadar::MPObjective;
|
||||
CSprite2d CRadar::MPCar;
|
||||
CSprite2d CRadar::MPTank;
|
||||
CSprite2d CRadar::MPCarLockup;
|
||||
CSprite2d CRadar::MPTargetPlayer;
|
||||
CSprite2d CRadar::MapHereSprite0;
|
||||
CSprite2d CRadar::MapHereSprite1;
|
||||
CSprite2d CRadar::MapHereSprite2;
|
||||
CSprite2d CRadar::MapHereSprite3;
|
||||
CSprite2d CRadar::MapHereSprite4;
|
||||
CSprite2d CRadar::MapHereSprite5;
|
||||
CSprite2d CRadar::MapHereSprite6;
|
||||
CSprite2d CRadar::MapHereSprite7;
|
||||
CSprite2d CRadar::MapWayPoint;
|
||||
|
||||
CSprite2d *CRadar::RadarSprites[RADAR_SPRITE_COUNT] = {
|
||||
nil,
|
||||
@@ -96,20 +129,38 @@ CSprite2d *CRadar::RadarSprites[RADAR_SPRITE_COUNT] = {
|
||||
&TShirtSprite,
|
||||
&TommySprite,
|
||||
&PhoneSprite,
|
||||
&RadioWildstyleSprite,
|
||||
&RadioFlashSprite,
|
||||
&RadioKChatSprite,
|
||||
&RadioFeverSprite,
|
||||
&RadioVRockSprite,
|
||||
&RadioVCPRSprite,
|
||||
&RadioEspantosoSprite,
|
||||
&RadioEmotionSprite,
|
||||
&RadioWaveSprite, // tmp hack
|
||||
&RadioWaveSprite,
|
||||
&RadioWaveSprite,
|
||||
&RadioWaveSprite,
|
||||
&RadioWaveSprite,
|
||||
&RadioWaveSprite
|
||||
&EightBallSprite,
|
||||
&BurnerSprite,
|
||||
&CiprianiSprite,
|
||||
&DonaldSprite,
|
||||
&JosephSprite,
|
||||
&LeoneSprite,
|
||||
&MariaSprite,
|
||||
&McraySprite,
|
||||
&ToshikoSprite,
|
||||
&VincenzoSprite,
|
||||
&BombSprite,
|
||||
&ClothesShopSprite,
|
||||
&PropertyRedSprite,
|
||||
&PhilCassidySprite,
|
||||
&PowerupSprite,
|
||||
&MPBase,
|
||||
&MPCheckPoint,
|
||||
&MPPlayer,
|
||||
&MPObjective,
|
||||
&MPCar,
|
||||
&MPTank,
|
||||
&MPCarLockup,
|
||||
&MPTargetPlayer,
|
||||
&MapHereSprite0,
|
||||
&MapHereSprite1,
|
||||
&MapHereSprite2,
|
||||
&MapHereSprite3,
|
||||
&MapHereSprite4,
|
||||
&MapHereSprite5,
|
||||
&MapHereSprite6,
|
||||
&MapHereSprite7,
|
||||
&MapWayPoint,
|
||||
};
|
||||
|
||||
// Why this doesn't coincide with world coordinates i don't know
|
||||
@@ -339,10 +390,10 @@ void CRadar::ClearBlipForEntity(eBlipType type, int32 id)
|
||||
int CRadar::ClipRadarPoly(CVector2D *poly, const CVector2D *rect)
|
||||
{
|
||||
CVector2D corners[4] = {
|
||||
{ 1.0f, -1.0f }, // top right
|
||||
{ 1.0f, 1.0f }, // bottom right
|
||||
{ -1.0f, 1.0f }, // bottom left
|
||||
{ -1.0f, -1.0f }, // top left
|
||||
CVector2D( 1.0f, -1.0f ), // top right
|
||||
CVector2D( 1.0f, 1.0f ), // bottom right
|
||||
CVector2D( -1.0f, 1.0f ), // bottom left
|
||||
CVector2D( -1.0f, -1.0f ), // top left
|
||||
};
|
||||
CVector2D tmp;
|
||||
int i, j, n;
|
||||
@@ -1025,7 +1076,7 @@ CRadar::LoadTextures()
|
||||
TShirtSprite.SetTexture("tshirt");
|
||||
TommySprite.SetTexture("tommy");
|
||||
PhoneSprite.SetTexture("phone");
|
||||
RadioWildstyleSprite.SetTexture("RWildstyle");
|
||||
/*RadioWildstyleSprite.SetTexture("RWildstyle");
|
||||
RadioFlashSprite.SetTexture("RFlash");
|
||||
RadioKChatSprite.SetTexture("RKchat");
|
||||
RadioFeverSprite.SetTexture("RFever");
|
||||
@@ -1033,7 +1084,39 @@ CRadar::LoadTextures()
|
||||
RadioVCPRSprite.SetTexture("RVCPR");
|
||||
RadioEspantosoSprite.SetTexture("REspantoso");
|
||||
RadioEmotionSprite.SetTexture("REmotion");
|
||||
RadioWaveSprite.SetTexture("RWave");
|
||||
RadioWaveSprite.SetTexture("RWave");*/
|
||||
EightBallSprite.SetTexture("radar_8Ball");
|
||||
BurnerSprite.SetTexture("radar_Burner");
|
||||
CiprianiSprite.SetTexture("radar_Cipriani");
|
||||
DonaldSprite.SetTexture("radar_Donald");
|
||||
JosephSprite.SetTexture("radar_Joseph");
|
||||
LeoneSprite.SetTexture("radar_Leone");
|
||||
MariaSprite.SetTexture("radar_Maria");
|
||||
McraySprite.SetTexture("radar_McRay");
|
||||
ToshikoSprite.SetTexture("radar_Toshiko");
|
||||
VincenzoSprite.SetTexture("radar_Vincenzo");
|
||||
BombSprite.SetTexture("radar_Bomb");
|
||||
ClothesShopSprite.SetTexture("radar_cShop");
|
||||
PropertyRedSprite.SetTexture("radar_propertyR");
|
||||
PhilCassidySprite.SetTexture("radar_flag");
|
||||
PowerupSprite.SetTexture("radar_powerup");
|
||||
MPBase.SetTexture("mp_base");
|
||||
MPCheckPoint.SetTexture("radar_mp_checkpoint");
|
||||
MPPlayer.SetTexture("mp_player");
|
||||
MPObjective.SetTexture("mp_objective");
|
||||
MPCar.SetTexture("mp_car");
|
||||
MPTank.SetTexture("mp_tank");
|
||||
MPCarLockup.SetTexture("mp_carlockup");
|
||||
MPTargetPlayer.SetTexture("mp_targetplayer");
|
||||
MapHereSprite0.SetTexture("radar_arrow");
|
||||
MapHereSprite1.SetTexture("radar_arrow_01");
|
||||
MapHereSprite2.SetTexture("radar_arrow_02");
|
||||
MapHereSprite3.SetTexture("radar_arrow_03");
|
||||
MapHereSprite4.SetTexture("radar_arrow_04");
|
||||
MapHereSprite5.SetTexture("radar_arrow_05");
|
||||
MapHereSprite6.SetTexture("radar_arrow_06");
|
||||
MapHereSprite7.SetTexture("radar_arrow_07");
|
||||
MapWayPoint.SetTexture("radar_player_target");
|
||||
CTxdStore::PopCurrentTxd();
|
||||
}
|
||||
|
||||
@@ -1221,7 +1304,39 @@ void CRadar::Shutdown()
|
||||
TShirtSprite.Delete();
|
||||
TommySprite.Delete();
|
||||
PhoneSprite.Delete();
|
||||
RadioWildstyleSprite.Delete();
|
||||
EightBallSprite.Delete();
|
||||
BurnerSprite.Delete();
|
||||
CiprianiSprite.Delete();
|
||||
DonaldSprite.Delete();
|
||||
JosephSprite.Delete();
|
||||
LeoneSprite.Delete();
|
||||
MariaSprite.Delete();
|
||||
McraySprite.Delete();
|
||||
ToshikoSprite.Delete();
|
||||
VincenzoSprite.Delete();
|
||||
BombSprite.Delete();
|
||||
ClothesShopSprite.Delete();
|
||||
PropertyRedSprite.Delete();
|
||||
PhilCassidySprite.Delete();
|
||||
PowerupSprite.Delete();
|
||||
MPBase.Delete();
|
||||
MPCheckPoint.Delete();
|
||||
MPPlayer.Delete();
|
||||
MPObjective.Delete();
|
||||
MPCar.Delete();
|
||||
MPTank.Delete();
|
||||
MPCarLockup.Delete();
|
||||
MPTargetPlayer.Delete();
|
||||
MapHereSprite0.Delete();
|
||||
MapHereSprite1.Delete();
|
||||
MapHereSprite2.Delete();
|
||||
MapHereSprite3.Delete();
|
||||
MapHereSprite4.Delete();
|
||||
MapHereSprite5.Delete();
|
||||
MapHereSprite6.Delete();
|
||||
MapHereSprite7.Delete();
|
||||
MapWayPoint.Delete();
|
||||
/*RadioWildstyleSprite.Delete();
|
||||
RadioFlashSprite.Delete();
|
||||
RadioKChatSprite.Delete();
|
||||
RadioFeverSprite.Delete();
|
||||
@@ -1229,7 +1344,7 @@ void CRadar::Shutdown()
|
||||
RadioVCPRSprite.Delete();
|
||||
RadioEspantosoSprite.Delete();
|
||||
RadioEmotionSprite.Delete();
|
||||
RadioWaveSprite.Delete();
|
||||
RadioWaveSprite.Delete();*/
|
||||
RemoveRadarSections();
|
||||
}
|
||||
|
||||
@@ -1672,7 +1787,7 @@ CRadar::DrawLegend(int32 x, int32 y, int32 sprite)
|
||||
case RADAR_SPRITE_PHONE:
|
||||
text = TheText.Get("LG_25");
|
||||
break;
|
||||
case RADAR_SPRITE_RADIO_WILDSTYLE:
|
||||
/*case RADAR_SPRITE_RADIO_WILDSTYLE:
|
||||
text = TheText.Get("LG_26");
|
||||
break;
|
||||
case RADAR_SPRITE_RADIO_FLASH:
|
||||
@@ -1698,7 +1813,7 @@ CRadar::DrawLegend(int32 x, int32 y, int32 sprite)
|
||||
break;
|
||||
case RADAR_SPRITE_RADIO_WAVE:
|
||||
text = TheText.Get("LG_34");
|
||||
break;
|
||||
break;*/
|
||||
default:
|
||||
text = TheText.Get("LG_34"); // tmp hack
|
||||
break;
|
||||
|
||||
@@ -83,20 +83,38 @@ enum eRadarSprite
|
||||
RADAR_SPRITE_TSHIRT,
|
||||
RADAR_SPRITE_TOMMY,
|
||||
RADAR_SPRITE_PHONE,
|
||||
RADAR_SPRITE_RADIO_WILDSTYLE,
|
||||
RADAR_SPRITE_RADIO_FLASH,
|
||||
RADAR_SPRITE_RADIO_KCHAT,
|
||||
RADAR_SPRITE_RADIO_FEVER,
|
||||
RADAR_SPRITE_RADIO_VROCK,
|
||||
RADAR_SPRITE_RADIO_VCPR,
|
||||
RADAR_SPRITE_RADIO_ESPANTOSO,
|
||||
RADAR_SPRITE_RADIO_EMOTION,
|
||||
RADAR_SPRITE_RADIO_WAVE,
|
||||
RADAR_SPRITE_40, // tmp
|
||||
RADAR_SPRITE_41,
|
||||
RADAR_SPRITE_42,
|
||||
RADAR_SPRITE_43,
|
||||
RADAR_SPRITE_44,
|
||||
RADAR_SPRITE_EIGHTBALL,
|
||||
RADAR_SPRITE_BURNER,
|
||||
RADAR_SPRITE_CIPRIANI,
|
||||
RADAR_SPRITE_DONALD,
|
||||
RADAR_SPRITE_JOSEPH,
|
||||
RADAR_SPRITE_LEONE,
|
||||
RADAR_SPRITE_MARIA,
|
||||
RADAR_SPRITE_MCRAY,
|
||||
RADAR_SPRITE_TOSHIKO,
|
||||
RADAR_SPRITE_VINCENZO, // tmp
|
||||
RADAR_SPRITE_BOMB,
|
||||
RADAR_SPRITE_CLOTHES,
|
||||
RADAR_SPRITE_PROPERTY_RED,
|
||||
RADAR_SPRITE_PHIL_CASSIDY,
|
||||
RADAR_SPRITE_POWERUP,
|
||||
RADAR_SPRITE_MPBASE,
|
||||
RADAR_SPRITE_MPCHECKPOINT,
|
||||
RADAR_SPRITE_MPPLAYER,
|
||||
RADAR_SPRITE_MPOBJECTIVE,
|
||||
RADAR_SPRITE_MPCAR,
|
||||
RADAR_SPRITE_MPTANK,
|
||||
RADAR_SPRITE_MPCARLOCKUP,
|
||||
RADAR_SPRITE_MPTARGETPLAYER,
|
||||
RADAR_SPRITE_MAPHERE0,
|
||||
RADAR_SPRITE_MAPHERE1,
|
||||
RADAR_SPRITE_MAPHERE2,
|
||||
RADAR_SPRITE_MAPHERE3,
|
||||
RADAR_SPRITE_MAPHERE4,
|
||||
RADAR_SPRITE_MAPHERE5,
|
||||
RADAR_SPRITE_MAPHERE6,
|
||||
RADAR_SPRITE_MAPHERE7,
|
||||
RADAR_SPRITE_MAPWAYPOINT,
|
||||
|
||||
RADAR_SPRITE_COUNT
|
||||
};
|
||||
@@ -219,7 +237,7 @@ public:
|
||||
static CSprite2d TShirtSprite;
|
||||
static CSprite2d TommySprite;
|
||||
static CSprite2d PhoneSprite;
|
||||
static CSprite2d RadioWildstyleSprite;
|
||||
/* static CSprite2d RadioWildstyleSprite;
|
||||
static CSprite2d RadioFlashSprite;
|
||||
static CSprite2d RadioKChatSprite;
|
||||
static CSprite2d RadioFeverSprite;
|
||||
@@ -227,7 +245,39 @@ public:
|
||||
static CSprite2d RadioVCPRSprite;
|
||||
static CSprite2d RadioEspantosoSprite;
|
||||
static CSprite2d RadioEmotionSprite;
|
||||
static CSprite2d RadioWaveSprite;
|
||||
static CSprite2d RadioWaveSprite;*/
|
||||
static CSprite2d EightBallSprite;
|
||||
static CSprite2d BurnerSprite;
|
||||
static CSprite2d CiprianiSprite;
|
||||
static CSprite2d DonaldSprite;
|
||||
static CSprite2d JosephSprite;
|
||||
static CSprite2d LeoneSprite;
|
||||
static CSprite2d MariaSprite;
|
||||
static CSprite2d McraySprite;
|
||||
static CSprite2d ToshikoSprite;
|
||||
static CSprite2d VincenzoSprite;
|
||||
static CSprite2d BombSprite;
|
||||
static CSprite2d ClothesShopSprite;
|
||||
static CSprite2d PropertyRedSprite;
|
||||
static CSprite2d PhilCassidySprite;
|
||||
static CSprite2d PowerupSprite;
|
||||
static CSprite2d MPBase;
|
||||
static CSprite2d MPCheckPoint;
|
||||
static CSprite2d MPPlayer;
|
||||
static CSprite2d MPObjective;
|
||||
static CSprite2d MPCar;
|
||||
static CSprite2d MPTank;
|
||||
static CSprite2d MPCarLockup;
|
||||
static CSprite2d MPTargetPlayer;
|
||||
static CSprite2d MapHereSprite0;
|
||||
static CSprite2d MapHereSprite1;
|
||||
static CSprite2d MapHereSprite2;
|
||||
static CSprite2d MapHereSprite3;
|
||||
static CSprite2d MapHereSprite4;
|
||||
static CSprite2d MapHereSprite5;
|
||||
static CSprite2d MapHereSprite6;
|
||||
static CSprite2d MapHereSprite7;
|
||||
static CSprite2d MapWayPoint;
|
||||
static CSprite2d *RadarSprites[RADAR_SPRITE_COUNT];
|
||||
static float cachedCos;
|
||||
static float cachedSin;
|
||||
|
||||
@@ -116,7 +116,7 @@ CRopes::RegisterRope(uintptr id, CVector pos, bool setUpdateTimer)
|
||||
aRopes[i].m_unk = false;
|
||||
aRopes[i].m_bWasRegistered = true;
|
||||
aRopes[i].m_updateTimer = setUpdateTimer ? CTimer::GetTimeInMilliseconds() + 20000 : 0;
|
||||
for(j = 1; j < ARRAY_SIZE(CRope::m_pos); j++){
|
||||
for(j = 1; j < ARRAY_SIZE(aRopes[0].m_pos); j++){
|
||||
if(j & 1)
|
||||
aRopes[i].m_pos[j] = aRopes[i].m_pos[j-1] + CVector(0.0f, 0.0f, 0.625f);
|
||||
else
|
||||
@@ -147,7 +147,7 @@ CRopes::FindCoorsAlongRope(uintptr id, float t, CVector *coors)
|
||||
float f;
|
||||
for(i = 0; i < ARRAY_SIZE(aRopes); i++)
|
||||
if(aRopes[i].m_bActive && aRopes[i].m_id == id){
|
||||
t = (ARRAY_SIZE(CRope::m_pos)-1)*clamp(t, 0.0f, 0.999f);
|
||||
t = (ARRAY_SIZE(aRopes[0].m_pos)-1)*clamp(t, 0.0f, 0.999f);
|
||||
j = t;
|
||||
f = t - j;
|
||||
*coors = (1.0f-f)*aRopes[i].m_pos[j] + f*aRopes[i].m_pos[j+1];
|
||||
|
||||
@@ -115,8 +115,6 @@ float CStats::LongestWheelieDist;
|
||||
float CStats::LongestStoppieDist;
|
||||
float CStats::Longest2WheelDist;
|
||||
|
||||
// --MIAMI: functions below are done, but there are some to be moved from Frontend
|
||||
|
||||
void CStats::Init()
|
||||
{
|
||||
PeopleKilledByOthers = 0;
|
||||
|
||||
@@ -21,7 +21,7 @@ public:
|
||||
static int32 NumberKillFrenziesPassed;
|
||||
static int32 PeopleKilledByOthers;
|
||||
static int32 HelisDestroyed;
|
||||
static int32 PedsKilledOfThisType[ePedType::NUM_PEDTYPES];
|
||||
static int32 PedsKilledOfThisType[NUM_PEDTYPES];
|
||||
static int32 TimesDied;
|
||||
static int32 TimesArrested;
|
||||
static int32 KillsSinceLastCheckpoint;
|
||||
|
||||
@@ -39,8 +39,6 @@
|
||||
#include "VarConsole.h"
|
||||
#include "KeyGen.h"
|
||||
|
||||
//--MIAMI: file done (possibly bugs)
|
||||
|
||||
bool CStreaming::ms_disableStreaming;
|
||||
bool CStreaming::ms_bLoadingBigModel;
|
||||
int32 CStreaming::ms_numModelsRequested;
|
||||
@@ -3152,6 +3150,46 @@ CStreaming::LoadSceneCollision(const CVector &pos)
|
||||
CStreaming::LoadAllRequestedModels(false);
|
||||
}
|
||||
|
||||
//--LCS: TODO PSP and PS2
|
||||
// some things commented out that might be Rsl3D dependent
|
||||
void CStreaming::RegisterPointer(void *ptr, int, bool) {}
|
||||
RpAtomic *CStreaming::RegisterAtomic(RpAtomic *atomic, void *)
|
||||
{
|
||||
return atomic;
|
||||
}
|
||||
void CStreaming::RegisterClump(RpClump *clump)
|
||||
{
|
||||
RpClumpForAllAtomics(clump, RegisterAtomic, nil);
|
||||
}
|
||||
RpAtomic *CStreaming::RegisterInstance(RpAtomic *atomic, void *)
|
||||
{
|
||||
// RegisterPointer(&atomic->geometry, 2, true);
|
||||
return atomic;
|
||||
}
|
||||
void CStreaming::RegisterInstance(RpClump *clump)
|
||||
{
|
||||
RpClumpForAllAtomics(clump, RegisterInstance, nil);
|
||||
}
|
||||
|
||||
void CStreaming::UnregisterPointer(void *ptr, int) {}
|
||||
RpAtomic *CStreaming::UnregisterAtomic(RpAtomic *atomic, void *)
|
||||
{
|
||||
return atomic;
|
||||
}
|
||||
void CStreaming::UnregisterClump(RpClump *clump)
|
||||
{
|
||||
RpClumpForAllAtomics(clump, UnregisterAtomic, nil);
|
||||
}
|
||||
RpAtomic *CStreaming::UnregisterInstance(RpAtomic *atomic, void *)
|
||||
{
|
||||
// UnregisterPointer(&atomic->geometry, 2);
|
||||
return atomic;
|
||||
}
|
||||
void CStreaming::UnregisterInstance(RpClump *clump)
|
||||
{
|
||||
RpClumpForAllAtomics(clump, UnregisterInstance, nil);
|
||||
}
|
||||
|
||||
void
|
||||
CStreaming::MemoryCardSave(uint8 *buf, uint32 *size)
|
||||
{
|
||||
|
||||
@@ -20,6 +20,7 @@ enum StreamFlags
|
||||
STREAMFLAGS_40 = 0x40, // TODO(LCS): what's this
|
||||
STREAMFLAGS_AMBIENT_SCRIPT_OWNED = 0x80,
|
||||
|
||||
// TODO(LCS): STREAMFLAGS_AMBIENT_SCRIPT_OWNED in STREAMFLAGS_CANT_REMOVE? check CColStore
|
||||
STREAMFLAGS_CANT_REMOVE = STREAMFLAGS_DONT_REMOVE|STREAMFLAGS_SCRIPTOWNED,
|
||||
STREAMFLAGS_KEEP_IN_MEMORY = STREAMFLAGS_DONT_REMOVE|STREAMFLAGS_SCRIPTOWNED|STREAMFLAGS_DEPENDENCY,
|
||||
};
|
||||
@@ -209,6 +210,17 @@ public:
|
||||
static void LoadScene(const CVector &pos);
|
||||
static void LoadSceneCollision(const CVector &pos);
|
||||
|
||||
static void RegisterPointer(void *ptr, int, bool);
|
||||
static RpAtomic *RegisterAtomic(RpAtomic *atomic, void *);
|
||||
static void RegisterClump(RpClump *clump);
|
||||
static RpAtomic *RegisterInstance(RpAtomic *atomic, void *);
|
||||
static void RegisterInstance(RpClump *clump);
|
||||
static void UnregisterPointer(void *ptr, int);
|
||||
static RpAtomic *UnregisterAtomic(RpAtomic *atomic, void *);
|
||||
static void UnregisterClump(RpClump *clump);
|
||||
static RpAtomic *UnregisterInstance(RpAtomic *atomic, void *);
|
||||
static void UnregisterInstance(RpClump *clump);
|
||||
|
||||
static void MemoryCardSave(uint8 *buffer, uint32 *length);
|
||||
static void MemoryCardLoad(uint8 *buffer, uint32 length);
|
||||
|
||||
|
||||
@@ -6,8 +6,6 @@
|
||||
#include "Collision.h"
|
||||
#include "SurfaceTable.h"
|
||||
|
||||
//--MIAMI: file done
|
||||
|
||||
float CSurfaceTable::ms_aAdhesiveLimitTable[NUMADHESIVEGROUPS][NUMADHESIVEGROUPS];
|
||||
|
||||
void
|
||||
|
||||
@@ -7,8 +7,6 @@
|
||||
#include "Timer.h"
|
||||
#include "SpecialFX.h"
|
||||
|
||||
// --MIAMI: file done
|
||||
|
||||
uint32 CTimer::m_snTimeInMilliseconds;
|
||||
PauseModeTime CTimer::m_snTimeInMillisecondsPauseMode = 1;
|
||||
|
||||
|
||||
@@ -10,8 +10,6 @@
|
||||
#include "World.h"
|
||||
#include "Zones.h"
|
||||
|
||||
// --MIAMI: file done
|
||||
|
||||
CPlaceName CUserDisplay::PlaceName;
|
||||
COnscreenTimer CUserDisplay::OnscnTimer;
|
||||
CPager CUserDisplay::Pager;
|
||||
|
||||
@@ -15,8 +15,6 @@
|
||||
int32 CWanted::MaximumWantedLevel = 6;
|
||||
int32 CWanted::nMaximumWantedLevel = 9600;
|
||||
|
||||
// --MIAMI: File done except stats
|
||||
|
||||
void
|
||||
CWanted::Initialise()
|
||||
{
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
#include "CopPed.h"
|
||||
#include "CutsceneMgr.h"
|
||||
#include "DMAudio.h"
|
||||
#include "Entity.h"
|
||||
#include "EventList.h"
|
||||
#include "Explosion.h"
|
||||
#include "Fire.h"
|
||||
@@ -12,11 +11,8 @@
|
||||
#include "Glass.h"
|
||||
#include "Messages.h"
|
||||
#include "ModelIndices.h"
|
||||
#include "Object.h"
|
||||
#include "ParticleObject.h"
|
||||
#include "Ped.h"
|
||||
#include "Pickups.h"
|
||||
#include "PlayerPed.h"
|
||||
#include "Population.h"
|
||||
#include "ProjectileInfo.h"
|
||||
#include "Record.h"
|
||||
@@ -25,12 +21,9 @@
|
||||
#include "RpAnimBlend.h"
|
||||
#include "Shadows.h"
|
||||
#include "TempColModels.h"
|
||||
#include "Vehicle.h"
|
||||
#include "WaterLevel.h"
|
||||
#include "World.h"
|
||||
|
||||
// --MIAMI: file done
|
||||
|
||||
#define OBJECT_REPOSITION_OFFSET_Z 2.0f
|
||||
|
||||
CColPoint gaTempSphereColPoints[MAX_COLLISION_POINTS];
|
||||
@@ -1795,56 +1788,35 @@ void
|
||||
CWorld::RepositionOneObject(CEntity *pEntity)
|
||||
{
|
||||
int16 modelId = pEntity->GetModelIndex();
|
||||
if (modelId == MI_PARKINGMETER || modelId == MI_PHONEBOOTH1 || modelId == MI_WASTEBIN ||
|
||||
modelId == MI_BIN || modelId == MI_POSTBOX1 || modelId == MI_NEWSSTAND || modelId == MI_TRAFFICCONE ||
|
||||
modelId == MI_DUMP1 || modelId == MI_ROADWORKBARRIER1 || modelId == MI_BUSSIGN1 || modelId == MI_NOPARKINGSIGN1 ||
|
||||
modelId == MI_PHONESIGN || modelId == MI_FIRE_HYDRANT || modelId == MI_BOLLARDLIGHT ||
|
||||
modelId == MI_PARKTABLE || modelId == MI_PARKINGMETER2 || modelId == MI_TELPOLE02 ||
|
||||
modelId == MI_PARKBENCH || modelId == MI_BARRIER1 || IsTreeModel(modelId)
|
||||
) {
|
||||
if (IsLightThatNeedsRepositioning(modelId) || IsTreeModel(modelId) || modelId == MI_PARKINGMETER ||
|
||||
modelId == MI_PHONEBOOTH1 || modelId == MI_WASTEBIN || modelId == MI_BIN || modelId == MI_POSTBOX1 ||
|
||||
modelId == MI_NEWSSTAND || modelId == MI_TRAFFICCONE || modelId == MI_DUMP1 ||
|
||||
modelId == MI_ROADWORKBARRIER1 || modelId == MI_BUSSIGN1 || modelId == MI_NOPARKINGSIGN1 ||
|
||||
modelId == MI_PHONESIGN || modelId == MI_TAXISIGN || modelId == MI_FISHSTALL01 ||
|
||||
modelId == MI_FISHSTALL02 || modelId == MI_FISHSTALL03 || modelId == MI_FISHSTALL04 ||
|
||||
modelId == MI_BAGELSTAND2 || modelId == MI_FIRE_HYDRANT || modelId == MI_BOLLARDLIGHT ||
|
||||
modelId == MI_PARKTABLE) {
|
||||
CVector& position = pEntity->GetMatrix().GetPosition();
|
||||
CColModel* pColModel = pEntity->GetColModel();
|
||||
float fBoundingBoxMinZ = pColModel->boundingBox.min.z;
|
||||
float fHeight = pColModel->boundingBox.max.z - pColModel->boundingBox.min.z;
|
||||
if (fHeight < OBJECT_REPOSITION_OFFSET_Z) fHeight = OBJECT_REPOSITION_OFFSET_Z;
|
||||
float fBoundingBoxMinZ = pEntity->GetColModel()->boundingBox.min.z;
|
||||
position.z = FindGroundZFor3DCoord(position.x, position.y,
|
||||
position.z + fHeight, nil) -
|
||||
fBoundingBoxMinZ;
|
||||
position.z + OBJECT_REPOSITION_OFFSET_Z, nil) -
|
||||
fBoundingBoxMinZ;
|
||||
pEntity->m_matrix.UpdateRW();
|
||||
pEntity->UpdateRwFrame();
|
||||
} else if(IsLightThatNeedsRepositioning(modelId)) {
|
||||
CVector position = pEntity->GetMatrix().GetPosition();
|
||||
CColModel* pColModel = pEntity->GetColModel();
|
||||
float fBoundingBoxMinZ = pColModel->boundingBox.min.z;
|
||||
float fHeight = pColModel->boundingBox.max.z - pColModel->boundingBox.min.z;
|
||||
if (fHeight < OBJECT_REPOSITION_OFFSET_Z) fHeight = OBJECT_REPOSITION_OFFSET_Z;
|
||||
if (pColModel->numBoxes == 1)
|
||||
position = pEntity->GetMatrix() * CVector(
|
||||
(pColModel->boxes[0].min.x + pColModel->boxes[0].max.x) / 2,
|
||||
(pColModel->boxes[0].min.y + pColModel->boxes[0].max.y) / 2,
|
||||
pColModel->boxes[0].min.z);
|
||||
else if (pColModel->numSpheres > 0) {
|
||||
position.z = 1000.0f;
|
||||
for (int i = 0; i < pColModel->numSpheres; i++) {
|
||||
if (pColModel->spheres[i].center.z < position.z)
|
||||
position = pColModel->spheres[i].center;
|
||||
}
|
||||
if (position.z < 1000.0f)
|
||||
position = pEntity->GetMatrix() * position;
|
||||
}
|
||||
pEntity->GetMatrix().GetPosition().z = FindGroundZFor3DCoord(position.x, position.y, pEntity->GetMatrix().GetPosition().z + fHeight, nil) - fBoundingBoxMinZ;
|
||||
pEntity->GetMatrix().UpdateRW();
|
||||
pEntity->UpdateRwFrame();
|
||||
|
||||
}
|
||||
if(modelId == MI_BUOY) {
|
||||
} else if(modelId == MI_BUOY) {
|
||||
float fWaterLevel = 0.0f;
|
||||
bool bFound = true;
|
||||
const CVector &position = pEntity->GetPosition();
|
||||
float fGroundZ = FindGroundZFor3DCoord(position.x, position.y,
|
||||
position.z + OBJECT_REPOSITION_OFFSET_Z, &bFound);
|
||||
CColModel *pColModel = pEntity->GetColModel();
|
||||
float fHeight = pColModel->boundingBox.max.z - pColModel->boundingBox.min.z;
|
||||
pEntity->GetMatrix().GetPosition().z = 0.2f * fHeight + 6.0f - 0.5f * fHeight;
|
||||
if(CWaterLevel::GetWaterLevelNoWaves(position.x, position.y, position.z + OBJECT_REPOSITION_OFFSET_Z,
|
||||
&fWaterLevel)) {
|
||||
if(!bFound || fWaterLevel > fGroundZ) {
|
||||
CColModel *pColModel = pEntity->GetColModel();
|
||||
float fHeight = pColModel->boundingBox.max.z - pColModel->boundingBox.min.z;
|
||||
pEntity->GetMatrix().GetPosition().z = 0.2f * fHeight + fWaterLevel - 0.5f * fHeight;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#include "Game.h"
|
||||
#include "Lists.h"
|
||||
#include "PlayerInfo.h"
|
||||
#include "Collision.h"
|
||||
|
||||
/* Sectors span from -2000 to 2000 in x and y.
|
||||
* With 100x100 sectors, each is 40x40 units. */
|
||||
@@ -48,11 +49,6 @@ public:
|
||||
|
||||
VALIDATE_SIZE(CSector, 0x28);
|
||||
|
||||
class CEntity;
|
||||
struct CColPoint;
|
||||
struct CColLine;
|
||||
struct CStoredCollPoly;
|
||||
|
||||
class CWorld
|
||||
{
|
||||
static CPtrList ms_bigBuildingsList[NUM_LEVELS];
|
||||
|
||||
@@ -11,8 +11,6 @@
|
||||
#include "ZoneCull.h"
|
||||
#include "Zones.h"
|
||||
|
||||
//--MIAMI: done
|
||||
|
||||
int32 CCullZones::NumAttributeZones;
|
||||
CAttributeZone CCullZones::aAttributeZones[NUMATTRIBZONES];
|
||||
|
||||
|
||||
@@ -9,8 +9,6 @@
|
||||
#include "World.h"
|
||||
#include "Timer.h"
|
||||
|
||||
//--MIAMI: file done
|
||||
|
||||
eLevelName CTheZones::m_CurrLevel;
|
||||
int16 CTheZones::FindIndex;
|
||||
|
||||
@@ -544,7 +542,7 @@ CTheZones::SetZonePedInfo(uint16 zoneid, uint8 day, int16 pedDensity,
|
||||
info->gangPedThreshold[8] += info->gangPedThreshold[7];
|
||||
}
|
||||
|
||||
//--MIAMI: unused
|
||||
// unused
|
||||
void
|
||||
CTheZones::SetCarDensity(uint16 zoneid, uint8 day, uint16 cardensity)
|
||||
{
|
||||
@@ -553,7 +551,7 @@ CTheZones::SetCarDensity(uint16 zoneid, uint8 day, uint16 cardensity)
|
||||
ZoneInfoArray[day ? zone->zoneinfoDay : zone->zoneinfoNight].carDensity = cardensity;
|
||||
}
|
||||
|
||||
//--MIAMI: unused
|
||||
// unused
|
||||
void
|
||||
CTheZones::SetPedDensity(uint16 zoneid, uint8 day, uint16 peddensity)
|
||||
{
|
||||
|
||||
@@ -103,8 +103,8 @@ public:
|
||||
static void SetPedDensity(uint16 zoneid, uint8 day, uint16 peddensity);
|
||||
static void SetPedGroup(uint16 zoneid, uint8 day, uint16 pedgroup);
|
||||
static int16 FindAudioZone(CVector *pos);
|
||||
static CZone *GetPointerForZoneIndex(int32 i) { return i == -1 ? nil : &NavigationZoneArray[i]; }
|
||||
static int32 GetIndexForZonePointer(CZone *zone) { return zone == nil ? -1 : zone - NavigationZoneArray; }
|
||||
static CZone *GetPointerForZoneIndex(ssize_t i) { return i == -1 ? nil : &NavigationZoneArray[i]; }
|
||||
static ssize_t GetIndexForZonePointer(CZone *zone) { return zone == nil ? -1 : zone - NavigationZoneArray; }
|
||||
static void AddZoneToAudioZoneArray(CZone *zone);
|
||||
static void InitialiseAudioZoneArray(void);
|
||||
static void SaveAllZones(uint8 *buffer, uint32 *length);
|
||||
|
||||
@@ -7,21 +7,47 @@
|
||||
#pragma warning(disable: 4838) // narrowing conversion
|
||||
#pragma warning(disable: 4996) // POSIX names
|
||||
|
||||
#ifdef __MWERKS__
|
||||
#define __STDC_LIMIT_MACROS // so we get UINT32_MAX etc
|
||||
#endif
|
||||
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
|
||||
#if defined _WIN32 && defined WITHWINDOWS
|
||||
#ifdef __MWERKS__
|
||||
#define AUDIO_MSS
|
||||
#define RWLIBS // codewarrior doesn't support project level defines - so not even this is enough, but still catches most ifdefs
|
||||
#endif
|
||||
|
||||
#if !defined RW_D3D9 && defined LIBRW
|
||||
#undef WITHD3D
|
||||
#undef WITHDINPUT
|
||||
#endif
|
||||
|
||||
#if (defined WITHD3D && !defined LIBRW)
|
||||
#define WITHWINDOWS
|
||||
#endif
|
||||
|
||||
#if defined _WIN32 && defined WITHWINDOWS && !defined _INC_WINDOWS
|
||||
#include <windows.h>
|
||||
#endif
|
||||
|
||||
#if defined _WIN32 && defined WITHD3D
|
||||
#include <windows.h>
|
||||
#ifndef USE_D3D9
|
||||
#include <d3d8types.h>
|
||||
#else
|
||||
#include <d3d9types.h>
|
||||
#ifdef WITHD3D
|
||||
#ifdef LIBRW
|
||||
#define WITH_D3D // librw includes d3d9 itself via this right now
|
||||
#else
|
||||
#ifndef USE_D3D9
|
||||
#include <d3d8.h>
|
||||
#else
|
||||
#include <d3d9.h>
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef WITHDINPUT
|
||||
#define DIRECTINPUT_VERSION 0x0800
|
||||
#include <dinput.h>
|
||||
#endif
|
||||
|
||||
#include <rwcore.h>
|
||||
@@ -52,14 +78,6 @@
|
||||
|
||||
#define rwVENDORID_ROCKSTAR 0x0253F2
|
||||
|
||||
// Get rid of bullshit windows definitions, we're not running on an 8086
|
||||
#ifdef far
|
||||
#undef far
|
||||
#endif
|
||||
#ifdef near
|
||||
#undef near
|
||||
#endif
|
||||
|
||||
#define Max(a,b) ((a) > (b) ? (a) : (b))
|
||||
#define Min(a,b) ((a) < (b) ? (a) : (b))
|
||||
|
||||
@@ -70,8 +88,13 @@ typedef uint8_t uint8;
|
||||
typedef int8_t int8;
|
||||
typedef uint16_t uint16;
|
||||
typedef int16_t int16;
|
||||
#ifndef __MWERKS__
|
||||
typedef uint32_t uint32;
|
||||
typedef int32_t int32;
|
||||
#else
|
||||
typedef unsigned int uint32;
|
||||
typedef int int32;
|
||||
#endif
|
||||
typedef uintptr_t uintptr;
|
||||
typedef intptr_t intptr;
|
||||
typedef uint64_t uint64;
|
||||
@@ -83,7 +106,7 @@ typedef uint8 bool8;
|
||||
typedef uint16 bool16;
|
||||
typedef uint32 bool32;
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
#if defined(_MSC_VER) || defined (__MWERKS__)
|
||||
typedef ptrdiff_t ssize_t;
|
||||
#endif
|
||||
|
||||
@@ -191,6 +214,18 @@ inline uint32 ldb(uint32 p, uint32 s, uint32 w)
|
||||
#define SCALE_AND_CENTER_X(x) SCREEN_STRETCH_X(x)
|
||||
#endif
|
||||
|
||||
// these are temp marcos while we don't implement all PSP UI coordinates
|
||||
#define PSP_DEFAULT_SCREEN_WIDTH (480)
|
||||
#define PSP_DEFAULT_SCREEN_HEIGHT (272)
|
||||
|
||||
#define PSP_SCALE_TO_PS2_X(a) ((float)a * ((float)DEFAULT_SCREEN_WIDTH / (float)PSP_DEFAULT_SCREEN_WIDTH))
|
||||
#define PSP_SCALE_TO_PS2_Y(a) ((float)a * ((float)DEFAULT_SCREEN_HEIGHT / (float)PSP_DEFAULT_SCREEN_HEIGHT))
|
||||
|
||||
#define PSP_SCREEN_SCALE_X(a) ((a) * (float) SCREEN_WIDTH / PSP_DEFAULT_SCREEN_WIDTH)
|
||||
#define PSP_SCREEN_SCALE_Y(a) ((a) * (float) SCREEN_WIDTH / PSP_DEFAULT_SCREEN_WIDTH)
|
||||
#define PSP_SCREEN_SCALE_FROM_RIGHT(a) (SCREEN_WIDTH - PSP_SCREEN_SCALE_X(a))
|
||||
#define PSP_SCREEN_SCALE_FROM_BOTTOM(a) (SCREEN_HEIGHT - PSP_SCREEN_SCALE_Y(a))
|
||||
|
||||
#include "maths.h"
|
||||
#include "Vector.h"
|
||||
#include "Vector2D.h"
|
||||
@@ -269,6 +304,22 @@ extern wchar *AllocUnicode(const char*src);
|
||||
inline float sq(float x) { return x*x; }
|
||||
#define SQR(x) ((x) * (x))
|
||||
|
||||
#ifdef __MWERKS__
|
||||
#define M_E 2.71828182845904523536 // e
|
||||
#define M_LOG2E 1.44269504088896340736 // log2(e)
|
||||
#define M_LOG10E 0.434294481903251827651 // log10(e)
|
||||
#define M_LN2 0.693147180559945309417 // ln(2)
|
||||
#define M_LN10 2.30258509299404568402 // ln(10)
|
||||
#define M_PI 3.14159265358979323846 // pi
|
||||
#define M_PI_2 1.57079632679489661923 // pi/2
|
||||
#define M_PI_4 0.785398163397448309616 // pi/4
|
||||
#define M_1_PI 0.318309886183790671538 // 1/pi
|
||||
#define M_2_PI 0.636619772367581343076 // 2/pi
|
||||
#define M_2_SQRTPI 1.12837916709551257390 // 2/sqrt(pi)
|
||||
#define M_SQRT2 1.41421356237309504880 // sqrt(2)
|
||||
#define M_SQRT1_2 0.707106781186547524401 // 1/sqrt(2)
|
||||
#endif
|
||||
|
||||
#define PI (float)M_PI
|
||||
#define TWOPI (PI*2)
|
||||
#define HALFPI (PI/2)
|
||||
@@ -298,14 +349,34 @@ void re3_usererror(const char *format, ...);
|
||||
#define DEV(f, ...) re3_debug("[DEV]: " f, ## __VA_ARGS__)
|
||||
#endif
|
||||
|
||||
#ifdef __MWERKS__
|
||||
void debug(char *f, ...);
|
||||
void Error(char *f, ...);
|
||||
__inline__ void TRACE(char *f, ...) { } // this is re3 only, and so the function needs to be inline - this way no call actually gets placed
|
||||
// USERERROR only gets used in oal builds ... once
|
||||
#else
|
||||
#define debug(f, ...) re3_debug("[DBG]: " f, ## __VA_ARGS__)
|
||||
#define TRACE(f, ...) re3_trace(__FILE__, __LINE__, __FUNCTION__, f, ## __VA_ARGS__)
|
||||
#define Error(f, ...) re3_debug("[ERROR]: " f, ## __VA_ARGS__)
|
||||
#ifndef MASTER
|
||||
#define TRACE(f, ...) re3_trace(__FILE__, __LINE__, __FUNCTION__, f, ## __VA_ARGS__)
|
||||
#define USERERROR(f, ...) re3_usererror(f, ## __VA_ARGS__)
|
||||
#else
|
||||
#define TRACE(f, ...)
|
||||
#define USERERROR(f, ...)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef MASTER
|
||||
#define assert(_Expression) (void)( (!!(_Expression)) || (re3_assert(#_Expression, __FILE__, __LINE__, __FUNCTION__), 0) )
|
||||
#else
|
||||
#define assert(_Expression)
|
||||
#endif
|
||||
#define ASSERT assert
|
||||
|
||||
#ifdef __MWERKS__
|
||||
#define static_assert(bool_constexpr, message)
|
||||
#endif
|
||||
|
||||
#define _TODO(x)
|
||||
#define _TODOCONST(x) (x)
|
||||
|
||||
@@ -329,6 +400,7 @@ void re3_usererror(const char *format, ...);
|
||||
#define CONCAT_(x,y) x##y
|
||||
#define CONCAT(x,y) CONCAT_(x,y)
|
||||
|
||||
#ifdef DEBUGMENU
|
||||
// Tweaking stuff for debugmenu
|
||||
#define TWEAKPATH ___tw___TWEAKPATH
|
||||
#define SETTWEAKPATH(path) static const char *___tw___TWEAKPATH = path;
|
||||
@@ -442,6 +514,7 @@ _TWEEKCLASS(CTweakUInt32, uint32);
|
||||
_TWEEKCLASS(CTweakFloat, float);
|
||||
|
||||
#undef _TWEEKCLASS
|
||||
#endif
|
||||
|
||||
#ifdef VALIDATE_SAVE_SIZE
|
||||
extern int32 _saveBufCount;
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
#pragma once
|
||||
|
||||
// disables (most) stuff that wasn't in original gta-vc.exe - check section at the bottom of this file
|
||||
//#define VANILLA_DEFINES
|
||||
|
||||
enum Config {
|
||||
NUMPLAYERS = 1,
|
||||
|
||||
@@ -198,7 +201,7 @@ enum Config {
|
||||
//#define ANIM_COMPRESSION // only keep most recently used anims uncompressed
|
||||
|
||||
#define GTA_TRAIN
|
||||
//#define GTA_BRIDGE
|
||||
#define GTA_BRIDGE
|
||||
|
||||
#if defined GTA_PS2
|
||||
# define GTA_PS2_STUFF
|
||||
@@ -346,7 +349,7 @@ static_assert(false, "SUPPORT_XBOX_SCRIPT and SUPPORT_MOBILE_SCRIPT are mutually
|
||||
#endif
|
||||
//#define SIMPLIER_MISSIONS // apply simplifications from mobile
|
||||
#define USE_ADVANCED_SCRIPT_DEBUG_OUTPUT
|
||||
#define SCRIPT_LOG_FILE_LEVEL 0 // 0 == no log, 1 == overwrite every frame, 2 == full log
|
||||
#define SCRIPT_LOG_FILE_LEVEL 1 // 0 == no log, 1 == overwrite every frame, 2 == full log
|
||||
|
||||
#ifndef USE_ADVANCED_SCRIPT_DEBUG_OUTPUT
|
||||
#define USE_BASIC_SCRIPT_DEBUG_OUTPUT
|
||||
@@ -405,3 +408,87 @@ static_assert(false, "SUPPORT_XBOX_SCRIPT and SUPPORT_MOBILE_SCRIPT are mutually
|
||||
#undef PS2_ALPHA_TEST
|
||||
#undef NO_ISLAND_LOADING
|
||||
#endif
|
||||
|
||||
#if defined __MWERKS__ || defined VANILLA_DEFINES
|
||||
#define FINAL
|
||||
#undef CHATTYSPLASH
|
||||
#undef TIMEBARS
|
||||
|
||||
#define MASTER
|
||||
#undef VALIDATE_SAVE_SIZE
|
||||
#undef NO_MOVIES
|
||||
#undef DEBUGMENU
|
||||
|
||||
#undef DRAW_GAME_VERSION_TEXT
|
||||
|
||||
//#undef NASTY_GAME
|
||||
//#undef NO_CDCHECK
|
||||
|
||||
#undef GTA_PS2_STUFF
|
||||
#undef USE_PS2_RAND
|
||||
#undef RANDOMSPLASH
|
||||
#undef PS2_MATFX
|
||||
|
||||
#undef FIX_BUGS
|
||||
#define THIS_IS_STUPID
|
||||
#undef MORE_LANGUAGES
|
||||
#undef COMPATIBLE_SAVES
|
||||
#undef LOAD_INI_SETTINGS
|
||||
#undef FIX_HIGH_FPS_BUGS_ON_FRONTEND
|
||||
|
||||
#undef ASPECT_RATIO_SCALE
|
||||
#undef PROPER_SCALING
|
||||
//#undef DEFAULT_NATIVE_RESOLUTION
|
||||
#undef PS2_ALPHA_TEST
|
||||
#undef IMPROVED_VIDEOMODE
|
||||
#undef DISABLE_LOADING_SCREEN
|
||||
#undef DISABLE_VSYNC_ON_TEXTURE_CONVERSION
|
||||
|
||||
#undef FIX_SPRITES
|
||||
|
||||
#define PC_WATER
|
||||
#undef WATER_CHEATS
|
||||
|
||||
#undef USE_CUTSCENE_SHADOW_FOR_PED
|
||||
#undef DISABLE_CUTSCENE_SHADOWS
|
||||
|
||||
#undef XINPUT
|
||||
#undef DETECT_PAD_INPUT_SWITCH
|
||||
#undef KANGAROO_CHEAT
|
||||
#undef RESTORE_ALLCARSHELI_CHEAT
|
||||
#undef BETTER_ALLCARSAREDODO_CHEAT
|
||||
#undef WALLCLIMB_CHEAT
|
||||
#undef REGISTER_START_BUTTON
|
||||
#undef BIND_VEHICLE_FIREWEAPON
|
||||
#undef BUTTON_ICONS
|
||||
|
||||
#undef FIX_RADAR
|
||||
|
||||
#undef MAP_ENHANCEMENTS
|
||||
#undef MUCH_SHORTER_OUTRO_SCREEN
|
||||
#undef CUSTOM_FRONTEND_OPTIONS
|
||||
|
||||
#undef GRAPHICS_MENU_OPTIONS
|
||||
#undef NO_ISLAND_LOADING
|
||||
#undef CUTSCENE_BORDERS_SWITCH
|
||||
#undef MULTISAMPLING
|
||||
#undef INVERT_LOOK_FOR_PAD
|
||||
|
||||
#undef USE_DEBUG_SCRIPT_LOADER
|
||||
#undef USE_MEASUREMENTS_IN_METERS
|
||||
#undef USE_PRECISE_MEASUREMENT_CONVERTION
|
||||
#undef SUPPORT_JAPANESE_SCRIPT
|
||||
#undef MISSION_REPLAY
|
||||
#undef USE_ADVANCED_SCRIPT_DEBUG_OUTPUT
|
||||
#undef USE_BASIC_SCRIPT_DEBUG_OUTPUT
|
||||
|
||||
#define DONT_FIX_REPLAY_BUGS
|
||||
|
||||
#undef EXPLODING_AIRTRAIN
|
||||
#undef CPLANE_ROTORS
|
||||
#undef CAMERA_PICKUP
|
||||
#undef CANCELLABLE_CAR_ENTER
|
||||
#undef IMPROVED_CAMERA
|
||||
#undef FREE_CAM
|
||||
#undef BIG_IMG
|
||||
#endif
|
||||
|
||||
@@ -85,6 +85,9 @@ wchar gUString2[256];
|
||||
// leeds
|
||||
bool gMakeResources = true;
|
||||
bool gUseChunkFiles = false;
|
||||
bool gSecondExportPass;
|
||||
bool gUseModelResources;
|
||||
bool gUseResources;
|
||||
|
||||
float FramesPerSecond = 30.0f;
|
||||
|
||||
@@ -141,6 +144,24 @@ bool gbNewRenderer = true;
|
||||
bool bDisplayNumOfAtomicsRendered = false;
|
||||
bool bDisplayPosn = false;
|
||||
|
||||
#ifdef __MWERKS__
|
||||
void
|
||||
debug(char *fmt, ...)
|
||||
{
|
||||
#ifndef MASTER
|
||||
// TODO put something here
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
Error(char *fmt, ...)
|
||||
{
|
||||
#ifndef MASTER
|
||||
// TODO put something here
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
ValidateVersion()
|
||||
{
|
||||
@@ -517,7 +538,6 @@ Terminate3D(void)
|
||||
CSprite2d splash;
|
||||
int splashTxdId = -1;
|
||||
|
||||
//--MIAMI: done
|
||||
CSprite2d*
|
||||
LoadSplash(const char *name)
|
||||
{
|
||||
@@ -563,7 +583,6 @@ DestroySplashScreen(void)
|
||||
splashTxdId = -1;
|
||||
}
|
||||
|
||||
//--MIAMI: done
|
||||
Const char*
|
||||
GetRandomSplashScreen(void)
|
||||
{
|
||||
@@ -812,6 +831,7 @@ ProcessSlowMode(void)
|
||||
float FramesPerSecondCounter;
|
||||
int32 FrameSamples;
|
||||
|
||||
#ifndef MASTER
|
||||
struct tZonePrint
|
||||
{
|
||||
char name[11];
|
||||
@@ -842,8 +862,6 @@ tZonePrint ZonePrint[] =
|
||||
{ "WASHINBTM", "AC", CRect(-255.0f, -1200.0f, 500.0f, -1690.0f)}
|
||||
};
|
||||
|
||||
#ifndef MASTER
|
||||
|
||||
void
|
||||
PrintMemoryUsage(void)
|
||||
{
|
||||
|
||||
@@ -27,6 +27,9 @@ extern bool gbPrintMemoryUsage;
|
||||
// leeds
|
||||
extern bool gMakeResources;
|
||||
extern bool gUseChunkFiles;
|
||||
extern bool gSecondExportPass;
|
||||
extern bool gUseModelResources;
|
||||
extern bool gUseResources;
|
||||
|
||||
class CSprite2d;
|
||||
|
||||
@@ -49,8 +52,10 @@ void TheModelViewer(void);
|
||||
#endif
|
||||
|
||||
#ifdef LOAD_INI_SETTINGS
|
||||
void LoadINISettings();
|
||||
bool LoadINISettings();
|
||||
void SaveINISettings();
|
||||
void LoadINIControllerSettings();
|
||||
void SaveINIControllerSettings();
|
||||
#endif
|
||||
|
||||
#ifdef NEW_RENDERER
|
||||
|
||||
478
src/core/re3.cpp
478
src/core/re3.cpp
@@ -1,7 +1,6 @@
|
||||
#include <csignal>
|
||||
#define WITHWINDOWS
|
||||
#include "common.h"
|
||||
#include "crossplatform.h"
|
||||
#include "Renderer.h"
|
||||
#include "Occlusion.h"
|
||||
#include "Credits.h"
|
||||
@@ -34,9 +33,12 @@
|
||||
#include "custompipes.h"
|
||||
#include "MemoryHeap.h"
|
||||
#include "FileMgr.h"
|
||||
#include "Camera.h"
|
||||
#include "MBlur.h"
|
||||
#include "ControllerConfig.h"
|
||||
|
||||
#ifdef DONT_TRUST_RECOGNIZED_JOYSTICKS
|
||||
#include "ControllerConfig.h"
|
||||
#include "crossplatform.h"
|
||||
#endif
|
||||
|
||||
#ifndef _WIN32
|
||||
@@ -93,18 +95,16 @@ CustomFrontendOptionsPopulate(void)
|
||||
if (fd) {
|
||||
#ifdef GRAPHICS_MENU_OPTIONS
|
||||
FrontendOptionSetCursor(MENUPAGE_GRAPHICS_SETTINGS, -3, false);
|
||||
FrontendOptionAddSelect("FED_VPL", 0, 0, MENUALIGN_LEFT, pipelineNames, ARRAY_SIZE(pipelineNames), (int8*)&CustomPipes::VehiclePipeSwitch, false, nil, "VehiclePipeline");
|
||||
FrontendOptionAddSelect("FED_WPL", 0, 0, MENUALIGN_LEFT, pipelineNames, ARRAY_SIZE(pipelineNames), (int8*)&CustomPipes::WorldPipeSwitch, false, nil, "WorldPipeline");
|
||||
FrontendOptionAddSelect("FED_PRM", 0, 0, MENUALIGN_LEFT, off_on, 2, (int8*)&CustomPipes::RimlightEnable, false, nil, "NeoRimLight");
|
||||
FrontendOptionAddSelect("FED_WLM", 0, 0, MENUALIGN_LEFT, off_on, 2, (int8*)&CustomPipes::LightmapEnable, false, nil, "NeoLightMaps");
|
||||
FrontendOptionAddSelect("FED_RGL", 0, 0, MENUALIGN_LEFT, off_on, 2, (int8*)&CustomPipes::GlossEnable, false, nil, "NeoRoadGloss");
|
||||
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");
|
||||
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");
|
||||
#else
|
||||
FrontendOptionSetCursor(MENUPAGE_DISPLAY_SETTINGS, -3, false);
|
||||
FrontendOptionAddSelect("FED_VPL", 0, 0, MENUALIGN_LEFT, pipelineNames, ARRAY_SIZE(pipelineNames), (int8*)&CustomPipes::VehiclePipeSwitch, false, nil, "VehiclePipeline");
|
||||
FrontendOptionAddSelect("FED_WPL", 0, 0, MENUALIGN_LEFT, pipelineNames, ARRAY_SIZE(pipelineNames), (int8*)&CustomPipes::WorldPipeSwitch, false, nil, "WorldPipeline");
|
||||
FrontendOptionAddSelect("FED_PRM", 0, 0, MENUALIGN_LEFT, off_on, 2, (int8*)&CustomPipes::RimlightEnable, false, nil, "NeoRimLight");
|
||||
FrontendOptionAddSelect("FED_WLM", 0, 0, MENUALIGN_LEFT, off_on, 2, (int8*)&CustomPipes::LightmapEnable, false, nil, "NeoLightMaps");
|
||||
FrontendOptionAddSelect("FED_RGL", 0, 0, MENUALIGN_LEFT, off_on, 2, (int8*)&CustomPipes::GlossEnable, false, nil, "NeoRoadGloss");
|
||||
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");
|
||||
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");
|
||||
#endif
|
||||
CFileMgr::CloseFile(fd);
|
||||
}
|
||||
@@ -117,82 +117,308 @@ CustomFrontendOptionsPopulate(void)
|
||||
#include "ini_parser.hpp"
|
||||
|
||||
linb::ini cfg;
|
||||
int CheckAndReadIniInt(const char *cat, const char *key, int original)
|
||||
bool ReadIniIfExists(const char *cat, const char *key, uint32 *out)
|
||||
{
|
||||
std::string strval = cfg.get(cat, key, "");
|
||||
std::string strval = cfg.get(cat, key, "\xBA");
|
||||
const char *value = strval.c_str();
|
||||
if (value && value[0] != '\0')
|
||||
return atoi(value);
|
||||
|
||||
return original;
|
||||
char *endPtr;
|
||||
if (value && value[0] != '\xBA') {
|
||||
*out = strtoul(value, &endPtr, 0);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
float CheckAndReadIniFloat(const char *cat, const char *key, float original)
|
||||
bool ReadIniIfExists(const char *cat, const char *key, bool *out)
|
||||
{
|
||||
std::string strval = cfg.get(cat, key, "");
|
||||
std::string strval = cfg.get(cat, key, "\xBA");
|
||||
const char *value = strval.c_str();
|
||||
if (value && value[0] != '\0')
|
||||
return atof(value);
|
||||
|
||||
return original;
|
||||
char *endPtr;
|
||||
if (value && value[0] != '\xBA') {
|
||||
*out = strtoul(value, &endPtr, 0);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void CheckAndSaveIniInt(const char *cat, const char *key, int val, bool &changed)
|
||||
bool ReadIniIfExists(const char *cat, const char *key, int32 *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;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
bool ReadIniIfExists(const char *cat, const char *key, float *out)
|
||||
{
|
||||
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;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void StoreIni(const char *cat, const char *key, uint32 val)
|
||||
{
|
||||
char temp[10];
|
||||
if (atoi(cfg.get(cat, key, "xxx").c_str()) != val) { // if .ini doesn't have our key, compare with xxx and forcefully add it
|
||||
changed = true;
|
||||
sprintf(temp, "%u", val);
|
||||
cfg.set(cat, key, temp);
|
||||
}
|
||||
sprintf(temp, "%u", val);
|
||||
cfg.set(cat, key, temp);
|
||||
}
|
||||
|
||||
void CheckAndSaveIniFloat(const char *cat, const char *key, float val, bool &changed)
|
||||
void StoreIni(const char *cat, const char *key, uint8 val)
|
||||
{
|
||||
char temp[10];
|
||||
if (atof(cfg.get(cat, key, "xxx").c_str()) != val) { // if .ini doesn't have our key, compare with xxx and forcefully add it
|
||||
changed = true;
|
||||
sprintf(temp, "%f", val);
|
||||
cfg.set(cat, key, temp);
|
||||
}
|
||||
sprintf(temp, "%u", (uint32)val);
|
||||
cfg.set(cat, key, temp);
|
||||
}
|
||||
|
||||
void LoadINISettings()
|
||||
void StoreIni(const char *cat, const char *key, int32 val)
|
||||
{
|
||||
cfg.load_file("reLCS.ini");
|
||||
char temp[10];
|
||||
sprintf(temp, "%d", val);
|
||||
cfg.set(cat, key, temp);
|
||||
}
|
||||
|
||||
void StoreIni(const char *cat, const char *key, int8 val)
|
||||
{
|
||||
char temp[10];
|
||||
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()
|
||||
{
|
||||
#ifdef DONT_TRUST_RECOGNIZED_JOYSTICKS
|
||||
// Written by assuming the codes below will run after _InputInitialiseJoys().
|
||||
strcpy(gSelectedJoystickName, cfg.get("DetectJoystick", "JoystickName", "").c_str());
|
||||
|
||||
if(gSelectedJoystickName[0] != '\0') {
|
||||
for (int i = 0; i <= GLFW_JOYSTICK_LAST; i++) {
|
||||
if (glfwJoystickPresent(i) && strncmp(gSelectedJoystickName, glfwGetJoystickName(i), strlen(gSelectedJoystickName)) == 0) {
|
||||
if (PSGLOBAL(joy1id) != -1) {
|
||||
PSGLOBAL(joy2id) = PSGLOBAL(joy1id);
|
||||
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;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
PSGLOBAL(joy1id) = i;
|
||||
int count;
|
||||
glfwGetJoystickButtons(PSGLOBAL(joy1id), &count);
|
||||
|
||||
// We need to init and reload bindings, because;
|
||||
// 1-joypad button number may differ with saved/prvly connected one
|
||||
// 2-bindings are not init'ed if there is no joypad at the start
|
||||
ControlsManager.InitDefaultControlConfigJoyPad(count);
|
||||
CFileMgr::SetDirMyDocuments();
|
||||
int32 gta3set = CFileMgr::OpenFile("gta3.set", "r");
|
||||
if (gta3set) {
|
||||
ControlsManager.LoadSettings(gta3set);
|
||||
CFileMgr::CloseFile(gta3set);
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
CFileMgr::SetDir("");
|
||||
break;
|
||||
|
||||
ControlsManager.SetControllerKeyAssociatedWithAction((e_ControllerAction)i, contKey, (eControllerType)contType);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
#ifdef DONT_TRUST_RECOGNIZED_JOYSTICKS
|
||||
StoreIni("Controller", "JoystickName", gSelectedJoystickName, 128);
|
||||
#endif
|
||||
StoreIni("Controller", "PadButtonsInited", ControlsManager.ms_padButtonsInited);
|
||||
cfg.write_file("reLCS.ini");
|
||||
}
|
||||
|
||||
bool LoadINISettings()
|
||||
{
|
||||
if (!cfg.load_file("reLCS.ini"))
|
||||
return false;
|
||||
|
||||
#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);
|
||||
|
||||
#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
|
||||
|
||||
#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
|
||||
|
||||
#ifdef CUSTOM_FRONTEND_OPTIONS
|
||||
bool migrate = cfg.category_size("FrontendOptions") != 0;
|
||||
for (int i = 0; i < MENUPAGES; i++) {
|
||||
for (int j = 0; j < NUM_MENUROWS; j++) {
|
||||
CMenuScreenCustom::CMenuEntry &option = aScreens[i].m_aEntries[j];
|
||||
@@ -202,7 +428,13 @@ void LoadINISettings()
|
||||
// CFO check
|
||||
if (option.m_Action < MENUACTION_NOTHING && option.m_CFO->save) {
|
||||
// CFO only supports saving uint8 right now
|
||||
*option.m_CFO->value = CheckAndReadIniInt("FrontendOptions", option.m_CFO->save, *option.m_CFO->value);
|
||||
|
||||
// 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);
|
||||
|
||||
if (option.m_Action == MENUACTION_CFO_SELECT) {
|
||||
option.m_CFOSelect->lastSavedValue = option.m_CFOSelect->displayedValue = *option.m_CFO->value;
|
||||
}
|
||||
@@ -211,38 +443,67 @@ void LoadINISettings()
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef EXTENDED_COLOURFILTER
|
||||
CPostFX::Intensity = CheckAndReadIniFloat("CustomPipesValues", "PostFXIntensity", CPostFX::Intensity);
|
||||
#endif
|
||||
#ifdef EXTENDED_PIPELINES
|
||||
CustomPipes::VehicleShininess = CheckAndReadIniFloat("CustomPipesValues", "NeoVehicleShininess", CustomPipes::VehicleShininess);
|
||||
CustomPipes::VehicleSpecularity = CheckAndReadIniFloat("CustomPipesValues", "NeoVehicleSpecularity", CustomPipes::VehicleSpecularity);
|
||||
CustomPipes::RimlightMult = CheckAndReadIniFloat("CustomPipesValues", "RimlightMult", CustomPipes::RimlightMult);
|
||||
CustomPipes::LightmapMult = CheckAndReadIniFloat("CustomPipesValues", "LightmapMult", CustomPipes::LightmapMult);
|
||||
CustomPipes::GlossMult = CheckAndReadIniFloat("CustomPipesValues", "GlossMult", CustomPipes::GlossMult);
|
||||
#endif
|
||||
gBackfaceCulling = CheckAndReadIniInt("Rendering", "BackfaceCulling", gBackfaceCulling);
|
||||
|
||||
#ifdef PROPER_SCALING
|
||||
CDraw::ms_bProperScaling = CheckAndReadIniInt("Draw", "ProperScaling", CDraw::ms_bProperScaling);
|
||||
#endif
|
||||
#ifdef FIX_RADAR
|
||||
CDraw::ms_bFixRadar = CheckAndReadIniInt("Draw", "FixRadar", CDraw::ms_bFixRadar);
|
||||
#endif
|
||||
#ifdef FIX_SPRITES
|
||||
CDraw::ms_bFixSprites = CheckAndReadIniInt("Draw", "FixSprites", CDraw::ms_bFixSprites);
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
|
||||
void SaveINISettings()
|
||||
{
|
||||
bool changed = false;
|
||||
#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);
|
||||
|
||||
#ifdef DONT_TRUST_RECOGNIZED_JOYSTICKS
|
||||
if (strncmp(cfg.get("DetectJoystick", "JoystickName", "").c_str(), gSelectedJoystickName, strlen(gSelectedJoystickName)) != 0) {
|
||||
changed = true;
|
||||
cfg.set("DetectJoystick", "JoystickName", gSelectedJoystickName);
|
||||
}
|
||||
#ifdef EXTENDED_COLOURFILTER
|
||||
StoreIni("CustomPipesValues", "PostFXIntensity", CPostFX::Intensity);
|
||||
#endif
|
||||
#ifdef EXTENDED_PIPELINES
|
||||
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);
|
||||
#endif
|
||||
StoreIni("Rendering", "BackfaceCulling", gBackfaceCulling);
|
||||
|
||||
#ifdef PROPER_SCALING
|
||||
StoreIni("Draw", "ProperScaling", CDraw::ms_bProperScaling);
|
||||
#endif
|
||||
#ifdef FIX_RADAR
|
||||
StoreIni("Draw", "FixRadar", CDraw::ms_bFixRadar);
|
||||
#endif
|
||||
#ifdef FIX_SPRITES
|
||||
StoreIni("Draw", "FixSprites", CDraw::ms_bFixSprites);
|
||||
#endif
|
||||
#ifdef CUSTOM_FRONTEND_OPTIONS
|
||||
for (int i = 0; i < MENUPAGES; i++) {
|
||||
@@ -253,36 +514,13 @@ void SaveINISettings()
|
||||
|
||||
if (option.m_Action < MENUACTION_NOTHING && option.m_CFO->save) {
|
||||
// Beware: CFO only supports saving uint8 right now
|
||||
CheckAndSaveIniInt("FrontendOptions", option.m_CFO->save, *option.m_CFO->value, changed);
|
||||
StoreIni(option.m_CFO->saveCat, option.m_CFO->save, *option.m_CFO->value);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef EXTENDED_COLOURFILTER
|
||||
CheckAndSaveIniFloat("CustomPipesValues", "PostFXIntensity", CPostFX::Intensity, changed);
|
||||
#endif
|
||||
#ifdef EXTENDED_PIPELINES
|
||||
CheckAndSaveIniFloat("CustomPipesValues", "NeoVehicleShininess", CustomPipes::VehicleShininess, changed);
|
||||
CheckAndSaveIniFloat("CustomPipesValues", "NeoVehicleSpecularity", CustomPipes::VehicleSpecularity, changed);
|
||||
CheckAndSaveIniFloat("CustomPipesValues", "RimlightMult", CustomPipes::RimlightMult, changed);
|
||||
CheckAndSaveIniFloat("CustomPipesValues", "LightmapMult", CustomPipes::LightmapMult, changed);
|
||||
CheckAndSaveIniFloat("CustomPipesValues", "GlossMult", CustomPipes::GlossMult, changed);
|
||||
#endif
|
||||
CheckAndSaveIniInt("Rendering", "BackfaceCulling", gBackfaceCulling, changed);
|
||||
|
||||
#ifdef PROPER_SCALING
|
||||
CheckAndSaveIniInt("Draw", "ProperScaling", CDraw::ms_bProperScaling, changed);
|
||||
#endif
|
||||
#ifdef FIX_RADAR
|
||||
CheckAndSaveIniInt("Draw", "FixRadar", CDraw::ms_bFixRadar, changed);
|
||||
#endif
|
||||
#ifdef FIX_SPRITES
|
||||
CheckAndSaveIniInt("Draw", "FixSprites", CDraw::ms_bFixSprites, changed);
|
||||
#endif
|
||||
|
||||
if (changed)
|
||||
cfg.write_file("reLCS.ini");
|
||||
cfg.write_file("reLCS.ini");
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -767,7 +1005,7 @@ extern bool gbRenderDebugEnvMap;
|
||||
"A Date with Death (Toshiko Kasen)", "Cash in Kazuki's Chips (Toshiko Kasen)"
|
||||
};
|
||||
|
||||
missionEntry = DebugMenuAddVar("Debug", "Select mission", &nextMissionToSwitch, nil, 1, 0, 96, missions);
|
||||
missionEntry = DebugMenuAddVar("Debug", "Select mission", &nextMissionToSwitch, nil, 1, 0, ARRAY_SIZE(missions) - 1, missions);
|
||||
DebugMenuEntrySetWrap(missionEntry, true);
|
||||
DebugMenuAddCmd("Debug", "Start selected mission ", SwitchToMission);
|
||||
#endif
|
||||
@@ -787,9 +1025,13 @@ extern bool gbRenderDebugEnvMap;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef __MWERKS__
|
||||
#ifndef MASTER
|
||||
const int re3_buffsize = 1024;
|
||||
static char re3_buff[re3_buffsize];
|
||||
#endif
|
||||
|
||||
#ifndef MASTER
|
||||
void re3_assert(const char *expr, const char *filename, unsigned int lineno, const char *func)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
@@ -843,9 +1085,11 @@ void re3_assert(const char *expr, const char *filename, unsigned int lineno, con
|
||||
assert(false);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
void re3_debug(const char *format, ...)
|
||||
{
|
||||
#ifndef MASTER
|
||||
va_list va;
|
||||
va_start(va, format);
|
||||
#ifdef _WIN32
|
||||
@@ -857,8 +1101,10 @@ void re3_debug(const char *format, ...)
|
||||
|
||||
printf("%s", re3_buff);
|
||||
CDebug::DebugAddText(re3_buff);
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifndef MASTER
|
||||
void re3_trace(const char *filename, unsigned int lineno, const char *func, const char *format, ...)
|
||||
{
|
||||
char buff[re3_buffsize *2];
|
||||
@@ -898,6 +1144,8 @@ void re3_usererror(const char *format, ...)
|
||||
assert(false);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef VALIDATE_SAVE_SIZE
|
||||
int32 _saveBufCount;
|
||||
|
||||
Reference in New Issue
Block a user