mirror of
https://github.com/GTAmodding/re3.git
synced 2021-02-19 17:49:54 +01:00
Merge branch 'lcs' into lcs
This commit is contained in:
commit
0ae6d1fecf
4
.gitignore
vendored
4
.gitignore
vendored
@ -354,3 +354,7 @@ vendor/glfw-3.3.2.bin.WIN32/
|
||||
vendor/glfw-3.3.2.bin.WIN64/
|
||||
|
||||
sdk/
|
||||
|
||||
codewarrior/reVC_Data/
|
||||
codewarrior/Release/
|
||||
codewarrior/Debug/
|
0
codewarrior/Debug/gta-vc.txt
Normal file
0
codewarrior/Debug/gta-vc.txt
Normal file
0
codewarrior/Release/gta-vc.txt
Normal file
0
codewarrior/Release/gta-vc.txt
Normal file
BIN
codewarrior/reVC.mcp
Normal file
BIN
codewarrior/reVC.mcp
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -147,7 +147,6 @@ workspace "reLCS"
|
||||
filter { "platforms:macosx-amd64-*" }
|
||||
buildoptions { "-target", "x86_64-apple-macos10.12", "-std=gnu++14" }
|
||||
|
||||
|
||||
filter { "platforms:*librw_d3d9*" }
|
||||
defines { "RW_D3D9" }
|
||||
if(not _OPTIONS["with-librw"]) then
|
||||
@ -232,7 +231,6 @@ project "reLCS"
|
||||
kind "WindowedApp"
|
||||
targetname "reLCS"
|
||||
targetdir "bin/%{cfg.platform}/%{cfg.buildcfg}"
|
||||
defines { "MIAMI" }
|
||||
|
||||
files { addSrcFiles("src") }
|
||||
files { addSrcFiles("src/animation") }
|
||||
@ -244,6 +242,7 @@ project "reLCS"
|
||||
files { addSrcFiles("src/control") }
|
||||
files { addSrcFiles("src/core") }
|
||||
files { addSrcFiles("src/entities") }
|
||||
files { addSrcFiles("src/leeds") }
|
||||
files { addSrcFiles("src/leeds/base") }
|
||||
files { addSrcFiles("src/math") }
|
||||
files { addSrcFiles("src/modelinfo") }
|
||||
@ -269,6 +268,7 @@ project "reLCS"
|
||||
includedirs { "src/control" }
|
||||
includedirs { "src/core" }
|
||||
includedirs { "src/entities" }
|
||||
includedirs { "src/leeds" }
|
||||
includedirs { "src/leeds/base" }
|
||||
includedirs { "src/math" }
|
||||
includedirs { "src/modelinfo" }
|
||||
|
@ -79,6 +79,21 @@ endif()
|
||||
|
||||
target_compile_definitions(${EXECUTABLE} PRIVATE )
|
||||
|
||||
option(${PROJECT}_WITH_SANITIZERS "Use UB sanitizers (better crash log)" OFF)
|
||||
option(${PROJECT}_WITH_ASAN "Use Address sanitizer (better crash log)" OFF)
|
||||
|
||||
if(${PROJECT}_WITH_SANITIZERS)
|
||||
target_compile_options(${EXECUTABLE} PUBLIC
|
||||
-fsanitize=undefined,float-divide-by-zero,integer,implicit-conversion,implicit-integer-truncation,implicit-integer-arithmetic-value-change,local-bounds,nullability
|
||||
-g3 -fno-omit-frame-pointer)
|
||||
target_link_options(${EXECUTABLE} PUBLIC -fsanitize=undefined,float-divide-by-zero,integer,implicit-conversion,implicit-integer-truncation,implicit-integer-arithmetic-value-change,local-bounds,nullability)
|
||||
endif()
|
||||
|
||||
if(${PROJECT}_WITH_ASAN)
|
||||
target_compile_options(${EXECUTABLE} PUBLIC -fsanitize=address -g3 -fno-omit-frame-pointer)
|
||||
target_link_options(${EXECUTABLE} PUBLIC -fsanitize=address)
|
||||
endif()
|
||||
|
||||
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
|
||||
target_compile_options(${EXECUTABLE}
|
||||
PRIVATE
|
||||
|
@ -1,7 +1,11 @@
|
||||
#include "common.h"
|
||||
|
||||
#if defined _WIN32 && !defined __MINGW32__
|
||||
#if defined __MWERKS__
|
||||
#include <wctype.h>
|
||||
#else
|
||||
#include "ctype.h"
|
||||
#endif
|
||||
#else
|
||||
#include <cwctype>
|
||||
#endif
|
||||
@ -16,8 +20,6 @@
|
||||
#include "AnimBlendAssocGroup.h"
|
||||
#include "KeyGen.h"
|
||||
|
||||
//--MIAMI: file done
|
||||
|
||||
CAnimBlendAssocGroup::CAnimBlendAssocGroup(void)
|
||||
{
|
||||
animBlock = nil;
|
||||
@ -91,18 +93,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)
|
||||
|
@ -7,8 +7,6 @@
|
||||
#include "AnimBlendAssociation.h"
|
||||
#include "MemoryMgr.h"
|
||||
|
||||
//--MIAMI: file done
|
||||
|
||||
CAnimBlendAssociation::CAnimBlendAssociation(void)
|
||||
{
|
||||
groupId = -1;
|
||||
|
@ -3,8 +3,6 @@
|
||||
#include "AnimBlendClumpData.h"
|
||||
#include "MemoryMgr.h"
|
||||
|
||||
//--MIAMI: file done
|
||||
|
||||
CAnimBlendClumpData::CAnimBlendClumpData(void)
|
||||
{
|
||||
numFrames = 0;
|
||||
|
@ -4,8 +4,6 @@
|
||||
#include "AnimBlendHierarchy.h"
|
||||
#include "AnimManager.h"
|
||||
|
||||
//--MIAMI: file done
|
||||
|
||||
CAnimBlendHierarchy::CAnimBlendHierarchy(void)
|
||||
{
|
||||
sequences = nil;
|
||||
|
@ -3,8 +3,6 @@
|
||||
#include "AnimBlendAssociation.h"
|
||||
#include "AnimBlendNode.h"
|
||||
|
||||
//--MIAMI: file done
|
||||
|
||||
void
|
||||
CAnimBlendNode::Init(void)
|
||||
{
|
||||
|
@ -3,8 +3,6 @@
|
||||
#include "AnimBlendSequence.h"
|
||||
#include "MemoryHeap.h"
|
||||
|
||||
//--MIAMI: file done
|
||||
|
||||
CAnimBlendSequence::CAnimBlendSequence(void)
|
||||
{
|
||||
type = 0;
|
||||
|
@ -12,8 +12,6 @@
|
||||
#include "AnimManager.h"
|
||||
#include "Streaming.h"
|
||||
|
||||
//--MIAMI: file done
|
||||
|
||||
CAnimBlock CAnimManager::ms_aAnimBlocks[NUMANIMBLOCKS];
|
||||
CAnimBlendHierarchy CAnimManager::ms_aAnimations[NUMANIMATIONS];
|
||||
int32 CAnimManager::ms_numAnimBlocks;
|
||||
@ -1477,7 +1475,6 @@ CAnimManager::LoadAnimFile(const char *filename)
|
||||
RwStreamClose(stream, nil);
|
||||
}
|
||||
|
||||
//--MIAMI: done
|
||||
void
|
||||
CAnimManager::LoadAnimFile(RwStream *stream, bool compress, char (*uncompressedAnims)[32])
|
||||
{
|
||||
|
@ -24,8 +24,6 @@
|
||||
#include "Pools.h"
|
||||
#include "crossplatform.h"
|
||||
|
||||
//--MIAMI: file done
|
||||
|
||||
static bool bModelsRemovedForCutscene;
|
||||
static int32 NumberOfSavedWeapons;
|
||||
static eWeaponType SavedWeaponIDs[TOTAL_WEAPON_SLOTS];
|
||||
|
@ -6,8 +6,6 @@
|
||||
#include "AnimBlendAssociation.h"
|
||||
#include "RpAnimBlend.h"
|
||||
|
||||
//--MIAMI: file done
|
||||
|
||||
CAnimBlendClumpData *gpAnimBlendClump;
|
||||
|
||||
// PS2 names without "NonSkinned"
|
||||
|
@ -12,8 +12,6 @@
|
||||
#include "RpAnimBlend.h"
|
||||
#include "PedModelInfo.h"
|
||||
|
||||
//--MIAMI: file done
|
||||
|
||||
RwInt32 ClumpOffset;
|
||||
|
||||
enum
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "common.h"
|
||||
#include "common.h"
|
||||
|
||||
#include "AudioManager.h"
|
||||
#include "audio_enums.h"
|
||||
@ -41,9 +41,9 @@
|
||||
#include "WindModifiers.h"
|
||||
#include "Fluff.h"
|
||||
#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;
|
||||
|
||||
@ -305,11 +305,11 @@ cAudioManager::ProcessPlayerMood()
|
||||
playerPed = FindPlayerPed();
|
||||
if (playerPed != nil) {
|
||||
|
||||
if (playerPed->m_pWanted->m_nWantedLevel > 3) {
|
||||
if (playerPed->m_pWanted->GetWantedLevel() > 3) {
|
||||
m_nPlayerMood = PLAYER_MOOD_ANGRY;
|
||||
return;
|
||||
}
|
||||
if (playerPed->m_pWanted->m_nWantedLevel > 1) {
|
||||
if (playerPed->m_pWanted->GetWantedLevel() > 1) {
|
||||
m_nPlayerMood = PLAYER_MOOD_PISSED_OFF;
|
||||
return;
|
||||
}
|
||||
@ -5684,7 +5684,7 @@ cAudioManager::GetCopTalkSfx(CPed *ped, int16 sound)
|
||||
case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 8494, 4); break;
|
||||
case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 8491, 3); break;
|
||||
case SOUND_PED_PED_COLLISION:
|
||||
if(FindPlayerPed()->m_pWanted->m_nWantedLevel <= 0) return NO_SAMPLE;
|
||||
if(FindPlayerPed()->m_pWanted->GetWantedLevel() <= 0) return NO_SAMPLE;
|
||||
GetPhrase(sfx, ped->m_lastComment, 8476, 5);
|
||||
break;
|
||||
default: return GetGenericMaleTalkSfx(ped, sound);
|
||||
@ -8115,7 +8115,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()
|
||||
@ -9311,7 +9311,8 @@ cAudioManager::ProcessBridge()
|
||||
void
|
||||
cAudioManager::ProcessBridgeWarning()
|
||||
{
|
||||
if (CStats::CommercialPassed && m_sQueueSample.m_fDistance < 450.f) {
|
||||
// TODO: LCS
|
||||
/* if (CStats::CommercialPassed && m_sQueueSample.m_fDistance < 450.f) {
|
||||
m_sQueueSample.m_nVolume = ComputeVolume(100, 450.f, m_sQueueSample.m_fDistance);
|
||||
if (m_sQueueSample.m_nVolume != 0) {
|
||||
m_sQueueSample.m_nCounter = 0;
|
||||
@ -9332,7 +9333,7 @@ cAudioManager::ProcessBridgeWarning()
|
||||
m_sQueueSample.m_bRequireReflection = false;
|
||||
AddSampleToRequestedQueue();
|
||||
}
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -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;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
|
||||
#include "audio_enums.h"
|
||||
#include "AudioCollision.h"
|
||||
@ -544,8 +544,8 @@ public:
|
||||
#endif
|
||||
};
|
||||
|
||||
#ifdef AUDIO_MSS
|
||||
static_assert(sizeof(cAudioManager) == 0x5558, "cAudioManager: error");
|
||||
#endif
|
||||
//#ifdef AUDIO_MSS
|
||||
//static_assert(sizeof(cAudioManager) == 0x5558, "cAudioManager: error");
|
||||
//#endif
|
||||
|
||||
extern cAudioManager AudioManager;
|
||||
|
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
|
||||
#include "common.h"
|
||||
|
||||
|
@ -1237,11 +1237,12 @@ cMusicManager::DisplayRadioStationName()
|
||||
case RADIO_ESPANTOSO: string = TheText.Get("FEA_FM6"); break;
|
||||
case EMOTION: string = TheText.Get("FEA_FM7"); break;
|
||||
case WAVE: string = TheText.Get("FEA_FM8"); break;
|
||||
case USERTRACK:
|
||||
case 9: string = TheText.Get("FEA_FM9"); break;
|
||||
case 10:
|
||||
if (!SampleManager.IsMP3RadioChannelAvailable())
|
||||
return;
|
||||
string = TheText.Get("FEA_MP3"); break;
|
||||
default: return;
|
||||
default: string = TheText.Get("FEA_NON"); break;
|
||||
};
|
||||
|
||||
if (pCurrentStation != string) {
|
||||
@ -1255,21 +1256,22 @@ cMusicManager::DisplayRadioStationName()
|
||||
|
||||
CFont::SetJustifyOff();
|
||||
CFont::SetBackgroundOff();
|
||||
CFont::SetScale(SCREEN_SCALE_X(0.8f), SCREEN_SCALE_Y(1.35f));
|
||||
CFont::SetDropShadowPosition(2);
|
||||
CFont::SetScale(PSP_SCREEN_SCALE_X(0.5f), PSP_SCREEN_SCALE_Y(0.88f));
|
||||
CFont::SetPropOn();
|
||||
CFont::SetFontStyle(FONT_STANDARD);
|
||||
CFont::SetFontStyle(FONT_BANK);
|
||||
CFont::SetCentreOn();
|
||||
CFont::SetCentreSize(SCREEN_STRETCH_X(DEFAULT_SCREEN_WIDTH));
|
||||
CFont::SetColor(CRGBA(0, 0, 0, 255));
|
||||
CFont::PrintString(SCREEN_WIDTH / 2 + SCREEN_SCALE_X(2.0f), SCREEN_SCALE_Y(22.0f) + SCREEN_SCALE_Y(2.0f), pCurrentStation);
|
||||
CFont::SetCentreSize(PSP_SCREEN_SCALE_X(260.0f));
|
||||
CFont::SetDropColor(CRGBA(0, 0, 0, 255));
|
||||
|
||||
if (gNumRetunePresses)
|
||||
CFont::SetColor(CRGBA(102, 133, 143, 255));
|
||||
CFont::SetColor(CRGBA(77, 155, 210, 255));
|
||||
else
|
||||
CFont::SetColor(CRGBA(147, 196, 211, 255));
|
||||
CFont::SetColor(CRGBA(77, 155, 210, 255));
|
||||
|
||||
CFont::PrintString(SCREEN_WIDTH / 2, SCREEN_SCALE_Y(22.0f), pCurrentStation);
|
||||
CFont::PrintString(SCREEN_WIDTH / 2, PSP_SCREEN_SCALE_Y(7.0f), pCurrentStation);
|
||||
CFont::DrawFonts();
|
||||
CFont::SetCentreSize(SCREEN_STRETCH_X(DEFAULT_SCREEN_WIDTH));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -13,8 +13,9 @@
|
||||
#include "World.h"
|
||||
#include "Zones.h"
|
||||
#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 {
|
||||
@ -136,7 +137,7 @@ cAudioManager::ServicePoliceRadio()
|
||||
#endif
|
||||
CPlayerPed *playerPed = FindPlayerPed();
|
||||
if (playerPed) {
|
||||
wantedLevel = playerPed->m_pWanted->m_nWantedLevel;
|
||||
wantedLevel = playerPed->m_pWanted->GetWantedLevel();
|
||||
if (!crimeReport) {
|
||||
if (wantedLevel != 0) {
|
||||
if (nLastSeen != 0)
|
||||
@ -652,7 +653,7 @@ void
|
||||
cAudioManager::ReportCrime(eCrimeType type, const CVector &pos)
|
||||
{
|
||||
int32 lastCrime = ARRAY_SIZE(m_sPoliceRadioQueue.crimes);
|
||||
if (m_bIsInitialised && MusicManager.m_nMusicMode != MUSICMODE_CUTSCENE && FindPlayerPed()->m_pWanted->m_nWantedLevel > 0 &&
|
||||
if (m_bIsInitialised && MusicManager.m_nMusicMode != MUSICMODE_CUTSCENE && FindPlayerPed()->m_pWanted->GetWantedLevel() > 0 &&
|
||||
(type > CRIME_NONE || type < NUM_CRIME_TYPES) && m_FrameCounter >= gMinTimeToNextReport[type]) {
|
||||
for (int32 i = 0; i < ARRAY_SIZE(m_sPoliceRadioQueue.crimes); i++) {
|
||||
if (m_sPoliceRadioQueue.crimes[i].type != CRIME_NONE) {
|
||||
|
@ -1,6 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
#include "Wanted.h"
|
||||
#include "Crime.h"
|
||||
|
||||
struct cAMCrime {
|
||||
int32 type;
|
||||
|
@ -1,5 +1,4 @@
|
||||
#pragma once
|
||||
#include "common.h"
|
||||
#include "AudioSamples.h"
|
||||
|
||||
#define MAX_VOLUME 127
|
||||
|
@ -1,8 +1,7 @@
|
||||
#include "common.h"
|
||||
|
||||
#ifdef AUDIO_MSS
|
||||
#include <windows.h>
|
||||
#include <shobjidl.h>
|
||||
#include <shlobj.h>
|
||||
#include <shlguid.h>
|
||||
|
||||
#include <time.h>
|
||||
@ -20,8 +19,6 @@
|
||||
|
||||
#pragma comment( lib, "mss32.lib" )
|
||||
|
||||
// --MIAMI: file done
|
||||
|
||||
cSampleManager SampleManager;
|
||||
uint32 BankStartOffset[MAX_SFX_BANKS];
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
@ -1,17 +1,11 @@
|
||||
//#define JUICY_OAL
|
||||
|
||||
#ifdef AUDIO_OAL
|
||||
#include "sampman.h"
|
||||
|
||||
#include <time.h>
|
||||
|
||||
#include "eax.h"
|
||||
#include "eax-util.h"
|
||||
|
||||
#define WITHWINDOWS
|
||||
#include "common.h"
|
||||
#include "crossplatform.h"
|
||||
|
||||
#ifdef _WIN32
|
||||
#include <io.h>
|
||||
#include <AL/al.h>
|
||||
@ -19,8 +13,24 @@
|
||||
#include <AL/alext.h>
|
||||
#include <AL/efx.h>
|
||||
#include <AL/efx-presets.h>
|
||||
|
||||
// for user MP3s
|
||||
#include <direct.h>
|
||||
#include <shlobj.h>
|
||||
#include <shlguid.h>
|
||||
#else
|
||||
#define _getcwd getcwd
|
||||
#endif
|
||||
|
||||
#if defined _MSC_VER && !defined CMAKE_NO_AUTOLINK
|
||||
#pragma comment( lib, "OpenAL32.lib" )
|
||||
#endif
|
||||
|
||||
#include "common.h"
|
||||
#include "crossplatform.h"
|
||||
|
||||
#include "sampman.h"
|
||||
|
||||
#include "oal/oal_utils.h"
|
||||
#include "oal/aldlist.h"
|
||||
#include "oal/channel.h"
|
||||
@ -38,19 +48,6 @@
|
||||
//TODO: max channels
|
||||
//TODO: loop count
|
||||
|
||||
#if defined _MSC_VER && !defined CMAKE_NO_AUTOLINK
|
||||
#pragma comment( lib, "OpenAL32.lib" )
|
||||
#endif
|
||||
|
||||
// for user MP3s
|
||||
#ifdef _WIN32
|
||||
#include <direct.h>
|
||||
#include <shobjidl.h>
|
||||
#include <shlguid.h>
|
||||
#else
|
||||
#define _getcwd getcwd
|
||||
#endif
|
||||
|
||||
cSampleManager SampleManager;
|
||||
bool _bSampmanInitialised = false;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
|
||||
enum eSound
|
||||
{
|
||||
|
@ -7,6 +7,8 @@
|
||||
|
||||
CColModel::CColModel(void)
|
||||
{
|
||||
boundingSphere.Set(0.0001f, CVector(0.0f, 0.0f, 0.0f));
|
||||
boundingBox.Set(CVector(0.0f, 0.0f, 0.0f), CVector(0.0f, 0.0f, 0.0f));
|
||||
numSpheres = 0;
|
||||
spheres = nil;
|
||||
numLines = 0;
|
||||
@ -18,7 +20,7 @@ CColModel::CColModel(void)
|
||||
triangles = nil;
|
||||
trianglePlanes = nil;
|
||||
level = LEVEL_GENERIC; // generic col slot
|
||||
ownsCollisionVolumes = true;
|
||||
// ownsCollisionVolumes = true;
|
||||
}
|
||||
|
||||
CColModel::~CColModel(void)
|
||||
@ -204,3 +206,10 @@ CColModel::operator=(const CColModel &other)
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
bool
|
||||
CColModel::Write(base::cRelocatableChunkWriter &writer, bool allocSpace)
|
||||
{
|
||||
assert(0 && "TODO(LCS)");
|
||||
return 1;
|
||||
}
|
||||
|
@ -36,4 +36,6 @@ struct CColModel
|
||||
void *operator new(size_t);
|
||||
void operator delete(void *p, size_t);
|
||||
CColModel& operator=(const CColModel& other);
|
||||
|
||||
bool Write(base::cRelocatableChunkWriter &writer, bool allocSpace);
|
||||
};
|
@ -1,5 +1,7 @@
|
||||
#include "common.h"
|
||||
|
||||
#include "main.h"
|
||||
#include "smallHeap.h"
|
||||
#include "templates.h"
|
||||
#include "General.h"
|
||||
#include "ModelInfo.h"
|
||||
@ -8,6 +10,9 @@
|
||||
#include "Script.h"
|
||||
#include "Timer.h"
|
||||
#include "Camera.h"
|
||||
#include "World.h"
|
||||
#include "Zones.h"
|
||||
#include "Garages.h"
|
||||
#include "Frontend.h"
|
||||
#include "Physical.h"
|
||||
#include "ColStore.h"
|
||||
@ -15,16 +20,55 @@
|
||||
#include "Pools.h"
|
||||
|
||||
CPool<ColDef,ColDef> *CColStore::ms_pColPool;
|
||||
bool CColStore::m_onlyBB;
|
||||
#ifndef MASTER
|
||||
bool bDispColInMem;
|
||||
#endif
|
||||
|
||||
// LCS: file done except unused:
|
||||
// CColStore::LoadCol(int,char const*)
|
||||
// CColStore::LoadAllBoundingBoxes(void)
|
||||
// CColStore::Write(base::cRelocatableChunkWriter &)
|
||||
|
||||
const CVector&
|
||||
LevelPos(eLevelName level)
|
||||
{
|
||||
static CVector pos[4] = {
|
||||
CVector(1060.0f, -800.0f, 0.0f),
|
||||
CVector(1060.0f, -800.0f, 0.0f),
|
||||
CVector(350.0f, -624.0f, 0.0f),
|
||||
CVector(-670.0f, -511.0f, 0.0f)
|
||||
};
|
||||
return pos[level];
|
||||
};
|
||||
|
||||
static eLevelName
|
||||
PosLevel(const CVector &pos)
|
||||
{
|
||||
static eLevelName lastPlayerLevel = LEVEL_INDUSTRIAL;
|
||||
static eLevelName lastOtherLevel = LEVEL_INDUSTRIAL;
|
||||
|
||||
if(Abs(FindPlayerCoors().x - pos.x) < 5.0f &&
|
||||
Abs(FindPlayerCoors().y - pos.y) < 5.0f &&
|
||||
Abs(FindPlayerCoors().z - pos.z) < 5.0f){
|
||||
if(CGame::currLevel != LEVEL_GENERIC)
|
||||
lastPlayerLevel = CGame::currLevel;
|
||||
return lastPlayerLevel;
|
||||
}else{
|
||||
eLevelName lvl = CTheZones::GetLevelFromPosition(&pos);
|
||||
if(lvl != LEVEL_GENERIC)
|
||||
lastOtherLevel = lvl;
|
||||
return lastOtherLevel;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
CColStore::Initialise(void)
|
||||
{
|
||||
if(ms_pColPool == nil)
|
||||
if(ms_pColPool == nil){
|
||||
ms_pColPool = new CPool<ColDef,ColDef>(COLSTORESIZE, "CollisionFiles");
|
||||
AddColSlot("generic"); // slot 0. not streamed
|
||||
}
|
||||
#ifndef MASTER
|
||||
VarConsole.Add("Display collision in memory", &bDispColInMem, true);
|
||||
#endif
|
||||
@ -38,7 +82,9 @@ CColStore::Shutdown(void)
|
||||
RemoveColSlot(i);
|
||||
if(ms_pColPool)
|
||||
delete ms_pColPool;
|
||||
#ifdef FIX_BUGS
|
||||
ms_pColPool = nil;
|
||||
#endif
|
||||
}
|
||||
|
||||
int
|
||||
@ -119,11 +165,34 @@ CColStore::LoadCol(int32 slot, uint8 *buffer, int32 bufsize)
|
||||
return success;
|
||||
}
|
||||
|
||||
struct ColChunkEntry
|
||||
{
|
||||
int32 modelId; // -1 marks end
|
||||
CColModel *colModel;
|
||||
};
|
||||
|
||||
void
|
||||
CColStore::LoadColCHK(int32 slot, void *data, void *chunk)
|
||||
{
|
||||
ColDef *def = GetSlot(slot);
|
||||
def->chunk = chunk;
|
||||
CStreaming::RegisterPointer(&def->chunk, 1, true);
|
||||
for(ColChunkEntry *entry = (ColChunkEntry*)data; entry->modelId != -1; entry++){
|
||||
CBaseModelInfo *mi = CModelInfo::GetModelInfo(entry->modelId);
|
||||
mi->SetColModel(entry->colModel, true); // we own this? can that work?
|
||||
CStreaming::RegisterPointer(&mi->m_colModel, 1, true);
|
||||
}
|
||||
def->isLoaded = true;
|
||||
}
|
||||
|
||||
CColModel nullCollision;
|
||||
|
||||
void
|
||||
CColStore::RemoveCol(int32 slot)
|
||||
{
|
||||
int id;
|
||||
GetSlot(slot)->isLoaded = false;
|
||||
ColDef *def = GetSlot(slot);
|
||||
def->isLoaded = false;
|
||||
for(id = 0; id < MODELINFOSIZE; id++){
|
||||
CBaseModelInfo *mi = CModelInfo::GetModelInfo(id);
|
||||
if(mi){
|
||||
@ -132,6 +201,23 @@ CColStore::RemoveCol(int32 slot)
|
||||
col->RemoveCollisionVolumes();
|
||||
}
|
||||
}
|
||||
if(gUseChunkFiles){
|
||||
for(id = 0; id < MODELINFOSIZE; id++){
|
||||
CBaseModelInfo *mi = CModelInfo::GetModelInfo(id);
|
||||
if(mi){
|
||||
CColModel *col = mi->GetColModel();
|
||||
if(col && col->level == slot){
|
||||
mi->SetColModel(&nullCollision);
|
||||
CStreaming::UnregisterPointer(&mi->m_colModel, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
if(def->chunk){
|
||||
CStreaming::UnregisterPointer(&def->chunk, 1);
|
||||
cSmallHeap::msInstance.Free(def->chunk);
|
||||
def->chunk = nil;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
@ -156,29 +242,49 @@ CColStore::RemoveAllCollision(void)
|
||||
}
|
||||
|
||||
static bool bLoadAtSecondPosition;
|
||||
static CVector2D secondPosition;
|
||||
static CVector secondPosition;
|
||||
|
||||
void
|
||||
CColStore::AddCollisionNeededAtPosn(const CVector2D &pos)
|
||||
CColStore::AddCollisionNeededAtPosn(const CVector &pos)
|
||||
{
|
||||
bLoadAtSecondPosition = true;
|
||||
secondPosition = pos;
|
||||
}
|
||||
|
||||
void
|
||||
CColStore::LoadCollision(const CVector2D &pos)
|
||||
CColStore::LoadCollision(const CVector &pos, eLevelName level)
|
||||
{
|
||||
int i;
|
||||
|
||||
if(CStreaming::ms_disableStreaming)
|
||||
return;
|
||||
|
||||
if(level == LEVEL_GENERIC)
|
||||
level = PosLevel(pos);
|
||||
|
||||
eLevelName allowedLevel = (eLevelName)CTheScripts::AllowedCollision[0];
|
||||
if(allowedLevel == LEVEL_GENERIC)
|
||||
allowedLevel = (eLevelName)CTheScripts::AllowedCollision[1];
|
||||
|
||||
bool requestedSomething = false;
|
||||
|
||||
for(i = 1; i < COLSTORESIZE; i++){
|
||||
if(GetSlot(i) == nil)
|
||||
if(GetSlot(i) == nil || !DoScriptsWantThisIn(i))
|
||||
continue;
|
||||
|
||||
bool wantThisOne = false;
|
||||
|
||||
if(strcmp(GetColName(i), "indust") == 0){
|
||||
if(allowedLevel != LEVEL_GENERIC && level != LEVEL_INDUSTRIAL)
|
||||
wantThisOne = allowedLevel == LEVEL_INDUSTRIAL;
|
||||
else
|
||||
wantThisOne = level == LEVEL_INDUSTRIAL;
|
||||
}else if(GetBoundingBox(i).IsPointInside(LevelPos(level)))
|
||||
wantThisOne = true;
|
||||
else if(allowedLevel != LEVEL_GENERIC && GetBoundingBox(i).IsPointInside(LevelPos(allowedLevel)))
|
||||
wantThisOne = true;
|
||||
|
||||
/* // LCS: removed
|
||||
if(GetBoundingBox(i).IsPointInside(pos) ||
|
||||
bLoadAtSecondPosition && GetBoundingBox(i).IsPointInside(secondPosition, -119.0f) ||
|
||||
strcmp(GetColName(i), "yacht") == 0){
|
||||
@ -203,28 +309,38 @@ CColStore::LoadCollision(const CVector2D &pos)
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
if(wantThisOne)
|
||||
if(wantThisOne){
|
||||
CStreaming::RequestCol(i, STREAMFLAGS_PRIORITY);
|
||||
else
|
||||
requestedSomething = true;
|
||||
}else
|
||||
CStreaming::RemoveCol(i);
|
||||
}
|
||||
if(requestedSomething){
|
||||
CTimer::Suspend();
|
||||
// BUG? request was done with priority but now loading non-priority?
|
||||
CStreaming::LoadAllRequestedModels(false);
|
||||
CGarages::SetupAnyGaragesForThisIsland();
|
||||
CTimer::Resume();
|
||||
}
|
||||
bLoadAtSecondPosition = false;
|
||||
}
|
||||
|
||||
void
|
||||
CColStore::RequestCollision(const CVector2D &pos)
|
||||
CColStore::RequestCollision(const CVector &pos)
|
||||
{
|
||||
int i;
|
||||
|
||||
for(i = 1; i < COLSTORESIZE; i++)
|
||||
if(GetSlot(i) && GetBoundingBox(i).IsPointInside(pos, -115.0f))
|
||||
if(GetSlot(i) && DoScriptsWantThisIn(i) && GetBoundingBox(i).IsPointInside(LevelPos(PosLevel(pos)), -115.0f))
|
||||
CStreaming::RequestCol(i, STREAMFLAGS_PRIORITY);
|
||||
}
|
||||
|
||||
void
|
||||
CColStore::EnsureCollisionIsInMemory(const CVector2D &pos)
|
||||
CColStore::EnsureCollisionIsInMemory(const CVector &pos)
|
||||
{
|
||||
/* // LCS: removed
|
||||
int i;
|
||||
|
||||
if(CStreaming::ms_disableStreaming)
|
||||
@ -240,16 +356,48 @@ CColStore::EnsureCollisionIsInMemory(const CVector2D &pos)
|
||||
CStreaming::LoadAllRequestedModels(false);
|
||||
CTimer::Resume();
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
bool
|
||||
CColStore::HasCollisionLoaded(const CVector2D &pos)
|
||||
CColStore::DoScriptsWantThisIn(int32 slot)
|
||||
{
|
||||
if(slot == 0)
|
||||
return false;
|
||||
ColDef *coldef = GetSlot(slot);
|
||||
if(coldef == nil)
|
||||
return false;
|
||||
if(strcmp(coldef->name, "fortstaunton") == 0)
|
||||
return !CTheScripts::IsFortStauntonDestroyed();
|
||||
if(strcmp(coldef->name, "fortdestroyed") == 0)
|
||||
return CTheScripts::IsFortStauntonDestroyed();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
CColStore::HasCollisionLoaded(eLevelName level)
|
||||
{
|
||||
int i;
|
||||
|
||||
const CVector &pos = LevelPos(level);
|
||||
for(i = 1; i < COLSTORESIZE; i++)
|
||||
if(GetSlot(i) && GetBoundingBox(i).IsPointInside(pos, -115.0f) &&
|
||||
if(GetSlot(i) && DoScriptsWantThisIn(i) &&
|
||||
(!CGeneral::faststricmp(GetColName(i), "indust") && level == LEVEL_INDUSTRIAL ||
|
||||
GetBoundingBox(i).IsPointInside(pos)) &&
|
||||
!GetSlot(i)->isLoaded)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
CColStore::HasCollisionLoaded(const CVector &pos)
|
||||
{
|
||||
return HasCollisionLoaded(PosLevel(pos));
|
||||
}
|
||||
|
||||
void
|
||||
CColStore::Load(bool onlyBB, CPool<ColDef> *pool)
|
||||
{
|
||||
ms_pColPool = pool;
|
||||
m_onlyBB = onlyBB;
|
||||
}
|
||||
|
@ -9,11 +9,13 @@ struct ColDef { // made up name
|
||||
char name[20];
|
||||
int16 minIndex;
|
||||
int16 maxIndex;
|
||||
void *chunk;
|
||||
};
|
||||
|
||||
class CColStore
|
||||
{
|
||||
static CPool<ColDef,ColDef> *ms_pColPool;
|
||||
static bool m_onlyBB;
|
||||
|
||||
public:
|
||||
static void Initialise(void);
|
||||
@ -25,15 +27,18 @@ public:
|
||||
static CRect &GetBoundingBox(int32 slot);
|
||||
static void IncludeModelIndex(int32 slot, int32 modelIndex);
|
||||
static bool LoadCol(int32 storeID, uint8 *buffer, int32 bufsize);
|
||||
static void LoadColCHK(int32 slot, void *data, void *chunk);
|
||||
static void RemoveCol(int32 slot);
|
||||
static void AddCollisionNeededAtPosn(const CVector2D &pos);
|
||||
static void AddCollisionNeededAtPosn(const CVector &pos);
|
||||
static void LoadAllCollision(void);
|
||||
static void RemoveAllCollision(void);
|
||||
static void LoadCollision(const CVector2D &pos);
|
||||
static void RequestCollision(const CVector2D &pos);
|
||||
static void EnsureCollisionIsInMemory(const CVector2D &pos);
|
||||
static bool HasCollisionLoaded(const CVector2D &pos);
|
||||
static bool HasCollisionLoaded(eLevelName level) { return true; }; // TODO
|
||||
static void LoadCollision(const CVector &pos, eLevelName level = LEVEL_GENERIC);
|
||||
static void RequestCollision(const CVector &pos);
|
||||
static void EnsureCollisionIsInMemory(const CVector &pos);
|
||||
static bool DoScriptsWantThisIn(int32 slot);
|
||||
static bool HasCollisionLoaded(eLevelName level);
|
||||
static bool HasCollisionLoaded(const CVector &pos);
|
||||
static void Load(bool, CPool<ColDef> *pool);
|
||||
|
||||
static ColDef *GetSlot(int slot) {
|
||||
assert(slot >= 0);
|
||||
|
@ -24,8 +24,6 @@
|
||||
#include "Camera.h"
|
||||
#include "ColStore.h"
|
||||
|
||||
//--MIAMI: file done
|
||||
|
||||
#ifdef VU_COLLISION
|
||||
#include "VuCollision.h"
|
||||
|
||||
@ -93,7 +91,7 @@ CCollision::Update(void)
|
||||
{
|
||||
}
|
||||
|
||||
//--MIAMI: unused
|
||||
// unused
|
||||
eLevelName
|
||||
GetCollisionInSectorList(CPtrList &list)
|
||||
{
|
||||
@ -110,7 +108,7 @@ GetCollisionInSectorList(CPtrList &list)
|
||||
return LEVEL_GENERIC;
|
||||
}
|
||||
|
||||
//--MIAMI: unused
|
||||
// unused
|
||||
// Get a level this sector is in based on collision models
|
||||
eLevelName
|
||||
GetCollisionInSector(CSector §)
|
||||
@ -880,7 +878,7 @@ CCollision::ProcessLineSphere(const CColLine &line, const CColSphere &sphere, CC
|
||||
return true;
|
||||
}
|
||||
|
||||
//--MIAMI: unused
|
||||
// unused
|
||||
bool
|
||||
CCollision::ProcessVerticalLineTriangle(const CColLine &line,
|
||||
const CompressedVector *verts, const CColTriangle &tri, const CColTrianglePlane &plane,
|
||||
@ -2101,12 +2099,12 @@ CCollision::DistToLine(const CVector *l0, const CVector *l1, const CVector *poin
|
||||
float dot = DotProduct(*point - *l0, *l1 - *l0);
|
||||
// Between 0 and len we're above the line.
|
||||
// if not, calculate distance to endpoint
|
||||
if(dot <= 0.0f)
|
||||
return (*point - *l0).Magnitude();
|
||||
if(dot >= lensq)
|
||||
return (*point - *l1).Magnitude();
|
||||
if(dot <= 0.0f) return (*point - *l0).Magnitude();
|
||||
if(dot >= lensq) return (*point - *l1).Magnitude();
|
||||
// distance to line
|
||||
return Sqrt((*point - *l0).MagnitudeSqr() - dot*dot/lensq);
|
||||
float distSqr = (*point - *l0).MagnitudeSqr() - dot * dot / lensq;
|
||||
if(distSqr <= 0.f) return 0.f;
|
||||
return Sqrt(distSqr);
|
||||
}
|
||||
|
||||
// same as above but also return the point on the line
|
||||
|
@ -1,10 +1,12 @@
|
||||
#include "common.h"
|
||||
|
||||
#include "main.h"
|
||||
#include "TempColModels.h"
|
||||
#include "Game.h"
|
||||
|
||||
// LCS: haven't yet checked the numbers but they probably haven't changed
|
||||
|
||||
CColModel CTempColModels::ms_colModelPed1;
|
||||
CColModel CTempColModels::ms_colModelPed2;
|
||||
CColModel CTempColModels::ms_colModelBBox;
|
||||
CColModel CTempColModels::ms_colModelBumper1;
|
||||
CColModel CTempColModels::ms_colModelWheel1;
|
||||
CColModel CTempColModels::ms_colModelPanel1;
|
||||
@ -15,7 +17,9 @@ CColModel CTempColModels::ms_colModelPedGroundHit;
|
||||
CColModel CTempColModels::ms_colModelBoot1;
|
||||
CColModel CTempColModels::ms_colModelDoor1;
|
||||
CColModel CTempColModels::ms_colModelBonnet1;
|
||||
CColModel CTempColModels::ms_colModelWeapon;
|
||||
CColModel CTempColModels::ms_colModelFerryDocked;
|
||||
|
||||
CTempColModels *gpTempColModels;
|
||||
|
||||
|
||||
CColSphere s_aPedSpheres[3];
|
||||
@ -33,6 +37,7 @@ CColSphere s_aBootSpheres[4];
|
||||
CColSphere s_aWheelSpheres[2];
|
||||
CColSphere s_aBodyPartSpheres1[2];
|
||||
CColSphere s_aBodyPartSpheres2[2];
|
||||
CColBox S_aFerryDockedBoxes[1];
|
||||
|
||||
void
|
||||
CTempColModels::Initialise(void)
|
||||
@ -43,12 +48,27 @@ CTempColModels::Initialise(void)
|
||||
colmodel.level = LEVEL_GENERIC;\
|
||||
colmodel.ownsCollisionVolumes = false;
|
||||
|
||||
int i;
|
||||
if(gMakeResources){
|
||||
if(gpTempColModels == nil){
|
||||
gpTempColModels = new CTempColModels;
|
||||
gpTempColModels->Initialise();
|
||||
return;
|
||||
}
|
||||
|
||||
ms_colModelBBox.boundingSphere.Set(2.0f, CVector(0.0f, 0.0f, 0.0f));
|
||||
ms_colModelBBox.boundingBox.Set(CVector(-2.0f, -2.0f, -2.0f), CVector(2.0f, 2.0f, 2.0f));
|
||||
ms_colModelBBox.level = LEVEL_GENERIC;
|
||||
|
||||
ms_colModelPed1.boundingSphere.Set(1.25f, CVector(0.0f, 0.0f, 0.0f));
|
||||
ms_colModelPed1.boundingBox.Set(CVector(-0.35f, -0.35f, -1.0f), CVector(0.35f, 0.35f, 0.9f));
|
||||
SET_COLMODEL_SPHERES(ms_colModelPed1, s_aPedSpheres);
|
||||
|
||||
ms_colModelWeapon.boundingSphere.Set(0.25f, CVector(0.0f, 0.0f, 0.0f));
|
||||
ms_colModelWeapon.boundingBox.Set(CVector(-0.25f, -0.25f, -0.25f), CVector(0.25f, 0.25f, 0.25f));
|
||||
}
|
||||
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(ms_colModelCutObj); i++) {
|
||||
ms_colModelCutObj[i].boundingSphere.Set(2.0f, CVector(0.0f, 0.0f, 0.0f));
|
||||
ms_colModelCutObj[i].boundingBox.Set(CVector(-2.0f, -2.0f, -2.0f), CVector(2.0f, 2.0f, 2.0f));
|
||||
@ -73,10 +93,6 @@ CTempColModels::Initialise(void)
|
||||
s_aPedSpheres[i].piece = 0;
|
||||
}
|
||||
|
||||
ms_colModelPed1.boundingSphere.Set(1.25f, CVector(0.0f, 0.0f, 0.0f));
|
||||
ms_colModelPed1.boundingBox.Set(CVector(-0.35f, -0.35f, -1.0f), CVector(0.35f, 0.35f, 0.9f));
|
||||
SET_COLMODEL_SPHERES(ms_colModelPed1, s_aPedSpheres);
|
||||
|
||||
// Ped 2 Spheres
|
||||
|
||||
s_aPed2Spheres[0].radius = 0.3f;
|
||||
@ -293,13 +309,47 @@ CTempColModels::Initialise(void)
|
||||
|
||||
SET_COLMODEL_SPHERES(ms_colModelBodyPart2, s_aBodyPartSpheres2);
|
||||
|
||||
ms_colModelWeapon.boundingSphere.radius = 0.25f;
|
||||
ms_colModelWeapon.boundingBox.min.x = -0.25f;
|
||||
ms_colModelWeapon.boundingBox.min.y = -0.25f;
|
||||
ms_colModelWeapon.boundingBox.min.z = -0.25f;
|
||||
ms_colModelWeapon.boundingBox.max.x = 0.25f;
|
||||
ms_colModelWeapon.boundingBox.max.y = 0.25f;
|
||||
ms_colModelWeapon.boundingBox.max.z = 0.25f;
|
||||
// Ferry Docked
|
||||
|
||||
S_aFerryDockedBoxes[0].Set(CVector(-6.3f, -22.78f, -2.0f), CVector(6.3f, 22.78f, 2.8f), SURFACE_THICK_METAL_PLATE, SURFACE_DEFAULT);
|
||||
|
||||
ms_colModelFerryDocked.boundingSphere.Set(35.0f, CVector(0.0f, -0.0f, 0.0f));
|
||||
ms_colModelFerryDocked.boundingBox.Set(S_aFerryDockedBoxes[0].min, S_aFerryDockedBoxes[0].max);
|
||||
ms_colModelFerryDocked.spheres = nil;
|
||||
ms_colModelFerryDocked.numSpheres = 0;
|
||||
ms_colModelFerryDocked.boxes = S_aFerryDockedBoxes;
|
||||
ms_colModelFerryDocked.numBoxes = ARRAY_SIZE(S_aFerryDockedBoxes);
|
||||
ms_colModelFerryDocked.level = LEVEL_GENERIC;
|
||||
|
||||
|
||||
#undef SET_COLMODEL_SPHERES
|
||||
}
|
||||
|
||||
void
|
||||
CTempColModels::Write(base::cRelocatableChunkWriter &writer)
|
||||
{
|
||||
writer.AllocateRaw(this, sizeof(*this), 0x10, false, true);
|
||||
|
||||
ms_colModelBBox.Write(writer, false);
|
||||
writer.AddPatch(&ms_colModelBBox);
|
||||
|
||||
ms_colModelPed1.Write(writer, false);
|
||||
writer.AddPatch(&ms_colModelPed1);
|
||||
|
||||
ms_colModelWeapon.Write(writer, false);
|
||||
writer.AddPatch(&ms_colModelWeapon);
|
||||
|
||||
for(int i = 0; i < ARRAY_SIZE(ms_colModelCutObj); i++)
|
||||
ms_colModelCutObj[i].Write(writer, true);
|
||||
ms_colModelPed2.Write(writer, true);
|
||||
ms_colModelPedGroundHit.Write(writer, true);
|
||||
ms_colModelDoor1.Write(writer, true);
|
||||
ms_colModelBumper1.Write(writer, true);
|
||||
ms_colModelPanel1.Write(writer, true);
|
||||
ms_colModelBonnet1.Write(writer, true);
|
||||
ms_colModelBoot1.Write(writer, true);
|
||||
ms_colModelWheel1.Write(writer, true);
|
||||
ms_colModelBodyPart1.Write(writer, true);
|
||||
ms_colModelBodyPart2.Write(writer, true);
|
||||
ms_colModelFerryDocked.Write(writer, true);
|
||||
}
|
||||
|
@ -1,13 +1,15 @@
|
||||
#pragma once
|
||||
|
||||
#include "Collision.h"
|
||||
#include "ColModel.h"
|
||||
|
||||
class CTempColModels
|
||||
{
|
||||
public:
|
||||
static CColModel ms_colModelPed1;
|
||||
CColModel ms_colModelPed1;
|
||||
CColModel ms_colModelBBox;
|
||||
CColModel ms_colModelWeapon;
|
||||
|
||||
static CColModel ms_colModelPed2;
|
||||
static CColModel ms_colModelBBox;
|
||||
static CColModel ms_colModelBumper1;
|
||||
static CColModel ms_colModelWheel1;
|
||||
static CColModel ms_colModelPanel1;
|
||||
@ -18,7 +20,10 @@ public:
|
||||
static CColModel ms_colModelBoot1;
|
||||
static CColModel ms_colModelDoor1;
|
||||
static CColModel ms_colModelBonnet1;
|
||||
static CColModel ms_colModelWeapon;
|
||||
static CColModel ms_colModelFerryDocked;
|
||||
|
||||
static void Initialise(void);
|
||||
void Initialise(void);
|
||||
void Write(base::cRelocatableChunkWriter &writer);
|
||||
};
|
||||
|
||||
extern CTempColModels *gpTempColModels;
|
||||
|
@ -6,8 +6,6 @@
|
||||
#include "Curves.h"
|
||||
#include "PathFind.h"
|
||||
|
||||
//--MIAMI: file done
|
||||
|
||||
void CAutoPilot::ModifySpeed(float speed)
|
||||
{
|
||||
m_fMaxTrafficSpeed = Max(0.01f, speed);
|
||||
|
@ -6,8 +6,6 @@
|
||||
#include "PathFind.h"
|
||||
#include "Stats.h"
|
||||
|
||||
//--MIAMI: file done
|
||||
|
||||
CEntity *CBridge::pLiftRoad;
|
||||
CEntity *CBridge::pLiftPart;
|
||||
CEntity *CBridge::pWeight;
|
||||
@ -163,3 +161,23 @@ bool CBridge::ThisIsABridgeObjectMovingUp(int index)
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
void CBridge::ForceBridgeState(uint8 state)
|
||||
{
|
||||
#ifdef GTA_BRIDGE
|
||||
State = state;
|
||||
switch (state)
|
||||
{
|
||||
case STATE_BRIDGE_LOCKED:
|
||||
case STATE_LIFT_PART_MOVING_DOWN:
|
||||
case STATE_LIFT_PART_ABOUT_TO_MOVE_UP:
|
||||
ThePaths.SetLinksBridgeLights(-330.0f, -230.0f, -700.0f, -588.0f, true);
|
||||
break;
|
||||
case STATE_BRIDGE_ALWAYS_UNLOCKED:
|
||||
ThePaths.SetLinksBridgeLights(-330.0f, -230.0f, -700.0f, -588.0f, false);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
}
|
@ -26,4 +26,5 @@ public:
|
||||
static bool ShouldLightsBeFlashing();
|
||||
static void FindBridgeEntities();
|
||||
static bool ThisIsABridgeObjectMovingUp(int);
|
||||
static void ForceBridgeState(uint8 state);
|
||||
};
|
||||
|
@ -23,8 +23,6 @@
|
||||
|
||||
#define DISTANCE_TO_SWITCH_DISTANCE_GOTO 20.0f
|
||||
|
||||
//--MIAMI: file done
|
||||
|
||||
float CCarAI::FindSwitchDistanceClose(CVehicle* pVehicle)
|
||||
{
|
||||
return pVehicle->AutoPilot.m_nSwitchDistance;
|
||||
@ -45,7 +43,7 @@ float CCarAI::FindSwitchDistanceFar(CVehicle* pVehicle)
|
||||
void CCarAI::BackToCruisingIfNoWantedLevel(CVehicle* pVehicle)
|
||||
{
|
||||
if (FindPlayerPed()->m_pWanted->m_bIgnoredByEveryone || pVehicle->bIsLawEnforcer &&
|
||||
(FindPlayerPed()->m_pWanted->m_nWantedLevel == 0 || FindPlayerPed()->m_pWanted->m_bIgnoredByCops || CCullZones::NoPolice())) {
|
||||
(FindPlayerPed()->m_pWanted->GetWantedLevel() == 0 || FindPlayerPed()->m_pWanted->m_bIgnoredByCops || CCullZones::NoPolice())) {
|
||||
CCarCtrl::JoinCarWithRoadSystem(pVehicle);
|
||||
pVehicle->AutoPilot.m_nCarMission = MISSION_CRUISE;
|
||||
pVehicle->AutoPilot.m_nDrivingStyle = DRIVINGSTYLE_STOP_FOR_CARS;
|
||||
@ -131,7 +129,7 @@ void CCarAI::UpdateCarAI(CVehicle* pVehicle)
|
||||
TellOccupantsToLeaveCar(pVehicle);
|
||||
pVehicle->AutoPilot.m_nCruiseSpeed = 0;
|
||||
pVehicle->AutoPilot.m_nCarMission = MISSION_NONE;
|
||||
if (FindPlayerPed()->m_pWanted->m_nWantedLevel <= 1)
|
||||
if (FindPlayerPed()->m_pWanted->GetWantedLevel() <= 1)
|
||||
pVehicle->m_bSirenOrAlarm = false;
|
||||
}
|
||||
}
|
||||
@ -173,7 +171,7 @@ void CCarAI::UpdateCarAI(CVehicle* pVehicle)
|
||||
TellOccupantsToLeaveCar(pVehicle);
|
||||
pVehicle->AutoPilot.m_nCruiseSpeed = 0;
|
||||
pVehicle->AutoPilot.m_nCarMission = MISSION_NONE;
|
||||
if (FindPlayerPed()->m_pWanted->m_nWantedLevel <= 1)
|
||||
if (FindPlayerPed()->m_pWanted->GetWantedLevel() <= 1)
|
||||
pVehicle->m_bSirenOrAlarm = false;
|
||||
}
|
||||
}
|
||||
@ -346,7 +344,7 @@ void CCarAI::UpdateCarAI(CVehicle* pVehicle)
|
||||
pVehicle->AutoPilot.m_nCarMission = MISSION_STOP_FOREVER;
|
||||
}
|
||||
if (distance > 70.0f || FindPlayerPed()->m_pWanted->m_bIgnoredByEveryone ||
|
||||
(FindPlayerPed()->m_pWanted->m_nWantedLevel == 0 || FindPlayerPed()->m_pWanted->m_bIgnoredByCops || CCullZones::NoPolice())) {
|
||||
(FindPlayerPed()->m_pWanted->GetWantedLevel() == 0 || FindPlayerPed()->m_pWanted->m_bIgnoredByCops || CCullZones::NoPolice())) {
|
||||
TellOccupantsToLeaveCar(pVehicle);
|
||||
pVehicle->AutoPilot.m_nCruiseSpeed = 0;
|
||||
pVehicle->AutoPilot.m_nCarMission = MISSION_STOP_FOREVER;
|
||||
@ -363,7 +361,7 @@ void CCarAI::UpdateCarAI(CVehicle* pVehicle)
|
||||
break;
|
||||
}
|
||||
default:
|
||||
if (pVehicle->bIsLawEnforcer && FindPlayerPed()->m_pWanted->m_nWantedLevel > 0 && !CCullZones::NoPolice()){
|
||||
if (pVehicle->bIsLawEnforcer && FindPlayerPed()->m_pWanted->GetWantedLevel() > 0 && !CCullZones::NoPolice()){
|
||||
if (ABS(FindPlayerCoors().x - pVehicle->GetPosition().x) > 10.0f ||
|
||||
ABS(FindPlayerCoors().y - pVehicle->GetPosition().y) > 10.0f){
|
||||
pVehicle->AutoPilot.m_nCruiseSpeed = FindPoliceCarSpeedForWantedLevel(pVehicle);
|
||||
@ -377,7 +375,7 @@ void CCarAI::UpdateCarAI(CVehicle* pVehicle)
|
||||
TellOccupantsToLeaveCar(pVehicle);
|
||||
pVehicle->AutoPilot.m_nCruiseSpeed = 0;
|
||||
pVehicle->AutoPilot.m_nCarMission = MISSION_NONE;
|
||||
if (FindPlayerPed()->m_pWanted->m_nWantedLevel <= 1)
|
||||
if (FindPlayerPed()->m_pWanted->GetWantedLevel() <= 1)
|
||||
pVehicle->m_bSirenOrAlarm = false;
|
||||
}
|
||||
}
|
||||
@ -390,7 +388,7 @@ void CCarAI::UpdateCarAI(CVehicle* pVehicle)
|
||||
pVehicle->AutoPilot.m_nCruiseSpeed = 0;
|
||||
break;
|
||||
}
|
||||
if (pVehicle->bIsLawEnforcer && FindPlayerPed()->m_pWanted->m_nWantedLevel >= 1 && CCullZones::PoliceAbandonCars()) {
|
||||
if (pVehicle->bIsLawEnforcer && FindPlayerPed()->m_pWanted->GetWantedLevel() >= 1 && CCullZones::PoliceAbandonCars()) {
|
||||
TellOccupantsToLeaveCar(pVehicle);
|
||||
pVehicle->AutoPilot.m_nCruiseSpeed = 0;
|
||||
pVehicle->AutoPilot.m_nCarMission = MISSION_NONE;
|
||||
@ -498,7 +496,7 @@ void CCarAI::UpdateCarAI(CVehicle* pVehicle)
|
||||
else
|
||||
pVehicle->AutoPilot.m_fCruiseSpeedMultiplier += change;
|
||||
|
||||
if (pVehicle->bIsLawEnforcer && FindPlayerPed()->m_pWanted->m_nWantedLevel > 0) {
|
||||
if (pVehicle->bIsLawEnforcer && FindPlayerPed()->m_pWanted->GetWantedLevel() > 0) {
|
||||
if (!FindPlayerVehicle() ||
|
||||
FindPlayerVehicle()->GetVehicleAppearance() == VEHICLE_APPEARANCE_CAR ||
|
||||
FindPlayerVehicle()->GetVehicleAppearance() == VEHICLE_APPEARANCE_BIKE) {
|
||||
@ -563,7 +561,7 @@ void CCarAI::AddPoliceCarOccupants(CVehicle* pVehicle)
|
||||
case MI_RHINO:
|
||||
case MI_BARRACKS:
|
||||
pVehicle->SetUpDriver();
|
||||
if (FindPlayerPed()->m_pWanted->m_nWantedLevel > 1)
|
||||
if (FindPlayerPed()->m_pWanted->GetWantedLevel() > 1)
|
||||
pVehicle->SetupPassenger(0);
|
||||
return;
|
||||
case MI_PREDATOR:
|
||||
@ -649,7 +647,7 @@ void CCarAI::TellCarToBlockOtherCar(CVehicle* pVehicle, CVehicle* pTarget)
|
||||
|
||||
uint8 CCarAI::FindPoliceCarMissionForWantedLevel()
|
||||
{
|
||||
switch (CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_pWanted->m_nWantedLevel){
|
||||
switch (CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_pWanted->GetWantedLevel()){
|
||||
case 0:
|
||||
case 1: return MISSION_BLOCKPLAYER_FARAWAY;
|
||||
case 2: return (CGeneral::GetRandomNumber() & 3) >= 3 ? MISSION_RAMPLAYER_FARAWAY : MISSION_BLOCKPLAYER_FARAWAY;
|
||||
@ -663,7 +661,7 @@ uint8 CCarAI::FindPoliceCarMissionForWantedLevel()
|
||||
|
||||
uint8 CCarAI::FindPoliceBoatMissionForWantedLevel()
|
||||
{
|
||||
switch (CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_pWanted->m_nWantedLevel) {
|
||||
switch (CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_pWanted->GetWantedLevel()) {
|
||||
case 0:
|
||||
case 1: return MISSION_BLOCKPLAYER_FARAWAY;
|
||||
case 2:
|
||||
@ -677,7 +675,7 @@ uint8 CCarAI::FindPoliceBoatMissionForWantedLevel()
|
||||
|
||||
int32 CCarAI::FindPoliceCarSpeedForWantedLevel(CVehicle* pVehicle)
|
||||
{
|
||||
switch (CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_pWanted->m_nWantedLevel) {
|
||||
switch (CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_pWanted->GetWantedLevel()) {
|
||||
case 0: return CGeneral::GetRandomNumberInRange(12, 16);
|
||||
case 1: return 25;
|
||||
case 2: return 34;
|
||||
@ -691,7 +689,7 @@ int32 CCarAI::FindPoliceCarSpeedForWantedLevel(CVehicle* pVehicle)
|
||||
|
||||
void CCarAI::MellowOutChaseSpeed(CVehicle* pVehicle)
|
||||
{
|
||||
if (CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_pWanted->m_nWantedLevel == 1){
|
||||
if (CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_pWanted->GetWantedLevel() == 1){
|
||||
float distanceToPlayer = (pVehicle->GetPosition() - FindPlayerCoors()).Magnitude();
|
||||
if (FindPlayerVehicle()){
|
||||
if (distanceToPlayer < 10.0f)
|
||||
@ -708,7 +706,7 @@ void CCarAI::MellowOutChaseSpeed(CVehicle* pVehicle)
|
||||
else
|
||||
pVehicle->AutoPilot.m_nCruiseSpeed = 25;
|
||||
}
|
||||
}else if (CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_pWanted->m_nWantedLevel == 2){
|
||||
}else if (CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_pWanted->GetWantedLevel() == 2){
|
||||
float distanceToPlayer = (pVehicle->GetPosition() - FindPlayerCoors()).Magnitude();
|
||||
if (FindPlayerVehicle()) {
|
||||
if (distanceToPlayer < 10.0f)
|
||||
@ -735,7 +733,7 @@ void CCarAI::MellowOutChaseSpeed(CVehicle* pVehicle)
|
||||
|
||||
void CCarAI::MellowOutChaseSpeedBoat(CVehicle* pVehicle)
|
||||
{
|
||||
switch (CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_pWanted->m_nWantedLevel) {
|
||||
switch (CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_pWanted->GetWantedLevel()) {
|
||||
case 0: pVehicle->AutoPilot.m_nCruiseSpeed = 8; break;
|
||||
case 1: pVehicle->AutoPilot.m_nCruiseSpeed = 10; break;
|
||||
case 2: pVehicle->AutoPilot.m_nCruiseSpeed = 15; break;
|
||||
|
@ -85,8 +85,6 @@
|
||||
#define MINIMAL_DISTANCE_TO_SPAWN_OFFSCREEN (40.0f)
|
||||
#define EXTENDED_RANGE_DESPAWN_MULTIPLIER (1.5f)
|
||||
|
||||
//--MIAMI: file done
|
||||
|
||||
bool CCarCtrl::bMadDriversCheat;
|
||||
int CCarCtrl::NumLawEnforcerCars;
|
||||
int CCarCtrl::NumAmbulancesOnDuty;
|
||||
@ -115,8 +113,6 @@ uint32 aCarsToKeepTime[MAX_CARS_TO_KEEP];
|
||||
|
||||
bool gbEmergencyVehiclesEnabled = true;
|
||||
|
||||
//--MIAMI: done except heli/plane functions
|
||||
|
||||
void
|
||||
CCarCtrl::GenerateRandomCars()
|
||||
{
|
||||
@ -156,12 +152,12 @@ CCarCtrl::GenerateOneRandomCar()
|
||||
CWanted* pWanted = pPlayer->m_pPed->m_pWanted;
|
||||
int carClass;
|
||||
int carModel;
|
||||
if (pWanted->m_nWantedLevel > 1 && NumLawEnforcerCars < pWanted->m_MaximumLawEnforcerVehicles &&
|
||||
if (pWanted->GetWantedLevel() > 1 && NumLawEnforcerCars < pWanted->m_MaximumLawEnforcerVehicles &&
|
||||
pWanted->m_CurrentCops < pWanted->m_MaxCops && !CGame::IsInInterior() && (
|
||||
pWanted->m_nWantedLevel > 3 ||
|
||||
pWanted->m_nWantedLevel > 2 && CTimer::GetTimeInMilliseconds() > LastTimeLawEnforcerCreated + 5000 ||
|
||||
pWanted->m_nWantedLevel > 1 && CTimer::GetTimeInMilliseconds() > LastTimeLawEnforcerCreated + 8000)) {
|
||||
/* Last pWanted->m_nWantedLevel > 1 is unnecessary but I added it for better readability. */
|
||||
pWanted->GetWantedLevel() > 3 ||
|
||||
pWanted->GetWantedLevel() > 2 && CTimer::GetTimeInMilliseconds() > LastTimeLawEnforcerCreated + 5000 ||
|
||||
pWanted->GetWantedLevel() > 1 && CTimer::GetTimeInMilliseconds() > LastTimeLawEnforcerCreated + 8000)) {
|
||||
/* Last pWanted->GetWantedLevel() > 1 is unnecessary but I added it for better readability. */
|
||||
/* Wouldn't be surprised it was there originally but was optimized out. */
|
||||
carClass = COPS;
|
||||
carModel = ChoosePoliceCarModel();
|
||||
@ -170,7 +166,7 @@ CCarCtrl::GenerateOneRandomCar()
|
||||
carModel = ChooseModel(&zone, &carClass);
|
||||
if (carModel == -1)
|
||||
return;
|
||||
if (!(carClass == COPS && pWanted->m_nWantedLevel >= 1))
|
||||
if (!(carClass == COPS && pWanted->GetWantedLevel() >= 1))
|
||||
/* All cop spawns with wanted level are handled by condition above. */
|
||||
/* In particular it means that cop cars never spawn if player has wanted level of 1. */
|
||||
break;
|
||||
@ -318,7 +314,7 @@ CCarCtrl::GenerateOneRandomCar()
|
||||
}
|
||||
if (!ThePaths.GenerateCarCreationCoors(vecTargetPos.x, vecTargetPos.y, frontX, frontY,
|
||||
preferredDistance, angleLimit, invertAngleLimitTest, &spawnPosition, &curNodeId, &nextNodeId,
|
||||
&positionBetweenNodes, carClass == COPS && pWanted->m_nWantedLevel >= 1))
|
||||
&positionBetweenNodes, carClass == COPS && pWanted->GetWantedLevel() >= 1))
|
||||
return;
|
||||
CPathNode* pCurNode = &ThePaths.m_pathNodes[curNodeId];
|
||||
CPathNode* pNextNode = &ThePaths.m_pathNodes[nextNodeId];
|
||||
@ -384,7 +380,7 @@ CCarCtrl::GenerateOneRandomCar()
|
||||
switch (carClass) {
|
||||
case COPS:
|
||||
pVehicle->AutoPilot.m_nTempAction = TEMPACT_NONE;
|
||||
if (CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_pWanted->m_nWantedLevel != 0){
|
||||
if (CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_pWanted->GetWantedLevel() != 0){
|
||||
pVehicle->AutoPilot.m_nCruiseSpeed = CCarAI::FindPoliceCarSpeedForWantedLevel(pVehicle);
|
||||
pVehicle->AutoPilot.m_fMaxTrafficSpeed = pVehicle->AutoPilot.m_nCruiseSpeed / 2;
|
||||
pVehicle->AutoPilot.m_nCarMission = CCarAI::FindPoliceCarMissionForWantedLevel();
|
||||
@ -3199,7 +3195,7 @@ void CCarCtrl::FindLinksToGoWithTheseNodes(CVehicle* pVehicle)
|
||||
|
||||
void CCarCtrl::GenerateEmergencyServicesCar(void)
|
||||
{
|
||||
if (FindPlayerPed()->m_pWanted->m_nWantedLevel > 3)
|
||||
if (FindPlayerPed()->m_pWanted->GetWantedLevel() > 3)
|
||||
return;
|
||||
if (CGame::IsInInterior())
|
||||
return;
|
||||
|
@ -2,8 +2,6 @@
|
||||
|
||||
#include "Curves.h"
|
||||
|
||||
//--MIAMI: file done
|
||||
|
||||
float CCurves::CalcSpeedScaleFactor(CVector* pPoint1, CVector* pPoint2, float dir1X, float dir1Y, float dir2X, float dir2Y)
|
||||
{
|
||||
CVector2D dir1(dir1X, dir1Y);
|
||||
|
@ -16,8 +16,6 @@
|
||||
#include "Vehicle.h"
|
||||
#include "GameLogic.h"
|
||||
|
||||
//--MIAMI: file done
|
||||
|
||||
#define FRENZY_ANY_PED -1
|
||||
#define FRENZY_ANY_CAR -2
|
||||
|
||||
|
@ -47,8 +47,6 @@ float CGameLogic::ShortCutDropOffOrientationForMission;
|
||||
bool CGameLogic::MissionDropOffReadyToBeUsed;
|
||||
char CGameLogic::mStoredPlayerOutfit[8] = "plr3";
|
||||
|
||||
//--MIAMI: file done
|
||||
|
||||
#define SHORTCUT_TAXI_COST (9)
|
||||
#define TOTAL_BUSTED_AUDIO (28)
|
||||
|
||||
@ -223,7 +221,7 @@ CGameLogic::Update()
|
||||
pPlayerInfo.m_WBState = WBSTATE_PLAYING;
|
||||
int takeMoney;
|
||||
|
||||
switch (pPlayerInfo.m_pPed->m_pWanted->m_nWantedLevel) {
|
||||
switch (pPlayerInfo.m_pPed->m_pWanted->GetWantedLevel()) {
|
||||
case 0:
|
||||
case 1:
|
||||
takeMoney = 100;
|
||||
|
@ -25,8 +25,6 @@
|
||||
#include "World.h"
|
||||
#include "VarConsole.h"
|
||||
|
||||
//--MIAMI: file done
|
||||
|
||||
#define CRUSHER_GARAGE_X1 (1135.5f)
|
||||
#define CRUSHER_GARAGE_Y1 (57.0f)
|
||||
#define CRUSHER_GARAGE_Z1 (-1.0f)
|
||||
@ -108,7 +106,7 @@ const int32 gaCarsToCollectInCraigsGarages[TOTAL_COLLECTCARS_GARAGES][TOTAL_COLL
|
||||
{ MI_VOODOO, MI_CUBAN, MI_CADDY, MI_BAGGAGE, MI_MRWHOOP, MI_PIZZABOY }
|
||||
};
|
||||
|
||||
const int32 gaCarsToCollectIn60Seconds[] = { MI_CHEETAH, MI_TAXI, MI_ESPERANT, MI_SENTINEL, MI_IDAHO }; // what is this?
|
||||
const int32 gaCarsToCollectIn60Seconds[] = { MI_CHEETAH, MI_TAXI, MI_ESPERANT, MI_SENTINEL, MI_IDAHO };
|
||||
|
||||
int32 CGarages::BankVansCollected;
|
||||
bool CGarages::BombsAreFree;
|
||||
@ -452,7 +450,7 @@ void CGarage::Update()
|
||||
m_eGarageState = GS_OPENING;
|
||||
DMAudio.PlayFrontEndSound(SOUND_GARAGE_OPENING, 1);
|
||||
bool bTakeMoney = false;
|
||||
if (FindPlayerPed()->m_pWanted->m_nWantedLevel != 0) {
|
||||
if (FindPlayerPed()->m_pWanted->GetWantedLevel() != 0) {
|
||||
bTakeMoney = true;
|
||||
FindPlayerPed()->m_pWanted->Suspend();
|
||||
}
|
||||
@ -504,7 +502,7 @@ void CGarage::Update()
|
||||
pos.x = CGeneral::GetRandomNumberInRange(m_fInfX + 0.5f, m_fSupX - 0.5f);
|
||||
pos.y = CGeneral::GetRandomNumberInRange(m_fInfY + 0.5f, m_fSupY - 0.5f);
|
||||
pos.z = CGeneral::GetRandomNumberInRange(m_fDoor1Z - 3.0f, m_fDoor1Z + 1.0f);
|
||||
CParticle::AddParticle(PARTICLE_GARAGEPAINT_SPRAY, pos, CVector(0.0f, 0.0f, 0.0f), nil, 0.0f, CVehicleModelInfo::ms_vehicleColourTable[colour1]);
|
||||
CParticle::AddParticle(PARTICLE_GARAGEPAINT_SPRAY, pos, CVector(0.0f, 0.0f, 0.0f), nil, 0.0f, CVehicleModelInfo::mspInfo->ms_vehicleColourTable[colour1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1827,7 +1825,7 @@ void CGarage::FindDoorsEntities()
|
||||
}
|
||||
}
|
||||
if (m_pDoor1 && m_pDoor2) {
|
||||
if (m_pDoor1->GetModelIndex() != MI_LCS_GARAGEDOOR39 && m_pDoor1->GetModelIndex() != MI_LCS_GARAGEDOOR40) {
|
||||
if (m_pDoor1->GetModelIndex() != MI_CRUSHERBODY && m_pDoor1->GetModelIndex() != MI_CRUSHERLID) {
|
||||
CVector2D vecDoor1ToGarage(m_pDoor1->GetPosition().x - GetGarageCenterX(), m_pDoor1->GetPosition().y - GetGarageCenterY());
|
||||
CVector2D vecDoor2ToGarage(m_pDoor2->GetPosition().x - GetGarageCenterX(), m_pDoor2->GetPosition().y - GetGarageCenterY());
|
||||
if (DotProduct2D(vecDoor1ToGarage, vecDoor2ToGarage) > 0.0f) {
|
||||
@ -2411,44 +2409,83 @@ void CGarages::Load(uint8* buf, uint32 size)
|
||||
bool
|
||||
CGarages::IsModelIndexADoor(uint32 id)
|
||||
{
|
||||
return id == MI_LCS_GARAGEDOOR01 ||
|
||||
id == MI_LCS_GARAGEDOOR02 ||
|
||||
id == MI_LCS_GARAGEDOOR03 ||
|
||||
id == MI_LCS_GARAGEDOOR04 ||
|
||||
id == MI_LCS_GARAGEDOOR05 ||
|
||||
id == MI_LCS_GARAGEDOOR06 ||
|
||||
id == MI_LCS_GARAGEDOOR07 ||
|
||||
id == MI_LCS_GARAGEDOOR08 ||
|
||||
id == MI_LCS_GARAGEDOOR09 ||
|
||||
id == MI_LCS_GARAGEDOOR10 ||
|
||||
id == MI_LCS_GARAGEDOOR11 ||
|
||||
id == MI_LCS_GARAGEDOOR12 ||
|
||||
id == MI_LCS_GARAGEDOOR13 ||
|
||||
id == MI_LCS_GARAGEDOOR14 ||
|
||||
id == MI_LCS_GARAGEDOOR15 ||
|
||||
id == MI_LCS_GARAGEDOOR16 ||
|
||||
id == MI_LCS_GARAGEDOOR17 ||
|
||||
id == MI_LCS_GARAGEDOOR18 ||
|
||||
id == MI_LCS_GARAGEDOOR19 ||
|
||||
id == MI_LCS_GARAGEDOOR20 ||
|
||||
id == MI_LCS_GARAGEDOOR21 ||
|
||||
id == MI_LCS_GARAGEDOOR22 ||
|
||||
id == MI_LCS_GARAGEDOOR23 ||
|
||||
id == MI_LCS_GARAGEDOOR24 ||
|
||||
id == MI_LCS_GARAGEDOOR25 ||
|
||||
id == MI_LCS_GARAGEDOOR26 ||
|
||||
id == MI_LCS_GARAGEDOOR27 ||
|
||||
id == MI_LCS_GARAGEDOOR28 ||
|
||||
id == MI_LCS_GARAGEDOOR29 ||
|
||||
id == MI_LCS_GARAGEDOOR30 ||
|
||||
id == MI_LCS_GARAGEDOOR31 ||
|
||||
id == MI_LCS_GARAGEDOOR32 ||
|
||||
id == MI_LCS_GARAGEDOOR33 ||
|
||||
id == MI_LCS_GARAGEDOOR34 ||
|
||||
id == MI_LCS_GARAGEDOOR35 ||
|
||||
id == MI_LCS_GARAGEDOOR36 ||
|
||||
id == MI_LCS_GARAGEDOOR37 ||
|
||||
id == MI_LCS_GARAGEDOOR38 ||
|
||||
id == MI_LCS_GARAGEDOOR39 ||
|
||||
id == MI_LCS_GARAGEDOOR40;
|
||||
return id == MI_GARAGEDOOR1 ||
|
||||
id == MI_GARAGEDOOR17 ||
|
||||
id == MI_GARAGEDOOR27 ||
|
||||
id == MI_GARAGEDOOR28 ||
|
||||
id == MI_GARAGEDOOR29 ||
|
||||
id == MI_GARAGEDOOR30 ||
|
||||
id == MI_GARAGEDOOR31 ||
|
||||
id == MI_GARAGEDOOR32 ||
|
||||
id == MI_GARAGEDOOR33 ||
|
||||
id == MI_GARAGEDOOR34 ||
|
||||
id == MI_GARAGEDOOR35 ||
|
||||
id == MI_GARAGEDOOR36 ||
|
||||
id == MI_GARAGEDOOR37 ||
|
||||
id == MI_GARAGEDOOR38 ||
|
||||
id == MI_GARAGEDOOR39 ||
|
||||
id == MI_CRUSHERBODY ||
|
||||
id == MI_CRUSHERLID ||
|
||||
id == MI_GARAGEDOOR2 ||
|
||||
id == MI_GARAGEDOOR3 ||
|
||||
id == MI_GARAGEDOOR4 ||
|
||||
id == MI_GARAGEDOOR5 ||
|
||||
id == MI_GARAGEDOOR6 ||
|
||||
id == MI_GARAGEDOOR7 ||
|
||||
id == MI_GARAGEDOOR9 ||
|
||||
id == MI_GARAGEDOOR10 ||
|
||||
id == MI_GARAGEDOOR11 ||
|
||||
id == MI_GARAGEDOOR12 ||
|
||||
id == MI_GARAGEDOOR13 ||
|
||||
id == MI_GARAGEDOOR14 ||
|
||||
id == MI_GARAGEDOOR15 ||
|
||||
id == MI_GARAGEDOOR16 ||
|
||||
id == MI_GARAGEDOOR18 ||
|
||||
id == MI_GARAGEDOOR19 ||
|
||||
id == MI_GARAGEDOOR20 ||
|
||||
id == MI_GARAGEDOOR21 ||
|
||||
id == MI_GARAGEDOOR22 ||
|
||||
id == MI_GARAGEDOOR23 ||
|
||||
id == MI_GARAGEDOOR24 ||
|
||||
id == MI_GARAGEDOOR25 ||
|
||||
id == MI_GARAGEDOOR26 ||
|
||||
id == MI_DOOR2_SJL;
|
||||
}
|
||||
|
||||
void CGarages::StopCarFromBlowingUp(CAutomobile* pCar)
|
||||
{
|
||||
pCar->m_fFireBlowUpTimer = 0.0f;
|
||||
pCar->m_fHealth = Max(pCar->m_fHealth, 300.0f);
|
||||
pCar->Damage.SetEngineStatus(Max(pCar->Damage.GetEngineStatus(), 275));
|
||||
}
|
||||
|
||||
bool CGarage::Does60SecondsNeedThisCarAtAll(int mi)
|
||||
{
|
||||
for (int i = 0; i < ARRAY_SIZE(gaCarsToCollectIn60Seconds); i++) {
|
||||
if (gaCarsToCollectIn60Seconds[i] == mi)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CGarage::Does60SecondsNeedThisCar(int mi)
|
||||
{
|
||||
for (int i = 0; i < ARRAY_SIZE(gaCarsToCollectIn60Seconds); i++) {
|
||||
if (gaCarsToCollectIn60Seconds[i] == mi)
|
||||
return m_bCollectedCarsState & BIT(i);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void CGarage::MarkThisCarAsCollectedFor60Seconds(int mi)
|
||||
{
|
||||
for (int i = 0; i < ARRAY_SIZE(gaCarsToCollectIn60Seconds); i++) {
|
||||
if (gaCarsToCollectIn60Seconds[i] == mi)
|
||||
m_bCollectedCarsState |= BIT(i);
|
||||
}
|
||||
}
|
||||
|
||||
bool CGarage::IsPlayerEntirelyInsideGarage()
|
||||
{
|
||||
return IsEntityEntirelyInside3D(FindPlayerVehicle() ? (CEntity*)FindPlayerVehicle() : (CEntity*)FindPlayerPed(), 0.0f);
|
||||
}
|
||||
|
@ -1,11 +1,10 @@
|
||||
#pragma once
|
||||
#include "Automobile.h"
|
||||
#include "audio_enums.h"
|
||||
#include "Camera.h"
|
||||
#include "config.h"
|
||||
#include "Lists.h"
|
||||
|
||||
class CVehicle;
|
||||
class CCamera;
|
||||
|
||||
enum eGarageState
|
||||
{
|
||||
@ -183,6 +182,10 @@ public:
|
||||
void FindDoorsEntities();
|
||||
void FindDoorsEntitiesSectorList(CPtrList&, bool);
|
||||
void PlayerArrestedOrDied();
|
||||
bool Does60SecondsNeedThisCarAtAll(int mi);
|
||||
bool Does60SecondsNeedThisCar(int mi);
|
||||
void MarkThisCarAsCollectedFor60Seconds(int mi);
|
||||
bool IsPlayerEntirelyInsideGarage();
|
||||
|
||||
bool IsPointInsideGarage(CVector);
|
||||
bool IsPointInsideGarage(CVector, float);
|
||||
@ -255,6 +258,7 @@ public:
|
||||
static bool IsModelIndexADoor(uint32 id);
|
||||
static void SetFreeBombs(bool bValue) { BombsAreFree = bValue; }
|
||||
static void SetFreeResprays(bool bValue) { RespraysAreFree = bValue; }
|
||||
static void StopCarFromBlowingUp(CAutomobile*);
|
||||
static void SetMaxNumStoredCarsForGarage(int16 garage, uint8 num) { aGarages[garage].m_nMaxStoredCars = num; }
|
||||
|
||||
static bool IsCarSprayable(CVehicle*);
|
||||
@ -293,4 +297,6 @@ public:
|
||||
}
|
||||
static bool IsThisGarageTypeSafehouse(uint8 type) { return FindSafeHouseIndexForGarageType(type) >= 0; }
|
||||
|
||||
static void SetupAnyGaragesForThisIsland(void) {} // TODO(LCS)
|
||||
|
||||
};
|
||||
|
@ -9,14 +9,12 @@
|
||||
#include "OnscreenTimer.h"
|
||||
#include "Camera.h"
|
||||
|
||||
// --MIAMI: file done
|
||||
|
||||
void COnscreenTimer::Init() {
|
||||
m_bDisabled = false;
|
||||
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;
|
||||
}
|
||||
|
||||
@ -26,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;
|
||||
}
|
||||
|
||||
@ -94,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;
|
||||
}
|
||||
@ -116,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;
|
||||
}
|
||||
|
@ -8,8 +8,6 @@
|
||||
#include "Lines.h" // for debug
|
||||
#include "PathFind.h"
|
||||
|
||||
//--MIAMI: file done except mobile unused function
|
||||
|
||||
bool gbShowPedPaths;
|
||||
bool gbShowCarPaths;
|
||||
bool gbShowCarPathsLinks;
|
||||
@ -340,17 +338,17 @@ CPathFind::StoreNodeInfoCar(int16 id, int16 node, int8 type, int8 next, int16 x,
|
||||
InfoForTileCars[i].x = x/16.0f;
|
||||
InfoForTileCars[i].y = y/16.0f;
|
||||
InfoForTileCars[i].z = z/16.0f;
|
||||
InfoForTilePeds[i].width = 8.0f*Min(width, 15.0f);
|
||||
InfoForTileCars[i].width = 8.0f*Min(width, 15.0f);
|
||||
InfoForTileCars[i].numLeftLanes = numLeft;
|
||||
InfoForTileCars[i].numRightLanes = numRight;
|
||||
InfoForTilePeds[i].crossing = false;
|
||||
InfoForTilePeds[i].speedLimit = 0;
|
||||
InfoForTilePeds[i].roadBlock = false;
|
||||
InfoForTilePeds[i].disabled = false;
|
||||
InfoForTilePeds[i].waterPath = false;
|
||||
InfoForTilePeds[i].onlySmallBoats = false;
|
||||
InfoForTilePeds[i].betweenLevels = false;
|
||||
InfoForTilePeds[i].spawnRate = Min(spawnRate, 15);
|
||||
InfoForTileCars[i].crossing = false;
|
||||
InfoForTileCars[i].speedLimit = 0;
|
||||
InfoForTileCars[i].roadBlock = false;
|
||||
InfoForTileCars[i].disabled = false;
|
||||
InfoForTileCars[i].waterPath = false;
|
||||
InfoForTileCars[i].onlySmallBoats = false;
|
||||
InfoForTileCars[i].betweenLevels = false;
|
||||
InfoForTileCars[i].spawnRate = Min(spawnRate, 15);
|
||||
|
||||
if(node == 11)
|
||||
InfoForTileCars[id*12].SwapConnectionsToBeRightWayRound();
|
||||
@ -1765,18 +1763,18 @@ CPathFind::TestCoorsCloseness(CVector target, uint8 type, CVector start)
|
||||
float dist;
|
||||
|
||||
if(type == PATH_CAR)
|
||||
DoPathSearch(type, start, -1, target, pNodeList, &DummyResult, 32, nil, &dist, 999999.88f, -1);
|
||||
DoPathSearch(type, start, -1, target, pNodeList, &DummyResult, 32, nil, &dist, 170.0f, -1);
|
||||
else
|
||||
DoPathSearch(type, start, -1, target, nil, &DummyResult2, 0, nil, &dist, 50.0f, -1);
|
||||
#ifdef FIX_BUGS
|
||||
// dist has GenerationDistMultiplier as a factor, so our reference dist should have it too
|
||||
if(type == PATH_CAR)
|
||||
return dist < 150.0f*TheCamera.GenerationDistMultiplier;
|
||||
return dist < 180.0f*TheCamera.GenerationDistMultiplier;
|
||||
else
|
||||
return dist < 100.0f*TheCamera.GenerationDistMultiplier;
|
||||
#else
|
||||
if(type == PATH_CAR)
|
||||
return dist < 150.0f;
|
||||
return dist < 180.0f;
|
||||
else
|
||||
return dist < 100.0f;
|
||||
#endif
|
||||
|
@ -17,8 +17,6 @@
|
||||
#include "Replay.h"
|
||||
#endif
|
||||
|
||||
// --MIAMI: file done
|
||||
|
||||
CPhoneInfo gPhoneInfo;
|
||||
|
||||
bool CPhoneInfo::bDisplayingPhoneMessage; // is phone picked up
|
||||
|
@ -34,8 +34,6 @@
|
||||
#include "Messages.h"
|
||||
#include "Streaming.h"
|
||||
|
||||
// --MIAMI: file done
|
||||
|
||||
CPickup CPickups::aPickUps[NUMPICKUPS];
|
||||
int16 CPickups::NumMessages;
|
||||
int32 CPickups::aPickUpsCollected[NUMCOLLECTEDPICKUPS];
|
||||
@ -278,7 +276,7 @@ CPickup::CanBePickedUp(CPlayerPed *player, int playerId)
|
||||
bool cannotBePickedUp =
|
||||
(m_pObject->GetModelIndex() == MI_PICKUP_BODYARMOUR && player->m_fArmour > CWorld::Players[playerId].m_nMaxArmour - 0.5f)
|
||||
|| (m_pObject->GetModelIndex() == MI_PICKUP_HEALTH && player->m_fHealth > CWorld::Players[playerId].m_nMaxHealth - 0.5f)
|
||||
|| (m_pObject->GetModelIndex() == MI_PICKUP_BRIBE && player->m_pWanted->m_nWantedLevel == 0)
|
||||
|| (m_pObject->GetModelIndex() == MI_PICKUP_BRIBE && player->m_pWanted->GetWantedLevel() == 0)
|
||||
|| (m_pObject->GetModelIndex() == MI_PICKUP_KILLFRENZY && (CTheScripts::IsPlayerOnAMission() || CDarkel::FrenzyOnGoing() || !CGame::nastyGame));
|
||||
return !cannotBePickedUp;
|
||||
}
|
||||
@ -784,7 +782,7 @@ CPickups::GivePlayerGoodiesWithPickUpMI(int16 modelIndex, int playerIndex)
|
||||
DMAudio.PlayFrontEndSound(SOUND_PICKUP_BONUS, 0);
|
||||
return true;
|
||||
} else if (modelIndex == MI_PICKUP_BRIBE) {
|
||||
int32 level = Max(FindPlayerPed()->m_pWanted->m_nWantedLevel - 1, 0);
|
||||
int32 level = Max(FindPlayerPed()->m_pWanted->GetWantedLevel() - 1, 0);
|
||||
player->SetWantedLevel(level);
|
||||
DMAudio.PlayFrontEndSound(SOUND_PICKUP_BONUS, 0);
|
||||
return true;
|
||||
@ -1578,7 +1576,6 @@ CPacManPickups::ResetPowerPillsCarriedByPlayer()
|
||||
{
|
||||
}
|
||||
|
||||
// --MIAMI: Done
|
||||
void
|
||||
CPed::CreateDeadPedMoney(void)
|
||||
{
|
||||
@ -1599,7 +1596,6 @@ CPed::CreateDeadPedMoney(void)
|
||||
m_nPedMoney = 0;
|
||||
}
|
||||
|
||||
// --MIAMI: Done
|
||||
void
|
||||
CPed::CreateDeadPedWeaponPickups(void)
|
||||
{
|
||||
@ -1625,7 +1621,6 @@ CPed::CreateDeadPedWeaponPickups(void)
|
||||
ClearWeapons();
|
||||
}
|
||||
|
||||
// --MIAMI: Done
|
||||
void
|
||||
CPed::CreateDeadPedPickupCoors(float *x, float *y, float *z)
|
||||
{
|
||||
|
@ -147,7 +147,7 @@ public:
|
||||
|
||||
class CPacManPickups
|
||||
{
|
||||
friend CPacManPickup;
|
||||
friend class CPacManPickup;
|
||||
|
||||
static CPacManPickup aPMPickUps[NUMPACMANPICKUPS];
|
||||
static CVector LastPickUpCoors;
|
||||
|
@ -10,8 +10,6 @@
|
||||
#include "VehicleModelInfo.h"
|
||||
#include "World.h"
|
||||
|
||||
//--MIAMI: file done
|
||||
|
||||
uint16 CRecordDataForGame::RecordingState;
|
||||
|
||||
void CRecordDataForGame::Init(void)
|
||||
|
@ -9,9 +9,7 @@
|
||||
#include "PlayerInfo.h"
|
||||
#include "Vehicle.h"
|
||||
|
||||
//--MIAMI: file done
|
||||
|
||||
void
|
||||
CVehicle*
|
||||
CRemote::GivePlayerRemoteControlledCar(float x, float y, float z, float rot, uint16 model)
|
||||
{
|
||||
CAutomobile *car = new CAutomobile(model, MISSION_VEHICLE);
|
||||
@ -42,6 +40,7 @@ CRemote::GivePlayerRemoteControlledCar(float x, float y, float z, float rot, uin
|
||||
TheCamera.SetZoomValueCamStringScript(0);
|
||||
} else
|
||||
TheCamera.TakeControl(car, CCam::MODE_BEHINDCAR, INTERPOLATION, CAMCONTROL_SCRIPT);
|
||||
return car;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -3,6 +3,6 @@
|
||||
class CRemote
|
||||
{
|
||||
public:
|
||||
static void GivePlayerRemoteControlledCar(float, float, float, float, uint16);
|
||||
static CVehicle* GivePlayerRemoteControlledCar(float, float, float, float, uint16);
|
||||
static void TakeRemoteControlledCarFromPlayer(bool blowUp = true);
|
||||
};
|
||||
|
@ -53,8 +53,6 @@
|
||||
#include "Fluff.h"
|
||||
#include "WaterCreatures.h"
|
||||
|
||||
//--MIAMI: file done
|
||||
|
||||
uint8 CReplay::Mode;
|
||||
CAddressInReplayBuffer CReplay::Record;
|
||||
CAddressInReplayBuffer CReplay::Playback;
|
||||
|
@ -4,8 +4,6 @@
|
||||
#include "Zones.h"
|
||||
#include "PathFind.h"
|
||||
|
||||
//--MIAMI: file done
|
||||
|
||||
uint8 CRestart::OverrideHospitalLevel;
|
||||
uint8 CRestart::OverridePoliceStationLevel;
|
||||
bool CRestart::bFadeInAfterNextArrest;
|
||||
|
@ -16,8 +16,6 @@
|
||||
#include "General.h"
|
||||
#include "Object.h"
|
||||
|
||||
//--MIAMI: file done
|
||||
|
||||
#define ROADBLOCKDIST (90.0f)
|
||||
#define ROADBLOCK_OBJECT_WIDTH (4.0f)
|
||||
|
||||
@ -57,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();
|
||||
|
@ -20,8 +20,6 @@
|
||||
#include "WeaponInfo.h"
|
||||
#include "World.h"
|
||||
|
||||
//--MIAMI: file done
|
||||
|
||||
bool CSceneEdit::m_bEditOn;
|
||||
int32 CSceneEdit::m_bCameraFollowActor;
|
||||
bool CSceneEdit::m_bRecording;
|
||||
|
@ -11,6 +11,7 @@
|
||||
#include "CivilianPed.h"
|
||||
#include "Clock.h"
|
||||
#include "CopPed.h"
|
||||
#include "Coronas.h"
|
||||
#include "Debug.h"
|
||||
#include "DMAudio.h"
|
||||
#include "EmergencyPed.h"
|
||||
@ -49,13 +50,12 @@
|
||||
#include "Timecycle.h"
|
||||
#include "TxdStore.h"
|
||||
#include "Bike.h"
|
||||
#include "memoryManager.h"
|
||||
#include "smallHeap.h"
|
||||
#ifdef USE_ADVANCED_SCRIPT_DEBUG_OUTPUT
|
||||
#include <stdarg.h>
|
||||
#endif
|
||||
|
||||
//--LCS: file done except TODOs and command table
|
||||
|
||||
uint8* CTheScripts::ScriptSpace;
|
||||
CRunningScript CTheScripts::ScriptsArray[MAX_NUM_SCRIPTS];
|
||||
intro_text_line CTheScripts::IntroTextLines[MAX_NUM_INTRO_TEXT_LINES];
|
||||
@ -99,7 +99,7 @@ uint16 CTheScripts::NumberOfExclusiveMissionScripts;
|
||||
bool CTheScripts::bPlayerHasMetDebbieHarry;
|
||||
bool CTheScripts::bPlayerIsInTheStatium;
|
||||
int CTheScripts::AllowedCollision[MAX_ALLOWED_COLLISIONS];
|
||||
bool CTheScripts::FSDestroyedFlag;
|
||||
int CTheScripts::FSDestroyedFlag;
|
||||
short* CTheScripts::SavedVarIndices;
|
||||
int CTheScripts::NumSaveVars;
|
||||
int gScriptsFile = -1;
|
||||
@ -108,6 +108,9 @@ bool CTheScripts::InTheScripts;
|
||||
CRunningScript* pCurrent;
|
||||
uint16 CTheScripts::NumTrueGlobals;
|
||||
uint16 CTheScripts::MostGlobals;
|
||||
CVector gVectorSetInLua;
|
||||
int CTheScripts::NextScriptCoronaID;
|
||||
base::cSList<script_corona> CTheScripts::mCoronas;
|
||||
|
||||
#ifdef MISSION_REPLAY
|
||||
|
||||
@ -423,7 +426,7 @@ const tScriptCommandData commands[] = {
|
||||
REGISTER_COMMAND(COMMAND_ADD_SCORE, INPUT_ARGUMENTS(ARGTYPE_INT, ARGTYPE_INT, ), OUTPUT_ARGUMENTS(), false, -1, ""),
|
||||
REGISTER_COMMAND(COMMAND_IS_SCORE_GREATER, INPUT_ARGUMENTS(ARGTYPE_INT, ARGTYPE_INT, ), OUTPUT_ARGUMENTS(), true, -1, ""),
|
||||
REGISTER_COMMAND(COMMAND_STORE_SCORE, INPUT_ARGUMENTS(ARGTYPE_INT, ), OUTPUT_ARGUMENTS(ARGTYPE_INT, ), false, -1, ""),
|
||||
REGISTER_COMMAND(COMMAND_GIVE_REMOTE_CONTROLLED_CAR_TO_PLAYER, INPUT_ARGUMENTS(ARGTYPE_INT, ARGTYPE_FLOAT, ARGTYPE_FLOAT, ARGTYPE_FLOAT, ARGTYPE_FLOAT, ), OUTPUT_ARGUMENTS(), false, -1, ""),
|
||||
REGISTER_COMMAND(COMMAND_GIVE_REMOTE_CONTROLLED_CAR_TO_PLAYER, INPUT_ARGUMENTS(ARGTYPE_INT, ARGTYPE_FLOAT, ARGTYPE_FLOAT, ARGTYPE_FLOAT, ARGTYPE_FLOAT, ), OUTPUT_ARGUMENTS(ARGTYPE_INT, ), false, -1, ""),
|
||||
REGISTER_COMMAND(COMMAND_ALTER_WANTED_LEVEL, INPUT_ARGUMENTS(ARGTYPE_INT, ARGTYPE_INT, ), OUTPUT_ARGUMENTS(), false, -1, ""),
|
||||
REGISTER_COMMAND(COMMAND_ALTER_WANTED_LEVEL_NO_DROP, INPUT_ARGUMENTS(ARGTYPE_INT, ARGTYPE_INT, ), OUTPUT_ARGUMENTS(), false, -1, ""),
|
||||
REGISTER_COMMAND(COMMAND_IS_WANTED_LEVEL_GREATER, INPUT_ARGUMENTS(ARGTYPE_INT, ARGTYPE_INT, ), OUTPUT_ARGUMENTS(), true, -1, ""),
|
||||
@ -2137,9 +2140,7 @@ void CMissionCleanup::Process()
|
||||
default:
|
||||
break;
|
||||
}
|
||||
m_sEntities[i].id = 0;
|
||||
m_sEntities[i].type = CLEANUP_UNUSED;
|
||||
m_nCount--;
|
||||
RemoveEntityFromList(m_sEntities[i].id, m_sEntities[i].type);
|
||||
}
|
||||
for (int i = 1; i < NUMSTREAMINFO; i++) {
|
||||
if (CStreaming::IsScriptOwnedModel(i))
|
||||
@ -2514,7 +2515,7 @@ int32* GetPointerToScriptVariable(CRunningScript* pScript, uint32* pIp)
|
||||
return &pScript->m_anLocalVariables[NUM_LOCAL_VARS + 8 + (type - ARGUMENT_TIMER)];
|
||||
}
|
||||
script_assert(false && "wrong type for variable");
|
||||
return nil;
|
||||
return &pScript->m_anLocalVariables[pScript->m_nLocalsPointer + (type - ARGUMENT_LOCAL)];
|
||||
}
|
||||
|
||||
int32 *CRunningScript::GetPointerToScriptVariable(uint32* pIp, int16 type)
|
||||
@ -2621,6 +2622,14 @@ bool CTheScripts::Init(bool loaddata)
|
||||
memset(&UsedObjectArray[i].name, 0, sizeof(UsedObjectArray[i].name));
|
||||
UsedObjectArray[i].index = 0;
|
||||
}
|
||||
#if defined FIX_BUGS || (!defined GTA_PS2 && !defined GTA_PSP)
|
||||
for (base::cSList<script_corona>::tSItem* i = CTheScripts::mCoronas.first; i;) {
|
||||
base::cSList<script_corona>::tSItem* next = i->next;
|
||||
delete i;
|
||||
i = next;
|
||||
}
|
||||
CTheScripts::mCoronas.first = nil;
|
||||
#endif
|
||||
NumberOfUsedObjects = 0;
|
||||
if (ScriptSpace)
|
||||
Shutdown();
|
||||
@ -2633,7 +2642,8 @@ bool CTheScripts::Init(bool loaddata)
|
||||
CFileMgr::Read(mainf, (char*)&MainScriptSize, sizeof(MainScriptSize));
|
||||
int nLargestMissionSize = 0;
|
||||
CFileMgr::Read(mainf, (char*)&nLargestMissionSize, sizeof(nLargestMissionSize));
|
||||
// some cSmallHeap shit - TODO
|
||||
if (!cSmallHeap::msInstance.IsLocked())
|
||||
cSmallHeap::msInstance.Lock();
|
||||
ScriptSpace = (uint8*)base::cMainMemoryManager::Instance()->Allocate(MainScriptSize + nLargestMissionSize);
|
||||
memset(ScriptSpace, 0, MainScriptSize + nLargestMissionSize);
|
||||
CFileMgr::Read(mainf, (char*)ScriptSpace, MainScriptSize);
|
||||
@ -2773,8 +2783,6 @@ void CTheScripts::Process()
|
||||
UseTextCommands = 0;
|
||||
}
|
||||
|
||||
// TODO: mCoronas
|
||||
|
||||
#ifdef MISSION_REPLAY
|
||||
static uint32 TimeToWaitTill;
|
||||
switch (AllowMissionReplay) {
|
||||
@ -2834,6 +2842,11 @@ void CTheScripts::Process()
|
||||
if (script && !script->m_bIsActive)
|
||||
script = nil;
|
||||
}
|
||||
InTheScripts = false;
|
||||
for (base::cSList<script_corona>::tSItem* i = CTheScripts::mCoronas.first; i; i = i->next) {
|
||||
CCoronas::RegisterCorona((uint32)(uintptr)i, i->item.r, i->item.g, i->item.b, 255, CVector(i->item.x, i->item.y, i->item.z),
|
||||
-i->item.size, 450.0f, i->item.type, i->item.flareType, 1, 0, 0, 0.0f);
|
||||
}
|
||||
DbgFlag = false;
|
||||
#ifdef USE_ADVANCED_SCRIPT_DEBUG_OUTPUT
|
||||
PrintToLog("Script processing done, ScriptsUpdated: %d, CommandsExecuted: %d\n", ScriptsUpdated, CommandsExecuted);
|
||||
@ -2897,7 +2910,9 @@ int8 CRunningScript::ProcessOneCommand()
|
||||
uint8 nLocalsOffset;
|
||||
if (command < ARRAY_SIZE(commands)) {
|
||||
script_assert(commands[command].id == command);
|
||||
m_nIp -= 2;
|
||||
sprintf(commandInfo, m_nIp >= CTheScripts::MainScriptSize ? "M<%5d> " : "<%6d> ", m_nIp >= CTheScripts::MainScriptSize ? m_nIp - CTheScripts::MainScriptSize : m_nIp);
|
||||
m_nIp += 2;
|
||||
if (m_bNotFlag)
|
||||
strcat(commandInfo, "NOT ");
|
||||
if (commands[command].position == -1)
|
||||
@ -4919,7 +4934,9 @@ int8 CRunningScript::ProcessCommands200To299(int32 command)
|
||||
CVector pos = GET_VECTOR_PARAM(1);
|
||||
if (pos.z <= MAP_Z_LOW_LIMIT)
|
||||
pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y);
|
||||
CRemote::GivePlayerRemoteControlledCar(pos.x, pos.y, pos.z, DEGTORAD(GET_FLOAT_PARAM(4)), MI_RCBANDIT);
|
||||
CVehicle* pVehicle = CRemote::GivePlayerRemoteControlledCar(pos.x, pos.y, pos.z, DEGTORAD(GET_FLOAT_PARAM(4)), MI_RCBANDIT);
|
||||
SET_INTEGER_PARAM(0, CPools::GetVehiclePool()->GetIndex(pVehicle));
|
||||
StoreParameters(&m_nIp, 1);
|
||||
return 0;
|
||||
}
|
||||
case COMMAND_ALTER_WANTED_LEVEL:
|
||||
@ -4932,7 +4949,7 @@ int8 CRunningScript::ProcessCommands200To299(int32 command)
|
||||
return 0;
|
||||
case COMMAND_IS_WANTED_LEVEL_GREATER:
|
||||
CollectParameters(&m_nIp, 2);
|
||||
UpdateCompareFlag(CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed->m_pWanted->m_nWantedLevel > GET_INTEGER_PARAM(1));
|
||||
UpdateCompareFlag(CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed->m_pWanted->GetWantedLevel() > GET_INTEGER_PARAM(1));
|
||||
return 0;
|
||||
case COMMAND_CLEAR_WANTED_LEVEL:
|
||||
CollectParameters(&m_nIp, 1);
|
||||
|
@ -1,9 +1,9 @@
|
||||
#pragma once
|
||||
#include "common.h"
|
||||
#include "Font.h"
|
||||
#include "Ped.h"
|
||||
#include "PedType.h"
|
||||
#include "Text.h"
|
||||
#include "sList.h"
|
||||
#include "Sprite2d.h"
|
||||
|
||||
class CEntity;
|
||||
@ -38,9 +38,11 @@ void FlushLog();
|
||||
#define SPHERE_MARKER_PULSE_FRACTION 0.1f
|
||||
|
||||
#ifdef USE_PRECISE_MEASUREMENT_CONVERTION
|
||||
#define MILES_IN_METER (0.000621371192f)
|
||||
#define METERS_IN_FOOT (0.3048f)
|
||||
#define FEET_IN_METER (3.28084f)
|
||||
#else
|
||||
#define MILES_IN_METER (1 / 1670.f)
|
||||
#define METERS_IN_FOOT (0.3f)
|
||||
#define FEET_IN_METER (3.33f)
|
||||
#endif
|
||||
@ -273,207 +275,20 @@ struct tBuildingSwap
|
||||
int32 m_nOldModel;
|
||||
};
|
||||
|
||||
|
||||
enum {
|
||||
VAR_LOCAL = 1,
|
||||
VAR_GLOBAL = 2,
|
||||
};
|
||||
|
||||
enum {
|
||||
MAX_NUM_SCRIPTS = 128,
|
||||
MAX_NUM_INTRO_TEXT_LINES = 48,
|
||||
MAX_NUM_INTRO_RECTANGLES = 16,
|
||||
MAX_NUM_SCRIPT_SRPITES = 16,
|
||||
MAX_NUM_SCRIPT_SPHERES = 16,
|
||||
MAX_NUM_COLLECTIVES = 32,
|
||||
MAX_NUM_USED_OBJECTS = 305,
|
||||
MAX_NUM_MISSION_SCRIPTS = 150,
|
||||
MAX_NUM_BUILDING_SWAPS = 80,
|
||||
MAX_NUM_INVISIBILITY_SETTINGS = 52,
|
||||
MAX_NUM_STORED_LINES = 1024,
|
||||
MAX_ALLOWED_COLLISIONS = 2
|
||||
};
|
||||
|
||||
class CTheScripts
|
||||
struct script_corona
|
||||
{
|
||||
public:
|
||||
static uint8* ScriptSpace;
|
||||
static CRunningScript ScriptsArray[MAX_NUM_SCRIPTS];
|
||||
static intro_text_line IntroTextLines[MAX_NUM_INTRO_TEXT_LINES];
|
||||
static intro_script_rectangle IntroRectangles[MAX_NUM_INTRO_RECTANGLES];
|
||||
static CSprite2d ScriptSprites[MAX_NUM_SCRIPT_SRPITES];
|
||||
static script_sphere_struct ScriptSphereArray[MAX_NUM_SCRIPT_SPHERES];
|
||||
static tCollectiveData CollectiveArray[MAX_NUM_COLLECTIVES];
|
||||
static tUsedObject UsedObjectArray[MAX_NUM_USED_OBJECTS];
|
||||
static int32 MultiScriptArray[MAX_NUM_MISSION_SCRIPTS];
|
||||
static tBuildingSwap BuildingSwapArray[MAX_NUM_BUILDING_SWAPS];
|
||||
static CEntity* InvisibilitySettingArray[MAX_NUM_INVISIBILITY_SETTINGS];
|
||||
static CStoredLine aStoredLines[MAX_NUM_STORED_LINES];
|
||||
static bool DbgFlag;
|
||||
static uint32 OnAMissionFlag;
|
||||
static CMissionCleanup MissionCleanUp;
|
||||
static CStuckCarCheck StuckCars;
|
||||
static CUpsideDownCarCheck UpsideDownCars;
|
||||
static int32 StoreVehicleIndex;
|
||||
static bool StoreVehicleWasRandom;
|
||||
static CRunningScript *pIdleScripts;
|
||||
static CRunningScript *pActiveScripts;
|
||||
static int32 NextFreeCollectiveIndex;
|
||||
static int32 LastRandomPedId;
|
||||
static uint16 NumberOfUsedObjects;
|
||||
static bool bAlreadyRunningAMissionScript;
|
||||
static bool bUsingAMultiScriptFile;
|
||||
static uint16 NumberOfMissionScripts;
|
||||
static uint32 LargestMissionScriptSize;
|
||||
static uint32 MainScriptSize;
|
||||
static uint8 FailCurrentMission;
|
||||
static uint16 NumScriptDebugLines;
|
||||
static uint16 NumberOfIntroRectanglesThisFrame;
|
||||
static uint16 NumberOfIntroTextLinesThisFrame;
|
||||
static uint8 UseTextCommands;
|
||||
static uint16 CommandsExecuted;
|
||||
static uint16 ScriptsUpdated;
|
||||
static uint32 LastMissionPassedTime;
|
||||
static uint16 NumberOfExclusiveMissionScripts;
|
||||
|
||||
static bool bPlayerIsInTheStatium;
|
||||
static uint8 RiotIntensity;
|
||||
static bool bPlayerHasMetDebbieHarry;
|
||||
|
||||
static int AllowedCollision[MAX_ALLOWED_COLLISIONS];
|
||||
static short* SavedVarIndices;
|
||||
static int NumSaveVars;
|
||||
static bool FSDestroyedFlag;
|
||||
static int NextProcessId;
|
||||
static bool InTheScripts;
|
||||
static CRunningScript* pCurrent;
|
||||
static uint16 NumTrueGlobals;
|
||||
static uint16 MostGlobals;
|
||||
|
||||
static bool Init(bool loaddata = false);
|
||||
static void Process();
|
||||
|
||||
static CRunningScript* StartTestScript();
|
||||
static bool IsPlayerOnAMission();
|
||||
static void ClearSpaceForMissionEntity(const CVector&, CEntity*);
|
||||
|
||||
static void UndoBuildingSwaps();
|
||||
static void UndoEntityInvisibilitySettings();
|
||||
|
||||
/*
|
||||
static void ScriptDebugLine3D(float x1, float y1, float z1, float x2, float y2, float z2, uint32 col, uint32 col2);
|
||||
static void RenderTheScriptDebugLines();
|
||||
*/
|
||||
|
||||
static void SaveAllScripts(uint8*, uint32*);
|
||||
static bool LoadAllScripts(uint8*, uint32);
|
||||
|
||||
static bool IsDebugOn() { return DbgFlag; };
|
||||
static void InvertDebugFlag() { DbgFlag = !DbgFlag; }
|
||||
|
||||
static int32* GetPointerToScriptVariable(int32 offset) { assert(offset >= 8 && offset < CTheScripts::GetSizeOfVariableSpace()); return (int32*)&ScriptSpace[offset]; }
|
||||
|
||||
static int32 Read4BytesFromScript(uint32* pIp) {
|
||||
int32 retval = ScriptSpace[*pIp + 3] << 24 | ScriptSpace[*pIp + 2] << 16 | ScriptSpace[*pIp + 1] << 8 | ScriptSpace[*pIp];
|
||||
*pIp += 4;
|
||||
return retval;
|
||||
}
|
||||
static int16 Read2BytesFromScript(uint32* pIp) {
|
||||
int16 retval = ScriptSpace[*pIp + 1] << 8 | ScriptSpace[*pIp];
|
||||
*pIp += 2;
|
||||
return retval;
|
||||
}
|
||||
static int8 Read1ByteFromScript(uint32* pIp) {
|
||||
int8 retval = ScriptSpace[*pIp];
|
||||
*pIp += 1;
|
||||
return retval;
|
||||
}
|
||||
static float ReadFloatFromScript(uint32* pIp) {
|
||||
return Read2BytesFromScript(pIp) / 16.0f;
|
||||
}
|
||||
static void ReadTextLabelFromScript(uint32* pIp, char* buf) {
|
||||
strncpy(buf, (const char*)&CTheScripts::ScriptSpace[*pIp], KEY_LENGTH_IN_SCRIPT);
|
||||
}
|
||||
static wchar* GetTextByKeyFromScript(uint32* pIp) {
|
||||
wchar* text = TheText.Get((const char*)&CTheScripts::ScriptSpace[*pIp]);
|
||||
*pIp += KEY_LENGTH_IN_SCRIPT;
|
||||
return text;
|
||||
}
|
||||
static int32 GetSizeOfVariableSpace()
|
||||
{
|
||||
uint32 tmp = 3;
|
||||
return Read4BytesFromScript(&tmp);
|
||||
}
|
||||
|
||||
static CRunningScript* StartNewScript(uint32);
|
||||
|
||||
static void CleanUpThisVehicle(CVehicle*);
|
||||
static void CleanUpThisPed(CPed*);
|
||||
static void CleanUpThisObject(CObject*);
|
||||
|
||||
static bool IsPedStopped(CPed*);
|
||||
static bool IsPlayerStopped(CPlayerInfo*);
|
||||
static bool IsVehicleStopped(CVehicle*);
|
||||
|
||||
static void PrintListSizes();
|
||||
static void ReadObjectNamesFromScript();
|
||||
static void UpdateObjectIndices();
|
||||
static void ReadMultiScriptFileOffsetsFromScript();
|
||||
static void DrawScriptSpheres();
|
||||
static void HighlightImportantArea(uint32, float, float, float, float, float);
|
||||
static void HighlightImportantAngledArea(uint32, float, float, float, float, float, float, float, float, float);
|
||||
/*
|
||||
static void DrawDebugSquare(float, float, float, float);
|
||||
static void DrawDebugAngledSquare(float, float, float, float, float, float, float, float);
|
||||
static void DrawDebugCube(float, float, float, float, float, float);
|
||||
static void DrawDebugAngledCube(float, float, float, float, float, float, float, float, float, float);
|
||||
*/
|
||||
|
||||
static void AddToInvisibilitySwapArray(CEntity*, bool);
|
||||
static void AddToBuildingSwapArray(CBuilding*, int32, int32);
|
||||
|
||||
static int32 GetActualScriptSphereIndex(int32 index);
|
||||
static int32 AddScriptSphere(int32 id, CVector pos, float radius);
|
||||
static int32 GetNewUniqueScriptSphereIndex(int32 index);
|
||||
static void RemoveScriptSphere(int32 index);
|
||||
//static void RemoveScriptTextureDictionary();
|
||||
public:
|
||||
static void RemoveThisPed(CPed* pPed);
|
||||
|
||||
static uint32& GetLastMissionPassedTime() { return LastMissionPassedTime; }
|
||||
#ifdef MISSION_SWITCHER
|
||||
static void SwitchToMission(int32 mission);
|
||||
#endif
|
||||
|
||||
static int GetSaveVarIndex(int);
|
||||
static void Shutdown(void);
|
||||
static void SwapNearestBuildingModel(float, float, float, float, int, int);
|
||||
|
||||
#ifdef GTA_SCRIPT_COLLECTIVE
|
||||
static void AdvanceCollectiveIndex()
|
||||
{
|
||||
if (NextFreeCollectiveIndex == INT32_MAX)
|
||||
NextFreeCollectiveIndex = 0;
|
||||
else
|
||||
NextFreeCollectiveIndex++;
|
||||
}
|
||||
|
||||
static int AddPedsInVehicleToCollective(int);
|
||||
static int AddPedsInAreaToCollective(float, float, float, float);
|
||||
static int FindFreeSlotInCollectiveArray();
|
||||
static void SetObjectiveForAllPedsInCollective(int, eObjective, int16, int16);
|
||||
static void SetObjectiveForAllPedsInCollective(int, eObjective, CVector, float);
|
||||
static void SetObjectiveForAllPedsInCollective(int, eObjective, CVector);
|
||||
static void SetObjectiveForAllPedsInCollective(int, eObjective, void*);
|
||||
static void SetObjectiveForAllPedsInCollective(int, eObjective);
|
||||
#endif
|
||||
|
||||
int id;
|
||||
float x;
|
||||
float y;
|
||||
float z;
|
||||
float size;
|
||||
uint8 r;
|
||||
uint8 g;
|
||||
uint8 b;
|
||||
int type;
|
||||
int flareType;
|
||||
};
|
||||
|
||||
extern int ScriptParams[32];
|
||||
|
||||
VALIDATE_SIZE(uStackReturnValue, 4);
|
||||
|
||||
class CRunningScript
|
||||
{
|
||||
enum {
|
||||
@ -641,6 +456,211 @@ public:
|
||||
|
||||
};
|
||||
|
||||
|
||||
enum {
|
||||
VAR_LOCAL = 1,
|
||||
VAR_GLOBAL = 2,
|
||||
};
|
||||
|
||||
enum {
|
||||
MAX_NUM_SCRIPTS = 128,
|
||||
MAX_NUM_INTRO_TEXT_LINES = 48,
|
||||
MAX_NUM_INTRO_RECTANGLES = 16,
|
||||
MAX_NUM_SCRIPT_SRPITES = 16,
|
||||
MAX_NUM_SCRIPT_SPHERES = 16,
|
||||
MAX_NUM_COLLECTIVES = 32,
|
||||
MAX_NUM_USED_OBJECTS = 305,
|
||||
MAX_NUM_MISSION_SCRIPTS = 150,
|
||||
MAX_NUM_BUILDING_SWAPS = 80,
|
||||
MAX_NUM_INVISIBILITY_SETTINGS = 52,
|
||||
MAX_NUM_STORED_LINES = 1024,
|
||||
MAX_ALLOWED_COLLISIONS = 2
|
||||
};
|
||||
|
||||
class CTheScripts
|
||||
{
|
||||
public:
|
||||
static uint8* ScriptSpace;
|
||||
static CRunningScript ScriptsArray[MAX_NUM_SCRIPTS];
|
||||
static intro_text_line IntroTextLines[MAX_NUM_INTRO_TEXT_LINES];
|
||||
static intro_script_rectangle IntroRectangles[MAX_NUM_INTRO_RECTANGLES];
|
||||
static CSprite2d ScriptSprites[MAX_NUM_SCRIPT_SRPITES];
|
||||
static script_sphere_struct ScriptSphereArray[MAX_NUM_SCRIPT_SPHERES];
|
||||
static tCollectiveData CollectiveArray[MAX_NUM_COLLECTIVES];
|
||||
static tUsedObject UsedObjectArray[MAX_NUM_USED_OBJECTS];
|
||||
static int32 MultiScriptArray[MAX_NUM_MISSION_SCRIPTS];
|
||||
static tBuildingSwap BuildingSwapArray[MAX_NUM_BUILDING_SWAPS];
|
||||
static CEntity* InvisibilitySettingArray[MAX_NUM_INVISIBILITY_SETTINGS];
|
||||
static CStoredLine aStoredLines[MAX_NUM_STORED_LINES];
|
||||
static bool DbgFlag;
|
||||
static uint32 OnAMissionFlag;
|
||||
static CMissionCleanup MissionCleanUp;
|
||||
static CStuckCarCheck StuckCars;
|
||||
static CUpsideDownCarCheck UpsideDownCars;
|
||||
static int32 StoreVehicleIndex;
|
||||
static bool StoreVehicleWasRandom;
|
||||
static CRunningScript *pIdleScripts;
|
||||
static CRunningScript *pActiveScripts;
|
||||
static int32 NextFreeCollectiveIndex;
|
||||
static int32 LastRandomPedId;
|
||||
static uint16 NumberOfUsedObjects;
|
||||
static bool bAlreadyRunningAMissionScript;
|
||||
static bool bUsingAMultiScriptFile;
|
||||
static uint16 NumberOfMissionScripts;
|
||||
static uint32 LargestMissionScriptSize;
|
||||
static uint32 MainScriptSize;
|
||||
static uint8 FailCurrentMission;
|
||||
static uint16 NumScriptDebugLines;
|
||||
static uint16 NumberOfIntroRectanglesThisFrame;
|
||||
static uint16 NumberOfIntroTextLinesThisFrame;
|
||||
static uint8 UseTextCommands;
|
||||
static uint16 CommandsExecuted;
|
||||
static uint16 ScriptsUpdated;
|
||||
static uint32 LastMissionPassedTime;
|
||||
static uint16 NumberOfExclusiveMissionScripts;
|
||||
|
||||
static bool bPlayerIsInTheStatium;
|
||||
static uint8 RiotIntensity;
|
||||
static bool bPlayerHasMetDebbieHarry;
|
||||
|
||||
static int AllowedCollision[MAX_ALLOWED_COLLISIONS];
|
||||
static short* SavedVarIndices;
|
||||
static int NumSaveVars;
|
||||
static int FSDestroyedFlag;
|
||||
static int NextProcessId;
|
||||
static bool InTheScripts;
|
||||
static CRunningScript* pCurrent;
|
||||
static uint16 NumTrueGlobals;
|
||||
static uint16 MostGlobals;
|
||||
static base::cSList<script_corona> mCoronas;
|
||||
static int NextScriptCoronaID;
|
||||
|
||||
static bool Init(bool loaddata = false);
|
||||
static void Process();
|
||||
|
||||
static CRunningScript* StartTestScript();
|
||||
static bool IsPlayerOnAMission();
|
||||
static void ClearSpaceForMissionEntity(const CVector&, CEntity*);
|
||||
|
||||
static void UndoBuildingSwaps();
|
||||
static void UndoEntityInvisibilitySettings();
|
||||
|
||||
/*
|
||||
static void ScriptDebugLine3D(float x1, float y1, float z1, float x2, float y2, float z2, uint32 col, uint32 col2);
|
||||
static void RenderTheScriptDebugLines();
|
||||
*/
|
||||
|
||||
static void SaveAllScripts(uint8*, uint32*);
|
||||
static bool LoadAllScripts(uint8*, uint32);
|
||||
|
||||
static bool IsDebugOn() { return DbgFlag; };
|
||||
static void InvertDebugFlag() { DbgFlag = !DbgFlag; }
|
||||
|
||||
static int32* GetPointerToScriptVariable(int32 offset) { assert(offset >= 8 && offset < CTheScripts::GetSizeOfVariableSpace()); return (int32*)&ScriptSpace[offset]; }
|
||||
|
||||
static int32 Read4BytesFromScript(uint32* pIp) {
|
||||
int32 retval = ScriptSpace[*pIp + 3] << 24 | ScriptSpace[*pIp + 2] << 16 | ScriptSpace[*pIp + 1] << 8 | ScriptSpace[*pIp];
|
||||
*pIp += 4;
|
||||
return retval;
|
||||
}
|
||||
static int16 Read2BytesFromScript(uint32* pIp) {
|
||||
int16 retval = ScriptSpace[*pIp + 1] << 8 | ScriptSpace[*pIp];
|
||||
*pIp += 2;
|
||||
return retval;
|
||||
}
|
||||
static int8 Read1ByteFromScript(uint32* pIp) {
|
||||
int8 retval = ScriptSpace[*pIp];
|
||||
*pIp += 1;
|
||||
return retval;
|
||||
}
|
||||
static float ReadFloatFromScript(uint32* pIp) {
|
||||
return Read2BytesFromScript(pIp) / 16.0f;
|
||||
}
|
||||
static void ReadTextLabelFromScript(uint32* pIp, char* buf) {
|
||||
strncpy(buf, (const char*)&CTheScripts::ScriptSpace[*pIp], KEY_LENGTH_IN_SCRIPT);
|
||||
}
|
||||
static wchar* GetTextByKeyFromScript(uint32* pIp) {
|
||||
wchar* text = TheText.Get((const char*)&CTheScripts::ScriptSpace[*pIp]);
|
||||
*pIp += KEY_LENGTH_IN_SCRIPT;
|
||||
return text;
|
||||
}
|
||||
static int32 GetSizeOfVariableSpace()
|
||||
{
|
||||
uint32 tmp = 3;
|
||||
return Read4BytesFromScript(&tmp);
|
||||
}
|
||||
|
||||
static CRunningScript* StartNewScript(uint32);
|
||||
|
||||
static void CleanUpThisVehicle(CVehicle*);
|
||||
static void CleanUpThisPed(CPed*);
|
||||
static void CleanUpThisObject(CObject*);
|
||||
|
||||
static bool IsPedStopped(CPed*);
|
||||
static bool IsPlayerStopped(CPlayerInfo*);
|
||||
static bool IsVehicleStopped(CVehicle*);
|
||||
|
||||
static void PrintListSizes();
|
||||
static void ReadObjectNamesFromScript();
|
||||
static void UpdateObjectIndices();
|
||||
static void ReadMultiScriptFileOffsetsFromScript();
|
||||
static void DrawScriptSpheres();
|
||||
static void HighlightImportantArea(uint32, float, float, float, float, float);
|
||||
static void HighlightImportantAngledArea(uint32, float, float, float, float, float, float, float, float, float);
|
||||
/*
|
||||
static void DrawDebugSquare(float, float, float, float);
|
||||
static void DrawDebugAngledSquare(float, float, float, float, float, float, float, float);
|
||||
static void DrawDebugCube(float, float, float, float, float, float);
|
||||
static void DrawDebugAngledCube(float, float, float, float, float, float, float, float, float, float);
|
||||
*/
|
||||
|
||||
static void AddToInvisibilitySwapArray(CEntity*, bool);
|
||||
static void AddToBuildingSwapArray(CBuilding*, int32, int32);
|
||||
|
||||
static int32 GetActualScriptSphereIndex(int32 index);
|
||||
static int32 AddScriptSphere(int32 id, CVector pos, float radius);
|
||||
static int32 GetNewUniqueScriptSphereIndex(int32 index);
|
||||
static void RemoveScriptSphere(int32 index);
|
||||
//static void RemoveScriptTextureDictionary();
|
||||
public:
|
||||
static void RemoveThisPed(CPed* pPed);
|
||||
|
||||
static uint32& GetLastMissionPassedTime() { return LastMissionPassedTime; }
|
||||
#ifdef MISSION_SWITCHER
|
||||
static void SwitchToMission(int32 mission);
|
||||
#endif
|
||||
|
||||
static int GetSaveVarIndex(int);
|
||||
static void Shutdown(void);
|
||||
static void SwapNearestBuildingModel(float, float, float, float, int, int);
|
||||
|
||||
#ifdef GTA_SCRIPT_COLLECTIVE
|
||||
static void AdvanceCollectiveIndex()
|
||||
{
|
||||
if (NextFreeCollectiveIndex == INT32_MAX)
|
||||
NextFreeCollectiveIndex = 0;
|
||||
else
|
||||
NextFreeCollectiveIndex++;
|
||||
}
|
||||
|
||||
static int AddPedsInVehicleToCollective(int);
|
||||
static int AddPedsInAreaToCollective(float, float, float, float);
|
||||
static int FindFreeSlotInCollectiveArray();
|
||||
static void SetObjectiveForAllPedsInCollective(int, eObjective, int16, int16);
|
||||
static void SetObjectiveForAllPedsInCollective(int, eObjective, CVector, float);
|
||||
static void SetObjectiveForAllPedsInCollective(int, eObjective, CVector);
|
||||
static void SetObjectiveForAllPedsInCollective(int, eObjective, void*);
|
||||
static void SetObjectiveForAllPedsInCollective(int, eObjective);
|
||||
#endif
|
||||
|
||||
static bool IsFortStauntonDestroyed() { return FSDestroyedFlag && *(int32*)&ScriptSpace[FSDestroyedFlag] == 1; }
|
||||
|
||||
};
|
||||
|
||||
extern int ScriptParams[32];
|
||||
|
||||
VALIDATE_SIZE(uStackReturnValue, 4);
|
||||
|
||||
#ifdef USE_DEBUG_SCRIPT_LOADER
|
||||
extern int scriptToLoad;
|
||||
#endif
|
||||
@ -665,4 +685,5 @@ extern int scriptToLoad;
|
||||
#endif
|
||||
|
||||
extern int gScriptsFile;
|
||||
extern CVector gVectorSetInLua;
|
||||
|
||||
|
@ -74,7 +74,7 @@ int8 CRunningScript::ProcessCommands1600To1699(int32 command)
|
||||
case COMMAND_ADD_ARROW_3D_MARKER:
|
||||
{
|
||||
uint32 ip = m_nIp;
|
||||
uint32 id = (uint32)(uintptr)GetPointerToScriptVariable(&m_nIp, 0);
|
||||
uint32 id = (uint32)(uintptr)GetPointerToScriptVariable(&ip, 0);
|
||||
CollectParameters(&m_nIp, 10);
|
||||
CVector pos = GET_VECTOR_PARAM(0);
|
||||
CVector dir = GET_VECTOR_PARAM(3);
|
||||
@ -213,7 +213,7 @@ int8 CRunningScript::ProcessCommands1600To1699(int32 command)
|
||||
case COMMAND_PRINT_WITH_2_NUMBERS_NOW_NO_BRIEF:
|
||||
{
|
||||
wchar* key = CTheScripts::GetTextByKeyFromScript(&m_nIp);
|
||||
CollectParameters(&m_nIp, 3);
|
||||
CollectParameters(&m_nIp, 4);
|
||||
CMessages::AddMessageJumpQWithNumber(key, GET_INTEGER_PARAM(2), GET_INTEGER_PARAM(3), GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), -1, -1, -1, -1); // 0
|
||||
return 0;
|
||||
}
|
||||
@ -321,6 +321,7 @@ int8 CRunningScript::ProcessCommands1600To1699(int32 command)
|
||||
strncpy(onscreen_str2, (char*)&CTheScripts::ScriptSpace[m_nIp], KEY_LENGTH_IN_SCRIPT);
|
||||
m_nIp += KEY_LENGTH_IN_SCRIPT;
|
||||
CUserDisplay::OnscnTimer.AddCounter(var, GET_INTEGER_PARAM(1), onscreen_str1, 0); // TODO - second set of data
|
||||
return 0;
|
||||
}
|
||||
case COMMAND_GET_PLAYER_STORED_WEAPON:
|
||||
{
|
||||
|
@ -1080,7 +1080,7 @@ int8 CRunningScript::ProcessCommands400To499(int32 command)
|
||||
CollectParameters(&m_nIp, 1);
|
||||
CPlayerPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed;
|
||||
script_assert(pPed);
|
||||
SET_INTEGER_PARAM(0, pPed->m_pWanted->m_nWantedLevel);
|
||||
SET_INTEGER_PARAM(0, pPed->m_pWanted->GetWantedLevel());
|
||||
StoreParameters(&m_nIp, 1);
|
||||
return 0;
|
||||
}
|
||||
|
@ -35,6 +35,7 @@
|
||||
#include "Zones.h"
|
||||
#include "GameLogic.h"
|
||||
#include "Bike.h"
|
||||
#include "Wanted.h"
|
||||
|
||||
// LCS: file done except TODOs
|
||||
|
||||
|
@ -39,6 +39,7 @@
|
||||
#include "World.h"
|
||||
#include "Zones.h"
|
||||
#include "Bike.h"
|
||||
#include "Wanted.h"
|
||||
|
||||
// LCS: file done except TODOs
|
||||
|
||||
@ -477,7 +478,7 @@ int8 CRunningScript::ProcessCommands800To899(int32 command)
|
||||
float fx = pObject->GetForward().x;
|
||||
float fy = pObject->GetForward().y;
|
||||
float heading = LimitAngleOnCircle(
|
||||
RADTODEG(CGeneral::GetATanOfXY(pObject->GetForward().x, pObject->GetForward().y)));
|
||||
RADTODEG(Atan2(-pObject->GetForward().x, pObject->GetForward().y)));
|
||||
float headingTarget = GET_FLOAT_PARAM(1);
|
||||
#ifdef FIX_BUGS
|
||||
float rotateBy = GET_FLOAT_PARAM(2) * CTimer::GetTimeStepFix();
|
||||
@ -935,6 +936,7 @@ int8 CRunningScript::ProcessCommands800To899(int32 command)
|
||||
script_assert(pVehicle);
|
||||
pPed->SetObjective(OBJECTIVE_ENTER_CAR_AS_DRIVER, pVehicle);
|
||||
pPed->WarpPedIntoCar(pVehicle);
|
||||
pPed->RestorePreviousObjective();
|
||||
return 0;
|
||||
}
|
||||
case COMMAND_WARP_CHAR_INTO_CAR:
|
||||
|
@ -2665,7 +2665,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;
|
||||
}
|
||||
|
||||
@ -2679,7 +2679,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;
|
||||
}
|
||||
|
||||
|
@ -423,9 +423,10 @@ int8 CRunningScript::ProcessCommands1200To1299(int32 command)
|
||||
case COMMAND_REQUEST_COLLISION:
|
||||
{
|
||||
CollectParameters(&m_nIp, 2);
|
||||
CVector2D pos;
|
||||
CVector pos;
|
||||
pos.x = GET_FLOAT_PARAM(0);
|
||||
pos.y = GET_FLOAT_PARAM(1);
|
||||
pos.z = 0.0f;
|
||||
CColStore::RequestCollision(pos);
|
||||
return 0;
|
||||
}
|
||||
|
@ -65,7 +65,7 @@ int8 CRunningScript::ProcessCommands1400To1499(int32 command)
|
||||
case COMMAND_WANTED_STARS_ARE_FLASHING:
|
||||
{
|
||||
CWanted* pWanted = CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_pWanted;
|
||||
UpdateCompareFlag(pWanted->m_nMinWantedLevel - pWanted->m_nWantedLevel > 0);
|
||||
UpdateCompareFlag(pWanted->m_nMinWantedLevel - pWanted->GetWantedLevel() > 0);
|
||||
return 0;
|
||||
}
|
||||
case COMMAND_SET_ALLOW_HURRICANES:
|
||||
@ -601,19 +601,36 @@ int8 CRunningScript::ProcessCommands1400To1499(int32 command)
|
||||
case COMMAND_CREATE_SCRIPT_CORONA:
|
||||
{
|
||||
CollectParameters(&m_nIp, 9);
|
||||
static bool bShowed = false;
|
||||
if (!bShowed) {
|
||||
debug("CREATE_SCRIPT_CORONA not implemented");
|
||||
bShowed = true;
|
||||
}
|
||||
SET_INTEGER_PARAM(0, -1);
|
||||
base::cSList<script_corona>::tSItem* pCorona = new base::cSList<script_corona>::tSItem();
|
||||
pCorona->item.x = GET_FLOAT_PARAM(0);
|
||||
pCorona->item.y = GET_FLOAT_PARAM(1);
|
||||
pCorona->item.z = GET_FLOAT_PARAM(2);
|
||||
pCorona->item.id = CTheScripts::NextScriptCoronaID++;
|
||||
if (pCorona->item.z <= MAP_Z_LOW_LIMIT)
|
||||
pCorona->item.z = CWorld::FindGroundZForCoord(pCorona->item.x, pCorona->item.y);
|
||||
pCorona->item.size = GET_FLOAT_PARAM(3);
|
||||
pCorona->item.r = GET_INTEGER_PARAM(6);
|
||||
pCorona->item.g = GET_INTEGER_PARAM(7);
|
||||
pCorona->item.b = GET_INTEGER_PARAM(8);
|
||||
pCorona->item.type = GET_INTEGER_PARAM(4);
|
||||
pCorona->item.flareType = GET_INTEGER_PARAM(5);
|
||||
SET_INTEGER_PARAM(0, pCorona->item.id);
|
||||
CTheScripts::mCoronas.Insert(pCorona);
|
||||
StoreParameters(&m_nIp, 1);
|
||||
return 0;
|
||||
}
|
||||
case COMMAND_REMOVE_SCRIPT_CORONA:
|
||||
{
|
||||
CollectParameters(&m_nIp, 1);
|
||||
// TODO
|
||||
for (base::cSList<script_corona>::tSItem* i = CTheScripts::mCoronas.first; i; i = i->next) {
|
||||
if (i->item.id == GET_INTEGER_PARAM(0)) {
|
||||
CTheScripts::mCoronas.Remove(i);
|
||||
delete i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
case COMMAND_IS_BOAT_IN_WATER:
|
||||
{
|
||||
CollectParameters(&m_nIp, 1);
|
||||
|
@ -359,6 +359,7 @@ int8 CRunningScript::ProcessCommands1500To1599(int32 command)
|
||||
return 0;
|
||||
case COMMAND_HAS_OBJECT_BEEN_DAMAGED_BY_WEAPON:
|
||||
{
|
||||
CollectParameters(&m_nIp, 2);
|
||||
CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0));
|
||||
bool result = false;
|
||||
if (!pObject) {
|
||||
@ -635,7 +636,7 @@ int8 CRunningScript::ProcessCommands1500To1599(int32 command)
|
||||
case COMMAND_ADD_POINT_3D_MARKER:
|
||||
{
|
||||
uint32 ip = m_nIp;
|
||||
uint32 id = (uint32)(uintptr)GetPointerToScriptVariable(&m_nIp, 0);
|
||||
uint32 id = (uint32)(uintptr)GetPointerToScriptVariable(&ip, 0);
|
||||
static CVector vPreviousLocation;
|
||||
CollectParameters(&m_nIp, 7);
|
||||
CVector pos = GET_VECTOR_PARAM(0);
|
||||
@ -650,7 +651,7 @@ int8 CRunningScript::ProcessCommands1500To1599(int32 command)
|
||||
return 0;
|
||||
}
|
||||
case COMMAND_GET_VECTOR_FROM_MULTIPLAYER:
|
||||
// SET_VECTOR_PARAM(0, gVectorSetInLua);
|
||||
SET_VECTOR_PARAM(0, gVectorSetInLua);
|
||||
StoreParameters(&m_nIp, 3);
|
||||
return 0;
|
||||
case COMMAND_PRINT_HELP_ALWAYS:
|
||||
@ -736,10 +737,10 @@ int8 CRunningScript::ProcessCommands1500To1599(int32 command)
|
||||
}
|
||||
case COMMAND_SET_CHAR_ATTACKS_PLAYER_WITH_COPS:
|
||||
{
|
||||
CollectParameters(&m_nIp, 1);
|
||||
CollectParameters(&m_nIp, 2);
|
||||
CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0));
|
||||
script_assert(pPed);
|
||||
pPed->bAttacksPlayerWithCops = (GET_INTEGER_PARAM(0) != 0);
|
||||
pPed->bAttacksPlayerWithCops = (GET_INTEGER_PARAM(1) != 0);
|
||||
return 0;
|
||||
}
|
||||
case COMMAND_REGISTER_FACE_PLANT_DISTANCE:
|
||||
|
@ -14,8 +14,6 @@
|
||||
|
||||
#define TIME_BETWEEN_SETPIECE_SPAWNS 20000
|
||||
|
||||
//--MIAMI: file done
|
||||
|
||||
bool CSetPieces::bDebug;
|
||||
uint32 CSetPieces::NumSetPieces;
|
||||
CSetPiece CSetPieces::aSetPieces[NUM_SETPIECES];
|
||||
@ -86,7 +84,7 @@ void CSetPiece::Update(void)
|
||||
switch (m_nType) {
|
||||
case SETPIECE_TWOCOPCARSINALLEY:
|
||||
{
|
||||
if (FindPlayerPed()->m_pWanted->m_nWantedLevel < 1 || FindPlayerVehicle())
|
||||
if (FindPlayerPed()->m_pWanted->GetWantedLevel() < 1 || FindPlayerVehicle())
|
||||
return;
|
||||
CVehicle* pVehicle1 = TryToGenerateCopCar(m_vSpawn1, m_vTarget1);
|
||||
if (!pVehicle1)
|
||||
@ -120,7 +118,7 @@ void CSetPiece::Update(void)
|
||||
}
|
||||
case SETPIECE_CARBLOCKINGPLAYERFROMSIDE:
|
||||
{
|
||||
if (FindPlayerPed()->m_pWanted->m_nWantedLevel < 2)
|
||||
if (FindPlayerPed()->m_pWanted->GetWantedLevel() < 2)
|
||||
return;
|
||||
if (!FindPlayerVehicle())
|
||||
return;
|
||||
@ -143,7 +141,7 @@ void CSetPiece::Update(void)
|
||||
}
|
||||
case SETPIECE_CARRAMMINGPLAYERFROMSIDE:
|
||||
{
|
||||
if (FindPlayerPed()->m_pWanted->m_nWantedLevel < 2)
|
||||
if (FindPlayerPed()->m_pWanted->GetWantedLevel() < 2)
|
||||
return;
|
||||
if (!FindPlayerVehicle())
|
||||
return;
|
||||
@ -166,7 +164,7 @@ void CSetPiece::Update(void)
|
||||
}
|
||||
case SETPIECE_CREATECOPPERONFOOT:
|
||||
{
|
||||
if (FindPlayerPed()->m_pWanted->m_nWantedLevel < 1 || FindPlayerVehicle())
|
||||
if (FindPlayerPed()->m_pWanted->GetWantedLevel() < 1 || FindPlayerVehicle())
|
||||
return;
|
||||
CCopPed* pCop = TryToGenerateCopPed(m_vSpawn1);
|
||||
if (!pCop)
|
||||
@ -180,7 +178,7 @@ void CSetPiece::Update(void)
|
||||
}
|
||||
case SETPIECE_CREATETWOCOPPERSONFOOT:
|
||||
{
|
||||
if (FindPlayerPed()->m_pWanted->m_nWantedLevel < 1 || FindPlayerVehicle())
|
||||
if (FindPlayerPed()->m_pWanted->GetWantedLevel() < 1 || FindPlayerVehicle())
|
||||
return;
|
||||
CCopPed* pCop = TryToGenerateCopPed(m_vSpawn1);
|
||||
if (!pCop)
|
||||
@ -204,7 +202,7 @@ void CSetPiece::Update(void)
|
||||
}
|
||||
case SETPIECE_TWOCARSBLOCKINGPLAYERFROMSIDE:
|
||||
{
|
||||
if (FindPlayerPed()->m_pWanted->m_nWantedLevel < 2)
|
||||
if (FindPlayerPed()->m_pWanted->GetWantedLevel() < 2)
|
||||
return;
|
||||
if (!FindPlayerVehicle())
|
||||
return;
|
||||
@ -242,7 +240,7 @@ void CSetPiece::Update(void)
|
||||
}
|
||||
case SETPIECE_TWOCARSRAMMINGPLAYERFROMSIDE:
|
||||
{
|
||||
if (FindPlayerPed()->m_pWanted->m_nWantedLevel < 2)
|
||||
if (FindPlayerPed()->m_pWanted->GetWantedLevel() < 2)
|
||||
return;
|
||||
if (!FindPlayerVehicle())
|
||||
return;
|
||||
|
@ -15,8 +15,6 @@
|
||||
#include "Weather.h"
|
||||
#include "World.h"
|
||||
|
||||
//--MIAMI: file done
|
||||
|
||||
bool CTrafficLights::bGreenLightsCheat;
|
||||
|
||||
void
|
||||
@ -116,6 +114,32 @@ CTrafficLights::DisplayActualLight(CEntity *ent)
|
||||
|
||||
CBrightLights::RegisterOne(pos1, ent->GetUp(), ent->GetRight(), CVector(0.0f, 0.0f, 0.0f), id + BRIGHTLIGHT_TRAFFIC_GREEN);
|
||||
CBrightLights::RegisterOne(pos2, ent->GetUp(), -ent->GetRight(), CVector(0.0f, 0.0f, 0.0f), id + BRIGHTLIGHT_TRAFFIC_GREEN);
|
||||
|
||||
// TODO(LCS): check coordinates
|
||||
static const float top = -0.127f;
|
||||
static const float bot = -0.539f;
|
||||
static const float mid = bot + (top - bot) / 3.0f;
|
||||
static const float left = 1.256f;
|
||||
static const float right = 0.706f;
|
||||
phase = CTrafficLights::LightForPeds();
|
||||
if (phase == PED_LIGHTS_DONT_WALK) {
|
||||
CVector p0(2.7f, right, top);
|
||||
CVector p1(2.7f, left, top);
|
||||
CVector p2(2.7f, right, mid);
|
||||
CVector p3(2.7f, left, mid);
|
||||
CShinyTexts::RegisterOne(ent->GetMatrix() * p0, ent->GetMatrix() * p1, ent->GetMatrix() * p2, ent->GetMatrix() * p3,
|
||||
1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f,
|
||||
SHINYTEXT_WALK, 255, 0, 0, 60.0f);
|
||||
}
|
||||
else if (phase == PED_LIGHTS_WALK || CTimer::GetTimeInMilliseconds() & 0x100) {
|
||||
CVector p0(2.7f, right, mid);
|
||||
CVector p1(2.7f, left, mid);
|
||||
CVector p2(2.7f, right, bot);
|
||||
CVector p3(2.7f, left, bot);
|
||||
CShinyTexts::RegisterOne(ent->GetMatrix() * p0, ent->GetMatrix() * p1, ent->GetMatrix() * p2, ent->GetMatrix() * p3,
|
||||
1.0f, 0.5f, 0.0f, 0.5f, 1.0f, 1.0f, 0.0f, 1.0f,
|
||||
SHINYTEXT_WALK, 255, 255, 255, 60.0f);
|
||||
}
|
||||
}
|
||||
else if (MI_TRAFFICLIGHTS_VERTICAL == m) {
|
||||
CBaseModelInfo* mi = CModelInfo::GetModelInfo(ent->GetModelIndex());
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -145,6 +145,10 @@ public:
|
||||
bool m_aSimCheckers[MAX_SIMS][MAX_CONTROLLERTYPES];
|
||||
bool m_bMouseAssociated;
|
||||
|
||||
#ifdef LOAD_INI_SETTINGS
|
||||
static uint32 ms_padButtonsInited;
|
||||
#endif
|
||||
|
||||
CControllerConfigManager();
|
||||
|
||||
void MakeControllerActionsBlank();
|
||||
|
@ -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;
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user