From 29fb996b00bd5ab231fb6347d3dfe9d13ec7f652 Mon Sep 17 00:00:00 2001 From: withmorten Date: Sat, 23 Jan 2021 23:13:40 +0100 Subject: [PATCH] make building with Codewarrior 7 possible --- .gitignore | 6 +- codewarrior/Debug/gta-vc.txt | 0 codewarrior/Release/gta-vc.txt | 0 codewarrior/reVC.mcp | Bin 0 -> 266787 bytes src/animation/AnimBlendAssocGroup.cpp | 18 +- src/audio/AudioLogic.cpp | 6 +- src/audio/AudioManager.cpp | 2 +- src/audio/AudioManager.h | 2 +- src/audio/AudioSamples.h | 2 +- src/audio/PoliceRadio.cpp | 2 +- src/audio/sampman_miles.cpp | 3 +- src/audio/soundlist.h | 2 +- src/control/OnscreenTimer.cpp | 8 +- src/control/Pickups.h | 2 +- src/control/RoadBlocks.cpp | 4 +- src/control/Script.h | 272 +++++++++++++------------- src/control/Script5.cpp | 4 +- src/core/Cam.cpp | 4 +- src/core/CdStream.cpp | 11 +- src/core/ControllerConfig.cpp | 2 +- src/core/Frontend.cpp | 2 + src/core/General.h | 2 +- src/core/Placeable.h | 2 +- src/core/Radar.cpp | 11 +- src/core/Ropes.cpp | 4 +- src/core/Stats.h | 2 +- src/core/common.h | 60 +++++- src/core/config.h | 87 ++++++++ src/core/main.cpp | 21 +- src/core/re3.cpp | 10 + src/entities/Physical.cpp | 10 +- src/peds/PedAI.cpp | 2 +- src/peds/PedAttractor.cpp | 46 ++--- src/peds/PedAttractor.h | 36 ++-- src/render/Draw.cpp | 2 +- src/render/Draw.h | 2 +- src/render/Font.h | 2 + src/render/Glass.cpp | 2 +- src/render/Hud.cpp | 8 +- src/render/Instance.h | 2 +- src/render/SpecialFX.cpp | 2 +- src/skel/crossplatform.h | 6 +- src/skel/win/win.cpp | 12 +- src/text/Text.cpp | 10 +- src/vehicles/Automobile.cpp | 2 +- src/vehicles/Boat.cpp | 2 +- src/weapons/WeaponInfo.cpp | 94 ++++----- src/weapons/WeaponInfo.h | 1 - 48 files changed, 492 insertions(+), 300 deletions(-) create mode 100644 codewarrior/Debug/gta-vc.txt create mode 100644 codewarrior/Release/gta-vc.txt create mode 100644 codewarrior/reVC.mcp diff --git a/.gitignore b/.gitignore index 971fb957..3d2c6338 100644 --- a/.gitignore +++ b/.gitignore @@ -353,4 +353,8 @@ vendor/glew-2.1.0/ vendor/glfw-3.3.2.bin.WIN32/ vendor/glfw-3.3.2.bin.WIN64/ -sdk/ \ No newline at end of file +sdk/ + +codewarrior/reVC_Data/ +codewarrior/Release/ +codewarrior/Debug/ \ No newline at end of file diff --git a/codewarrior/Debug/gta-vc.txt b/codewarrior/Debug/gta-vc.txt new file mode 100644 index 00000000..e69de29b diff --git a/codewarrior/Release/gta-vc.txt b/codewarrior/Release/gta-vc.txt new file mode 100644 index 00000000..e69de29b diff --git a/codewarrior/reVC.mcp b/codewarrior/reVC.mcp new file mode 100644 index 0000000000000000000000000000000000000000..00b3fd74e745180b060df4b648905d0d0ae5a4dc GIT binary patch literal 266787 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

U721uqehjxQ<^#^ z%-OU5w>ca4?;BR`NV*=MQNwxnH3^OyH#FV9q38SjGFdq+aMT{;s5yNC^JKXRD^768 zx6B6VJo?Bytj}N1ysUYU-S~w<$5RgZ#jaj#YpjYW8Tjg`B_KVkI~k1-JbpL^nA}bgYv7LlIKWBxxkS?TLOL&v3eQv z9((y+{EF7v>VbC0?cYz`s@=1E|9;6kYC*NrX5Qggb~*c|=UDRWB+v2t_xGepoRM#W z=G#ENnT};W={KmyKIVJmX6n`c`H!*OOBOjCm#`f(7FQ3jyuggAj!fv9vuNjO_WD4v z$shToPMKxMGAYA8)Q3K1eW-DsY-c;_Rj58BY^DtQgz7`Bo1)~oE0|{^b!UO>j~eMw z^39NAamfDPo2JZ8*kBwJ7qG7u%5fE{KWz7ArsqrDDQEhS{eLXZnNY1a>(od-FZ-Wk zSB|p<SJ*^+=QT zlXf6Z^6U%W#+qePCUU&7jk2s4Li6~2W5lwo^OG!VyDi^M5z8{qaqP#|l#7&+o@@FH za#TNDmM6!xb$pS5e zcZN*cE@`&)X>7YgwXaVGc_Z#-8-5Za@355FiO1U4o$fx@#>mTEaAJxrFHc(y?c3Q} z%0r&Qc&f_b$%3b*y3b9Ze2pg#;{3#fZ03;@F^_Jx<=N(uV9n#g@Oe089)a+AH25a^ zJe<}%Qp4v_MdopZZ5}+;G%%hVBlp?-IaPAVyCNd5@njVx?@01)jmTSUTeskTV!oru z`?)PI<=LQ(EpH#nleEM4$h!Aj#MAF_j{SXR@$^gCN?E6@<+r*QRT _bTIfI$J3D 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

4cc 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 Ss$1R`*qhD{ST3iz<^K=&5`Xdl literal 0 HcmV?d00001 diff --git a/src/animation/AnimBlendAssocGroup.cpp b/src/animation/AnimBlendAssocGroup.cpp index ad6f54a9..935e7fd6 100644 --- a/src/animation/AnimBlendAssocGroup.cpp +++ b/src/animation/AnimBlendAssocGroup.cpp @@ -1,7 +1,11 @@ #include "common.h" #if defined _WIN32 && !defined __MINGW32__ +#if defined __MWERKS__ +#include +#else #include "ctype.h" +#endif #else #include #endif @@ -88,18 +92,18 @@ strcmpIgnoringDigits(const char *s1, const char *s2) if(c1) s1++; if(c2) s2++; if(c1 == '\0' && c2 == '\0') return true; -#if defined _WIN32 && !defined __MINGW32__ - if(__ascii_iswdigit(c1) && __ascii_iswdigit(c2)) -#else +#ifndef ASCII_STRCMP if(iswdigit(c1) && iswdigit(c2)) +#else + if(__ascii_iswdigit(c1) && __ascii_iswdigit(c2)) #endif continue; -#if defined _WIN32 && !defined __MINGW32__ - c1 = __ascii_toupper(c1); - c2 = __ascii_toupper(c2); -#else +#ifndef ASCII_STRCMP c1 = toupper(c1); c2 = toupper(c2); +#else + c1 = __ascii_toupper(c1); + c2 = __ascii_toupper(c2); #endif if(c1 && c2 && c1 != c2) diff --git a/src/audio/AudioLogic.cpp b/src/audio/AudioLogic.cpp index c58daaaf..ce543f33 100644 --- a/src/audio/AudioLogic.cpp +++ b/src/audio/AudioLogic.cpp @@ -1,4 +1,4 @@ -#include "common.h" +#include "common.h" #include "AudioManager.h" #include "audio_enums.h" @@ -43,7 +43,7 @@ #include "Script.h" #include "Wanted.h" -const int channels = ARRAY_SIZE(cAudioManager::m_asActiveSamples); +const int channels = ARRAY_SIZE(AudioManager.m_asActiveSamples); const int policeChannel = channels + 1; const int allChannels = channels + 2; @@ -8108,7 +8108,7 @@ cAudioManager::ProcessWaterCannon(int32) } //positon of arcade machines -CVector aVecExtraSoundPosition[] = { {-1042.546f, 88.794f, 11.324f}, {-1004.476f, 181.697f, 11.324f} }; +CVector aVecExtraSoundPosition[] = { CVector(-1042.546f, 88.794f, 11.324f), CVector(-1004.476f, 181.697f, 11.324f) }; void cAudioManager::ProcessExtraSounds() diff --git a/src/audio/AudioManager.cpp b/src/audio/AudioManager.cpp index 721a7acc..2304b4c4 100644 --- a/src/audio/AudioManager.cpp +++ b/src/audio/AudioManager.cpp @@ -14,7 +14,7 @@ cAudioManager AudioManager; -const int channels = ARRAY_SIZE(cAudioManager::m_asActiveSamples); +const int channels = ARRAY_SIZE(AudioManager.m_asActiveSamples); const int policeChannel = channels + 1; const int allChannels = channels + 2; diff --git a/src/audio/AudioManager.h b/src/audio/AudioManager.h index 376a7f60..14eacda5 100644 --- a/src/audio/AudioManager.h +++ b/src/audio/AudioManager.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once #include "audio_enums.h" #include "AudioCollision.h" diff --git a/src/audio/AudioSamples.h b/src/audio/AudioSamples.h index a68cf768..5c5d857d 100644 --- a/src/audio/AudioSamples.h +++ b/src/audio/AudioSamples.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once #include "common.h" diff --git a/src/audio/PoliceRadio.cpp b/src/audio/PoliceRadio.cpp index e174e587..227d27d0 100644 --- a/src/audio/PoliceRadio.cpp +++ b/src/audio/PoliceRadio.cpp @@ -15,7 +15,7 @@ #include "sampman.h" #include "Wanted.h" -const int channels = ARRAY_SIZE(cAudioManager::m_asActiveSamples); +const int channels = ARRAY_SIZE(AudioManager.m_asActiveSamples); const int policeChannel = channels + 1; struct tPoliceRadioZone { diff --git a/src/audio/sampman_miles.cpp b/src/audio/sampman_miles.cpp index 2d6a655e..36f230b4 100644 --- a/src/audio/sampman_miles.cpp +++ b/src/audio/sampman_miles.cpp @@ -1,3 +1,5 @@ +#include "common.h" + #ifdef AUDIO_MSS #include #include @@ -8,7 +10,6 @@ #include "eax-util.h" #include "mss.h" -#include "common.h" #include "sampman.h" #include "AudioManager.h" #include "MusicManager.h" diff --git a/src/audio/soundlist.h b/src/audio/soundlist.h index 98982f61..4d88590e 100644 --- a/src/audio/soundlist.h +++ b/src/audio/soundlist.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once enum eSound { diff --git a/src/control/OnscreenTimer.cpp b/src/control/OnscreenTimer.cpp index 08e6fa3f..53ed14c7 100644 --- a/src/control/OnscreenTimer.cpp +++ b/src/control/OnscreenTimer.cpp @@ -14,7 +14,7 @@ void COnscreenTimer::Init() { for(uint32 i = 0; i < NUMONSCREENCOUNTERS; i++) { m_sCounters[i].m_nCounterOffset = 0; - for(uint32 j = 0; j < ARRAY_SIZE(COnscreenCounterEntry::m_aCounterText); j++) { + for(uint32 j = 0; j < ARRAY_SIZE(m_sCounters[0].m_aCounterText); j++) { m_sCounters[i].m_aCounterText[j] = 0; } @@ -24,7 +24,7 @@ void COnscreenTimer::Init() { for(uint32 i = 0; i < NUMONSCREENCLOCKS; i++) { m_sClocks[i].m_nClockOffset = 0; - for(uint32 j = 0; j < ARRAY_SIZE(COnscreenTimerEntry::m_aClockText); j++) { + for(uint32 j = 0; j < ARRAY_SIZE(m_sClocks[0].m_aClockText); j++) { m_sClocks[i].m_aClockText[j] = 0; } @@ -92,7 +92,7 @@ void COnscreenTimer::AddCounter(uint32 offset, uint16 type, char* text, uint16 p m_sCounters[pos].m_nCounterOffset = offset; if(text) { - strncpy(m_sCounters[pos].m_aCounterText, text, ARRAY_SIZE(COnscreenCounterEntry::m_aCounterText)); + strncpy(m_sCounters[pos].m_aCounterText, text, ARRAY_SIZE(m_sCounters[0].m_aCounterText)); } else { m_sCounters[pos].m_aCounterText[0] = 0; } @@ -114,7 +114,7 @@ void COnscreenTimer::AddClock(uint32 offset, char* text, bool bGoingDown) { m_sClocks[i].m_nClockOffset = offset; m_sClocks[i].m_bClockGoingDown = bGoingDown; if(text) { - strncpy(m_sClocks[i].m_aClockText, text, ARRAY_SIZE(COnscreenTimerEntry::m_aClockText)); + strncpy(m_sClocks[i].m_aClockText, text, ARRAY_SIZE(m_sClocks[0].m_aClockText)); } else { m_sClocks[i].m_aClockText[0] = 0; } diff --git a/src/control/Pickups.h b/src/control/Pickups.h index af9503e0..0de7f827 100644 --- a/src/control/Pickups.h +++ b/src/control/Pickups.h @@ -144,7 +144,7 @@ public: class CPacManPickups { - friend CPacManPickup; + friend class CPacManPickup; static CPacManPickup aPMPickUps[NUMPACMANPICKUPS]; static CVector LastPickUpCoors; diff --git a/src/control/RoadBlocks.cpp b/src/control/RoadBlocks.cpp index f75b4f50..4f714e80 100644 --- a/src/control/RoadBlocks.cpp +++ b/src/control/RoadBlocks.cpp @@ -55,8 +55,8 @@ CRoadBlocks::Init(void) void CRoadBlocks::GenerateRoadBlockCopsForCar(CVehicle* pVehicle, int32 roadBlockType) { - static const CVector vecRoadBlockOffets[6] = { {-1.5, 1.8f, 0.0f}, {-1.5f, -1.8f, 0.0f}, {1.5f, 1.8f, 0.0f}, - {1.5f, -1.8f, 0.0f}, {-1.5f, 0.0f, 0.0f}, {1.5, 0.0, 0.0} }; + static const CVector vecRoadBlockOffets[6] = { CVector(-1.5, 1.8f, 0.0f), CVector(-1.5f, -1.8f, 0.0f), CVector(1.5f, 1.8f, 0.0f), + CVector(1.5f, -1.8f, 0.0f), CVector(-1.5f, 0.0f, 0.0f), CVector(1.5, 0.0, 0.0) }; CEntity* pEntityToAttack = (CEntity*)FindPlayerVehicle(); if (!pEntityToAttack) pEntityToAttack = (CEntity*)FindPlayerPed(); diff --git a/src/control/Script.h b/src/control/Script.h index a45e11cf..80c05363 100644 --- a/src/control/Script.h +++ b/src/control/Script.h @@ -248,6 +248,142 @@ struct tBuildingSwap }; +enum { + MAX_STACK_DEPTH = 6, + NUM_LOCAL_VARS = 16, + NUM_TIMERS = 2 +}; + +class CRunningScript +{ + enum { + ANDOR_NONE = 0, + ANDS_1 = 1, + ANDS_2, + ANDS_3, + ANDS_4, + ANDS_5, + ANDS_6, + ANDS_7, + ANDS_8, + ORS_1 = 21, + ORS_2, + ORS_3, + ORS_4, + ORS_5, + ORS_6, + ORS_7, + ORS_8 + }; + +public: + CRunningScript* next; + CRunningScript* prev; + char m_abScriptName[8]; + uint32 m_nIp; + uint32 m_anStack[MAX_STACK_DEPTH]; + uint16 m_nStackPointer; + int32 m_anLocalVariables[NUM_LOCAL_VARS + NUM_TIMERS]; + bool m_bIsActive; + bool m_bCondResult; + bool m_bIsMissionScript; + bool m_bSkipWakeTime; + uint32 m_nWakeTime; + uint16 m_nAndOrState; + bool m_bNotFlag; + bool m_bDeatharrestEnabled; + bool m_bDeatharrestExecuted; + bool m_bMissionFlag; + +public: + void SetIP(uint32 ip) { m_nIp = ip; } + CRunningScript* GetNext() const { return next; } + + void Save(uint8*& buf); + void Load(uint8*& buf); + + void UpdateTimers(float timeStep) { + m_anLocalVariables[NUM_LOCAL_VARS] += timeStep; + m_anLocalVariables[NUM_LOCAL_VARS + 1] += timeStep; + } + + void Init(); + void Process(); + + void RemoveScriptFromList(CRunningScript**); + void AddScriptToList(CRunningScript**); + + static const uint32 nSaveStructSize; + + void CollectParameters(uint32*, int16); + int32 CollectNextParameterWithoutIncreasingPC(uint32); + int32* GetPointerToScriptVariable(uint32*, int16); + void StoreParameters(uint32*, int16); + + int8 ProcessOneCommand(); + void DoDeatharrestCheck(); + void UpdateCompareFlag(bool); + int16 GetPadState(uint16, uint16); + + int8 ProcessCommands0To99(int32); + int8 ProcessCommands100To199(int32); + int8 ProcessCommands200To299(int32); + int8 ProcessCommands300To399(int32); + int8 ProcessCommands400To499(int32); + int8 ProcessCommands500To599(int32); + int8 ProcessCommands600To699(int32); + int8 ProcessCommands700To799(int32); + int8 ProcessCommands800To899(int32); + int8 ProcessCommands900To999(int32); + int8 ProcessCommands1000To1099(int32); + int8 ProcessCommands1100To1199(int32); + int8 ProcessCommands1200To1299(int32); + int8 ProcessCommands1300To1399(int32); + int8 ProcessCommands1400To1499(int32); + + void LocatePlayerCommand(int32, uint32*); + void LocatePlayerCharCommand(int32, uint32*); + void LocatePlayerCarCommand(int32, uint32*); + void LocateCharCommand(int32, uint32*); + void LocateCharCharCommand(int32, uint32*); + void LocateCharCarCommand(int32, uint32*); + void LocateCharObjectCommand(int32, uint32*); + void LocateCarCommand(int32, uint32*); + void LocateSniperBulletCommand(int32, uint32*); + void PlayerInAreaCheckCommand(int32, uint32*); + void PlayerInAngledAreaCheckCommand(int32, uint32*); + void CharInAreaCheckCommand(int32, uint32*); + void CarInAreaCheckCommand(int32, uint32*); + void LocateObjectCommand(int32, uint32*); + void ObjectInAreaCheckCommand(int32, uint32*); + +#ifdef GTA_SCRIPT_COLLECTIVE + void LocateCollectiveCommand(int32, uint32*); + void LocateCollectiveCharCommand(int32, uint32*); + void LocateCollectiveCarCommand(int32, uint32*); + void LocateCollectivePlayerCommand(int32, uint32*); + void CollectiveInAreaCheckCommand(int32, uint32*); +#endif + +#ifdef MISSION_REPLAY + bool CanAllowMissionReplay(); +#endif + +#ifdef USE_ADVANCED_SCRIPT_DEBUG_OUTPUT + int CollectParameterForDebug(char* buf, bool& var); + void GetStoredParameterForDebug(char* buf); +#endif + + float LimitAngleOnCircle(float angle) { return angle < 0.0f ? angle + 360.0f : angle; } + + bool ThisIsAValidRandomCop(uint32 mi, int cop, int swat, int fbi, int army, int miami); + bool ThisIsAValidRandomPed(uint32 pedtype, int civ, int gang, int criminal); + + bool CheckDamagedWeaponType(int32 actual, int32 type); + +}; + + enum { VAR_LOCAL = 1, VAR_GLOBAL = 2, @@ -441,142 +577,6 @@ public: }; - -enum { - MAX_STACK_DEPTH = 6, - NUM_LOCAL_VARS = 16, - NUM_TIMERS = 2 -}; - -class CRunningScript -{ - enum { - ANDOR_NONE = 0, - ANDS_1 = 1, - ANDS_2, - ANDS_3, - ANDS_4, - ANDS_5, - ANDS_6, - ANDS_7, - ANDS_8, - ORS_1 = 21, - ORS_2, - ORS_3, - ORS_4, - ORS_5, - ORS_6, - ORS_7, - ORS_8 - }; - -public: - CRunningScript* next; - CRunningScript* prev; - char m_abScriptName[8]; - uint32 m_nIp; - uint32 m_anStack[MAX_STACK_DEPTH]; - uint16 m_nStackPointer; - int32 m_anLocalVariables[NUM_LOCAL_VARS + NUM_TIMERS]; - bool m_bIsActive; - bool m_bCondResult; - bool m_bIsMissionScript; - bool m_bSkipWakeTime; - uint32 m_nWakeTime; - uint16 m_nAndOrState; - bool m_bNotFlag; - bool m_bDeatharrestEnabled; - bool m_bDeatharrestExecuted; - bool m_bMissionFlag; - -public: - void SetIP(uint32 ip) { m_nIp = ip; } - CRunningScript* GetNext() const { return next; } - - void Save(uint8*& buf); - void Load(uint8*& buf); - - void UpdateTimers(float timeStep) { - m_anLocalVariables[NUM_LOCAL_VARS] += timeStep; - m_anLocalVariables[NUM_LOCAL_VARS + 1] += timeStep; - } - - void Init(); - void Process(); - - void RemoveScriptFromList(CRunningScript**); - void AddScriptToList(CRunningScript**); - - static const uint32 nSaveStructSize; - - void CollectParameters(uint32*, int16); - int32 CollectNextParameterWithoutIncreasingPC(uint32); - int32* GetPointerToScriptVariable(uint32*, int16); - void StoreParameters(uint32*, int16); - - int8 ProcessOneCommand(); - void DoDeatharrestCheck(); - void UpdateCompareFlag(bool); - int16 GetPadState(uint16, uint16); - - int8 ProcessCommands0To99(int32); - int8 ProcessCommands100To199(int32); - int8 ProcessCommands200To299(int32); - int8 ProcessCommands300To399(int32); - int8 ProcessCommands400To499(int32); - int8 ProcessCommands500To599(int32); - int8 ProcessCommands600To699(int32); - int8 ProcessCommands700To799(int32); - int8 ProcessCommands800To899(int32); - int8 ProcessCommands900To999(int32); - int8 ProcessCommands1000To1099(int32); - int8 ProcessCommands1100To1199(int32); - int8 ProcessCommands1200To1299(int32); - int8 ProcessCommands1300To1399(int32); - int8 ProcessCommands1400To1499(int32); - - void LocatePlayerCommand(int32, uint32*); - void LocatePlayerCharCommand(int32, uint32*); - void LocatePlayerCarCommand(int32, uint32*); - void LocateCharCommand(int32, uint32*); - void LocateCharCharCommand(int32, uint32*); - void LocateCharCarCommand(int32, uint32*); - void LocateCharObjectCommand(int32, uint32*); - void LocateCarCommand(int32, uint32*); - void LocateSniperBulletCommand(int32, uint32*); - void PlayerInAreaCheckCommand(int32, uint32*); - void PlayerInAngledAreaCheckCommand(int32, uint32*); - void CharInAreaCheckCommand(int32, uint32*); - void CarInAreaCheckCommand(int32, uint32*); - void LocateObjectCommand(int32, uint32*); - void ObjectInAreaCheckCommand(int32, uint32*); - -#ifdef GTA_SCRIPT_COLLECTIVE - void LocateCollectiveCommand(int32, uint32*); - void LocateCollectiveCharCommand(int32, uint32*); - void LocateCollectiveCarCommand(int32, uint32*); - void LocateCollectivePlayerCommand(int32, uint32*); - void CollectiveInAreaCheckCommand(int32, uint32*); -#endif - -#ifdef MISSION_REPLAY - bool CanAllowMissionReplay(); -#endif - -#ifdef USE_ADVANCED_SCRIPT_DEBUG_OUTPUT - int CollectParameterForDebug(char* buf, bool& var); - void GetStoredParameterForDebug(char* buf); -#endif - - float LimitAngleOnCircle(float angle) { return angle < 0.0f ? angle + 360.0f : angle; } - - bool ThisIsAValidRandomCop(uint32 mi, int cop, int swat, int fbi, int army, int miami); - bool ThisIsAValidRandomPed(uint32 pedtype, int civ, int gang, int criminal); - - bool CheckDamagedWeaponType(int32 actual, int32 type); - -}; - #ifdef USE_DEBUG_SCRIPT_LOADER extern int scriptToLoad; #endif diff --git a/src/control/Script5.cpp b/src/control/Script5.cpp index b03ff49d..cc70a170 100644 --- a/src/control/Script5.cpp +++ b/src/control/Script5.cpp @@ -2618,7 +2618,7 @@ bool CTheScripts::IsPedStopped(CPed* pPed) { if (pPed->InVehicle()) return IsVehicleStopped(pPed->m_pMyVehicle); - return (pPed->m_nMoveState == eMoveState::PEDMOVE_NONE || pPed->m_nMoveState == eMoveState::PEDMOVE_STILL) && + return (pPed->m_nMoveState == PEDMOVE_NONE || pPed->m_nMoveState == PEDMOVE_STILL) && !pPed->bIsInTheAir && !pPed->bIsLanding && pPed->bIsStanding && pPed->m_vecAnimMoveDelta.x == 0.0f && pPed->m_vecAnimMoveDelta.y == 0.0f; } @@ -2632,7 +2632,7 @@ bool CTheScripts::IsPlayerStopped(CPlayerInfo* pPlayer) RpAnimBlendClumpGetAssociation(pPed->GetClump(), ANIM_JUMP_LAUNCH) || RpAnimBlendClumpGetAssociation(pPed->GetClump(), ANIM_JUMP_GLIDE)) return false; - return (pPed->m_nMoveState == eMoveState::PEDMOVE_NONE || pPed->m_nMoveState == eMoveState::PEDMOVE_STILL) && + return (pPed->m_nMoveState == PEDMOVE_NONE || pPed->m_nMoveState == PEDMOVE_STILL) && !pPed->bIsInTheAir && !pPed->bIsLanding && pPed->bIsStanding && pPed->m_vecAnimMoveDelta.x == 0.0f && pPed->m_vecAnimMoveDelta.y == 0.0f; } diff --git a/src/core/Cam.cpp b/src/core/Cam.cpp index 26232100..fdfe2275 100644 --- a/src/core/Cam.cpp +++ b/src/core/Cam.cpp @@ -947,7 +947,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; @@ -4029,7 +4029,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]; diff --git a/src/core/CdStream.cpp b/src/core/CdStream.cpp index 4bb31ea4..da85a238 100644 --- a/src/core/CdStream.cpp +++ b/src/core/CdStream.cpp @@ -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"); diff --git a/src/core/ControllerConfig.cpp b/src/core/ControllerConfig.cpp index fcc4503a..7e5e4c16 100644 --- a/src/core/ControllerConfig.cpp +++ b/src/core/ControllerConfig.cpp @@ -541,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; diff --git a/src/core/Frontend.cpp b/src/core/Frontend.cpp index 0a9db5a4..5fe3d6be 100644 --- a/src/core/Frontend.cpp +++ b/src/core/Frontend.cpp @@ -986,7 +986,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 diff --git a/src/core/General.h b/src/core/General.h index 1ea7f2bd..2f205c39 100644 --- a/src/core/General.h +++ b/src/core/General.h @@ -133,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)) diff --git a/src/core/Placeable.h b/src/core/Placeable.h index 22f7583c..b0f9a15a 100644 --- a/src/core/Placeable.h +++ b/src/core/Placeable.h @@ -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; diff --git a/src/core/Radar.cpp b/src/core/Radar.cpp index 36fb156d..8cd86344 100644 --- a/src/core/Radar.cpp +++ b/src/core/Radar.cpp @@ -1,3 +1,6 @@ +#if (!defined(GTA_PS2_STUFF) && defined(RWLIBS)) || defined(__MWERKS__) +#define WITHD3D +#endif #include "config.h" #include "common.h" @@ -332,10 +335,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; diff --git a/src/core/Ropes.cpp b/src/core/Ropes.cpp index dbae9ee3..ffce36f9 100644 --- a/src/core/Ropes.cpp +++ b/src/core/Ropes.cpp @@ -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]; diff --git a/src/core/Stats.h b/src/core/Stats.h index 7fa69396..243ff0ec 100644 --- a/src/core/Stats.h +++ b/src/core/Stats.h @@ -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; diff --git a/src/core/common.h b/src/core/common.h index 7fdbdf69..75ba8863 100644 --- a/src/core/common.h +++ b/src/core/common.h @@ -7,10 +7,19 @@ #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 #include #include +#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 @@ -29,9 +38,9 @@ #define WITH_D3D // librw includes d3d9 itself via this right now #else #ifndef USE_D3D9 - #include + #include #else - #include + #include #endif #endif #endif @@ -79,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; @@ -92,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 @@ -276,6 +290,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) @@ -305,14 +335,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) @@ -336,6 +386,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; @@ -449,6 +500,7 @@ _TWEEKCLASS(CTweakUInt32, uint32); _TWEEKCLASS(CTweakFloat, float); #undef _TWEEKCLASS +#endif #ifdef VALIDATE_SAVE_SIZE extern int32 _saveBufCount; diff --git a/src/core/config.h b/src/core/config.h index ef282b25..7e039ef6 100644 --- a/src/core/config.h +++ b/src/core/config.h @@ -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, @@ -401,3 +404,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 diff --git a/src/core/main.cpp b/src/core/main.cpp index 1798a60f..9a0308dd 100644 --- a/src/core/main.cpp +++ b/src/core/main.cpp @@ -137,6 +137,24 @@ bool gbNewRenderer; 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() { @@ -800,6 +818,7 @@ ProcessSlowMode(void) float FramesPerSecondCounter; int32 FrameSamples; +#ifndef MASTER struct tZonePrint { char name[11]; @@ -830,8 +849,6 @@ tZonePrint ZonePrint[] = { "WASHINBTM", "AC", CRect(-255.0f, -1200.0f, 500.0f, -1690.0f)} }; -#ifndef MASTER - void PrintMemoryUsage(void) { diff --git a/src/core/re3.cpp b/src/core/re3.cpp index 13f75dd9..d0006fd3 100644 --- a/src/core/re3.cpp +++ b/src/core/re3.cpp @@ -1020,9 +1020,13 @@ extern bool gbRenderWorld2; } #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 @@ -1076,9 +1080,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 @@ -1090,8 +1096,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]; @@ -1131,6 +1139,8 @@ void re3_usererror(const char *format, ...) assert(false); #endif } +#endif +#endif #ifdef VALIDATE_SAVE_SIZE int32 _saveBufCount; diff --git a/src/entities/Physical.cpp b/src/entities/Physical.cpp index 73a6570a..b897a6e2 100644 --- a/src/entities/Physical.cpp +++ b/src/entities/Physical.cpp @@ -1265,7 +1265,7 @@ CPhysical::ProcessShiftSectorList(CPtrList *lists) int numCollisions; int mostColliding; CColPoint colpoints[MAX_COLLISION_POINTS]; - CVector shift = { 0.0f, 0.0f, 0.0f }; + CVector shift = CVector(0.0f, 0.0f, 0.0f); bool doShift = false; CEntity *boat = nil; @@ -1724,8 +1724,8 @@ CPhysical::ProcessCollisionSectorList(CPtrList *lists) if(numCollisions <= 0) continue; - CVector moveSpeed = { 0.0f, 0.0f, 0.0f }; - CVector turnSpeed = { 0.0f, 0.0f, 0.0f }; + CVector moveSpeed = CVector(0.0f, 0.0f, 0.0f); + CVector turnSpeed = CVector(0.0f, 0.0f, 0.0f); float maxImpulseA = 0.0f; numResponses = 0; if(A->bHasContacted){ @@ -2209,8 +2209,8 @@ CPhysical::ProcessCollision(void) }else if(IsObject() && ((CObject*)this)->ObjectCreatedBy != TEMP_OBJECT){ int responsecase = ((CObject*)this)->m_nSpecialCollisionResponseCases; if(responsecase == COLLRESPONSE_LAMPOST){ - CVector speedUp = { 0.0f, 0.0f, 0.0f }; - CVector speedDown = { 0.0f, 0.0f, 0.0f }; + CVector speedUp = CVector(0.0f, 0.0f, 0.0f); + CVector speedDown = CVector(0.0f, 0.0f, 0.0f); CColModel *colModel = GetColModel(); speedUp.z = colModel->boundingBox.max.z; speedDown.z = colModel->boundingBox.min.z; diff --git a/src/peds/PedAI.cpp b/src/peds/PedAI.cpp index a0769b9c..c6415c7e 100644 --- a/src/peds/PedAI.cpp +++ b/src/peds/PedAI.cpp @@ -4093,7 +4093,7 @@ CPed::SetExitBoat(CVehicle *boat) RemoveInCarAnims(); CColModel* boatCol = boat->GetColModel(); if (boat->IsUpsideDown()) { - newPos = { 0.0f, 0.0f, boatCol->boundingBox.min.z }; + newPos = CVector(0.0f, 0.0f, boatCol->boundingBox.min.z); newPos = boat->GetMatrix() * newPos; newPos.z += 1.0f; m_vehDoor = CAR_DOOR_RF; diff --git a/src/peds/PedAttractor.cpp b/src/peds/PedAttractor.cpp index 22e0e779..de587270 100644 --- a/src/peds/PedAttractor.cpp +++ b/src/peds/PedAttractor.cpp @@ -104,7 +104,7 @@ bool CVehicleToEffect::HasThisEffect(C2dEffect* pEffect) const const C2dEffect* CPedAttractorManager::GetEffectForIceCreamVan(CVehicle* pVehicle, const CVector& pos) { if (!vVehicleToEffect.empty()) { - for (std::vector::const_iterator assoc = vVehicleToEffect.cbegin(); assoc != vVehicleToEffect.cend(); ++assoc) { + for (std::vector::const_iterator assoc = vVehicleToEffect.begin(); assoc != vVehicleToEffect.end(); ++assoc) { if (assoc->GetVehicle() == pVehicle) return assoc->ChooseEffect(pos); } @@ -120,7 +120,7 @@ CVehicle* CPedAttractorManager::GetIceCreamVanForEffect(C2dEffect* pEffect) { if (vVehicleToEffect.empty()) return nil; - for (std::vector::const_iterator assoc = vVehicleToEffect.cbegin(); assoc != vVehicleToEffect.cend(); ++assoc) { + for (std::vector::const_iterator assoc = vVehicleToEffect.begin(); assoc != vVehicleToEffect.end(); ++assoc) { if (assoc->HasThisEffect(pEffect)) return assoc->GetVehicle(); } @@ -131,7 +131,7 @@ const CPedAttractor* CPedAttractorManager::FindAssociatedAttractor(const C2dEffe { if (vecAttractors.empty()) return nil; - for (std::vector::const_iterator attractor = vecAttractors.cbegin(); attractor != vecAttractors.cend(); ++attractor) { + for (std::vector::const_iterator attractor = vecAttractors.begin(); attractor != vecAttractors.end(); ++attractor) { if ((*attractor)->GetEffect() == pEffect) return *attractor; } @@ -145,7 +145,7 @@ void CPedAttractorManager::RemoveIceCreamVanEffects(C2dEffect* pEffect) return; if (vVehicleToEffect.empty()) return; - for (std::vector::const_iterator assoc = vVehicleToEffect.cbegin(); assoc != vVehicleToEffect.cend();) { + for (std::vector::iterator assoc = vVehicleToEffect.begin(); assoc != vVehicleToEffect.end();) { if (assoc->GetVehicle() != pVehicle) { ++assoc; continue; @@ -229,7 +229,7 @@ CVector CPedShelterAttractor::GetDisplacement(int32 qid) const float fRandomOffset = CGeneral::GetRandomNumberInRange(0.0f, 2.0f); CVector vecDisplacement(fRandomOffset * Sin(fRandomAngle), fRandomOffset * Cos(fRandomAngle), 0.0f); bool close = false; - for (std::vector::const_iterator v = ms_displacements.cbegin(); v != ms_displacements.cend(); ++v) { + for (std::vector::const_iterator v = ms_displacements.begin(); v != ms_displacements.end(); ++v) { if ((*v - vecDisplacement).Magnitude() < 1.0f) { close = true; break; @@ -265,7 +265,7 @@ void CPedShelterAttractor::ComputeAttractHeading(int32 qid, float& heading) cons bool CPedAttractor::RegisterPed(CPed* pPed) { - for (std::vector::const_iterator pPedIt = vApproachingQueue.cbegin(); pPedIt != vApproachingQueue.cend(); ++pPedIt) { + for (std::vector::iterator pPedIt = vApproachingQueue.begin(); pPedIt != vApproachingQueue.end(); ++pPedIt) { if (*pPedIt == pPed) { vApproachingQueue.erase(pPedIt); return false; @@ -318,7 +318,7 @@ static bool IsPedUsingAttractorOfThisType(int8 type, CPed* pPed) bool CPedAttractor::DeRegisterPed(CPed* pPed) { - for (std::vector::const_iterator pPedIt = vApproachingQueue.cbegin(); pPedIt != vApproachingQueue.cend(); ++pPedIt) { + for (std::vector::iterator pPedIt = vApproachingQueue.begin(); pPedIt != vApproachingQueue.end(); ++pPedIt) { if (*pPedIt != pPed) continue; pPed->m_attractor = nil; @@ -340,12 +340,12 @@ bool CPedAttractor::DeRegisterPed(CPed* pPed) bool CPedAttractor::BroadcastArrival(CPed* pPed) { - for (std::vector::const_iterator pPedIt = vWaitingQueue.cbegin(); pPedIt != vWaitingQueue.cend(); ++pPedIt) { + for (std::vector::const_iterator pPedIt = vWaitingQueue.begin(); pPedIt != vWaitingQueue.end(); ++pPedIt) { if (*pPedIt == pPed) return false; } vWaitingQueue.push_back(pPed); - for (std::vector::const_iterator pPedIt = vApproachingQueue.cbegin(); pPedIt != vApproachingQueue.cend(); ++pPedIt) { + for (std::vector::iterator pPedIt = vApproachingQueue.begin(); pPedIt != vApproachingQueue.end(); ++pPedIt) { if (*pPedIt == pPed) { vApproachingQueue.erase(pPedIt); break; @@ -400,7 +400,7 @@ bool CPedAttractor::BroadcastDeparture(CPed* pPed) pPed->SetWanderPath(CGeneral::GetNodeHeadingFromVector(-vecQueueDir.y, -vecQueueDir.x)); UpdatePedStateOnDeparture(pPed); } - vWaitingQueue.erase(vWaitingQueue.cbegin() + qid); + vWaitingQueue.erase(vWaitingQueue.begin() + qid); for (std::vector::iterator pPedIt = vApproachingQueue.begin(); pPedIt != vApproachingQueue.end(); ++pPedIt) { CPed* pPed = *pPedIt; CVector pos; @@ -441,7 +441,7 @@ bool CPedShelterAttractor::BroadcastDeparture(CPed* pPed) pPed->SetWanderPath(CGeneral::GetNodeHeadingFromVector(-vecQueueDir.y, -vecQueueDir.x)); UpdatePedStateOnDeparture(pPed); } - vWaitingQueue.erase(vWaitingQueue.cbegin() + qid); + vWaitingQueue.erase(vWaitingQueue.begin() + qid); for (std::vector::iterator pPedIt = vApproachingQueue.begin(); pPedIt != vApproachingQueue.end(); ++pPedIt) { CPed* pPed = *pPedIt; CVector pos; @@ -458,11 +458,11 @@ bool CPedShelterAttractor::BroadcastDeparture(CPed* pPed) bool CPedAttractor::IsRegisteredWithPed(CPed* pPed) const { - for (std::vector::const_iterator pPedIt = vWaitingQueue.cbegin(); pPedIt != vWaitingQueue.cend(); ++pPedIt) { + for (std::vector::const_iterator pPedIt = vWaitingQueue.begin(); pPedIt != vWaitingQueue.end(); ++pPedIt) { if (*pPedIt == pPed) return true; } - for (std::vector::const_iterator pPedIt = vApproachingQueue.cbegin(); pPedIt != vApproachingQueue.cend(); ++pPedIt) { + for (std::vector::const_iterator pPedIt = vApproachingQueue.begin(); pPedIt != vApproachingQueue.end(); ++pPedIt) { if (*pPedIt == pPed) { return true; } @@ -472,7 +472,7 @@ bool CPedAttractor::IsRegisteredWithPed(CPed* pPed) const bool CPedAttractor::IsInQueue(CPed* pPed) const { - for (std::vector::const_iterator pPedIt = vWaitingQueue.cbegin(); pPedIt != vWaitingQueue.cend(); ++pPedIt) { + for (std::vector::const_iterator pPedIt = vWaitingQueue.begin(); pPedIt != vWaitingQueue.end(); ++pPedIt) { if (*pPedIt == pPed) return true; } @@ -640,7 +640,7 @@ void CPedAttractorManager::ComputeEffectUseDir(const C2dEffect* pEffect, const C CPedAttractor* CPedAttractorManager::RegisterPed(CPed* pPed, C2dEffect* pEffect, const CMatrix& matrix, std::vector& vecAttractors) { CPedAttractor* pRegisteredAttractor = nil; - for (std::vector::const_iterator pAttractorIt = vecAttractors.cbegin(); pAttractorIt != vecAttractors.cend(); ++pAttractorIt) { + for (std::vector::const_iterator pAttractorIt = vecAttractors.begin(); pAttractorIt != vecAttractors.end(); ++pAttractorIt) { CPedAttractor* pAttractor = *pAttractorIt; CVector vEffectPos; ComputeEffectPos(pAttractor->GetEffect(), matrix, vEffectPos); @@ -676,7 +676,7 @@ bool CPedAttractorManager::DeRegisterPed(CPed* pPed, CPedAttractor* pAttractor, if (!pAttractor) return false; CPedAttractor* pFound = nil; - for (std::vector::const_iterator pAttractorIt = vecAttractors.cbegin(); pAttractorIt != vecAttractors.cend(); ++pAttractorIt) { + for (std::vector::const_iterator pAttractorIt = vecAttractors.begin(); pAttractorIt != vecAttractors.end(); ++pAttractorIt) { if (*pAttractorIt == pAttractor) { pFound = *pAttractorIt; break; @@ -687,7 +687,7 @@ bool CPedAttractorManager::DeRegisterPed(CPed* pPed, CPedAttractor* pAttractor, pFound->DeRegisterPed(pPed); if (pFound->GetNoOfRegisteredPeds() != 0) return true; - for (std::vector::const_iterator pAttractorIt = vecAttractors.cbegin(); pAttractorIt != vecAttractors.cend(); ++pAttractorIt) { + for (std::vector::iterator pAttractorIt = vecAttractors.begin(); pAttractorIt != vecAttractors.end(); ++pAttractorIt) { if (*pAttractorIt == pAttractor) { vecAttractors.erase(pAttractorIt); break; @@ -702,7 +702,7 @@ bool CPedAttractorManager::BroadcastArrival(CPed* pPed, CPedAttractor* pAttracto if (!pAttractor) return false; CPedAttractor* pFound = nil; - for (std::vector::const_iterator pAttractorIt = vecAttractors.cbegin(); pAttractorIt != vecAttractors.cend(); ++pAttractorIt) { + for (std::vector::const_iterator pAttractorIt = vecAttractors.begin(); pAttractorIt != vecAttractors.end(); ++pAttractorIt) { if (*pAttractorIt == pAttractor) { pFound = *pAttractorIt; break; @@ -719,7 +719,7 @@ bool CPedAttractorManager::BroadcastDeparture(CPed* pPed, CPedAttractor* pAttrac if (!pAttractor) return false; CPedAttractor* pFound = nil; - for (std::vector::const_iterator pAttractorIt = vecAttractors.cbegin(); pAttractorIt != vecAttractors.cend(); ++pAttractorIt) { + for (std::vector::const_iterator pAttractorIt = vecAttractors.begin(); pAttractorIt != vecAttractors.end(); ++pAttractorIt) { if (*pAttractorIt == pAttractor) { pFound = *pAttractorIt; break; @@ -730,7 +730,7 @@ bool CPedAttractorManager::BroadcastDeparture(CPed* pPed, CPedAttractor* pAttrac pFound->DeRegisterPed(pPed); if (pFound->GetNoOfRegisteredPeds() != 0) return true; - for (std::vector::const_iterator pAttractorIt = vecAttractors.cbegin(); pAttractorIt != vecAttractors.cend(); ++pAttractorIt) { + for (std::vector::iterator pAttractorIt = vecAttractors.begin(); pAttractorIt != vecAttractors.end(); ++pAttractorIt) { if (*pAttractorIt == pAttractor) { vecAttractors.erase(pAttractorIt); break; @@ -744,7 +744,7 @@ bool CPedAttractorManager::IsInQueue(CPed* pPed, CPedAttractor* pAttractor, std: { if (!pAttractor) return false; - for (std::vector::const_iterator pAttractorIt = vecAttractors.cbegin(); pAttractorIt != vecAttractors.cend(); ++pAttractorIt) { + for (std::vector::const_iterator pAttractorIt = vecAttractors.begin(); pAttractorIt != vecAttractors.end(); ++pAttractorIt) { if (*pAttractorIt == pAttractor) { return (*pAttractorIt)->IsInQueue(pPed); } @@ -756,7 +756,7 @@ bool CPedAttractorManager::IsAtHeadOfQueue(CPed* pPed, CPedAttractor* pAttractor { if (!pAttractor) return false; - for (std::vector::const_iterator pAttractorIt = vecAttractors.cbegin(); pAttractorIt != vecAttractors.cend(); ++pAttractorIt) { + for (std::vector::const_iterator pAttractorIt = vecAttractors.begin(); pAttractorIt != vecAttractors.end(); ++pAttractorIt) { if (*pAttractorIt == pAttractor) { return (*pAttractorIt)->IsAtHeadOfQueue(pPed); } @@ -766,7 +766,7 @@ bool CPedAttractorManager::IsAtHeadOfQueue(CPed* pPed, CPedAttractor* pAttractor bool CPedAttractorManager::IsPedRegistered(CPed* pPed, std::vector& vecAttractors) { - for (std::vector::const_iterator pAttractorIt = vecAttractors.cbegin(); pAttractorIt != vecAttractors.cend(); ++pAttractorIt) { + for (std::vector::const_iterator pAttractorIt = vecAttractors.begin(); pAttractorIt != vecAttractors.end(); ++pAttractorIt) { if ((*pAttractorIt)->IsRegisteredWithPed(pPed)) return true; } diff --git a/src/peds/PedAttractor.h b/src/peds/PedAttractor.h index 85b4327b..c55e4028 100644 --- a/src/peds/PedAttractor.h +++ b/src/peds/PedAttractor.h @@ -126,8 +126,8 @@ public: class CPedAtmAttractor : public CPedAttractor { public: - virtual ePedAttractorType GetType() const override { return ATTRACTOR_ATM; }; - virtual void UpdatePedStateOnDeparture(CPed* pPed) const override; + virtual ePedAttractorType GetType() const { return ATTRACTOR_ATM; }; + virtual void UpdatePedStateOnDeparture(CPed* pPed) const; CPedAtmAttractor(C2dEffect* pEffect, const CMatrix& matrix, int32 maxpeds, float qdist, float waitTime, float approachTime, float distance, float headingdiff, float posdisp, float headdisp) : CPedAttractor(pEffect, matrix, maxpeds, qdist, waitTime, approachTime, distance, headingdiff, posdisp, headdisp) {}; @@ -136,9 +136,9 @@ public: class CPedIceCreamAttractor : public CPedAttractor { public: - virtual ~CPedIceCreamAttractor() override { GetPedAttractorManager()->RemoveIceCreamVanEffects(p2dEffect); } - virtual ePedAttractorType GetType() const override { return ATTRACTOR_ICECREAM; } - virtual void UpdatePedStateOnDeparture(CPed* pPed) const override {}; + virtual ~CPedIceCreamAttractor() { GetPedAttractorManager()->RemoveIceCreamVanEffects(p2dEffect); } + virtual ePedAttractorType GetType() const { return ATTRACTOR_ICECREAM; } + virtual void UpdatePedStateOnDeparture(CPed* pPed) const {}; CPedIceCreamAttractor(C2dEffect* pEffect, const CMatrix& matrix, int32 maxpeds, float qdist, float waitTime, float approachTime, float distance, float headingdiff, float posdisp, float headdisp) : CPedAttractor(pEffect, matrix, maxpeds, qdist, waitTime, approachTime, distance, headingdiff, posdisp, headdisp) {}; @@ -147,9 +147,9 @@ public: class CPedPizzaAttractor : public CPedAttractor { public: - virtual float GetHeadOfQueueWaitTime() override { return 2000.0f; } - virtual ePedAttractorType GetType() const override { return ATTRACTOR_PIZZA; } - virtual void UpdatePedStateOnDeparture(CPed* pPed) const override; + virtual float GetHeadOfQueueWaitTime() { return 2000.0f; } + virtual ePedAttractorType GetType() const { return ATTRACTOR_PIZZA; } + virtual void UpdatePedStateOnDeparture(CPed* pPed) const; CPedPizzaAttractor(C2dEffect* pEffect, const CMatrix& matrix, int32 maxpeds, float qdist, float waitTime, float approachTime, float distance, float headingdiff, float posdisp, float headdisp) : CPedAttractor(pEffect, matrix, maxpeds, qdist, waitTime, approachTime, distance, headingdiff, posdisp, headdisp) {}; @@ -158,8 +158,8 @@ public: class CPedSeatAttractor : public CPedAttractor { public: - virtual ePedAttractorType GetType() const override { return ATTRACTOR_SEAT; } - virtual void UpdatePedStateOnDeparture(CPed* pPed) const override {}; + virtual ePedAttractorType GetType() const { return ATTRACTOR_SEAT; } + virtual void UpdatePedStateOnDeparture(CPed* pPed) const {}; CPedSeatAttractor(C2dEffect* pEffect, const CMatrix& matrix, int32 maxpeds, float qdist, float waitTime, float approachTime, float distance, float headingdiff, float posdisp, float headdisp) : CPedAttractor(pEffect, matrix, maxpeds, qdist, waitTime, approachTime, distance, headingdiff, posdisp, headdisp) {}; @@ -169,12 +169,12 @@ class CPedShelterAttractor : public CPedAttractor { static std::vector ms_displacements; public: - virtual ePedAttractorType GetType() const override { return ATTRACTOR_SHELTER; } - virtual bool BroadcastDeparture(CPed*) override; - virtual void UpdatePedStateOnDeparture(CPed* pPed) const override {}; - virtual bool IsAtHeadOfQueue(CPed* pPed) const override { return true; } - virtual void ComputeAttractPos(int qid, CVector& pos) const override; - virtual void ComputeAttractHeading(int qid, float& heading) const override; + virtual ePedAttractorType GetType() const { return ATTRACTOR_SHELTER; } + virtual bool BroadcastDeparture(CPed*); + virtual void UpdatePedStateOnDeparture(CPed* pPed) const {}; + virtual bool IsAtHeadOfQueue(CPed* pPed) const { return true; } + virtual void ComputeAttractPos(int qid, CVector& pos) const; + virtual void ComputeAttractHeading(int qid, float& heading) const; CPedShelterAttractor(C2dEffect* pEffect, const CMatrix& matrix, int32 maxpeds, float qdist, float waitTime, float approachTime, float distance, float headingdiff, float posdisp, float headdisp) : CPedAttractor(pEffect, matrix, maxpeds, qdist, waitTime, approachTime, distance, headingdiff, posdisp, headdisp) @@ -187,8 +187,8 @@ public: class CPedStopAttractor : public CPedAttractor { public: - virtual ePedAttractorType GetType() const override { return ATTRACTOR_STOP; } - virtual void UpdatePedStateOnDeparture(CPed* pPed) const override {}; + virtual ePedAttractorType GetType() const { return ATTRACTOR_STOP; } + virtual void UpdatePedStateOnDeparture(CPed* pPed) const {}; CPedStopAttractor(C2dEffect* pEffect, const CMatrix& matrix, int32 maxpeds, float qdist, float waitTime, float approachTime, float distance, float headingdiff, float posdisp, float headdisp) : CPedAttractor(pEffect, matrix, maxpeds, qdist, waitTime, approachTime, distance, headingdiff, posdisp, headdisp) diff --git a/src/render/Draw.cpp b/src/render/Draw.cpp index 507653f6..13cbd1b3 100644 --- a/src/render/Draw.cpp +++ b/src/render/Draw.cpp @@ -5,8 +5,8 @@ #include "Camera.h" #include "CutsceneMgr.h" -#ifdef ASPECT_RATIO_SCALE float CDraw::ms_fAspectRatio = DEFAULT_ASPECT_RATIO; +#ifdef ASPECT_RATIO_SCALE float CDraw::ms_fScaledFOV = 45.0f; #endif diff --git a/src/render/Draw.h b/src/render/Draw.h index 1a63c980..e67ab42b 100644 --- a/src/render/Draw.h +++ b/src/render/Draw.h @@ -16,10 +16,10 @@ private: static float ms_fNearClipZ; static float ms_fFarClipZ; static float ms_fFOV; -#ifdef ASPECT_RATIO_SCALE // we use this variable to scale a lot of 2D elements // so better cache it static float ms_fAspectRatio; +#ifdef ASPECT_RATIO_SCALE // similar thing for 3D rendering static float ms_fScaledFOV; #endif diff --git a/src/render/Font.h b/src/render/Font.h index 4b2dda2b..57f1814d 100644 --- a/src/render/Font.h +++ b/src/render/Font.h @@ -1,5 +1,7 @@ #pragma once +#include "Sprite2d.h" + void AsciiToUnicode(const char *src, wchar *dst); void UnicodeStrcpy(wchar *dst, const wchar *src); void UnicodeStrcat(wchar *dst, wchar *append); diff --git a/src/render/Glass.cpp b/src/render/Glass.cpp index a11495a9..c6d02755 100644 --- a/src/render/Glass.cpp +++ b/src/render/Glass.cpp @@ -1,4 +1,4 @@ -#include "common.h" +#include "common.h" #include "Glass.h" #include "Timer.h" diff --git a/src/render/Hud.cpp b/src/render/Hud.cpp index 17291a61..b7c78eb1 100644 --- a/src/render/Hud.cpp +++ b/src/render/Hud.cpp @@ -1138,20 +1138,20 @@ void CHud::Draw() // Yeah, top and bottom changed place. R* vision if (IntroRect.m_bIsUsed && IntroRect.m_bBeforeFade) { if (IntroRect.m_nTextureId >= 0) { - CRect rect = { + CRect rect ( IntroRect.m_sRect.left, IntroRect.m_sRect.top, IntroRect.m_sRect.right, - IntroRect.m_sRect.bottom }; + IntroRect.m_sRect.bottom ); CTheScripts::ScriptSprites[IntroRect.m_nTextureId].Draw(rect, IntroRect.m_sColor); } else { - CRect rect = { + CRect rect ( IntroRect.m_sRect.left, IntroRect.m_sRect.top, IntroRect.m_sRect.right, - IntroRect.m_sRect.bottom }; + IntroRect.m_sRect.bottom ); CSprite2d::DrawRect(rect, IntroRect.m_sColor); } diff --git a/src/render/Instance.h b/src/render/Instance.h index 01dfb6a2..693cfdf1 100644 --- a/src/render/Instance.h +++ b/src/render/Instance.h @@ -9,6 +9,6 @@ class CInstance : public CPlaceable public: int m_modelIndex; public: - ~CInstance() = default; + ~CInstance() { } void Shutdown(); }; diff --git a/src/render/SpecialFX.cpp b/src/render/SpecialFX.cpp index 35b0b2fc..4391f19e 100644 --- a/src/render/SpecialFX.cpp +++ b/src/render/SpecialFX.cpp @@ -1419,7 +1419,7 @@ CMoneyMessages::RegisterOne(CVector vecPos, const char *pText, uint8 bRed, uint8 } CRGBA FoamColour(255, 255, 255, 255); -unsigned int CSpecialParticleStuff::BoatFromStart; +uint32 CSpecialParticleStuff::BoatFromStart; void CSpecialParticleStuff::CreateFoamAroundObject(CMatrix* pMatrix, float innerFw, float innerRg, float innerUp, int32 particles) diff --git a/src/skel/crossplatform.h b/src/skel/crossplatform.h index bfc03913..009b17c7 100644 --- a/src/skel/crossplatform.h +++ b/src/skel/crossplatform.h @@ -21,7 +21,11 @@ char *_strdate(char *buf); // As long as WITHWINDOWS isn't defined / isn't included, we only need type definitions so let's include . // NOTE: It's perfectly fine to include here, but it can increase build size and time in *some* conditions, and maybe substantially in future if we'll use crossplatform.h more. #ifndef _INC_WINDOWS - #include + #ifndef __MWERKS__ + #include + #else + #include + #endif #endif #if defined RW_D3D9 || defined RWLIBS #include "win.h" diff --git a/src/skel/win/win.cpp b/src/skel/win/win.cpp index 4963450a..397e88c4 100644 --- a/src/skel/win/win.cpp +++ b/src/skel/win/win.cpp @@ -1,4 +1,4 @@ -#if defined RW_D3D9 || defined RWLIBS +#if defined RW_D3D9 || defined RWLIBS || defined __MWERKS__ #define _WIN32_WINDOWS 0x0500 #define WINVER 0x0500 @@ -19,6 +19,10 @@ #pragma warning( push ) #pragma warning( disable : 4005) +#ifdef __MWERKS__ +#define MAPVK_VK_TO_CHAR (2) // this is missing from codewarrior win32 headers - but it gets used ... how? +#endif + #include #include #pragma warning( pop ) @@ -573,6 +577,9 @@ _RETEX: } } +#ifdef __MWERKS__ +#pragma dont_inline on +#endif void _psPrintCpuInfo() { RwUInt32 features = _psGetCpuFeatures(); @@ -587,6 +594,9 @@ void _psPrintCpuInfo() if ( FeaturesEx & 0x80000000 ) debug("with 3DNow"); } +#ifdef __MWERKS__ +#pragma dont_inline off +#endif #endif /* diff --git a/src/text/Text.cpp b/src/text/Text.cpp index 5f55d4f7..20229bf0 100644 --- a/src/text/Text.cpp +++ b/src/text/Text.cpp @@ -203,7 +203,7 @@ CText::GetNameOfLoadedMissionText(char *outName) void CText::ReadChunkHeader(ChunkHeader *buf, int32 file, size_t *offset) { -#if THIS_IS_STUPID +#ifdef THIS_IS_STUPID char *_buf = (char*)buf; for (int i = 0; i < sizeof(ChunkHeader); i++) { CFileMgr::Read(file, &_buf[i], 1); @@ -316,7 +316,7 @@ CKeyArray::Load(size_t length, int file, size_t* offset) entries = new CKeyEntry[numEntries]; rawbytes = (char*)entries; -#if THIS_IS_STUPID +#ifdef THIS_IS_STUPID for (uint32 i = 0; i < length; i++) { CFileMgr::Read(file, &rawbytes[i], 1); (*offset)++; @@ -391,7 +391,7 @@ CKeyArray::Search(const char *key, uint8 *result) #endif *result = false; #ifdef MASTER - sprintf(errstr, "%"); + sprintf(errstr, ""); #else sprintf(errstr, "%s missing", key); #endif // MASTER @@ -410,7 +410,7 @@ CData::Load(size_t length, int file, size_t * offset) chars = new wchar[numChars]; rawbytes = (char*)chars; -#if THIS_IS_STUPID +#ifdef THIS_IS_STUPID for(uint32 i = 0; i < length; i++){ CFileMgr::Read(file, &rawbytes[i], 1); (*offset)++; @@ -432,7 +432,7 @@ CData::Unload(void) void CMissionTextOffsets::Load(size_t table_size, int file, size_t *offset, int) { -#if THIS_IS_STUPID +#ifdef THIS_IS_STUPID size_t num_of_entries = table_size / sizeof(CMissionTextOffsets::Entry); for (size_t mi = 0; mi < num_of_entries; mi++) { for (uint32 i = 0; i < sizeof(data[mi].szMissionName); i++) { diff --git a/src/vehicles/Automobile.cpp b/src/vehicles/Automobile.cpp index 961b8108..f1bbf08f 100644 --- a/src/vehicles/Automobile.cpp +++ b/src/vehicles/Automobile.cpp @@ -1,4 +1,4 @@ -#include "common.h" +#include "common.h" #include "main.h" #include "General.h" diff --git a/src/vehicles/Boat.cpp b/src/vehicles/Boat.cpp index 5aed5814..46dec193 100644 --- a/src/vehicles/Boat.cpp +++ b/src/vehicles/Boat.cpp @@ -1,4 +1,4 @@ -#include "common.h" +#include "common.h" #include "main.h" #include "General.h" diff --git a/src/weapons/WeaponInfo.cpp b/src/weapons/WeaponInfo.cpp index acb11a88..1f78b7d4 100644 --- a/src/weapons/WeaponInfo.cpp +++ b/src/weapons/WeaponInfo.cpp @@ -57,7 +57,7 @@ int32 CWeaponInfo::ms_aMaxAmmoForWeapon[WEAPONTYPE_TOTALWEAPONS] = -1, -1, -1, -1, -1, -1, -1, -1, -1 }; -CWeaponInfo CWeaponInfo::ms_apWeaponInfos[WEAPONTYPE_TOTALWEAPONS]; +CWeaponInfo aWeaponInfo[WEAPONTYPE_TOTALWEAPONS]; char CWeaponInfo::ms_aWeaponNames[WEAPONTYPE_TOTALWEAPONS][32] = { "Unarmed", @@ -102,7 +102,7 @@ char CWeaponInfo::ms_aWeaponNames[WEAPONTYPE_TOTALWEAPONS][32] = CWeaponInfo* CWeaponInfo::GetWeaponInfo(eWeaponType weaponType) { - return &ms_apWeaponInfos[weaponType]; + return &aWeaponInfo[weaponType]; } void @@ -110,27 +110,27 @@ CWeaponInfo::Initialise(void) { debug("Initialising CWeaponInfo...\n"); for (int i = 0; i < WEAPONTYPE_TOTALWEAPONS; i++) { - ms_apWeaponInfos[i].m_eWeaponFire = WEAPON_FIRE_INSTANT_HIT; - ms_apWeaponInfos[i].m_fRange = 0.0f; - ms_apWeaponInfos[i].m_nFiringRate = 0; - ms_apWeaponInfos[i].m_nReload = 0; - ms_apWeaponInfos[i].m_nAmountofAmmunition = 0; - ms_apWeaponInfos[i].m_nDamage = 0; - ms_apWeaponInfos[i].m_fSpeed = 0.0f; - ms_apWeaponInfos[i].m_fRadius = 0.0f; - ms_apWeaponInfos[i].m_fLifespan = 0.0f; - ms_apWeaponInfos[i].m_fSpread = 0.0f; - ms_apWeaponInfos[i].m_vecFireOffset = CVector(0.0f, 0.0f, 0.0f); - ms_apWeaponInfos[i].m_AnimToPlay = ASSOCGRP_UNARMED; - ms_apWeaponInfos[i].m_fAnimLoopStart = 0.0f; - ms_apWeaponInfos[i].m_fAnimLoopEnd = 0.0f; - ms_apWeaponInfos[i].m_fAnimFrameFire = 0.0f; - ms_apWeaponInfos[i].m_fAnim2LoopStart = 0.0f; - ms_apWeaponInfos[i].m_fAnim2LoopEnd = 0.0f; - ms_apWeaponInfos[i].m_fAnim2FrameFire = 0.0f; - ms_apWeaponInfos[i].m_fAnimBreakout = 0.0f; - ms_apWeaponInfos[i].m_Flags = WEAPONFLAG_USE_GRAVITY | WEAPONFLAG_SLOWS_DOWN | WEAPONFLAG_RAND_SPEED | WEAPONFLAG_EXPANDS | WEAPONFLAG_EXPLODES; - ms_apWeaponInfos[i].m_nWeaponSlot = WEAPONSLOT_UNARMED; + aWeaponInfo[i].m_eWeaponFire = WEAPON_FIRE_INSTANT_HIT; + aWeaponInfo[i].m_fRange = 0.0f; + aWeaponInfo[i].m_nFiringRate = 0; + aWeaponInfo[i].m_nReload = 0; + aWeaponInfo[i].m_nAmountofAmmunition = 0; + aWeaponInfo[i].m_nDamage = 0; + aWeaponInfo[i].m_fSpeed = 0.0f; + aWeaponInfo[i].m_fRadius = 0.0f; + aWeaponInfo[i].m_fLifespan = 0.0f; + aWeaponInfo[i].m_fSpread = 0.0f; + aWeaponInfo[i].m_vecFireOffset = CVector(0.0f, 0.0f, 0.0f); + aWeaponInfo[i].m_AnimToPlay = ASSOCGRP_UNARMED; + aWeaponInfo[i].m_fAnimLoopStart = 0.0f; + aWeaponInfo[i].m_fAnimLoopEnd = 0.0f; + aWeaponInfo[i].m_fAnimFrameFire = 0.0f; + aWeaponInfo[i].m_fAnim2LoopStart = 0.0f; + aWeaponInfo[i].m_fAnim2LoopEnd = 0.0f; + aWeaponInfo[i].m_fAnim2FrameFire = 0.0f; + aWeaponInfo[i].m_fAnimBreakout = 0.0f; + aWeaponInfo[i].m_Flags = WEAPONFLAG_USE_GRAVITY | WEAPONFLAG_SLOWS_DOWN | WEAPONFLAG_RAND_SPEED | WEAPONFLAG_EXPANDS | WEAPONFLAG_EXPLODES; + aWeaponInfo[i].m_nWeaponSlot = WEAPONSLOT_UNARMED; } debug("Loading weapon data...\n"); LoadWeaponData(); @@ -221,31 +221,31 @@ CWeaponInfo::LoadWeaponData(void) CVector vecFireOffset(fireOffsetX, fireOffsetY, fireOffsetZ); - ms_apWeaponInfos[weaponType].m_eWeaponFire = FindWeaponFireType(fireType); - ms_apWeaponInfos[weaponType].m_fRange = range; - ms_apWeaponInfos[weaponType].m_nFiringRate = firingRate; - ms_apWeaponInfos[weaponType].m_nReload = reload; - ms_apWeaponInfos[weaponType].m_nAmountofAmmunition = ammoAmount; - ms_apWeaponInfos[weaponType].m_nDamage = damage; - ms_apWeaponInfos[weaponType].m_fSpeed = speed; - ms_apWeaponInfos[weaponType].m_fRadius = radius; - ms_apWeaponInfos[weaponType].m_fLifespan = lifeSpan; - ms_apWeaponInfos[weaponType].m_fSpread = spread; - ms_apWeaponInfos[weaponType].m_vecFireOffset = vecFireOffset; - ms_apWeaponInfos[weaponType].m_fAnimLoopStart = animLoopStart / 30.0f; - ms_apWeaponInfos[weaponType].m_fAnimLoopEnd = animLoopEnd / 30.0f; - ms_apWeaponInfos[weaponType].m_fAnim2LoopStart = anim2LoopStart / 30.0f; - ms_apWeaponInfos[weaponType].m_fAnim2LoopEnd = anim2LoopEnd / 30.0f; - ms_apWeaponInfos[weaponType].m_fAnimFrameFire = delayBetweenAnimAndFire / 30.0f; - ms_apWeaponInfos[weaponType].m_fAnim2FrameFire = delayBetweenAnim2AndFire / 30.0f; - ms_apWeaponInfos[weaponType].m_fAnimBreakout = animBreakout / 30.0f; - ms_apWeaponInfos[weaponType].m_nModelId = modelId; - ms_apWeaponInfos[weaponType].m_nModel2Id = modelId2; - ms_apWeaponInfos[weaponType].m_Flags = flags; - ms_apWeaponInfos[weaponType].m_nWeaponSlot = weaponSlot; + aWeaponInfo[weaponType].m_eWeaponFire = FindWeaponFireType(fireType); + aWeaponInfo[weaponType].m_fRange = range; + aWeaponInfo[weaponType].m_nFiringRate = firingRate; + aWeaponInfo[weaponType].m_nReload = reload; + aWeaponInfo[weaponType].m_nAmountofAmmunition = ammoAmount; + aWeaponInfo[weaponType].m_nDamage = damage; + aWeaponInfo[weaponType].m_fSpeed = speed; + aWeaponInfo[weaponType].m_fRadius = radius; + aWeaponInfo[weaponType].m_fLifespan = lifeSpan; + aWeaponInfo[weaponType].m_fSpread = spread; + aWeaponInfo[weaponType].m_vecFireOffset = vecFireOffset; + aWeaponInfo[weaponType].m_fAnimLoopStart = animLoopStart / 30.0f; + aWeaponInfo[weaponType].m_fAnimLoopEnd = animLoopEnd / 30.0f; + aWeaponInfo[weaponType].m_fAnim2LoopStart = anim2LoopStart / 30.0f; + aWeaponInfo[weaponType].m_fAnim2LoopEnd = anim2LoopEnd / 30.0f; + aWeaponInfo[weaponType].m_fAnimFrameFire = delayBetweenAnimAndFire / 30.0f; + aWeaponInfo[weaponType].m_fAnim2FrameFire = delayBetweenAnim2AndFire / 30.0f; + aWeaponInfo[weaponType].m_fAnimBreakout = animBreakout / 30.0f; + aWeaponInfo[weaponType].m_nModelId = modelId; + aWeaponInfo[weaponType].m_nModel2Id = modelId2; + aWeaponInfo[weaponType].m_Flags = flags; + aWeaponInfo[weaponType].m_nWeaponSlot = weaponSlot; if (animLoopEnd < 98.0f && weaponType != WEAPONTYPE_FLAMETHROWER && !CWeapon::IsShotgun(weaponType)) - ms_apWeaponInfos[weaponType].m_nFiringRate = ((ms_apWeaponInfos[weaponType].m_fAnimLoopEnd - ms_apWeaponInfos[weaponType].m_fAnimLoopStart) * 900.0f); + aWeaponInfo[weaponType].m_nFiringRate = ((aWeaponInfo[weaponType].m_fAnimLoopEnd - aWeaponInfo[weaponType].m_fAnimLoopStart) * 900.0f); if (weaponType == WEAPONTYPE_DETONATOR || weaponType == WEAPONTYPE_HELICANNON) modelId = -1; @@ -257,7 +257,7 @@ CWeaponInfo::LoadWeaponData(void) for (int i = 0; i < NUM_ANIM_ASSOC_GROUPS; i++) { if (!strcmp(animToPlay, CAnimManager::GetAnimGroupName((AssocGroupId)i))) { - ms_apWeaponInfos[weaponType].m_AnimToPlay = (AssocGroupId)i; + aWeaponInfo[weaponType].m_AnimToPlay = (AssocGroupId)i; break; } } diff --git a/src/weapons/WeaponInfo.h b/src/weapons/WeaponInfo.h index 0f53dded..d7f1563d 100644 --- a/src/weapons/WeaponInfo.h +++ b/src/weapons/WeaponInfo.h @@ -31,7 +31,6 @@ enum }; class CWeaponInfo { - static CWeaponInfo ms_apWeaponInfos[WEAPONTYPE_TOTALWEAPONS]; static char ms_aWeaponNames[WEAPONTYPE_TOTALWEAPONS][32]; public: static uint16 ms_aReloadSampleTime[WEAPONTYPE_TOTALWEAPONS];