diff --git a/src/collision/ColStore.cpp b/src/collision/ColStore.cpp index c50e6cbd..0899dfa1 100644 --- a/src/collision/ColStore.cpp +++ b/src/collision/ColStore.cpp @@ -30,6 +30,9 @@ bool bDispColInMem; // CColStore::LoadAllBoundingBoxes(void) // CColStore::Write(base::cRelocatableChunkWriter &) +//#ifdef MAZAHAKA_MAPZONE_VC +//#else +#ifndef MAZAHAKA_MAPZONE_VC const CVector& LevelPos(eLevelName level) { @@ -61,6 +64,7 @@ PosLevel(const CVector &pos) return lastOtherLevel; } } +#endif void CColStore::Initialise(void) @@ -251,6 +255,7 @@ CColStore::AddCollisionNeededAtPosn(const CVector &pos) secondPosition = pos; } +#ifndef MAZAHAKA_MAPZONE_VC void CColStore::LoadCollision(const CVector &pos, eLevelName level) { @@ -326,7 +331,56 @@ CColStore::LoadCollision(const CVector &pos, eLevelName level) } bLoadAtSecondPosition = false; } +#else +void +CColStore::LoadCollision(const CVector2D &pos) +{ + int i; + if(CStreaming::ms_disableStreaming) + return; + + for(i = 1; i < COLSTORESIZE; i++){ + if(GetSlot(i) == nil) + continue; + + bool wantThisOne = false; + + if(GetBoundingBox(i).IsPointInside(pos) || + bLoadAtSecondPosition && GetBoundingBox(i).IsPointInside(secondPosition, -119.0f) || + strcmp(GetColName(i), "yacht") == 0){ + wantThisOne = true; + }else{ + for (int j = 0; j < MAX_CLEANUP; j++) { + CPhysical* pEntity = nil; + cleanup_entity_struct* pCleanup = &CTheScripts::MissionCleanUp.m_sEntities[j]; + if (pCleanup->type == CLEANUP_CAR) { + pEntity = CPools::GetVehiclePool()->GetAt(pCleanup->id); + if (!pEntity || pEntity->GetStatus() == STATUS_WRECKED) + continue; + } + else if (pCleanup->type == CLEANUP_CHAR) { + pEntity = CPools::GetPedPool()->GetAt(pCleanup->id); + if (!pEntity || ((CPed*)pEntity)->DyingOrDead()) + continue; + } + if (pEntity && !pEntity->bDontLoadCollision && !pEntity->bIsFrozen) { + if (GetBoundingBox(i).IsPointInside(pEntity->GetPosition(), -80.0f)) + wantThisOne = true; + } + } + } + + if(wantThisOne) + CStreaming::RequestCol(i, STREAMFLAGS_PRIORITY); + else + CStreaming::RemoveCol(i); + } + bLoadAtSecondPosition = false; +} +#endif + +#ifndef MAZAHAKA_MAPZONE_VC void CColStore::RequestCollision(const CVector &pos) { @@ -336,6 +390,17 @@ CColStore::RequestCollision(const CVector &pos) if(GetSlot(i) && DoScriptsWantThisIn(i) && GetBoundingBox(i).IsPointInside(LevelPos(PosLevel(pos)), -115.0f)) CStreaming::RequestCol(i, STREAMFLAGS_PRIORITY); } +#else +void +CColStore::RequestCollision(const CVector/*2D*/ &pos) +{ + int i; + + for(i = 1; i < COLSTORESIZE; i++) + if(GetSlot(i) && GetBoundingBox(i).IsPointInside(pos, -115.0f)) + CStreaming::RequestCol(i, STREAMFLAGS_PRIORITY); +} +#endif void CColStore::EnsureCollisionIsInMemory(const CVector &pos) @@ -374,6 +439,7 @@ CColStore::DoScriptsWantThisIn(int32 slot) return true; } +#ifndef MAZAHAKA_MAPZONE_VC bool CColStore::HasCollisionLoaded(eLevelName level) { @@ -388,12 +454,28 @@ CColStore::HasCollisionLoaded(eLevelName level) return false; return true; } +#else +bool +CColStore::HasCollisionLoaded(const CVector2D &pos) +{ + int i; + for(i = 1; i < COLSTORESIZE; i++) + if(GetSlot(i) && GetBoundingBox(i).IsPointInside(pos, -115.0f) && + !GetSlot(i)->isLoaded) + return false; + return true; +} +#endif + +//lcs +#ifndef MAZAHAKA_MAPZONE_VC bool CColStore::HasCollisionLoaded(const CVector &pos) { return HasCollisionLoaded(PosLevel(pos)); } +#endif void CColStore::Load(bool onlyBB, CPool *pool) diff --git a/src/collision/ColStore.h b/src/collision/ColStore.h index c66a67ed..af5d435f 100644 --- a/src/collision/ColStore.h +++ b/src/collision/ColStore.h @@ -32,12 +32,24 @@ public: static void AddCollisionNeededAtPosn(const CVector &pos); static void LoadAllCollision(void); static void RemoveAllCollision(void); +#ifndef MAZAHAKA_MAPZONE_VC + //lcs static void LoadCollision(const CVector &pos, eLevelName level = LEVEL_GENERIC); +#else + static void LoadCollision(const CVector2D &pos); +#endif static void RequestCollision(const CVector &pos); static void EnsureCollisionIsInMemory(const CVector &pos); static bool DoScriptsWantThisIn(int32 slot); +#ifndef MAZAHAKA_MAPZONE_VC + //lcs static bool HasCollisionLoaded(eLevelName level); static bool HasCollisionLoaded(const CVector &pos); +#else + static bool HasCollisionLoaded(const CVector2D &pos); +#endif + + static void Load(bool, CPool *pool); static ColDef *GetSlot(int slot) { @@ -48,4 +60,6 @@ public: } }; +#ifndef MAZAHAKA_MAPZONE_VC const CVector& LevelPos(eLevelName level); +#endif diff --git a/src/control/FerrisWheel.cpp b/src/control/FerrisWheel.cpp new file mode 100644 index 00000000..d1e9b989 --- /dev/null +++ b/src/control/FerrisWheel.cpp @@ -0,0 +1,25 @@ +#pragma once +#include "FerrisWheel.h" + + + + +void CFerrisWheel::Init() +{ + //debug("CFerrisWheel::Init()\n"); + +} + +void +CFerrisWheel::Update() +{ + //debug("CFerrisWheel::Update()\n"); + +} + +void +CFerrisWheel::Shutdown() +{ + //debug("CFerrisWheel::Shutdown()\n"); + +} \ No newline at end of file diff --git a/src/control/FerrisWheel.h b/src/control/FerrisWheel.h new file mode 100644 index 00000000..8cc7b639 --- /dev/null +++ b/src/control/FerrisWheel.h @@ -0,0 +1,12 @@ +#pragma once +#include "common.h" + +class CFerrisWheel // todo maybe CFerrisWheels.process -> CFerrisWheel.Update +{ + //static uint32 keyTable[256]; +public: + static void Init(); // 1755E0 delegate check todo if need + static void Update(); + static void Shutdown(); + // ops 1223 1224 1225 1226 +}; \ No newline at end of file diff --git a/src/control/PathFind.cpp b/src/control/PathFind.cpp index f9d58687..3574f5cb 100644 --- a/src/control/PathFind.cpp +++ b/src/control/PathFind.cpp @@ -437,6 +437,7 @@ CPathFind::LoadPathFindData(void) return false; } +//__declspec(noinline) void CPathFind::PreparePathData(void) { diff --git a/src/control/Script.cpp b/src/control/Script.cpp index fc62aab7..ef308e09 100644 --- a/src/control/Script.cpp +++ b/src/control/Script.cpp @@ -49,6 +49,13 @@ #include "TxdStore.h" #include "Bike.h" #include "smallHeap.h" +// new +#include "Radar.h" +#include "Garages.h" +#include "CarGen.h" +#include "Restart.h" +#pragma optimize("", off) // tmp 4 dbg + #ifdef USE_ADVANCED_SCRIPT_DEBUG_OUTPUT #include #endif @@ -112,7 +119,7 @@ base::cSList CTheScripts::mCoronas; #ifdef MISSION_REPLAY -static const char* MissionScripts[] = { +static const char* MissionScripts[] = { // vcs todo "VIC2", "VIC3", "VIC4", @@ -307,7 +314,8 @@ void CMissionCleanup::RemoveEntityFromList(int32 id, uint8 type) } } -void CMissionCleanup::CheckIfCollisionHasLoadedForMissionObjects() +// relcs todo MAZAHAKA_MAPZONE_VC?? +/*void CMissionCleanup::CheckIfCollisionHasLoadedForMissionObjects() { for (int i = 0; i < MAX_CLEANUP; i++) { switch (m_sEntities[i].type) { @@ -411,6 +419,59 @@ void CMissionCleanup::CheckIfCollisionHasLoadedForMissionObjects() break; } } +}*/ + +//revc +void CMissionCleanup::CheckIfCollisionHasLoadedForMissionObjects() +{ + for (int i = 0; i < MAX_CLEANUP; i++) { + switch (m_sEntities[i].type) { + case CLEANUP_CAR: + { + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(m_sEntities[i].id); + if (pVehicle) { + if (pVehicle->bIsStaticWaitingForCollision) { + if (CColStore::HasCollisionLoaded(pVehicle->GetPosition())) { + pVehicle->bIsStaticWaitingForCollision = false; + if (!pVehicle->GetIsStatic()) + pVehicle->AddToMovingList(); + } + } + } + break; + } + case CLEANUP_CHAR: + { + CPed* pPed = CPools::GetPedPool()->GetAt(m_sEntities[i].id); + if (pPed) { + if (pPed->bIsStaticWaitingForCollision) { + if (CColStore::HasCollisionLoaded(pPed->GetPosition())) { + pPed->bIsStaticWaitingForCollision = false; + if (!pPed->GetIsStatic()) + pPed->AddToMovingList(); + } + } + } + break; + } + case CLEANUP_OBJECT: + { + CObject* pObject = CPools::GetObjectPool()->GetAt(m_sEntities[i].id); + if (pObject) { + if (pObject->bIsStaticWaitingForCollision) { + if (CColStore::HasCollisionLoaded(pObject->GetPosition())) { + pObject->bIsStaticWaitingForCollision = false; + if (!pObject->GetIsStatic()) + pObject->AddToMovingList(); + } + } + } + break; + } + default: + break; + } + } } void CMissionCleanup::Process() @@ -666,6 +727,9 @@ bool CStuckCarCheck::HasCarBeenStuckForAWhile(int32 id) void CRunningScript::CollectParameters(uint32* pIp, int16 total, int* pParameters) { while (total--){ + //int type = (uint32_t)CTheScripts::Read1ByteFromScript(pIp); + //debug("com: %d\n", type); + //switch (type) switch (CTheScripts::Read1ByteFromScript(pIp)) { case ARGUMENT_END: @@ -696,9 +760,13 @@ void CRunningScript::CollectParameters(uint32* pIp, int16 total, int* pParameter case ARGUMENT_INT16: *pParameters = CTheScripts::Read2BytesFromScript(pIp); break; + case ARGUMENT_STRING: + *pParameters = *pIp; + *pIp += strlen((char *)(CTheScripts::ScriptSpace + *pIp)) + 1; + break; default: *pIp -= 1; - *pParameters = *GetPointerToScriptVariable(pIp, 0); + *pParameters = *GetPointerToScriptVariable(pIp); break; } pParameters++; @@ -727,16 +795,18 @@ int32 CRunningScript::CollectNextParameterWithoutIncreasingPC(uint32 ip) tmp |= (uint32)(uint16)CTheScripts::Read2BytesFromScript(pIp) << 16; return tmp; case ARGUMENT_INT32: + case ARGUMENT_FLOAT: // vcs return CTheScripts::Read4BytesFromScript(pIp); case ARGUMENT_INT8: return CTheScripts::Read1ByteFromScript(pIp); case ARGUMENT_INT16: return CTheScripts::Read2BytesFromScript(pIp); - case ARGUMENT_FLOAT: - return CTheScripts::Read4BytesFromScript(pIp); + //case ARGUMENT_FLOAT: + // return CTheScripts::Read4BytesFromScript(pIp); + // vcs string arg ida ??? i not found str arg default: (*pIp)--; - return *GetPointerToScriptVariable(pIp, 0); + return *GetPointerToScriptVariable(pIp); } return -1; } @@ -744,10 +814,31 @@ int32 CRunningScript::CollectNextParameterWithoutIncreasingPC(uint32 ip) void CRunningScript::StoreParameters(uint32* pIp, int16 number) { for (int16 i = 0; i < number; i++){ - *GetPointerToScriptVariable(pIp, 0) = ScriptParams[i]; + *GetPointerToScriptVariable(pIp) = ScriptParams[i]; } } + + +// vcs todo inline +const char* CRunningScript::GetKeyFromScript(uint32* pIp) // lcs, vcs hardcoded or inlined +{ + CollectParameters(pIp, 1); // 0x0A type string include here, GET_INTEGER_PARAM(0) store ip string in collect + const char *key = GET_INTEGER_PARAM(0) ? (const char *)&CTheScripts::ScriptSpace[GET_INTEGER_PARAM(0)] : nil; + return key; +} + +wchar* CRunningScript::GetTextByKeyFromScript(uint32* pIp) +{ + CollectParameters(pIp, 1); + wchar *text = GET_INTEGER_PARAM(0) ? TheText.Get((const char *)&CTheScripts::ScriptSpace[GET_INTEGER_PARAM(0)]) : nil; + return text; +} + + +//__declspec(noinline) +//#pragma optimize("", off) // dbg stuff +#ifdef THIS_IS_STUPID int32* GetPointerToScriptVariable(CRunningScript* pScript, uint32* pIp) { uint8 type = CTheScripts::Read1ByteFromScript(pIp); @@ -782,10 +873,47 @@ int32* GetPointerToScriptVariable(CRunningScript* pScript, uint32* pIp) return &pScript->m_anLocalVariables[pScript->m_nLocalsPointer + (type - ARGUMENT_LOCAL)]; } -int32 *CRunningScript::GetPointerToScriptVariable(uint32* pIp, int16 type) +int32 *CRunningScript::GetPointerToScriptVariable(uint32* pIp/*, int16 type*/) { return ::GetPointerToScriptVariable(this, pIp); } +#else +int32 *CRunningScript::GetPointerToScriptVariable(uint32* pIp) +{ + uint8 type = CTheScripts::Read1ByteFromScript(pIp); + if (type >= ARGUMENT_GLOBAL_ARRAY) { + uint8 index_in_block = CTheScripts::Read1ByteFromScript(pIp); + uint8 index_id = CTheScripts::Read1ByteFromScript(pIp); + uint8 size = CTheScripts::Read1ByteFromScript(pIp); + script_assert(size > 0); + script_assert(m_anLocalVariables[m_nLocalsPointer + index_id] < size); + uint8 index = Min(m_anLocalVariables[m_nLocalsPointer + index_id], size - 1); + return (int32*)&CTheScripts::ScriptSpace[4 * (((int)(type - ARGUMENT_GLOBAL_ARRAY) << 8) + index + index_in_block)]; + } + else if (type >= ARGUMENT_GLOBAL) { + uint8 index_in_block = CTheScripts::Read1ByteFromScript(pIp); + return (int32*)&CTheScripts::ScriptSpace[4 * (((int)(type - ARGUMENT_GLOBAL) << 8) + index_in_block)]; + } + else if (type >= ARGUMENT_LOCAL_ARRAY) { + uint8 index_id = CTheScripts::Read1ByteFromScript(pIp); + uint8 size = CTheScripts::Read1ByteFromScript(pIp); + script_assert(size > 0); + script_assert(m_anLocalVariables[m_nLocalsPointer + index_id] < size); + uint8 index = Min(m_anLocalVariables[m_nLocalsPointer + index_id], size - 1); + return &m_anLocalVariables[m_nLocalsPointer + (type - ARGUMENT_LOCAL_ARRAY) + index]; + } + else if (type >= ARGUMENT_LOCAL) { + return &m_anLocalVariables[m_nLocalsPointer + (type - ARGUMENT_LOCAL)]; + } + else if (type >= ARGUMENT_TIMER) { + return &m_anLocalVariables[NUM_LOCAL_VARS + 8 + (type - ARGUMENT_TIMER)]; + } + debug("wrong type for variable"); + script_assert(false && "wrong type for variable"); + return &m_anLocalVariables[m_nLocalsPointer + (type - ARGUMENT_LOCAL)]; +} +#endif + int CTheScripts::GetSaveVarIndex(int var) { @@ -841,7 +969,7 @@ int CTheScripts::OpenScript() CFileMgr::ChangeDir("\\"); switch (ScriptToLoad) { case 0: return CFileMgr::OpenFile("DATA\\main.scm", "rb"); - case 1: return CFileMgr::OpenFile("DATA\\freeroam_lcs.scm", "rb"); + case 1: return CFileMgr::OpenFile("DATA\\freeroam_vcs.scm", "rb"); case 2: return CFileMgr::OpenFile("DATA\\main_d.scm", "rb"); } return CFileMgr::OpenFile("DATA\\main.scm", "rb"); @@ -1159,42 +1287,48 @@ int8 CRunningScript::ProcessOneCommand() #ifdef USE_ADVANCED_SCRIPT_DEBUG_OUTPUT LogBeforeProcessingCommand(command); #endif + + //dbgstuff code + //if(!strcmp(m_abScriptName, "initpla")) + //{ + // debug("dbg scr\n"); + // int t = command; + //} + + // дублированные кейсы вручную через ProcessCommandsNToN(comm) + // vcs todo? aCommandsHandlersPointers[command] need?? comm enum simplify but aHandlers faster + if (command < 100) retval = ProcessCommands0To99(command); else if (command < 200) retval = ProcessCommands100To199(command); - else if (command < 305) + else if (command < 300) retval = ProcessCommands200To299(command); - else if (command < 405) + else if (command < 400) retval = ProcessCommands300To399(command); - else if (command < 505) + else if (command < 500) retval = ProcessCommands400To499(command); - else if (command < 605) + else if (command < 600) retval = ProcessCommands500To599(command); - else if (command < 705) + else if (command < 700) retval = ProcessCommands600To699(command); - else if (command < 805) + else if (command < 800) retval = ProcessCommands700To799(command); - else if (command < 905) + else if (command < 900) retval = ProcessCommands800To899(command); - else if (command < 1005) + else if (command < 1000) retval = ProcessCommands900To999(command); - else if (command < 1105) + else if (command < 1100) retval = ProcessCommands1000To1099(command); - else if (command < 1205) + else if (command < 1200) retval = ProcessCommands1100To1199(command); - else if (command < 1305) + else if (command < 1300) retval = ProcessCommands1200To1299(command); - else if (command < 1405) + else if (command < 1400) retval = ProcessCommands1300To1399(command); - else if (command < 1497) - retval = ProcessCommands1400To1499(command); - else if (command < 1600) - retval = ProcessCommands1500To1599(command); - else if (command < 1700) - retval = ProcessCommands1600To1699(command); else - script_assert(false); + script_assert(false && "NOT FOUND COMM HANDLER"); + #ifdef USE_MISSION_REPLAY_OVERRIDE_FOR_NON_MOBILE_SCRIPT if (!AlreadySavedGame) #endif @@ -1212,15 +1346,16 @@ int8 CRunningScript::ProcessOneCommand() return retval; } + + int8 CRunningScript::ProcessCommands0To99(int32 command) { float *fScriptVar1; - int *nScriptVar1; - switch (command) { - /* - case COMMAND_NOP: - return 0; - */ + //int *nScriptVar1; + //int buff[4]; + switch(command) { + //case COMMAND_NOP: + // return 0; case COMMAND_WAIT: CollectParameters(&m_nIp, 1); m_nWakeTime = CTimer::GetTimeInMilliseconds() + GET_INTEGER_PARAM(0); @@ -1240,476 +1375,259 @@ int8 CRunningScript::ProcessCommands0To99(int32 command) CamShakeNoPos(&TheCamera, GET_INTEGER_PARAM(0) / 1000.0f); return 0; case COMMAND_SET_VAR_INT: - { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - CollectParameters(&m_nIp, 1); - *ptr = GET_INTEGER_PARAM(0); - return 0; - } + //{ // vcs 4 5 one handler + // int32* ptr = GetPointerToScriptVariable(&m_nIp); + // CollectParameters(&m_nIp, 1); + // *ptr = GET_INTEGER_PARAM(0); + // return 0; + //} case COMMAND_SET_VAR_FLOAT: { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); + int32 *ptr = GetPointerToScriptVariable(&m_nIp); CollectParameters(&m_nIp, 1); - *(float*)ptr = GET_FLOAT_PARAM(0); + //*(float *)ptr = GET_FLOAT_PARAM(0); // lcs + *ptr = GET_INTEGER_PARAM(0); // like vcs return 0; } - case COMMAND_SET_LVAR_INT: + case COMMAND_SET_VAR_STRING: // it is possible to link with COMMAND_SET_VAR_INT TODO CHECK!!!! { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); + //debug("STRING ARG!!!!!!!!!!!!!!!\n"); + int32 *ptr = GetPointerToScriptVariable(&m_nIp); CollectParameters(&m_nIp, 1); *ptr = GET_INTEGER_PARAM(0); return 0; } - case COMMAND_SET_LVAR_FLOAT: - { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - CollectParameters(&m_nIp, 1); - *(float*)ptr = GET_FLOAT_PARAM(0); - return 0; - } - case COMMAND_ADD_VAL_TO_INT_VAR: - { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - CollectParameters(&m_nIp, 1); - *ptr += GET_INTEGER_PARAM(0); - return 0; - } - case COMMAND_ADD_VAL_TO_FLOAT_VAR: - { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - CollectParameters(&m_nIp, 1); - *(float*)ptr += GET_FLOAT_PARAM(0); - return 0; - } case COMMAND_ADD_VAL_TO_INT_LVAR: { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); + int32 *ptr = GetPointerToScriptVariable(&m_nIp); CollectParameters(&m_nIp, 1); *ptr += GET_INTEGER_PARAM(0); return 0; } case COMMAND_ADD_VAL_TO_FLOAT_LVAR: { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); + int32 *ptr = GetPointerToScriptVariable(&m_nIp); CollectParameters(&m_nIp, 1); - *(float*)ptr += GET_FLOAT_PARAM(0); + *(float *)ptr += GET_FLOAT_PARAM(0); return 0; } case COMMAND_SUB_VAL_FROM_INT_VAR: { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); + int32 *ptr = GetPointerToScriptVariable(&m_nIp); CollectParameters(&m_nIp, 1); *ptr -= GET_INTEGER_PARAM(0); return 0; } - case COMMAND_SUB_VAL_FROM_FLOAT_VAR: + case COMMAND_SUB_VAL_FROM_FLOAT_VAR: // upped checked { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); + int32 *ptr = GetPointerToScriptVariable(&m_nIp); CollectParameters(&m_nIp, 1); - *(float*)ptr -= GET_FLOAT_PARAM(0); - return 0; - } - case COMMAND_SUB_VAL_FROM_INT_LVAR: - { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - CollectParameters(&m_nIp, 1); - *ptr -= GET_INTEGER_PARAM(0); - return 0; - } - case COMMAND_SUB_VAL_FROM_FLOAT_LVAR: - { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - CollectParameters(&m_nIp, 1); - *(float*)ptr -= GET_FLOAT_PARAM(0); - return 0; - } - case COMMAND_MULT_INT_VAR_BY_VAL: - { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - CollectParameters(&m_nIp, 1); - *ptr *= GET_INTEGER_PARAM(0); - return 0; - } - case COMMAND_MULT_FLOAT_VAR_BY_VAL: - { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - CollectParameters(&m_nIp, 1); - *(float*)ptr *= GET_FLOAT_PARAM(0); + *(float *)ptr -= GET_FLOAT_PARAM(0); return 0; } case COMMAND_MULT_INT_LVAR_BY_VAL: { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); + int32 *ptr = GetPointerToScriptVariable(&m_nIp); CollectParameters(&m_nIp, 1); *ptr *= GET_INTEGER_PARAM(0); return 0; } case COMMAND_MULT_FLOAT_LVAR_BY_VAL: { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); + int32 *ptr = GetPointerToScriptVariable(&m_nIp); CollectParameters(&m_nIp, 1); - *(float*)ptr *= GET_FLOAT_PARAM(0); - return 0; - } - case COMMAND_DIV_INT_VAR_BY_VAL: - { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - CollectParameters(&m_nIp, 1); - *ptr /= GET_INTEGER_PARAM(0); - return 0; - } - case COMMAND_DIV_FLOAT_VAR_BY_VAL: - { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - CollectParameters(&m_nIp, 1); - *(float*)ptr /= GET_FLOAT_PARAM(0); + *(float *)ptr *= GET_FLOAT_PARAM(0); return 0; } case COMMAND_DIV_INT_LVAR_BY_VAL: { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); + int32 *ptr = GetPointerToScriptVariable(&m_nIp); CollectParameters(&m_nIp, 1); + // vcs if(!GET_INTEGER_PARAM(0)) { break(); } *ptr /= GET_INTEGER_PARAM(0); return 0; } case COMMAND_DIV_FLOAT_LVAR_BY_VAL: { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); + int32 *ptr = GetPointerToScriptVariable(&m_nIp); CollectParameters(&m_nIp, 1); - *(float*)ptr /= GET_FLOAT_PARAM(0); + *(float *)ptr /= GET_FLOAT_PARAM(0); return 0; } case COMMAND_IS_INT_VAR_GREATER_THAN_NUMBER: - { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - CollectParameters(&m_nIp, 1); - UpdateCompareFlag(*ptr > GET_INTEGER_PARAM(0)); - return 0; - } - case COMMAND_IS_INT_LVAR_GREATER_THAN_NUMBER: - { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - CollectParameters(&m_nIp, 1); - UpdateCompareFlag(*ptr > GET_INTEGER_PARAM(0)); - return 0; - } - case COMMAND_IS_NUMBER_GREATER_THAN_INT_VAR: - { - CollectParameters(&m_nIp, 1); - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - UpdateCompareFlag(GET_INTEGER_PARAM(0) > *ptr); - return 0; - } + //{ + // int32 *ptr = GetPointerToScriptVariable(&m_nIp); + // CollectParameters(&m_nIp, 1); + // UpdateCompareFlag(*ptr > GET_INTEGER_PARAM(0)); + // return 0; + //} case COMMAND_IS_NUMBER_GREATER_THAN_INT_LVAR: + //{ + // CollectParameters(&m_nIp, 1); + // int32 *ptr = GetPointerToScriptVariable(&m_nIp); + // UpdateCompareFlag(GET_INTEGER_PARAM(0) > *ptr); + // return 0; + //} + case COMMAND_IS_INT_LVAR_GREATER_THAN_INT_LVAR: // tested { - CollectParameters(&m_nIp, 1); - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - UpdateCompareFlag(GET_INTEGER_PARAM(0) > *ptr); - return 0; - } - case COMMAND_IS_INT_VAR_GREATER_THAN_INT_VAR: - { - int32* ptr1 = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - int32* ptr2 = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - UpdateCompareFlag(*ptr1 > *ptr2); - return 0; - } - case COMMAND_IS_INT_LVAR_GREATER_THAN_INT_VAR: - { - int32* ptr1 = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - int32* ptr2 = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - UpdateCompareFlag(*ptr1 > *ptr2); - return 0; - } - case COMMAND_IS_INT_VAR_GREATER_THAN_INT_LVAR: - { - int32* ptr1 = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - int32* ptr2 = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - UpdateCompareFlag(*ptr1 > *ptr2); - return 0; - } - case COMMAND_IS_INT_LVAR_GREATER_THAN_INT_LVAR: - { - int32* ptr1 = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - int32* ptr2 = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - UpdateCompareFlag(*ptr1 > *ptr2); - return 0; - } - case COMMAND_IS_FLOAT_VAR_GREATER_THAN_NUMBER: - { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - CollectParameters(&m_nIp, 1); - UpdateCompareFlag(*(float*)ptr > GET_FLOAT_PARAM(0)); + // lcs [prob its equal] + //int32 *ptr1 = GetPointerToScriptVariable(&m_nIp); + //int32 *ptr2 = GetPointerToScriptVariable(&m_nIp); + //UpdateCompareFlag(*ptr1 > *ptr2); + + // vcs + CollectParameters(&m_nIp, 2); + UpdateCompareFlag(GET_INTEGER_PARAM(0) > GET_INTEGER_PARAM(1)); return 0; } case COMMAND_IS_FLOAT_LVAR_GREATER_THAN_NUMBER: - { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - CollectParameters(&m_nIp, 1); - UpdateCompareFlag(*(float*)ptr > GET_FLOAT_PARAM(0)); - return 0; - } - case COMMAND_IS_NUMBER_GREATER_THAN_FLOAT_VAR: - { - CollectParameters(&m_nIp, 1); - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - UpdateCompareFlag(GET_FLOAT_PARAM(0) > *(float*)ptr); - return 0; - } + //{ + // int32 *ptr = GetPointerToScriptVariable(&m_nIp); + // CollectParameters(&m_nIp, 1); + // UpdateCompareFlag(*(float *)ptr > GET_FLOAT_PARAM(0)); + // return 0; + //} case COMMAND_IS_NUMBER_GREATER_THAN_FLOAT_LVAR: + //{ + // CollectParameters(&m_nIp, 1); + // int32 *ptr = GetPointerToScriptVariable(&m_nIp); + // UpdateCompareFlag(GET_FLOAT_PARAM(0) > *(float *)ptr); + // return 0; + //} + case COMMAND_IS_FLOAT_LVAR_GREATER_THAN_FLOAT_LVAR: // tested { - CollectParameters(&m_nIp, 1); - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - UpdateCompareFlag(GET_FLOAT_PARAM(0) > *(float*)ptr); - return 0; - } - case COMMAND_IS_FLOAT_VAR_GREATER_THAN_FLOAT_VAR: - { - int32* ptr1 = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - int32* ptr2 = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - UpdateCompareFlag(*(float*)ptr1 > *(float*)ptr2); - return 0; - } - case COMMAND_IS_FLOAT_LVAR_GREATER_THAN_FLOAT_VAR: - { - int32* ptr1 = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - int32* ptr2 = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - UpdateCompareFlag(*(float*)ptr1 > *(float*)ptr2); - return 0; - } - case COMMAND_IS_FLOAT_VAR_GREATER_THAN_FLOAT_LVAR: - { - int32* ptr1 = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - int32* ptr2 = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - UpdateCompareFlag(*(float*)ptr1 > *(float*)ptr2); - return 0; - } - case COMMAND_IS_FLOAT_LVAR_GREATER_THAN_FLOAT_LVAR: - { - int32* ptr1 = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - int32* ptr2 = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - UpdateCompareFlag(*(float*)ptr1 > *(float*)ptr2); - return 0; - } - case COMMAND_IS_INT_VAR_GREATER_OR_EQUAL_TO_NUMBER: - { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - CollectParameters(&m_nIp, 1); - UpdateCompareFlag(*ptr >= GET_INTEGER_PARAM(0)); + // lcs + //int32 *ptr1 = GetPointerToScriptVariable(&m_nIp); + //int32 *ptr2 = GetPointerToScriptVariable(&m_nIp); + //UpdateCompareFlag(*(float *)ptr1 > *(float *)ptr2); + + // vcs + CollectParameters(&m_nIp, 2); + UpdateCompareFlag(GET_FLOAT_PARAM(0) > GET_FLOAT_PARAM(1)); return 0; } case COMMAND_IS_INT_LVAR_GREATER_OR_EQUAL_TO_NUMBER: - { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - CollectParameters(&m_nIp, 1); - UpdateCompareFlag(*ptr >= GET_INTEGER_PARAM(0)); - return 0; - } + //{ + // int32 *ptr = GetPointerToScriptVariable(&m_nIp); + // CollectParameters(&m_nIp, 1); + // UpdateCompareFlag(*ptr >= GET_INTEGER_PARAM(0)); + // return 0; + //} case COMMAND_IS_NUMBER_GREATER_OR_EQUAL_TO_INT_VAR: + //{ + // CollectParameters(&m_nIp, 1); + // int32 *ptr = GetPointerToScriptVariable(&m_nIp); + // UpdateCompareFlag(GET_INTEGER_PARAM(0) >= *ptr); + // return 0; + //} + case COMMAND_IS_INT_LVAR_GREATER_OR_EQUAL_TO_INT_LVAR: // tested { - CollectParameters(&m_nIp, 1); - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - UpdateCompareFlag(GET_INTEGER_PARAM(0) >= *ptr); - return 0; - } - case COMMAND_IS_NUMBER_GREATER_OR_EQUAL_TO_INT_LVAR: - { - CollectParameters(&m_nIp, 1); - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - UpdateCompareFlag(GET_INTEGER_PARAM(0) >= *ptr); - return 0; - } - case COMMAND_IS_INT_VAR_GREATER_OR_EQUAL_TO_INT_VAR: - { - int32* ptr1 = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - int32* ptr2 = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - UpdateCompareFlag(*ptr1 >= *ptr2); - return 0; - } - case COMMAND_IS_INT_LVAR_GREATER_OR_EQUAL_TO_INT_VAR: - { - int32* ptr1 = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - int32* ptr2 = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - UpdateCompareFlag(*ptr1 >= *ptr2); - return 0; - } - case COMMAND_IS_INT_VAR_GREATER_OR_EQUAL_TO_INT_LVAR: - { - int32* ptr1 = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - int32* ptr2 = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - UpdateCompareFlag(*ptr1 >= *ptr2); - return 0; - } - case COMMAND_IS_INT_LVAR_GREATER_OR_EQUAL_TO_INT_LVAR: - { - int32* ptr1 = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - int32* ptr2 = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - UpdateCompareFlag(*ptr1 >= *ptr2); - return 0; - } - case COMMAND_IS_FLOAT_VAR_GREATER_OR_EQUAL_TO_NUMBER: - { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - CollectParameters(&m_nIp, 1); - UpdateCompareFlag(*(float*)ptr >= GET_FLOAT_PARAM(0)); + //int32 *ptr1 = GetPointerToScriptVariable(&m_nIp); + //int32 *ptr2 = GetPointerToScriptVariable(&m_nIp); + //UpdateCompareFlag(*ptr1 >= *ptr2); + + // vcs + CollectParameters(&m_nIp, 2); + UpdateCompareFlag(GET_INTEGER_PARAM(0) >= GET_INTEGER_PARAM(1)); return 0; } case COMMAND_IS_FLOAT_LVAR_GREATER_OR_EQUAL_TO_NUMBER: - { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - CollectParameters(&m_nIp, 1); - UpdateCompareFlag(*(float*)ptr >= GET_FLOAT_PARAM(0)); - return 0; - } - case COMMAND_IS_NUMBER_GREATER_OR_EQUAL_TO_FLOAT_VAR: - { - CollectParameters(&m_nIp, 1); - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - UpdateCompareFlag(GET_FLOAT_PARAM(0) >= *(float*)ptr); - return 0; - } + //{ + // int32 *ptr = GetPointerToScriptVariable(&m_nIp); + // CollectParameters(&m_nIp, 1); + // UpdateCompareFlag(*(float *)ptr >= GET_FLOAT_PARAM(0)); + // return 0; + //} case COMMAND_IS_NUMBER_GREATER_OR_EQUAL_TO_FLOAT_LVAR: + //{ + // CollectParameters(&m_nIp, 1); + // int32 *ptr = GetPointerToScriptVariable(&m_nIp); + // UpdateCompareFlag(GET_FLOAT_PARAM(0) >= *(float *)ptr); + // return 0; + //} + case COMMAND_IS_FLOAT_LVAR_GREATER_OR_EQUAL_TO_FLOAT_LVAR: // tested { - CollectParameters(&m_nIp, 1); - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - UpdateCompareFlag(GET_FLOAT_PARAM(0) >= *(float*)ptr); - return 0; - } - case COMMAND_IS_FLOAT_VAR_GREATER_OR_EQUAL_TO_FLOAT_VAR: - { - int32* ptr1 = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - int32* ptr2 = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - UpdateCompareFlag(*(float*)ptr1 >= *(float*)ptr2); - return 0; - } - case COMMAND_IS_FLOAT_LVAR_GREATER_OR_EQUAL_TO_FLOAT_VAR: - { - int32* ptr1 = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - int32* ptr2 = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - UpdateCompareFlag(*(float*)ptr1 >= *(float*)ptr2); - return 0; - } - case COMMAND_IS_FLOAT_VAR_GREATER_OR_EQUAL_TO_FLOAT_LVAR: - { - int32* ptr1 = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - int32* ptr2 = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - UpdateCompareFlag(*(float*)ptr1 >= *(float*)ptr2); - return 0; - } - case COMMAND_IS_FLOAT_LVAR_GREATER_OR_EQUAL_TO_FLOAT_LVAR: - { - int32* ptr1 = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - int32* ptr2 = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - UpdateCompareFlag(*(float*)ptr1 >= *(float*)ptr2); + //int32 *ptr1 = GetPointerToScriptVariable(&m_nIp); + //int32 *ptr2 = GetPointerToScriptVariable(&m_nIp); + //UpdateCompareFlag(*(float *)ptr1 >= *(float *)ptr2); + + // vcs + CollectParameters(&m_nIp, 2); + UpdateCompareFlag(GET_FLOAT_PARAM(0) >= GET_FLOAT_PARAM(1)); return 0; } case COMMAND_IS_INT_VAR_EQUAL_TO_NUMBER: - { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - CollectParameters(&m_nIp, 1); - UpdateCompareFlag(*ptr == GET_INTEGER_PARAM(0)); - return 0; - } - case COMMAND_IS_INT_LVAR_EQUAL_TO_NUMBER: - { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - CollectParameters(&m_nIp, 1); - UpdateCompareFlag(*ptr == GET_INTEGER_PARAM(0)); - return 0; - } - case COMMAND_IS_INT_VAR_EQUAL_TO_INT_VAR: - { - int32* ptr1 = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - int32* ptr2 = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - UpdateCompareFlag(*ptr1 == *ptr2); - return 0; - } + //{ + // int32 *ptr = GetPointerToScriptVariable(&m_nIp); + // CollectParameters(&m_nIp, 1); + // UpdateCompareFlag(*ptr == GET_INTEGER_PARAM(0)); + // return 0; + //} case COMMAND_IS_INT_VAR_EQUAL_TO_INT_LVAR: - { - int32* ptr1 = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - int32* ptr2 = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - UpdateCompareFlag(*ptr1 == *ptr2); - return 0; - } - case COMMAND_IS_INT_LVAR_EQUAL_TO_INT_LVAR: - { - int32* ptr1 = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - int32* ptr2 = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - UpdateCompareFlag(*ptr1 == *ptr2); - return 0; - } - //case COMMAND_IS_INT_VAR_NOT_EQUAL_TO_NUMBER: - //case COMMAND_IS_INT_LVAR_NOT_EQUAL_TO_NUMBER: - //case COMMAND_IS_INT_VAR_NOT_EQUAL_TO_INT_VAR: - //case COMMAND_IS_INT_LVAR_NOT_EQUAL_TO_INT_LVAR: - //case COMMAND_IS_INT_VAR_NOT_EQUAL_TO_INT_LVAR: - case COMMAND_IS_FLOAT_VAR_EQUAL_TO_NUMBER: - { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - CollectParameters(&m_nIp, 1); - UpdateCompareFlag(*(float*)ptr == GET_FLOAT_PARAM(0)); - return 0; - } + //{ + // int32 *ptr1 = GetPointerToScriptVariable(&m_nIp); + // int32 *ptr2 = GetPointerToScriptVariable(&m_nIp); + // UpdateCompareFlag(*ptr1 == *ptr2); + // return 0; + //} case COMMAND_IS_FLOAT_LVAR_EQUAL_TO_NUMBER: - { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - CollectParameters(&m_nIp, 1); - UpdateCompareFlag(*(float*)ptr == GET_FLOAT_PARAM(0)); - return 0; - } - case COMMAND_IS_FLOAT_VAR_EQUAL_TO_FLOAT_VAR: - { - int32* ptr1 = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - int32* ptr2 = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - UpdateCompareFlag(*(float*)ptr1 == *(float*)ptr2); - return 0; - } - case COMMAND_IS_FLOAT_VAR_EQUAL_TO_FLOAT_LVAR: - { - int32* ptr1 = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - int32* ptr2 = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - UpdateCompareFlag(*(float*)ptr1 == *(float*)ptr2); - return 0; - } + //{ + // int32 *ptr = GetPointerToScriptVariable(&m_nIp); + // CollectParameters(&m_nIp, 1); + // UpdateCompareFlag(*(float *)ptr == GET_FLOAT_PARAM(0)); + // return 0; + //} case COMMAND_IS_FLOAT_LVAR_EQUAL_TO_FLOAT_LVAR: { - int32* ptr1 = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - int32* ptr2 = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - UpdateCompareFlag(*(float*)ptr1 == *(float*)ptr2); + //int32 *ptr1 = GetPointerToScriptVariable(&m_nIp); + //int32 *ptr2 = GetPointerToScriptVariable(&m_nIp); + //UpdateCompareFlag(*(float *)ptr1 == *(float *)ptr2); + + CollectParameters(&m_nIp, 2); + UpdateCompareFlag(!(GET_INTEGER_PARAM(0) ^ GET_INTEGER_PARAM(1))); // like strcmp + return 0; + } + case COMMAND_IS_STRING_VAR_EQUAL_TO_STRING_VAR_31: + case COMMAND_IS_STRING_VAR_EQUAL_TO_STRING_VAR_32: // tested + { + //script_assert(false && "TODO_OR_CHECK_todo__comm_31_32"); + //debug("STRING CMP COMM!!!!!!!!!!!!!!!\n"); + //CollectParameters(&m_nIp, 1); + //const char *str1 = GET_INTEGER_PARAM(0) ? (const char *)&CTheScripts::ScriptSpace[GET_INTEGER_PARAM(0)] : nil; + //CollectParameters(&m_nIp, 1); + //const char *str2 = GET_INTEGER_PARAM(0) ? (const char *)&CTheScripts::ScriptSpace[GET_INTEGER_PARAM(0)] : nil; + //bool bIsEqual = !strcmp(str1, str2); + //UpdateCompareFlag(bIsEqual); + + CollectParameters(&m_nIp, 2); + const char *str1 = GET_INTEGER_PARAM(0) ? (const char *)&CTheScripts::ScriptSpace[GET_INTEGER_PARAM(0)] : nil; + const char *str2 = GET_INTEGER_PARAM(1) ? (const char *)&CTheScripts::ScriptSpace[GET_INTEGER_PARAM(1)] : nil; + UpdateCompareFlag(!strcmp(str1, str2)); // !strcmp is equal return 0; } - //case COMMAND_IS_FLOAT_VAR_NOT_EQUAL_TO_NUMBER: - //case COMMAND_IS_FLOAT_LVAR_NOT_EQUAL_TO_NUMBER: - //case COMMAND_IS_FLOAT_VAR_NOT_EQUAL_TO_FLOAT_VAR: - //case COMMAND_IS_FLOAT_LVAR_NOT_EQUAL_TO_FLOAT_LVAR: - //case COMMAND_IS_FLOAT_VAR_NOT_EQUAL_TO_FLOAT_LVAR: case COMMAND_GOTO_IF_TRUE: CollectParameters(&m_nIp, 1); - if (m_bCondResult) - SetIP(GET_INTEGER_PARAM(0) >= 0 ? GET_INTEGER_PARAM(0) : CTheScripts::MainScriptSize - GET_INTEGER_PARAM(0)); + if(m_bCondResult) SetIP(GET_INTEGER_PARAM(0) >= 0 ? GET_INTEGER_PARAM(0) : CTheScripts::MainScriptSize - GET_INTEGER_PARAM(0)); return 0; case COMMAND_GOTO_IF_FALSE: CollectParameters(&m_nIp, 1); - if (!m_bCondResult) - SetIP(GET_INTEGER_PARAM(0) >= 0 ? GET_INTEGER_PARAM(0) : CTheScripts::MainScriptSize - GET_INTEGER_PARAM(0)); + if(!m_bCondResult) SetIP(GET_INTEGER_PARAM(0) >= 0 ? GET_INTEGER_PARAM(0) : CTheScripts::MainScriptSize - GET_INTEGER_PARAM(0)); /* Check COMMAND_GOTO note. */ return 0; case COMMAND_TERMINATE_THIS_SCRIPT: - if (m_bMissionFlag) - CTheScripts::bAlreadyRunningAMissionScript = false; + if(m_bMissionFlag) CTheScripts::bAlreadyRunningAMissionScript = false; RemoveScriptFromList(&CTheScripts::pActiveScripts); AddScriptToList(&CTheScripts::pIdleScripts); m_bIsActive = false; -#ifdef MISSION_REPLAY - if (m_bMissionFlag) { - CPlayerInfo* pPlayerInfo = &CWorld::Players[CWorld::PlayerInFocus]; +#ifdef MISSION_REPLAY // lcs, vcs todo + if(m_bMissionFlag) { + CPlayerInfo *pPlayerInfo = &CWorld::Players[CWorld::PlayerInFocus]; #if 0 // makeing autosave is pointless and is a bit buggy if (pPlayerInfo->m_pPed->GetPedState() != PED_DEAD && pPlayerInfo->m_WBState == WBSTATE_PLAYING && !m_bDeatharrestExecuted) SaveGameForPause(SAVE_TYPE_QUICKSAVE); #endif oldTargetX = oldTargetY = 0.0f; - if (AllowMissionReplay == MISSION_RETRY_STAGE_WAIT_FOR_SCRIPT_TO_TERMINATE) - AllowMissionReplay = MISSION_RETRY_STAGE_START_PROCESSING; + if(AllowMissionReplay == MISSION_RETRY_STAGE_WAIT_FOR_SCRIPT_TO_TERMINATE) AllowMissionReplay = MISSION_RETRY_STAGE_START_PROCESSING; // I am fairly sure they forgot to set return value here } #endif @@ -1718,7 +1636,7 @@ int8 CRunningScript::ProcessCommands0To99(int32 command) { CollectParameters(&m_nIp, 1); script_assert(GET_INTEGER_PARAM(0) >= 0); - CRunningScript* pNew = CTheScripts::StartNewScript(GET_INTEGER_PARAM(0)); + CRunningScript *pNew = CTheScripts::StartNewScript(GET_INTEGER_PARAM(0)); CollectParameters(&m_nIp, NUM_LOCAL_VARS, pNew->m_anLocalVariables); return 0; } @@ -1728,9 +1646,7 @@ int8 CRunningScript::ProcessCommands0To99(int32 command) m_anStack[m_nStackPointer++] = m_nIp; SetIP(GET_INTEGER_PARAM(0) >= 0 ? GET_INTEGER_PARAM(0) : CTheScripts::MainScriptSize - GET_INTEGER_PARAM(0)); return 0; - case COMMAND_RETURN: - ReturnFromGosubOrFunction(); - return 0; + case COMMAND_RETURN: ReturnFromGosubOrFunction(); return 0; case COMMAND_LINE: CollectParameters(&m_nIp, 6); /* Something must have been here */ @@ -1740,455 +1656,183 @@ int8 CRunningScript::ProcessCommands0To99(int32 command) CollectParameters(&m_nIp, 4); int32 index = GET_INTEGER_PARAM(0); script_assert(index < NUMPLAYERS); + // vcs stuff todo + int mi = 0; + CModelInfo::GetModelInfo(CGameLogic::mStoredPlayerOutfit, &mi); // plr3 + //for(size_t i = 0; i < 8; i++) { CGameLogic::mStoredPlayerOutfit[i]; } // todo vcs copy str outfit + printf("&&&&&&&&&&&&&Creating player: %d\n", index); - if (!CStreaming::HasModelLoaded(MI_PLAYER)) { + if(!CStreaming::HasModelLoaded(MI_PLAYER)) { CStreaming::RequestSpecialModel(MI_PLAYER, "player", STREAMFLAGS_DONT_REMOVE | STREAMFLAGS_DEPENDENCY); + // vcs + //if(!CStreaming::HasModelLoaded(mi)) { + // CStreaming::RequestSpecialModel(mi, "player", STREAMFLAGS_DONT_REMOVE | STREAMFLAGS_DEPENDENCY); CStreaming::LoadAllRequestedModels(false); } CPlayerPed::SetupPlayerPed(index); CWorld::Players[index].m_pPed->CharCreatedBy = MISSION_CHAR; CPlayerPed::DeactivatePlayerPed(index); CVector pos = GET_VECTOR_PARAM(1); - if (pos.z <= MAP_Z_LOW_LIMIT) - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); + if(pos.z <= MAP_Z_LOW_LIMIT) pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); pos.z += CWorld::Players[index].m_pPed->GetDistanceFromCentreOfMassToBaseOfModel(); CWorld::Players[index].m_pPed->SetPosition(pos); CTheScripts::ClearSpaceForMissionEntity(pos, CWorld::Players[index].m_pPed); CPlayerPed::ReactivatePlayerPed(index); + index = CPools::GetPedPool()->GetIndex(CWorld::Players[index].m_pPed); // vcs SET_INTEGER_PARAM(0, index); StoreParameters(&m_nIp, 1); return 0; } - case COMMAND_GET_PLAYER_COORDINATES: - { - CVector pos; - CollectParameters(&m_nIp, 1); - if (CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed->bInVehicle && CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed->m_pMyVehicle) - pos = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed->m_pMyVehicle->GetPosition(); - else - pos = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed->GetPosition(); - SET_VECTOR_PARAM(0, pos); - StoreParameters(&m_nIp, 3); - return 0; - } - case COMMAND_SET_PLAYER_COORDINATES: - { - CollectParameters(&m_nIp, 4); - CVector pos = GET_VECTOR_PARAM(1); - int index = GET_INTEGER_PARAM(0); - if (pos.z <= MAP_Z_LOW_LIMIT) - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - CPlayerPed* ped = CWorld::Players[index].m_pPed; - if (ped->bInVehicle && ped->m_pMyVehicle) { - pos.z += ped->m_pMyVehicle->GetDistanceFromCentreOfMassToBaseOfModel(); - ped->m_pMyVehicle->Teleport(pos); // removed dumb stuff that was present here - CTheScripts::ClearSpaceForMissionEntity(pos, ped->m_pMyVehicle); - return 0; - } - pos.z += ped->GetDistanceFromCentreOfMassToBaseOfModel(); - CVector vOldPos = ped->GetPosition(); - ped->Teleport(pos); - CTheScripts::ClearSpaceForMissionEntity(pos, ped); - if (ped) { // great time to check - for (int i = 0; i < ped->m_numNearPeds; i++) { - CPed* pTestedPed = ped->m_nearPeds[i]; - if (!pTestedPed || !IsPedPointerValid(pTestedPed) || pTestedPed->bIsFrozen) - continue; - if (pTestedPed->m_pedInObjective == ped && pTestedPed->m_objective == OBJECTIVE_FOLLOW_CHAR_IN_FORMATION) { - CVector vFollowerPos = pTestedPed->GetFormationPosition(); - CTheScripts::ClearSpaceForMissionEntity(vFollowerPos, ped); - bool bFound = false; - vFollowerPos.z = CWorld::FindGroundZFor3DCoord(vFollowerPos.x, vFollowerPos.y, vFollowerPos.z + 1.0f, &bFound) + 1.0f; - if (bFound) { - if (CWorld::GetIsLineOfSightClear(vFollowerPos, ped->GetPosition(), true, false, false, true, false, false)) { - pTestedPed->Teleport(vFollowerPos); - } - } - } - else if (pTestedPed->m_leader == ped && !pTestedPed->bIsFrozen) { - CVector vFollowerPos; - if (pTestedPed->m_pedFormation) - vFollowerPos = pTestedPed->GetFormationPosition(); - else - vFollowerPos = ped->GetPosition() + pTestedPed->GetPosition() - vOldPos; - CTheScripts::ClearSpaceForMissionEntity(vFollowerPos, ped); - bool bFound = false; - vFollowerPos.z = CWorld::FindGroundZFor3DCoord(vFollowerPos.x, vFollowerPos.y, vFollowerPos.z + 1.0f, &bFound) + 1.0f; - if (bFound) { - if (CWorld::GetIsLineOfSightClear(vFollowerPos, ped->GetPosition(), true, false, false, true, false, false)) { - pTestedPed->Teleport(vFollowerPos); - } - } - } - } - } - return 0; - } - case COMMAND_IS_PLAYER_IN_AREA_2D: - { - CollectParameters(&m_nIp, 6); - CPlayerPed* ped = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - float x1 = GET_FLOAT_PARAM(1); - float y1 = GET_FLOAT_PARAM(2); - float x2 = GET_FLOAT_PARAM(3); - float y2 = GET_FLOAT_PARAM(4); - if (!ped->bInVehicle) - UpdateCompareFlag(ped->IsWithinArea(x1, y1, x2, y2)); - else - UpdateCompareFlag(ped->m_pMyVehicle->IsWithinArea(x1, y1, x2, y2)); - if (GET_INTEGER_PARAM(5)) - CTheScripts::HighlightImportantArea((uintptr)this + m_nIp, x1, y1, x2, y2, MAP_Z_LOW_LIMIT); - /* - if (CTheScripts::DbgFlag) - CTheScripts::DrawDebugSquare(x1, y1, x2, y2); - */ - return 0; - } - case COMMAND_IS_PLAYER_IN_AREA_3D: - { - CollectParameters(&m_nIp, 8); - CPlayerPed* ped = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - float x1 = GET_FLOAT_PARAM(1); - float y1 = GET_FLOAT_PARAM(2); - float z1 = GET_FLOAT_PARAM(3); - float x2 = GET_FLOAT_PARAM(4); - float y2 = GET_FLOAT_PARAM(5); - float z2 = GET_FLOAT_PARAM(6); - if (ped->bInVehicle) - UpdateCompareFlag(ped->m_pMyVehicle->IsWithinArea(x1, y1, z1, x2, y2, z2)); - else - UpdateCompareFlag(ped->IsWithinArea(x1, y1, z1, x2, y2, z2)); - if (GET_INTEGER_PARAM(7)) - CTheScripts::HighlightImportantArea((uintptr)this + m_nIp, x1, y1, x2, y2, (z1 + z2) / 2); - /* - if (CTheScripts::DbgFlag) - CTheScripts::DrawDebugCube(x1, y1, z1, x2, y2, z2); - */ - return 0; - } - case COMMAND_ADD_INT_VAR_TO_INT_VAR: - nScriptVar1 = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - *nScriptVar1 += *GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - return 0; - case COMMAND_ADD_INT_LVAR_TO_INT_VAR: - nScriptVar1 = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - *nScriptVar1 += *GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - return 0; - case COMMAND_ADD_INT_VAR_TO_INT_LVAR: - nScriptVar1 = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - *nScriptVar1 += *GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - return 0; case COMMAND_ADD_INT_LVAR_TO_INT_LVAR: - nScriptVar1 = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - *nScriptVar1 += *GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - return 0; - case COMMAND_ADD_FLOAT_VAR_TO_FLOAT_VAR: - fScriptVar1 = (float*)GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - *fScriptVar1 += *(float*)GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - return 0; - case COMMAND_ADD_FLOAT_LVAR_TO_FLOAT_VAR: - fScriptVar1 = (float*)GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - *fScriptVar1 += *(float*)GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - return 0; - case COMMAND_ADD_FLOAT_VAR_TO_FLOAT_LVAR: - fScriptVar1 = (float*)GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - *fScriptVar1 += *(float*)GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - return 0; + { + //nScriptVar1 = GetPointerToScriptVariable(&m_nIp); + //*nScriptVar1 += *GetPointerToScriptVariable(&m_nIp); + //return 0; + script_assert(false && "DUPLICATE HACK NEED TEST"); // DUPLICATEH.TXT + return this->ProcessCommands0To99(7); // header duplicate + } case COMMAND_ADD_FLOAT_LVAR_TO_FLOAT_LVAR: - fScriptVar1 = (float*)GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - *fScriptVar1 += *(float*)GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - return 0; - case COMMAND_SUB_INT_VAR_FROM_INT_VAR: - nScriptVar1 = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - *nScriptVar1 -= *GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - return 0; + { + //fScriptVar1 = (float*)GetPointerToScriptVariable(&m_nIp); + //*fScriptVar1 += *(float*)GetPointerToScriptVariable(&m_nIp); + //return 0; + script_assert(false && "DUPLICATE HACK NEED TEST"); // DUPLICATEH.TXT + return this->ProcessCommands0To99(8); // header duplicate + } case COMMAND_SUB_INT_LVAR_FROM_INT_LVAR: - nScriptVar1 = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - *nScriptVar1 -= *GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - return 0; - case COMMAND_SUB_FLOAT_VAR_FROM_FLOAT_VAR: - fScriptVar1 = (float*)GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - *fScriptVar1 -= *(float*)GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - return 0; + { + //nScriptVar1 = GetPointerToScriptVariable(&m_nIp); + //*nScriptVar1 -= *GetPointerToScriptVariable(&m_nIp); + //return 0; + script_assert(false && "DUPLICATE HACK NEED TEST"); // DUPLICATEH.TXT + return this->ProcessCommands0To99(9); // header duplicate + } case COMMAND_SUB_FLOAT_LVAR_FROM_FLOAT_LVAR: - fScriptVar1 = (float*)GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - *fScriptVar1 -= *(float*)GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - return 0; - default: - script_assert(0); - break; + { + //fScriptVar1 = (float*)GetPointerToScriptVariable(&m_nIp); + //*fScriptVar1 -= *(float*)GetPointerToScriptVariable(&m_nIp); + //return 0; + script_assert(false && "DUPLICATE HACK NEED TEST"); // DUPLICATEH.TXT + return this->ProcessCommands0To99(10); // header duplicate } - return -1; -} - -int8 CRunningScript::ProcessCommands100To199(int32 command) -{ - float *fScriptVar1; - int *nScriptVar1; - switch (command) { - case COMMAND_SUB_INT_LVAR_FROM_INT_VAR: - nScriptVar1 = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - *nScriptVar1 -= *GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - return 0; - case COMMAND_SUB_INT_VAR_FROM_INT_LVAR: - nScriptVar1 = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - *nScriptVar1 -= *GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - return 0; - case COMMAND_SUB_FLOAT_LVAR_FROM_FLOAT_VAR: - fScriptVar1 = (float*)GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - *fScriptVar1 -= *(float*)GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - return 0; - case COMMAND_SUB_FLOAT_VAR_FROM_FLOAT_LVAR: - fScriptVar1 = (float*)GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - *fScriptVar1 -= *(float*)GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - return 0; - case COMMAND_MULT_INT_VAR_BY_INT_VAR: - nScriptVar1 = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - *nScriptVar1 *= *GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - return 0; - case COMMAND_MULT_INT_VAR_BY_INT_LVAR: - nScriptVar1 = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - *nScriptVar1 *= *GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - return 0; - case COMMAND_MULT_INT_LVAR_BY_INT_VAR: - nScriptVar1 = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - *nScriptVar1 *= *GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - return 0; case COMMAND_MULT_INT_LVAR_BY_INT_LVAR: - nScriptVar1 = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - *nScriptVar1 *= *GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - return 0; - case COMMAND_MULT_FLOAT_VAR_BY_FLOAT_VAR: - fScriptVar1 = (float*)GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - *fScriptVar1 *= *(float*)GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - return 0; - case COMMAND_MULT_FLOAT_VAR_BY_FLOAT_LVAR: - fScriptVar1 = (float*)GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - *fScriptVar1 *= *(float*)GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - return 0; - case COMMAND_MULT_FLOAT_LVAR_BY_FLOAT_VAR: - fScriptVar1 = (float*)GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - *fScriptVar1 *= *(float*)GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - return 0; + { + //nScriptVar1 = GetPointerToScriptVariable(&m_nIp); + //*nScriptVar1 *= *GetPointerToScriptVariable(&m_nIp); + //return 0; + script_assert(false && "DUPLICATE HACK NEED TEST"); // DUPLICATEH.TXT + return this->ProcessCommands0To99(11); // header duplicate + } case COMMAND_MULT_FLOAT_LVAR_BY_FLOAT_LVAR: - fScriptVar1 = (float*)GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - *fScriptVar1 *= *(float*)GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - return 0; - case COMMAND_DIV_INT_VAR_BY_INT_VAR: - nScriptVar1 = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - *nScriptVar1 /= *GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - return 0; - case COMMAND_DIV_INT_VAR_BY_INT_LVAR: - nScriptVar1 = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - *nScriptVar1 /= *GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - return 0; - case COMMAND_DIV_INT_LVAR_BY_INT_VAR: - nScriptVar1 = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - *nScriptVar1 /= *GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - return 0; + { + //fScriptVar1 = (float*)GetPointerToScriptVariable(&m_nIp); + //*fScriptVar1 *= *(float*)GetPointerToScriptVariable(&m_nIp); + //return 0; + script_assert(false && "DUPLICATE HACK NEED TEST"); // DUPLICATEH.TXT + return this->ProcessCommands0To99(12); // header duplicate + } case COMMAND_DIV_INT_LVAR_BY_INT_LVAR: - nScriptVar1 = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - *nScriptVar1 /= *GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - return 0; - case COMMAND_DIV_FLOAT_VAR_BY_FLOAT_VAR: - fScriptVar1 = (float*)GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - *fScriptVar1 /= *(float*)GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - return 0; - case COMMAND_DIV_FLOAT_VAR_BY_FLOAT_LVAR: - fScriptVar1 = (float*)GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - *fScriptVar1 /= *(float*)GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - return 0; - case COMMAND_DIV_FLOAT_LVAR_BY_FLOAT_VAR: - fScriptVar1 = (float*)GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - *fScriptVar1 /= *(float*)GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - return 0; + { + //nScriptVar1 = GetPointerToScriptVariable(&m_nIp); + //*nScriptVar1 /= *GetPointerToScriptVariable(&m_nIp); + //return 0; + script_assert(false && "DUPLICATE HACK NEED TEST"); // DUPLICATEH.TXT + return this->ProcessCommands0To99(13); // header duplicate + } case COMMAND_DIV_FLOAT_LVAR_BY_FLOAT_LVAR: - fScriptVar1 = (float*)GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - *fScriptVar1 /= *(float*)GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - return 0; + { + //fScriptVar1 = (float*)GetPointerToScriptVariable(&m_nIp); + //*fScriptVar1 /= *(float*)GetPointerToScriptVariable(&m_nIp); + //return 0; + script_assert(false && "DUPLICATE HACK NEED TEST"); // DUPLICATEH.TXT + return this->ProcessCommands0To99(14); // header duplicate + } case COMMAND_ADD_TIMED_VAL_TO_FLOAT_VAR: - { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - CollectParameters(&m_nIp, 1); - *(float*)ptr += CTimer::GetTimeStep() * GET_FLOAT_PARAM(0); - return 0; - } - case COMMAND_ADD_TIMED_VAL_TO_FLOAT_LVAR: - { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - CollectParameters(&m_nIp, 1); - *(float*)ptr += CTimer::GetTimeStep() * GET_FLOAT_PARAM(0); - return 0; - } - case COMMAND_ADD_TIMED_FLOAT_VAR_TO_FLOAT_VAR: - fScriptVar1 = (float*)GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - *fScriptVar1 += CTimer::GetTimeStep() * *(float*)GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - return 0; - case COMMAND_ADD_TIMED_FLOAT_VAR_TO_FLOAT_LVAR: - fScriptVar1 = (float*)GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - *fScriptVar1 += CTimer::GetTimeStep() * *(float*)GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - return 0; - case COMMAND_ADD_TIMED_FLOAT_LVAR_TO_FLOAT_VAR: - fScriptVar1 = (float*)GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - *fScriptVar1 += CTimer::GetTimeStep() * *(float*)GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - return 0; + //{ + // int32* ptr = GetPointerToScriptVariable(&m_nIp); + // CollectParameters(&m_nIp, 1); + // *(float*)ptr += CTimer::GetTimeStep() * GET_FLOAT_PARAM(0); + // return 0; + //} case COMMAND_ADD_TIMED_FLOAT_LVAR_TO_FLOAT_LVAR: - fScriptVar1 = (float*)GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - *fScriptVar1 += CTimer::GetTimeStep() * *(float*)GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); + { + // lcs + //fScriptVar1 = (float*)GetPointerToScriptVariable(&m_nIp); + //*fScriptVar1 += CTimer::GetTimeStep() * *(float*)GetPointerToScriptVariable(&m_nIp); + + //vcs + debug("need test COMMAND_ADD_TIMED_FLOAT_LVAR_TO_FLOAT_LVAR\n"); + fScriptVar1 = (float*)GetPointerToScriptVariable(&m_nIp); + CollectParameters(&m_nIp, 1); + *fScriptVar1 += CTimer::GetTimeStep() * GET_FLOAT_PARAM(0); return 0; + } case COMMAND_SUB_TIMED_VAL_FROM_FLOAT_VAR: - { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - CollectParameters(&m_nIp, 1); - *(float*)ptr -= CTimer::GetTimeStep() * GET_FLOAT_PARAM(0); - return 0; - } - case COMMAND_SUB_TIMED_VAL_FROM_FLOAT_LVAR: - { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - CollectParameters(&m_nIp, 1); - *(float*)ptr -= CTimer::GetTimeStep() * GET_FLOAT_PARAM(0); - return 0; - } - case COMMAND_SUB_TIMED_FLOAT_VAR_FROM_FLOAT_VAR: - fScriptVar1 = (float*)GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - *fScriptVar1 -= CTimer::GetTimeStep() * *(float*)GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - return 0; - case COMMAND_SUB_TIMED_FLOAT_VAR_FROM_FLOAT_LVAR: - fScriptVar1 = (float*)GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - *fScriptVar1 -= CTimer::GetTimeStep() * *(float*)GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - return 0; - case COMMAND_SUB_TIMED_FLOAT_LVAR_FROM_FLOAT_VAR: - fScriptVar1 = (float*)GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - *fScriptVar1 -= CTimer::GetTimeStep() * *(float*)GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - return 0; + //{ + // int32* ptr = GetPointerToScriptVariable(&m_nIp); + // CollectParameters(&m_nIp, 1); + // *(float*)ptr -= CTimer::GetTimeStep() * GET_FLOAT_PARAM(0); + // return 0; + //} case COMMAND_SUB_TIMED_FLOAT_LVAR_FROM_FLOAT_LVAR: - fScriptVar1 = (float*)GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - *fScriptVar1 -= CTimer::GetTimeStep() * *(float*)GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - return 0; - case COMMAND_SET_VAR_INT_TO_VAR_INT: { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - *ptr = *GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); + // lcs + //fScriptVar1 = (float*)GetPointerToScriptVariable(&m_nIp); + //*fScriptVar1 -= CTimer::GetTimeStep() * *(float*)GetPointerToScriptVariable(&m_nIp); + + // vcs + debug("need test COMMAND_SUB_TIMED_FLOAT_LVAR_FROM_FLOAT_LVAR\n"); + fScriptVar1 = (float *)GetPointerToScriptVariable(&m_nIp); + CollectParameters(&m_nIp, 1); + *fScriptVar1 -= CTimer::GetTimeStep() * GET_FLOAT_PARAM(0); return 0; } case COMMAND_SET_VAR_INT_TO_LVAR_INT: - { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - *ptr = *GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - return 0; - } - case COMMAND_SET_LVAR_INT_TO_VAR_INT: - { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - *ptr = *GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - return 0; - } - case COMMAND_SET_LVAR_INT_TO_LVAR_INT: - { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - *ptr = *GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - return 0; - } + //{ + // int32* ptr = GetPointerToScriptVariable(&m_nIp); + // *ptr = *GetPointerToScriptVariable(&m_nIp); + // return 0; + //} case COMMAND_SET_VAR_FLOAT_TO_VAR_FLOAT: { - float* ptr = (float*)GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - *ptr = *(float*)GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - return 0; + //float* ptr = (float*)GetPointerToScriptVariable(&m_nIp); + //*ptr = *(float*)GetPointerToScriptVariable(&m_nIp); + //return 0; + //script_assert(false && "DUPLICATE HACK NEED TEST"); // DUPLICATEH.TXT + return this->ProcessCommands0To99(4); // header duplicate, tmp no use COMMAND_SET_VAR_INT, if change only in ScriptCommands there will be a bug here } - case COMMAND_SET_VAR_FLOAT_TO_LVAR_FLOAT: + case DUPLICATE_COMMAND_55: { - float* ptr = (float*)GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - *ptr = *(float*)GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - return 0; - } - case COMMAND_SET_LVAR_FLOAT_TO_VAR_FLOAT: - { - float* ptr = (float*)GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - *ptr = *(float*)GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - return 0; - } - case COMMAND_SET_LVAR_FLOAT_TO_LVAR_FLOAT: - { - float* ptr = (float*)GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - *ptr = *(float*)GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - return 0; - } - case COMMAND_CSET_VAR_INT_TO_VAR_FLOAT: - { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - *ptr = *(float*)GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - return 0; - } - case COMMAND_CSET_VAR_INT_TO_LVAR_FLOAT: - { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - *ptr = *(float*)GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - return 0; - } - case COMMAND_CSET_LVAR_INT_TO_VAR_FLOAT: - { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - *ptr = *(float*)GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - return 0; + //script_assert(false && "DUPLICATE HACK NEED TEST"); // DUPLICATEH.TXT + return this->ProcessCommands0To99(6); // header duplicate } case COMMAND_CSET_LVAR_INT_TO_LVAR_FLOAT: { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - *ptr = *(float*)GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - return 0; - } - case COMMAND_CSET_VAR_FLOAT_TO_VAR_INT: - { - float* ptr = (float*)GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - *ptr = *GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - return 0; - } - case COMMAND_CSET_VAR_FLOAT_TO_LVAR_INT: - { - float* ptr = (float*)GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - *ptr = *GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - return 0; - } - case COMMAND_CSET_LVAR_FLOAT_TO_VAR_INT: - { - float* ptr = (float*)GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - *ptr = *GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); + int32* ptr = GetPointerToScriptVariable(&m_nIp); + *ptr = *(float*)GetPointerToScriptVariable(&m_nIp); return 0; } case COMMAND_CSET_LVAR_FLOAT_TO_LVAR_INT: { - float* ptr = (float*)GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - *ptr = *GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); + float* ptr = (float*)GetPointerToScriptVariable(&m_nIp); + *ptr = *GetPointerToScriptVariable(&m_nIp); return 0; } case COMMAND_ABS_VAR_INT: { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - *ptr = ABS(*ptr); - return 0; - } - case COMMAND_ABS_LVAR_INT: - { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); + int32* ptr = GetPointerToScriptVariable(&m_nIp); *ptr = ABS(*ptr); return 0; } case COMMAND_ABS_VAR_FLOAT: { - float* ptr = (float*)GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - *ptr = ABS(*ptr); - return 0; - } - case COMMAND_ABS_LVAR_FLOAT: - { - float* ptr = (float*)GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - *ptr = ABS(*ptr); + float* ptr = (float*)GetPointerToScriptVariable(&m_nIp); + *ptr = ABS(*ptr); // fabsf? return 0; } case COMMAND_GENERATE_RANDOM_FLOAT: { - float* ptr = (float*)GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); + float* ptr = (float*)GetPointerToScriptVariable(&m_nIp); CGeneral::GetRandomNumber(); CGeneral::GetRandomNumber(); CGeneral::GetRandomNumber(); /* To make it EXTRA random! */ @@ -2202,7 +1846,7 @@ int8 CRunningScript::ProcessCommands100To199(int32 command) return 0; } case COMMAND_GENERATE_RANDOM_INT: - *GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL) = CGeneral::GetRandomNumber(); + *GetPointerToScriptVariable(&m_nIp) = CGeneral::GetRandomNumber(); return 0; case COMMAND_CREATE_CHAR: { @@ -2257,6 +1901,7 @@ int8 CRunningScript::ProcessCommands100To199(int32 command) ped->bIsStaticWaitingForCollision = true; CWorld::Add(ped); ped->m_nZoneLevel = CTheZones::GetLevelFromPosition(&pos); + // VCS TODO: FUNC PED WITH SOME FLAGS NEED RE------------------------------------------------------------------------------------ CPopulation::ms_nTotalMissionPeds++; SET_INTEGER_PARAM(0, CPools::GetPedPool()->GetIndex(ped)); StoreParameters(&m_nIp, 1); @@ -2267,10 +1912,22 @@ int8 CRunningScript::ProcessCommands100To199(int32 command) case COMMAND_DELETE_CHAR: { CollectParameters(&m_nIp, 1); + + // lcs + //CPed* ped = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + //CTheScripts::RemoveThisPed(ped); + + // vcs CPed* ped = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - CTheScripts::RemoveThisPed(ped); - if (m_bIsMissionScript) - CTheScripts::MissionCleanUp.RemoveEntityFromList(GET_INTEGER_PARAM(0), CLEANUP_CHAR); + if(ped) + { + if(!ped->IsPlayer()) + { + CTheScripts::RemoveThisPed(ped); + if (m_bIsMissionScript) + CTheScripts::MissionCleanUp.RemoveEntityFromList(GET_INTEGER_PARAM(0), CLEANUP_CHAR); + } + } return 0; } case COMMAND_CHAR_WANDER_DIR: @@ -2291,7 +1948,6 @@ int8 CRunningScript::ProcessCommands100To199(int32 command) ped->SetWanderPath(path); return 0; } - //case COMMAND_CHAR_WANDER_RANGE: case COMMAND_CHAR_FOLLOW_PATH: { CollectParameters(&m_nIp, 6); @@ -2354,7 +2010,7 @@ int8 CRunningScript::ProcessCommands100To199(int32 command) else vehicle = nil; CVector pos = GET_VECTOR_PARAM(1); - if (pos.z <= MAP_Z_LOW_LIMIT) + if (pos.z <= MAP_Z_LOW_LIMIT) // -250.0 ? pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); // removed dumb stuff again if (!vehicle) { @@ -2376,11 +2032,32 @@ int8 CRunningScript::ProcessCommands100To199(int32 command) } return 0; } - case COMMAND_IS_CHAR_STILL_ALIVE: + case COMMAND_IS_CHAR_STILL_ALIVE: // vcs probably done, need testing { + // lcs COMMAND_IS_CHAR_STILL_ALIVE+COMMAND_IS_PLAYER_STILL_ALIVE/ CollectParameters(&m_nIp, 1); + //lcs + //CPed *ped = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + //UpdateCompareFlag(ped && !ped->DyingOrDead()); + + //script_assert(false && "TODO COMMAND_IS_CHAR_STILL_ALIVE CPLAYERINFO FLAG"); + //GetPlayerInfoByPoolHandler(pPlayerInfo, GET_INTEGER_PARAM(0)); CPed* ped = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - UpdateCompareFlag(ped && !ped->DyingOrDead()); + //script_assert(ped); // can not found + // or this, but need RECODE TO PLINFO + //UpdateCompareFlag(ped && ((ped->IsPlayer() && (CWorld::Players[GET_INT_RECODE_TO_PLINFO_ARAM(0)].m_WBState != WBSTATE_WASTED)) || ((!ped->IsPlayer()) && (!ped->DyingOrDead())))); + bool cmp = false; // ida style + if(ped) { + if(ped->IsPlayer()) + { + CPlayerInfo *pPlayerInfo = ((CPlayerPed *)ped)->GetPlayerInfoForThisPlayerPed(); + script_assert(pPlayerInfo); + //cmp = (CWorld::Players[GET_INTEGER_PARAM(0)].m_WBState != WBSTATE_WASTED); // wrong, in vcs h is no player in focus, its pool index !! + cmp = (pPlayerInfo->m_WBState != WBSTATE_WASTED); + } // COMMAND_IS_PLAYER_STILL_ALIVE + else { cmp = (!ped->DyingOrDead()); } // COMMAND_IS_CHAR_STILL_ALIVE + } + UpdateCompareFlag(cmp); return 0; } case COMMAND_IS_CHAR_IN_AREA_2D: @@ -2439,9 +2116,18 @@ int8 CRunningScript::ProcessCommands100To199(int32 command) } case COMMAND_CREATE_CAR: { + debug("!!!!!!!!!! create car need re some subs\n"); CollectParameters(&m_nIp, 4); int32 handle; if (CModelInfo::IsBoatModel(GET_INTEGER_PARAM(0))) { +/*#ifdef MAZAHAKA_TMP_FIX_MAIN_SCM_ERRORS_IN_CODE + // mazahaka tmp main.scm fixes + if(CTheScripts::pActiveScripts && CTheScripts::pActiveScripts->m_abScriptName && (!strcmp(CTheScripts::pActiveScripts->m_abScriptName, "salh5"))) + { + CStreaming::RequestModel(GET_INTEGER_PARAM(0), 0); // StreamFlags::STREAMFLAGS_DONT_REMOVE + CStreaming::LoadAllRequestedModels(false); + } +#endif*/ CBoat* boat = new CBoat(GET_INTEGER_PARAM(0), MISSION_VEHICLE); CVector pos = GET_VECTOR_PARAM(1); if (pos.z <= MAP_Z_LOW_LIMIT) @@ -2458,6 +2144,19 @@ int8 CRunningScript::ProcessCommands100To199(int32 command) boat->bIsStaticWaitingForCollision = true; CWorld::Add(boat); handle = CPools::GetVehiclePool()->GetIndex(boat); +/*#ifdef MAZAHAKA_TMP_FIX_MAIN_SCM_ERRORS_IN_CODE + // mazahaka tmp main.scm fixes + if(CTheScripts::pActiveScripts && CTheScripts::pActiveScripts->m_abScriptName && (!strcmp(CTheScripts::pActiveScripts->m_abScriptName, "salh5"))) + { // bug explosion + //exit(0); // test + //boat->bExplosionProof = 1; // all boats in this mission exproof + //CStreaming::RequestModel(GET_INTEGER_PARAM(0), 0); // StreamFlags::STREAMFLAGS_DONT_REMOVE + //CStreaming::LoadAllRequestedModels(false); +#ifdef MAZAHAKA_MISC + //if(1) { boat->m_bIsBlowProof = 1; } // if its our car +#endif + } +#endif*/ } else { CVehicle* car; @@ -2645,6 +2344,7 @@ int8 CRunningScript::ProcessCommands100To199(int32 command) car->AutoPilot.m_nCarMission = (uint8)GET_INTEGER_PARAM(1); car->AutoPilot.m_nAntiReverseTimer = CTimer::GetTimeInMilliseconds(); } + // vcs CCarCtrl::JoinCarWithRoadSystem ?? car->bEngineOn = true; return 0; } @@ -2686,19 +2386,9 @@ int8 CRunningScript::ProcessCommands100To199(int32 command) */ return 0; } - case COMMAND_SPECIAL_0: - case COMMAND_SPECIAL_1: - case COMMAND_SPECIAL_2: - case COMMAND_SPECIAL_3: - case COMMAND_SPECIAL_4: - case COMMAND_SPECIAL_5: - case COMMAND_SPECIAL_6: - case COMMAND_SPECIAL_7: - script_assert(0); - return 0; case COMMAND_PRINT_BIG: { - wchar* key = CTheScripts::GetTextByKeyFromScript(&m_nIp); + wchar* text = GetTextByKeyFromScript(&m_nIp); #ifdef MISSION_REPLAY if (strcmp((char*)&CTheScripts::ScriptSpace[m_nIp - KEY_LENGTH_IN_SCRIPT], "M_FAIL") == 0) { if (AllowMissionReplay == MISSION_RETRY_STAGE_WAIT_FOR_TIMER_AFTER_RESTART) @@ -2708,28 +2398,28 @@ int8 CRunningScript::ProcessCommands100To199(int32 command) } #endif CollectParameters(&m_nIp, 2); - CMessages::AddBigMessage(key, GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1) - 1); + CMessages::AddBigMessage(text, GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1) - 1); return 0; } case COMMAND_PRINT: { - wchar* key = CTheScripts::GetTextByKeyFromScript(&m_nIp); + wchar* text = GetTextByKeyFromScript(&m_nIp); CollectParameters(&m_nIp, 2); - CMessages::AddMessage(key, GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); + CMessages::AddMessage(text, GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); return 0; } case COMMAND_PRINT_NOW: { - wchar* key = CTheScripts::GetTextByKeyFromScript(&m_nIp); + wchar* text = GetTextByKeyFromScript(&m_nIp); CollectParameters(&m_nIp, 2); - CMessages::AddMessageJumpQ(key, GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); + CMessages::AddMessageJumpQ(text, GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); return 0; } case COMMAND_PRINT_SOON: { - wchar* key = CTheScripts::GetTextByKeyFromScript(&m_nIp); + wchar* text = GetTextByKeyFromScript(&m_nIp); CollectParameters(&m_nIp, 2); - CMessages::AddMessageSoon(key, GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); + CMessages::AddMessageSoon(text, GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); return 0; } case COMMAND_CLEAR_PRINTS: @@ -2758,12 +2448,6 @@ int8 CRunningScript::ProcessCommands100To199(int32 command) UpdateCompareFlag(TheCamera.IsSphereVisible(pos, GET_FLOAT_PARAM(3))); return 0; } - case COMMAND_DEBUG_ON: - CTheScripts::DbgFlag = true; - return 0; - case COMMAND_DEBUG_OFF: - CTheScripts::DbgFlag = false; - return 0; case COMMAND_RETURN_TRUE: UpdateCompareFlag(true); ReturnFromGosubOrFunction(); @@ -2772,7 +2456,15 @@ int8 CRunningScript::ProcessCommands100To199(int32 command) UpdateCompareFlag(false); ReturnFromGosubOrFunction(); return 0; - //case COMMAND_VAR_INT: + case COMMAND_NULL_96: + case COMMAND_NULL_97: + case COMMAND_NULL_98: + case COMMAND_NULL_99: + { + script_assert(false && "COMMAND NULL"); + return 0; + } + default: script_assert(0); break; @@ -2780,30 +2472,35 @@ int8 CRunningScript::ProcessCommands100To199(int32 command) return -1; } -int8 CRunningScript::ProcessCommands200To299(int32 command) +int8 CRunningScript::ProcessCommands100To199(int32 command) { + float *fScriptVar1; + int *nScriptVar1; switch (command) { - /* Special commands. - case COMMAND_VAR_FLOAT: - case COMMAND_LVAR_INT: - case COMMAND_LVAR_FLOAT: - case COMMAND_LBRACKET: - case COMMAND_RBRACKET: - case COMMAND_REPEAT: - case COMMAND_ENDREPEAT: - case COMMAND_IF: - case COMMAND_IFNOT: - case COMMAND_ELSE: - case COMMAND_ENDIF: - case COMMAND_WHILE: - case COMMAND_WHILENOT: - case COMMAND_ENDWHILE: - case COMMAND_214: - case COMMAND_215: - case COMMAND_216: - case COMMAND_217: - case COMMAND_218: - */ + case COMMAND_NULL_100: + case COMMAND_NULL_101: + case COMMAND_NULL_102: + case COMMAND_NULL_103: + case COMMAND_NULL_104: + case COMMAND_NULL_105: + case COMMAND_NULL_106: + case COMMAND_NULL_107: + case COMMAND_NULL_108: + case COMMAND_NULL_109: + case COMMAND_NULL_110: + case COMMAND_NULL_111: + case COMMAND_NULL_112: + case COMMAND_NULL_113: + case COMMAND_NULL_114: + case COMMAND_NULL_115: + case COMMAND_NULL_116: + case COMMAND_NULL_117: + case COMMAND_NULL_118: + case COMMAND_NULL_119: + { + script_assert(false && "COMMAND NULL"); + return 0; + } case COMMAND_ANDOR: CollectParameters(&m_nIp, 1); m_nAndOrState = GET_INTEGER_PARAM(0); @@ -2826,9 +2523,12 @@ int8 CRunningScript::ProcessCommands200To299(int32 command) } case COMMAND_MISSION_HAS_FINISHED: { - if (!m_bIsMissionScript) - return 0; - CTheScripts::MissionCleanUp.Process(); + //lcs + //if (!m_bIsMissionScript) + // return 0; + //CTheScripts::MissionCleanUp.Process(); + + if(m_bIsMissionScript) { CTheScripts::MissionCleanUp.Process(); } return 0; } case COMMAND_STORE_CAR_CHAR_IS_IN: @@ -2883,57 +2583,6 @@ int8 CRunningScript::ProcessCommands200To299(int32 command) StoreParameters(&m_nIp, 1); return 0; } - case COMMAND_STORE_CAR_PLAYER_IS_IN: - { - CollectParameters(&m_nIp, 1); - CPed* ped = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(ped); - if (!ped->bInVehicle) - return 0; // No value written to output variable - CVehicle* pCurrent = ped->m_pMyVehicle; - script_assert(pCurrent); // Here pCurrent shouldn't be NULL anyway - int handle = CPools::GetVehiclePool()->GetIndex(pCurrent); - if (handle != CTheScripts::StoreVehicleIndex && m_bIsMissionScript) { - CVehicle* pOld = CPools::GetVehiclePool()->GetAt(CTheScripts::StoreVehicleIndex); - if (pOld){ - CCarCtrl::RemoveFromInterestingVehicleList(pOld); - if (pOld->VehicleCreatedBy == MISSION_VEHICLE && CTheScripts::StoreVehicleWasRandom){ - pOld->VehicleCreatedBy = RANDOM_VEHICLE; - pOld->bIsLocked = false; - CCarCtrl::NumRandomCars++; - CCarCtrl::NumMissionCars--; - CTheScripts::MissionCleanUp.RemoveEntityFromList(CTheScripts::StoreVehicleIndex, CLEANUP_CAR); - } - } - - CTheScripts::StoreVehicleIndex = handle; - switch (pCurrent->VehicleCreatedBy) { - case RANDOM_VEHICLE: - pCurrent->VehicleCreatedBy = MISSION_VEHICLE; - CCarCtrl::NumMissionCars++; - CCarCtrl::NumRandomCars--; - CTheScripts::StoreVehicleWasRandom = true; - CTheScripts::MissionCleanUp.AddEntityToList(CTheScripts::StoreVehicleIndex, CLEANUP_CAR); - break; - case PARKED_VEHICLE: - pCurrent->VehicleCreatedBy = MISSION_VEHICLE; - CCarCtrl::NumMissionCars++; - CCarCtrl::NumParkedCars--; - CTheScripts::StoreVehicleWasRandom = true; - CTheScripts::MissionCleanUp.AddEntityToList(CTheScripts::StoreVehicleIndex, CLEANUP_CAR); - break; - case MISSION_VEHICLE: - case PERMANENT_VEHICLE: - CTheScripts::StoreVehicleWasRandom = false; - break; - default: - break; - } - } - SET_INTEGER_PARAM(0, CTheScripts::StoreVehicleIndex); - StoreParameters(&m_nIp, 1); - return 0; - } case COMMAND_IS_CHAR_IN_CAR: { CollectParameters(&m_nIp, 2); @@ -2943,14 +2592,6 @@ int8 CRunningScript::ProcessCommands200To299(int32 command) UpdateCompareFlag(pActualVehicle && pActualVehicle == pCheckedVehicle); return 0; } - case COMMAND_IS_PLAYER_IN_CAR: - { - CollectParameters(&m_nIp, 2); - CVehicle* pCheckedVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); - CPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - UpdateCompareFlag(pPed->bInVehicle && pPed->m_pMyVehicle == pCheckedVehicle); - return 0; - } case COMMAND_IS_CHAR_IN_MODEL: { CollectParameters(&m_nIp, 2); @@ -2959,13 +2600,6 @@ int8 CRunningScript::ProcessCommands200To299(int32 command) UpdateCompareFlag(pActualVehicle && pActualVehicle->GetModelIndex() == GET_INTEGER_PARAM(1)); return 0; } - case COMMAND_IS_PLAYER_IN_MODEL: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - UpdateCompareFlag(pPed->bInVehicle && pPed->m_pMyVehicle->GetModelIndex() == GET_INTEGER_PARAM(1)); - return 0; - } case COMMAND_IS_CHAR_IN_ANY_CAR: { CollectParameters(&m_nIp, 1); @@ -2973,41 +2607,12 @@ int8 CRunningScript::ProcessCommands200To299(int32 command) UpdateCompareFlag(pPed->bInVehicle && pPed->m_pMyVehicle); return 0; } - case COMMAND_IS_PLAYER_IN_ANY_CAR: - { - CollectParameters(&m_nIp, 1); - CPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - UpdateCompareFlag(pPed->bInVehicle && pPed->m_pMyVehicle); - return 0; - } case COMMAND_IS_BUTTON_PRESSED: { CollectParameters(&m_nIp, 2); UpdateCompareFlag(GetPadState(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)) != 0); return 0; } - /* - case COMMAND_GET_PAD_STATE: - { - CollectParameters(&m_nIp, 1); - SET_INTEGER_PARAM(0, GetPadState(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1))); - StoreParameters(&m_nIp, 1); - return 0; - } - */ - case COMMAND_LOCATE_PLAYER_ANY_MEANS_2D: - case COMMAND_LOCATE_PLAYER_ON_FOOT_2D: - case COMMAND_LOCATE_PLAYER_IN_CAR_2D: - case COMMAND_LOCATE_STOPPED_PLAYER_ANY_MEANS_2D: - case COMMAND_LOCATE_STOPPED_PLAYER_ON_FOOT_2D: - case COMMAND_LOCATE_STOPPED_PLAYER_IN_CAR_2D: - LocatePlayerCommand(command, &m_nIp); - return 0; - case COMMAND_LOCATE_PLAYER_ANY_MEANS_CHAR_2D: - case COMMAND_LOCATE_PLAYER_ON_FOOT_CHAR_2D: - case COMMAND_LOCATE_PLAYER_IN_CAR_CHAR_2D: - LocatePlayerCharCommand(command, &m_nIp); - return 0; case COMMAND_LOCATE_CHAR_ANY_MEANS_2D: case COMMAND_LOCATE_CHAR_ON_FOOT_2D: case COMMAND_LOCATE_CHAR_IN_CAR_2D: @@ -3021,19 +2626,6 @@ int8 CRunningScript::ProcessCommands200To299(int32 command) case COMMAND_LOCATE_CHAR_IN_CAR_CHAR_2D: LocateCharCharCommand(command, &m_nIp); return 0; - case COMMAND_LOCATE_PLAYER_ANY_MEANS_3D: - case COMMAND_LOCATE_PLAYER_ON_FOOT_3D: - case COMMAND_LOCATE_PLAYER_IN_CAR_3D: - case COMMAND_LOCATE_STOPPED_PLAYER_ANY_MEANS_3D: - case COMMAND_LOCATE_STOPPED_PLAYER_ON_FOOT_3D: - case COMMAND_LOCATE_STOPPED_PLAYER_IN_CAR_3D: - LocatePlayerCommand(command, &m_nIp); - return 0; - case COMMAND_LOCATE_PLAYER_ANY_MEANS_CHAR_3D: - case COMMAND_LOCATE_PLAYER_ON_FOOT_CHAR_3D: - case COMMAND_LOCATE_PLAYER_IN_CAR_CHAR_3D: - LocatePlayerCharCommand(command, &m_nIp); - return 0; case COMMAND_LOCATE_CHAR_ANY_MEANS_3D: case COMMAND_LOCATE_CHAR_ON_FOOT_3D: case COMMAND_LOCATE_CHAR_IN_CAR_3D: @@ -3085,23 +2677,49 @@ int8 CRunningScript::ProcessCommands200To299(int32 command) return 0; } case COMMAND_ADD_SCORE: + { CollectParameters(&m_nIp, 2); - CWorld::Players[GET_INTEGER_PARAM(0)].m_nMoney += GET_INTEGER_PARAM(1); - if (CWorld::Players[GET_INTEGER_PARAM(0)].m_nMoney < 0) - CWorld::Players[GET_INTEGER_PARAM(0)].m_nMoney = 0; + + // lcs + //CWorld::Players[GET_INTEGER_PARAM(0)].m_nMoney += GET_INTEGER_PARAM(1); + //if (CWorld::Players[GET_INTEGER_PARAM(0)].m_nMoney < 0) + // CWorld::Players[GET_INTEGER_PARAM(0)].m_nMoney = 0; + + // vcs + GetPlayerInfoByPoolHandler(pPlayerInfo, GET_INTEGER_PARAM(0)); + + pPlayerInfo->m_nMoney += GET_INTEGER_PARAM(1); + if(pPlayerInfo->m_nMoney < 0) { pPlayerInfo->m_nMoney = 0; } return 0; + } case COMMAND_IS_SCORE_GREATER: + { CollectParameters(&m_nIp, 2); - UpdateCompareFlag(CWorld::Players[GET_INTEGER_PARAM(0)].m_nMoney > GET_INTEGER_PARAM(1)); + // lcs + //UpdateCompareFlag(CWorld::Players[GET_INTEGER_PARAM(0)].m_nMoney > GET_INTEGER_PARAM(1)); + + // vcs + GetPlayerInfoByPoolHandler(pPlayerInfo, GET_INTEGER_PARAM(0)); + UpdateCompareFlag(pPlayerInfo->m_nMoney > GET_INTEGER_PARAM(1)); return 0; + } case COMMAND_STORE_SCORE: + { CollectParameters(&m_nIp, 1); - SET_INTEGER_PARAM(0, CWorld::Players[GET_INTEGER_PARAM(0)].m_nMoney); + // lcs + //SET_INTEGER_PARAM(0, CWorld::Players[GET_INTEGER_PARAM(0)].m_nMoney); + + // vcs + GetPlayerInfoByPoolHandler(pPlayerInfo, GET_INTEGER_PARAM(0)); + SET_INTEGER_PARAM(0, pPlayerInfo->m_nMoney); StoreParameters(&m_nIp, 1); return 0; + } case COMMAND_GIVE_REMOTE_CONTROLLED_CAR_TO_PLAYER: { CollectParameters(&m_nIp, 5); + // vcs playerinfo macro?? + //GetPlayerInfoByPoolHandler(pPlayerInfo, GET_INTEGER_PARAM(0)); CVector pos = GET_VECTOR_PARAM(1); if (pos.z <= MAP_Z_LOW_LIMIT) pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); @@ -3111,21 +2729,49 @@ int8 CRunningScript::ProcessCommands200To299(int32 command) return 0; } case COMMAND_ALTER_WANTED_LEVEL: + { CollectParameters(&m_nIp, 2); - CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed->SetWantedLevel(GET_INTEGER_PARAM(1)); + // lcs + //CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed->SetWantedLevel(GET_INTEGER_PARAM(1)); + + // vcs + GetPlayerInfoByPoolHandler(pPlayerInfo, GET_INTEGER_PARAM(0)); + pPlayerInfo->m_pPed->SetWantedLevel(GET_INTEGER_PARAM(1)); return 0; + } case COMMAND_ALTER_WANTED_LEVEL_NO_DROP: + { CollectParameters(&m_nIp, 2); - CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed->SetWantedLevelNoDrop(GET_INTEGER_PARAM(1)); + // lcs + //CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed->SetWantedLevelNoDrop(GET_INTEGER_PARAM(1)); + + // vcs + GetPlayerInfoByPoolHandler(pPlayerInfo, GET_INTEGER_PARAM(0)); + pPlayerInfo->m_pPed->SetWantedLevelNoDrop(GET_INTEGER_PARAM(1)); return 0; + } case COMMAND_IS_WANTED_LEVEL_GREATER: + { CollectParameters(&m_nIp, 2); - UpdateCompareFlag(CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed->m_pWanted->GetWantedLevel() > GET_INTEGER_PARAM(1)); + // lcs + //UpdateCompareFlag(CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed->m_pWanted->GetWantedLevel() > GET_INTEGER_PARAM(1)); + + // vcs + GetPlayerInfoByPoolHandler(pPlayerInfo, GET_INTEGER_PARAM(0)); + UpdateCompareFlag(pPlayerInfo->m_pPed->m_pWanted->GetWantedLevel() > GET_INTEGER_PARAM(1)); return 0; + } case COMMAND_CLEAR_WANTED_LEVEL: + { CollectParameters(&m_nIp, 1); - CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed->SetWantedLevel(0); + // lcs + //CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed->SetWantedLevel(0); + + // vcs + GetPlayerInfoByPoolHandler(pPlayerInfo, GET_INTEGER_PARAM(0)); + pPlayerInfo->m_pPed->SetWantedLevel(0); return 0; + } case COMMAND_SET_DEATHARREST_STATE: CollectParameters(&m_nIp, 1); m_bDeatharrestEnabled = (GET_INTEGER_PARAM(0) == 1); @@ -3133,14 +2779,6 @@ int8 CRunningScript::ProcessCommands200To299(int32 command) case COMMAND_HAS_DEATHARREST_BEEN_EXECUTED: UpdateCompareFlag(m_bDeatharrestExecuted); return 0; - /* - case COMMAND_ADD_AMMO_TO_PLAYER: - { - CollectParameters(&m_nIp, 3); - CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed->GrantAmmo((eWeaponType)GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2)); - return 0; - } - */ case COMMAND_ADD_AMMO_TO_CHAR: { CollectParameters(&m_nIp, 3); @@ -3149,20 +2787,27 @@ int8 CRunningScript::ProcessCommands200To299(int32 command) pPed->GrantAmmo((eWeaponType)GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2)); return 0; } - //case COMMAND_ADD_AMMO_TO_CAR: - case COMMAND_IS_PLAYER_STILL_ALIVE: - CollectParameters(&m_nIp, 1); - UpdateCompareFlag(CWorld::Players[GET_INTEGER_PARAM(0)].m_WBState != WBSTATE_WASTED); - return 0; - case COMMAND_IS_PLAYER_DEAD: - CollectParameters(&m_nIp, 1); - UpdateCompareFlag(CWorld::Players[GET_INTEGER_PARAM(0)].m_WBState == WBSTATE_WASTED); - return 0; case COMMAND_IS_CHAR_DEAD: { CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - UpdateCompareFlag(!pPed || pPed->DyingOrDead() || pPed->m_objective == OBJECTIVE_LEAVE_CAR_AND_DIE); + // lcs + //CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + //UpdateCompareFlag(!pPed || pPed->DyingOrDead() || pPed->m_objective == OBJECTIVE_LEAVE_CAR_AND_DIE); + + // vcs + //script_assert(false && "TEST THIS COMMAND_IS_CHAR_DEAD"); + CPed *ped = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + bool cmp = false; // ida style + if(ped) { + if(ped->IsPlayer()) { + CPlayerInfo *pPlayerInfo = ((CPlayerPed *)ped)->GetPlayerInfoForThisPlayerPed(); + script_assert(pPlayerInfo); + cmp = pPlayerInfo && (pPlayerInfo->m_WBState == WBSTATE_WASTED); + } + else { cmp = (ped->DyingOrDead() || (ped->m_objective == OBJECTIVE_LEAVE_CAR_AND_DIE)); } + } + //debug("dead? : %d\n", cmp); + UpdateCompareFlag(ped ? cmp : true); // !pPed is dead return 0; } case COMMAND_IS_CAR_DEAD: @@ -3180,7 +2825,6 @@ int8 CRunningScript::ProcessCommands200To299(int32 command) pPed->m_fearFlags |= GET_INTEGER_PARAM(1); return 0; } - //case COMMAND_SET_CHAR_THREAT_REACTION: case COMMAND_SET_CHAR_OBJ_NO_OBJ: { CollectParameters(&m_nIp, 1); @@ -3190,45 +2834,6 @@ int8 CRunningScript::ProcessCommands200To299(int32 command) pPed->ClearObjective(); return 0; } - //case COMMAND_ORDER_DRIVER_OUT_OF_CAR: - //case COMMAND_ORDER_CHAR_TO_DRIVE_CAR: - //case COMMAND_ADD_PATROL_POINT: - //case COMMAND_IS_PLAYER_IN_GANGZONE: - case COMMAND_IS_PLAYER_IN_ZONE: - { - CollectParameters(&m_nIp, 1); - CPlayerInfo* pPlayer = &CWorld::Players[GET_INTEGER_PARAM(0)]; - char label[12]; - CTheScripts::ReadTextLabelFromScript(&m_nIp, label); - int zoneToCheck = CTheZones::FindZoneByLabelAndReturnIndex(label, ZONE_DEFAULT); - if (zoneToCheck != -1) - m_nIp += KEY_LENGTH_IN_SCRIPT; /* why only if zone != -1? */ - CVector pos = pPlayer->GetPos(); - CZone* pZone = CTheZones::GetNavigationZone(zoneToCheck); - UpdateCompareFlag(CTheZones::PointLiesWithinZone(&pos, pZone)); - return 0; - } - case COMMAND_IS_PLAYER_PRESSING_HORN: - CollectParameters(&m_nIp, 1); - UpdateCompareFlag(CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed->GetPedState() == PED_DRIVING && - CPad::GetPad(GET_INTEGER_PARAM(0))->GetHorn()); - return 0; - case COMMAND_HAS_CHAR_SPOTTED_PLAYER: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - UpdateCompareFlag(pPed->OurPedCanSeeThisOne(CWorld::Players[GET_INTEGER_PARAM(1)].m_pPed)); - return 0; - } -#ifdef SUPPORT_GINPUT_SCRIPT - case COMMAND_HAS_PAD_IN_HANDS: - UpdateCompareFlag(CPad::GetPad(0)->IsAffectedByController); - return 0; -#else - //case COMMAND_ORDER_CHAR_TO_BACKDOOR: -#endif - //case COMMAND_ADD_CHAR_TO_GANG: case COMMAND_IS_CHAR_OBJECTIVE_PASSED: { CollectParameters(&m_nIp, 1); @@ -3237,13 +2842,10 @@ int8 CRunningScript::ProcessCommands200To299(int32 command) UpdateCompareFlag(pPed->bScriptObjectiveCompleted); return 0; } - /* Not implemented. - case COMMAND_SET_CHAR_DRIVE_AGGRESSION: - case COMMAND_SET_CHAR_MAX_DRIVESPEED: - */ case COMMAND_CREATE_CHAR_INSIDE_CAR: { CollectParameters(&m_nIp, 3); + debug("ida COMMAND_CREATE_CHAR_INSIDE_CAR re some funcs\n"); CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); script_assert(pVehicle); switch (GET_INTEGER_PARAM(2)) { @@ -3311,46 +2913,372 @@ int8 CRunningScript::ProcessCommands200To299(int32 command) CTheScripts::MissionCleanUp.AddEntityToList(GET_INTEGER_PARAM(0), CLEANUP_CHAR); return 0; } - case COMMAND_WARP_PLAYER_FROM_CAR_TO_COORD: + case COMMAND_HAS_PLAYER_BEEN_ARRESTED: { - CollectParameters(&m_nIp, 4); - CVector pos = GET_VECTOR_PARAM(1); - CPlayerInfo* pPlayer = &CWorld::Players[GET_INTEGER_PARAM(0)]; - if (pos.z <= MAP_Z_LOW_LIMIT) - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - if (pPlayer->m_pPed->bInVehicle){ - script_assert(pPlayer->m_pPed->m_pMyVehicle); - if (pPlayer->m_pPed->m_pMyVehicle->bIsBus) - pPlayer->m_pPed->bRenderPedInCar = true; - if (pPlayer->m_pPed->m_pMyVehicle->pDriver == pPlayer->m_pPed){ - pPlayer->m_pPed->m_pMyVehicle->RemoveDriver(); - pPlayer->m_pPed->m_pMyVehicle->SetStatus(STATUS_ABANDONED); - pPlayer->m_pPed->m_pMyVehicle->bEngineOn = false; - pPlayer->m_pPed->m_pMyVehicle->AutoPilot.m_nCruiseSpeed = 0; - }else{ - pPlayer->m_pPed->m_pMyVehicle->RemovePassenger(pPlayer->m_pPed); - } - } - pPlayer->m_pPed->RemoveInCarAnims(); - pPlayer->m_pPed->bInVehicle = false; - pPlayer->m_pPed->m_pMyVehicle = nil; - pPlayer->m_pPed->SetPedState(PED_IDLE); - pPlayer->m_pPed->bUsesCollision = true; - pPlayer->m_pPed->SetMoveSpeed(0.0f, 0.0f, 0.0f); - pPlayer->m_pPed->ReplaceWeaponWhenExitingVehicle(); - if (pPlayer->m_pPed->m_pVehicleAnim) - pPlayer->m_pPed->m_pVehicleAnim->blendDelta = -1000.0f; - pPlayer->m_pPed->m_pVehicleAnim = nil; - pPlayer->m_pPed->SetMoveState(PEDMOVE_NONE); - CAnimManager::BlendAnimation(pPlayer->m_pPed->GetClump(), pPlayer->m_pPed->m_animGroup, ANIM_STD_IDLE, 1000.0f); - pPlayer->m_pPed->RestartNonPartialAnims(); - AudioManager.PlayerJustLeftCar(); - pos.z += pPlayer->m_pPed->GetDistanceFromCentreOfMassToBaseOfModel(); - pPlayer->m_pPed->Teleport(pos); - CTheScripts::ClearSpaceForMissionEntity(pos, pPlayer->m_pPed); + CollectParameters(&m_nIp, 1); + // lcs + //UpdateCompareFlag(CWorld::Players[GET_INTEGER_PARAM(0)].m_WBState == WBSTATE_BUSTED); + + // vcs + GetPlayerInfoByPoolHandler(pPlayerInfo, GET_INTEGER_PARAM(0)); + UpdateCompareFlag(pPlayerInfo->m_WBState == WBSTATE_BUSTED); return 0; } - //case COMMAND_MAKE_CHAR_DO_NOTHING: + case COMMAND_IS_CAR_MODEL: + { + CollectParameters(&m_nIp, 2); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + UpdateCompareFlag(pVehicle->GetModelIndex() == GET_INTEGER_PARAM(1)); + return 0; + } + case COMMAND_GIVE_CAR_ALARM: + { + CollectParameters(&m_nIp, 1); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + pVehicle->m_nAlarmState = -1; + return 0; + } + case COMMAND_IS_CAR_CRUSHED: + CollectParameters(&m_nIp, 1); + UpdateCompareFlag(CGarages::HasCarBeenCrushed(GET_INTEGER_PARAM(0))); + return 0; + case COMMAND_CREATE_CAR_GENERATOR: + { + CollectParameters(&m_nIp, 12); + CVector pos = GET_VECTOR_PARAM(0); + if (pos.z > MAP_Z_LOW_LIMIT) + pos.z += 0.015f; + SET_INTEGER_PARAM(0, CTheCarGenerators::CreateCarGenerator( + pos.x, pos.y, pos.z, GET_FLOAT_PARAM(3), + GET_INTEGER_PARAM(4), GET_INTEGER_PARAM(5), GET_INTEGER_PARAM(6), GET_INTEGER_PARAM(7), + GET_INTEGER_PARAM(8), GET_INTEGER_PARAM(9), GET_INTEGER_PARAM(10), GET_INTEGER_PARAM(11))); + StoreParameters(&m_nIp, 1); + return 0; + } + case COMMAND_SWITCH_CAR_GENERATOR: + { + CollectParameters(&m_nIp, 2); + CCarGenerator* pCarGen = &CTheCarGenerators::CarGeneratorArray[GET_INTEGER_PARAM(0)]; + if (GET_INTEGER_PARAM(1) == 0) { + pCarGen->SwitchOff(); + } + else if (GET_INTEGER_PARAM(1) <= 100) { + pCarGen->SwitchOn(); + pCarGen->SetUsesRemaining(GET_INTEGER_PARAM(1)); + } + else { + pCarGen->SwitchOn(); + } + return 0; + } + case COMMAND_DISPLAY_ONSCREEN_TIMER: + { + uint16 offset = (uint8*)GetPointerToScriptVariable(&m_nIp) - CTheScripts::ScriptSpace; + CollectParameters(&m_nIp, 1); + CUserDisplay::OnscnTimer.AddClock(offset, nil, GET_INTEGER_PARAM(0) != 0); + return 0; + } + case COMMAND_CLEAR_ONSCREEN_TIMER: + { + uint16 offset = (uint8*)GetPointerToScriptVariable(&m_nIp) - CTheScripts::ScriptSpace; + CUserDisplay::OnscnTimer.ClearClock(offset); + return 0; + } + case COMMAND_DISPLAY_ONSCREEN_COUNTER: + { + uint16 counter = (uint8*)GetPointerToScriptVariable(&m_nIp) - CTheScripts::ScriptSpace; + CollectParameters(&m_nIp, 1); + CUserDisplay::OnscnTimer.AddCounter(counter, GET_INTEGER_PARAM(0), nil, 0, -1, nil, 0); + return 0; + } + case COMMAND_CLEAR_ONSCREEN_COUNTER: + { + uint16 counter = (uint8*)GetPointerToScriptVariable(&m_nIp) - CTheScripts::ScriptSpace; + CUserDisplay::OnscnTimer.ClearCounter(counter); + return 0; + } + case COMMAND_SET_ZONE_CAR_INFO: + { + int16 gangDensities[NUM_GANGS] = { 0 }; + int i; + + // lcs + //char label[12]; + //CTheScripts::ReadTextLabelFromScript(&m_nIp, label); + //m_nIp += KEY_LENGTH_IN_SCRIPT; + + //vcs + const char *label = GetKeyFromScript(&m_nIp); + //script_assert(false && "NEED TEST"); + + CollectParameters(&m_nIp, 12); + for (i = 0; i < NUM_GANGS; i++) + gangDensities[i] = ScriptParams[i + 2]; + int zone = CTheZones::FindZoneByLabelAndReturnIndex((char*)label, ZONE_INFO); + for (int i = 0; i < NUM_GANGS; i++) { + if (gangDensities[i] != 0 && CGangs::GetGangInfo(i)->m_nVehicleMI == -1) + debug("SET_ZONE_CAR_INFO - Gang %d car ratio should be 0 in %s zone\n", i + 1, label); + } + if (zone < 0) { + debug("Couldn't find zone - %s\n", label); + return 0; + } + while (zone >= 0) { + CTheZones::SetZoneCarInfo(zone, GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(11), gangDensities); + zone = CTheZones::FindNextZoneByLabelAndReturnIndex((char*)label, ZONE_INFO); + } + return 0; + } + case COMMAND_IS_CHAR_IN_ZONE: // navig.zon ?? + { + CollectParameters(&m_nIp, 1); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + + // lcs + //char label[12]; + //CTheScripts::ReadTextLabelFromScript(&m_nIp, label); + //int zone = CTheZones::FindZoneByLabelAndReturnIndex(label, ZONE_DEFAULT); + //if (zone != -1) + // m_nIp += KEY_LENGTH_IN_SCRIPT; + + //vcs + const char *label = GetKeyFromScript(&m_nIp); + //const char *label = (const char*)GetPointerToScriptVariable(&m_nIp); + int zone = CTheZones::FindZoneByLabelAndReturnIndex((char*)label, ZONE_DEFAULT); + script_assert(zone != -1); + //script_assert(false && "NEED TEST"); + debug("NEED TEST COMMAND_IS_CHAR_IN_ZONE\n"); + + CVector pos = pPed->bInVehicle ? pPed->m_pMyVehicle->GetPosition() : pPed->GetPosition(); + UpdateCompareFlag(CTheZones::PointLiesWithinZone(&pos, CTheZones::GetNavigationZone(zone))); + return 0; + } + case COMMAND_SET_CAR_DENSITY: + { + char label[12]; + CTheScripts::ReadTextLabelFromScript(&m_nIp, label); + int16 zone = CTheZones::FindZoneByLabelAndReturnIndex(label, ZONE_INFO); + m_nIp += 8; + CollectParameters(&m_nIp, 2); + if (zone < 0) { + debug("Couldn't find zone - %s\n", label); + return 0; + } + while (zone >= 0) { + CTheZones::SetCarDensity(zone, ScriptParams[0], ScriptParams[1]); + zone = CTheZones::FindNextZoneByLabelAndReturnIndex(label, ZONE_INFO); + } + return 0; + } + case COMMAND_SET_PED_DENSITY: + { + char label[12]; + CTheScripts::ReadTextLabelFromScript(&m_nIp, label); + int16 zone = CTheZones::FindZoneByLabelAndReturnIndex(label, ZONE_INFO); + m_nIp += KEY_LENGTH_IN_SCRIPT; + CollectParameters(&m_nIp, 2); + if (zone < 0) { + debug("Couldn't find zone - %s\n", label); + return 0; + } + while (zone >= 0) { + CTheZones::SetPedDensity(zone, ScriptParams[0], ScriptParams[1]); + zone = CTheZones::FindNextZoneByLabelAndReturnIndex(label, ZONE_INFO); + } + return 0; + } + case COMMAND_POINT_CAMERA_AT_PLAYER: + { + CollectParameters(&m_nIp, 3); + TheCamera.TakeControl(nil, GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), CAMCONTROL_SCRIPT); + return 0; + } + case COMMAND_POINT_CAMERA_AT_CAR: + { + CollectParameters(&m_nIp, 3); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + if (pVehicle) + TheCamera.TakeControl(pVehicle, GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), CAMCONTROL_SCRIPT); + return 0; + } + case COMMAND_POINT_CAMERA_AT_CHAR: + { + CollectParameters(&m_nIp, 3); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + if (pPed) + TheCamera.TakeControl(pPed, GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), CAMCONTROL_SCRIPT); + return 0; + } + case COMMAND_RESTORE_CAMERA: + TheCamera.Restore(); + return 0; + case COMMAND_SET_ZONE_PED_INFO: + { + // lcs + //char label[12]; + //CTheScripts::ReadTextLabelFromScript(&m_nIp, label); + //m_nIp += KEY_LENGTH_IN_SCRIPT; + + //vcs + const char *label = GetKeyFromScript(&m_nIp); + + CollectParameters(&m_nIp, 12); + int16 zone = CTheZones::FindZoneByLabelAndReturnIndex((char*)label, ZONE_INFO); + if (zone < 0) { + debug("Couldn't find zone - %s\n", label); + return 0; + } + while (zone >= 0) { + CTheZones::SetZonePedInfo(zone, GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), GET_INTEGER_PARAM(3), + GET_INTEGER_PARAM(4), GET_INTEGER_PARAM(5), GET_INTEGER_PARAM(6), GET_INTEGER_PARAM(7), GET_INTEGER_PARAM(8), GET_INTEGER_PARAM(9), GET_INTEGER_PARAM(10), GET_INTEGER_PARAM(11)); + zone = CTheZones::FindNextZoneByLabelAndReturnIndex((char*)label, ZONE_INFO); + } + return 0; + } + case COMMAND_SET_TIME_SCALE: + CollectParameters(&m_nIp, 1); + CTimer::SetTimeScale(GET_FLOAT_PARAM(0)); + return 0; + case COMMAND_SET_FIXED_CAMERA_POSITION: + { + CollectParameters(&m_nIp, 6); + TheCamera.SetCamPositionForFixedMode( + CVector(GET_FLOAT_PARAM(0), GET_FLOAT_PARAM(1), GET_FLOAT_PARAM(2)), + CVector(GET_FLOAT_PARAM(3), GET_FLOAT_PARAM(4), GET_FLOAT_PARAM(5))); + return 0; + } + case COMMAND_POINT_CAMERA_AT_POINT: + { + CollectParameters(&m_nIp, 4); + CVector pos = GET_VECTOR_PARAM(0); + if (pos.z <= MAP_Z_LOW_LIMIT) + pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); + TheCamera.TakeControlNoEntity(pos, GET_INTEGER_PARAM(3), CAMCONTROL_SCRIPT); + return 0; + } + case COMMAND_REMOVE_BLIP: + CollectParameters(&m_nIp, 1); + CRadar::ClearBlip(GET_INTEGER_PARAM(0)); + return 0; + case COMMAND_CHANGE_BLIP_COLOUR: + CollectParameters(&m_nIp, 2); + CRadar::ChangeBlipColour(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); + return 0; + case COMMAND_DIM_BLIP: + CollectParameters(&m_nIp, 2); + CRadar::ChangeBlipBrightness(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); + return 0; + case COMMAND_ADD_BLIP_FOR_COORD_OLD: + { + CollectParameters(&m_nIp, 5); + CVector pos = GET_VECTOR_PARAM(0); + if (pos.z <= MAP_Z_LOW_LIMIT) + pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); + CRadar::GetActualBlipArrayIndex(CollectNextParameterWithoutIncreasingPC(m_nIp)); + SET_INTEGER_PARAM(0, CRadar::SetCoordBlip(BLIP_COORD, pos, GET_INTEGER_PARAM(3), (eBlipDisplay)GET_INTEGER_PARAM(4))); + StoreParameters(&m_nIp, 1); + return 0; + } + case COMMAND_CHANGE_BLIP_SCALE: + CollectParameters(&m_nIp, 2); + CRadar::ChangeBlipScale(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); + return 0; + case COMMAND_ADD_BLIP_FOR_CAR: + { + CollectParameters(&m_nIp, 1); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + CRadar::GetActualBlipArrayIndex(CollectNextParameterWithoutIncreasingPC(m_nIp)); + int handle = CRadar::SetEntityBlip(BLIP_CAR, GET_INTEGER_PARAM(0), 0, BLIP_DISPLAY_BOTH); + CRadar::ChangeBlipScale(handle, 3); + SET_INTEGER_PARAM(0, handle); + StoreParameters(&m_nIp, 1); + return 0; + } + case COMMAND_ADD_BLIP_FOR_CHAR: + { + CollectParameters(&m_nIp, 1); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + CRadar::GetActualBlipArrayIndex(CollectNextParameterWithoutIncreasingPC(m_nIp)); + int handle = CRadar::SetEntityBlip(BLIP_CHAR, GET_INTEGER_PARAM(0), 1, BLIP_DISPLAY_BOTH); + CRadar::ChangeBlipScale(handle, 3); + SET_INTEGER_PARAM(0, handle); + StoreParameters(&m_nIp, 1); + return 0; + } + case COMMAND_ADD_BLIP_FOR_OBJECT: + { + CollectParameters(&m_nIp, 1); + CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pObject); + CRadar::GetActualBlipArrayIndex(CollectNextParameterWithoutIncreasingPC(m_nIp)); + int handle = CRadar::SetEntityBlip(BLIP_OBJECT, GET_INTEGER_PARAM(0), 6, BLIP_DISPLAY_BOTH); + CRadar::ChangeBlipScale(handle, 3); + SET_INTEGER_PARAM(0, handle); + StoreParameters(&m_nIp, 1); + return 0; + } + case COMMAND_ADD_BLIP_FOR_COORD: + { + CollectParameters(&m_nIp, 3); + CVector pos = GET_VECTOR_PARAM(0); + if (pos.z <= MAP_Z_LOW_LIMIT) + pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); + CRadar::GetActualBlipArrayIndex(CollectNextParameterWithoutIncreasingPC(m_nIp)); + int handle = CRadar::SetCoordBlip(BLIP_COORD, pos, 5, BLIP_DISPLAY_BOTH); + CRadar::ChangeBlipScale(handle, 3); + SET_INTEGER_PARAM(0, handle); + StoreParameters(&m_nIp, 1); + return 0; + } + case COMMAND_CHANGE_BLIP_DISPLAY: + CollectParameters(&m_nIp, 2); + CRadar::ChangeBlipDisplay(GET_INTEGER_PARAM(0), (eBlipDisplay)GET_INTEGER_PARAM(1)); + return 0; + case COMMAND_ADD_SPRITE_BLIP_FOR_CONTACT_POINT: + { + CollectParameters(&m_nIp, 4); + CVector pos = GET_VECTOR_PARAM(0); + if (pos.z <= MAP_Z_LOW_LIMIT) + pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); + CRadar::GetActualBlipArrayIndex(CollectNextParameterWithoutIncreasingPC(m_nIp)); + int id = CRadar::SetCoordBlip(BLIP_CONTACT_POINT, pos, 2, BLIP_DISPLAY_BOTH); + CRadar::SetBlipSprite(id, GET_INTEGER_PARAM(3)); + SET_INTEGER_PARAM(0, id); + StoreParameters(&m_nIp, 1); + return 0; + } + case COMMAND_ADD_SPRITE_BLIP_FOR_COORD: + { + CollectParameters(&m_nIp, 4); + CVector pos = GET_VECTOR_PARAM(0); + if (pos.z <= MAP_Z_LOW_LIMIT) + pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); + CRadar::GetActualBlipArrayIndex(CollectNextParameterWithoutIncreasingPC(m_nIp)); + int id = CRadar::SetCoordBlip(BLIP_COORD, pos, 4, BLIP_DISPLAY_BOTH); + CRadar::SetBlipSprite(id, GET_INTEGER_PARAM(3)); + SET_INTEGER_PARAM(0, id); + StoreParameters(&m_nIp, 1); + return 0; + } + case COMMAND_ADD_SHORT_RANGE_SPRITE_BLIP_FOR_COORD: + { + CollectParameters(&m_nIp, 4); + CVector pos = GET_VECTOR_PARAM(0); + if (pos.z <= MAP_Z_LOW_LIMIT) + pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); + CRadar::GetActualBlipArrayIndex(CollectNextParameterWithoutIncreasingPC(m_nIp)); + int id = CRadar::SetShortRangeCoordBlip(BLIP_COORD, pos, 5, BLIP_DISPLAY_BOTH); + CRadar::SetBlipSprite(id, GET_INTEGER_PARAM(3)); + SET_INTEGER_PARAM(0, id); + StoreParameters(&m_nIp, 1); + return 0; + } + default: script_assert(0); break; @@ -3358,6 +3286,989 @@ int8 CRunningScript::ProcessCommands200To299(int32 command) return -1; } +int8 CRunningScript::ProcessCommands200To299(int32 command) +{ + switch (command) { + case COMMAND_SET_FADING_COLOUR: + CollectParameters(&m_nIp, 3); + TheCamera.SetFadeColour(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2)); + return 0; + case COMMAND_DO_FADE: + { + // unknown empty call on PS2, not mobile + CollectParameters(&m_nIp, 2); + float fFadeTime = GET_INTEGER_PARAM(0); + TheCamera.Fade(fFadeTime > 2 ? fFadeTime / 1000.0f : 0.0f, GET_INTEGER_PARAM(1)); + return 0; + } + case COMMAND_GET_FADING_STATUS: + UpdateCompareFlag(TheCamera.GetFading()); + return 0; + case COMMAND_ADD_HOSPITAL_RESTART: + { + CollectParameters(&m_nIp, 4); + CVector pos = GET_VECTOR_PARAM(0); + float angle = GET_FLOAT_PARAM(3); + if (pos.z <= MAP_Z_LOW_LIMIT) + pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); + CRestart::AddHospitalRestartPoint(pos, angle); + return 0; + } + case COMMAND_ADD_POLICE_RESTART: + { + CollectParameters(&m_nIp, 4); + CVector pos = GET_VECTOR_PARAM(0); + float angle = GET_FLOAT_PARAM(3); + if (pos.z <= MAP_Z_LOW_LIMIT) + pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); + CRestart::AddPoliceRestartPoint(pos, angle); + return 0; + } + case COMMAND_OVERRIDE_NEXT_RESTART: + { + CollectParameters(&m_nIp, 4); + CVector pos = GET_VECTOR_PARAM(0); + float angle = GET_FLOAT_PARAM(3); + if (pos.z <= MAP_Z_LOW_LIMIT) + pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); + CRestart::OverrideNextRestart(pos, angle); + return 0; + } + case COMMAND_GET_CHAR_HEADING: + { + CollectParameters(&m_nIp, 1); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + float angle = pPed->bInVehicle ? pPed->m_pMyVehicle->GetForward().Heading() : pPed->GetForward().Heading(); + angle = RADTODEG(angle); + if (angle < 0.0f) + angle += 360.0f; + if (angle > 360.0f) + angle -= 360.0f; + SET_FLOAT_PARAM(0, angle); + StoreParameters(&m_nIp, 1); + return 0; + } + case COMMAND_SET_CHAR_HEADING: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + if (pPed->bInVehicle) + return 0; + pPed->m_fRotationDest = pPed->m_fRotationCur = DEGTORAD(GET_FLOAT_PARAM(1)); + pPed->SetHeading(DEGTORAD(GET_FLOAT_PARAM(1))); + return 0; + } + case COMMAND_GET_CAR_HEADING: + { + CollectParameters(&m_nIp, 1); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + float angle = pVehicle->GetForward().Heading(); + angle = RADTODEG(angle); + if (angle < 0.0f) + angle += 360.0f; + if (angle > 360.0f) + angle -= 360.0f; + SET_FLOAT_PARAM(0, angle); + StoreParameters(&m_nIp, 1); + return 0; + } + case COMMAND_SET_CAR_HEADING: + { + CollectParameters(&m_nIp, 2); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + pVehicle->SetHeading(DEGTORAD(GET_FLOAT_PARAM(1))); + return 0; + } + case COMMAND_GET_OBJECT_HEADING: + { + CollectParameters(&m_nIp, 1); + CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pObject); + float angle = pObject->GetForward().Heading(); + angle = RADTODEG(angle); + if (angle < 0.0f) + angle += 360.0f; + if (angle > 360.0f) + angle -= 360.0f; + SET_FLOAT_PARAM(0, angle); + StoreParameters(&m_nIp, 1); + return 0; + } + case COMMAND_SET_OBJECT_HEADING: + { + CollectParameters(&m_nIp, 2); + CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pObject); + CWorld::Remove(pObject); + pObject->SetHeading(DEGTORAD(GET_FLOAT_PARAM(1))); + pObject->GetMatrix().UpdateRW(); + pObject->UpdateRwFrame(); + CWorld::Add(pObject); + return 0; + } + case COMMAND_IS_CHAR_TOUCHING_OBJECT: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]); + script_assert(pPed); + CObject* pObject = CPools::GetObjectPool()->GetAt(ScriptParams[1]); + script_assert(pObject); + CPhysical* pEntityToTest = pPed->bInVehicle ? (CPhysical*)pPed->m_pMyVehicle : pPed; + UpdateCompareFlag(pEntityToTest->GetHasCollidedWith(pObject)); + return 0; + } + case COMMAND_SET_CHAR_AMMO: + { + CollectParameters(&m_nIp, 3); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + pPed->SetAmmo((eWeaponType)GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2)); + return 0; + } + case COMMAND_DECLARE_MISSION_FLAG: + CTheScripts::OnAMissionFlag = (uint8*)GetPointerToScriptVariable(&m_nIp) - CTheScripts::ScriptSpace; + return 0; + case COMMAND_IS_CHAR_HEALTH_GREATER: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + UpdateCompareFlag(pPed->m_fHealth > GET_INTEGER_PARAM(1)); + return 0; + } + case COMMAND_IS_CAR_HEALTH_GREATER: + { + CollectParameters(&m_nIp, 2); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + UpdateCompareFlag(pVehicle->m_fHealth > GET_INTEGER_PARAM(1)); + return 0; + } + case COMMAND_ADD_ONE_OFF_SOUND: + { + CollectParameters(&m_nIp, 4); + debug("TODO: COMMAND_ADD_ONE_OFF_SOUND\n"); + switch (GET_INTEGER_PARAM(3)) { + case SCRIPT_SOUND_PART_MISSION_COMPLETE: + DMAudio.PlayFrontEndSound(SOUND_PART_MISSION_COMPLETE, 0); + return 0; + case SCRIPT_SOUND_RACE_START_3: + DMAudio.PlayFrontEndSound(SOUND_RACE_START_3, 0); + return 0; + case SCRIPT_SOUND_RACE_START_2: + DMAudio.PlayFrontEndSound(SOUND_RACE_START_2, 0); + return 0; + case SCRIPT_SOUND_RACE_START_1: + DMAudio.PlayFrontEndSound(SOUND_RACE_START_1, 0); + return 0; + case SCRIPT_SOUND_RACE_START_GO: + DMAudio.PlayFrontEndSound(SOUND_RACE_START_GO, 0); + return 0; + case SCRIPT_SOUND_AMMUNATION_BUY_WEAPON: + DMAudio.PlayFrontEndSound(SOUND_PICKUP_WEAPON_BOUGHT, 0); + return 0; + case SCRIPT_SOUND_AMMUNATION_BUY_WEAPON_DENIED: + DMAudio.PlayFrontEndSound(SOUND_GARAGE_NO_MONEY, 0); + return 0; + case SCRIPT_SOUND_IMRAN_ARM_BOMB: + DMAudio.PlayFrontEndSound(SOUND_AMMUNATION_IMRAN_ARM_BOMB, 0); + return 0; + case 0x46: // TODO + DMAudio.PlayFrontEndSound(0xC4, 0); + return 0; + case 0x47: // TODO + DMAudio.PlayFrontEndSound(0xCD, 0); + return 0; + default: + break; + } + if (!DMAudio.IsAudioInitialised()) // LCS doesn't have it. Why? + return 0; + cAudioScriptObject* obj = new cAudioScriptObject(); + obj->Posn = GET_VECTOR_PARAM(0); + obj->AudioId = GET_INTEGER_PARAM(3); + obj->AudioEntity = AEHANDLE_NONE; + DMAudio.CreateOneShotScriptObject(obj); + return 0; + } + case COMMAND_ADD_CONTINUOUS_SOUND: + { + CollectParameters(&m_nIp, 4); + if (DMAudio.IsAudioInitialised()) { // LCS doesn't have it. Why? + cAudioScriptObject* obj = new cAudioScriptObject(); + obj->Posn = GET_VECTOR_PARAM(0); + obj->AudioId = GET_INTEGER_PARAM(3); + obj->AudioEntity = DMAudio.CreateLoopingScriptObject(obj); + SET_INTEGER_PARAM(0, CPools::GetAudioScriptObjectPool()->GetIndex(obj)); + } + else + SET_INTEGER_PARAM(0, -1); + StoreParameters(&m_nIp, 1); + return 0; + } + case COMMAND_REMOVE_SOUND: + { + CollectParameters(&m_nIp, 1); + cAudioScriptObject* obj = CPools::GetAudioScriptObjectPool()->GetAt(GET_INTEGER_PARAM(0)); + if (!obj) { + debug("REMOVE_SOUND - Sound doesn't exist\n"); + return 0; + } + DMAudio.DestroyLoopingScriptObject(obj->AudioEntity); + delete obj; + return 0; + } + case COMMAND_IS_CAR_STUCK_ON_ROOF: + { + CollectParameters(&m_nIp, 1); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + UpdateCompareFlag(CTheScripts::UpsideDownCars.HasCarBeenUpsideDownForAWhile(GET_INTEGER_PARAM(0))); + return 0; + } + case COMMAND_ADD_UPSIDEDOWN_CAR_CHECK: + { + CollectParameters(&m_nIp, 1); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + CTheScripts::UpsideDownCars.AddCarToCheck(GET_INTEGER_PARAM(0)); + return 0; + } + case COMMAND_REMOVE_UPSIDEDOWN_CAR_CHECK: + { + CollectParameters(&m_nIp, 1); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + CTheScripts::UpsideDownCars.RemoveCarFromCheck(GET_INTEGER_PARAM(0)); + return 0; + } + case COMMAND_SET_CHAR_OBJ_WAIT_ON_FOOT: + { + CollectParameters(&m_nIp, 1); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + pPed->bScriptObjectiveCompleted = false; + pPed->SetObjective(OBJECTIVE_WAIT_ON_FOOT); + return 0; + } + case COMMAND_SET_CHAR_OBJ_FLEE_ON_FOOT_TILL_SAFE: + { + CollectParameters(&m_nIp, 1); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + pPed->bScriptObjectiveCompleted = false; + pPed->SetObjective(OBJECTIVE_FLEE_CHAR_ON_FOOT_TILL_SAFE); + return 0; + } + case COMMAND_SET_CHAR_OBJ_GUARD_SPOT: + { + CollectParameters(&m_nIp, 4); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + CVector pos = GET_VECTOR_PARAM(1); + if (pos.z <= MAP_Z_LOW_LIMIT) + pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); + pPed->bScriptObjectiveCompleted = false; + pPed->SetObjective(OBJECTIVE_GUARD_SPOT, pos); + return 0; + } + case COMMAND_SET_CHAR_OBJ_GUARD_AREA: + { + CollectParameters(&m_nIp, 5); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + float infX = GET_FLOAT_PARAM(1); + float infY = GET_FLOAT_PARAM(2); + float supX = GET_FLOAT_PARAM(3); + float supY = GET_FLOAT_PARAM(4); + if (infX > supX) { + infX = GET_FLOAT_PARAM(3); + supX = GET_FLOAT_PARAM(1); + } + if (infY > supY) { + infY = GET_FLOAT_PARAM(4); + supY = GET_FLOAT_PARAM(2); + } + CVector pos; + pos.x = (infX + supX) / 2; + pos.y = (infY + supY) / 2; + pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); + float radius = Max(pos.x - infX, pos.y - infY); + pPed->bScriptObjectiveCompleted = false; + pPed->SetObjective(OBJECTIVE_GUARD_SPOT, pos, radius); + return 0; + } + case COMMAND_SET_CHAR_OBJ_WAIT_IN_CAR: + { + CollectParameters(&m_nIp, 1); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + pPed->bScriptObjectiveCompleted = false; + pPed->SetObjective(OBJECTIVE_WAIT_IN_CAR); + return 0; + } + case COMMAND_SET_CHAR_OBJ_KILL_CHAR_ON_FOOT: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + CPed* pTarget = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(1)); + pPed->bScriptObjectiveCompleted = false; + pPed->SetObjective(OBJECTIVE_KILL_CHAR_ON_FOOT, pTarget); + return 0; + } + case COMMAND_SET_CHAR_OBJ_KILL_CHAR_ANY_MEANS: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + CPed* pTarget = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(1)); + pPed->bScriptObjectiveCompleted = false; + pPed->SetObjective(OBJECTIVE_KILL_CHAR_ANY_MEANS, pTarget); + return 0; + } + case COMMAND_SET_CHAR_OBJ_FLEE_CHAR_ON_FOOT_ALWAYS: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + CPed* pTarget = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(1)); + pPed->bScriptObjectiveCompleted = false; + pPed->SetObjective(OBJECTIVE_FLEE_CHAR_ON_FOOT_ALWAYS, pTarget); + return 0; + } + case COMMAND_SET_CHAR_OBJ_GOTO_CHAR_ON_FOOT: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + CPed* pTarget = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(1)); + pPed->bScriptObjectiveCompleted = false; + pPed->SetObjective(OBJECTIVE_GOTO_CHAR_ON_FOOT, pTarget); + return 0; + } + case COMMAND_SET_CHAR_OBJ_LEAVE_CAR: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); + pPed->bScriptObjectiveCompleted = false; + pPed->SetObjective(OBJECTIVE_LEAVE_CAR, pVehicle); + return 0; + } + case COMMAND_SET_CHAR_OBJ_ENTER_CAR_AS_PASSENGER: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); + pPed->bScriptObjectiveCompleted = false; + pPed->SetObjective(OBJECTIVE_ENTER_CAR_AS_PASSENGER, pVehicle); + return 0; + } + case COMMAND_SET_CHAR_OBJ_ENTER_CAR_AS_DRIVER: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); + pPed->bScriptObjectiveCompleted = false; + pPed->SetObjective(OBJECTIVE_ENTER_CAR_AS_DRIVER, pVehicle); + return 0; + } + case COMMAND_SET_CHAR_OBJ_DESTROY_OBJECT: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(1)); + pPed->bScriptObjectiveCompleted = false; + pPed->SetObjective(OBJECTIVE_DESTROY_OBJECT, pObject); + return 0; + } + case COMMAND_SET_CHAR_OBJ_DESTROY_CAR: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); + pPed->bScriptObjectiveCompleted = false; + pPed->SetObjective(OBJECTIVE_DESTROY_CAR, pVehicle); + return 0; + } + case COMMAND_SET_CHAR_OBJ_GOTO_AREA_ON_FOOT: + { + CollectParameters(&m_nIp, 5); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + float infX = GET_FLOAT_PARAM(1); + float infY = GET_FLOAT_PARAM(2); + float supX = GET_FLOAT_PARAM(3); + float supY = GET_FLOAT_PARAM(4); + if (infX > supX) { + infX = GET_FLOAT_PARAM(3); + supX = GET_FLOAT_PARAM(1); + } + if (infY > supY) { + infY = GET_FLOAT_PARAM(4); + supY = GET_FLOAT_PARAM(2); + } + CVector pos; + pos.x = (infX + supX) / 2; + pos.y = (infY + supY) / 2; + pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); + float radius = Max(pos.x - infX, pos.y - infY); + pPed->bScriptObjectiveCompleted = false; + pPed->SetObjective(OBJECTIVE_GOTO_AREA_ON_FOOT, pos, radius); + return 0; + } + case COMMAND_SET_CHAR_OBJ_GOTO_COORD_ON_FOOT: + { + CollectParameters(&m_nIp, 3); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + CVector target; + target.x = GET_FLOAT_PARAM(1); + target.y = GET_FLOAT_PARAM(2); + target.z = CWorld::FindGroundZForCoord(target.x, target.y); + pPed->bScriptObjectiveCompleted = false; + pPed->SetObjective(OBJECTIVE_GOTO_AREA_ON_FOOT, target); + return 0; + } + case COMMAND_SET_CHAR_OBJ_FOLLOW_CHAR_IN_FORMATION: + { + CollectParameters(&m_nIp, 3); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + CPed* pTargetPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(1)); + pPed->bScriptObjectiveCompleted = false; + pPed->SetObjective(OBJECTIVE_FOLLOW_CHAR_IN_FORMATION, pTargetPed); + pPed->SetFormation((eFormation)GET_INTEGER_PARAM(2)); + return 0; + } + case COMMAND_SET_CHAR_OBJ_STEAL_ANY_CAR: + { + CollectParameters(&m_nIp, 1); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + pPed->bScriptObjectiveCompleted = false; + pPed->SetObjective(OBJECTIVE_STEAL_ANY_CAR); + return 0; + } + case COMMAND_SET_CHAR_OBJ_LEAVE_ANY_CAR: + { + CollectParameters(&m_nIp, 1); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + pPed->bScriptObjectiveCompleted = false; + pPed->SetObjective(OBJECTIVE_LEAVE_CAR, pPed->m_pMyVehicle); + return 0; + } + case COMMAND_SET_CHAR_OBJ_FLEE_CAR: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); + script_assert(pVehicle); + pPed->bScriptObjectiveCompleted = false; + pPed->SetObjective(OBJECTIVE_FLEE_CAR, pVehicle); + return 0; + } + case COMMAND_SET_CHAR_OBJ_WALK_TO_CHAR: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + CPed* pTargetPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(1)); + script_assert(pTargetPed); + pPed->bScriptObjectiveCompleted = false; + pPed->SetObjective(OBJECTIVE_GOTO_CHAR_ON_FOOT_WALKING, pTargetPed); + return 0; + } + case COMMAND_SET_CHAR_OBJ_AIM_GUN_AT_CHAR: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + CPed* pTargetPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(1)); + script_assert(pTargetPed); + pPed->bScriptObjectiveCompleted = false; + pPed->SetObjective(OBJECTIVE_AIM_GUN_AT, pTargetPed); + return 0; + } + case COMMAND_SET_CHAR_OBJ_SPRINT_TO_COORD: + { + CollectParameters(&m_nIp, 3); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + CVector pos; + pos.x = GET_FLOAT_PARAM(1); + pos.y = GET_FLOAT_PARAM(2); + pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); + pPed->bScriptObjectiveCompleted = false; + pPed->SetObjective(OBJECTIVE_SPRINT_TO_AREA, pos); + return 0; + } + case COMMAND_IS_CHAR_IN_AREA_ON_FOOT_2D: + case COMMAND_IS_CHAR_IN_AREA_IN_CAR_2D: + case COMMAND_IS_CHAR_STOPPED_IN_AREA_2D: + case COMMAND_IS_CHAR_STOPPED_IN_AREA_ON_FOOT_2D: + case COMMAND_IS_CHAR_STOPPED_IN_AREA_IN_CAR_2D: + case COMMAND_IS_CHAR_IN_AREA_ON_FOOT_3D: + case COMMAND_IS_CHAR_IN_AREA_IN_CAR_3D: + case COMMAND_IS_CHAR_STOPPED_IN_AREA_3D: + case COMMAND_IS_CHAR_STOPPED_IN_AREA_ON_FOOT_3D: + case COMMAND_IS_CHAR_STOPPED_IN_AREA_IN_CAR_3D: + CharInAreaCheckCommand(command, &m_nIp); + return 0; + case COMMAND_IS_CAR_STOPPED_IN_AREA_2D: + case COMMAND_IS_CAR_STOPPED_IN_AREA_3D: + CarInAreaCheckCommand(command, &m_nIp); + return 0; + case COMMAND_LOCATE_CAR_2D: + case COMMAND_LOCATE_STOPPED_CAR_2D: + case COMMAND_LOCATE_CAR_3D: + case COMMAND_LOCATE_STOPPED_CAR_3D: + LocateCarCommand(command, &m_nIp); + return 0; + case COMMAND_GIVE_WEAPON_TO_CHAR: + { + CollectParameters(&m_nIp, 3); + debug("TODO: VCS COMMAND_GIVE_WEAPON_TO_CHAR other anims code\n"); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + pPed->SetCurrentWeapon(pPed->GiveWeapon((eWeaponType)GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2))); + if (pPed->bInVehicle && pPed->m_pMyVehicle) + pPed->RemoveWeaponModel(CWeaponInfo::GetWeaponInfo(pPed->m_weapons[pPed->m_currentWeapon].m_eWeaponType)->m_nModelId); + // todo vcs: some anims logic + return 0; + } + case COMMAND_SET_PLAYER_CONTROL: + { + CollectParameters(&m_nIp, 2); + //CPed *pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + //return 0; + // lcs + //CPlayerInfo* pPlayer = &CWorld::Players[GET_INTEGER_PARAM(0)]; + + // vcs + GetPlayerInfoByPoolHandler(pPlayer, GET_INTEGER_PARAM(0)); + + if (FindPlayerPed()) { + if (FindPlayerPed()->GetPedState() != PED_JUMP) { + FindPlayerPed()->bIsLanding = false; + FindPlayerPed()->bIsInTheAir = false; + } + FindPlayerPed()->RestoreHeadingRate(); + } + if (GET_INTEGER_PARAM(1)) { + pPlayer->MakePlayerSafe(false); + if (FindPlayerPed()->GetStatus() != PED_DRIVING && !FindPlayerPed()->m_attachedTo) { + // FindPlayerPed()->SetIdleAndResetAnim(); // TODO! + } + } + else { + pPlayer->MakePlayerSafe(true); + if (FindPlayerPed()->GetPedState() > PED_STATES_NO_AI && FindPlayerPed()->GetPedState() != PED_DRIVING && TheCamera.GetScreenFadeStatus() == FADE_2) { + // FindPlayerPed()->SetIdleAndResetAnim(); // TODO! + } + } + return 0; + } + case COMMAND_FORCE_WEATHER: + CollectParameters(&m_nIp, 1); + CWeather::ForceWeather(GET_INTEGER_PARAM(0)); + return 0; + case COMMAND_FORCE_WEATHER_NOW: + CollectParameters(&m_nIp, 1); + CWeather::ForceWeatherNow(GET_INTEGER_PARAM(0)); + return 0; + case COMMAND_RELEASE_WEATHER: + CWeather::ReleaseWeather(); + return 0; + case COMMAND_SET_CURRENT_CHAR_WEAPON: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + debug("TODO VCS: COMMAND_SET_CURRENT_CHAR_WEAPON else code block anims check\n"); + for (int i = 0; i < TOTAL_WEAPON_SLOTS; i++) { + if (pPed->m_weapons[i].m_eWeaponType == GET_INTEGER_PARAM(1)) + pPed->SetCurrentWeapon(i); + } + return 0; + } + case COMMAND_GET_OBJECT_COORDINATES: + { + CollectParameters(&m_nIp, 1); + CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pObject); + SET_VECTOR_PARAM(0, pObject->GetPosition()); + StoreParameters(&m_nIp, 3); + return 0; + } + case COMMAND_SET_OBJECT_COORDINATES: + { + CollectParameters(&m_nIp, 4); + CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pObject); + CVector pos = GET_VECTOR_PARAM(1); + if (pos.z <= MAP_Z_LOW_LIMIT) + pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); + pObject->Teleport(pos); + CTheScripts::ClearSpaceForMissionEntity(pos, pObject); + return 0; + } + case COMMAND_GET_GAME_TIMER: + SET_INTEGER_PARAM(0, CTimer::GetTimeInMilliseconds()); + StoreParameters(&m_nIp, 1); + return 0; + case COMMAND_TURN_CHAR_TO_FACE_COORD: + { + CollectParameters(&m_nIp, 4); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + CVehicle* pVehicle; + CVector pos; + if (pPed->bInVehicle) + pVehicle = pPed->m_pMyVehicle; + else + pVehicle = nil; + if (pVehicle) + pos = pVehicle->GetPosition(); + else + pos = pPed->GetPosition(); + float heading = CGeneral::GetATanOfXY(pos.x - GET_FLOAT_PARAM(1), pos.y - GET_FLOAT_PARAM(2)); + heading += HALFPI; + if (heading > TWOPI) + heading -= TWOPI; + if (!pVehicle) { + pPed->m_fRotationCur = heading; + pPed->m_fRotationDest = heading; + pPed->SetHeading(heading); + } + return 0; + } + case COMMAND_STORE_WANTED_LEVEL: + { + CollectParameters(&m_nIp, 1); + CPlayerPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; + script_assert(pPed); + SET_INTEGER_PARAM(0, pPed->m_pWanted->GetWantedLevel()); + StoreParameters(&m_nIp, 1); + return 0; + } + case COMMAND_IS_CAR_STOPPED: + { + CollectParameters(&m_nIp, 1); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + UpdateCompareFlag(CTheScripts::IsVehicleStopped(pVehicle)); + return 0; + } + case COMMAND_MARK_CHAR_AS_NO_LONGER_NEEDED: + { + CollectParameters(&m_nIp, 1); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + CTheScripts::CleanUpThisPed(pPed); + if (m_bIsMissionScript) + CTheScripts::MissionCleanUp.RemoveEntityFromList(GET_INTEGER_PARAM(0), CLEANUP_CHAR); + return 0; + } + case COMMAND_MARK_CAR_AS_NO_LONGER_NEEDED: + { + CollectParameters(&m_nIp, 1); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + CTheScripts::CleanUpThisVehicle(pVehicle); + if (m_bIsMissionScript) + CTheScripts::MissionCleanUp.RemoveEntityFromList(GET_INTEGER_PARAM(0), CLEANUP_CAR); + return 0; + } + case COMMAND_MARK_OBJECT_AS_NO_LONGER_NEEDED: + { + CollectParameters(&m_nIp, 1); + CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); + CTheScripts::CleanUpThisObject(pObject); + if (m_bIsMissionScript) + CTheScripts::MissionCleanUp.RemoveEntityFromList(GET_INTEGER_PARAM(0), CLEANUP_OBJECT); + return 0; + } + case COMMAND_DONT_REMOVE_CHAR: + { + CollectParameters(&m_nIp, 1); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + // vcs CreatedBy 2 + pPed->CharCreatedBy = MISSION_CHAR; // vcs + CTheScripts::MissionCleanUp.RemoveEntityFromList(GET_INTEGER_PARAM(0), CLEANUP_CHAR); + return 0; + } + case COMMAND_DONT_REMOVE_CAR: + { + CollectParameters(&m_nIp, 1); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + CTheScripts::MissionCleanUp.RemoveEntityFromList(GET_INTEGER_PARAM(0), CLEANUP_CAR); + return 0; + } + case COMMAND_DONT_REMOVE_OBJECT: + { + CollectParameters(&m_nIp, 1); + CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pObject); + CTheScripts::MissionCleanUp.RemoveEntityFromList(GET_INTEGER_PARAM(0), CLEANUP_OBJECT); + return 0; + } + case COMMAND_CREATE_CHAR_AS_PASSENGER: + { + CollectParameters(&m_nIp, 4); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + switch (GET_INTEGER_PARAM(2)) { + case MI_COP: + if (GET_INTEGER_PARAM(1) == PEDTYPE_COP) + SET_INTEGER_PARAM(2, COP_STREET); + break; + case MI_SWAT: + if (GET_INTEGER_PARAM(1) == PEDTYPE_COP) + SET_INTEGER_PARAM(2, COP_SWAT); + break; + case MI_FBI: + if (GET_INTEGER_PARAM(1) == PEDTYPE_COP) + SET_INTEGER_PARAM(2, COP_FBI); + break; + case MI_ARMY: + if (GET_INTEGER_PARAM(1) == PEDTYPE_COP) + SET_INTEGER_PARAM(2, COP_ARMY); + break; + case MI_MEDIC: + if (GET_INTEGER_PARAM(1) == PEDTYPE_EMERGENCY) + SET_INTEGER_PARAM(2, PEDTYPE_EMERGENCY); + break; + case MI_FIREMAN: + if (GET_INTEGER_PARAM(1) == PEDTYPE_FIREMAN) + SET_INTEGER_PARAM(2, PEDTYPE_FIREMAN); + break; + default: + break; + } + CPed* pPed; + if (GET_INTEGER_PARAM(1) == PEDTYPE_COP) + pPed = new CCopPed((eCopType)GET_INTEGER_PARAM(2)); + else if (GET_INTEGER_PARAM(1) == PEDTYPE_EMERGENCY || GET_INTEGER_PARAM(1) == PEDTYPE_FIREMAN) + pPed = new CEmergencyPed(GET_INTEGER_PARAM(2)); + else + pPed = new CCivilianPed((ePedType)GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2)); + pPed->CharCreatedBy = MISSION_CHAR; + pPed->bRespondsToThreats = false; + pPed->bAllowMedicsToReviveMe = false; + pPed->bIsPlayerFriend = false; + if (pVehicle->bIsBus) + pPed->bRenderPedInCar = false; + pPed->SetPosition(pVehicle->GetPosition()); + pPed->SetOrientation(0.0f, 0.0f, 0.0f); + CPopulation::ms_nTotalMissionPeds++; + CWorld::Add(pPed); + if (GET_INTEGER_PARAM(3) >= 0) + pVehicle->AddPassenger(pPed, GET_INTEGER_PARAM(3)); + else + pVehicle->AddPassenger(pPed); + pPed->m_pMyVehicle = pVehicle; + pPed->m_pMyVehicle->RegisterReference((CEntity**)&pPed->m_pMyVehicle); + pPed->bInVehicle = true; + pPed->SetPedState(PED_DRIVING); + pPed->bUsesCollision = false; + pPed->AddInCarAnims(pVehicle, false); + pPed->m_nZoneLevel = CTheZones::GetLevelFromPosition(&pPed->GetPosition()); + SET_INTEGER_PARAM(0, CPools::GetPedPool()->GetIndex(pPed)); + StoreParameters(&m_nIp, 1); + if (m_bIsMissionScript) + CTheScripts::MissionCleanUp.AddEntityToList(GET_INTEGER_PARAM(0), CLEANUP_CHAR); + return 0; + } + case COMMAND_SET_CHAR_AS_LEADER: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + CPed* pTarget = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(1)); + pPed->SetObjective(OBJECTIVE_SET_LEADER, pTarget); + return 0; + } + case COMMAND_LEAVE_GROUP: + { + CollectParameters(&m_nIp, 1); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + pPed->ClearLeader(); + return 0; + } + case COMMAND_SET_CHAR_OBJ_FOLLOW_ROUTE: + { + CollectParameters(&m_nIp, 3); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + pPed->bScriptObjectiveCompleted = false; + pPed->SetObjective(OBJECTIVE_FOLLOW_ROUTE, GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2)); + return 0; + } + case COMMAND_ADD_ROUTE_POINT: + { + CollectParameters(&m_nIp, 4); + CRouteNode::AddRoutePoint(GET_INTEGER_PARAM(0), GET_VECTOR_PARAM(1)); + return 0; + } + case COMMAND_PRINT_WITH_NUMBER_BIG: + { + wchar* text = GetTextByKeyFromScript(&m_nIp); + CollectParameters(&m_nIp, 3); + CMessages::AddBigMessageWithNumber(text, GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2) - 1, GET_INTEGER_PARAM(0), -1, -1, -1, -1, -1); + return 0; + } + case COMMAND_PRINT_WITH_NUMBER: + { + wchar* text = GetTextByKeyFromScript(&m_nIp); + CollectParameters(&m_nIp, 3); + CMessages::AddMessageWithNumber(text, GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), GET_INTEGER_PARAM(0), -1, -1, -1, -1, -1); + return 0; + } + case COMMAND_PRINT_WITH_NUMBER_NOW: + { + wchar* text = GetTextByKeyFromScript(&m_nIp); + CollectParameters(&m_nIp, 3); + CMessages::AddMessageJumpQWithNumber(text, GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), GET_INTEGER_PARAM(0), -1, -1, -1, -1, -1); // 1 + return 0; + } + case COMMAND_PRINT_WITH_NUMBER_SOON: + { + wchar* text = GetTextByKeyFromScript(&m_nIp); + CollectParameters(&m_nIp, 3); + CMessages::AddMessageSoonWithNumber(text, GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), GET_INTEGER_PARAM(0), -1, -1, -1, -1, -1); + return 0; + } + case COMMAND_SWITCH_ROADS_ON: + { + CollectParameters(&m_nIp, 6); + float infX = GET_FLOAT_PARAM(0); + float infY = GET_FLOAT_PARAM(1); + float infZ = GET_FLOAT_PARAM(2); + float supX = GET_FLOAT_PARAM(3); + float supY = GET_FLOAT_PARAM(4); + float supZ = GET_FLOAT_PARAM(5); + if (infX > supX) { + infX = GET_FLOAT_PARAM(3); + supX = GET_FLOAT_PARAM(0); + } + if (infY > supY) { + infY = GET_FLOAT_PARAM(4); + supY = GET_FLOAT_PARAM(1); + } + if (infZ > supZ) { + infZ = GET_FLOAT_PARAM(5); + supZ = GET_FLOAT_PARAM(2); + } + ThePaths.SwitchRoadsOffInArea(infX, supX, infY, supY, infZ, supZ, false); + return 0; + } + case COMMAND_SWITCH_ROADS_OFF: + { + CollectParameters(&m_nIp, 6); + float infX = GET_FLOAT_PARAM(0); + float infY = GET_FLOAT_PARAM(1); + float infZ = GET_FLOAT_PARAM(2); + float supX = GET_FLOAT_PARAM(3); + float supY = GET_FLOAT_PARAM(4); + float supZ = GET_FLOAT_PARAM(5); + if (infX > supX) { + infX = GET_FLOAT_PARAM(3); + supX = GET_FLOAT_PARAM(0); + } + if (infY > supY) { + infY = GET_FLOAT_PARAM(4); + supY = GET_FLOAT_PARAM(1); + } + if (infZ > supZ) { + infZ = GET_FLOAT_PARAM(5); + supZ = GET_FLOAT_PARAM(2); + } + ThePaths.SwitchRoadsOffInArea(infX, supX, infY, supY, infZ, supZ, true); + return 0; + } + case COMMAND_GET_NUMBER_OF_PASSENGERS: + { + CollectParameters(&m_nIp, 1); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + SET_INTEGER_PARAM(0, pVehicle->m_nNumPassengers); + StoreParameters(&m_nIp, 1); + return 0; + } + case COMMAND_GET_MAXIMUM_NUMBER_OF_PASSENGERS: + { + CollectParameters(&m_nIp, 1); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + SET_INTEGER_PARAM(0, pVehicle->m_nNumMaxPassengers); + StoreParameters(&m_nIp, 1); + return 0; + } + case COMMAND_SET_CAR_DENSITY_MULTIPLIER: + { + CollectParameters(&m_nIp, 1); + CCarCtrl::CarDensityMultiplier = GET_FLOAT_PARAM(0); + return 0; + } + case COMMAND_SET_CAR_HEAVY: + { + CollectParameters(&m_nIp, 2); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + if (GET_INTEGER_PARAM(1) != 0) { + pVehicle->bIsHeavy = true; + pVehicle->m_fMass = 3.0f * pVehicle->pHandling->fMass; // TODO: tHandlingData::GetMass() + pVehicle->m_fTurnMass = 5.0f * pVehicle->pHandling->fTurnMass; // TODO: tHandlingData::GetTurnMass() + } + else { + pVehicle->bIsHeavy = false; + pVehicle->m_fMass = pVehicle->pHandling->fMass; // TODO: tHandlingData::GetMass() + pVehicle->m_fTurnMass = pVehicle->pHandling->fTurnMass; // TODO: tHandlingData::GetTurnMass() + } + return 0; + } + case COMMAND_CLEAR_CHAR_THREAT_SEARCH: + { + CollectParameters(&m_nIp, 1); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + pPed->m_fearFlags = 0; + script_assert(false && "TODO VCS COMMAND_CLEAR_CHAR_THREAT_SEARCH some func call check"); + return 0; + } + case COMMAND_SET_MAX_WANTED_LEVEL: + { + CollectParameters(&m_nIp, 1); + CWanted::SetMaximumWantedLevel(GET_INTEGER_PARAM(0)); + return 0; + } + case COMMAND_NULL_297: + case COMMAND_NULL_298: + case COMMAND_NULL_299: + { + script_assert(false && "COMMAND NULL"); + return 0; + } + default: + script_assert(0); + break; + } + return -1; +} + + + void CRunningScript::ReturnFromGosubOrFunction() { uint32 val = m_nIp = m_anStack[--m_nStackPointer]; diff --git a/src/control/Script.h b/src/control/Script.h index d9a109fd..0c0d57bc 100644 --- a/src/control/Script.h +++ b/src/control/Script.h @@ -58,7 +58,7 @@ void FlushLog(); #define SET_FLOAT_PARAM(i, x) *(float*)&ScriptParams[i] = x #define SET_VECTOR_PARAM(i, v) { *(float*)&ScriptParams[i] = (v).x; *(float*)&ScriptParams[i+1] = (v).y; *(float*)&ScriptParams[i+2] = (v).z; } -#define GTA_SCRIPT_COLLECTIVE +//#define GTA_SCRIPT_COLLECTIVE // vcs tmp disabled ------------ struct intro_script_rectangle { @@ -229,9 +229,10 @@ enum { MAX_STACK_DEPTH = 16, NUM_LOCAL_VARS = 96, NUM_TIMERS = 2, - NUM_GLOBAL_SLOTS = 26 + NUM_GLOBAL_SLOTS = 25,//string \/ }; +//https://gtamods.com/wiki/SCM_Instruction#Concrete_data_types enum { ARGUMENT_END = 0, ARGUMENT_INT_ZERO, @@ -243,7 +244,8 @@ enum { ARGUMENT_INT8, ARGUMENT_INT16, ARGUMENT_FLOAT, - ARGUMENT_TIMER, + ARGUMENT_STRING, // 0xF653F + ARGUMENT_TIMER, // 0xE5412 -=@, 0x4D6F9 -=@val ARGUMENT_LOCAL = ARGUMENT_TIMER + NUM_TIMERS, ARGUMENT_LOCAL_ARRAY = ARGUMENT_LOCAL + NUM_LOCAL_VARS, ARGUMENT_GLOBAL = ARGUMENT_LOCAL_ARRAY + NUM_LOCAL_VARS, @@ -253,6 +255,7 @@ enum { static_assert(MAX_ARGUMENT <= 256, "MAX_ARGUMENT must be less or equal to 256"); + struct tCollectiveData { int32 colIndex; @@ -290,6 +293,8 @@ struct script_corona int flareType; }; +//class CTheScripts; // ahahahh + class CRunningScript { enum { @@ -325,21 +330,22 @@ public: CRunningScript* next; CRunningScript* prev; int32 m_nId; - char m_abScriptName[8]; + //uint32 pad4; // mazahaka vcs uint32 m_nIp; uint32 m_anStack[MAX_STACK_DEPTH]; - uint16 m_nStackPointer; - int32 m_anLocalVariables[NUM_LOCAL_VARS + 8 + NUM_TIMERS]; // TODO(LCS): figure out why 106 + int32 m_anLocalVariables[NUM_LOCAL_VARS + 8 + NUM_TIMERS]; // TODO(VCS): figure out why 106 int32 m_nLocalsPointer; + uint32 m_nWakeTime; + uint16 m_nStackPointer; + uint16 m_nAndOrState; bool m_bIsActive; bool m_bCondResult; bool m_bIsMissionScript; bool m_bSkipWakeTime; - uint32 m_nWakeTime; - uint16 m_nAndOrState; bool m_bNotFlag; bool m_bDeatharrestEnabled; bool m_bDeatharrestExecuted; + char m_abScriptName[8]; bool m_bMissionFlag; public: @@ -364,9 +370,14 @@ public: void CollectParameters(uint32*, int16, int* pParams = (int*)&ScriptParams); int32 CollectNextParameterWithoutIncreasingPC(uint32); - int32* GetPointerToScriptVariable(uint32*, int16); + int32* GetPointerToScriptVariable(uint32*); void StoreParameters(uint32*, int16); + // vcs todo inline. scriptspace static err + /*inline*/ const char *GetKeyFromScript(uint32 *pIp); + wchar *GetTextByKeyFromScript(uint32 *pIp); + + int8 ProcessOneCommand(); void DoDeatharrestCheck(); void UpdateCompareFlag(bool flag) @@ -409,9 +420,6 @@ public: int8 ProcessCommands1100To1199(int32); int8 ProcessCommands1200To1299(int32); int8 ProcessCommands1300To1399(int32); - int8 ProcessCommands1400To1499(int32); - int8 ProcessCommands1500To1599(int32); - int8 ProcessCommands1600To1699(int32); uint32 CollectLocateParameters(uint32*, bool); void LocatePlayerCommand(int32, uint32*); @@ -465,10 +473,6 @@ public: }; -enum { - VAR_LOCAL = 1, - VAR_GLOBAL = 2, -}; enum { MAX_NUM_SCRIPTS = 128, @@ -585,13 +589,18 @@ public: 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; + //script_assert(false && "LABEL RECHECK TO MY FUNCS!!"); + script_assert(false && "REMOVE ME!!!!!!"); + return; // возможно не нужна функция, usege GetTextByKeyFromScript GetKeyFromScript + //strncpy(buf, (const char*)&CTheScripts::ScriptSpace[*pIp], KEY_LENGTH_IN_SCRIPT); } + //--------------VCS TODO PROBABLY REMOVED BY COLLECT + //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; @@ -725,3 +734,11 @@ enum { extern int gScriptsFile; extern CVector gVectorSetInLua; +#define GetPlayerInfoByPoolHandler(pPlayerInfo, han)\ +CPed *gpi_ped = CPools::GetPedPool()->GetAt(han);\ +script_assert(gpi_ped);\ +CPlayerInfo *pPlayerInfo = ((CPlayerPed *)gpi_ped)->GetPlayerInfoForThisPlayerPed();\ +script_assert(pPlayerInfo); + +// CPlayerPed *pPlayer = FindPlayerPed(); +// CPlayerInfo *pPlayerInfo = &CWorld::Players[CWorld::PlayerInFocus]; \ No newline at end of file diff --git a/src/control/Script10.cpp b/src/control/Script10.cpp index ed1a9264..7f52d077 100644 --- a/src/control/Script10.cpp +++ b/src/control/Script10.cpp @@ -23,404 +23,4 @@ #include "Weather.h" #include "World.h" -bool gDeveloperFlag; -int8 CRunningScript::ProcessCommands1600To1699(int32 command) -{ - switch (command) { - case COMMAND_ADD_NOODLES_DELIVERED: - CollectParameters(&m_nIp, 1); - // CStats::NoodlesDelievered += GET_INTEGER_PARAM(0); - return 0; - case COMMAND_REGISTER_SCRAPYARD_CHALLENGE_SCORE: - CollectParameters(&m_nIp, 1); - //CStats::TopScrapyardChallengeScore = Max(CStats::TopScrapyardChallengeScore, GET_INTEGER_PARAM(0)); - return 0; - case COMMAND_REGISTER_9MM_MAYHEM_SCORE: - CollectParameters(&m_nIp, 1); - //CStats::Top9mmMayhemScore = Max(CStats::Top9mmMayhemScore, GET_INTEGER_PARAM(0)); - return 0; - case COMMAND_REGISTER_SCOOTER_SHOOTER_SCORE: - CollectParameters(&m_nIp, 1); - //CStats::TopScooterShooterScore = Max(CStats::TopScooterShooterScore, GET_INTEGER_PARAM(0)); - return 0; - case COMMAND_ADD_MONEY_MADE_FROM_TOURIST: - CollectParameters(&m_nIp, 1); - // CStats::MoneyMadeFromTourist += GET_INTEGER_PARAM(0); - return 0; - case COMMAND_ADD_TOURISTS_TAKEN_TO_SPOTS: - CollectParameters(&m_nIp, 1); - // CStats::TouristsTakenToSpots += GET_INTEGER_PARAM(0); - return 0; - case COMMAND_ADD_EXPORTED_CARS: - CollectParameters(&m_nIp, 1); - // CStats::NumberOfExportedCars += GET_INTEGER_PARAM(0); - return 0; - case COMMAND_SET_TOTAL_EXPORT_CARS: - CollectParameters(&m_nIp, 1); - // CStats::TotalNumberOfCarExport = GET_INTEGER_PARAM(0); - return 0; - case COMMAND_REGISTER_DIRT_BIKE_FASTEST_LAP: - CollectParameters(&m_nIp, 2); - // CStats::RegisterDirtBikeFastestLap(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); - return 0; - case COMMAND_REGISTER_DIRT_BIKE_FASTEST_TIME: - CollectParameters(&m_nIp, 2); - // CStats::RegisterDirtBikeFastestTime(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); - return 0; - case COMMAND_REGISTER_DIRT_BIKE_AIR_TIME: - CollectParameters(&m_nIp, 1); - //CStats::DirtBikeMostAir = Max(CStats::DirtBikeMostAir, GET_INTEGER_PARAM(0)); - return 0; - case COMMAND_ADD_ARROW_3D_MARKER: - { - uint32 ip = m_nIp; - uint32 id = (uint32)(uintptr)GetPointerToScriptVariable(&ip, 0); - CollectParameters(&m_nIp, 10); - CVector pos = GET_VECTOR_PARAM(0); - CVector dir = GET_VECTOR_PARAM(3); - pos.z += GET_FLOAT_PARAM(9) + 7.0f; - //C3dMarkers::PlaceMarker(id, MARKERTYPE_ARROW, pos, GET_INTEGER_PARAM(6), GET_INTEGER_PARAM(7), GET_INTEGER_PARAM(8), 200, 1, 3.2f, 1, dir, 1.0f, 0, 0); - TODO - return 0; - } - case COMMAND_PRINT_NOW_OVERRIDE_FADE: - { - wchar* key = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CollectParameters(&m_nIp, 2); - CMessages::AddMessageJumpQ(key, GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); // true, true - return 0; - } - case COMMAND_GET_PICKUP_VALUE: - { - CollectParameters(&m_nIp, 1); - SET_INTEGER_PARAM(0, CPickups::GetValue(GET_INTEGER_PARAM(0))); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_SET_PICKUP_VALUE: - { - CollectParameters(&m_nIp, 2); - CPickups::SetValue(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); - return 0; - } - case COMMAND_IS_DEVELOPER: -#ifdef GTA_NETWORK - UpdateCompareFlag(gDeveloperFlag || gIsMultiplayerGame); -#else - UpdateCompareFlag(gDeveloperFlag); -#endif - return 0; - case COMMAND_SET_DEVELOPER_FLAG: - CollectParameters(&m_nIp, 1); - gDeveloperFlag = GET_INTEGER_PARAM(0); - return 0; - case COMMAND_REGISTER_WICHITA_WIPEOUT_SCORE: - CollectParameters(&m_nIp, 1); - //CStats::TopWichitaWipeoutScore = Max(CStats::TopWichitaWipeoutScore, GET_INTEGER_PARAM(0)); - return 0; - case COMMAND_ATTACH_OBJECT_TO_CAR: - { - CollectParameters(&m_nIp, 5); - CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pObject); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); - script_assert(pVehicle); - CVector offset = GET_VECTOR_PARAM(2); - // pObject->AttachObjectToEntity(pVehicle, offset); - return 0; - } - case COMMAND_DETACH_OBJECT_FROM_CAR: - { - CollectParameters(&m_nIp, 1); - CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pObject); - // if (pObject && pObject->m_pAttachedTo) - // pObject->DettachObjectFromEntity(); - return 0; - } - case COMMAND_SET_PAD_STICKS_MULTIPLIER: - { - CollectParameters(&m_nIp, 2); - CPad::GetPad(0)->unk_B4 = GET_FLOAT_PARAM(0); - CPad::GetPad(0)->unk_B8 = GET_FLOAT_PARAM(1); - return 0; - } - case COMMAND_PRINT_SUBTITLE_NOW: - { - wchar* key = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CollectParameters(&m_nIp, 2); - if (FrontEndMenuManager.m_PrefsShowSubtitles) - CMessages::AddMessageJumpQ(key, GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); // false, true - else - CMessages::AddToPreviousBriefArray(key, -1, -1, -1, -1, -1, -1, nil); - return 0; - } - case COMMAND_PRINT_SUBTITLE_NOW_OVERRIDE_FADE: - { - wchar* key = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CollectParameters(&m_nIp, 2); - if (FrontEndMenuManager.m_PrefsShowSubtitles) - CMessages::AddMessageJumpQ(key, GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); // true, true - else - CMessages::AddToPreviousBriefArray(key, -1, -1, -1, -1, -1, -1, nil); - return 0; - } - case COMMAND_PRINT_SUBTITLE_NOW_NO_BRIEF: - { - wchar* key = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CollectParameters(&m_nIp, 2); - if (FrontEndMenuManager.m_PrefsShowSubtitles) - CMessages::AddMessageJumpQ(key, GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); // false, false - else - CMessages::AddToPreviousBriefArray(key, -1, -1, -1, -1, -1, -1, nil); - return 0; - } - case COMMAND_PRINT_WITH_NUMBER_NOW_NO_BRIEF: - { - wchar* key = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CollectParameters(&m_nIp, 3); - CMessages::AddMessageJumpQWithNumber(key, GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), GET_INTEGER_PARAM(0), -1, -1, -1, -1, -1); // 0 - return 0; - } - case COMMAND_GET_ANGLE_BETWEEN_POINTS: - { - CollectParameters(&m_nIp, 4); - SET_FLOAT_PARAM(0, CGeneral::GetAngleBetweenPoints(GET_FLOAT_PARAM(0), GET_FLOAT_PARAM(1), GET_FLOAT_PARAM(2), GET_FLOAT_PARAM(3))); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_OVERRIDE_CHAR_MOVE_ANIM: - { - CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - pPed->bOverrideMoveAnim = true; - return 0; - } - case COMMAND_1627: - { - CollectParameters(&m_nIp, 1); - // something related to debug menu, not implemented - return 0; - } - case COMMAND_ENABLE_EMERGENCY_VEHICLES: - { - CollectParameters(&m_nIp, 1); - gbEmergencyVehiclesEnabled = GET_INTEGER_PARAM(0) != 0; - return 0; - } - case COMMAND_ADD_UNLOCKED_COSTUME: - CollectParameters(&m_nIp, 1); - // CStats::AddUnlockedCostume(GET_INTEGER_PARAM(0)); - return 0; - case COMMAND_CLEAR_MULTIPLAYER_SPLASH_SCREEN: - // ClearMultiplayerSplashScreen(); - return 0; - case COMMAND_PRINT_WITH_2_NUMBERS_NOW_NO_BRIEF: - { - wchar* key = CTheScripts::GetTextByKeyFromScript(&m_nIp); - 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; - } - case COMMAND_GET_OBJECT_ORIENTATION: - { - CollectParameters(&m_nIp, 1); - CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pObject); - SET_FLOAT_PARAM(1, LimitAngleOnCircle(RADTODEG(Asin(pObject->GetForward().z)))); - SET_FLOAT_PARAM(2, LimitAngleOnCircle(RADTODEG(Atan2(-pObject->GetForward().x, pObject->GetForward().y)))); - SET_FLOAT_PARAM(0, LimitAngleOnCircle(RADTODEG(Atan2(-pObject->GetRight().z, pObject->GetUp().z)))); - StoreParameters(&m_nIp, 3); - return 0; - } - case COMMAND_SET_OBJECT_ORIENTATION: - { - CollectParameters(&m_nIp, 4); - CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pObject); - pObject->SetOrientation(DEGTORAD(GET_FLOAT_PARAM(2)), DEGTORAD(GET_FLOAT_PARAM(1)), DEGTORAD(GET_FLOAT_PARAM(3))); - return 0; - } - case COMMAND_CHANGE_ONSCREEN_COUNTER_PREFIX: - { - uint16 offset = (uint8*)GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL) - CTheScripts::ScriptSpace; - CollectParameters(&m_nIp, 1); - CUserDisplay::OnscnTimer.ChangeCounterPrefix(offset, GET_INTEGER_PARAM(0) != 0); - return 0; - } - case COMMAND_STORE_PLAYER_OUTFIT: - { - char tmp[12]; // TODO - CTheScripts::ReadTextLabelFromScript(&m_nIp, tmp); - for (int i = 0; i < KEY_LENGTH_IN_SCRIPT; i++) - CGameLogic::mStoredPlayerOutfit[i] = tmp[i]; - printf("STORED PLAYOUR OUTFIT : %s\n", CGameLogic::mStoredPlayerOutfit); - m_nIp += KEY_LENGTH_IN_SCRIPT; - return 0; - } - case COMMAND_DISPLAY_ONSCREEN_TIMER_WITH_NUMBER_AND_STRING: - { - char onscreen_str1[12]; - uint16 var = (uint8*)GetPointerToScriptVariable(&m_nIp, 0) - CTheScripts::ScriptSpace; - CollectParameters(&m_nIp, 2); - wchar* text = TheText.Get((char*)&CTheScripts::ScriptSpace[m_nIp]); - strncpy(onscreen_str1, (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, GET_INTEGER_PARAM(0), nil, 0); - return 0; - } - case COMMAND_SET_PLAYER_CURRENT_WEAPON_AMMO_IN_CLIP: - { - CollectParameters(&m_nIp, 1); - CWeapon* pWeapon = FindPlayerPed()->GetWeapon(); - if (pWeapon && GET_INTEGER_PARAM(0)) - pWeapon->m_nAmmoInClip = GET_INTEGER_PARAM(0); - return 0; - } - case COMMAND_SET_CHAR_WAIT_STATE_REPEAT: - { - CollectParameters(&m_nIp, 3); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - if (pPed) - pPed->SetWaitState((eWaitState)GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2) >= 0 ? &GET_INTEGER_PARAM(2) : nil, true); - return 0; - } - case COMMAND_REGISTER_BEST_TIME_GOGO_FAGGIO: - CollectParameters(&m_nIp, 1); - // CStats::RegisterBestTimeGoGoFaggio(GET_INTEGER_PARAM(0)); - return 0; - case COMMAND_LOCK_GARAGE: - CollectParameters(&m_nIp, 2); - CGarages::LockGarage(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); - return 0; - case COMMAND_IS_FINAL_GAME: -#ifdef FINAL - UpdateCompareFlag(true); -#else - UpdateCompareFlag(false); -#endif - return 0; - case COMMAND_SET_ALLOWED_COLLISION: - { - CollectParameters(&m_nIp, 2); - CTheScripts::AllowedCollision[0] = GET_INTEGER_PARAM(0); - CTheScripts::AllowedCollision[1] = GET_INTEGER_PARAM(1); - return 0; - } - case COMMAND_REGISTER_GUARDIAN_ANGEL_LEVEL: - CollectParameters(&m_nIp, 3); - //CStats::GuardianAngelHighestLevel_Ind = Max(CStats::GuardianAngelHighestLevel_Ind, GET_INTEGER_PARAM(0)); - //CStats::GuardianAngelHighestLevel_Com = Max(CStats::GuardianAngelHighestLevel_Com, GET_INTEGER_PARAM(1)); - //CStats::GuardianAngelHighestLevel_Sub = Max(CStats::GuardianAngelHighestLevel_Sub, GET_INTEGER_PARAM(2)); - return 0; - case COMMAND_DISPLAY_ONSCREEN_TIMER_WITH_NUMBER_AND_2_STRINGS: - { - char onscreen_str1[12]; - char onscreen_str2[12]; - uint16 var = (uint8*)GetPointerToScriptVariable(&m_nIp, 0) - CTheScripts::ScriptSpace; - CollectParameters(&m_nIp, 3); - wchar* text = TheText.Get((char*)&CTheScripts::ScriptSpace[m_nIp]); - strncpy(onscreen_str1, (char*)&CTheScripts::ScriptSpace[m_nIp], KEY_LENGTH_IN_SCRIPT); - m_nIp += KEY_LENGTH_IN_SCRIPT; - wchar* text2 = TheText.Get((char*)&CTheScripts::ScriptSpace[m_nIp]); - 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_str2, 0, GET_INTEGER_PARAM(0), onscreen_str1, GET_INTEGER_PARAM(2)); - return 0; - } - case COMMAND_GET_PLAYER_STORED_WEAPON: - { - CollectParameters(&m_nIp, 1); - CPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(pPed); - SET_INTEGER_PARAM(0, pPed->m_storedWeapon); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_DISABLE_PAUSE_MENU: - CollectParameters(&m_nIp, 1); - // FrontEndMenuManager.mDisablePauseMenu = GET_INTEGER_PARAM(0) != 0; // TODO: static + member - return 0; - case COMMAND_IS_CHANNEL_PLAYING: - CollectParameters(&m_nIp, 1); - //UpdateCompareFlag(DMAudio.IsChannelPlaying(GET_INTEGER_PARAM(0)); - UpdateCompareFlag(false); - return 0; - case COMMAND_SET_CLOCK_EVENT_WARNING: - CollectParameters(&m_nIp, 3); - /* - if (CHud::m_ClockEventWarningMinutes || GET_INTEGER_PARAMS(2)){ - CHud::m_ClockEventWarningMinutes = GET_INTEGER_PARAMS(2); - CHud::m_ClockEventMinutes = GET_INTEGER_PARAMS(1); - CHud::m_ClockEventHours = GET_INTEGER_PARAMS(0); - CHud::m_ClockEventFlashTimer = 0; - } - */ - return 0; - case COMMAND_SET_EXTRA_COLOUR_LIGHT_DIRECTION: - CollectParameters(&m_nIp, 3); - // CWeather::ExtraColourLightDir = GET_VECTOR_PARAM(0); - // CWeather::ExtraColourLightDir.Normalise(); - return 0; - case COMMAND_SET_CHAR_CAN_BE_TARGETTED_BY_LEADER: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - pPed->bCanBeTargettedByLeader = GET_INTEGER_PARAM(1) != 0; - return 0; - } - case COMMAND_PRINT_HELP_NO_BRIEF: - { - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CHud::SetHelpMessage(text, false); // + false, false - return 0; - } - case COMMAND_PRINT_HELP_FOREVER_NO_BRIEF: - { - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CHud::SetHelpMessage(text, false, true); // + false - return 0; - } - case COMMAND_PRINT_HELP_ALWAYS_NO_BRIEF: - { - // CHud::mAlwaysAllowHelpText = true; - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CHud::SetHelpMessage(text, false); // + false, false - return 0; - } - case COMMAND_PRINT_HELP_FOREVER_ALWAYS_NO_BRIEF: - { - // CHud::mAlwaysAllowHelpText = true; - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CHud::SetHelpMessage(text, false, true); // + false - return 0; - } - case COMMAND_SET_CAR_IS_REWARD: - { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - pVehicle->bRewardVehicle = (GET_INTEGER_PARAM(1) != 0); - return 0; - } - case COMMAND_FREEZE_ALL_PLAYER_FOLLOWERS: - { - CollectParameters(&m_nIp, 2); - CPlayerPed* pPlayerPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(pPlayerPed); - for (int i = 0; i < CPools::GetVehiclePool()->GetSize(); i++) { - CPed* pPed = CPools::GetPedPool()->GetSlot(i); - if (pPed && IsPedPointerValid(pPed)) { - if (pPed->m_leader == pPlayerPed || (pPed->m_objective == OBJECTIVE_FOLLOW_CHAR_IN_FORMATION && pPed->m_pedInObjective == pPlayerPed)) - pPed->bIsFrozen = (GET_INTEGER_PARAM(1) != 0); - } - } - return 0; - } - default: - script_assert(0); - } - return -1; -} \ No newline at end of file diff --git a/src/control/Script2.cpp b/src/control/Script2.cpp index 26c1cdde..5f85c228 100644 --- a/src/control/Script2.cpp +++ b/src/control/Script2.cpp @@ -27,26 +27,97 @@ #include "Weather.h" #include "World.h" #include "Zones.h" +//new +#include "Streaming.h" +#include "Bike.h" +#include "Darkel.h" +#include "Explosion.h" +#include "Pickups.h" +#include "CutsceneMgr.h" +#include "Coronas.h" +#include "Clock.h" +#include "Phones.h" +#include "GameLogic.h" +#include "Stats.h" +#include "Fire.h" +#include "ColStore.h" // LCS: file done except TODOs int8 CRunningScript::ProcessCommands300To399(int32 command) { switch (command) { - //case COMMAND_SET_CHAR_INVINCIBLE: - //case COMMAND_SET_PLAYER_INVINCIBLE: - //case COMMAND_SET_CHAR_GRAPHIC_TYPE: - //case COMMAND_SET_PLAYER_GRAPHIC_TYPE: - case COMMAND_HAS_PLAYER_BEEN_ARRESTED: + case COMMAND_IS_CAR_IN_AIR_PROPER: + { CollectParameters(&m_nIp, 1); - UpdateCompareFlag(CWorld::Players[GET_INTEGER_PARAM(0)].m_WBState == WBSTATE_BUSTED); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + UpdateCompareFlag(pVehicle->m_nCollisionRecords == 0); return 0; - //case COMMAND_STOP_CHAR_DRIVING: - //case COMMAND_KILL_CHAR: - //case COMMAND_SET_FAVOURITE_CAR_MODEL_FOR_CHAR: - //case COMMAND_SET_CHAR_OCCUPATION: - /* - case COMMAND_CHANGE_CAR_LOCK: + } + case COMMAND_IS_CAR_UPSIDEDOWN: + { + CollectParameters(&m_nIp, 1); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + UpdateCompareFlag(pVehicle->GetUp().z <= UPSIDEDOWN_UP_THRESHOLD); + return 0; + } + case COMMAND_SET_POLICE_IGNORE_PLAYER: + { + CollectParameters(&m_nIp, 2); + CPlayerPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; + script_assert(pPed); + if (GET_INTEGER_PARAM(1)) { + pPed->m_pWanted->m_bIgnoredByCops = true; + CWorld::StopAllLawEnforcersInTheirTracks(); + } + else { + pPed->m_pWanted->m_bIgnoredByCops = false; + } + return 0; + } + case COMMAND_START_KILL_FRENZY: + { + wchar* text = GetTextByKeyFromScript(&m_nIp); + CollectParameters(&m_nIp, 8); + CDarkel::StartFrenzy((eWeaponType)GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), + GET_INTEGER_PARAM(3), text, GET_INTEGER_PARAM(4), GET_INTEGER_PARAM(5), + GET_INTEGER_PARAM(6), GET_INTEGER_PARAM(7) != 0, false); + return 0; + } + case COMMAND_READ_KILL_FRENZY_STATUS: + { + SET_INTEGER_PARAM(0, CDarkel::ReadStatus()); + StoreParameters(&m_nIp, 1); + return 0; + } + case COMMAND_SQRT: + { + CollectParameters(&m_nIp, 1); + SET_FLOAT_PARAM(0, Sqrt(GET_FLOAT_PARAM(0))); + StoreParameters(&m_nIp, 1); + return 0; + } + case COMMAND_LOCATE_CHAR_ANY_MEANS_CAR_2D: + case COMMAND_LOCATE_CHAR_ON_FOOT_CAR_2D: + case COMMAND_LOCATE_CHAR_IN_CAR_CAR_2D: + case COMMAND_LOCATE_CHAR_ANY_MEANS_CAR_3D: + case COMMAND_LOCATE_CHAR_ON_FOOT_CAR_3D: + case COMMAND_LOCATE_CHAR_IN_CAR_CAR_3D: + LocateCharCarCommand(command, &m_nIp); + return 0; + case COMMAND_GENERATE_RANDOM_FLOAT_IN_RANGE: + CollectParameters(&m_nIp, 2); + SET_FLOAT_PARAM(0, CGeneral::GetRandomNumberInRange(GET_FLOAT_PARAM(0), GET_FLOAT_PARAM(1))); + StoreParameters(&m_nIp, 1); + return 0; + case COMMAND_GENERATE_RANDOM_INT_IN_RANGE: + CollectParameters(&m_nIp, 2); + SET_INTEGER_PARAM(0, CGeneral::GetRandomNumberInRange(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1))); + StoreParameters(&m_nIp, 1); + return 0; + case COMMAND_LOCK_CAR_DOORS: { CollectParameters(&m_nIp, 2); CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); @@ -54,751 +125,701 @@ int8 CRunningScript::ProcessCommands300To399(int32 command) pVehicle->m_nDoorLock = (eCarLock)GET_INTEGER_PARAM(1); return 0; } - case COMMAND_SHAKE_CAM_WITH_POINT: + case COMMAND_EXPLODE_CAR: + { + CollectParameters(&m_nIp, 1); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + pVehicle->bCanBeDamaged = true; + pVehicle->BlowUpCar(nil); + return 0; + } + case COMMAND_ADD_EXPLOSION: CollectParameters(&m_nIp, 4); - TheCamera.CamShake(GET_INTEGER_PARAM(0) / 1000.0f, - GET_FLOAT_PARAM(1), - GET_FLOAT_PARAM(2), - GET_FLOAT_PARAM(3)); + CExplosion::AddExplosion(nil, nil, (eExplosionType)GET_INTEGER_PARAM(3), GET_VECTOR_PARAM(0), 0, true); // last argument is 0 (default? - TODO) return 0; - */ - case COMMAND_IS_CAR_MODEL: - { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - UpdateCompareFlag(pVehicle->GetModelIndex() == GET_INTEGER_PARAM(1)); - return 0; - } - //case COMMAND_IS_CAR_REMAP: - //case COMMAND_HAS_CAR_JUST_SUNK: - //case COMMAND_SET_CAR_NO_COLLIDE: - /* - case COMMAND_IS_CAR_DEAD_IN_AREA_2D: - { - CollectParameters(&m_nIp, 6); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - float x1 = GET_FLOAT_PARAM(1); - float y1 = GET_FLOAT_PARAM(2); - float x2 = GET_FLOAT_PARAM(3); - float y2 = GET_FLOAT_PARAM(4); - UpdateCompareFlag(pVehicle->GetStatus() == STATUS_WRECKED && - pVehicle->IsWithinArea(x1, y1, x2, y2)); - if (GET_INTEGER_PARAM(5)) - CTheScripts::HighlightImportantArea((uintptr)this + m_nIp, x1, y1, x2, y2, MAP_Z_LOW_LIMIT); - if (CTheScripts::DbgFlag) - CTheScripts::DrawDebugSquare(x1, y1, x2, y2); - return 0; - } - case COMMAND_IS_CAR_DEAD_IN_AREA_3D: - { - CollectParameters(&m_nIp, 8); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - float x1 = GET_FLOAT_PARAM(1); - float y1 = GET_FLOAT_PARAM(2); - float z1 = GET_FLOAT_PARAM(3); - float x2 = GET_FLOAT_PARAM(4); - float y2 = GET_FLOAT_PARAM(5); - float z2 = GET_FLOAT_PARAM(6); - UpdateCompareFlag(pVehicle->GetStatus() == STATUS_WRECKED && - pVehicle->IsWithinArea(x1, y1, z1, x2, y2, z2)); - if (GET_INTEGER_PARAM(7)) - CTheScripts::HighlightImportantArea((uintptr)this + m_nIp, x1, y1, x2, y2, (z1 + z2) / 2); - if (CTheScripts::DbgFlag) - CTheScripts::DrawDebugCube(x1, y1, z1, x2, y2, z2); - return 0; - } - */ - //case COMMAND_IS_TRAILER_ATTACHED: - //case COMMAND_IS_CAR_ON_TRAILER: - //case COMMAND_HAS_CAR_GOT_WEAPON: - //case COMMAND_PARK: - //case COMMAND_HAS_PARK_FINISHED: - //case COMMAND_KILL_ALL_PASSENGERS: - //case COMMAND_SET_CAR_BULLETPROOF: - //case COMMAND_SET_CAR_FLAMEPROOF: - //case COMMAND_SET_CAR_ROCKETPROOF: - //case COMMAND_IS_CARBOMB_ACTIVE: - case COMMAND_GIVE_CAR_ALARM: - { - CollectParameters(&m_nIp, 1); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - pVehicle->m_nAlarmState = -1; - return 0; - } - //case COMMAND_PUT_CAR_ON_TRAILER: - case COMMAND_IS_CAR_CRUSHED: - CollectParameters(&m_nIp, 1); - UpdateCompareFlag(CGarages::HasCarBeenCrushed(GET_INTEGER_PARAM(0))); - return 0; - //case COMMAND_CREATE_GANG_CAR: - case COMMAND_CREATE_CAR_GENERATOR: - { - CollectParameters(&m_nIp, 12); - CVector pos = GET_VECTOR_PARAM(0); - if (pos.z > MAP_Z_LOW_LIMIT) - pos.z += 0.015f; - SET_INTEGER_PARAM(0, CTheCarGenerators::CreateCarGenerator( - pos.x, pos.y, pos.z, GET_FLOAT_PARAM(3), - GET_INTEGER_PARAM(4), GET_INTEGER_PARAM(5), GET_INTEGER_PARAM(6), GET_INTEGER_PARAM(7), - GET_INTEGER_PARAM(8), GET_INTEGER_PARAM(9), GET_INTEGER_PARAM(10), GET_INTEGER_PARAM(11))); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_SWITCH_CAR_GENERATOR: - { - CollectParameters(&m_nIp, 2); - CCarGenerator* pCarGen = &CTheCarGenerators::CarGeneratorArray[GET_INTEGER_PARAM(0)]; - if (GET_INTEGER_PARAM(1) == 0) { - pCarGen->SwitchOff(); - } - else if (GET_INTEGER_PARAM(1) <= 100) { - pCarGen->SwitchOn(); - pCarGen->SetUsesRemaining(GET_INTEGER_PARAM(1)); - } - else { - pCarGen->SwitchOn(); - } - return 0; - } - /* - case COMMAND_ADD_PAGER_MESSAGE: - { - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CollectParameters(&m_nIp, 3); - CUserDisplay::Pager.AddMessage(text, GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2)); - return 0; - } - */ - case COMMAND_DISPLAY_ONSCREEN_TIMER: - { - uint16 offset = (uint8*)GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL) - CTheScripts::ScriptSpace; - CollectParameters(&m_nIp, 1); - CUserDisplay::OnscnTimer.AddClock(offset, nil, GET_INTEGER_PARAM(0) != 0); - return 0; - } - case COMMAND_CLEAR_ONSCREEN_TIMER: - { - uint16 offset = (uint8*)GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL) - CTheScripts::ScriptSpace; - CUserDisplay::OnscnTimer.ClearClock(offset); - return 0; - } - case COMMAND_DISPLAY_ONSCREEN_COUNTER: - { - uint16 counter = (uint8*)GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL) - CTheScripts::ScriptSpace; - CollectParameters(&m_nIp, 1); - CUserDisplay::OnscnTimer.AddCounter(counter, GET_INTEGER_PARAM(0), nil, 0, -1, nil, 0); - return 0; - } - case COMMAND_CLEAR_ONSCREEN_COUNTER: - { - uint16 counter = (uint8*)GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL) - CTheScripts::ScriptSpace; - CUserDisplay::OnscnTimer.ClearCounter(counter); - return 0; - } - case COMMAND_SET_ZONE_CAR_INFO: - { - char label[12]; - int16 gangDensities[NUM_GANGS] = { 0 }; - int i; - CTheScripts::ReadTextLabelFromScript(&m_nIp, label); - m_nIp += KEY_LENGTH_IN_SCRIPT; - CollectParameters(&m_nIp, 12); - for (i = 0; i < NUM_GANGS; i++) - gangDensities[i] = ScriptParams[i + 2]; - int zone = CTheZones::FindZoneByLabelAndReturnIndex(label, ZONE_INFO); - for (int i = 0; i < NUM_GANGS; i++) { - if (gangDensities[i] != 0 && CGangs::GetGangInfo(i)->m_nVehicleMI == -1) - debug("SET_ZONE_CAR_INFO - Gang %d car ratio should be 0 in %s zone\n", i + 1, label); - } - if (zone < 0) { - debug("Couldn't find zone - %s\n", label); - return 0; - } - while (zone >= 0) { - CTheZones::SetZoneCarInfo(zone, GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(11), gangDensities); - zone = CTheZones::FindNextZoneByLabelAndReturnIndex(label, ZONE_INFO); - } - return 0; - } - //case COMMAND_IS_CHAR_IN_GANG_ZONE: - case COMMAND_IS_CHAR_IN_ZONE: + case COMMAND_IS_CAR_UPRIGHT: { CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - char label[12]; - CTheScripts::ReadTextLabelFromScript(&m_nIp, label); - int zone = CTheZones::FindZoneByLabelAndReturnIndex(label, ZONE_DEFAULT); - if (zone != -1) - m_nIp += KEY_LENGTH_IN_SCRIPT; - CVector pos = pPed->bInVehicle ? pPed->m_pMyVehicle->GetPosition() : pPed->GetPosition(); - UpdateCompareFlag(CTheZones::PointLiesWithinZone(&pos, CTheZones::GetNavigationZone(zone))); - return 0; - } - case COMMAND_SET_CAR_DENSITY: - { - char label[12]; - CTheScripts::ReadTextLabelFromScript(&m_nIp, label); - int16 zone = CTheZones::FindZoneByLabelAndReturnIndex(label, ZONE_INFO); - m_nIp += 8; - CollectParameters(&m_nIp, 2); - if (zone < 0) { - debug("Couldn't find zone - %s\n", label); - return 0; - } - while (zone >= 0) { - CTheZones::SetCarDensity(zone, ScriptParams[0], ScriptParams[1]); - zone = CTheZones::FindNextZoneByLabelAndReturnIndex(label, ZONE_INFO); - } - return 0; - } - case COMMAND_SET_PED_DENSITY: - { - char label[12]; - CTheScripts::ReadTextLabelFromScript(&m_nIp, label); - int16 zone = CTheZones::FindZoneByLabelAndReturnIndex(label, ZONE_INFO); - m_nIp += KEY_LENGTH_IN_SCRIPT; - CollectParameters(&m_nIp, 2); - if (zone < 0) { - debug("Couldn't find zone - %s\n", label); - return 0; - } - while (zone >= 0) { - CTheZones::SetPedDensity(zone, ScriptParams[0], ScriptParams[1]); - zone = CTheZones::FindNextZoneByLabelAndReturnIndex(label, ZONE_INFO); - } - return 0; - } - case COMMAND_POINT_CAMERA_AT_PLAYER: - { - CollectParameters(&m_nIp, 3); - TheCamera.TakeControl(nil, GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), CAMCONTROL_SCRIPT); - return 0; - } - case COMMAND_POINT_CAMERA_AT_CAR: - { - CollectParameters(&m_nIp, 3); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - if (pVehicle) - TheCamera.TakeControl(pVehicle, GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), CAMCONTROL_SCRIPT); - return 0; - } - case COMMAND_POINT_CAMERA_AT_CHAR: - { - CollectParameters(&m_nIp, 3); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - if (pPed) - TheCamera.TakeControl(pPed, GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), CAMCONTROL_SCRIPT); - return 0; - } - case COMMAND_RESTORE_CAMERA: - TheCamera.Restore(); - return 0; - /* - case COMMAND_SHAKE_PAD: - CPad::GetPad(GET_INTEGER_PARAM(0))->StartShake(GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2)); - return 0; - */ - case COMMAND_SET_ZONE_PED_INFO: - { - char label[12]; - CTheScripts::ReadTextLabelFromScript(&m_nIp, label); - m_nIp += KEY_LENGTH_IN_SCRIPT; - CollectParameters(&m_nIp, 12); - int16 zone = CTheZones::FindZoneByLabelAndReturnIndex(label, ZONE_INFO); - if (zone < 0) { - debug("Couldn't find zone - %s\n", label); - return 0; - } - while (zone >= 0) { - CTheZones::SetZonePedInfo(zone, GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), GET_INTEGER_PARAM(3), - GET_INTEGER_PARAM(4), GET_INTEGER_PARAM(5), GET_INTEGER_PARAM(6), GET_INTEGER_PARAM(7), GET_INTEGER_PARAM(8), GET_INTEGER_PARAM(9), GET_INTEGER_PARAM(10), GET_INTEGER_PARAM(11)); - zone = CTheZones::FindNextZoneByLabelAndReturnIndex(label, ZONE_INFO); - } - return 0; - } - case COMMAND_SET_TIME_SCALE: - CollectParameters(&m_nIp, 1); - CTimer::SetTimeScale(GET_FLOAT_PARAM(0)); - return 0; - /* - case COMMAND_IS_CAR_IN_AIR: - { - CollectParameters(&m_nIp, 1); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle && pVehicle->IsCar()); - CAutomobile* pCar = (CAutomobile*)pVehicle; - UpdateCompareFlag(pCar->GetAllWheelsOffGround()); - return 0; - } - */ - case COMMAND_SET_FIXED_CAMERA_POSITION: - { - CollectParameters(&m_nIp, 6); - TheCamera.SetCamPositionForFixedMode( - CVector(GET_FLOAT_PARAM(0), GET_FLOAT_PARAM(1), GET_FLOAT_PARAM(2)), - CVector(GET_FLOAT_PARAM(3), GET_FLOAT_PARAM(4), GET_FLOAT_PARAM(5))); - return 0; - } - case COMMAND_POINT_CAMERA_AT_POINT: - { - CollectParameters(&m_nIp, 4); - CVector pos = GET_VECTOR_PARAM(0); - if (pos.z <= MAP_Z_LOW_LIMIT) - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - TheCamera.TakeControlNoEntity(pos, GET_INTEGER_PARAM(3), CAMCONTROL_SCRIPT); - return 0; - } - case COMMAND_ADD_BLIP_FOR_CAR_OLD: - { - CollectParameters(&m_nIp, 3); CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); script_assert(pVehicle); - CRadar::GetActualBlipArrayIndex(CollectNextParameterWithoutIncreasingPC(m_nIp)); - SET_INTEGER_PARAM(0, CRadar::SetEntityBlip(BLIP_CAR, GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), (eBlipDisplay)GET_INTEGER_PARAM(2))); - StoreParameters(&m_nIp, 1); + UpdateCompareFlag(pVehicle->GetUp().z >= 0.0f); return 0; } - case COMMAND_ADD_BLIP_FOR_CHAR_OLD: + case COMMAND_TURN_CHAR_TO_FACE_CHAR: { - CollectParameters(&m_nIp, 3); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - CRadar::GetActualBlipArrayIndex(CollectNextParameterWithoutIncreasingPC(m_nIp)); - SET_INTEGER_PARAM(0, CRadar::SetEntityBlip(BLIP_CHAR, GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), (eBlipDisplay)GET_INTEGER_PARAM(2))); - StoreParameters(&m_nIp, 1); + CollectParameters(&m_nIp, 2); + CPed* pSourcePed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + CPed* pTargetPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(1)); + CVehicle* pVehicle = pSourcePed->bInVehicle ? pSourcePed->m_pMyVehicle : nil; + CVector2D sourcePos = pSourcePed->bInVehicle ? pVehicle->GetPosition() : pSourcePed->GetPosition(); + CVector2D targetPos = pTargetPed->bInVehicle ? pTargetPed->m_pMyVehicle->GetPosition() : pTargetPed->GetPosition(); + float angle = CGeneral::GetATanOfXY(sourcePos.x - targetPos.x, sourcePos.y - targetPos.y) + HALFPI; + if (angle > TWOPI) + angle -= TWOPI; + if (!pVehicle) { + pSourcePed->m_fRotationCur = angle; + pSourcePed->m_fRotationDest = angle; + pSourcePed->SetHeading(angle); + } return 0; } - /* - case COMMAND_ADD_BLIP_FOR_OBJECT_OLD: - { - CollectParameters(&m_nIp, 3); - CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pObject); - CRadar::GetActualBlipArrayIndex(CollectNextParameterWithoutIncreasingPC(m_nIp)); - SET_INTEGER_PARAM(0, CRadar::SetEntityBlip(BLIP_OBJECT, GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), (eBlipDisplay)GET_INTEGER_PARAM(2))); - StoreParameters(&m_nIp, 1); - return 0; - } - */ - case COMMAND_REMOVE_BLIP: - CollectParameters(&m_nIp, 1); - CRadar::ClearBlip(GET_INTEGER_PARAM(0)); - return 0; - case COMMAND_CHANGE_BLIP_COLOUR: - CollectParameters(&m_nIp, 2); - CRadar::ChangeBlipColour(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); - return 0; - case COMMAND_DIM_BLIP: - CollectParameters(&m_nIp, 2); - CRadar::ChangeBlipBrightness(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); - return 0; - case COMMAND_ADD_BLIP_FOR_COORD_OLD: + case COMMAND_CREATE_PICKUP: { CollectParameters(&m_nIp, 5); - CVector pos = GET_VECTOR_PARAM(0); + int16 model = GET_INTEGER_PARAM(0); + if (model < 0) + model = CTheScripts::UsedObjectArray[-model].index; + CVector pos = GET_VECTOR_PARAM(2); if (pos.z <= MAP_Z_LOW_LIMIT) - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - CRadar::GetActualBlipArrayIndex(CollectNextParameterWithoutIncreasingPC(m_nIp)); - SET_INTEGER_PARAM(0, CRadar::SetCoordBlip(BLIP_COORD, pos, GET_INTEGER_PARAM(3), (eBlipDisplay)GET_INTEGER_PARAM(4))); + pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y) + PICKUP_PLACEMENT_OFFSET; + CPickups::GetActualPickupIndex(CollectNextParameterWithoutIncreasingPC(m_nIp)); + SET_INTEGER_PARAM(0, CPickups::GenerateNewOne(pos, model, GET_INTEGER_PARAM(1), 0)); StoreParameters(&m_nIp, 1); return 0; } - case COMMAND_CHANGE_BLIP_SCALE: - CollectParameters(&m_nIp, 2); - CRadar::ChangeBlipScale(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); + case COMMAND_HAS_PICKUP_BEEN_COLLECTED: + CollectParameters(&m_nIp, 1); + UpdateCompareFlag(CPickups::IsPickUpPickedUp(GET_INTEGER_PARAM(0)) != 0); return 0; - case COMMAND_SET_FADING_COLOUR: + case COMMAND_REMOVE_PICKUP: + CollectParameters(&m_nIp, 1); + CPickups::RemovePickUp(GET_INTEGER_PARAM(0)); + return 0; + case COMMAND_SET_TAXI_LIGHTS: + { + CollectParameters(&m_nIp, 2); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + script_assert(pVehicle->m_vehType == VEHICLE_TYPE_CAR); + ((CAutomobile*)pVehicle)->SetTaxiLight(GET_INTEGER_PARAM(1) != 0); + return 0; + } + case COMMAND_PRINT_BIG_Q: + { + wchar* text = GetTextByKeyFromScript(&m_nIp); + CollectParameters(&m_nIp, 2); + CMessages::AddBigMessageQ(text, GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1) - 1); + return 0; + } + case COMMAND_PRINT_WITH_NUMBER_BIG_Q: + { + wchar* text = GetTextByKeyFromScript(&m_nIp); CollectParameters(&m_nIp, 3); - TheCamera.SetFadeColour(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2)); + CMessages::AddBigMessageWithNumberQ(text, GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2) - 1, + GET_INTEGER_PARAM(0), -1, -1, -1, -1, -1); return 0; - case COMMAND_DO_FADE: + } + case COMMAND_SET_GARAGE: + { + CollectParameters(&m_nIp, 9); + float infX = GET_FLOAT_PARAM(0); + float infY = GET_FLOAT_PARAM(1); + float infZ = GET_FLOAT_PARAM(2); + float X2 = GET_FLOAT_PARAM(3); + float Y2 = GET_FLOAT_PARAM(4); + float supX = GET_FLOAT_PARAM(5); + float supY = GET_FLOAT_PARAM(6); + float supZ = GET_FLOAT_PARAM(7); + SET_INTEGER_PARAM(0, CGarages::AddOne(infX, infY, infZ, X2, Y2, supX, supY, supZ, GET_INTEGER_PARAM(8), 0)); + StoreParameters(&m_nIp, 1); + return 0; + } + case COMMAND_SET_TARGET_CAR_FOR_MISSION_GARAGE: { - // unknown empty call on PS2, not mobile CollectParameters(&m_nIp, 2); - float fFadeTime = GET_INTEGER_PARAM(0); - TheCamera.Fade(fFadeTime > 2 ? fFadeTime / 1000.0f : 0.0f, GET_INTEGER_PARAM(1)); - return 0; - } - case COMMAND_GET_FADING_STATUS: - UpdateCompareFlag(TheCamera.GetFading()); - return 0; - case COMMAND_ADD_HOSPITAL_RESTART: - { - CollectParameters(&m_nIp, 4); - CVector pos = GET_VECTOR_PARAM(0); - float angle = GET_FLOAT_PARAM(3); - if (pos.z <= MAP_Z_LOW_LIMIT) - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - CRestart::AddHospitalRestartPoint(pos, angle); - return 0; - } - case COMMAND_ADD_POLICE_RESTART: - { - CollectParameters(&m_nIp, 4); - CVector pos = GET_VECTOR_PARAM(0); - float angle = GET_FLOAT_PARAM(3); - if (pos.z <= MAP_Z_LOW_LIMIT) - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - CRestart::AddPoliceRestartPoint(pos, angle); - return 0; - } - case COMMAND_OVERRIDE_NEXT_RESTART: - { - CollectParameters(&m_nIp, 4); - CVector pos = GET_VECTOR_PARAM(0); - float angle = GET_FLOAT_PARAM(3); - if (pos.z <= MAP_Z_LOW_LIMIT) - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - CRestart::OverrideNextRestart(pos, angle); - return 0; - } - /* - case COMMAND_DRAW_SHADOW: - { - CollectParameters(&m_nIp, 10); - CVector pos = GET_VECTOR_PARAM(1); - float angle = GET_FLOAT_PARAM(4); - float length = GET_FLOAT_PARAM(5); - float x, y; - if (angle != 0.0f){ - y = Cos(angle) * length; - x = Sin(angle) * length; - }else{ - y = length; - x = 0.0f; + CVehicle* pTarget; + if (GET_INTEGER_PARAM(1) >= 0) { + pTarget = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); } - float frontX = -x; - float frontY = y; - float sideX = y; - float sideY = x; - CShadows::StoreShadowToBeRendered(GET_INTEGER_PARAM(0), &pos, frontX, frontY, sideX, sideY, - GET_INTEGER_PARAM(6), GET_INTEGER_PARAM(7), GET_INTEGER_PARAM(8), GET_INTEGER_PARAM(9)); - return 0; - } - */ - case COMMAND_GET_PLAYER_HEADING: - { - CollectParameters(&m_nIp, 1); - CPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - float angle = pPed->bInVehicle ? pPed->m_pMyVehicle->GetForward().Heading() : pPed->GetForward().Heading(); - angle = RADTODEG(angle); - if (angle < 0.0f) - angle += 360.0f; - if (angle > 360.0f) - angle -= 360.0f; - SET_FLOAT_PARAM(0, angle); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_SET_PLAYER_HEADING: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(pPed); - if (pPed->bInVehicle) - return 0; - pPed->m_fRotationDest = pPed->m_fRotationCur = DEGTORAD(GET_FLOAT_PARAM(1)); - pPed->SetHeading(DEGTORAD(GET_FLOAT_PARAM(1))); - return 0; - } - case COMMAND_GET_CHAR_HEADING: - { - CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - float angle = pPed->bInVehicle ? pPed->m_pMyVehicle->GetForward().Heading() : pPed->GetForward().Heading(); - angle = RADTODEG(angle); - if (angle < 0.0f) - angle += 360.0f; - if (angle > 360.0f) - angle -= 360.0f; - SET_FLOAT_PARAM(0, angle); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_SET_CHAR_HEADING: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - if (pPed->bInVehicle) - return 0; - pPed->m_fRotationDest = pPed->m_fRotationCur = DEGTORAD(GET_FLOAT_PARAM(1)); - pPed->SetHeading(DEGTORAD(GET_FLOAT_PARAM(1))); - return 0; - } - case COMMAND_GET_CAR_HEADING: - { - CollectParameters(&m_nIp, 1); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - float angle = pVehicle->GetForward().Heading(); - angle = RADTODEG(angle); - if (angle < 0.0f) - angle += 360.0f; - if (angle > 360.0f) - angle -= 360.0f; - SET_FLOAT_PARAM(0, angle); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_SET_CAR_HEADING: - { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - pVehicle->SetHeading(DEGTORAD(GET_FLOAT_PARAM(1))); - return 0; - } - case COMMAND_GET_OBJECT_HEADING: - { - CollectParameters(&m_nIp, 1); - CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pObject); - float angle = pObject->GetForward().Heading(); - angle = RADTODEG(angle); - if (angle < 0.0f) - angle += 360.0f; - if (angle > 360.0f) - angle -= 360.0f; - SET_FLOAT_PARAM(0, angle); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_SET_OBJECT_HEADING: - { - CollectParameters(&m_nIp, 2); - CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pObject); - CWorld::Remove(pObject); - pObject->SetHeading(DEGTORAD(GET_FLOAT_PARAM(1))); - pObject->GetMatrix().UpdateRW(); - pObject->UpdateRwFrame(); - CWorld::Add(pObject); - return 0; - } - case COMMAND_IS_PLAYER_TOUCHING_OBJECT: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(1)); - script_assert(pObject); - CPhysical* pEntityToTest = pPed->bInVehicle ? (CPhysical*)pPed->m_pMyVehicle : pPed; - UpdateCompareFlag(pEntityToTest->GetHasCollidedWith(pObject)); - return 0; - } - /* - case COMMAND_IS_CHAR_TOUCHING_OBJECT: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(1)); - script_assert(pObject); - CPhysical* pEntityToTest = pPed->bInVehicle ? (CPhysical*)pPed->m_pMyVehicle : pPed; - UpdateCompareFlag(pEntityToTest->GetHasCollidedWith(pObject)); - return 0; - } - */ - case COMMAND_SET_PLAYER_AMMO: - { - CollectParameters(&m_nIp, 3); - CWorld::Players[0].m_pPed->SetAmmo((eWeaponType)GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2)); - return 0; - } - case COMMAND_SET_CHAR_AMMO: - { - CollectParameters(&m_nIp, 3); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - pPed->SetAmmo((eWeaponType)GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2)); - return 0; - } - //case COMMAND_SET_CAR_AMMO: - //case COMMAND_LOAD_CAMERA_SPLINE: - //case COMMAND_MOVE_CAMERA_ALONG_SPLINE: - //case COMMAND_GET_CAMERA_POSITION_ALONG_SPLINE: - case COMMAND_DECLARE_MISSION_FLAG: - CTheScripts::OnAMissionFlag = (uint8*)GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL) - CTheScripts::ScriptSpace; - return 0; - case COMMAND_DECLARE_MISSION_FLAG_FOR_CONTACT: - return 0; - //case COMMAND_DECLARE_BASE_BRIEF_ID_FOR_CONTACT: - case COMMAND_IS_PLAYER_HEALTH_GREATER: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - UpdateCompareFlag(pPed->m_fHealth > GET_INTEGER_PARAM(1)); - return 0; - } - case COMMAND_IS_CHAR_HEALTH_GREATER: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - UpdateCompareFlag(pPed->m_fHealth > GET_INTEGER_PARAM(1)); - return 0; - } - case COMMAND_IS_CAR_HEALTH_GREATER: - { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - UpdateCompareFlag(pVehicle->m_fHealth > GET_INTEGER_PARAM(1)); - return 0; - } - case COMMAND_ADD_BLIP_FOR_CAR: - { - CollectParameters(&m_nIp, 1); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - CRadar::GetActualBlipArrayIndex(CollectNextParameterWithoutIncreasingPC(m_nIp)); - int handle = CRadar::SetEntityBlip(BLIP_CAR, GET_INTEGER_PARAM(0), 0, BLIP_DISPLAY_BOTH); - CRadar::ChangeBlipScale(handle, 3); - SET_INTEGER_PARAM(0, handle); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_ADD_BLIP_FOR_CHAR: - { - CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - CRadar::GetActualBlipArrayIndex(CollectNextParameterWithoutIncreasingPC(m_nIp)); - int handle = CRadar::SetEntityBlip(BLIP_CHAR, GET_INTEGER_PARAM(0), 1, BLIP_DISPLAY_BOTH); - CRadar::ChangeBlipScale(handle, 3); - SET_INTEGER_PARAM(0, handle); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_ADD_BLIP_FOR_OBJECT: - { - CollectParameters(&m_nIp, 1); - CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pObject); - CRadar::GetActualBlipArrayIndex(CollectNextParameterWithoutIncreasingPC(m_nIp)); - int handle = CRadar::SetEntityBlip(BLIP_OBJECT, GET_INTEGER_PARAM(0), 6, BLIP_DISPLAY_BOTH); - CRadar::ChangeBlipScale(handle, 3); - SET_INTEGER_PARAM(0, handle); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_ADD_BLIP_FOR_CONTACT_POINT: - { - CollectParameters(&m_nIp, 3); - CVector pos = GET_VECTOR_PARAM(0); - if (pos.z <= MAP_Z_LOW_LIMIT) - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - CRadar::GetActualBlipArrayIndex(CollectNextParameterWithoutIncreasingPC(m_nIp)); - int handle = CRadar::SetCoordBlip(BLIP_CONTACT_POINT, pos, 2, BLIP_DISPLAY_BOTH); - CRadar::ChangeBlipScale(handle, 3); - SET_INTEGER_PARAM(0, handle); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_ADD_BLIP_FOR_COORD: - { - CollectParameters(&m_nIp, 3); - CVector pos = GET_VECTOR_PARAM(0); - if (pos.z <= MAP_Z_LOW_LIMIT) - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - CRadar::GetActualBlipArrayIndex(CollectNextParameterWithoutIncreasingPC(m_nIp)); - int handle = CRadar::SetCoordBlip(BLIP_COORD, pos, 5, BLIP_DISPLAY_BOTH); - CRadar::ChangeBlipScale(handle, 3); - SET_INTEGER_PARAM(0, handle); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_CHANGE_BLIP_DISPLAY: - CollectParameters(&m_nIp, 2); - CRadar::ChangeBlipDisplay(GET_INTEGER_PARAM(0), (eBlipDisplay)GET_INTEGER_PARAM(1)); - return 0; - case COMMAND_ADD_ONE_OFF_SOUND: - { - CollectParameters(&m_nIp, 4); - switch (GET_INTEGER_PARAM(3)) { - case SCRIPT_SOUND_PART_MISSION_COMPLETE: - DMAudio.PlayFrontEndSound(SOUND_PART_MISSION_COMPLETE, 0); - return 0; - case SCRIPT_SOUND_RACE_START_3: - DMAudio.PlayFrontEndSound(SOUND_RACE_START_3, 0); - return 0; - case SCRIPT_SOUND_RACE_START_2: - DMAudio.PlayFrontEndSound(SOUND_RACE_START_2, 0); - return 0; - case SCRIPT_SOUND_RACE_START_1: - DMAudio.PlayFrontEndSound(SOUND_RACE_START_1, 0); - return 0; - case SCRIPT_SOUND_RACE_START_GO: - DMAudio.PlayFrontEndSound(SOUND_RACE_START_GO, 0); - return 0; - case SCRIPT_SOUND_AMMUNATION_BUY_WEAPON: - DMAudio.PlayFrontEndSound(SOUND_PICKUP_WEAPON_BOUGHT, 0); - return 0; - case SCRIPT_SOUND_AMMUNATION_BUY_WEAPON_DENIED: - DMAudio.PlayFrontEndSound(SOUND_GARAGE_NO_MONEY, 0); - return 0; - case SCRIPT_SOUND_IMRAN_ARM_BOMB: - DMAudio.PlayFrontEndSound(SOUND_AMMUNATION_IMRAN_ARM_BOMB, 0); - return 0; - case 0x46: // TODO - DMAudio.PlayFrontEndSound(0xC4, 0); - return 0; - case 0x47: // TODO - DMAudio.PlayFrontEndSound(0xCD, 0); - return 0; - default: - break; + else { + pTarget = nil; } - if (!DMAudio.IsAudioInitialised()) // LCS doesn't have it. Why? - return 0; - cAudioScriptObject* obj = new cAudioScriptObject(); - obj->Posn = GET_VECTOR_PARAM(0); - obj->AudioId = GET_INTEGER_PARAM(3); - obj->AudioEntity = AEHANDLE_NONE; - DMAudio.CreateOneShotScriptObject(obj); + CGarages::SetTargetCarForMissonGarage(GET_INTEGER_PARAM(0), pTarget); return 0; } - case COMMAND_ADD_CONTINUOUS_SOUND: + case COMMAND_IS_CAR_IN_MISSION_GARAGE: + CollectParameters(&m_nIp, 1); + UpdateCompareFlag(CGarages::HasCarBeenDroppedOffYet(GET_INTEGER_PARAM(0))); + return 0; + case COMMAND_SET_FREE_BOMBS: { - CollectParameters(&m_nIp, 4); - if (DMAudio.IsAudioInitialised()) { // LCS doesn't have it. Why? - cAudioScriptObject* obj = new cAudioScriptObject(); - obj->Posn = GET_VECTOR_PARAM(0); - obj->AudioId = GET_INTEGER_PARAM(3); - obj->AudioEntity = DMAudio.CreateLoopingScriptObject(obj); - SET_INTEGER_PARAM(0, CPools::GetAudioScriptObjectPool()->GetIndex(obj)); - } + CollectParameters(&m_nIp, 1); + CGarages::SetFreeBombs(GET_INTEGER_PARAM(0) != 0); + return 0; + } + case COMMAND_IS_CAR_ARMED_WITH_ANY_BOMB: + { + CollectParameters(&m_nIp, 1); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); +#ifdef FIX_BUGS + if (pVehicle->IsCar()) + UpdateCompareFlag(((CAutomobile*)pVehicle)->m_bombType != 0); + else if (pVehicle->IsBike()) + UpdateCompareFlag(((CBike*)pVehicle)->m_bombType != 0); else - SET_INTEGER_PARAM(0, -1); + UpdateCompareFlag(false); +#else + CAutomobile* pCar = (CVehicle*)pVehicle; + UpdateCompareFlag(pCar->m_bombType != 0); //TODO: enum +#endif + return 0; + } + case COMMAND_APPLY_BRAKES_TO_PLAYERS_CAR: + CollectParameters(&m_nIp, 2); + CPad::GetPad(GET_INTEGER_PARAM(0))->bApplyBrakes = (GET_INTEGER_PARAM(1) != 0); + return 0; + case COMMAND_SET_CHAR_HEALTH: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + if (GET_INTEGER_PARAM(1)) { + pPed->m_fHealth = GET_INTEGER_PARAM(1); + } + else if (pPed->bInVehicle) { + pPed->SetDead(); + if (!pPed->IsPlayer()) + pPed->FlagToDestroyWhenNextProcessed(); + } + else { + pPed->SetDie(); // last argument = 13 (default? TODO) + } + return 0; + } + case COMMAND_SET_CAR_HEALTH: + { + CollectParameters(&m_nIp, 2); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + pVehicle->m_fHealth = GET_INTEGER_PARAM(1); + return 0; + } + case COMMAND_GET_CHAR_HEALTH: + { + CollectParameters(&m_nIp, 1); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + SET_INTEGER_PARAM(0, pPed->m_fHealth); StoreParameters(&m_nIp, 1); return 0; } - case COMMAND_REMOVE_SOUND: - { - CollectParameters(&m_nIp, 1); - cAudioScriptObject* obj = CPools::GetAudioScriptObjectPool()->GetAt(GET_INTEGER_PARAM(0)); - if (!obj) { - debug("REMOVE_SOUND - Sound doesn't exist\n"); - return 0; - } - DMAudio.DestroyLoopingScriptObject(obj->AudioEntity); - delete obj; - return 0; - } - case COMMAND_IS_CAR_STUCK_ON_ROOF: + case COMMAND_GET_CAR_HEALTH: { CollectParameters(&m_nIp, 1); CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); script_assert(pVehicle); - UpdateCompareFlag(CTheScripts::UpsideDownCars.HasCarBeenUpsideDownForAWhile(GET_INTEGER_PARAM(0))); + SET_INTEGER_PARAM(0, pVehicle->m_fHealth); + StoreParameters(&m_nIp, 1); return 0; } + case COMMAND_IS_CAR_ARMED_WITH_BOMB: + { + CollectParameters(&m_nIp, 2); + CAutomobile* pVehicle = (CAutomobile*)CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); +#ifdef FIX_BUGS + if (pVehicle->IsCar()) + UpdateCompareFlag(((CAutomobile*)pVehicle)->m_bombType == GET_INTEGER_PARAM(1)); + else if (pVehicle->IsBike()) + UpdateCompareFlag(((CBike*)pVehicle)->m_bombType == GET_INTEGER_PARAM(1)); + else + UpdateCompareFlag(false); +#else + CAutomobile* pCar = (CVehicle*)pVehicle; + UpdateCompareFlag(pCar->m_bombType != 0); //TODO: enum +#endif + return 0; + } + case COMMAND_CHANGE_CAR_COLOUR: + { + CollectParameters(&m_nIp, 3); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + if (GET_INTEGER_PARAM(1) >= 256 || GET_INTEGER_PARAM(2) >= 256) + debug("CHANGE_CAR_COLOUR - Colours must be less than %d", 256); + pVehicle->m_currentColour1 = GET_INTEGER_PARAM(1); + pVehicle->m_currentColour2 = GET_INTEGER_PARAM(2); + return 0; + } + case COMMAND_SWITCH_PED_ROADS_ON: + { + CollectParameters(&m_nIp, 6); + float infX = GET_FLOAT_PARAM(0); + float infY = GET_FLOAT_PARAM(1); + float infZ = GET_FLOAT_PARAM(2); + float supX = GET_FLOAT_PARAM(3); + float supY = GET_FLOAT_PARAM(4); + float supZ = GET_FLOAT_PARAM(5); + if (infX > supX) { + infX = GET_FLOAT_PARAM(3); + supX = GET_FLOAT_PARAM(0); + } + if (infY > supY) { + infY = GET_FLOAT_PARAM(4); + supY = GET_FLOAT_PARAM(1); + } + if (infZ > supZ) { + infZ = GET_FLOAT_PARAM(5); + supZ = GET_FLOAT_PARAM(2); + } + ThePaths.SwitchPedRoadsOffInArea(infX, supX, infY, supY, infZ, supZ, false); + return 0; + } + case COMMAND_SWITCH_PED_ROADS_OFF: + { + CollectParameters(&m_nIp, 6); + float infX = GET_FLOAT_PARAM(0); + float infY = GET_FLOAT_PARAM(1); + float infZ = GET_FLOAT_PARAM(2); + float supX = GET_FLOAT_PARAM(3); + float supY = GET_FLOAT_PARAM(4); + float supZ = GET_FLOAT_PARAM(5); + if (infX > supX) { + infX = GET_FLOAT_PARAM(3); + supX = GET_FLOAT_PARAM(0); + } + if (infY > supY) { + infY = GET_FLOAT_PARAM(4); + supY = GET_FLOAT_PARAM(1); + } + if (infZ > supZ) { + infZ = GET_FLOAT_PARAM(5); + supZ = GET_FLOAT_PARAM(2); + } + ThePaths.SwitchPedRoadsOffInArea(infX, supX, infY, supY, infZ, supZ, true); + return 0; + } + case COMMAND_CHAR_LOOK_AT_CHAR_ALWAYS: + { + CollectParameters(&m_nIp, 2); + CPed* pSourcePed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pSourcePed); + CPed* pTargetPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(1)); + script_assert(pTargetPed); + pSourcePed->SetLookFlag(pTargetPed, true, true); + pSourcePed->SetLookTimer(60000); + return 0; + } + case COMMAND_STOP_CHAR_LOOKING: + { + CollectParameters(&m_nIp, 1); + CPed* pSourcePed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pSourcePed); + pSourcePed->ClearLookFlag(); + pSourcePed->bKeepTryingToLook = false; + if (pSourcePed->GetPedState() == PED_LOOK_HEADING || pSourcePed->GetPedState() == PED_LOOK_ENTITY) + pSourcePed->RestorePreviousState(); + return 0; + } + case COMMAND_SET_GANG_PED_MODELS: + CollectParameters(&m_nIp, 3); + CGangs::SetGangPedModels(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2)); + return 0; + case COMMAND_SET_GANG_CAR_MODEL: + CollectParameters(&m_nIp, 2); + CGangs::SetGangVehicleModel(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); + return 0; + case COMMAND_SET_GANG_WEAPONS: + CollectParameters(&m_nIp, 3); + CGangs::SetGangWeapons(GET_INTEGER_PARAM(0), (eWeaponType)GET_INTEGER_PARAM(1), (eWeaponType)GET_INTEGER_PARAM(2)); + return 0; + case COMMAND_SET_CHAR_OBJ_RUN_TO_COORD: + { + CollectParameters(&m_nIp, 3); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + CVector pos; + pos.x = GET_FLOAT_PARAM(1); + pos.y = GET_FLOAT_PARAM(2); + pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); + pPed->bScriptObjectiveCompleted = false; + pPed->SetObjective(OBJECTIVE_RUN_TO_AREA, pos); + return 0; + } + case COMMAND_LOAD_SPECIAL_CHARACTER: + { + CollectParameters(&m_nIp, 1); + char name[16]; + strncpy(name, (char*)&CTheScripts::ScriptSpace[m_nIp], KEY_LENGTH_IN_SCRIPT); + for (int i = 0; i < KEY_LENGTH_IN_SCRIPT; i++) + name[i] = tolower(name[i]); + CStreaming::RequestSpecialChar(GET_INTEGER_PARAM(0) - 1, name, STREAMFLAGS_DEPENDENCY | (m_bIsMissionScript ? STREAMFLAGS_SCRIPTOWNED : STREAMFLAGS_AMBIENT_SCRIPT_OWNED)); + m_nIp += KEY_LENGTH_IN_SCRIPT; + return 0; + } + case COMMAND_HAS_SPECIAL_CHARACTER_LOADED: + { + CollectParameters(&m_nIp, 1); + UpdateCompareFlag(CStreaming::HasSpecialCharLoaded(GET_INTEGER_PARAM(0) - 1)); + return 0; + } + case COMMAND_IS_PLAYER_IN_REMOTE_MODE: + CollectParameters(&m_nIp, 1); + UpdateCompareFlag(CWorld::Players[GET_INTEGER_PARAM(0)].IsPlayerInRemoteMode()); + return 0; + case COMMAND_ARM_CAR_WITH_BOMB: + { + CollectParameters(&m_nIp, 2); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); +#ifdef FIX_BUGS + if (pVehicle->IsCar()) { + ((CAutomobile*)pVehicle)->m_bombType = GET_INTEGER_PARAM(1); + ((CAutomobile*)pVehicle)->m_pBombRigger = FindPlayerPed(); + } + else if (pVehicle->IsBike()) { + ((CBike*)pVehicle)->m_bombType = GET_INTEGER_PARAM(1); + ((CBike*)pVehicle)->m_pBombRigger = FindPlayerPed(); + } +#else + ((CAutomobile*)pVehicle)->m_bombType = GET_INTEGER_PARAM(1); + ((CAutomobile*)pVehicle)->m_pBombRigger = FindPlayerPed(); +#endif + return 0; + } + case COMMAND_SET_CHAR_PERSONALITY: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + pPed->SetPedStats((ePedStats)GET_INTEGER_PARAM(1)); + return 0; + } + case COMMAND_SET_CUTSCENE_OFFSET: + CollectParameters(&m_nIp, 3); + CCutsceneMgr::SetCutsceneOffset(GET_VECTOR_PARAM(0)); + return 0; + case COMMAND_SET_ANIM_GROUP_FOR_CHAR: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + pPed->m_animGroup = (AssocGroupId)GET_INTEGER_PARAM(1); + pPed->bOverrideMoveAnim = false; + return 0; + } + case COMMAND_REQUEST_MODEL: + { + CollectParameters(&m_nIp, 1); + int model = GET_INTEGER_PARAM(0); + if (model < 0) + model = CTheScripts::UsedObjectArray[-model].index; + CStreaming::RequestModel(model, STREAMFLAGS_DEPENDENCY | STREAMFLAGS_NOFADE | (m_bIsMissionScript ? STREAMFLAGS_SCRIPTOWNED : STREAMFLAGS_AMBIENT_SCRIPT_OWNED)); + if (model == MI_MINIGUN) +#ifdef FIX_BUGS + CStreaming::RequestModel(MI_MINIGUN2, STREAMFLAGS_DEPENDENCY | STREAMFLAGS_NOFADE | (m_bIsMissionScript ? STREAMFLAGS_SCRIPTOWNED : STREAMFLAGS_AMBIENT_SCRIPT_OWNED)); +#else + CStreaming::RequestModel(MI_MINIGUN2, STREAMFLAGS_DEPENDENCY | STREAMFLAGS_NOFADE | STREAMFLAGS_SCRIPTOWNED); +#endif + return 0; + } + case COMMAND_HAS_MODEL_LOADED: + { + CollectParameters(&m_nIp, 1); + int model = GET_INTEGER_PARAM(0); + if (model < 0) + model = CTheScripts::UsedObjectArray[-model].index; + UpdateCompareFlag(CStreaming::HasModelLoaded(model)/* || cWorldStream::Instance()->pDynamic(model, 0) */); // TODO + return 0; + } + case COMMAND_MARK_MODEL_AS_NO_LONGER_NEEDED: + { + CollectParameters(&m_nIp, 1); + int model = GET_INTEGER_PARAM(0); + if (model < 0) + model = CTheScripts::UsedObjectArray[-model].index; + if (m_bIsMissionScript) + CStreaming::SetMissionDoesntRequireModel(model); + else + CStreaming::SetAmbientMissionDoesntRequireModel(model); + return 0; + } + case COMMAND_GRAB_PHONE: + { + CollectParameters(&m_nIp, 2); + SET_INTEGER_PARAM(0, gPhoneInfo.GrabPhone(GET_FLOAT_PARAM(0), GET_FLOAT_PARAM(1))); + StoreParameters(&m_nIp, 1); + return 0; + } + case COMMAND_TURN_PHONE_OFF: + { + CollectParameters(&m_nIp, 1); + gPhoneInfo.SetPhoneMessage_JustOnce(GET_INTEGER_PARAM(0), nil, nil, nil, nil, nil, nil); + return 0; + } + case COMMAND_DRAW_CORONA: + { + uint32 ip = m_nIp; + int32* ptr = GetPointerToScriptVariable(&ip); + CollectParameters(&m_nIp, 9); + CVector pos = GET_VECTOR_PARAM(0); + if (pos.z <= MAP_Z_LOW_LIMIT) + pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); + CCoronas::RegisterCorona((uintptr)ptr, GET_INTEGER_PARAM(6), GET_INTEGER_PARAM(7), GET_INTEGER_PARAM(8), + 255, pos, -GET_FLOAT_PARAM(3), 450.0f, GET_INTEGER_PARAM(4), GET_INTEGER_PARAM(5), 1, 0, 0, 0.0f); + return 0; + } + case COMMAND_STORE_WEATHER: + CWeather::StoreWeatherState(); + return 0; + case COMMAND_RESTORE_WEATHER: + CWeather::RestoreWeatherState(); + case COMMAND_STORE_CLOCK: + CClock::StoreClock(); + return 0; + case COMMAND_RESTORE_CLOCK: + CClock::RestoreClock(); + return 0; + case COMMAND_RESTART_CRITICAL_MISSION: + { + CollectParameters(&m_nIp, 4); + CVector pos = GET_VECTOR_PARAM(0); + if (pos.z <= MAP_Z_LOW_LIMIT) + pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); + CRestart::OverrideNextRestart(pos, GET_FLOAT_PARAM(3)); + if (CWorld::Players[CWorld::PlayerInFocus].m_WBState != WBSTATE_PLAYING) + printf("RESTART_CRITICAL_MISSION - Player state is not PLAYING\n"); + CWorld::Players[CWorld::PlayerInFocus].PlayerFailedCriticalMission(); + return 0; + } + case todo__comm_363: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_363"); + return 0; + } + /*case COMMAND_SET_COLL_OBJ_NO_OBJ: + CollectParameters(&m_nIp, 1); + CTheScripts::SetObjectiveForAllPedsInCollective(GET_INTEGER_PARAM(0), OBJECTIVE_NONE); + return 0; + case COMMAND_SET_COLL_OBJ_WAIT_ON_FOOT: + CollectParameters(&m_nIp, 1); + CTheScripts::SetObjectiveForAllPedsInCollective(GET_INTEGER_PARAM(0), OBJECTIVE_WAIT_ON_FOOT); + return 0; + case COMMAND_SET_COLL_OBJ_FLEE_ON_FOOT_TILL_SAFE: + CollectParameters(&m_nIp, 1); + CTheScripts::SetObjectiveForAllPedsInCollective(GET_INTEGER_PARAM(0), OBJECTIVE_FLEE_ON_FOOT_TILL_SAFE); + return 0; + case COMMAND_SET_COLL_OBJ_GUARD_SPOT: + { + CollectParameters(&m_nIp, 4); + CVector pos = GET_VECTOR_PARAM(1); + if (pos.z <= MAP_Z_LOW_LIMIT) + pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); + CTheScripts::SetObjectiveForAllPedsInCollective(GET_INTEGER_PARAM(0), OBJECTIVE_GUARD_AREA, pos); + return 0; + } + case COMMAND_SET_COLL_OBJ_GUARD_AREA: + { + CollectParameters(&m_nIp, 5); + float infX = GET_FLOAT_PARAM(1); + float supX = GET_FLOAT_PARAM(3); + if (infX > supX) { + infX = GET_FLOAT_PARAM(3); + supX = GET_FLOAT_PARAM(1); + } + float infY = GET_FLOAT_PARAM(2); + float supY = GET_FLOAT_PARAM(4); + if (infY > supY) { + infY = GET_FLOAT_PARAM(4); + supY = GET_FLOAT_PARAM(2); + } + CVector pos; + pos.x = (infX + supX) / 2; + pos.y = (infY + supY) / 2; + pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); + float radius = Max(pos.x - infX, pos.y - infY); + CTheScripts::SetObjectiveForAllPedsInCollective(GET_INTEGER_PARAM(0), OBJECTIVE_GUARD_AREA, pos, radius); + return 0; + } + case COMMAND_SET_COLL_OBJ_WAIT_IN_CAR: + CollectParameters(&m_nIp, 1); + CTheScripts::SetObjectiveForAllPedsInCollective(GET_INTEGER_PARAM(0), OBJECTIVE_WAIT_IN_CAR); + return 0; + case COMMAND_SET_COLL_OBJ_KILL_CHAR_ON_FOOT: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(1)); + CTheScripts::SetObjectiveForAllPedsInCollective(GET_INTEGER_PARAM(0), OBJECTIVE_KILL_CHAR_ON_FOOT, pPed); + return 0; + } + case COMMAND_SET_COLL_OBJ_KILL_CHAR_ANY_MEANS: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(1)); + CTheScripts::SetObjectiveForAllPedsInCollective(GET_INTEGER_PARAM(0), OBJECTIVE_KILL_CHAR_ANY_MEANS, pPed); + return 0; + } + case COMMAND_SET_COLL_OBJ_FLEE_CHAR_ON_FOOT_ALWAYS: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(1)); + CTheScripts::SetObjectiveForAllPedsInCollective(GET_INTEGER_PARAM(0), OBJECTIVE_FLEE_CHAR_ON_FOOT_ALWAYS, pPed); + return 0; + } + case COMMAND_SET_COLL_OBJ_GOTO_CHAR_ON_FOOT: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(1)); + CTheScripts::SetObjectiveForAllPedsInCollective(GET_INTEGER_PARAM(0), OBJECTIVE_GOTO_CHAR_ON_FOOT, pPed); + return 0; + }*/ + case todo__comm_374: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_374"); + return 0; + } + /*case COMMAND_SET_COLL_OBJ_ENTER_CAR_AS_PASSENGER: + { + CollectParameters(&m_nIp, 2); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); + CTheScripts::SetObjectiveForAllPedsInCollective(GET_INTEGER_PARAM(0), OBJECTIVE_ENTER_CAR_AS_PASSENGER, pVehicle); + return 0; + } + case COMMAND_SET_COLL_OBJ_ENTER_CAR_AS_DRIVER: + { + CollectParameters(&m_nIp, 2); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); + CTheScripts::SetObjectiveForAllPedsInCollective(GET_INTEGER_PARAM(0), OBJECTIVE_ENTER_CAR_AS_DRIVER, pVehicle); + return 0; + }*/ + case todo__comm_377: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_377"); + return 0; + } + case todo__comm_378: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_378"); + return 0; + } + /*case COMMAND_SET_COLL_OBJ_GOTO_AREA_ON_FOOT: + { + CollectParameters(&m_nIp, 5); + float infX = GET_FLOAT_PARAM(1); + float supX = GET_FLOAT_PARAM(3); + if (infX > supX) { + infX = GET_FLOAT_PARAM(3); + supX = GET_FLOAT_PARAM(1); + } + float infY = GET_FLOAT_PARAM(2); + float supY = GET_FLOAT_PARAM(4); + if (infY > supY) { + infY = GET_FLOAT_PARAM(4); + supY = GET_FLOAT_PARAM(2); + } + CVector pos; + pos.x = (infX + supX) / 2; + pos.y = (infY + supY) / 2; + pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); + float radius = Max(pos.x - infX, pos.y - infY); + CTheScripts::SetObjectiveForAllPedsInCollective(GET_INTEGER_PARAM(0), OBJECTIVE_GOTO_AREA_ON_FOOT, pos, radius); + return 0; + } + case COMMAND_SET_COLL_OBJ_GOTO_COORD_ON_FOOT: + { + CollectParameters(&m_nIp, 3); + CVector pos(GET_FLOAT_PARAM(1), GET_FLOAT_PARAM(2), CWorld::FindGroundZForCoord(GET_FLOAT_PARAM(1), GET_FLOAT_PARAM(2))); + CTheScripts::SetObjectiveForAllPedsInCollective(GET_INTEGER_PARAM(0), OBJECTIVE_GOTO_AREA_ON_FOOT, pos); + return 0; + }*/ + case todo__comm_381: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_381"); + return 0; + } + case todo__comm_382: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_382"); + return 0; + } + /*case COMMAND_SET_COLL_OBJ_LEAVE_CAR: + CollectParameters(&m_nIp, 1); + CTheScripts::SetObjectiveForAllPedsInCollective(GET_INTEGER_PARAM(0), OBJECTIVE_LEAVE_CAR); + return 0;*/ + case todo__comm_384: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_384"); + return 0; + } + case todo__comm_385: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_385"); + return 0; + } + case todo__comm_386: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_386"); + return 0; + } + case todo__comm_387: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_387"); + return 0; + } + /*case COMMAND_SET_COLL_OBJ_FOLLOW_ROUTE: + CollectParameters(&m_nIp, 3); + CTheScripts::SetObjectiveForAllPedsInCollective(GET_INTEGER_PARAM(0), OBJECTIVE_FOLLOW_ROUTE, GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2)); + return 0; + case COMMAND_SET_COLL_OBJ_RUN_TO_COORD: + { + CollectParameters(&m_nIp, 3); + CVector pos(GET_FLOAT_PARAM(1), GET_FLOAT_PARAM(2), CWorld::FindGroundZForCoord(GET_FLOAT_PARAM(1), GET_FLOAT_PARAM(2))); + CTheScripts::SetObjectiveForAllPedsInCollective(GET_INTEGER_PARAM(0), OBJECTIVE_RUN_TO_AREA, pos); + return 0; + }*/ + case todo__comm_390: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_390"); + return 0; + } + case todo__comm_391: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_391"); + return 0; + } + case todo__comm_392: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_392"); + return 0; + } + case todo__comm_393: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_393"); + return 0; + } + case todo__comm_394: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_394"); + return 0; + } + case todo__comm_395: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_395"); + return 0; + } + case todo__comm_396: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_396"); + return 0; + } + case todo__comm_397: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_397"); + return 0; + } + case todo__comm_398: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_398"); + return 0; + } + case todo__comm_399: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_399"); + return 0; + } + default: script_assert(0); } @@ -808,758 +829,553 @@ int8 CRunningScript::ProcessCommands300To399(int32 command) int8 CRunningScript::ProcessCommands400To499(int32 command) { switch (command) { - case COMMAND_ADD_UPSIDEDOWN_CAR_CHECK: + case todo__comm_400: + case todo__comm_401: + case todo__comm_402: + case todo__comm_403: + case todo__comm_404: + case todo__comm_405: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_400-405"); + return 0; + } + case todo__comm_406: + case todo__comm_407: + case todo__comm_408: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_406-408"); + return 0; + } + case todo__comm_409: + case todo__comm_410: + case todo__comm_411: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_409-411"); + return 0; + } + case todo__comm_413: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_413"); + return 0; + } + case todo__comm_412: + case todo__comm_414: + case todo__comm_415: + case todo__comm_416: + case todo__comm_417: + case todo__comm_418: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_412-418"); + return 0; + } + case todo__comm_419: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_419"); + return 0; + } + case COMMAND_SET_CHAR_HEED_THREATS: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + pPed->bRespondsToThreats = (GET_INTEGER_PARAM(1) != 0); + return 0; + } + case COMMAND_GET_CONTROLLER_MODE: +#if defined(GTA_PC) && !defined(DETECT_PAD_INPUT_SWITCH) + SET_INTEGER_PARAM(0, 0); +#else + SET_INTEGER_PARAM(0, CPad::IsAffectedByController ? CPad::GetPad(0)->Mode : 0); +#endif + StoreParameters(&m_nIp, 1); + return 0; + case COMMAND_SET_CAN_RESPRAY_CAR: + { + CollectParameters(&m_nIp, 2); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + //assert(pVehicle->m_vehType == VEHICLE_TYPE_CAR); + // they DO call this for bikes, we don't really want to destroy the structure... +#ifdef FIX_BUGS + if (pVehicle->m_vehType == VEHICLE_TYPE_CAR) +#endif + ((CAutomobile*)pVehicle)->bFixedColour = (GET_INTEGER_PARAM(1) == 0); +#ifdef FIX_BUGS + else if (pVehicle->m_vehType == VEHICLE_TYPE_BIKE) + ((CBike*)pVehicle)->bFixedColour = (GET_INTEGER_PARAM(1) == 0); +#endif + + return 0; + } + case COMMAND_UNLOAD_SPECIAL_CHARACTER: + CollectParameters(&m_nIp, 1); + if (m_bIsMissionScript) + CStreaming::SetMissionDoesntRequireSpecialChar(GET_INTEGER_PARAM(0) - 1); + else + CStreaming::SetAmbientMissionDoesntRequireSpecialChar(GET_INTEGER_PARAM(0) - 1); + return 0; + case COMMAND_RESET_NUM_OF_MODELS_KILLED_BY_PLAYER: + CDarkel::ResetModelsKilledByPlayer(); + return 0; + case COMMAND_GET_NUM_OF_MODELS_KILLED_BY_PLAYER: + CollectParameters(&m_nIp, 1); + SET_INTEGER_PARAM(0, CDarkel::QueryModelsKilledByPlayer(GET_INTEGER_PARAM(0))); + StoreParameters(&m_nIp, 1); + return 0; + case COMMAND_CREATE_OBJECT_NO_OFFSET: + { + CollectParameters(&m_nIp, 4); + script_assert(false && "TMP REMOVED COMMAND_CREATE_OBJECT_NO_OFFSET"); + return 0; + + int mi = GET_INTEGER_PARAM(0) >= 0 ? GET_INTEGER_PARAM(0) : CTheScripts::UsedObjectArray[-GET_INTEGER_PARAM(0)].index; + CObject* pObj = new CObject(mi, false); +; pObj->ObjectCreatedBy = MISSION_OBJECT; + CVector pos = GET_VECTOR_PARAM(1); + if (pos.z <= MAP_Z_LOW_LIMIT) + pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); + pObj->SetPosition(pos); + pObj->SetOrientation(0.0f, 0.0f, 0.0f); + pObj->GetMatrix().UpdateRW(); + pObj->UpdateRwFrame(); + CBaseModelInfo* pModelInfo = CModelInfo::GetModelInfo(mi); + if (pModelInfo->IsBuilding() && ((CSimpleModelInfo*)pModelInfo)->m_isBigBuilding) + pObj->SetupBigBuilding(); + CTheScripts::ClearSpaceForMissionEntity(pos, pObj); + CWorld::Add(pObj); + SET_INTEGER_PARAM(0, CPools::GetObjectPool()->GetIndex(pObj)); + StoreParameters(&m_nIp, 1); + if (m_bIsMissionScript) + CTheScripts::MissionCleanUp.AddEntityToList(GET_INTEGER_PARAM(0), CLEANUP_OBJECT); + return 0; + } + case COMMAND_IS_BOAT: { CollectParameters(&m_nIp, 1); CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); script_assert(pVehicle); - CTheScripts::UpsideDownCars.AddCarToCheck(GET_INTEGER_PARAM(0)); + UpdateCompareFlag(pVehicle->GetVehicleAppearance() == VEHICLE_APPEARANCE_BOAT); return 0; } - case COMMAND_REMOVE_UPSIDEDOWN_CAR_CHECK: + case COMMAND_IS_CHAR_STOPPED: + { + CollectParameters(&m_nIp, 1); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + UpdateCompareFlag(CTheScripts::IsPedStopped(pPed)); + return 0; + } + case COMMAND_MESSAGE_WAIT: + CollectParameters(&m_nIp, 2); + m_nWakeTime = CTimer::GetTimeInMilliseconds() + GET_INTEGER_PARAM(0); + if (GET_INTEGER_PARAM(1) != 0) + m_bSkipWakeTime = true; + return 1; + case COMMAND_SWITCH_WIDESCREEN: + CollectParameters(&m_nIp, 1); + if (GET_INTEGER_PARAM(0) != 0) + TheCamera.SetWideScreenOn(); + else { + // TODO(LCS): unknown field + TheCamera.SetWideScreenOff(); + } + return 0; + case COMMAND_SET_CHAR_ONLY_DAMAGED_BY_PLAYER: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + pPed->bOnlyDamagedByPlayer = (GET_INTEGER_PARAM(1) != 0); + return 0; + } + case COMMAND_SET_CAR_ONLY_DAMAGED_BY_PLAYER: + { + CollectParameters(&m_nIp, 2); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + pVehicle->bOnlyDamagedByPlayer = (GET_INTEGER_PARAM(1) != 0); + return 0; + } + case COMMAND_SET_CHAR_PROOFS: + { + CollectParameters(&m_nIp, 6); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + pPed->bBulletProof = (GET_INTEGER_PARAM(1) != 0); + pPed->bFireProof = (GET_INTEGER_PARAM(2) != 0); + pPed->bExplosionProof = (GET_INTEGER_PARAM(3) != 0); + pPed->bCollisionProof = (GET_INTEGER_PARAM(4) != 0); + pPed->bMeleeProof = (GET_INTEGER_PARAM(5) != 0); + return 0; + } + case COMMAND_SET_CAR_PROOFS: + { + CollectParameters(&m_nIp, 6); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + pVehicle->bBulletProof = (GET_INTEGER_PARAM(1) != 0); + pVehicle->bFireProof = (GET_INTEGER_PARAM(2) != 0); + pVehicle->bExplosionProof = (GET_INTEGER_PARAM(3) != 0); + pVehicle->bCollisionProof = (GET_INTEGER_PARAM(4) != 0); + pVehicle->bMeleeProof = (GET_INTEGER_PARAM(5) != 0); + return 0; + } + case COMMAND_IS_CAR_IN_WATER: { CollectParameters(&m_nIp, 1); CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - CTheScripts::UpsideDownCars.RemoveCarFromCheck(GET_INTEGER_PARAM(0)); + UpdateCompareFlag(pVehicle && pVehicle->bIsInWater); return 0; } - case COMMAND_SET_CHAR_OBJ_WAIT_ON_FOOT: + case COMMAND_GET_CLOSEST_CHAR_NODE: { - CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - pPed->bScriptObjectiveCompleted = false; - pPed->SetObjective(OBJECTIVE_WAIT_ON_FOOT); - return 0; - } - case COMMAND_SET_CHAR_OBJ_FLEE_ON_FOOT_TILL_SAFE: - { - CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - pPed->bScriptObjectiveCompleted = false; - pPed->SetObjective(OBJECTIVE_FLEE_CHAR_ON_FOOT_TILL_SAFE); - return 0; - } - case COMMAND_SET_CHAR_OBJ_GUARD_SPOT: - { - CollectParameters(&m_nIp, 4); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - CVector pos = GET_VECTOR_PARAM(1); + CollectParameters(&m_nIp, 3); + CVector pos = GET_VECTOR_PARAM(0); if (pos.z <= MAP_Z_LOW_LIMIT) pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - pPed->bScriptObjectiveCompleted = false; - pPed->SetObjective(OBJECTIVE_GUARD_SPOT, pos); - return 0; - } - case COMMAND_SET_CHAR_OBJ_GUARD_AREA: - { - CollectParameters(&m_nIp, 5); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - float infX = GET_FLOAT_PARAM(1); - float infY = GET_FLOAT_PARAM(2); - float supX = GET_FLOAT_PARAM(3); - float supY = GET_FLOAT_PARAM(4); - if (infX > supX) { - infX = GET_FLOAT_PARAM(3); - supX = GET_FLOAT_PARAM(1); - } - if (infY > supY) { - infY = GET_FLOAT_PARAM(4); - supY = GET_FLOAT_PARAM(2); - } - CVector pos; - pos.x = (infX + supX) / 2; - pos.y = (infY + supY) / 2; - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - float radius = Max(pos.x - infX, pos.y - infY); - pPed->bScriptObjectiveCompleted = false; - pPed->SetObjective(OBJECTIVE_GUARD_SPOT, pos, radius); - return 0; - } - case COMMAND_SET_CHAR_OBJ_WAIT_IN_CAR: - { - CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - pPed->bScriptObjectiveCompleted = false; - pPed->SetObjective(OBJECTIVE_WAIT_IN_CAR); - return 0; - } - case COMMAND_IS_PLAYER_IN_AREA_ON_FOOT_2D: - case COMMAND_IS_PLAYER_IN_AREA_IN_CAR_2D: - case COMMAND_IS_PLAYER_STOPPED_IN_AREA_2D: - case COMMAND_IS_PLAYER_STOPPED_IN_AREA_ON_FOOT_2D: - case COMMAND_IS_PLAYER_STOPPED_IN_AREA_IN_CAR_2D: - case COMMAND_IS_PLAYER_IN_AREA_ON_FOOT_3D: - case COMMAND_IS_PLAYER_IN_AREA_IN_CAR_3D: - case COMMAND_IS_PLAYER_STOPPED_IN_AREA_3D: - case COMMAND_IS_PLAYER_STOPPED_IN_AREA_ON_FOOT_3D: - case COMMAND_IS_PLAYER_STOPPED_IN_AREA_IN_CAR_3D: - PlayerInAreaCheckCommand(command, &m_nIp); - return 0; - case COMMAND_IS_CHAR_IN_AREA_ON_FOOT_2D: - case COMMAND_IS_CHAR_IN_AREA_IN_CAR_2D: - case COMMAND_IS_CHAR_STOPPED_IN_AREA_2D: - case COMMAND_IS_CHAR_STOPPED_IN_AREA_ON_FOOT_2D: - case COMMAND_IS_CHAR_STOPPED_IN_AREA_IN_CAR_2D: - case COMMAND_IS_CHAR_IN_AREA_ON_FOOT_3D: - case COMMAND_IS_CHAR_IN_AREA_IN_CAR_3D: - case COMMAND_IS_CHAR_STOPPED_IN_AREA_3D: - case COMMAND_IS_CHAR_STOPPED_IN_AREA_ON_FOOT_3D: - case COMMAND_IS_CHAR_STOPPED_IN_AREA_IN_CAR_3D: - CharInAreaCheckCommand(command, &m_nIp); - return 0; - case COMMAND_IS_CAR_STOPPED_IN_AREA_2D: - case COMMAND_IS_CAR_STOPPED_IN_AREA_3D: - CarInAreaCheckCommand(command, &m_nIp); - return 0; - case COMMAND_LOCATE_CAR_2D: - case COMMAND_LOCATE_STOPPED_CAR_2D: - case COMMAND_LOCATE_CAR_3D: - case COMMAND_LOCATE_STOPPED_CAR_3D: - LocateCarCommand(command, &m_nIp); - return 0; - case COMMAND_GIVE_WEAPON_TO_PLAYER: - { - CollectParameters(&m_nIp, 3); - CPlayerPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(pPed); - pPed->m_nSelectedWepSlot = pPed->GiveWeapon((eWeaponType)GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2)); - return 0; - } - case COMMAND_GIVE_WEAPON_TO_CHAR: - { - CollectParameters(&m_nIp, 3); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - pPed->SetCurrentWeapon(pPed->GiveWeapon((eWeaponType)GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2))); - if (pPed->bInVehicle && pPed->m_pMyVehicle) - pPed->RemoveWeaponModel(CWeaponInfo::GetWeaponInfo(pPed->m_weapons[pPed->m_currentWeapon].m_eWeaponType)->m_nModelId); - return 0; - } - //case COMMAND_GIVE_WEAPON_TO_CAR: - case COMMAND_SET_PLAYER_CONTROL: - { - CollectParameters(&m_nIp, 2); - CPlayerInfo* pPlayer = &CWorld::Players[GET_INTEGER_PARAM(0)]; - if (FindPlayerPed()) { - if (FindPlayerPed()->GetPedState() != PED_JUMP) { - FindPlayerPed()->bIsLanding = false; - FindPlayerPed()->bIsInTheAir = false; - } - FindPlayerPed()->RestoreHeadingRate(); - } - if (GET_INTEGER_PARAM(1)) { - pPlayer->MakePlayerSafe(false); - if (FindPlayerPed()->GetStatus() != PED_DRIVING && !FindPlayerPed()->m_attachedTo) { - // FindPlayerPed()->SetIdleAndResetAnim(); // TODO! - } - } - else { - pPlayer->MakePlayerSafe(true); - if (FindPlayerPed()->GetPedState() > PED_STATES_NO_AI && FindPlayerPed()->GetPedState() != PED_DRIVING && TheCamera.GetScreenFadeStatus() == FADE_2) { - // FindPlayerPed()->SetIdleAndResetAnim(); // TODO! - } - } - return 0; - } - case COMMAND_FORCE_WEATHER: - CollectParameters(&m_nIp, 1); - CWeather::ForceWeather(GET_INTEGER_PARAM(0)); - return 0; - case COMMAND_FORCE_WEATHER_NOW: - CollectParameters(&m_nIp, 1); - CWeather::ForceWeatherNow(GET_INTEGER_PARAM(0)); - return 0; - case COMMAND_RELEASE_WEATHER: - CWeather::ReleaseWeather(); - return 0; - case COMMAND_SET_CURRENT_PLAYER_WEAPON: - { - CollectParameters(&m_nIp, 2); - CPlayerPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - for (int i = 0; i < TOTAL_WEAPON_SLOTS; i++) { - if (pPed->m_weapons[i].m_eWeaponType == GET_INTEGER_PARAM(1)) - pPed->m_nSelectedWepSlot = i; - } - return 0; - } - case COMMAND_SET_CURRENT_CHAR_WEAPON: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - for (int i = 0; i < TOTAL_WEAPON_SLOTS; i++) { - if (pPed->m_weapons[i].m_eWeaponType == GET_INTEGER_PARAM(1)) - pPed->SetCurrentWeapon(i); - } - return 0; - } - //case COMMAND_SET_CURRENT_CAR_WEAPON: - case COMMAND_GET_OBJECT_COORDINATES: - { - CollectParameters(&m_nIp, 1); - CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pObject); - SET_VECTOR_PARAM(0, pObject->GetPosition()); + CPathNode* pNode = &ThePaths.m_pathNodes[ThePaths.FindNodeClosestToCoors(pos, 1, 800.0f, true)]; + SET_VECTOR_PARAM(0, pNode->GetPosition()); StoreParameters(&m_nIp, 3); return 0; } - case COMMAND_SET_OBJECT_COORDINATES: + case COMMAND_GET_CLOSEST_CAR_NODE: + { + CollectParameters(&m_nIp, 3); + CVector pos = GET_VECTOR_PARAM(0); + if (pos.z <= MAP_Z_LOW_LIMIT) + pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); + SET_VECTOR_PARAM(0, ThePaths.FindNodeCoorsForScript(ThePaths.FindNodeClosestToCoors(pos, 0, 800.0f, true, true))); + StoreParameters(&m_nIp, 3); + return 0; + } + case COMMAND_CAR_GOTO_COORDINATES_ACCURATE: { CollectParameters(&m_nIp, 4); - CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pObject); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); CVector pos = GET_VECTOR_PARAM(1); if (pos.z <= MAP_Z_LOW_LIMIT) pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - pObject->Teleport(pos); - CTheScripts::ClearSpaceForMissionEntity(pos, pObject); + pos.z += pVehicle->GetDistanceFromCentreOfMassToBaseOfModel(); + uint8 nOldMission = pVehicle->AutoPilot.m_nCarMission; + if (CCarCtrl::JoinCarWithRoadSystemGotoCoors(pVehicle, pos, false)) + pVehicle->AutoPilot.m_nCarMission = MISSION_GOTO_COORDS_STRAIGHT_ACCURATE; + else + pVehicle->AutoPilot.m_nCarMission = MISSION_GOTOCOORDS_ACCURATE; + pVehicle->SetStatus(STATUS_PHYSICS); + pVehicle->bEngineOn = true; + pVehicle->AutoPilot.m_nCruiseSpeed = Max(1, pVehicle->AutoPilot.m_nCruiseSpeed); + if (nOldMission != pVehicle->AutoPilot.m_nCarMission) + pVehicle->AutoPilot.m_nAntiReverseTimer = CTimer::GetTimeInMilliseconds(); return 0; } - case COMMAND_GET_GAME_TIMER: - SET_INTEGER_PARAM(0, CTimer::GetTimeInMilliseconds()); - StoreParameters(&m_nIp, 1); - return 0; - case COMMAND_TURN_CHAR_TO_FACE_COORD: - { - CollectParameters(&m_nIp, 4); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - CVehicle* pVehicle; - CVector pos; - if (pPed->bInVehicle) - pVehicle = pPed->m_pMyVehicle; - else - pVehicle = nil; - if (pVehicle) - pos = pVehicle->GetPosition(); - else - pos = pPed->GetPosition(); - float heading = CGeneral::GetATanOfXY(pos.x - GET_FLOAT_PARAM(1), pos.y - GET_FLOAT_PARAM(2)); - heading += HALFPI; - if (heading > TWOPI) - heading -= TWOPI; - if (!pVehicle) { - pPed->m_fRotationCur = heading; - pPed->m_fRotationDest = heading; - pPed->SetHeading(heading); - } - return 0; - } - case COMMAND_TURN_PLAYER_TO_FACE_COORD: - { - CollectParameters(&m_nIp, 4); - CPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(pPed); - CVehicle* pVehicle; - CVector pos; - if (pPed->bInVehicle) - pVehicle = pPed->m_pMyVehicle; - else - pVehicle = nil; - if (pVehicle) - pos = pVehicle->GetPosition(); - else - pos = pPed->GetPosition(); - float heading = CGeneral::GetATanOfXY(pos.x - GET_FLOAT_PARAM(1), pos.y - GET_FLOAT_PARAM(2)); - heading += HALFPI; - if (heading > TWOPI) - heading -= TWOPI; - if (!pVehicle) { - pPed->m_fRotationCur = heading; - pPed->m_fRotationDest = heading; - pPed->SetHeading(heading); - } - return 0; - } - case COMMAND_STORE_WANTED_LEVEL: - { - CollectParameters(&m_nIp, 1); - CPlayerPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(pPed); - SET_INTEGER_PARAM(0, pPed->m_pWanted->GetWantedLevel()); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_IS_CAR_STOPPED: + case COMMAND_IS_CAR_ON_SCREEN: { CollectParameters(&m_nIp, 1); CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); script_assert(pVehicle); - UpdateCompareFlag(CTheScripts::IsVehicleStopped(pVehicle)); + UpdateCompareFlag(TheCamera.IsSphereVisible(pVehicle->GetBoundCentre(), pVehicle->GetBoundRadius())); return 0; } - case COMMAND_MARK_CHAR_AS_NO_LONGER_NEEDED: - { - CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - CTheScripts::CleanUpThisPed(pPed); - if (m_bIsMissionScript) - CTheScripts::MissionCleanUp.RemoveEntityFromList(GET_INTEGER_PARAM(0), CLEANUP_CHAR); - return 0; - } - case COMMAND_MARK_CAR_AS_NO_LONGER_NEEDED: - { - CollectParameters(&m_nIp, 1); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - CTheScripts::CleanUpThisVehicle(pVehicle); - if (m_bIsMissionScript) - CTheScripts::MissionCleanUp.RemoveEntityFromList(GET_INTEGER_PARAM(0), CLEANUP_CAR); - return 0; - } - case COMMAND_MARK_OBJECT_AS_NO_LONGER_NEEDED: - { - CollectParameters(&m_nIp, 1); - CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); - CTheScripts::CleanUpThisObject(pObject); - if (m_bIsMissionScript) - CTheScripts::MissionCleanUp.RemoveEntityFromList(GET_INTEGER_PARAM(0), CLEANUP_OBJECT); - return 0; - } - case COMMAND_DONT_REMOVE_CHAR: + case COMMAND_IS_CHAR_ON_SCREEN: { CollectParameters(&m_nIp, 1); CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); script_assert(pPed); - CTheScripts::MissionCleanUp.RemoveEntityFromList(GET_INTEGER_PARAM(0), CLEANUP_CHAR); + UpdateCompareFlag(TheCamera.IsSphereVisible(pPed->GetBoundCentre(), pPed->GetBoundRadius())); return 0; } - case COMMAND_DONT_REMOVE_CAR: - { - CollectParameters(&m_nIp, 1); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - CTheScripts::MissionCleanUp.RemoveEntityFromList(GET_INTEGER_PARAM(0), CLEANUP_CAR); - return 0; - } - case COMMAND_DONT_REMOVE_OBJECT: + case COMMAND_IS_OBJECT_ON_SCREEN: { CollectParameters(&m_nIp, 1); CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); script_assert(pObject); - CTheScripts::MissionCleanUp.RemoveEntityFromList(GET_INTEGER_PARAM(0), CLEANUP_OBJECT); + UpdateCompareFlag(TheCamera.IsSphereVisible(pObject->GetBoundCentre(), pObject->GetBoundRadius())); return 0; } - case COMMAND_CREATE_CHAR_AS_PASSENGER: + case COMMAND_GOSUB_FILE: + { + CollectParameters(&m_nIp, 2); + script_assert(m_nStackPointer < MAX_STACK_DEPTH); + m_anStack[m_nStackPointer++] = m_nIp; + SetIP(GET_INTEGER_PARAM(0)); + // GET_INTEGER_PARAM(1) == filename + return 0; + } + case COMMAND_GET_GROUND_Z_FOR_3D_COORD: + { + CollectParameters(&m_nIp, 3); + CVector pos = GET_VECTOR_PARAM(0); + bool success; + SET_FLOAT_PARAM(0, CWorld::FindGroundZFor3DCoord(pos.x, pos.y, pos.z, &success)); + StoreParameters(&m_nIp, 1); + return 0; + } + case COMMAND_START_SCRIPT_FIRE: + { + CollectParameters(&m_nIp, 3); + CVector pos = GET_VECTOR_PARAM(0); + if (pos.z <= MAP_Z_LOW_LIMIT) + pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); + SET_INTEGER_PARAM(0, gFireManager.StartScriptFire(pos, nil, 0.8f, 1)); + StoreParameters(&m_nIp, 1); + return 0; + } + case COMMAND_IS_SCRIPT_FIRE_EXTINGUISHED: + CollectParameters(&m_nIp, 1); + UpdateCompareFlag(gFireManager.IsScriptFireExtinguish(GET_INTEGER_PARAM(0))); + return 0; + case COMMAND_REMOVE_SCRIPT_FIRE: + CollectParameters(&m_nIp, 1); + gFireManager.RemoveScriptFire(GET_INTEGER_PARAM(0)); + return 0; + case COMMAND_BOAT_GOTO_COORDS: { CollectParameters(&m_nIp, 4); CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); script_assert(pVehicle); - switch (GET_INTEGER_PARAM(2)) { - case MI_COP: - if (GET_INTEGER_PARAM(1) == PEDTYPE_COP) - SET_INTEGER_PARAM(2, COP_STREET); - break; - case MI_SWAT: - if (GET_INTEGER_PARAM(1) == PEDTYPE_COP) - SET_INTEGER_PARAM(2, COP_SWAT); - break; - case MI_FBI: - if (GET_INTEGER_PARAM(1) == PEDTYPE_COP) - SET_INTEGER_PARAM(2, COP_FBI); - break; - case MI_ARMY: - if (GET_INTEGER_PARAM(1) == PEDTYPE_COP) - SET_INTEGER_PARAM(2, COP_ARMY); - break; - case MI_MEDIC: - if (GET_INTEGER_PARAM(1) == PEDTYPE_EMERGENCY) - SET_INTEGER_PARAM(2, PEDTYPE_EMERGENCY); - break; - case MI_FIREMAN: - if (GET_INTEGER_PARAM(1) == PEDTYPE_FIREMAN) - SET_INTEGER_PARAM(2, PEDTYPE_FIREMAN); - break; - default: - break; + script_assert(pVehicle->m_vehType == VEHICLE_TYPE_BOAT); + CBoat* pBoat = (CBoat*)pVehicle; + CVector pos = GET_VECTOR_PARAM(1); + if (pos.z <= MAP_Z_LOW_LIMIT) + CWaterLevel::GetWaterLevel(pos.x, pos.y, pos.z, &pos.z, false); + pBoat->AutoPilot.m_nCarMission = MISSION_GOTOCOORDS_ASTHECROWSWIMS; + pBoat->AutoPilot.m_vecDestinationCoors = pos; + pBoat->SetStatus(STATUS_PHYSICS); + pBoat->bEngineOn = true; + pBoat->AutoPilot.m_nCruiseSpeed = Max(1, pBoat->AutoPilot.m_nCruiseSpeed); + pBoat->AutoPilot.m_nAntiReverseTimer = CTimer::GetTimeInMilliseconds(); + return 0; + } + case COMMAND_BOAT_STOP: + { + CollectParameters(&m_nIp, 1); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + script_assert(pVehicle->m_vehType == VEHICLE_TYPE_BOAT); + CBoat* pBoat = (CBoat*)pVehicle; + pBoat->AutoPilot.m_nCarMission = MISSION_NONE; + pBoat->SetStatus(STATUS_PHYSICS); + pBoat->bEngineOn = false; + pBoat->AutoPilot.m_nCruiseSpeed = 0; + return 0; + } + case COMMAND_IS_PLAYER_SHOOTING_IN_AREA: + { + CollectParameters(&m_nIp, 6); + CPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; + script_assert(pPed); + float x1 = GET_FLOAT_PARAM(1); + float y1 = GET_FLOAT_PARAM(2); + float x2 = GET_FLOAT_PARAM(3); + float y2 = GET_FLOAT_PARAM(4); + UpdateCompareFlag(pPed->bIsShooting && pPed->IsWithinArea(x1, y1, x2, y2)); + if (GET_INTEGER_PARAM(5)) + CTheScripts::HighlightImportantArea((uintptr)this + m_nIp, x1, y1, x2, y2, MAP_Z_LOW_LIMIT); + /* + if (CTheScripts::DbgFlag) + CTheScripts::DrawDebugSquare(x1, y1, x2, y2); + */ + return 0; + } + case COMMAND_IS_CURRENT_CHAR_WEAPON: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + UpdateCompareFlag(GET_INTEGER_PARAM(1) == pPed->GetWeapon()->m_eWeaponType); + return 0; + } + case COMMAND_SET_BOAT_CRUISE_SPEED: + { + CollectParameters(&m_nIp, 2); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + script_assert(pVehicle->m_vehType == VEHICLE_TYPE_BOAT); + CBoat* pBoat = (CBoat*)pVehicle; + pBoat->AutoPilot.m_nCruiseSpeed = GET_FLOAT_PARAM(1); + return 0; + } + case COMMAND_GET_RANDOM_CHAR_IN_AREA: + { + CollectParameters(&m_nIp, 7); + int ped_handle = -1; + CVector pos = FindPlayerCoors(); + float x1 = GET_FLOAT_PARAM(0); + float y1 = GET_FLOAT_PARAM(1); + float x2 = GET_FLOAT_PARAM(2); + float y2 = GET_FLOAT_PARAM(3); + int i = CPools::GetPedPool()->GetSize(); + while (--i && ped_handle == -1){ + CPed* pPed = CPools::GetPedPool()->GetSlot(i); + if (!pPed) + continue; + if (CTheScripts::LastRandomPedId == CPools::GetPedPool()->GetIndex(pPed)) + continue; + if (pPed->CharCreatedBy != RANDOM_CHAR) + continue; + if (!pPed->IsPedInControl()) + continue; + if (pPed->bRemoveFromWorld) + continue; + if (pPed->bFadeOut) + continue; + if (pPed->m_nWaitState != WAITSTATE_FALSE) + continue; + if (!ThisIsAValidRandomPed(pPed->m_nPedType, GET_INTEGER_PARAM(5), GET_INTEGER_PARAM(6), GET_INTEGER_PARAM(7))) + continue; + if (pPed->bIsLeader || pPed->m_leader) + continue; + if (!pPed->IsWithinArea(x1, y1, x2, y2)) + continue; + if (pos.z - PED_FIND_Z_OFFSET > pPed->GetPosition().z) + continue; + if (pos.z + PED_FIND_Z_OFFSET < pPed->GetPosition().z) + continue; + ped_handle = CPools::GetPedPool()->GetIndex(pPed); + CTheScripts::LastRandomPedId = ped_handle; + pPed->CharCreatedBy = MISSION_CHAR; + pPed->bRespondsToThreats = false; + ++CPopulation::ms_nTotalMissionPeds; + if (m_bIsMissionScript) + CTheScripts::MissionCleanUp.AddEntityToList(ped_handle, CLEANUP_CHAR); } - CPed* pPed; - if (GET_INTEGER_PARAM(1) == PEDTYPE_COP) - pPed = new CCopPed((eCopType)GET_INTEGER_PARAM(2)); - else if (GET_INTEGER_PARAM(1) == PEDTYPE_EMERGENCY || GET_INTEGER_PARAM(1) == PEDTYPE_FIREMAN) - pPed = new CEmergencyPed(GET_INTEGER_PARAM(2)); - else - pPed = new CCivilianPed((ePedType)GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2)); - pPed->CharCreatedBy = MISSION_CHAR; - pPed->bRespondsToThreats = false; - pPed->bAllowMedicsToReviveMe = false; - pPed->bIsPlayerFriend = false; - if (pVehicle->bIsBus) - pPed->bRenderPedInCar = false; - pPed->SetPosition(pVehicle->GetPosition()); - pPed->SetOrientation(0.0f, 0.0f, 0.0f); - CPopulation::ms_nTotalMissionPeds++; - CWorld::Add(pPed); - if (GET_INTEGER_PARAM(3) >= 0) - pVehicle->AddPassenger(pPed, GET_INTEGER_PARAM(3)); - else - pVehicle->AddPassenger(pPed); - pPed->m_pMyVehicle = pVehicle; - pPed->m_pMyVehicle->RegisterReference((CEntity**)&pPed->m_pMyVehicle); - pPed->bInVehicle = true; - pPed->SetPedState(PED_DRIVING); - pPed->bUsesCollision = false; - pPed->AddInCarAnims(pVehicle, false); - pPed->m_nZoneLevel = CTheZones::GetLevelFromPosition(&pPed->GetPosition()); - SET_INTEGER_PARAM(0, CPools::GetPedPool()->GetIndex(pPed)); + SET_INTEGER_PARAM(0, ped_handle); StoreParameters(&m_nIp, 1); - if (m_bIsMissionScript) - CTheScripts::MissionCleanUp.AddEntityToList(GET_INTEGER_PARAM(0), CLEANUP_CHAR); return 0; } - case COMMAND_SET_CHAR_OBJ_KILL_CHAR_ON_FOOT: + case COMMAND_IS_PLAYER_IN_TAXI: { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + CollectParameters(&m_nIp, 1); + CPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; script_assert(pPed); - CPed* pTarget = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(1)); - pPed->bScriptObjectiveCompleted = false; - pPed->SetObjective(OBJECTIVE_KILL_CHAR_ON_FOOT, pTarget); + UpdateCompareFlag(pPed->bInVehicle && pPed->m_pMyVehicle->IsTaxi()); return 0; } - case COMMAND_SET_CHAR_OBJ_KILL_PLAYER_ON_FOOT: + case COMMAND_IS_PLAYER_SHOOTING: { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + CollectParameters(&m_nIp, 1); + CPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; script_assert(pPed); - CPed* pTarget = CWorld::Players[GET_INTEGER_PARAM(1)].m_pPed; - pPed->bScriptObjectiveCompleted = false; - pPed->SetObjective(OBJECTIVE_KILL_CHAR_ON_FOOT, pTarget); + UpdateCompareFlag(pPed->bIsShooting); return 0; } - case COMMAND_SET_CHAR_OBJ_KILL_CHAR_ANY_MEANS: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - CPed* pTarget = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(1)); - pPed->bScriptObjectiveCompleted = false; - pPed->SetObjective(OBJECTIVE_KILL_CHAR_ANY_MEANS, pTarget); - return 0; - } - case COMMAND_SET_CHAR_OBJ_KILL_PLAYER_ANY_MEANS: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - CPed* pTarget = CWorld::Players[GET_INTEGER_PARAM(1)].m_pPed; - pPed->bScriptObjectiveCompleted = false; - pPed->SetObjective(OBJECTIVE_KILL_CHAR_ANY_MEANS, pTarget); - return 0; - } - /* - case COMMAND_SET_CHAR_OBJ_FLEE_CHAR_ON_FOOT_TILL_SAFE: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - CPed* pTarget = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(1)); - pPed->bScriptObjectiveCompleted = false; - pPed->SetObjective(OBJECTIVE_FLEE_CHAR_ON_FOOT_TILL_SAFE, pTarget); - return 0; - } - */ - case COMMAND_SET_CHAR_OBJ_FLEE_PLAYER_ON_FOOT_TILL_SAFE: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - CPed* pTarget = CWorld::Players[GET_INTEGER_PARAM(1)].m_pPed; - pPed->bScriptObjectiveCompleted = false; - pPed->SetObjective(OBJECTIVE_FLEE_CHAR_ON_FOOT_TILL_SAFE, pTarget); - return 0; - } - case COMMAND_SET_CHAR_OBJ_FLEE_CHAR_ON_FOOT_ALWAYS: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - CPed* pTarget = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(1)); - pPed->bScriptObjectiveCompleted = false; - pPed->SetObjective(OBJECTIVE_FLEE_CHAR_ON_FOOT_ALWAYS, pTarget); - return 0; - } - case COMMAND_SET_CHAR_OBJ_FLEE_PLAYER_ON_FOOT_ALWAYS: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - CPed* pTarget = CWorld::Players[GET_INTEGER_PARAM(1)].m_pPed; - pPed->bScriptObjectiveCompleted = false; - pPed->SetObjective(OBJECTIVE_FLEE_CHAR_ON_FOOT_ALWAYS, pTarget); - return 0; - } - case COMMAND_SET_CHAR_OBJ_GOTO_CHAR_ON_FOOT: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - CPed* pTarget = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(1)); - pPed->bScriptObjectiveCompleted = false; - pPed->SetObjective(OBJECTIVE_GOTO_CHAR_ON_FOOT, pTarget); - return 0; - } - case COMMAND_SET_CHAR_OBJ_GOTO_PLAYER_ON_FOOT: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - CPed* pTarget = CWorld::Players[GET_INTEGER_PARAM(1)].m_pPed; - pPed->bScriptObjectiveCompleted = false; - pPed->SetObjective(OBJECTIVE_GOTO_CHAR_ON_FOOT, pTarget); - return 0; - } - case COMMAND_SET_CHAR_OBJ_LEAVE_CAR: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); - pPed->bScriptObjectiveCompleted = false; - pPed->SetObjective(OBJECTIVE_LEAVE_CAR, pVehicle); - return 0; - } - case COMMAND_SET_CHAR_OBJ_ENTER_CAR_AS_PASSENGER: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); - pPed->bScriptObjectiveCompleted = false; - pPed->SetObjective(OBJECTIVE_ENTER_CAR_AS_PASSENGER, pVehicle); - return 0; - } - case COMMAND_SET_CHAR_OBJ_ENTER_CAR_AS_DRIVER: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); - pPed->bScriptObjectiveCompleted = false; - pPed->SetObjective(OBJECTIVE_ENTER_CAR_AS_DRIVER, pVehicle); - return 0; - } - //case COMMAND_SET_CHAR_OBJ_FOLLOW_CAR_IN_CAR: - //case COMMAND_SET_CHAR_OBJ_FIRE_AT_OBJECT_FROM_VEHICLE: - case COMMAND_SET_CHAR_OBJ_DESTROY_OBJECT: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(1)); - pPed->bScriptObjectiveCompleted = false; - pPed->SetObjective(OBJECTIVE_DESTROY_OBJECT, pObject); - return 0; - } - case COMMAND_SET_CHAR_OBJ_DESTROY_CAR: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); - pPed->bScriptObjectiveCompleted = false; - pPed->SetObjective(OBJECTIVE_DESTROY_CAR, pVehicle); - return 0; - } - case COMMAND_SET_CHAR_OBJ_GOTO_AREA_ON_FOOT: - { - CollectParameters(&m_nIp, 5); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - float infX = GET_FLOAT_PARAM(1); - float infY = GET_FLOAT_PARAM(2); - float supX = GET_FLOAT_PARAM(3); - float supY = GET_FLOAT_PARAM(4); - if (infX > supX) { - infX = GET_FLOAT_PARAM(3); - supX = GET_FLOAT_PARAM(1); - } - if (infY > supY) { - infY = GET_FLOAT_PARAM(4); - supY = GET_FLOAT_PARAM(2); - } - CVector pos; - pos.x = (infX + supX) / 2; - pos.y = (infY + supY) / 2; - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - float radius = Max(pos.x - infX, pos.y - infY); - pPed->bScriptObjectiveCompleted = false; - pPed->SetObjective(OBJECTIVE_GOTO_AREA_ON_FOOT, pos, radius); - return 0; - } - //case COMMAND_SET_CHAR_OBJ_GOTO_AREA_IN_CAR: - //case COMMAND_SET_CHAR_OBJ_FOLLOW_CAR_ON_FOOT_WITH_OFFSET: - //case COMMAND_SET_CHAR_OBJ_GUARD_ATTACK: - case COMMAND_SET_CHAR_AS_LEADER: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - CPed* pTarget = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(1)); - pPed->SetObjective(OBJECTIVE_SET_LEADER, pTarget); - return 0; - } - case COMMAND_SET_PLAYER_AS_LEADER: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - CPed* pTarget = CWorld::Players[GET_INTEGER_PARAM(1)].m_pPed; - pPed->SetObjective(OBJECTIVE_SET_LEADER, pTarget); - return 0; - } - case COMMAND_LEAVE_GROUP: + case COMMAND_IS_CHAR_SHOOTING: { CollectParameters(&m_nIp, 1); CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); script_assert(pPed); - pPed->ClearLeader(); + UpdateCompareFlag(pPed->bIsShooting); return 0; } - case COMMAND_SET_CHAR_OBJ_FOLLOW_ROUTE: - { - CollectParameters(&m_nIp, 3); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - pPed->bScriptObjectiveCompleted = false; - pPed->SetObjective(OBJECTIVE_FOLLOW_ROUTE, GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2)); - return 0; - } - case COMMAND_ADD_ROUTE_POINT: + case COMMAND_CREATE_MONEY_PICKUP: { CollectParameters(&m_nIp, 4); - CRouteNode::AddRoutePoint(GET_INTEGER_PARAM(0), GET_VECTOR_PARAM(1)); - return 0; - } - case COMMAND_PRINT_WITH_NUMBER_BIG: - { - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CollectParameters(&m_nIp, 3); - CMessages::AddBigMessageWithNumber(text, GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2) - 1, GET_INTEGER_PARAM(0), -1, -1, -1, -1, -1); - return 0; - } - case COMMAND_PRINT_WITH_NUMBER: - { - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CollectParameters(&m_nIp, 3); - CMessages::AddMessageWithNumber(text, GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), GET_INTEGER_PARAM(0), -1, -1, -1, -1, -1); - return 0; - } - case COMMAND_PRINT_WITH_NUMBER_NOW: - { - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CollectParameters(&m_nIp, 3); - CMessages::AddMessageJumpQWithNumber(text, GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), GET_INTEGER_PARAM(0), -1, -1, -1, -1, -1); // 1 - return 0; - } - case COMMAND_PRINT_WITH_NUMBER_SOON: - { - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CollectParameters(&m_nIp, 3); - CMessages::AddMessageSoonWithNumber(text, GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), GET_INTEGER_PARAM(0), -1, -1, -1, -1, -1); - return 0; - } - case COMMAND_SWITCH_ROADS_ON: - { - CollectParameters(&m_nIp, 6); - float infX = GET_FLOAT_PARAM(0); - float infY = GET_FLOAT_PARAM(1); - float infZ = GET_FLOAT_PARAM(2); - float supX = GET_FLOAT_PARAM(3); - float supY = GET_FLOAT_PARAM(4); - float supZ = GET_FLOAT_PARAM(5); - if (infX > supX) { - infX = GET_FLOAT_PARAM(3); - supX = GET_FLOAT_PARAM(0); - } - if (infY > supY) { - infY = GET_FLOAT_PARAM(4); - supY = GET_FLOAT_PARAM(1); - } - if (infZ > supZ) { - infZ = GET_FLOAT_PARAM(5); - supZ = GET_FLOAT_PARAM(2); - } - ThePaths.SwitchRoadsOffInArea(infX, supX, infY, supY, infZ, supZ, false); - return 0; - } - case COMMAND_SWITCH_ROADS_OFF: - { - CollectParameters(&m_nIp, 6); - float infX = GET_FLOAT_PARAM(0); - float infY = GET_FLOAT_PARAM(1); - float infZ = GET_FLOAT_PARAM(2); - float supX = GET_FLOAT_PARAM(3); - float supY = GET_FLOAT_PARAM(4); - float supZ = GET_FLOAT_PARAM(5); - if (infX > supX) { - infX = GET_FLOAT_PARAM(3); - supX = GET_FLOAT_PARAM(0); - } - if (infY > supY) { - infY = GET_FLOAT_PARAM(4); - supY = GET_FLOAT_PARAM(1); - } - if (infZ > supZ) { - infZ = GET_FLOAT_PARAM(5); - supZ = GET_FLOAT_PARAM(2); - } - ThePaths.SwitchRoadsOffInArea(infX, supX, infY, supY, infZ, supZ, true); - return 0; - } - case COMMAND_GET_NUMBER_OF_PASSENGERS: - { - CollectParameters(&m_nIp, 1); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - SET_INTEGER_PARAM(0, pVehicle->m_nNumPassengers); + CVector pos = GET_VECTOR_PARAM(0); + if (pos.z <= MAP_Z_LOW_LIMIT) + pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y) + PICKUP_PLACEMENT_OFFSET; + CPickups::GetActualPickupIndex(CollectNextParameterWithoutIncreasingPC(m_nIp)); + SET_INTEGER_PARAM(0, CPickups::GenerateNewOne(pos, MI_MONEY, PICKUP_MONEY, GET_INTEGER_PARAM(3))); StoreParameters(&m_nIp, 1); return 0; } - case COMMAND_GET_MAXIMUM_NUMBER_OF_PASSENGERS: - { - CollectParameters(&m_nIp, 1); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - SET_INTEGER_PARAM(0, pVehicle->m_nNumMaxPassengers); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_SET_CAR_DENSITY_MULTIPLIER: - { - CollectParameters(&m_nIp, 1); - CCarCtrl::CarDensityMultiplier = GET_FLOAT_PARAM(0); - return 0; - } - case COMMAND_SET_CAR_HEAVY: + case COMMAND_SET_CHAR_ACCURACY: { CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - if (GET_INTEGER_PARAM(1) != 0) { - pVehicle->bIsHeavy = true; - pVehicle->m_fMass = 3.0f * pVehicle->pHandling->fMass; // TODO: tHandlingData::GetMass() - pVehicle->m_fTurnMass = 5.0f * pVehicle->pHandling->fTurnMass; // TODO: tHandlingData::GetTurnMass() - } - else { - pVehicle->bIsHeavy = false; - pVehicle->m_fMass = pVehicle->pHandling->fMass; // TODO: tHandlingData::GetMass() - pVehicle->m_fTurnMass = pVehicle->pHandling->fTurnMass; // TODO: tHandlingData::GetTurnMass() - } - return 0; - } - case COMMAND_CLEAR_CHAR_THREAT_SEARCH: - { - CollectParameters(&m_nIp, 1); CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); script_assert(pPed); - pPed->m_fearFlags = 0; + pPed->m_wepAccuracy = Min(100, GET_INTEGER_PARAM(1) * 1.25f); return 0; } - case COMMAND_ACTIVATE_CRANE: + case COMMAND_GET_CAR_SPEED: + { + CollectParameters(&m_nIp, 1); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + SET_FLOAT_PARAM(0, pVehicle->GetSpeed().Magnitude() * GAME_SPEED_TO_METERS_PER_SECOND); + StoreParameters(&m_nIp, 1); + return 0; + } + case COMMAND_LOAD_CUTSCENE: + { + char name[KEY_LENGTH_IN_SCRIPT]; + strncpy(name, (const char*)&CTheScripts::ScriptSpace[m_nIp], KEY_LENGTH_IN_SCRIPT); + // unknown call FUN_29df68(name) on PS2 - not on PSP + m_nIp += KEY_LENGTH_IN_SCRIPT; + CColStore::RemoveAllCollision(); + CCutsceneMgr::LoadCutsceneData(name); + return 0; + } + case COMMAND_START_CUTSCENE: + CCutsceneMgr::StartCutscene(); + return 0; + case COMMAND_HAS_CUTSCENE_FINISHED: + { + bool bFinished = CCutsceneMgr::HasCutsceneFinished(); + if (bFinished) + printf("cutscene has now finished\n"); + UpdateCompareFlag(bFinished); + return 0; + } + case COMMAND_CLEAR_CUTSCENE: + // unknown call on PS2 FUN_29DFA0() - not on PSP + printf("clear cutscene\n"); + CCutsceneMgr::DeleteCutsceneData(); + return 0; + case COMMAND_RESTORE_CAMERA_JUMPCUT: + TheCamera.RestoreWithJumpCut(); + return 0; + case COMMAND_IS_CHAR_MODEL: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + UpdateCompareFlag(GET_INTEGER_PARAM(1) == pPed->GetModelIndex()); + return 0; + } + case COMMAND_LOAD_SPECIAL_MODEL: + { + CollectParameters(&m_nIp, 1); + char name[KEY_LENGTH_IN_SCRIPT]; + strncpy(name, (const char*)&CTheScripts::ScriptSpace[m_nIp], KEY_LENGTH_IN_SCRIPT); + for (int i = 0; i < KEY_LENGTH_IN_SCRIPT; i++) + name[i] = tolower(name[i]); + CStreaming::RequestSpecialModel(GET_INTEGER_PARAM(0), name, STREAMFLAGS_DEPENDENCY | (m_bIsMissionScript ? STREAMFLAGS_SCRIPTOWNED : STREAMFLAGS_AMBIENT_SCRIPT_OWNED)); + m_nIp += KEY_LENGTH_IN_SCRIPT; + return 0; + } + case COMMAND_SIN: + CollectParameters(&m_nIp, 1); + SET_FLOAT_PARAM(0, Sin(DEGTORAD(GET_FLOAT_PARAM(0)))); + StoreParameters(&m_nIp, 1); + return 0; + case COMMAND_COS: + CollectParameters(&m_nIp, 1); + SET_FLOAT_PARAM(0, Cos(DEGTORAD(GET_FLOAT_PARAM(0)))); + StoreParameters(&m_nIp, 1); + return 0; + case COMMAND_GET_CAR_FORWARD_X: + { + CollectParameters(&m_nIp, 1); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + float forwardX = pVehicle->GetForward().x / pVehicle->GetForward().Magnitude2D(); + SET_FLOAT_PARAM(0, forwardX); + StoreParameters(&m_nIp, 1); + return 0; + } + case COMMAND_GET_CAR_FORWARD_Y: + { + CollectParameters(&m_nIp, 1); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + float forwardY = pVehicle->GetForward().y / pVehicle->GetForward().Magnitude2D(); + SET_FLOAT_PARAM(0, forwardY); + StoreParameters(&m_nIp, 1); + return 0; + } + case COMMAND_CHANGE_GARAGE_TYPE: + CollectParameters(&m_nIp, 2); + CGarages::ChangeGarageType(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), 0); + return 0; + case COMMAND_ACTIVATE_CRUSHER_CRANE: { CollectParameters(&m_nIp, 10); float infX = GET_FLOAT_PARAM(2); @@ -1576,32 +1392,203 @@ int8 CRunningScript::ProcessCommands400To499(int32 command) } CCranes::ActivateCrane(infX, supX, infY, supY, GET_FLOAT_PARAM(6), GET_FLOAT_PARAM(7), GET_FLOAT_PARAM(8), - DEGTORAD(GET_FLOAT_PARAM(9)), false, false, + DEGTORAD(GET_FLOAT_PARAM(9)), true, false, GET_FLOAT_PARAM(0), GET_FLOAT_PARAM(1)); return 0; } - case COMMAND_DEACTIVATE_CRANE: + case COMMAND_PRINT_WITH_2_NUMBERS: + { + wchar* text = GetTextByKeyFromScript(&m_nIp); + CollectParameters(&m_nIp, 4); + CMessages::AddMessageWithNumber(text, GET_INTEGER_PARAM(2), GET_INTEGER_PARAM(3), GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), -1, -1, -1, -1); + return 0; + } + case COMMAND_PRINT_WITH_2_NUMBERS_NOW: + { + wchar* text = GetTextByKeyFromScript(&m_nIp); + CollectParameters(&m_nIp, 4); + CMessages::AddMessageJumpQWithNumber(text, GET_INTEGER_PARAM(2), GET_INTEGER_PARAM(3), GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), -1, -1, -1, -1); + return 0; + } + case COMMAND_PRINT_WITH_2_NUMBERS_SOON: + { + wchar* text = GetTextByKeyFromScript(&m_nIp); + CollectParameters(&m_nIp, 4); + CMessages::AddMessageSoonWithNumber(text, GET_INTEGER_PARAM(2), GET_INTEGER_PARAM(3), GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), -1, -1, -1, -1); + return 0; + } + case COMMAND_PRINT_WITH_3_NUMBERS: + { + wchar* text = GetTextByKeyFromScript(&m_nIp); + CollectParameters(&m_nIp, 5); + CMessages::AddMessageWithNumber(text, GET_INTEGER_PARAM(3), GET_INTEGER_PARAM(4), GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), -1, -1, -1); + return 0; + } + case COMMAND_PRINT_WITH_3_NUMBERS_NOW: + { + wchar* text = GetTextByKeyFromScript(&m_nIp); + CollectParameters(&m_nIp, 5); + CMessages::AddMessageJumpQWithNumber(text, GET_INTEGER_PARAM(3), GET_INTEGER_PARAM(4), GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), -1, -1, -1); + return 0; + } + case COMMAND_PRINT_WITH_4_NUMBERS: + { + wchar* text = GetTextByKeyFromScript(&m_nIp); + CollectParameters(&m_nIp, 6); + CMessages::AddMessageWithNumber(text, GET_INTEGER_PARAM(4), GET_INTEGER_PARAM(5), GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), GET_INTEGER_PARAM(3), -1, -1); + return 0; + } + case COMMAND_PRINT_WITH_6_NUMBERS: + { + wchar* text = GetTextByKeyFromScript(&m_nIp); + CollectParameters(&m_nIp, 8); + CMessages::AddMessageWithNumber(text, GET_INTEGER_PARAM(6), GET_INTEGER_PARAM(7), GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), GET_INTEGER_PARAM(3), GET_INTEGER_PARAM(4), GET_INTEGER_PARAM(5)); + return 0; + } + case COMMAND_PLAYER_MADE_PROGRESS: + CollectParameters(&m_nIp, 1); + CStats::ProgressMade += GET_INTEGER_PARAM(0); + return 0; + case COMMAND_SET_PROGRESS_TOTAL: + CollectParameters(&m_nIp, 1); + CStats::TotalProgressInGame = GET_INTEGER_PARAM(0); + return 0; + case COMMAND_REGISTER_JUMP_DISTANCE: + CollectParameters(&m_nIp, 1); + CStats::MaximumJumpDistance = Max(CStats::MaximumJumpDistance, GET_FLOAT_PARAM(0)); + return 0; + case COMMAND_REGISTER_JUMP_HEIGHT: + CollectParameters(&m_nIp, 1); + CStats::MaximumJumpHeight = Max(CStats::MaximumJumpHeight, GET_FLOAT_PARAM(0)); + return 0; + case COMMAND_REGISTER_JUMP_FLIPS: + CollectParameters(&m_nIp, 1); + CStats::MaximumJumpFlips = Max(CStats::MaximumJumpFlips, GET_INTEGER_PARAM(0)); + return 0; + case COMMAND_REGISTER_JUMP_SPINS: + CollectParameters(&m_nIp, 1); + CStats::MaximumJumpSpins = Max(CStats::MaximumJumpSpins, GET_INTEGER_PARAM(0)); + return 0; + case COMMAND_REGISTER_JUMP_STUNT: + CollectParameters(&m_nIp, 1); + CStats::BestStuntJump = Max(CStats::BestStuntJump, GET_INTEGER_PARAM(0)); + return 0; + case COMMAND_REGISTER_UNIQUE_JUMP_FOUND: + ++CStats::NumberOfUniqueJumpsFound; + return 0; + case COMMAND_SET_UNIQUE_JUMPS_TOTAL: + CollectParameters(&m_nIp, 1); + CStats::TotalNumberOfUniqueJumps = GET_INTEGER_PARAM(0); + return 0; + case COMMAND_REGISTER_PASSENGER_DROPPED_OFF_TAXI: + ++CStats::PassengersDroppedOffWithTaxi; + return 0; + case COMMAND_REGISTER_MONEY_MADE_TAXI: + CollectParameters(&m_nIp, 1); + CStats::MoneyMadeWithTaxi += GET_INTEGER_PARAM(0); + return 0; + case COMMAND_REGISTER_MISSION_GIVEN: + ++CStats::MissionsGiven; + return 0; + case COMMAND_REGISTER_MISSION_PASSED: + { + char name[KEY_LENGTH_IN_SCRIPT]; + strncpy(name, (const char*)&CTheScripts::ScriptSpace[m_nIp], KEY_LENGTH_IN_SCRIPT); + m_nIp += KEY_LENGTH_IN_SCRIPT; + strncpy(CStats::LastMissionPassedName, name, KEY_LENGTH_IN_SCRIPT); + ++CStats::MissionsPassed; + CStats::CheckPointReachedSuccessfully(); + CTheScripts::LastMissionPassedTime = CTimer::GetTimeInMilliseconds(); + CGameLogic::RemoveShortCutDropOffPointForMission(); + return 0; + } + case COMMAND_SET_CHAR_RUNNING: { CollectParameters(&m_nIp, 2); - CCranes::DeActivateCrane(GET_FLOAT_PARAM(0), GET_FLOAT_PARAM(1)); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + pPed->bIsRunning = (GET_INTEGER_PARAM(1) != 0); return 0; } - case COMMAND_SET_MAX_WANTED_LEVEL: + case COMMAND_REMOVE_ALL_SCRIPT_FIRES: + gFireManager.RemoveAllScriptFires(); + return 0; + case COMMAND_HAS_CHAR_BEEN_DAMAGED_BY_WEAPON: { - CollectParameters(&m_nIp, 1); - CWanted::SetMaximumWantedLevel(GET_INTEGER_PARAM(0)); + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + bool result = false; + if (!pPed) + printf("HAS_CHAR_BEEN_DAMAGED_BY_WEAPON - Character doesn't exist\n"); + else { + if (GET_INTEGER_PARAM(1) == WEAPONTYPE_ANYMELEE || GET_INTEGER_PARAM(1) == WEAPONTYPE_ANYWEAPON) + result = CheckDamagedWeaponType(pPed->m_lastWepDam, GET_INTEGER_PARAM(1)); + else + result = GET_INTEGER_PARAM(1) == pPed->m_lastWepDam; + } + UpdateCompareFlag(result); return 0; } - //case COMMAND_SAVE_VAR_INT: - //case COMMAND_SAVE_VAR_FLOAT: - case COMMAND_IS_CAR_IN_AIR_PROPER: + case COMMAND_HAS_CAR_BEEN_DAMAGED_BY_WEAPON: { - CollectParameters(&m_nIp, 1); + CollectParameters(&m_nIp, 2); CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - UpdateCompareFlag(pVehicle->m_nCollisionRecords == 0); + bool result = false; + if (!pVehicle) + printf("HAS_CAR_BEEN_DAMAGED_BY_WEAPON - Vehicle doesn't exist\n"); + else { + if (GET_INTEGER_PARAM(1) == WEAPONTYPE_ANYMELEE || GET_INTEGER_PARAM(1) == WEAPONTYPE_ANYWEAPON) + result = CheckDamagedWeaponType(pVehicle->m_nLastWeaponDamage, GET_INTEGER_PARAM(1)); + else + result = GET_INTEGER_PARAM(1) == pVehicle->m_nLastWeaponDamage; + } + UpdateCompareFlag(result); return 0; } + case COMMAND_IS_CHAR_IN_PLAYERS_GROUP: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + CPed* pLeader = CWorld::Players[GET_INTEGER_PARAM(1)].m_pPed; + script_assert(pPed); + script_assert(pLeader); + UpdateCompareFlag(pPed->m_leader == pLeader && !pPed->bWaitForLeaderToComeCloser); + return 0; + } + case COMMAND_EXPLODE_CHAR_HEAD: + { + CollectParameters(&m_nIp, 1); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + pPed->InflictDamage(nil, WEAPONTYPE_SNIPERRIFLE, 1000.0f, PEDPIECE_HEAD, 0); + return 0; + } + case COMMAND_ANCHOR_BOAT: + { + CollectParameters(&m_nIp, 2); + CBoat* pBoat = (CBoat*)CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pBoat && pBoat->m_vehType == VEHICLE_TYPE_BOAT); + pBoat->m_bIsAnchored = (GET_INTEGER_PARAM(1) != 0); + return 0; + } + case COMMAND_SET_ZONE_GROUP: + { + char zone[KEY_LENGTH_IN_SCRIPT]; + CTheScripts::ReadTextLabelFromScript(&m_nIp, zone); + m_nIp += KEY_LENGTH_IN_SCRIPT; + CollectParameters(&m_nIp, 2); + int zone_id = CTheZones::FindZoneByLabelAndReturnIndex(zone, ZONE_INFO); + if (zone_id < 0) { + printf("Couldn't find zone - %s\n", zone); + return 0; + } + while (zone_id >= 0) { + CTheZones::SetPedGroup(zone_id, GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); + zone_id = CTheZones::FindNextZoneByLabelAndReturnIndex(zone, ZONE_INFO); + } + return 0; + } + default: script_assert(0); } diff --git a/src/control/Script3.cpp b/src/control/Script3.cpp index 9d66b4fe..d99a8996 100644 --- a/src/control/Script3.cpp +++ b/src/control/Script3.cpp @@ -36,873 +36,1394 @@ #include "GameLogic.h" #include "Bike.h" #include "Wanted.h" +//new +#include "AnimBlendAssociation.h" +#include "DMAudio.h" +#include "BulletInfo.h" +#include "SpecialFX.h" +#include "PedRoutes.h" +#include "CivilianPed.h" +#include "CarAI.h" +#include "Hud.h" +#include "Frontend.h" +#include "FileMgr.h" +#include "CustomSoundTrack.h" +#include "Credits.h" +#include "Particle.h" +#include "main.h" +#include "Ropes.h" +#include "Timecycle.h" +#include "SetPieces.h" +#include "KeyGen.h" +#include "Remote.h" +#include "Rubbish.h" // LCS: file done except TODOs +#ifdef FIX_BUGS +static bool +IsSlideObjectUsedWrongByScript(const CVector &posTarget, const CVector &slideBy) +{ + // TODO? + return false; +} +#endif + + int8 CRunningScript::ProcessCommands500To599(int32 command) { + char strbuff[52]; + char onscreen_str[KEY_LENGTH_IN_SCRIPT]; + CMatrix tmp_matrix; switch (command) { - case COMMAND_IS_CAR_UPSIDEDOWN: + case COMMAND_START_CAR_FIRE: { CollectParameters(&m_nIp, 1); CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); script_assert(pVehicle); - UpdateCompareFlag(pVehicle->GetUp().z <= UPSIDEDOWN_UP_THRESHOLD); + SET_INTEGER_PARAM(0, gFireManager.StartScriptFire(pVehicle->GetPosition(), pVehicle, 0.8f, 1)); + StoreParameters(&m_nIp, 1); return 0; } - case COMMAND_GET_PLAYER_CHAR: + case COMMAND_START_CHAR_FIRE: { CollectParameters(&m_nIp, 1); - CPlayerPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(pPed); - SET_INTEGER_PARAM(0, CPools::GetPedPool()->GetIndex(pPed)); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_CANCEL_OVERRIDE_RESTART: - CRestart::CancelOverrideRestart(); - return 0; - case COMMAND_SET_POLICE_IGNORE_PLAYER: - { - CollectParameters(&m_nIp, 2); - CPlayerPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(pPed); - if (GET_INTEGER_PARAM(1)) { - pPed->m_pWanted->m_bIgnoredByCops = true; - CWorld::StopAllLawEnforcersInTheirTracks(); - } - else { - pPed->m_pWanted->m_bIgnoredByCops = false; - } - return 0; - } - /* - case COMMAND_ADD_PAGER_MESSAGE_WITH_NUMBER: - { - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CollectParameters(&m_nIp, 4); - CUserDisplay::Pager.AddMessageWithNumber(text, GET_INTEGER_PARAM(0), -1, -1, -1, -1, -1, - GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), GET_INTEGER_PARAM(3)); - return 0; - } - */ - case COMMAND_START_KILL_FRENZY: - { - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CollectParameters(&m_nIp, 8); - CDarkel::StartFrenzy((eWeaponType)GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), - GET_INTEGER_PARAM(3), text, GET_INTEGER_PARAM(4), GET_INTEGER_PARAM(5), - GET_INTEGER_PARAM(6), GET_INTEGER_PARAM(7) != 0, false); - return 0; - } - case COMMAND_READ_KILL_FRENZY_STATUS: - { - SET_INTEGER_PARAM(0, CDarkel::ReadStatus()); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_SQRT: - { - CollectParameters(&m_nIp, 1); - SET_FLOAT_PARAM(0, Sqrt(GET_FLOAT_PARAM(0))); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_LOCATE_PLAYER_ANY_MEANS_CAR_2D: - case COMMAND_LOCATE_PLAYER_ON_FOOT_CAR_2D: - case COMMAND_LOCATE_PLAYER_IN_CAR_CAR_2D: - case COMMAND_LOCATE_PLAYER_ANY_MEANS_CAR_3D: - case COMMAND_LOCATE_PLAYER_ON_FOOT_CAR_3D: - case COMMAND_LOCATE_PLAYER_IN_CAR_CAR_3D: - LocatePlayerCarCommand(command, &m_nIp); - return 0; - case COMMAND_LOCATE_CHAR_ANY_MEANS_CAR_2D: - case COMMAND_LOCATE_CHAR_ON_FOOT_CAR_2D: - case COMMAND_LOCATE_CHAR_IN_CAR_CAR_2D: - case COMMAND_LOCATE_CHAR_ANY_MEANS_CAR_3D: - case COMMAND_LOCATE_CHAR_ON_FOOT_CAR_3D: - case COMMAND_LOCATE_CHAR_IN_CAR_CAR_3D: - LocateCharCarCommand(command, &m_nIp); - return 0; - case COMMAND_GENERATE_RANDOM_FLOAT_IN_RANGE: - CollectParameters(&m_nIp, 2); - SET_FLOAT_PARAM(0, CGeneral::GetRandomNumberInRange(GET_FLOAT_PARAM(0), GET_FLOAT_PARAM(1))); - StoreParameters(&m_nIp, 1); - return 0; - case COMMAND_GENERATE_RANDOM_INT_IN_RANGE: - CollectParameters(&m_nIp, 2); - SET_INTEGER_PARAM(0, CGeneral::GetRandomNumberInRange(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1))); - StoreParameters(&m_nIp, 1); - return 0; - case COMMAND_LOCK_CAR_DOORS: - { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - pVehicle->m_nDoorLock = (eCarLock)GET_INTEGER_PARAM(1); - return 0; - } - case COMMAND_EXPLODE_CAR: - { - CollectParameters(&m_nIp, 1); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - pVehicle->bCanBeDamaged = true; - pVehicle->BlowUpCar(nil); - return 0; - } - case COMMAND_ADD_EXPLOSION: - CollectParameters(&m_nIp, 4); - CExplosion::AddExplosion(nil, nil, (eExplosionType)GET_INTEGER_PARAM(3), GET_VECTOR_PARAM(0), 0, true); // last argument is 0 (default? - TODO) - return 0; - - case COMMAND_IS_CAR_UPRIGHT: - { - CollectParameters(&m_nIp, 1); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - UpdateCompareFlag(pVehicle->GetUp().z >= 0.0f); - return 0; - } - case COMMAND_TURN_CHAR_TO_FACE_CHAR: - { - CollectParameters(&m_nIp, 2); - CPed* pSourcePed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - CPed* pTargetPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(1)); - CVehicle* pVehicle = pSourcePed->bInVehicle ? pSourcePed->m_pMyVehicle : nil; - CVector2D sourcePos = pSourcePed->bInVehicle ? pVehicle->GetPosition() : pSourcePed->GetPosition(); - CVector2D targetPos = pTargetPed->bInVehicle ? pTargetPed->m_pMyVehicle->GetPosition() : pTargetPed->GetPosition(); - float angle = CGeneral::GetATanOfXY(sourcePos.x - targetPos.x, sourcePos.y - targetPos.y) + HALFPI; - if (angle > TWOPI) - angle -= TWOPI; - if (!pVehicle) { - pSourcePed->m_fRotationCur = angle; - pSourcePed->m_fRotationDest = angle; - pSourcePed->SetHeading(angle); - } - return 0; - } - case COMMAND_TURN_CHAR_TO_FACE_PLAYER: - { - CollectParameters(&m_nIp, 2); - CPed* pSourcePed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - CPed* pTargetPed = CWorld::Players[GET_INTEGER_PARAM(1)].m_pPed; - CVehicle* pVehicle = pSourcePed->bInVehicle ? pSourcePed->m_pMyVehicle : nil; - CVector2D sourcePos = pSourcePed->bInVehicle ? pVehicle->GetPosition() : pSourcePed->GetPosition(); - CVector2D targetPos = pTargetPed->bInVehicle ? pTargetPed->m_pMyVehicle->GetPosition() : pTargetPed->GetPosition(); - float angle = CGeneral::GetATanOfXY(sourcePos.x - targetPos.x, sourcePos.y - targetPos.y) + HALFPI; - if (angle > TWOPI) - angle -= TWOPI; - if (!pVehicle) { - pSourcePed->m_fRotationCur = angle; - pSourcePed->m_fRotationDest = angle; - pSourcePed->SetHeading(angle); - } - return 0; - } - case COMMAND_TURN_PLAYER_TO_FACE_CHAR: - { - CollectParameters(&m_nIp, 2); - CPed* pSourcePed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - CPed* pTargetPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(1)); - CVehicle* pVehicle = pSourcePed->bInVehicle ? pSourcePed->m_pMyVehicle : nil; - CVector2D sourcePos = pSourcePed->bInVehicle ? pVehicle->GetPosition() : pSourcePed->GetPosition(); - CVector2D targetPos = pTargetPed->bInVehicle ? pTargetPed->m_pMyVehicle->GetPosition() : pTargetPed->GetPosition(); - float angle = CGeneral::GetATanOfXY(sourcePos.x - targetPos.x, sourcePos.y - targetPos.y) + HALFPI; - if (angle > TWOPI) - angle -= TWOPI; - if (!pVehicle) { - pSourcePed->m_fRotationCur = angle; - pSourcePed->m_fRotationDest = angle; - pSourcePed->SetHeading(angle); - } - return 0; - } - case COMMAND_SET_CHAR_OBJ_GOTO_COORD_ON_FOOT: - { - CollectParameters(&m_nIp, 3); CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); script_assert(pPed); - CVector target; - target.x = GET_FLOAT_PARAM(1); - target.y = GET_FLOAT_PARAM(2); - target.z = CWorld::FindGroundZForCoord(target.x, target.y); - pPed->bScriptObjectiveCompleted = false; - pPed->SetObjective(OBJECTIVE_GOTO_AREA_ON_FOOT, target); + SET_INTEGER_PARAM(0, gFireManager.StartScriptFire(pPed->GetPosition(), pPed, 0.8f, 1)); + StoreParameters(&m_nIp, 1); return 0; } - //case COMMAND_SET_CHAR_OBJ_GOTO_COORD_IN_CAR: - case COMMAND_CREATE_PICKUP: + case COMMAND_GET_RANDOM_CAR_OF_TYPE_IN_AREA: { CollectParameters(&m_nIp, 5); + int handle = -1; + uint32 i = CPools::GetVehiclePool()->GetSize(); + float infX = GET_FLOAT_PARAM(0); + float infY = GET_FLOAT_PARAM(1); + float supX = GET_FLOAT_PARAM(2); + float supY = GET_FLOAT_PARAM(3); + while (i--) { + CVehicle* pVehicle = CPools::GetVehiclePool()->GetSlot(i); + if (!pVehicle) + continue; + if (pVehicle->GetVehicleAppearance() != VEHICLE_APPEARANCE_CAR && pVehicle->GetVehicleAppearance() != VEHICLE_APPEARANCE_BIKE) + continue; + if (!pVehicle->bUsesCollision) + continue; + if (GET_INTEGER_PARAM(4) != pVehicle->GetModelIndex() && GET_INTEGER_PARAM(4) >= 0) + continue; + if (pVehicle->VehicleCreatedBy != RANDOM_VEHICLE) + continue; + if (!pVehicle->IsWithinArea(infX, infY, supX, supY)) + continue; + handle = CPools::GetVehiclePool()->GetIndex(pVehicle); + pVehicle->VehicleCreatedBy = MISSION_VEHICLE; + ++CCarCtrl::NumMissionCars; + --CCarCtrl::NumRandomCars; + if (m_bIsMissionScript) + CTheScripts::MissionCleanUp.AddEntityToList(handle, CLEANUP_CAR); + } + SET_INTEGER_PARAM(0, handle); + StoreParameters(&m_nIp, 1); + return 0; + } + case COMMAND_HAS_RESPRAY_HAPPENED: + { + CollectParameters(&m_nIp, 1); + UpdateCompareFlag(CGarages::HasResprayHappened(GET_INTEGER_PARAM(0))); + return 0; + } + case COMMAND_SET_CAMERA_ZOOM: + { + CollectParameters(&m_nIp, 1); + if (TheCamera.Cams[TheCamera.ActiveCam].Mode == CCam::MODE_FOLLOWPED) + TheCamera.SetZoomValueFollowPedScript(GET_INTEGER_PARAM(0)); + else if (TheCamera.Cams[TheCamera.ActiveCam].Mode == CCam::MODE_CAM_ON_A_STRING) + TheCamera.SetZoomValueCamStringScript(GET_INTEGER_PARAM(0)); + return 0; + } + case COMMAND_CREATE_PICKUP_WITH_AMMO: + { + CollectParameters(&m_nIp, 6); + + //script_assert(false && "TMP REMOVED COMMAND_CREATE_PICKUP_WITH_AMMO BY MI"); + //return 0; + int16 model = GET_INTEGER_PARAM(0); if (model < 0) model = CTheScripts::UsedObjectArray[-model].index; - CVector pos = GET_VECTOR_PARAM(2); + CVector pos = GET_VECTOR_PARAM(3); if (pos.z <= MAP_Z_LOW_LIMIT) pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y) + PICKUP_PLACEMENT_OFFSET; CPickups::GetActualPickupIndex(CollectNextParameterWithoutIncreasingPC(m_nIp)); - SET_INTEGER_PARAM(0, CPickups::GenerateNewOne(pos, model, GET_INTEGER_PARAM(1), 0)); + SET_INTEGER_PARAM(0, CPickups::GenerateNewOne(pos, model, GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2))); StoreParameters(&m_nIp, 1); return 0; } - case COMMAND_HAS_PICKUP_BEEN_COLLECTED: - CollectParameters(&m_nIp, 1); - UpdateCompareFlag(CPickups::IsPickUpPickedUp(GET_INTEGER_PARAM(0)) != 0); + case todo__comm_506: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_506"); return 0; - case COMMAND_REMOVE_PICKUP: - CollectParameters(&m_nIp, 1); - CPickups::RemovePickUp(GET_INTEGER_PARAM(0)); + } + case COMMAND_SET_PLAYER_NEVER_GETS_TIRED: + { + CollectParameters(&m_nIp, 2); + CPlayerInfo* pPlayer = &CWorld::Players[GET_INTEGER_PARAM(0)]; + pPlayer->m_bInfiniteSprint = (GET_INTEGER_PARAM(1) != 0); return 0; - case COMMAND_SET_TAXI_LIGHTS: + } + case COMMAND_SET_PLAYER_FAST_RELOAD: + { + CollectParameters(&m_nIp, 2); + CPlayerInfo* pPlayer = &CWorld::Players[GET_INTEGER_PARAM(0)]; + pPlayer->m_bFastReload = (GET_INTEGER_PARAM(1) != 0); + return 0; + } + case COMMAND_SET_CHAR_BLEEDING: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + pPed->bPedIsBleeding = (GET_INTEGER_PARAM(1) != 0); + return 0; + } + case todo__comm_510: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_510"); + return 0; + } + case COMMAND_SET_FREE_RESPRAYS: + CollectParameters(&m_nIp, 1); + CGarages::SetFreeResprays(GET_INTEGER_PARAM(0) != 0); + return 0; + case COMMAND_SET_CHAR_VISIBLE: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + pPed->bIsVisible = (GET_INTEGER_PARAM(1) != 0); + return 0; + } + case COMMAND_SET_CAR_VISIBLE: { CollectParameters(&m_nIp, 2); CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); script_assert(pVehicle); - script_assert(pVehicle->m_vehType == VEHICLE_TYPE_CAR); - ((CAutomobile*)pVehicle)->SetTaxiLight(GET_INTEGER_PARAM(1) != 0); + pVehicle->bIsVisible = (GET_INTEGER_PARAM(1) != 0); return 0; } - case COMMAND_PRINT_BIG_Q: + case COMMAND_IS_AREA_OCCUPIED: { - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CollectParameters(&m_nIp, 2); - CMessages::AddBigMessageQ(text, GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1) - 1); - return 0; - } - case COMMAND_PRINT_WITH_NUMBER_BIG_Q: - { - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CollectParameters(&m_nIp, 3); - CMessages::AddBigMessageWithNumberQ(text, GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2) - 1, - GET_INTEGER_PARAM(0), -1, -1, -1, -1, -1); - return 0; - } - case COMMAND_SET_GARAGE: - { - CollectParameters(&m_nIp, 9); + CollectParameters(&m_nIp, 11); float infX = GET_FLOAT_PARAM(0); float infY = GET_FLOAT_PARAM(1); float infZ = GET_FLOAT_PARAM(2); - float X2 = GET_FLOAT_PARAM(3); - float Y2 = GET_FLOAT_PARAM(4); - float supX = GET_FLOAT_PARAM(5); - float supY = GET_FLOAT_PARAM(6); - float supZ = GET_FLOAT_PARAM(7); - SET_INTEGER_PARAM(0, CGarages::AddOne(infX, infY, infZ, X2, Y2, supX, supY, supZ, GET_INTEGER_PARAM(8), 0)); - StoreParameters(&m_nIp, 1); + float supX = GET_FLOAT_PARAM(3); + float supY = GET_FLOAT_PARAM(4); + float supZ = GET_FLOAT_PARAM(5); + if (infX > supX) { + infX = GET_FLOAT_PARAM(3); + supX = GET_FLOAT_PARAM(0); + } + if (infY > supY) { + infY = GET_FLOAT_PARAM(4); + supY = GET_FLOAT_PARAM(1); + } + if (infZ > supZ) { + infZ = GET_FLOAT_PARAM(5); + supZ = GET_FLOAT_PARAM(2); + } + int16 total; + CWorld::FindObjectsIntersectingCube(CVector(infX, infY, infZ), CVector(supX, supY, supZ), &total, 2, nil, + !!GET_INTEGER_PARAM(6), !!GET_INTEGER_PARAM(7), !!GET_INTEGER_PARAM(8), !!GET_INTEGER_PARAM(9), !!GET_INTEGER_PARAM(10)); + UpdateCompareFlag(total > 0); return 0; } - /* - case COMMAND_SET_GARAGE_WITH_CAR_MODEL: - { - CollectParameters(&m_nIp, 10); - float infX = GET_FLOAT_PARAM(0); - float infY = GET_FLOAT_PARAM(1); - float infZ = GET_FLOAT_PARAM(2); - float X2 = GET_FLOAT_PARAM(3); - float Y2 = GET_FLOAT_PARAM(4); - float supX = GET_FLOAT_PARAM(5); - float supY = GET_FLOAT_PARAM(6); - float supZ = GET_FLOAT_PARAM(7); - SET_INTEGER_PARAM(0, CGarages::AddOne(infX, infY, infZ, X2, Y2, supX, supY, supZ, GET_INTEGER_PARAM(8), GET_INTEGER_PARAM(9))); - StoreParameters(&m_nIp, 1); - return 0; - } - */ - case COMMAND_SET_TARGET_CAR_FOR_MISSION_GARAGE: + case COMMAND_DISPLAY_TEXT: { CollectParameters(&m_nIp, 2); - CVehicle* pTarget; - if (GET_INTEGER_PARAM(1) >= 0) { - pTarget = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); - } - else { - pTarget = nil; - } - CGarages::SetTargetCarForMissonGarage(GET_INTEGER_PARAM(0), pTarget); + wchar* text = GetTextByKeyFromScript(&m_nIp); + CTheScripts::IntroTextLines[CTheScripts::NumberOfIntroTextLinesThisFrame].m_fAtX = GET_FLOAT_PARAM(0); + CTheScripts::IntroTextLines[CTheScripts::NumberOfIntroTextLinesThisFrame].m_fAtY = GET_FLOAT_PARAM(1); + uint16 len = CMessages::GetWideStringLength(text); + for (uint16 i = 0; i < len; i++) + CTheScripts::IntroTextLines[CTheScripts::NumberOfIntroTextLinesThisFrame].m_Text[i] = text[i]; + for (uint16 i = len; i < SCRIPT_TEXT_MAX_LENGTH; i++) + CTheScripts::IntroTextLines[CTheScripts::NumberOfIntroTextLinesThisFrame].m_Text[i] = 0; + ++CTheScripts::NumberOfIntroTextLinesThisFrame; return 0; } - case COMMAND_IS_CAR_IN_MISSION_GARAGE: - CollectParameters(&m_nIp, 1); - UpdateCompareFlag(CGarages::HasCarBeenDroppedOffYet(GET_INTEGER_PARAM(0))); + case COMMAND_SET_TEXT_SCALE: + { + CollectParameters(&m_nIp, 2); + CTheScripts::IntroTextLines[CTheScripts::NumberOfIntroTextLinesThisFrame].m_fScaleX = GET_FLOAT_PARAM(0); + CTheScripts::IntroTextLines[CTheScripts::NumberOfIntroTextLinesThisFrame].m_fScaleY = GET_FLOAT_PARAM(1); return 0; - case COMMAND_SET_FREE_BOMBS: - CollectParameters(&m_nIp, 1); - CGarages::SetFreeBombs(GET_INTEGER_PARAM(0) != 0); + } + case COMMAND_SET_TEXT_COLOUR: + { + CollectParameters(&m_nIp, 4); + CTheScripts::IntroTextLines[CTheScripts::NumberOfIntroTextLinesThisFrame].m_sColor = + CRGBA(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), GET_INTEGER_PARAM(3)); return 0; - /* - case COMMAND_SET_POWERPOINT: + } + case COMMAND_SET_TEXT_JUSTIFY: + { + CollectParameters(&m_nIp, 1); + CTheScripts::IntroTextLines[CTheScripts::NumberOfIntroTextLinesThisFrame].m_bJustify = (GET_INTEGER_PARAM(0) != 0); + return 0; + } + case COMMAND_SET_TEXT_CENTRE: + { + CollectParameters(&m_nIp, 1); + CTheScripts::IntroTextLines[CTheScripts::NumberOfIntroTextLinesThisFrame].m_bCentered = (GET_INTEGER_PARAM(0) != 0); + return 0; + } + case COMMAND_SET_TEXT_WRAPX: + { + CollectParameters(&m_nIp, 1); + CTheScripts::IntroTextLines[CTheScripts::NumberOfIntroTextLinesThisFrame].m_fWrapX = GET_FLOAT_PARAM(0); + return 0; + } + case todo__comm_521: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_521"); + return 0; + } + case COMMAND_SET_TEXT_BACKGROUND: + { + CollectParameters(&m_nIp, 1); + CTheScripts::IntroTextLines[CTheScripts::NumberOfIntroTextLinesThisFrame].m_bBackground = (GET_INTEGER_PARAM(0) != 0); + return 0; + } + case COMMAND_ROTATE_OBJECT: + { + CollectParameters(&m_nIp, 4); + CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pObject); + float fx = pObject->GetForward().x; + float fy = pObject->GetForward().y; + float heading = LimitAngleOnCircle( + 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(); +#else + float rotateBy = GET_FLOAT_PARAM(2); +#endif + if (headingTarget == heading) { // using direct comparasion here is fine + UpdateCompareFlag(true); + return 0; + } + float angleClockwise = LimitAngleOnCircle(headingTarget - heading); + float angleCounterclockwise = LimitAngleOnCircle(heading - headingTarget); + float newHeading; + if (angleClockwise < angleCounterclockwise) + newHeading = rotateBy < angleClockwise ? heading + rotateBy : headingTarget; + else + newHeading = rotateBy < angleCounterclockwise ? heading - rotateBy : headingTarget; + bool obstacleInPath = false; + if (GET_INTEGER_PARAM(3)) { + CVector pos = pObject->GetPosition(); + tmp_matrix.SetRotateZ(DEGTORAD(newHeading)); + tmp_matrix.GetPosition() += pos; + CColModel* pColModel = pObject->GetColModel(); + CVector cp1 = tmp_matrix * pColModel->boundingBox.min; + CVector cp2 = tmp_matrix * CVector(pColModel->boundingBox.max.x, pColModel->boundingBox.min.y, pColModel->boundingBox.min.z); + CVector cp3 = tmp_matrix * CVector(pColModel->boundingBox.min.x, pColModel->boundingBox.max.y, pColModel->boundingBox.min.z); + CVector cp4 = tmp_matrix * CVector(pColModel->boundingBox.min.x, pColModel->boundingBox.min.y, pColModel->boundingBox.max.z); + int16 collisions; + CWorld::FindObjectsIntersectingAngledCollisionBox(pColModel->boundingBox, tmp_matrix, pos, + Min(cp1.x, Min(cp2.x, Min(cp3.x, cp4.x))), + Min(cp1.y, Min(cp2.y, Min(cp3.y, cp4.y))), + Max(cp1.x, Max(cp2.x, Max(cp3.x, cp4.x))), + Max(cp1.y, Max(cp2.y, Max(cp3.y, cp4.y))), + &collisions, 2, nil, false, true, true, false, false); + if (collisions > 0) + obstacleInPath = true; + } + if (obstacleInPath) { + UpdateCompareFlag(true); + return 0; + } + pObject->SetHeading(DEGTORAD(newHeading)); + pObject->GetMatrix().UpdateRW(); + pObject->UpdateRwFrame(); + UpdateCompareFlag(newHeading == headingTarget); // using direct comparasion here is fine + return 0; + } + case COMMAND_SLIDE_OBJECT: + { + CollectParameters(&m_nIp, 8); + CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pObject); + CVector pos = pObject->GetPosition(); + CVector posTarget = GET_VECTOR_PARAM(1); + CVector slideBy = GET_VECTOR_PARAM(4); +#ifdef FIX_BUGS + // the check is a hack for original script, where some objects are moved + // via SLIDE_OBJECT instead of SET_OBJECT_POSITION + // assuming the slide will take exactly one frame, which is true + // only without accounting time step (which is a bug) + if (!IsSlideObjectUsedWrongByScript(posTarget, slideBy)) + slideBy *= CTimer::GetTimeStepFix(); +#endif + if (posTarget == pos) { // using direct comparasion here is fine + UpdateCompareFlag(true); + return 0; + } + CVector posDiff = pos - posTarget; + CVector newPosition; + if (posDiff.x < 0) + newPosition.x = -posDiff.x < slideBy.x ? posTarget.x : pos.x + slideBy.x; + else + newPosition.x = posDiff.x < slideBy.x ? posTarget.x : pos.x - slideBy.x; + if (posDiff.y < 0) + newPosition.y = -posDiff.y < slideBy.y ? posTarget.y : pos.y + slideBy.y; + else + newPosition.y = posDiff.y < slideBy.y ? posTarget.y : pos.y - slideBy.y; + if (posDiff.z < 0) + newPosition.z = -posDiff.z < slideBy.z ? posTarget.z : pos.z + slideBy.z; + else + newPosition.z = posDiff.z < slideBy.z ? posTarget.z : pos.z - slideBy.z; + bool obstacleInPath = false; + if (GET_INTEGER_PARAM(7)) { + tmp_matrix = pObject->GetMatrix(); + tmp_matrix.GetPosition() = newPosition; + CColModel* pColModel = pObject->GetColModel(); + CVector cp1 = tmp_matrix * pColModel->boundingBox.min; + CVector cp2 = tmp_matrix * CVector(pColModel->boundingBox.max.x, pColModel->boundingBox.min.y, pColModel->boundingBox.min.z); + CVector cp3 = tmp_matrix * CVector(pColModel->boundingBox.min.x, pColModel->boundingBox.max.y, pColModel->boundingBox.min.z); + CVector cp4 = tmp_matrix * CVector(pColModel->boundingBox.min.x, pColModel->boundingBox.min.y, pColModel->boundingBox.max.z); + int16 collisions; + CWorld::FindObjectsIntersectingAngledCollisionBox(pColModel->boundingBox, tmp_matrix, newPosition, + Min(cp1.x, Min(cp2.x, Min(cp3.x, cp4.x))), + Min(cp1.y, Min(cp2.y, Min(cp3.y, cp4.y))), + Max(cp1.x, Max(cp2.x, Max(cp3.x, cp4.x))), + Max(cp1.y, Max(cp2.y, Max(cp3.y, cp4.y))), + &collisions, 2, nil, false, true, true, false, false); + if (collisions > 0) + obstacleInPath = true; + } + if (obstacleInPath) { + UpdateCompareFlag(true); + return 0; + } + pObject->Teleport(newPosition); + UpdateCompareFlag(newPosition == posTarget); // using direct comparasion here is fine + return 0; + } + case COMMAND_REMOVE_CHAR_ELEGANTLY: + { + CollectParameters(&m_nIp, 1); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + if (pPed && pPed->CharCreatedBy == MISSION_CHAR){ + CWorld::RemoveReferencesToDeletedObject(pPed); + if (pPed->bInVehicle && pPed->m_pMyVehicle) + CTheScripts::RemoveThisPed(pPed); + else{ + pPed->CharCreatedBy = RANDOM_CHAR; + pPed->bRespondsToThreats = true; + pPed->bScriptObjectiveCompleted = false; + pPed->ClearLeader(); + --CPopulation::ms_nTotalMissionPeds; + pPed->bFadeOut = true; + CWorld::RemoveReferencesToDeletedObject(pPed); + } + } + if (m_bIsMissionScript) + CTheScripts::MissionCleanUp.RemoveEntityFromList(GET_INTEGER_PARAM(0), CLEANUP_CHAR); + return 0; + } + case COMMAND_SET_CHAR_STAY_IN_SAME_PLACE: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + pPed->bKindaStayInSamePlace = (GET_INTEGER_PARAM(1) != 0); + return 0; + } + case COMMAND_UNDRESS_CHAR: + { + script_assert(false && "todo string arg"); + CollectParameters(&m_nIp, 1); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + char name[KEY_LENGTH_IN_SCRIPT]; + CTheScripts::ReadTextLabelFromScript(&m_nIp, name); + for (int i = 0; i < KEY_LENGTH_IN_SCRIPT; i++) + name[i] = tolower(name[i]); + m_nIp += KEY_LENGTH_IN_SCRIPT; + pPed->Undress(name); + return 0; + } + case COMMAND_IS_EXPLOSION_IN_AREA: { CollectParameters(&m_nIp, 7); - float f1 = GET_FLOAT_PARAM(0); - float f2 = GET_FLOAT_PARAM(1); - float f3 = GET_FLOAT_PARAM(2); - float f4 = GET_FLOAT_PARAM(3); - float f5 = GET_FLOAT_PARAM(4); - float f6 = GET_FLOAT_PARAM(5); - float temp; - - if (f1 > f4) { - temp = f1; - f1 = f4; - f4 = temp; - } - - if (f2 > f5) { - temp = f2; - f2 = f5; - f5 = temp; - } - - if (f3 > f6) { - temp = f3; - f3 = f6; - f6 = temp; - } - - CPowerPoints::GenerateNewOne(f1, f2, f3, f4, f5, f6, *(uint8*)&GET_INTEGER_PARAM(6)); - - return 0; - } - case COMMAND_SET_ALL_TAXI_LIGHTS: - CollectParameters(&m_nIp, 1); - CAutomobile::SetAllTaxiLights(GET_INTEGER_PARAM(0) != 0); - return 0; - */ - case COMMAND_IS_CAR_ARMED_WITH_ANY_BOMB: - { - CollectParameters(&m_nIp, 1); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); -#ifdef FIX_BUGS - if (pVehicle->IsCar()) - UpdateCompareFlag(((CAutomobile*)pVehicle)->m_bombType != 0); - else if (pVehicle->IsBike()) - UpdateCompareFlag(((CBike*)pVehicle)->m_bombType != 0); - else - UpdateCompareFlag(false); -#else - CAutomobile* pCar = (CVehicle*)pVehicle; - UpdateCompareFlag(pCar->m_bombType != 0); //TODO: enum -#endif - return 0; - } - case COMMAND_APPLY_BRAKES_TO_PLAYERS_CAR: - CollectParameters(&m_nIp, 2); - CPad::GetPad(GET_INTEGER_PARAM(0))->bApplyBrakes = (GET_INTEGER_PARAM(1) != 0); - return 0; - case COMMAND_SET_PLAYER_HEALTH: - { - CollectParameters(&m_nIp, 2); - CPlayerPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(pPed); - pPed->m_fHealth = Min(GET_INTEGER_PARAM(1), CWorld::Players[GET_INTEGER_PARAM(0)].m_nMaxHealth); - return 0; - } - case COMMAND_SET_CHAR_HEALTH: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - if (GET_INTEGER_PARAM(1)) { - pPed->m_fHealth = GET_INTEGER_PARAM(1); - } - else if (pPed->bInVehicle) { - pPed->SetDead(); - if (!pPed->IsPlayer()) - pPed->FlagToDestroyWhenNextProcessed(); - } - else { - pPed->SetDie(); // last argument = 13 (default? TODO) - } - return 0; - } - case COMMAND_SET_CAR_HEALTH: - { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - pVehicle->m_fHealth = GET_INTEGER_PARAM(1); - return 0; - } - case COMMAND_GET_PLAYER_HEALTH: - { - CollectParameters(&m_nIp, 1); - CPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(pPed); - SET_INTEGER_PARAM(0, pPed->m_fHealth); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_GET_CHAR_HEALTH: - { - CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - SET_INTEGER_PARAM(0, pPed->m_fHealth); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_GET_CAR_HEALTH: - { - CollectParameters(&m_nIp, 1); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - SET_INTEGER_PARAM(0, pVehicle->m_fHealth); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_IS_CAR_ARMED_WITH_BOMB: - { - CollectParameters(&m_nIp, 2); - CAutomobile* pVehicle = (CAutomobile*)CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); -#ifdef FIX_BUGS - if (pVehicle->IsCar()) - UpdateCompareFlag(((CAutomobile*)pVehicle)->m_bombType == GET_INTEGER_PARAM(1)); - else if (pVehicle->IsBike()) - UpdateCompareFlag(((CBike*)pVehicle)->m_bombType == GET_INTEGER_PARAM(1)); - else - UpdateCompareFlag(false); -#else - CAutomobile* pCar = (CVehicle*)pVehicle; - UpdateCompareFlag(pCar->m_bombType != 0); //TODO: enum -#endif - return 0; - } - case COMMAND_CHANGE_CAR_COLOUR: - { - CollectParameters(&m_nIp, 3); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - if (GET_INTEGER_PARAM(1) >= 256 || GET_INTEGER_PARAM(2) >= 256) - debug("CHANGE_CAR_COLOUR - Colours must be less than %d", 256); - pVehicle->m_currentColour1 = GET_INTEGER_PARAM(1); - pVehicle->m_currentColour2 = GET_INTEGER_PARAM(2); - return 0; - } - case COMMAND_SWITCH_PED_ROADS_ON: - { - CollectParameters(&m_nIp, 6); - float infX = GET_FLOAT_PARAM(0); - float infY = GET_FLOAT_PARAM(1); - float infZ = GET_FLOAT_PARAM(2); - float supX = GET_FLOAT_PARAM(3); - float supY = GET_FLOAT_PARAM(4); - float supZ = GET_FLOAT_PARAM(5); - if (infX > supX) { - infX = GET_FLOAT_PARAM(3); - supX = GET_FLOAT_PARAM(0); - } - if (infY > supY) { - infY = GET_FLOAT_PARAM(4); - supY = GET_FLOAT_PARAM(1); - } - if (infZ > supZ) { - infZ = GET_FLOAT_PARAM(5); - supZ = GET_FLOAT_PARAM(2); - } - ThePaths.SwitchPedRoadsOffInArea(infX, supX, infY, supY, infZ, supZ, false); - return 0; - } - case COMMAND_SWITCH_PED_ROADS_OFF: - { - CollectParameters(&m_nIp, 6); - float infX = GET_FLOAT_PARAM(0); - float infY = GET_FLOAT_PARAM(1); - float infZ = GET_FLOAT_PARAM(2); - float supX = GET_FLOAT_PARAM(3); - float supY = GET_FLOAT_PARAM(4); - float supZ = GET_FLOAT_PARAM(5); - if (infX > supX) { - infX = GET_FLOAT_PARAM(3); - supX = GET_FLOAT_PARAM(0); - } - if (infY > supY) { - infY = GET_FLOAT_PARAM(4); - supY = GET_FLOAT_PARAM(1); - } - if (infZ > supZ) { - infZ = GET_FLOAT_PARAM(5); - supZ = GET_FLOAT_PARAM(2); - } - ThePaths.SwitchPedRoadsOffInArea(infX, supX, infY, supY, infZ, supZ, true); - return 0; - } - case COMMAND_CHAR_LOOK_AT_CHAR_ALWAYS: - { - CollectParameters(&m_nIp, 2); - CPed* pSourcePed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pSourcePed); - CPed* pTargetPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(1)); - script_assert(pTargetPed); - pSourcePed->SetLookFlag(pTargetPed, true, true); - pSourcePed->SetLookTimer(60000); - return 0; - } - case COMMAND_CHAR_LOOK_AT_PLAYER_ALWAYS: - { - CollectParameters(&m_nIp, 2); - CPed* pSourcePed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pSourcePed); - CPed* pTargetPed = CWorld::Players[GET_INTEGER_PARAM(1)].m_pPed; - script_assert(pTargetPed); - pSourcePed->SetLookFlag(pTargetPed, true); - pSourcePed->SetLookTimer(60000); - return 0; - } - case COMMAND_PLAYER_LOOK_AT_CHAR_ALWAYS: - { - CollectParameters(&m_nIp, 2); - CPed* pSourcePed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(pSourcePed); - CPed* pTargetPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(1)); - script_assert(pTargetPed); - pSourcePed->SetLookFlag(pTargetPed, true); - pSourcePed->SetLookTimer(60000); - return 0; - } - case COMMAND_STOP_CHAR_LOOKING: - { - CollectParameters(&m_nIp, 1); - CPed* pSourcePed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pSourcePed); - pSourcePed->ClearLookFlag(); - pSourcePed->bKeepTryingToLook = false; - if (pSourcePed->GetPedState() == PED_LOOK_HEADING || pSourcePed->GetPedState() == PED_LOOK_ENTITY) - pSourcePed->RestorePreviousState(); - return 0; - } - case COMMAND_STOP_PLAYER_LOOKING: - { - CollectParameters(&m_nIp, 1); - CPed* pSourcePed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(pSourcePed); - pSourcePed->ClearLookFlag(); - pSourcePed->bKeepTryingToLook = false; - if (pSourcePed->GetPedState() == PED_LOOK_HEADING || pSourcePed->GetPedState() == PED_LOOK_ENTITY) - pSourcePed->RestorePreviousState(); - return 0; - } - /* - case COMMAND_SWITCH_HELICOPTER: - CollectParameters(&m_nIp, 1); - CHeli::ActivateHeli(GET_INTEGER_PARAM(0) != 0); - return 0; - */ - //case COMMAND_SET_GANG_ATTITUDE: - //case COMMAND_SET_GANG_GANG_ATTITUDE: - //case COMMAND_SET_GANG_PLAYER_ATTITUDE: - case COMMAND_SET_GANG_PED_MODELS: - CollectParameters(&m_nIp, 3); - CGangs::SetGangPedModels(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2)); - return 0; - case COMMAND_SET_GANG_CAR_MODEL: - CollectParameters(&m_nIp, 2); - CGangs::SetGangVehicleModel(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); - return 0; - case COMMAND_SET_GANG_WEAPONS: - CollectParameters(&m_nIp, 3); - CGangs::SetGangWeapons(GET_INTEGER_PARAM(0), (eWeaponType)GET_INTEGER_PARAM(1), (eWeaponType)GET_INTEGER_PARAM(2)); - return 0; - /* - case COMMAND_SET_CHAR_OBJ_RUN_TO_AREA: - { - CollectParameters(&m_nIp, 5); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); float infX = GET_FLOAT_PARAM(1); float infY = GET_FLOAT_PARAM(2); - float supX = GET_FLOAT_PARAM(3); - float supY = GET_FLOAT_PARAM(4); + float infZ = GET_FLOAT_PARAM(3); + float supX = GET_FLOAT_PARAM(4); + float supY = GET_FLOAT_PARAM(5); + float supZ = GET_FLOAT_PARAM(6); if (infX > supX) { - infX = GET_FLOAT_PARAM(3); + infX = GET_FLOAT_PARAM(4); supX = GET_FLOAT_PARAM(1); } if (infY > supY) { - infY = GET_FLOAT_PARAM(4); + infY = GET_FLOAT_PARAM(5); supY = GET_FLOAT_PARAM(2); } - CVector pos; - pos.x = (infX + supX) / 2; - pos.y = (infY + supY) / 2; - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - float radius = Max(pos.x - infX, pos.y - infY); - pPed->bScriptObjectiveCompleted = false; - pPed->SetObjective(OBJECTIVE_RUN_TO_AREA, pos, radius); + if (infZ > supZ) { + infZ = GET_FLOAT_PARAM(6); + supZ = GET_FLOAT_PARAM(3); + } + UpdateCompareFlag(CExplosion::TestForExplosionInArea((eExplosionType)GET_INTEGER_PARAM(0), + infX, supX, infY, supY, infZ, supZ)); return 0; } - */ - case COMMAND_SET_CHAR_OBJ_RUN_TO_COORD: + case COMMAND_PLACE_OBJECT_RELATIVE_TO_CAR: + { + CollectParameters(&m_nIp, 5); + CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pObject); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); + script_assert(pVehicle); + CVector offset = GET_VECTOR_PARAM(2); + CPhysical::PlacePhysicalRelativeToOtherPhysical(pVehicle, pObject, offset); + return 0; + } + case COMMAND_MAKE_OBJECT_TARGETTABLE: + { + CollectParameters(&m_nIp, 1); + CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pObject); + CPlayerPed* pPlayerPed = CWorld::Players[CWorld::PlayerInFocus].m_pPed; + script_assert(pPlayerPed); + pPlayerPed->MakeObjectTargettable(GET_INTEGER_PARAM(0)); + return 0; + } + case COMMAND_ADD_ARMOUR_TO_CHAR: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + pPed->m_fArmour = Clamp(pPed->m_fArmour + GET_INTEGER_PARAM(1), 0.0f, 100.0f); + return 0; + } + case COMMAND_OPEN_GARAGE: + { + CollectParameters(&m_nIp, 1); + CGarages::OpenGarage(GET_INTEGER_PARAM(0)); + return 0; + } + case COMMAND_CLOSE_GARAGE: + { + CollectParameters(&m_nIp, 1); + CGarages::CloseGarage(GET_INTEGER_PARAM(0)); + return 0; + } + case COMMAND_WARP_CHAR_FROM_CAR_TO_COORD: + { + CollectParameters(&m_nIp, 4); + CPed *pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + CVector pos = GET_VECTOR_PARAM(1); + if (pos.z <= MAP_Z_LOW_LIMIT) + pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); + if (pPed->bInVehicle){ + if (pPed->m_pMyVehicle->bIsBus) + pPed->bRenderPedInCar = true; + if (pPed->m_pMyVehicle->pDriver == pPed){ + pPed->m_pMyVehicle->RemoveDriver(); + pPed->m_pMyVehicle->SetStatus(STATUS_ABANDONED); + pPed->m_pMyVehicle->bEngineOn = false; + pPed->m_pMyVehicle->AutoPilot.m_nCruiseSpeed = 0; + pPed->m_pMyVehicle->SetMoveSpeed(0.0f, 0.0f, -0.00001f); + pPed->m_pMyVehicle->SetTurnSpeed(0.0f, 0.0f, 0.0f); + }else{ + pPed->m_pMyVehicle->RemovePassenger(pPed); + } + if (pPed->m_vehDoor) { + eDoors door; + switch (pPed->m_vehDoor) { + case CAR_DOOR_LF: + door = DOOR_FRONT_LEFT; + break; + case CAR_DOOR_RF: + door = DOOR_FRONT_RIGHT; + break; + case CAR_DOOR_LR: + door = DOOR_REAR_LEFT; + break; + case CAR_DOOR_RR: + door = DOOR_REAR_RIGHT; + break; + } + if (pPed->GetPedState() == PED_EXIT_CAR || pPed->GetPedState() == PED_DRAG_FROM_CAR || !pPed->m_pMyVehicle->IsDoorClosed(door)) { + uint8 flags = 0; + if (pPed->m_pMyVehicle->IsBike()) { + if (pPed->m_vehDoor == CAR_DOOR_LF || + pPed->m_vehDoor == CAR_DOOR_RF || + pPed->m_vehDoor == CAR_WINDSCREEN) + flags = CAR_DOOR_FLAG_LF | CAR_DOOR_FLAG_RF; + else if (pPed->m_vehDoor == CAR_DOOR_LR || + pPed->m_vehDoor == CAR_DOOR_RR) + flags = CAR_DOOR_FLAG_LR | CAR_DOOR_FLAG_RR; + } + else { + switch (pPed->m_vehDoor) { + case CAR_DOOR_LF: + flags = pPed->m_pMyVehicle->m_nNumMaxPassengers != 0 ? CAR_DOOR_FLAG_LF : CAR_DOOR_FLAG_LF | CAR_DOOR_FLAG_LR; + break; + case CAR_DOOR_LR: + flags = pPed->m_pMyVehicle->m_nNumMaxPassengers != 0 ? CAR_DOOR_FLAG_LR : CAR_DOOR_FLAG_LF | CAR_DOOR_FLAG_LR; + break; + case CAR_DOOR_RF: + flags = CAR_DOOR_FLAG_RF; + break; + case CAR_DOOR_RR: + flags = CAR_DOOR_FLAG_RR; + break; + } + } + pPed->m_pMyVehicle->m_nGettingOutFlags &= ~flags; + pPed->m_pMyVehicle->ProcessOpenDoor(pPed->m_vehDoor, ANIM_STD_NUM, 0.0f); + } + } + } + pPed->RemoveInCarAnims(); + pPed->bInVehicle = false; + pPed->m_pMyVehicle = nil; + pPed->SetPedState(PED_IDLE); + pPed->m_nLastPedState = PED_NONE; + pPed->bUsesCollision = true; + pPed->SetMoveSpeed(0.0f, 0.0f, 0.0f); + pPed->ReplaceWeaponWhenExitingVehicle(); + if (pPed->m_pVehicleAnim) + pPed->m_pVehicleAnim->blendDelta = -1000.0f; + pPed->m_pVehicleAnim = nil; + pPed->RestartNonPartialAnims(); + pPed->SetMoveState(PEDMOVE_NONE); + CAnimManager::BlendAnimation(pPed->GetClump(), pPed->m_animGroup, ANIM_STD_IDLE, 1000.0f); + pos.z += pPed->GetDistanceFromCentreOfMassToBaseOfModel(); + pPed->Teleport(pos); + CTheScripts::ClearSpaceForMissionEntity(pos, pPed); + return 0; + } + case COMMAND_SET_VISIBILITY_OF_CLOSEST_OBJECT_OF_TYPE: + { + CollectParameters(&m_nIp, 6); + CVector pos = GET_VECTOR_PARAM(0); + if (pos.z <= MAP_Z_LOW_LIMIT) + pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); + float range = GET_FLOAT_PARAM(3); + int mi = GET_INTEGER_PARAM(4) < 0 ? CTheScripts::UsedObjectArray[-GET_INTEGER_PARAM(4)].index : GET_INTEGER_PARAM(4); + int16 total; + CEntity* apEntities[16]; + CWorld::FindObjectsOfTypeInRange(mi, pos, range, true, &total, 16, apEntities, true, false, false, true, true); + if (total == 0) + CWorld::FindObjectsOfTypeInRangeSectorList(mi, CWorld::GetBigBuildingList(LEVEL_GENERIC), pos, range, true, &total, 16, apEntities); + if (total == 0) + CWorld::FindObjectsOfTypeInRangeSectorList(mi, CWorld::GetBigBuildingList(CTheZones::GetLevelFromPosition(&pos)), pos, range, true, &total, 16, apEntities); + CEntity* pClosestEntity = nil; + float min_dist = 2.0f * range; + for (int i = 0; i < total; i++) { + float dist = (apEntities[i]->GetPosition() - pos).Magnitude(); + if (dist < min_dist) { + min_dist = dist; + pClosestEntity = apEntities[i]; + } + } + if (pClosestEntity) { + pClosestEntity->bIsVisible = (GET_INTEGER_PARAM(5) != 0); + CTheScripts::AddToInvisibilitySwapArray(pClosestEntity, GET_INTEGER_PARAM(5) != 0); + } + return 0; + } + case COMMAND_HAS_CHAR_SPOTTED_CHAR: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + CPed* pTarget = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(1)); + script_assert(pTarget); + UpdateCompareFlag(pPed->OurPedCanSeeThisOne(pTarget)); + return 0; + } + case COMMAND_SET_CHAR_OBJ_HAIL_TAXI: + { + CollectParameters(&m_nIp, 1); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + pPed->bScriptObjectiveCompleted = false; + pPed->SetObjective(OBJECTIVE_HAIL_TAXI); + return 0; + } + case COMMAND_HAS_OBJECT_BEEN_DAMAGED: + { + CollectParameters(&m_nIp, 1); + CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pObject); + UpdateCompareFlag(pObject->bRenderDamaged || !pObject->bIsVisible); + return 0; + } + case COMMAND_START_KILL_FRENZY_HEADSHOT: + { + wchar* text = GetTextByKeyFromScript(&m_nIp); + CollectParameters(&m_nIp, 8); + CDarkel::StartFrenzy((eWeaponType)GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), + GET_INTEGER_PARAM(3), text, GET_INTEGER_PARAM(4), GET_INTEGER_PARAM(5), + GET_INTEGER_PARAM(6), GET_INTEGER_PARAM(7) != 0, true); + return 0; + } + case COMMAND_WARP_CHAR_INTO_CAR: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); + script_assert(pVehicle); + pPed->SetObjective(OBJECTIVE_ENTER_CAR_AS_DRIVER, pVehicle); + pPed->WarpPedIntoCar(pVehicle); + pPed->RestorePreviousObjective(); + return 0; + } + case COMMAND_SWITCH_CAR_RADIO: + CollectParameters(&m_nIp, 1); + DMAudio.ChangeMusicMode(GET_INTEGER_PARAM(0)); + return 0; + case COMMAND_PRINT_WITH_2_NUMBERS_BIG: + { + wchar* text = GetTextByKeyFromScript(&m_nIp); + CollectParameters(&m_nIp, 4); + CMessages::AddBigMessageWithNumber(text, GET_INTEGER_PARAM(2), GET_INTEGER_PARAM(3) - 1, GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), -1, -1, -1, -1); + return 0; + } + case COMMAND_PRINT_WITH_3_NUMBERS_BIG: + { + wchar* text = GetTextByKeyFromScript(&m_nIp); + CollectParameters(&m_nIp, 5); + CMessages::AddBigMessageWithNumber(text, GET_INTEGER_PARAM(3), GET_INTEGER_PARAM(4) - 1, GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), -1, -1, -1); + return 0; + } + case COMMAND_SET_CHAR_WAIT_STATE: { CollectParameters(&m_nIp, 3); CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); script_assert(pPed); - CVector pos; - pos.x = GET_FLOAT_PARAM(1); - pos.y = GET_FLOAT_PARAM(2); - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - pPed->bScriptObjectiveCompleted = false; - pPed->SetObjective(OBJECTIVE_RUN_TO_AREA, pos); + pPed->SetWaitState((eWaitState)GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2) >= 0 ? &GET_INTEGER_PARAM(2) : nil); return 0; } - /* - case COMMAND_IS_PLAYER_TOUCHING_OBJECT_ON_FOOT: + case COMMAND_SET_CAMERA_BEHIND_PLAYER: + TheCamera.SetCameraDirectlyBehindForFollowPed_CamOnAString(); + return 0; + case COMMAND_CREATE_RANDOM_CHAR: { - CollectParameters(&m_nIp, 2); - CPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(pPed); - CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(1)); - bool isTouching = false; - if (pPed->bInVehicle) - isTouching = false; - else if (pPed->GetHasCollidedWith(pObject)) - isTouching = true; - UpdateCompareFlag(isTouching); + CollectParameters(&m_nIp, 3); + CZoneInfo zoneinfo; + CTheZones::GetZoneInfoForTimeOfDay(&CWorld::Players[CWorld::PlayerInFocus].GetPos(), &zoneinfo); + int mi; + ePedType pedtype = PEDTYPE_COP; + int attempt = 0; + while (pedtype != PEDTYPE_CIVMALE && pedtype != PEDTYPE_CIVFEMALE && attempt < 5) { + mi = CPopulation::ChooseCivilianOccupation(zoneinfo.pedGroup); + if (CModelInfo::GetModelInfo(mi)->GetRwObject()) + pedtype = ((CPedModelInfo*)(CModelInfo::GetModelInfo(mi)))->m_pedType; + attempt++; + } + if (!CModelInfo::GetModelInfo(mi)->GetRwObject()) { + mi = MI_MALE01; + pedtype = ((CPedModelInfo*)(CModelInfo::GetModelInfo(mi)))->m_pedType; + } + CPed* ped = new CCivilianPed(pedtype, mi); + ped->CharCreatedBy = MISSION_CHAR; + ped->bRespondsToThreats = false; + ped->bAllowMedicsToReviveMe = false; + ped->bIsPlayerFriend = false; + CVector pos = GET_VECTOR_PARAM(0); + if (pos.z <= MAP_Z_LOW_LIMIT) + pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); + pos.z += 1.0f; + ped->SetPosition(pos); + ped->SetOrientation(0.0f, 0.0f, 0.0f); + CTheScripts::ClearSpaceForMissionEntity(pos, ped); + if (m_bIsMissionScript) + ped->bIsStaticWaitingForCollision = true; + CWorld::Add(ped); + ped->m_nZoneLevel = CTheZones::GetLevelFromPosition(&pos); + CPopulation::ms_nTotalMissionPeds++; + SET_INTEGER_PARAM(0, CPools::GetPedPool()->GetIndex(ped)); + StoreParameters(&m_nIp, 1); + if (m_bIsMissionScript) + CTheScripts::MissionCleanUp.AddEntityToList(GET_INTEGER_PARAM(0), CLEANUP_CHAR); return 0; } - case COMMAND_IS_CHAR_TOUCHING_OBJECT_ON_FOOT: + case COMMAND_IS_SNIPER_BULLET_IN_AREA: { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(1)); - bool isTouching = false; - if (pPed->InVehicle()) - isTouching = false; - else if (pPed->GetHasCollidedWith(pObject)) - isTouching = true; - UpdateCompareFlag(isTouching); + CollectParameters(&m_nIp, 6); + float infX = GET_FLOAT_PARAM(0); + float infY = GET_FLOAT_PARAM(1); + float infZ = GET_FLOAT_PARAM(2); + float supX = GET_FLOAT_PARAM(3); + float supY = GET_FLOAT_PARAM(4); + float supZ = GET_FLOAT_PARAM(5); + if (infX > supX) { + infX = GET_FLOAT_PARAM(3); + supX = GET_FLOAT_PARAM(0); + } + if (infY > supY) { + infY = GET_FLOAT_PARAM(4); + supY = GET_FLOAT_PARAM(1); + } + if (infZ > supZ) { + infZ = GET_FLOAT_PARAM(5); + supZ = GET_FLOAT_PARAM(2); + } + UpdateCompareFlag(CBulletInfo::TestForSniperBullet(infX, supX, infY, supY, infZ, supZ)); return 0; } - */ - case COMMAND_LOAD_SPECIAL_CHARACTER: + case COMMAND_SET_OBJECT_VELOCITY: { - CollectParameters(&m_nIp, 1); - char name[16]; - strncpy(name, (char*)&CTheScripts::ScriptSpace[m_nIp], KEY_LENGTH_IN_SCRIPT); - for (int i = 0; i < KEY_LENGTH_IN_SCRIPT; i++) - name[i] = tolower(name[i]); - CStreaming::RequestSpecialChar(GET_INTEGER_PARAM(0) - 1, name, STREAMFLAGS_DEPENDENCY | (m_bIsMissionScript ? STREAMFLAGS_SCRIPTOWNED : STREAMFLAGS_AMBIENT_SCRIPT_OWNED)); - m_nIp += KEY_LENGTH_IN_SCRIPT; + CollectParameters(&m_nIp, 4); + CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pObject); + pObject->SetMoveSpeed(GET_VECTOR_PARAM(1) * METERS_PER_SECOND_TO_GAME_SPEED); return 0; } - case COMMAND_HAS_SPECIAL_CHARACTER_LOADED: - { - CollectParameters(&m_nIp, 1); - UpdateCompareFlag(CStreaming::HasSpecialCharLoaded(GET_INTEGER_PARAM(0) - 1)); - return 0; - } - /* - case COMMAND_FLASH_CAR: - { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - pVehicle->bHasBlip = (GET_INTEGER_PARAM(1) != 0); - return 0; - } - case COMMAND_FLASH_CHAR: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - pPed->bHasBlip = (GET_INTEGER_PARAM(1) != 0); - return 0; - } - case COMMAND_FLASH_OBJECT: + case COMMAND_SET_OBJECT_COLLISION: { CollectParameters(&m_nIp, 2); CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); script_assert(pObject); - pObject->bHasBlip = (GET_INTEGER_PARAM(1) != 0); + pObject->bUsesCollision = (GET_INTEGER_PARAM(1) != 0); return 0; } - */ - case COMMAND_IS_PLAYER_IN_REMOTE_MODE: - CollectParameters(&m_nIp, 1); - UpdateCompareFlag(CWorld::Players[GET_INTEGER_PARAM(0)].IsPlayerInRemoteMode()); + case COMMAND_PRINT_STRING_IN_STRING_NOW: + { + wchar* source = GetTextByKeyFromScript(&m_nIp); + wchar* pstr = GetTextByKeyFromScript(&m_nIp); + CollectParameters(&m_nIp, 2); + CMessages::AddMessageJumpQWithString(source, GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), pstr); return 0; - case COMMAND_ARM_CAR_WITH_BOMB: + } + case COMMAND_IS_POINT_OBSCURED_BY_A_MISSION_ENTITY: + { + CollectParameters(&m_nIp, 6); + float infX = GET_FLOAT_PARAM(0) - GET_FLOAT_PARAM(3); + float supX = GET_FLOAT_PARAM(0) + GET_FLOAT_PARAM(3); + float infY = GET_FLOAT_PARAM(1) - GET_FLOAT_PARAM(4); + float supY = GET_FLOAT_PARAM(1) + GET_FLOAT_PARAM(4); + float infZ = GET_FLOAT_PARAM(2) - GET_FLOAT_PARAM(5); + float supZ = GET_FLOAT_PARAM(2) + GET_FLOAT_PARAM(5); + if (infX > supX) { + float tmp = infX; + infX = supX; + supX = tmp; + } + if (infY > supY) { + float tmp = infY; + infY = supY; + supY = tmp; + } + if (infZ > supZ) { + float tmp = infZ; + infZ = supZ; + supZ = tmp; + } + int16 total; + CWorld::FindMissionEntitiesIntersectingCube(CVector(infX, infY, infZ), CVector(supX, supY, supZ), &total, 2, nil, true, true, true); + UpdateCompareFlag(total > 0); + return 0; + } + case COMMAND_LOAD_ALL_MODELS_NOW: +#ifdef FIX_BUGS + CTimer::Suspend(); +#else + CTimer::Stop(); +#endif + CStreaming::LoadAllRequestedModels(false); +#ifdef FIX_BUGS + CTimer::Resume(); +#else + CTimer::Update(); +#endif + return 0; + case COMMAND_ADD_TO_OBJECT_VELOCITY: + { + CollectParameters(&m_nIp, 4); + CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pObject); + pObject->AddToMoveSpeed(GET_VECTOR_PARAM(1) * METERS_PER_SECOND_TO_GAME_SPEED); + return 0; + } + case COMMAND_SET_OBJECT_DYNAMIC: + { + CollectParameters(&m_nIp, 2); + CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pObject); + if (GET_INTEGER_PARAM(1)) { + if (pObject->bIsStatic) { + pObject->SetIsStatic(false); + pObject->AddToMovingList(); + } + } + else { + if (!pObject->bIsStatic) { + pObject->SetIsStatic(true); + pObject->RemoveFromMovingList(); + } + } + return 0; + } + case COMMAND_PLAY_MISSION_PASSED_TUNE: + { + CollectParameters(&m_nIp, 1); + DMAudio.ChangeMusicMode(MUSICMODE_FRONTEND); + DMAudio.PlayFrontEndTrack(GET_INTEGER_PARAM(0) + STREAMED_SOUND_MISSION_COMPLETED - 1, FALSE); +#ifndef GTA_PSP + //DMAudio.SaveAnnouncementsWhenMissionPassedPlayed(); // TODO! +#endif + return 0; + } + case COMMAND_CLEAR_AREA: + { + CollectParameters(&m_nIp, 5); + CVector pos = GET_VECTOR_PARAM(0); + if (pos.z <= MAP_Z_LOW_LIMIT) + pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); + CWorld::ClearExcitingStuffFromArea(pos, GET_FLOAT_PARAM(3), GET_INTEGER_PARAM(4)); +#ifdef GTA_MOBILE + // CPopulation::ms_blockPedCreationForAFrame = true; +#endif + return 0; + } + case COMMAND_FREEZE_ONSCREEN_TIMER: + CollectParameters(&m_nIp, 1); + CUserDisplay::OnscnTimer.m_bDisabled = GET_INTEGER_PARAM(0) != 0; + return 0; + case COMMAND_SWITCH_CAR_SIREN: { CollectParameters(&m_nIp, 2); CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); script_assert(pVehicle); -#ifdef FIX_BUGS - if (pVehicle->IsCar()) { - ((CAutomobile*)pVehicle)->m_bombType = GET_INTEGER_PARAM(1); - ((CAutomobile*)pVehicle)->m_pBombRigger = FindPlayerPed(); + pVehicle->m_bSirenOrAlarm = GET_INTEGER_PARAM(1) != 0; + return 0; + } + case COMMAND_SWITCH_PED_ROADS_OFF_ANGLED: + CollectParameters(&m_nIp, 7); + ThePaths.SwitchRoadsInAngledArea(GET_FLOAT_PARAM(0), GET_FLOAT_PARAM(1), GET_FLOAT_PARAM(2), + GET_FLOAT_PARAM(3), GET_FLOAT_PARAM(4), GET_FLOAT_PARAM(5), GET_FLOAT_PARAM(6), 0, 0); + return 0; + case COMMAND_SET_CAR_WATERTIGHT: + { + CollectParameters(&m_nIp, 2); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + if (pVehicle->IsBike()) { + CBike* pBike = (CBike*)pVehicle; + pBike->bWaterTight = GET_INTEGER_PARAM(1) != 0; } - else if (pVehicle->IsBike()) { - ((CBike*)pVehicle)->m_bombType = GET_INTEGER_PARAM(1); - ((CBike*)pVehicle)->m_pBombRigger = FindPlayerPed(); + else if (pVehicle->IsCar()) { + CAutomobile* pCar = (CAutomobile*)pVehicle; + pCar->bWaterTight = GET_INTEGER_PARAM(1) != 0; } -#else - ((CAutomobile*)pVehicle)->m_bombType = GET_INTEGER_PARAM(1); - ((CAutomobile*)pVehicle)->m_pBombRigger = FindPlayerPed(); -#endif return 0; } - case COMMAND_SET_CHAR_PERSONALITY: + case COMMAND_ADD_MOVING_PARTICLE_EFFECT: { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - pPed->SetPedStats((ePedStats)GET_INTEGER_PARAM(1)); - return 0; - } - case COMMAND_SET_CUTSCENE_OFFSET: - CollectParameters(&m_nIp, 3); - CCutsceneMgr::SetCutsceneOffset(GET_VECTOR_PARAM(0)); - return 0; - case COMMAND_SET_ANIM_GROUP_FOR_CHAR: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - pPed->m_animGroup = (AssocGroupId)GET_INTEGER_PARAM(1); - pPed->bOverrideMoveAnim = false; - return 0; - } - /* - case COMMAND_SET_ANIM_GROUP_FOR_PLAYER: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(pPed); - pPed->m_animGroup = (AssocGroupId)GET_INTEGER_PARAM(1); - return 0; - } - */ - case COMMAND_REQUEST_MODEL: - { - CollectParameters(&m_nIp, 1); - int model = GET_INTEGER_PARAM(0); - if (model < 0) - model = CTheScripts::UsedObjectArray[-model].index; - CStreaming::RequestModel(model, STREAMFLAGS_DEPENDENCY | STREAMFLAGS_NOFADE | (m_bIsMissionScript ? STREAMFLAGS_SCRIPTOWNED : STREAMFLAGS_AMBIENT_SCRIPT_OWNED)); - if (model == MI_MINIGUN) -#ifdef FIX_BUGS - CStreaming::RequestModel(MI_MINIGUN2, STREAMFLAGS_DEPENDENCY | STREAMFLAGS_NOFADE | (m_bIsMissionScript ? STREAMFLAGS_SCRIPTOWNED : STREAMFLAGS_AMBIENT_SCRIPT_OWNED)); -#else - CStreaming::RequestModel(MI_MINIGUN2, STREAMFLAGS_DEPENDENCY | STREAMFLAGS_NOFADE | STREAMFLAGS_SCRIPTOWNED); -#endif - return 0; - } - case COMMAND_HAS_MODEL_LOADED: - { - CollectParameters(&m_nIp, 1); - int model = GET_INTEGER_PARAM(0); - if (model < 0) - model = CTheScripts::UsedObjectArray[-model].index; - UpdateCompareFlag(CStreaming::HasModelLoaded(model)/* || cWorldStream::Instance()->pDynamic(model, 0) */); // TODO - return 0; - } - case COMMAND_MARK_MODEL_AS_NO_LONGER_NEEDED: - { - CollectParameters(&m_nIp, 1); - int model = GET_INTEGER_PARAM(0); - if (model < 0) - model = CTheScripts::UsedObjectArray[-model].index; - if (m_bIsMissionScript) - CStreaming::SetMissionDoesntRequireModel(model); - else - CStreaming::SetAmbientMissionDoesntRequireModel(model); - return 0; - } - case COMMAND_GRAB_PHONE: - { - CollectParameters(&m_nIp, 2); - SET_INTEGER_PARAM(0, gPhoneInfo.GrabPhone(GET_FLOAT_PARAM(0), GET_FLOAT_PARAM(1))); - StoreParameters(&m_nIp, 1); - return 0; - } - /* - case COMMAND_SET_REPEATED_PHONE_MESSAGE: - { - CollectParameters(&m_nIp, 1); - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); - gPhoneInfo.SetPhoneMessage_Repeatedly(GET_INTEGER_PARAM(0), text, nil, nil, nil, nil, nil); - return 0; - } - case COMMAND_SET_PHONE_MESSAGE: - { - CollectParameters(&m_nIp, 1); - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); - gPhoneInfo.SetPhoneMessage_JustOnce(GET_INTEGER_PARAM(0), text, nil, nil, nil, nil, nil); - return 0; - } - case COMMAND_HAS_PHONE_DISPLAYED_MESSAGE: - { - CollectParameters(&m_nIp, 1); - UpdateCompareFlag(gPhoneInfo.HasMessageBeenDisplayed(GET_INTEGER_PARAM(0))); - return 0; - } - */ - case COMMAND_TURN_PHONE_OFF: - { - CollectParameters(&m_nIp, 1); - gPhoneInfo.SetPhoneMessage_JustOnce(GET_INTEGER_PARAM(0), nil, nil, nil, nil, nil, nil); - return 0; - } - case COMMAND_DRAW_CORONA: - { - uint32 ip = m_nIp; - int32* ptr = GetPointerToScriptVariable(&ip, 0); - CollectParameters(&m_nIp, 9); - CVector pos = GET_VECTOR_PARAM(0); + CollectParameters(&m_nIp, 12); + CVector pos = GET_VECTOR_PARAM(1); if (pos.z <= MAP_Z_LOW_LIMIT) pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - CCoronas::RegisterCorona((uintptr)ptr, GET_INTEGER_PARAM(6), GET_INTEGER_PARAM(7), GET_INTEGER_PARAM(8), - 255, pos, -GET_FLOAT_PARAM(3), 450.0f, GET_INTEGER_PARAM(4), GET_INTEGER_PARAM(5), 1, 0, 0, 0.0f); + float size = Max(0.0f, GET_FLOAT_PARAM(7)); + eParticleObjectType type = (eParticleObjectType)GET_INTEGER_PARAM(0); + RwRGBA color; + if (type == POBJECT_SMOKE_TRAIL){ + color.alpha = -1; + color.red = GET_INTEGER_PARAM(8); + color.green = GET_INTEGER_PARAM(9); + color.blue = GET_INTEGER_PARAM(10); + }else{ + color.alpha = color.red = color.blue = color.green = 0; + } + CVector target = GET_VECTOR_PARAM(4); + CParticleObject::AddObject(type, pos, target, size, GET_INTEGER_PARAM(11), color, 1); return 0; } - /* - case COMMAND_DRAW_LIGHT: + case COMMAND_SET_CHAR_CANT_BE_DRAGGED_OUT: { - CollectParameters(&m_nIp, 6); - CVector pos = GET_VECTOR_PARAM(0); - CVector unused(0.0f, 0.0f, 0.0f); - CPointLights::AddLight(0, GET_VECTOR_PARAM(0), CVector(0.0f, 0.0f, 0.0f), 12.0f, - GET_INTEGER_PARAM(3) / 255.0f, GET_INTEGER_PARAM(4) / 255.0f, GET_INTEGER_PARAM(5) / 255.0f, 0, true); + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + pPed->bDontDragMeOutCar = GET_INTEGER_PARAM(1) != 0; return 0; } - */ - case COMMAND_STORE_WEATHER: - CWeather::StoreWeatherState(); + case COMMAND_TURN_CAR_TO_FACE_COORD: + { + CollectParameters(&m_nIp, 3); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + const CVector& pos = pVehicle->GetPosition(); + float heading = CGeneral::GetATanOfXY(pos.x - GET_FLOAT_PARAM(1), pos.y - GET_FLOAT_PARAM(2)) + HALFPI; + if (heading > TWOPI) + heading -= TWOPI; + pVehicle->SetHeading(heading); return 0; - case COMMAND_RESTORE_WEATHER: - CWeather::RestoreWeatherState(); - case COMMAND_STORE_CLOCK: - CClock::StoreClock(); + } + case COMMAND_IS_CRANE_LIFTING_CAR: + { + CollectParameters(&m_nIp, 3); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(2)); + UpdateCompareFlag(CCranes::IsThisCarPickedUp(GET_FLOAT_PARAM(0), GET_FLOAT_PARAM(1), pVehicle)); return 0; - case COMMAND_RESTORE_CLOCK: - CClock::RestoreClock(); - return 0; - case COMMAND_RESTART_CRITICAL_MISSION: + } + case COMMAND_DRAW_SPHERE: { CollectParameters(&m_nIp, 4); CVector pos = GET_VECTOR_PARAM(0); if (pos.z <= MAP_Z_LOW_LIMIT) pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - CRestart::OverrideNextRestart(pos, GET_FLOAT_PARAM(3)); - if (CWorld::Players[CWorld::PlayerInFocus].m_WBState != WBSTATE_PLAYING) - printf("RESTART_CRITICAL_MISSION - Player state is not PLAYING\n"); - CWorld::Players[CWorld::PlayerInFocus].PlayerFailedCriticalMission(); + C3dMarkers::PlaceMarkerSet((uintptr)this + m_nIp, MARKERTYPE_CYLINDER, pos, GET_FLOAT_PARAM(3), + SPHERE_MARKER_R, SPHERE_MARKER_G, SPHERE_MARKER_B, SPHERE_MARKER_A, + SPHERE_MARKER_PULSE_PERIOD, SPHERE_MARKER_PULSE_FRACTION, 0); return 0; } - case COMMAND_IS_PLAYER_PLAYING: + case COMMAND_SET_CAR_STATUS: + { + CollectParameters(&m_nIp, 2); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + pVehicle->SetStatus(GET_INTEGER_PARAM(1)); + return 0; + } + case COMMAND_IS_CHAR_MALE: { CollectParameters(&m_nIp, 1); - UpdateCompareFlag(CWorld::Players[GET_INTEGER_PARAM(0)].m_WBState == WBSTATE_PLAYING); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + UpdateCompareFlag(pPed->m_nPedType != PEDTYPE_CIVFEMALE && pPed->m_nPedType != PEDTYPE_PROSTITUTE); return 0; } -#ifdef GTA_SCRIPT_COLLECTIVE - case COMMAND_SET_COLL_OBJ_NO_OBJ: - CollectParameters(&m_nIp, 1); - CTheScripts::SetObjectiveForAllPedsInCollective(GET_INTEGER_PARAM(0), OBJECTIVE_NONE); + case COMMAND_SCRIPT_NAME: // vcs done/tested + { + //CollectParameters(&m_nIp, 1); // 0x0A type string include here, GET_INTEGER_PARAM(0) store ip string in collect + //const char *str = GET_INTEGER_PARAM(0) ? (const char *)&CTheScripts::ScriptSpace[GET_INTEGER_PARAM(0)] : nil; + + const char *str = GetKeyFromScript(&m_nIp); + strncpy(strbuff, str, KEY_LENGTH_IN_SCRIPT); + for (int i = 0; i < KEY_LENGTH_IN_SCRIPT; i++) + strbuff[i] = tolower(strbuff[i]); + //m_nIp += KEY_LENGTH_IN_SCRIPT; // lcs + strncpy(m_abScriptName, strbuff, KEY_LENGTH_IN_SCRIPT); return 0; + } + case COMMAND_SAVE_INT_TO_DEBUG_FILE: + // TODO: implement something here + CollectParameters(&m_nIp, 1); + return 0; + case COMMAND_SAVE_FLOAT_TO_DEBUG_FILE: + CollectParameters(&m_nIp, 1); + return 0; + case COMMAND_SAVE_NEWLINE_TO_DEBUG_FILE: + return 0; + case COMMAND_POLICE_RADIO_MESSAGE: + CollectParameters(&m_nIp, 3); + DMAudio.PlaySuspectLastSeen(GET_FLOAT_PARAM(0), GET_FLOAT_PARAM(1), GET_FLOAT_PARAM(2)); + return 0; + case COMMAND_SET_CAR_STRONG: + { + CollectParameters(&m_nIp, 2); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + pVehicle->bTakeLessDamage = GET_INTEGER_PARAM(1) != 0; + return 0; + } + case COMMAND_REMOVE_ROUTE: + { + CollectParameters(&m_nIp, 1); + CRouteNode::RemoveRoute(GET_INTEGER_PARAM(0)); + return 0; + } + case COMMAND_SWITCH_RUBBISH: + { + CollectParameters(&m_nIp, 1); + CRubbish::SetVisibility(GET_INTEGER_PARAM(0) != 0); + return 0; + } + case COMMAND_REMOVE_PARTICLE_EFFECTS_IN_AREA: + { + CollectParameters(&m_nIp, 6); + float x1 = GET_FLOAT_PARAM(0); + float y1 = GET_FLOAT_PARAM(1); + float z1 = GET_FLOAT_PARAM(2); + float x2 = GET_FLOAT_PARAM(3); + float y2 = GET_FLOAT_PARAM(4); + float z2 = GET_FLOAT_PARAM(5); + CParticleObject* tmp = CParticleObject::pCloseListHead; + while (tmp) { + CParticleObject* next = tmp->m_pNext; + if (tmp->IsWithinArea(x1, y1, z1, x2, y2, z2)) + tmp->RemoveObject(); + tmp = next; + } + tmp = CParticleObject::pFarListHead; + while (tmp) { + CParticleObject* next = tmp->m_pNext; + if (tmp->IsWithinArea(x1, y1, z1, x2, y2, z2)) + tmp->RemoveObject(); + tmp = next; + } + return 0; + } + case COMMAND_SWITCH_STREAMING: + CollectParameters(&m_nIp, 1); + CStreaming::ms_disableStreaming = GET_INTEGER_PARAM(0) == 0; + return 0; + case COMMAND_IS_GARAGE_OPEN: + CollectParameters(&m_nIp, 1); + UpdateCompareFlag(CGarages::IsGarageOpen(GET_INTEGER_PARAM(0))); + return 0; + case COMMAND_IS_GARAGE_CLOSED: + CollectParameters(&m_nIp, 1); + UpdateCompareFlag(CGarages::IsGarageClosed(GET_INTEGER_PARAM(0))); + return 0; + case COMMAND_SWAP_NEAREST_BUILDING_MODEL: + { + CollectParameters(&m_nIp, 6); + CTheScripts::SwapNearestBuildingModel(GET_FLOAT_PARAM(0), GET_FLOAT_PARAM(1), GET_FLOAT_PARAM(2), GET_FLOAT_PARAM(3), GET_INTEGER_PARAM(4), GET_INTEGER_PARAM(5)); + return 0; + } + case COMMAND_SWITCH_WORLD_PROCESSING: + CollectParameters(&m_nIp, 1); + CWorld::bProcessCutsceneOnly = GET_INTEGER_PARAM(0) == 0; + return 0; + case COMMAND_CLEAR_AREA_OF_CARS: + { + CollectParameters(&m_nIp, 6); + float infX = GET_FLOAT_PARAM(0); + float infY = GET_FLOAT_PARAM(1); + float infZ = GET_FLOAT_PARAM(2); + float supX = GET_FLOAT_PARAM(3); + float supY = GET_FLOAT_PARAM(4); + float supZ = GET_FLOAT_PARAM(5); + if (infX > supX) { + infX = GET_FLOAT_PARAM(3); + supX = GET_FLOAT_PARAM(0); + } + if (infY > supY) { + infY = GET_FLOAT_PARAM(4); + supY = GET_FLOAT_PARAM(1); + } + if (infZ > supZ) { + infZ = GET_FLOAT_PARAM(5); + supZ = GET_FLOAT_PARAM(2); + } + CWorld::ClearCarsFromArea(infX, infY, infZ, supX, supY, supZ); + return 0; + } + case COMMAND_SET_ROTATING_GARAGE_DOOR: + CollectParameters(&m_nIp, 1); + CGarages::SetGarageDoorToRotate(GET_INTEGER_PARAM(0)); + return 0; + case COMMAND_ADD_SPHERE: + { + CollectParameters(&m_nIp, 4); + CVector pos = GET_VECTOR_PARAM(0); + if (pos.z <= MAP_Z_LOW_LIMIT) + pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); + float radius = GET_FLOAT_PARAM(3); + CTheScripts::GetActualScriptSphereIndex(CollectNextParameterWithoutIncreasingPC(m_nIp)); + SET_INTEGER_PARAM(0, CTheScripts::AddScriptSphere((uintptr)this + m_nIp, pos, radius)); + StoreParameters(&m_nIp, 1); + return 0; + } + case COMMAND_REMOVE_SPHERE: + CollectParameters(&m_nIp, 1); + CTheScripts::RemoveScriptSphere(GET_INTEGER_PARAM(0)); + return 0; + case COMMAND_SET_EVERYONE_IGNORE_PLAYER: + { + CollectParameters(&m_nIp, 2); + CPlayerPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; + script_assert(pPed); + if (GET_INTEGER_PARAM(1)) { + pPed->m_pWanted->m_bIgnoredByEveryone = true; + CWorld::StopAllLawEnforcersInTheirTracks(); + } + else { + pPed->m_pWanted->m_bIgnoredByEveryone = false; + } + return 0; + } + case COMMAND_STORE_CAR_CHAR_IS_IN_NO_SAVE: + { + CollectParameters(&m_nIp, 1); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + CVehicle* pVehicle = pPed->bInVehicle ? pPed->m_pMyVehicle : nil; + SET_INTEGER_PARAM(0, CPools::GetVehiclePool()->GetIndex(pVehicle)); + StoreParameters(&m_nIp, 1); + return 0; + } + case COMMAND_DISPLAY_ONSCREEN_TIMER_WITH_STRING: + { + uint16 var = (uint8*)GetPointerToScriptVariable(&m_nIp) - CTheScripts::ScriptSpace; + CollectParameters(&m_nIp, 1); + wchar* text = TheText.Get((char*)&CTheScripts::ScriptSpace[m_nIp]); // ??? + strncpy(onscreen_str, (char*)&CTheScripts::ScriptSpace[m_nIp], KEY_LENGTH_IN_SCRIPT); + m_nIp += KEY_LENGTH_IN_SCRIPT; + CUserDisplay::OnscnTimer.AddClock(var, onscreen_str, GET_INTEGER_PARAM(0) != 0); + return 0; + } + case COMMAND_DISPLAY_ONSCREEN_COUNTER_WITH_STRING: + { + uint16 var = (uint8*)GetPointerToScriptVariable(&m_nIp) - CTheScripts::ScriptSpace; + CollectParameters(&m_nIp, 1); + wchar* text = TheText.Get((char*)&CTheScripts::ScriptSpace[m_nIp]); // ??? + strncpy(onscreen_str, (char*)&CTheScripts::ScriptSpace[m_nIp], KEY_LENGTH_IN_SCRIPT); + m_nIp += KEY_LENGTH_IN_SCRIPT; + CUserDisplay::OnscnTimer.AddCounter(var, GET_INTEGER_PARAM(0), onscreen_str, 0, -1, nil, 0); + return 0; + } + case COMMAND_CREATE_RANDOM_CAR_FOR_CAR_PARK: + { + CollectParameters(&m_nIp, 4); + if (CCarCtrl::NumRandomCars >= 30) + return 0; + int attempts; + int model = -1; + int index = CGeneral::GetRandomNumberInRange(0, MAXVEHICLESLOADED); + for (attempts = 0; attempts < MAXVEHICLESLOADED; attempts++) { + if (model != -1) + break; + model = CStreaming::ms_vehiclesLoaded[index]; + if (model == -1) + continue; + if (CModelInfo::IsCarModel(model) || CModelInfo::IsBikeModel(model)) { + switch (model) { + case MI_LANDSTAL: + case MI_LINERUN: + case MI_RIO: + case MI_FIRETRUCK: + case MI_TRASH: + case MI_STRETCH: + case MI_VOODOO: + case MI_MULE: + case MI_AMBULAN: + case MI_FBICAR: + case MI_MRWHOOP: + case MI_BFINJECT: + case MI_HEARSE: + case MI_HUNTER: + case MI_POLICE: + case MI_ENFORCER: + case MI_SECURICA: + case MI_PREDATOR: + case MI_BUS: + case MI_RHINO: + case MI_BARRACKS: + case MI_CUBAN: + case MI_CHOPPER: + case MI_ANGEL: + case MI_COACH: + case MI_RCBANDIT: + case MI_PACKER: + case MI_SENTXS: + case MI_SQUALO: + case MI_SEASPAR: + case MI_PIZZABOY: + case MI_NOODLEBOY: + case MI_ANGEL2: + case MI_SANCHEZ2: + case MI_GANGBUR: + case MI_AIRTRAIN: + case MI_DEADDODO: + case MI_SPEEDER: + case MI_REEFER: + case MI_TROPIC: + case MI_FLATBED: + case MI_YANKEE: + case MI_CADDY: + case MI_BORGNINE: + case MI_TOPFUN: + case MI_CAMPVAN: + case MI_BALLOT: + case MI_SKIMMER: + case MI_RCBARON: + case MI_RCRAIDER: + case MI_SPARROW: + case MI_PATRIOT: + case MI_LOVEFIST: + case MI_COASTG: + case MI_DINGHY: + case MI_HERMES: + case MI_SABRETUR: + case MI_PHEONIX: + case MI_WALTON: + case MI_COMET: + case MI_DELUXO: + case MI_BURRITO: + case MI_SPAND: + case MI_MARQUIS: + case MI_BAGGAGE: + case MI_KAUFMAN: + case MI_MAVERICK: + case MI_VCNMAV: + case MI_RANCHER: + case MI_FBIRANCH: + case MI_JETMAX: + case MI_HOTRING: + case MI_SANDKING: + case MI_BLISTAC: + case MI_POLMAV: + case MI_BOXVILLE: + case MI_BENSON: + case MI_MESA: + case MI_RCGOBLIN: + case MI_HOTRINA: + case MI_HOTRINB: + case MI_BLOODRA: + case MI_BLOODRB: + case MI_VICECHEE: + case MI_CABBIE: + case MI_MAFIA: + model = -1; + break; + case MI_IDAHO: + case MI_STINGER: + case MI_PEREN: + case MI_SENTINEL: + case MI_MANANA: + case MI_INFERNUS: + case MI_PONY: + case MI_CHEETAH: + case MI_MOONBEAM: + case MI_ESPERANT: + case MI_TAXI: + case MI_WASHING: + case MI_BOBCAT: + case MI_BANSHEE: + case MI_STALLION: + case MI_RUMPO: + case MI_ADMIRAL: + case MI_PCJ600: + case MI_FAGGIO: + case MI_FREEWAY: + case MI_GLENDALE: + case MI_OCEANIC: + case MI_SANCHEZ: + case MI_SABRE: + case MI_REGINA: + case MI_VIRGO: + case MI_GREENWOO: + break; + default: + printf("CREATE_RANDOM_CAR_FOR_CAR_PARK - Unknown car model %d\n", CStreaming::ms_vehiclesLoaded[index]); + model = -1; + break; + } + } + else + model = -1; + if (++index >= 50) + index = 0; + } + if (model == -1) + return 0; + CVehicle* car; + if (CModelInfo::IsBikeModel(model)) { + car = new CBike(model, RANDOM_VEHICLE); + ((CBike*)(car))->bIsStanding = true; + } + else + car = new CAutomobile(model, RANDOM_VEHICLE); + CVector pos = GET_VECTOR_PARAM(0); + pos.z += car->GetDistanceFromCentreOfMassToBaseOfModel(); + car->SetPosition(pos); + car->SetHeading(DEGTORAD(GET_FLOAT_PARAM(3))); + CTheScripts::ClearSpaceForMissionEntity(pos, car); + car->SetStatus(STATUS_ABANDONED); + car->bIsLocked = false; + car->bIsCarParkVehicle = true; + CCarCtrl::JoinCarWithRoadSystem(car); + car->AutoPilot.m_nCarMission = MISSION_NONE; + car->AutoPilot.m_nTempAction = TEMPACT_NONE; + car->AutoPilot.m_nDrivingStyle = DRIVINGSTYLE_STOP_FOR_CARS; + car->AutoPilot.m_nCruiseSpeed = car->AutoPilot.m_fMaxTrafficSpeed = 9.0f; + car->AutoPilot.m_nCurrentLane = car->AutoPilot.m_nNextLane = 0; + car->bEngineOn = false; + car->m_nZoneLevel = CTheZones::GetLevelFromPosition(&pos); + CWorld::Add(car); + return 0; + } + case COMMAND_SET_WANTED_MULTIPLIER: + CollectParameters(&m_nIp, 1); + FindPlayerPed()->m_pWanted->m_fCrimeSensitivity = GET_FLOAT_PARAM(0); + return 0; + case COMMAND_SET_CAMERA_IN_FRONT_OF_PLAYER: + TheCamera.SetCameraDirectlyInFrontForFollowPed_CamOnAString(); + return 0; + case COMMAND_IS_CAR_VISIBLY_DAMAGED: + { + CollectParameters(&m_nIp, 1); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + UpdateCompareFlag(pVehicle->bIsDamaged); + return 0; + } + case COMMAND_DOES_OBJECT_EXIST: + CollectParameters(&m_nIp, 1); + UpdateCompareFlag(CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0))); + return 0; + case COMMAND_LOAD_SCENE: + { + CollectParameters(&m_nIp, 3); + CVector pos = GET_VECTOR_PARAM(0); +#ifdef FIX_BUGS + CTimer::Suspend(); +#else + CTimer::Stop(); #endif + CStreaming::LoadSceneCollision(pos); +#ifdef FIX_BUGS + CTimer::Suspend(); +#else + CTimer::Update(); +#endif + return 0; + } + case COMMAND_ADD_STUCK_CAR_CHECK: + { + CollectParameters(&m_nIp, 3); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + CTheScripts::StuckCars.AddCarToCheck(GET_INTEGER_PARAM(0), GET_FLOAT_PARAM(1), GET_INTEGER_PARAM(2)); + return 0; + } + case COMMAND_REMOVE_STUCK_CAR_CHECK: + { + CollectParameters(&m_nIp, 1); + CTheScripts::StuckCars.RemoveCarFromCheck(GET_INTEGER_PARAM(0)); + return 0; + } + case COMMAND_IS_CAR_STUCK: + CollectParameters(&m_nIp, 1); + UpdateCompareFlag(CTheScripts::StuckCars.HasCarBeenStuckForAWhile(GET_INTEGER_PARAM(0))); + return 0; + case COMMAND_LOAD_MISSION_AUDIO: + { + script_assert(false && "todo string arg"); + CollectParameters(&m_nIp, 1); + strncpy(strbuff, (char*)&CTheScripts::ScriptSpace[m_nIp], KEY_LENGTH_IN_SCRIPT); + for (int i = 0; i < KEY_LENGTH_IN_SCRIPT; i++) + strbuff[i] = tolower(strbuff[i]); + m_nIp += KEY_LENGTH_IN_SCRIPT; + DMAudio.PreloadMissionAudio(GET_INTEGER_PARAM(0) - 1, strbuff); + return 0; + } + default: script_assert(0); } @@ -911,656 +1432,757 @@ int8 CRunningScript::ProcessCommands500To599(int32 command) int8 CRunningScript::ProcessCommands600To699(int32 command) { + char tmp[48]; switch (command){ -#ifdef GTA_SCRIPT_COLLECTIVE - case COMMAND_SET_COLL_OBJ_WAIT_ON_FOOT: + case COMMAND_HAS_MISSION_AUDIO_LOADED: + { CollectParameters(&m_nIp, 1); - CTheScripts::SetObjectiveForAllPedsInCollective(GET_INTEGER_PARAM(0), OBJECTIVE_WAIT_ON_FOOT); + UpdateCompareFlag(DMAudio.GetMissionAudioLoadingStatus(GET_INTEGER_PARAM(0) - 1) == 1); return 0; - case COMMAND_SET_COLL_OBJ_FLEE_ON_FOOT_TILL_SAFE: + } + case todo__comm_601: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_601"); + return 0; + } + case COMMAND_HAS_MISSION_AUDIO_FINISHED: + { CollectParameters(&m_nIp, 1); - CTheScripts::SetObjectiveForAllPedsInCollective(GET_INTEGER_PARAM(0), OBJECTIVE_FLEE_ON_FOOT_TILL_SAFE); + UpdateCompareFlag(DMAudio.IsMissionAudioSampleFinished(GET_INTEGER_PARAM(0) - 1)); return 0; - case COMMAND_SET_COLL_OBJ_GUARD_SPOT: + } + case COMMAND_GET_CLOSEST_CAR_NODE_WITH_HEADING: + { + CollectParameters(&m_nIp, 3); + CVector pos = GET_VECTOR_PARAM(0); + if (pos.z <= MAP_Z_LOW_LIMIT) + pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); + int node = ThePaths.FindNodeClosestToCoors(pos, 0, 999999.9f, true, true); + SET_VECTOR_PARAM(0, ThePaths.FindNodeCoorsForScript(node)); + SET_FLOAT_PARAM(3, ThePaths.FindNodeOrientationForCarPlacement(node)); + StoreParameters(&m_nIp, 4); + return 0; + } + case COMMAND_HAS_IMPORT_GARAGE_SLOT_BEEN_FILLED: + { + CollectParameters(&m_nIp, 2); + UpdateCompareFlag(CGarages::HasImportExportGarageCollectedThisCar(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1) - 1)); + return 0; + } + case COMMAND_CLEAR_THIS_PRINT: + { + wchar* text = GetTextByKeyFromScript(&m_nIp); + CMessages::ClearThisPrint(text); + return 0; + } + case COMMAND_CLEAR_THIS_BIG_PRINT: + { + wchar* text = GetTextByKeyFromScript(&m_nIp); + CMessages::ClearThisBigPrint(text); + return 0; + } + case COMMAND_SET_MISSION_AUDIO_POSITION: { CollectParameters(&m_nIp, 4); CVector pos = GET_VECTOR_PARAM(1); - if (pos.z <= MAP_Z_LOW_LIMIT) - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - CTheScripts::SetObjectiveForAllPedsInCollective(GET_INTEGER_PARAM(0), OBJECTIVE_GUARD_AREA, pos); + DMAudio.SetMissionAudioLocation(GET_INTEGER_PARAM(0) - 1, pos.x, pos.y, pos.z); return 0; } - case COMMAND_SET_COLL_OBJ_GUARD_AREA: + case COMMAND_ACTIVATE_SAVE_MENU: { - CollectParameters(&m_nIp, 5); - float infX = GET_FLOAT_PARAM(1); - float supX = GET_FLOAT_PARAM(3); - if (infX > supX) { - infX = GET_FLOAT_PARAM(3); - supX = GET_FLOAT_PARAM(1); - } - float infY = GET_FLOAT_PARAM(2); - float supY = GET_FLOAT_PARAM(4); - if (infY > supY) { - infY = GET_FLOAT_PARAM(4); - supY = GET_FLOAT_PARAM(2); - } - CVector pos; - pos.x = (infX + supX) / 2; - pos.y = (infY + supY) / 2; - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - float radius = Max(pos.x - infX, pos.y - infY); - CTheScripts::SetObjectiveForAllPedsInCollective(GET_INTEGER_PARAM(0), OBJECTIVE_GUARD_AREA, pos, radius); + CStats::SafeHouseVisits++; + FrontEndMenuManager.m_bActivateSaveMenu = true; + FindPlayerPed()->SetMoveSpeed(0.0f, 0.0f, 0.0f); + FindPlayerPed()->SetTurnSpeed(0.0f, 0.0f, 0.0f); return 0; } - case COMMAND_SET_COLL_OBJ_WAIT_IN_CAR: + case COMMAND_HAS_SAVE_GAME_FINISHED: + UpdateCompareFlag(!FrontEndMenuManager.m_bMenuActive && !FrontEndMenuManager.m_bActivateSaveMenu); + return 0; + case COMMAND_NO_SPECIAL_CAMERA_FOR_THIS_GARAGE: CollectParameters(&m_nIp, 1); - CTheScripts::SetObjectiveForAllPedsInCollective(GET_INTEGER_PARAM(0), OBJECTIVE_WAIT_IN_CAR); + CGarages::SetLeaveCameraForThisGarage(GET_INTEGER_PARAM(0)); return 0; - case COMMAND_SET_COLL_OBJ_KILL_CHAR_ON_FOOT: + case COMMAND_ADD_BLIP_FOR_PICKUP: { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(1)); - CTheScripts::SetObjectiveForAllPedsInCollective(GET_INTEGER_PARAM(0), OBJECTIVE_KILL_CHAR_ON_FOOT, pPed); - return 0; - } - case COMMAND_SET_COLL_OBJ_KILL_PLAYER_ON_FOOT: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CWorld::Players[GET_INTEGER_PARAM(1)].m_pPed; - CTheScripts::SetObjectiveForAllPedsInCollective(GET_INTEGER_PARAM(0), OBJECTIVE_KILL_CHAR_ON_FOOT, pPed); - return 0; - } - case COMMAND_SET_COLL_OBJ_KILL_CHAR_ANY_MEANS: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(1)); - CTheScripts::SetObjectiveForAllPedsInCollective(GET_INTEGER_PARAM(0), OBJECTIVE_KILL_CHAR_ANY_MEANS, pPed); - return 0; - } - case COMMAND_SET_COLL_OBJ_KILL_PLAYER_ANY_MEANS: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CWorld::Players[GET_INTEGER_PARAM(1)].m_pPed; - CTheScripts::SetObjectiveForAllPedsInCollective(GET_INTEGER_PARAM(0), OBJECTIVE_KILL_CHAR_ANY_MEANS, pPed); - return 0; - } - case COMMAND_SET_COLL_OBJ_FLEE_CHAR_ON_FOOT_TILL_SAFE: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(1)); - CTheScripts::SetObjectiveForAllPedsInCollective(GET_INTEGER_PARAM(0), OBJECTIVE_FLEE_CHAR_ON_FOOT_TILL_SAFE, pPed); - return 0; - } - case COMMAND_SET_COLL_OBJ_FLEE_PLAYER_ON_FOOT_TILL_SAFE: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CWorld::Players[GET_INTEGER_PARAM(1)].m_pPed; - CTheScripts::SetObjectiveForAllPedsInCollective(GET_INTEGER_PARAM(0), OBJECTIVE_FLEE_CHAR_ON_FOOT_TILL_SAFE, pPed); - return 0; - } - case COMMAND_SET_COLL_OBJ_FLEE_CHAR_ON_FOOT_ALWAYS: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(1)); - CTheScripts::SetObjectiveForAllPedsInCollective(GET_INTEGER_PARAM(0), OBJECTIVE_FLEE_CHAR_ON_FOOT_ALWAYS, pPed); - return 0; - } - case COMMAND_SET_COLL_OBJ_FLEE_PLAYER_ON_FOOT_ALWAYS: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CWorld::Players[GET_INTEGER_PARAM(1)].m_pPed; - CTheScripts::SetObjectiveForAllPedsInCollective(GET_INTEGER_PARAM(0), OBJECTIVE_FLEE_CHAR_ON_FOOT_ALWAYS, pPed); - return 0; - } - case COMMAND_SET_COLL_OBJ_GOTO_CHAR_ON_FOOT: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(1)); - CTheScripts::SetObjectiveForAllPedsInCollective(GET_INTEGER_PARAM(0), OBJECTIVE_GOTO_CHAR_ON_FOOT, pPed); - return 0; - } - case COMMAND_SET_COLL_OBJ_GOTO_PLAYER_ON_FOOT: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CWorld::Players[GET_INTEGER_PARAM(1)].m_pPed; - CTheScripts::SetObjectiveForAllPedsInCollective(GET_INTEGER_PARAM(0), OBJECTIVE_GOTO_CHAR_ON_FOOT, pPed); - return 0; - } - case COMMAND_SET_COLL_OBJ_LEAVE_CAR: CollectParameters(&m_nIp, 1); - CTheScripts::SetObjectiveForAllPedsInCollective(GET_INTEGER_PARAM(0), OBJECTIVE_LEAVE_CAR); - return 0; - case COMMAND_SET_COLL_OBJ_ENTER_CAR_AS_PASSENGER: - { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); - CTheScripts::SetObjectiveForAllPedsInCollective(GET_INTEGER_PARAM(0), OBJECTIVE_ENTER_CAR_AS_PASSENGER, pVehicle); - return 0; - } - case COMMAND_SET_COLL_OBJ_ENTER_CAR_AS_DRIVER: - { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); - CTheScripts::SetObjectiveForAllPedsInCollective(GET_INTEGER_PARAM(0), OBJECTIVE_ENTER_CAR_AS_DRIVER, pVehicle); - return 0; - } - /* - case COMMAND_SET_COLL_OBJ_FOLLOW_CAR_IN_CAR: - case COMMAND_SET_COLL_OBJ_FIRE_AT_OBJECT_FROM_VEHICLE: - case COMMAND_SET_COLL_OBJ_DESTROY_OBJECT: - */ - case COMMAND_SET_COLL_OBJ_DESTROY_CAR: - { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); - CTheScripts::SetObjectiveForAllPedsInCollective(GET_INTEGER_PARAM(0), OBJECTIVE_DESTROY_CAR, pVehicle); - return 0; - } - case COMMAND_SET_COLL_OBJ_GOTO_AREA_ON_FOOT: - { - CollectParameters(&m_nIp, 5); - float infX = GET_FLOAT_PARAM(1); - float supX = GET_FLOAT_PARAM(3); - if (infX > supX) { - infX = GET_FLOAT_PARAM(3); - supX = GET_FLOAT_PARAM(1); - } - float infY = GET_FLOAT_PARAM(2); - float supY = GET_FLOAT_PARAM(4); - if (infY > supY) { - infY = GET_FLOAT_PARAM(4); - supY = GET_FLOAT_PARAM(2); - } - CVector pos; - pos.x = (infX + supX) / 2; - pos.y = (infY + supY) / 2; - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - float radius = Max(pos.x - infX, pos.y - infY); - CTheScripts::SetObjectiveForAllPedsInCollective(GET_INTEGER_PARAM(0), OBJECTIVE_GOTO_AREA_ON_FOOT, pos, radius); - return 0; - } - /* - case COMMAND_SET_COLL_OBJ_GOTO_AREA_IN_CAR: - case COMMAND_SET_COLL_OBJ_FOLLOW_CAR_ON_FOOT_WITH_OFFSET: - case COMMAND_SET_COLL_OBJ_GUARD_ATTACK: - */ - case COMMAND_SET_COLL_OBJ_FOLLOW_ROUTE: - CollectParameters(&m_nIp, 3); - CTheScripts::SetObjectiveForAllPedsInCollective(GET_INTEGER_PARAM(0), OBJECTIVE_FOLLOW_ROUTE, GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2)); - return 0; - case COMMAND_SET_COLL_OBJ_GOTO_COORD_ON_FOOT: - { - CollectParameters(&m_nIp, 3); - CVector pos(GET_FLOAT_PARAM(1), GET_FLOAT_PARAM(2), CWorld::FindGroundZForCoord(GET_FLOAT_PARAM(1), GET_FLOAT_PARAM(2))); - CTheScripts::SetObjectiveForAllPedsInCollective(GET_INTEGER_PARAM(0), OBJECTIVE_GOTO_AREA_ON_FOOT, pos); - return 0; - } - //case COMMAND_SET_COLL_OBJ_GOTO_COORD_IN_CAR: - case COMMAND_SET_COLL_OBJ_RUN_TO_AREA: - { - CollectParameters(&m_nIp, 5); - float infX = GET_FLOAT_PARAM(1); - float supX = GET_FLOAT_PARAM(3); - if (infX > supX) { - infX = GET_FLOAT_PARAM(3); - supX = GET_FLOAT_PARAM(1); - } - float infY = GET_FLOAT_PARAM(2); - float supY = GET_FLOAT_PARAM(4); - if (infY > supY) { - infY = GET_FLOAT_PARAM(4); - supY = GET_FLOAT_PARAM(2); - } - CVector pos; - pos.x = (infX + supX) / 2; - pos.y = (infY + supY) / 2; - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - float radius = Max(pos.x - infX, pos.y - infY); - CTheScripts::SetObjectiveForAllPedsInCollective(GET_INTEGER_PARAM(0), OBJECTIVE_RUN_TO_AREA, pos, radius); - return 0; - } - case COMMAND_SET_COLL_OBJ_RUN_TO_COORD: - { - CollectParameters(&m_nIp, 3); - CVector pos(GET_FLOAT_PARAM(1), GET_FLOAT_PARAM(2), CWorld::FindGroundZForCoord(GET_FLOAT_PARAM(1), GET_FLOAT_PARAM(2))); - CTheScripts::SetObjectiveForAllPedsInCollective(GET_INTEGER_PARAM(0), OBJECTIVE_RUN_TO_AREA, pos); - return 0; - } - case COMMAND_ADD_PEDS_IN_AREA_TO_COLL: - { - CollectParameters(&m_nIp, 3); - float X = GET_FLOAT_PARAM(0); - float Y = GET_FLOAT_PARAM(1); - float Z = CWorld::FindGroundZForCoord(X, Y); - float radius = GET_FLOAT_PARAM(2); - SET_INTEGER_PARAM(0, CTheScripts::AddPedsInAreaToCollective(X, Y, Z, radius)); + CObject* pObject = CPickups::aPickUps[CPickups::GetActualPickupIndex(GET_INTEGER_PARAM(0))].m_pObject; + CRadar::GetActualBlipArrayIndex(CollectNextParameterWithoutIncreasingPC(m_nIp)); + int handle = CRadar::SetEntityBlip(BLIP_OBJECT, CPools::GetObjectPool()->GetIndex(pObject), 6, BLIP_DISPLAY_BOTH); + CRadar::ChangeBlipScale(handle, 3); + SET_INTEGER_PARAM(0, handle); StoreParameters(&m_nIp, 1); return 0; } - case COMMAND_ADD_PEDS_IN_VEHICLE_TO_COLL: + case COMMAND_SET_PED_DENSITY_MULTIPLIER: CollectParameters(&m_nIp, 1); - SET_INTEGER_PARAM(0, CTheScripts::AddPedsInVehicleToCollective(GET_INTEGER_PARAM(0))); - StoreParameters(&m_nIp, 1); + CPopulation::PedDensityMultiplier = GET_FLOAT_PARAM(0); return 0; - case COMMAND_CLEAR_COLL: + case COMMAND_FORCE_RANDOM_PED_TYPE: CollectParameters(&m_nIp, 1); - for (int i = 0; i < MAX_NUM_COLLECTIVES; i++) { - if (CTheScripts::CollectiveArray[i].colIndex == GET_INTEGER_PARAM(0)) { - CTheScripts::CollectiveArray[i].colIndex = -1; - CTheScripts::CollectiveArray[i].pedIndex = 0; - } - } + CPopulation::m_AllRandomPedsThisType = GET_INTEGER_PARAM(0); return 0; - case COMMAND_IS_COLL_IN_CARS: + case COMMAND_SET_TEXT_RIGHT_JUSTIFY: + CollectParameters(&m_nIp, 1); + CTheScripts::IntroTextLines[CTheScripts::NumberOfIntroTextLinesThisFrame].m_bRightJustify = GET_INTEGER_PARAM(0) != 0; + return 0; + case COMMAND_PRINT_HELP: { - CollectParameters(&m_nIp, 1); - bool result = true; - for (int i = 0; i < MAX_NUM_COLLECTIVES; i++) { - CPed* pPed = CPools::GetPedPool()->GetAt(CTheScripts::CollectiveArray[i].pedIndex); - if (!pPed) { - CTheScripts::CollectiveArray[i].colIndex = -1; - CTheScripts::CollectiveArray[i].pedIndex = 0; - } - else { - result = false; - break; - } + /* maybe will be useful? TODO + if (CCamera::m_bUseMouse3rdPerson && ( + strcmp((char*)&CTheScripts::ScriptSpace[m_nIp], "HELP15") == 0 || + strcmp((char*)&CTheScripts::ScriptSpace[m_nIp], "GUN_2A") == 0 || + strcmp((char*)&CTheScripts::ScriptSpace[m_nIp], "GUN_2C") == 0 || + strcmp((char*)&CTheScripts::ScriptSpace[m_nIp], "GUN_2D") == 0)) { + m_nIp += KEY_LENGTH_IN_SCRIPT; + return 0; } - UpdateCompareFlag(result); + */ + wchar* text = GetTextByKeyFromScript(&m_nIp); + CHud::SetHelpMessage(text, false); return 0; } - case COMMAND_LOCATE_COLL_ANY_MEANS_2D: - case COMMAND_LOCATE_COLL_ON_FOOT_2D: - case COMMAND_LOCATE_COLL_IN_CAR_2D: - case COMMAND_LOCATE_STOPPED_COLL_ANY_MEANS_2D: - case COMMAND_LOCATE_STOPPED_COLL_ON_FOOT_2D: - case COMMAND_LOCATE_STOPPED_COLL_IN_CAR_2D: - LocateCollectiveCommand(command, &m_nIp); + case COMMAND_CLEAR_HELP: + //CHud::gLastPrintForeverString = false; TODO + CHud::SetHelpMessage(nil, false); return 0; - case COMMAND_LOCATE_COLL_ANY_MEANS_CHAR_2D: - case COMMAND_LOCATE_COLL_ON_FOOT_CHAR_2D: - case COMMAND_LOCATE_COLL_IN_CAR_CHAR_2D: - LocateCollectiveCharCommand(command, &m_nIp); + case COMMAND_FLASH_HUD_OBJECT: + CollectParameters(&m_nIp, 1); + CHud::m_ItemToFlash = GET_INTEGER_PARAM(0); return 0; - case COMMAND_LOCATE_COLL_ANY_MEANS_CAR_2D: - case COMMAND_LOCATE_COLL_ON_FOOT_CAR_2D: - case COMMAND_LOCATE_COLL_IN_CAR_CAR_2D: - LocateCollectiveCarCommand(command, &m_nIp); - return 0; - case COMMAND_LOCATE_COLL_ANY_MEANS_PLAYER_2D: - case COMMAND_LOCATE_COLL_ON_FOOT_PLAYER_2D: - case COMMAND_LOCATE_COLL_IN_CAR_PLAYER_2D: - LocateCollectivePlayerCommand(command, &m_nIp); - return 0; - case COMMAND_IS_COLL_IN_AREA_2D: - case COMMAND_IS_COLL_IN_AREA_ON_FOOT_2D: - case COMMAND_IS_COLL_IN_AREA_IN_CAR_2D: - case COMMAND_IS_COLL_STOPPED_IN_AREA_2D: - case COMMAND_IS_COLL_STOPPED_IN_AREA_ON_FOOT_2D: - case COMMAND_IS_COLL_STOPPED_IN_AREA_IN_CAR_2D: - CollectiveInAreaCheckCommand(command, &m_nIp); - return 0; - case COMMAND_GET_NUMBER_OF_PEDS_IN_COLL: + case COMMAND_IS_CHAR_IN_CONTROL: { CollectParameters(&m_nIp, 1); - int total = 0; - for (int i = 0; i < MAX_NUM_COLLECTIVES; i++) { - CPed* pPed = CPools::GetPedPool()->GetAt(CTheScripts::CollectiveArray[i].pedIndex); - if (!pPed) { - CTheScripts::CollectiveArray[i].colIndex = -1; - CTheScripts::CollectiveArray[i].pedIndex = 0; - } - else { - total++; - } - } - SET_INTEGER_PARAM(0, total); - StoreParameters(&m_nIp, 1); - return 0; - } -#endif - case COMMAND_SET_CHAR_HEED_THREATS: - { - CollectParameters(&m_nIp, 2); CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - pPed->bRespondsToThreats = (GET_INTEGER_PARAM(1) != 0); + UpdateCompareFlag(pPed->IsPedInControl()); return 0; } - case COMMAND_SET_PLAYER_HEED_THREATS: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(pPed); - pPed->bRespondsToThreats = (GET_INTEGER_PARAM(1) != 0); + case COMMAND_SET_GENERATE_CARS_AROUND_CAMERA: + CollectParameters(&m_nIp, 1); + CCarCtrl::bCarsGeneratedAroundCamera = (GET_INTEGER_PARAM(0) != 0); return 0; - } - case COMMAND_GET_CONTROLLER_MODE: -#if defined(GTA_PC) && !defined(DETECT_PAD_INPUT_SWITCH) - SET_INTEGER_PARAM(0, 0); -#else - SET_INTEGER_PARAM(0, CPad::IsAffectedByController ? CPad::GetPad(0)->Mode : 0); -#endif - StoreParameters(&m_nIp, 1); + case COMMAND_CLEAR_SMALL_PRINTS: + CMessages::ClearSmallMessagesOnly(); + //CHud::ClearSmallMessages(); // TODO return 0; - case COMMAND_SET_CAN_RESPRAY_CAR: + case COMMAND_SET_UPSIDEDOWN_CAR_NOT_DAMAGED: { CollectParameters(&m_nIp, 2); CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); script_assert(pVehicle); //assert(pVehicle->m_vehType == VEHICLE_TYPE_CAR); - // they DO call this for bikes, we don't really want to destroy the structure... + // they call this for bikes again, we don't really want to destroy the structure... #ifdef FIX_BUGS if (pVehicle->m_vehType == VEHICLE_TYPE_CAR) #endif - ((CAutomobile*)pVehicle)->bFixedColour = (GET_INTEGER_PARAM(1) == 0); -#ifdef FIX_BUGS - else if (pVehicle->m_vehType == VEHICLE_TYPE_BIKE) - ((CBike*)pVehicle)->bFixedColour = (GET_INTEGER_PARAM(1) == 0); -#endif - + ((CAutomobile*)pVehicle)->bNotDamagedUpsideDown = (GET_INTEGER_PARAM(1) != 0); return 0; } - case COMMAND_IS_TAXI: + case COMMAND_CAN_PLAYER_START_MISSION: + { + CollectParameters(&m_nIp, 1); + CPlayerPed* pPlayerPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; + script_assert(pPlayerPed); + UpdateCompareFlag(pPlayerPed->CanStartMission() || pPlayerPed->m_nPedState == PED_DRIVING); + return 0; + } + case COMMAND_MAKE_PLAYER_SAFE_FOR_CUTSCENE: + { + CollectParameters(&m_nIp, 1); + CPlayerInfo* pPlayerInfo = &CWorld::Players[GET_INTEGER_PARAM(0)]; + CPad::GetPad(GET_INTEGER_PARAM(0))->SetDisablePlayerControls(PLAYERCONTROL_CUTSCENE); + pPlayerInfo->MakePlayerSafe(true); + CCutsceneMgr::StartCutsceneProcessing(); + return 0; + } + case COMMAND_USE_TEXT_COMMANDS: + CollectParameters(&m_nIp, 1); + CTheScripts::UseTextCommands = (GET_INTEGER_PARAM(0) != 0) ? 2 : 1; + return 0; + case COMMAND_SET_THREAT_FOR_PED_TYPE: + CollectParameters(&m_nIp, 2); + CPedType::AddThreat(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); + return 0; + case COMMAND_CLEAR_THREAT_FOR_PED_TYPE: + CollectParameters(&m_nIp, 2); + CPedType::RemoveThreat(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); + return 0; + case COMMAND_GET_CAR_COLOURS: { CollectParameters(&m_nIp, 1); CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); script_assert(pVehicle); - UpdateCompareFlag(pVehicle->IsTaxi()); + SET_INTEGER_PARAM(0, pVehicle->m_currentColour1); + SET_INTEGER_PARAM(1, pVehicle->m_currentColour2); + StoreParameters(&m_nIp, 2); return 0; } - case COMMAND_UNLOAD_SPECIAL_CHARACTER: + case COMMAND_SET_ALL_CARS_CAN_BE_DAMAGED: CollectParameters(&m_nIp, 1); - if (m_bIsMissionScript) - CStreaming::SetMissionDoesntRequireSpecialChar(GET_INTEGER_PARAM(0) - 1); - else - CStreaming::SetAmbientMissionDoesntRequireSpecialChar(GET_INTEGER_PARAM(0) - 1); + CWorld::SetAllCarsCanBeDamaged(GET_INTEGER_PARAM(0) != 0); + if (!GET_INTEGER_PARAM(0)) + CWorld::ExtinguishAllCarFiresInArea(FindPlayerCoors(), 4000.0f); return 0; - case COMMAND_RESET_NUM_OF_MODELS_KILLED_BY_PLAYER: - CDarkel::ResetModelsKilledByPlayer(); - return 0; - case COMMAND_GET_NUM_OF_MODELS_KILLED_BY_PLAYER: - CollectParameters(&m_nIp, 1); - SET_INTEGER_PARAM(0, CDarkel::QueryModelsKilledByPlayer(GET_INTEGER_PARAM(0))); - StoreParameters(&m_nIp, 1); - return 0; - /* - case COMMAND_ACTIVATE_GARAGE: - CollectParameters(&m_nIp, 1); - CGarages::ActivateGarage(GET_INTEGER_PARAM(0)); - return 0; - case COMMAND_SWITCH_TAXI_TIMER: + case COMMAND_SET_CAR_CAN_BE_DAMAGED: { - CollectParameters(&m_nIp, 1); - if (GET_INTEGER_PARAM(0) != 0){ - CWorld::Players[CWorld::PlayerInFocus].m_nUnusedTaxiTimer = CTimer::GetTimeInMilliseconds(); - CWorld::Players[CWorld::PlayerInFocus].m_bUnusedTaxiThing = true; - }else{ - CWorld::Players[CWorld::PlayerInFocus].m_bUnusedTaxiThing = false; - } + CollectParameters(&m_nIp, 2); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + pVehicle->bCanBeDamaged = GET_INTEGER_PARAM(1) != 0; + if (!GET_INTEGER_PARAM(1)) + pVehicle->ExtinguishCarFire(); return 0; } - */ - case COMMAND_CREATE_OBJECT_NO_OFFSET: + case COMMAND_SET_CHARS_CHATTING: + { + CollectParameters(&m_nIp, 3); + CPed* pPed1 = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + CPed* pPed2 = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(1)); + script_assert(pPed1 && pPed2); + pPed1->SetChat(pPed2, GET_INTEGER_PARAM(2)); + pPed2->SetChat(pPed1, GET_INTEGER_PARAM(2)); + return 0; + } + case COMMAND_SET_DRUNK_INPUT_DELAY: + { + CollectParameters(&m_nIp, 2); + assert(GET_INTEGER_PARAM(1) < CPad::DRUNK_STEERING_BUFFER_SIZE); + CPad::GetPad(GET_INTEGER_PARAM(0))->SetDrunkInputDelay(GET_INTEGER_PARAM(1)); + return 0; + } + case COMMAND_SET_CHAR_MONEY: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + pPed->m_nPedMoney = GET_INTEGER_PARAM(1); + pPed->bMoneyHasBeenGivenByScript = true; + return 0; + } + case COMMAND_GET_OFFSET_FROM_OBJECT_IN_WORLD_COORDS: { CollectParameters(&m_nIp, 4); - int mi = GET_INTEGER_PARAM(0) >= 0 ? GET_INTEGER_PARAM(0) : CTheScripts::UsedObjectArray[-GET_INTEGER_PARAM(0)].index; - CObject* pObj = new CObject(mi, false); -; pObj->ObjectCreatedBy = MISSION_OBJECT; - CVector pos = GET_VECTOR_PARAM(1); - if (pos.z <= MAP_Z_LOW_LIMIT) - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - pObj->SetPosition(pos); - pObj->SetOrientation(0.0f, 0.0f, 0.0f); - pObj->GetMatrix().UpdateRW(); - pObj->UpdateRwFrame(); - CBaseModelInfo* pModelInfo = CModelInfo::GetModelInfo(mi); - if (pModelInfo->IsBuilding() && ((CSimpleModelInfo*)pModelInfo)->m_isBigBuilding) - pObj->SetupBigBuilding(); - CTheScripts::ClearSpaceForMissionEntity(pos, pObj); - CWorld::Add(pObj); - SET_INTEGER_PARAM(0, CPools::GetObjectPool()->GetIndex(pObj)); - StoreParameters(&m_nIp, 1); - if (m_bIsMissionScript) - CTheScripts::MissionCleanUp.AddEntityToList(GET_INTEGER_PARAM(0), CLEANUP_OBJECT); + CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pObject); + CVector result = Multiply3x3(pObject->GetMatrix(), GET_VECTOR_PARAM(1)) + pObject->GetPosition(); + SET_VECTOR_PARAM(0, result); + StoreParameters(&m_nIp, 3); return 0; } - case COMMAND_IS_BOAT: - { + case COMMAND_REGISTER_LIFE_SAVED: + CStats::AnotherLifeSavedWithAmbulance(); + return 0; + case COMMAND_REGISTER_CRIMINAL_CAUGHT: + CStats::AnotherCriminalCaught(); + return 0; + case COMMAND_REGISTER_AMBULANCE_LEVEL: CollectParameters(&m_nIp, 1); + CStats::RegisterLevelAmbulanceMission(GET_INTEGER_PARAM(0)); + return 0; + case COMMAND_REGISTER_FIRE_EXTINGUISHED: + CStats::AnotherFireExtinguished(); + return 0; + case COMMAND_TURN_PHONE_ON: + CollectParameters(&m_nIp, 1); + gPhoneInfo.m_aPhones[GET_INTEGER_PARAM(0)].m_nState = PHONE_STATE_9; + return 0; + case COMMAND_GET_OFFSET_FROM_CAR_IN_WORLD_COORDS: + { + CollectParameters(&m_nIp, 4); CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); script_assert(pVehicle); - UpdateCompareFlag(pVehicle->GetVehicleAppearance() == VEHICLE_APPEARANCE_BOAT); + CVector result = Multiply3x3(pVehicle->GetMatrix(), GET_VECTOR_PARAM(1)) + pVehicle->GetPosition(); + SET_VECTOR_PARAM(0, result); + StoreParameters(&m_nIp, 3); return 0; } - /* - case COMMAND_SET_CHAR_OBJ_GOTO_AREA_ANY_MEANS: + case COMMAND_SET_TOTAL_NUMBER_OF_KILL_FRENZIES: + CollectParameters(&m_nIp, 1); + CStats::SetTotalNumberKillFrenzies(GET_INTEGER_PARAM(0)); + return 0; + case COMMAND_BLOW_UP_RC_BUGGY: + CWorld::Players[CWorld::PlayerInFocus].BlowUpRCBuggy(true); + return 0; + case COMMAND_IS_FRENCH_GAME: + UpdateCompareFlag(CGame::frenchGame); + return 0; + case COMMAND_IS_GERMAN_GAME: + UpdateCompareFlag(CGame::germanGame); + return 0; + case COMMAND_CLEAR_MISSION_AUDIO: + CollectParameters(&m_nIp, 1); + DMAudio.ClearMissionAudio(GET_INTEGER_PARAM(0) - 1); + return 0; + case COMMAND_SET_CHAR_USE_PEDNODE_SEEK: { - CollectParameters(&m_nIp, 5); + CollectParameters(&m_nIp, 2); CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); script_assert(pPed); - float infX = GET_FLOAT_PARAM(1); - float infY = GET_FLOAT_PARAM(2); - float supX = GET_FLOAT_PARAM(3); - float supY = GET_FLOAT_PARAM(4); - if (infX > supX) { - infX = GET_FLOAT_PARAM(3); - supX = GET_FLOAT_PARAM(1); - } - if (infY > supY) { - infY = GET_FLOAT_PARAM(4); - supY = GET_FLOAT_PARAM(2); - } - CVector pos; - pos.x = (infX + supX) / 2; - pos.y = (infY + supY) / 2; - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - float radius = Max(pos.x - infX, pos.y - infY); - pPed->bScriptObjectiveCompleted = false; - pPed->SetObjective(OBJECTIVE_GOTO_AREA_ANY_MEANS, pos, radius); + if (GET_INTEGER_PARAM(1)) + pPed->m_pNextPathNode = nil; + pPed->bUsePedNodeSeek = !!GET_INTEGER_PARAM(1); return 0; } -#ifdef GTA_SCRIPT_COLLECTIVE - case COMMAND_SET_COLL_OBJ_GOTO_AREA_ANY_MEANS: + case COMMAND_SET_GET_OUT_OF_JAIL_FREE: + CollectParameters(&m_nIp, 2); + CWorld::Players[GET_INTEGER_PARAM(0)].m_bGetOutOfJailFree = !!GET_INTEGER_PARAM(1); + return 0; + case COMMAND_SET_FREE_HEALTH_CARE: + CollectParameters(&m_nIp, 2); + CWorld::Players[GET_INTEGER_PARAM(0)].m_bGetOutOfHospitalFree = !!GET_INTEGER_PARAM(1); + return 0; + case todo__comm_648: { - CollectParameters(&m_nIp, 5); - float infX = GET_FLOAT_PARAM(1); - float supX = GET_FLOAT_PARAM(3); - if (infX > supX) { - infX = GET_FLOAT_PARAM(3); - supX = GET_FLOAT_PARAM(1); - } - float infY = GET_FLOAT_PARAM(2); - float supY = GET_FLOAT_PARAM(4); - if (infY > supY) { - infY = GET_FLOAT_PARAM(4); - supY = GET_FLOAT_PARAM(2); - } - CVector pos; - pos.x = (infX + supX) / 2; - pos.y = (infY + supY) / 2; - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - float radius = Max(pos.x - infX, pos.y - infY); - CTheScripts::SetObjectiveForAllPedsInCollective(GET_INTEGER_PARAM(0), OBJECTIVE_GOTO_AREA_ANY_MEANS, pos, radius); + script_assert(false && "TODO_OR_CHECK_todo__comm_648"); return 0; } + case COMMAND_LOAD_AND_LAUNCH_MISSION_INTERNAL: + { +#ifdef USE_MISSION_REPLAY_OVERRIDE_FOR_NON_MOBILE_SCRIPT + uint32 oldIp = m_nIp; #endif -*/ - case COMMAND_IS_PLAYER_STOPPED: - { CollectParameters(&m_nIp, 1); - CPlayerInfo* pPlayer = &CWorld::Players[GET_INTEGER_PARAM(0)]; - UpdateCompareFlag(CTheScripts::IsPlayerStopped(pPlayer)); - return 0; - - } - case COMMAND_IS_CHAR_STOPPED: - { - CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - UpdateCompareFlag(CTheScripts::IsPedStopped(pPed)); - return 0; - } - case COMMAND_MESSAGE_WAIT: - CollectParameters(&m_nIp, 2); - m_nWakeTime = CTimer::GetTimeInMilliseconds() + GET_INTEGER_PARAM(0); - if (GET_INTEGER_PARAM(1) != 0) - m_bSkipWakeTime = true; - return 1; - /* - case COMMAND_ADD_PARTICLE_EFFECT: - { - CollectParameters(&m_nIp, 5); - CVector pos = GET_VECTOR_PARAM(1); - if (pos.z <= MAP_Z_LOW_LIMIT) - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - CParticleObject::AddObject(GET_INTEGER_PARAM(0), pos, GET_INTEGER_PARAM(4) != 0); - return 0; - } - */ - case COMMAND_SWITCH_WIDESCREEN: - CollectParameters(&m_nIp, 1); - if (GET_INTEGER_PARAM(0) != 0) - TheCamera.SetWideScreenOn(); - else { - // TODO(LCS): unknown field - TheCamera.SetWideScreenOff(); + + if (CTheScripts::NumberOfExclusiveMissionScripts > 0) { + if (GET_INTEGER_PARAM(0) < UINT16_MAX - 1) + return 0; + SET_INTEGER_PARAM(0, UINT16_MAX - GET_INTEGER_PARAM(0)); } - return 0; - /* - case COMMAND_ADD_SPRITE_BLIP_FOR_CAR: - { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - CRadar::GetActualBlipArrayIndex(CollectNextParameterWithoutIncreasingPC(m_nIp)); - int id = CRadar::SetEntityBlip(BLIP_CAR, GET_INTEGER_PARAM(0), 0, BLIP_DISPLAY_BOTH); - CRadar::SetBlipSprite(id, GET_INTEGER_PARAM(1)); - SET_INTEGER_PARAM(0, id); - StoreParameters(&m_nIp, 1); +#ifdef MISSION_REPLAY + missionRetryScriptIndex = GET_INTEGER_PARAM(0); +#ifdef USE_MISSION_REPLAY_OVERRIDE_FOR_NON_MOBILE_SCRIPT + if (CTheScripts::MissionSupportsMissionReplay(missionRetryScriptIndex)){ + if (!AlreadySavedGame) { + m_nIp = oldIp - 2; + SaveGameForPause(SAVE_TYPE_QUICKSAVE_FOR_SCRIPT); + AlreadySavedGame = true; + return 0; + } + else { + AlreadySavedGame = false; + } + } +#endif +#endif + CTimer::Suspend(); + int offset = CTheScripts::MultiScriptArray[GET_INTEGER_PARAM(0)] + 8; + int size = CTheScripts::MultiScriptArray[GET_INTEGER_PARAM(0) + 1] - CTheScripts::MultiScriptArray[GET_INTEGER_PARAM(0)]; + if (size <= 0) + size = CTheScripts::LargestMissionScriptSize; + CFileMgr::Seek(gScriptsFile, offset, 0); + CFileMgr::Read(gScriptsFile, (const char*)&CTheScripts::ScriptSpace[CTheScripts::MainScriptSize], size); + CRunningScript* pMissionScript = CTheScripts::StartNewScript(CTheScripts::MainScriptSize); + CTimer::Resume(); + pMissionScript->m_bIsMissionScript = true; + pMissionScript->m_bMissionFlag = true; + CTheScripts::bAlreadyRunningAMissionScript = true; + memset(&CTheScripts::ScriptSpace[CTheScripts::NumTrueGlobals * 4 + 8], 0, CTheScripts::MostGlobals * 4); + pMissionScript->Process(); return 0; } - case COMMAND_ADD_SPRITE_BLIP_FOR_CHAR: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - CRadar::GetActualBlipArrayIndex(CollectNextParameterWithoutIncreasingPC(m_nIp)); - int id = CRadar::SetEntityBlip(BLIP_CHAR, GET_INTEGER_PARAM(0), 1, BLIP_DISPLAY_BOTH); - CRadar::SetBlipSprite(id, GET_INTEGER_PARAM(1)); - SET_INTEGER_PARAM(0, id); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_ADD_SPRITE_BLIP_FOR_OBJECT: + case COMMAND_SET_OBJECT_DRAW_LAST: { CollectParameters(&m_nIp, 2); CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); script_assert(pObject); - CRadar::GetActualBlipArrayIndex(CollectNextParameterWithoutIncreasingPC(m_nIp)); - int id = CRadar::SetEntityBlip(BLIP_OBJECT, GET_INTEGER_PARAM(0), 6, BLIP_DISPLAY_BOTH); - CRadar::SetBlipSprite(id, GET_INTEGER_PARAM(1)); - SET_INTEGER_PARAM(0, id); - StoreParameters(&m_nIp, 1); + pObject->bDrawLast = !!GET_INTEGER_PARAM(1); return 0; } - */ - case COMMAND_ADD_SPRITE_BLIP_FOR_CONTACT_POINT: + case todo__comm_651: { - CollectParameters(&m_nIp, 4); - CVector pos = GET_VECTOR_PARAM(0); - if (pos.z <= MAP_Z_LOW_LIMIT) - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - CRadar::GetActualBlipArrayIndex(CollectNextParameterWithoutIncreasingPC(m_nIp)); - int id = CRadar::SetCoordBlip(BLIP_CONTACT_POINT, pos, 2, BLIP_DISPLAY_BOTH); - CRadar::SetBlipSprite(id, GET_INTEGER_PARAM(3)); - SET_INTEGER_PARAM(0, id); - StoreParameters(&m_nIp, 1); + script_assert(false && "TODO_OR_CHECK_todo__comm_651"); return 0; } - case COMMAND_ADD_SPRITE_BLIP_FOR_COORD: - { - CollectParameters(&m_nIp, 4); - CVector pos = GET_VECTOR_PARAM(0); - if (pos.z <= MAP_Z_LOW_LIMIT) - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - CRadar::GetActualBlipArrayIndex(CollectNextParameterWithoutIncreasingPC(m_nIp)); - int id = CRadar::SetCoordBlip(BLIP_COORD, pos, 4, BLIP_DISPLAY_BOTH); - CRadar::SetBlipSprite(id, GET_INTEGER_PARAM(3)); - SET_INTEGER_PARAM(0, id); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_SET_CHAR_ONLY_DAMAGED_BY_PLAYER: + case COMMAND_SET_CHAR_SAY: { CollectParameters(&m_nIp, 2); CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - pPed->bOnlyDamagedByPlayer = (GET_INTEGER_PARAM(1) != 0); + switch (GET_INTEGER_PARAM(1)) { + case 15: + pPed->Say(0x93); // TODO + break; + default: + break; + } return 0; } - case COMMAND_SET_CAR_ONLY_DAMAGED_BY_PLAYER: + case COMMAND_SET_NEAR_CLIP: + CollectParameters(&m_nIp, 1); + TheCamera.SetNearClipScript(GET_FLOAT_PARAM(0)); + return 0; + case COMMAND_SET_RADIO_CHANNEL: + CollectParameters(&m_nIp, 2); + if (!cCustomSoundTrack::Instance()->IsPlaying()) + DMAudio.SetRadioChannel(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); + return 0; + case COMMAND_DOES_GARAGE_CONTAIN_CAR: + { + CollectParameters(&m_nIp, 2); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); + script_assert(pVehicle); + UpdateCompareFlag(CGarages::IsThisCarWithinGarageArea(GET_INTEGER_PARAM(0), pVehicle)); + return 0; + } + case COMMAND_SET_CAR_TRACTION: + { + CollectParameters(&m_nIp, 2); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + float fTraction = GET_FLOAT_PARAM(1); + script_assert(pVehicle->m_vehType == VEHICLE_TYPE_CAR || pVehicle->m_vehType == VEHICLE_TYPE_BIKE); + if (pVehicle->m_vehType == VEHICLE_TYPE_CAR) + ((CAutomobile*)pVehicle)->m_fTraction = fTraction; + else + ((CBike*)pVehicle)->m_fTraction = fTraction; + return 0; + } + case COMMAND_ARE_MEASUREMENTS_IN_METRES: +#ifdef USE_MEASUREMENTS_IN_METERS + UpdateCompareFlag(true); +#else + UpdateCompareFlag(false); +#endif + return 0; + case COMMAND_CONVERT_METRES_TO_FEET: + { + CollectParameters(&m_nIp, 1); + float fMeterValue = GET_FLOAT_PARAM(0); + float fFeetValue = fMeterValue / METERS_IN_FOOT; + SET_FLOAT_PARAM(0, fFeetValue); + StoreParameters(&m_nIp, 1); + return 0; + } + case COMMAND_MARK_ROADS_BETWEEN_LEVELS: + { + CollectParameters(&m_nIp, 6); + float infX = GET_FLOAT_PARAM(0); + float infY = GET_FLOAT_PARAM(1); + float infZ = GET_FLOAT_PARAM(2); + float supX = GET_FLOAT_PARAM(3); + float supY = GET_FLOAT_PARAM(4); + float supZ = GET_FLOAT_PARAM(5); + if (infX > supX) { + infX = GET_FLOAT_PARAM(3); + supX = GET_FLOAT_PARAM(0); + } + if (infY > supY) { + infY = GET_FLOAT_PARAM(4); + supY = GET_FLOAT_PARAM(1); + } + if (infZ > supZ) { + infZ = GET_FLOAT_PARAM(5); + supZ = GET_FLOAT_PARAM(2); + } + ThePaths.MarkRoadsBetweenLevelsInArea(infX, supX, infY, supY, infZ, supZ); + return 0; + } + case COMMAND_SET_CAR_AVOID_LEVEL_TRANSITIONS: { CollectParameters(&m_nIp, 2); CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); script_assert(pVehicle); - pVehicle->bOnlyDamagedByPlayer = (GET_INTEGER_PARAM(1) != 0); + pVehicle->AutoPilot.m_bStayInCurrentLevel = !!GET_INTEGER_PARAM(1); return 0; } - case COMMAND_SET_CHAR_PROOFS: + case COMMAND_CLEAR_AREA_OF_CHARS: { CollectParameters(&m_nIp, 6); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - pPed->bBulletProof = (GET_INTEGER_PARAM(1) != 0); - pPed->bFireProof = (GET_INTEGER_PARAM(2) != 0); - pPed->bExplosionProof = (GET_INTEGER_PARAM(3) != 0); - pPed->bCollisionProof = (GET_INTEGER_PARAM(4) != 0); - pPed->bMeleeProof = (GET_INTEGER_PARAM(5) != 0); + float infX = GET_FLOAT_PARAM(0); + float infY = GET_FLOAT_PARAM(1); + float infZ = GET_FLOAT_PARAM(2); + float supX = GET_FLOAT_PARAM(3); + float supY = GET_FLOAT_PARAM(4); + float supZ = GET_FLOAT_PARAM(5); + if (infX > supX) { + infX = GET_FLOAT_PARAM(3); + supX = GET_FLOAT_PARAM(0); + } + if (infY > supY) { + infY = GET_FLOAT_PARAM(4); + supY = GET_FLOAT_PARAM(1); + } + if (infZ > supZ) { + infZ = GET_FLOAT_PARAM(5); + supZ = GET_FLOAT_PARAM(2); + } + CWorld::ClearPedsFromArea(infX, infY, infZ, supX, supY, supZ); return 0; } - case COMMAND_SET_CAR_PROOFS: - { - CollectParameters(&m_nIp, 6); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - pVehicle->bBulletProof = (GET_INTEGER_PARAM(1) != 0); - pVehicle->bFireProof = (GET_INTEGER_PARAM(2) != 0); - pVehicle->bExplosionProof = (GET_INTEGER_PARAM(3) != 0); - pVehicle->bCollisionProof = (GET_INTEGER_PARAM(4) != 0); - pVehicle->bMeleeProof = (GET_INTEGER_PARAM(5) != 0); - return 0; - } - case COMMAND_IS_PLAYER_IN_ANGLED_AREA_2D: - case COMMAND_IS_PLAYER_IN_ANGLED_AREA_ON_FOOT_2D: - case COMMAND_IS_PLAYER_IN_ANGLED_AREA_IN_CAR_2D: - case COMMAND_IS_PLAYER_STOPPED_IN_ANGLED_AREA_2D: - case COMMAND_IS_PLAYER_STOPPED_IN_ANGLED_AREA_ON_FOOT_2D: - case COMMAND_IS_PLAYER_STOPPED_IN_ANGLED_AREA_IN_CAR_2D: - case COMMAND_IS_PLAYER_IN_ANGLED_AREA_3D: - case COMMAND_IS_PLAYER_IN_ANGLED_AREA_ON_FOOT_3D: - case COMMAND_IS_PLAYER_IN_ANGLED_AREA_IN_CAR_3D: - case COMMAND_IS_PLAYER_STOPPED_IN_ANGLED_AREA_3D: - case COMMAND_IS_PLAYER_STOPPED_IN_ANGLED_AREA_ON_FOOT_3D: - case COMMAND_IS_PLAYER_STOPPED_IN_ANGLED_AREA_IN_CAR_3D: - PlayerInAngledAreaCheckCommand(command, &m_nIp); - return 0; - /* - case COMMAND_DEACTIVATE_GARAGE: + case COMMAND_SET_TOTAL_NUMBER_OF_MISSIONS: CollectParameters(&m_nIp, 1); - CGarages::DeActivateGarage(GET_INTEGER_PARAM(0)); + CStats::SetTotalNumberMissions(CGame::germanGame ? GET_INTEGER_PARAM(0) - 2 : GET_INTEGER_PARAM(0)); return 0; - case COMMAND_GET_NUMBER_OF_CARS_COLLECTED_BY_GARAGE: + case COMMAND_CONVERT_METRES_TO_FEET_INT: CollectParameters(&m_nIp, 1); - SET_INTEGER_PARAM(0, CGarages::QueryCarsCollected(GET_INTEGER_PARAM(0))); + GET_INTEGER_PARAM(0) *= FEET_IN_METER; StoreParameters(&m_nIp, 1); return 0; - case COMMAND_HAS_CAR_BEEN_TAKEN_TO_GARAGE: - CollectParameters(&m_nIp, 2); - UpdateCompareFlag(CGarages::HasThisCarBeenCollected(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1) - 1)); + case COMMAND_WARP_CHAR_INTO_CAR_AS_PASSENGER: + { + CollectParameters(&m_nIp, 3); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); + script_assert(pPed); + script_assert(pVehicle); + if (GET_INTEGER_PARAM(2) < 0) + pPed->WarpPedIntoCarAsPassenger(pVehicle, GET_INTEGER_PARAM(2)); + else { + script_assert(GET_INTEGER_PARAM(2) >= 0 && GET_INTEGER_PARAM(2) < ARRAY_SIZE(pVehicle->pPassengers)); + pPed->WarpPedIntoCarAsPassenger(pVehicle, GET_INTEGER_PARAM(2)); + } return 0; - */ + + } + case COMMAND_IS_CAR_PASSENGER_SEAT_FREE: + { + CollectParameters(&m_nIp, 2); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + UpdateCompareFlag(GET_INTEGER_PARAM(1) < pVehicle->m_nNumMaxPassengers && pVehicle->pPassengers[GET_INTEGER_PARAM(1)] == nil); + return 0; + } + case COMMAND_GET_CHAR_IN_CAR_PASSENGER_SEAT: + { + CollectParameters(&m_nIp, 2); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + script_assert(GET_INTEGER_PARAM(1) >= 0 && GET_INTEGER_PARAM(1) < ARRAY_SIZE(pVehicle->pPassengers)); + CPed* pPassenger = pVehicle->pPassengers[GET_INTEGER_PARAM(1)]; + SET_INTEGER_PARAM(0, CPools::GetPedPool()->GetIndex(pPassenger)); + StoreParameters(&m_nIp, 1); + return 0; + } + case COMMAND_SET_CHAR_IS_CHRIS_CRIMINAL: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + pPed->bChrisCriminal = !!GET_INTEGER_PARAM(1); + return 0; + } + case COMMAND_START_CREDITS: + CollectParameters(&m_nIp, 1); + CCredits::Start(); // TODO: CCredits::Start(GET_INTEGER_PARAM(0)) + return 0; + case COMMAND_STOP_CREDITS: + CCredits::Stop(); + return 0; + case COMMAND_ARE_CREDITS_FINISHED: + UpdateCompareFlag(CCredits::AreCreditsDone()); + return 0; + case COMMAND_CREATE_SINGLE_PARTICLE: + CollectParameters(&m_nIp, 8); + CParticle::AddParticle((tParticleType)GET_INTEGER_PARAM(0), GET_VECTOR_PARAM(1), + GET_VECTOR_PARAM(4), nil, GET_FLOAT_PARAM(7), 0, 0, 0, 0); + return 0; + case COMMAND_SET_MUSIC_DOES_FADE: + CollectParameters(&m_nIp, 1); + TheCamera.m_bIgnoreFadingStuffForMusic = (GET_INTEGER_PARAM(0) == 0); + return 0; + case COMMAND_PLAY_END_OF_GAME_TUNE: + DMAudio.ChangeMusicMode(MUSICMODE_FRONTEND); + DMAudio.PlayFrontEndTrack(STREAMED_SOUND_CUTSCENE_FINALE, 1); // third parameter is 1 + return 0; + case COMMAND_STOP_END_OF_GAME_TUNE: + DMAudio.StopCutSceneMusic(); + DMAudio.ChangeMusicMode(MUSICMODE_GAME); + return 0; + case COMMAND_GET_CAR_MODEL: + { + CollectParameters(&m_nIp, 1); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + SET_INTEGER_PARAM(0, pVehicle->GetModelIndex()); + StoreParameters(&m_nIp, 1); + return 0; + } + case COMMAND_ARE_ANY_CAR_CHEATS_ACTIVATED: + UpdateCompareFlag(CVehicle::bAllDodosCheat || CVehicle::bCheat3 || CVehicle::bHoverCheat || CVehicle::bCheat8 || CVehicle::bCheat9); + return 0; + case COMMAND_SET_CHAR_SUFFERS_CRITICAL_HITS: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + pPed->bNoCriticalHits = (GET_INTEGER_PARAM(1) == 0); + return 0; + } + case COMMAND_IS_CHAR_SITTING_IN_CAR: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); + script_assert(pVehicle); + UpdateCompareFlag(pPed->GetPedState() == PED_DRIVING && pPed->m_objective != OBJECTIVE_LEAVE_CAR && pPed->m_pMyVehicle == pVehicle); + return 0; + } + case COMMAND_IS_CHAR_SITTING_IN_ANY_CAR: + { + CollectParameters(&m_nIp, 1); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + UpdateCompareFlag(pPed->GetPedState() == PED_DRIVING && pPed->m_objective != OBJECTIVE_LEAVE_CAR); + return 0; + } + case COMMAND_IS_CHAR_ON_FOOT: + { + CollectParameters(&m_nIp, 1); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + UpdateCompareFlag(!pPed->bInVehicle && pPed->m_objective != OBJECTIVE_ENTER_CAR_AS_PASSENGER && + pPed->m_objective != OBJECTIVE_ENTER_CAR_AS_DRIVER); + return 0; + } + case COMMAND_LOAD_SPLASH_SCREEN: + CTheScripts::ReadTextLabelFromScript(&m_nIp, tmp); + for (int i = 0; i < KEY_LENGTH_IN_SCRIPT; i++) + tmp[i] = tolower(tmp[i]); + m_nIp += 8; + LoadSplash(tmp); + return 0; + case todo__comm_682: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_682"); + return 0; + } + case COMMAND_ENABLE_PLAYER_CONTROL_CAMERA: + CPad::GetPad(0)->SetEnablePlayerControls(PLAYERCONTROL_CAMERA); + return 0; + case COMMAND_SET_OBJECT_ROTATION: + { + CollectParameters(&m_nIp, 4); + CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pObject); + CWorld::Remove(pObject); + pObject->SetOrientation( + DEGTORAD(GET_FLOAT_PARAM(1)), + DEGTORAD(GET_FLOAT_PARAM(2)), + DEGTORAD(GET_FLOAT_PARAM(3))); + pObject->GetMatrix().UpdateRW(); + pObject->UpdateRwFrame(); + CWorld::Add(pObject); + return 0; + } + case COMMAND_GET_DEBUG_CAMERA_COORDINATES: + SET_VECTOR_PARAM(0, TheCamera.Cams[2].Source); + StoreParameters(&m_nIp, 3); + return 0; + case todo__comm_686: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_686"); + return 0; + } + case todo__comm_687: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_687"); + return 0; + } + case COMMAND_TERMINATE_ALL_SCRIPTS_WITH_THIS_NAME: + { + CTheScripts::ReadTextLabelFromScript(&m_nIp, tmp); + for (int i = 0; i < KEY_LENGTH_IN_SCRIPT; i++) + tmp[i] = tolower(tmp[i]); + m_nIp += 8; + CRunningScript* pScript = CTheScripts::pActiveScripts; + while (pScript) { + CRunningScript* pNext = pScript->next; + if (strcmp(pScript->m_abScriptName, tmp) == 0) { + pScript->RemoveScriptFromList(&CTheScripts::pActiveScripts); + pScript->AddScriptToList(&CTheScripts::pIdleScripts); + } + pScript = pNext; + } + return 0; + } + case COMMAND_DISPLAY_TEXT_WITH_NUMBER: + { + CollectParameters(&m_nIp, 2); + wchar* text = GetTextByKeyFromScript(&m_nIp); + CTheScripts::IntroTextLines[CTheScripts::NumberOfIntroTextLinesThisFrame].m_fAtX = GET_FLOAT_PARAM(0); + CTheScripts::IntroTextLines[CTheScripts::NumberOfIntroTextLinesThisFrame].m_fAtY = GET_FLOAT_PARAM(1); + CollectParameters(&m_nIp, 1); + CMessages::InsertNumberInString(text, GET_INTEGER_PARAM(0), -1, -1, -1, -1, -1, + CTheScripts::IntroTextLines[CTheScripts::NumberOfIntroTextLinesThisFrame++].m_Text); + return 0; + } + case COMMAND_DISPLAY_TEXT_WITH_2_NUMBERS: + { + CollectParameters(&m_nIp, 2); + wchar* text = GetTextByKeyFromScript(&m_nIp); + CTheScripts::IntroTextLines[CTheScripts::NumberOfIntroTextLinesThisFrame].m_fAtX = GET_FLOAT_PARAM(0); + CTheScripts::IntroTextLines[CTheScripts::NumberOfIntroTextLinesThisFrame].m_fAtY = GET_FLOAT_PARAM(1); + CollectParameters(&m_nIp, 2); + CMessages::InsertNumberInString(text, GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), -1, -1, -1, -1, + CTheScripts::IntroTextLines[CTheScripts::NumberOfIntroTextLinesThisFrame++].m_Text); + return 0; + } + case COMMAND_SET_ALL_OCCUPANTS_OF_CAR_LEAVE_CAR: + { + CollectParameters(&m_nIp, 1); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + CCarAI::TellOccupantsToLeaveCar(pVehicle); + return 0; + } + case COMMAND_SET_INTERPOLATION_PARAMETERS: + CollectParameters(&m_nIp, 2); + TheCamera.SetParametersForScriptInterpolation(GET_FLOAT_PARAM(0), 100.0f - GET_FLOAT_PARAM(0), GET_INTEGER_PARAM(1)); + return 0; + case COMMAND_GET_DEBUG_CAMERA_POINT_AT: + SET_VECTOR_PARAM(0, TheCamera.Cams[2].Source + TheCamera.Cams[2].Front); + StoreParameters(&m_nIp, 3); + return 0; + case COMMAND_ATTACH_CHAR_TO_CAR: + { + CollectParameters(&m_nIp, 8); + CPed *pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + CVehicle *pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); + pPed->AttachPedToEntity(pVehicle, GET_VECTOR_PARAM(2), GET_INTEGER_PARAM(5), DEGTORAD(GET_FLOAT_PARAM(6)), (eWeaponType)GET_INTEGER_PARAM(7)); + return 0; + } + case COMMAND_DETACH_CHAR_FROM_CAR: + { + CollectParameters(&m_nIp, 1); + CPed *pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + if (pPed && pPed->m_attachedTo) { + pPed->DettachPedFromEntity(); + pPed->bIsAimingGun = false; + } + return 0; + } + case todo__comm_696: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_696"); + return 0; + } + case COMMAND_SET_CAR_CHANGE_LANE: // for some reason changed in SA + { + CollectParameters(&m_nIp, 2); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + pVehicle->AutoPilot.m_bStayInFastLane = !GET_INTEGER_PARAM(1); + return 0; + } + case COMMAND_CLEAR_CHAR_LAST_WEAPON_DAMAGE: + { + CollectParameters(&m_nIp, 1); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + if (pPed) + pPed->m_lastWepDam = -1; + else + debug("CLEAR_CHAR_LAST_WEAPON_DAMAGE - Character doesn't exist\n"); + return 0; + } + case COMMAND_CLEAR_CAR_LAST_WEAPON_DAMAGE: + { + CollectParameters(&m_nIp, 1); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + if (pVehicle) + pVehicle->m_nLastWeaponDamage = -1; + else + debug("CLEAR_CAR_LAST_WEAPON_DAMAGE - Vehicle doesn't exist\n"); + return 0; + } + default: script_assert(0); } @@ -1570,281 +2192,9 @@ int8 CRunningScript::ProcessCommands600To699(int32 command) int8 CRunningScript::ProcessCommands700To799(int32 command) { switch (command){ - /* - case COMMAND_SET_SWAT_REQUIRED: - CollectParameters(&m_nIp, 1); - FindPlayerPed()->m_pWanted->m_bSwatRequired = (GET_INTEGER_PARAM(0) != 0); - return 0; - case COMMAND_SET_FBI_REQUIRED: - CollectParameters(&m_nIp, 1); - FindPlayerPed()->m_pWanted->m_bFbiRequired = (GET_INTEGER_PARAM(0) != 0); - return 0; - case COMMAND_SET_ARMY_REQUIRED: - CollectParameters(&m_nIp, 1); - FindPlayerPed()->m_pWanted->m_bArmyRequired = (GET_INTEGER_PARAM(0) != 0); - return 0; - */ - case COMMAND_IS_CAR_IN_WATER: + case COMMAND_GET_RANDOM_COP_IN_AREA: { - CollectParameters(&m_nIp, 1); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - UpdateCompareFlag(pVehicle && pVehicle->bIsInWater); - return 0; - } - case COMMAND_GET_CLOSEST_CHAR_NODE: - { - CollectParameters(&m_nIp, 3); - CVector pos = GET_VECTOR_PARAM(0); - if (pos.z <= MAP_Z_LOW_LIMIT) - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - CPathNode* pNode = &ThePaths.m_pathNodes[ThePaths.FindNodeClosestToCoors(pos, 1, 800.0f, true)]; - SET_VECTOR_PARAM(0, pNode->GetPosition()); - StoreParameters(&m_nIp, 3); - return 0; - } - case COMMAND_GET_CLOSEST_CAR_NODE: - { - CollectParameters(&m_nIp, 3); - CVector pos = GET_VECTOR_PARAM(0); - if (pos.z <= MAP_Z_LOW_LIMIT) - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - SET_VECTOR_PARAM(0, ThePaths.FindNodeCoorsForScript(ThePaths.FindNodeClosestToCoors(pos, 0, 800.0f, true, true))); - StoreParameters(&m_nIp, 3); - return 0; - } - case COMMAND_CAR_GOTO_COORDINATES_ACCURATE: - { - CollectParameters(&m_nIp, 4); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - CVector pos = GET_VECTOR_PARAM(1); - if (pos.z <= MAP_Z_LOW_LIMIT) - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - pos.z += pVehicle->GetDistanceFromCentreOfMassToBaseOfModel(); - uint8 nOldMission = pVehicle->AutoPilot.m_nCarMission; - if (CCarCtrl::JoinCarWithRoadSystemGotoCoors(pVehicle, pos, false)) - pVehicle->AutoPilot.m_nCarMission = MISSION_GOTO_COORDS_STRAIGHT_ACCURATE; - else - pVehicle->AutoPilot.m_nCarMission = MISSION_GOTOCOORDS_ACCURATE; - pVehicle->SetStatus(STATUS_PHYSICS); - pVehicle->bEngineOn = true; - pVehicle->AutoPilot.m_nCruiseSpeed = Max(1, pVehicle->AutoPilot.m_nCruiseSpeed); - if (nOldMission != pVehicle->AutoPilot.m_nCarMission) - pVehicle->AutoPilot.m_nAntiReverseTimer = CTimer::GetTimeInMilliseconds(); - return 0; - } - /* - case COMMAND_START_PACMAN_RACE: - CollectParameters(&m_nIp, 1); - CPacManPickups::StartPacManRace(GET_INTEGER_PARAM(0)); - return 0; - case COMMAND_START_PACMAN_RECORD: - CPacManPickups::StartPacManRecord(); - return 0; - case COMMAND_GET_NUMBER_OF_POWER_PILLS_EATEN: - SET_INTEGER_PARAM(0, CPacManPickups::QueryPowerPillsEatenInRace()); - StoreParameters(&m_nIp, 1); - return 0; - case COMMAND_CLEAR_PACMAN: - CPacManPickups::CleanUpPacManStuff(); - return 0; - case COMMAND_START_PACMAN_SCRAMBLE: - { - CollectParameters(&m_nIp, 5); - CVector pos = GET_VECTOR_PARAM(0); - if (pos.z <= MAP_Z_LOW_LIMIT) - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - CPacManPickups::StartPacManScramble(pos, GET_FLOAT_PARAM(3), GET_INTEGER_PARAM(4)); - return 0; - } - case COMMAND_GET_NUMBER_OF_POWER_PILLS_CARRIED: - SET_INTEGER_PARAM(0, CPacManPickups::QueryPowerPillsCarriedByPlayer()); - StoreParameters(&m_nIp, 1); - return 0; - case COMMAND_CLEAR_NUMBER_OF_POWER_PILLS_CARRIED: - CPacManPickups::ResetPowerPillsCarriedByPlayer(); - return 0; - */ - case COMMAND_IS_CAR_ON_SCREEN: - { - CollectParameters(&m_nIp, 1); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - UpdateCompareFlag(TheCamera.IsSphereVisible(pVehicle->GetBoundCentre(), pVehicle->GetBoundRadius())); - return 0; - } - case COMMAND_IS_CHAR_ON_SCREEN: - { - CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - UpdateCompareFlag(TheCamera.IsSphereVisible(pPed->GetBoundCentre(), pPed->GetBoundRadius())); - return 0; - } - case COMMAND_IS_OBJECT_ON_SCREEN: - { - CollectParameters(&m_nIp, 1); - CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pObject); - UpdateCompareFlag(TheCamera.IsSphereVisible(pObject->GetBoundCentre(), pObject->GetBoundRadius())); - return 0; - } - case COMMAND_GOSUB_FILE: - { - CollectParameters(&m_nIp, 2); - script_assert(m_nStackPointer < MAX_STACK_DEPTH); - m_anStack[m_nStackPointer++] = m_nIp; - SetIP(GET_INTEGER_PARAM(0)); - // GET_INTEGER_PARAM(1) == filename - return 0; - } - case COMMAND_GET_GROUND_Z_FOR_3D_COORD: - { - CollectParameters(&m_nIp, 3); - CVector pos = GET_VECTOR_PARAM(0); - bool success; - SET_FLOAT_PARAM(0, CWorld::FindGroundZFor3DCoord(pos.x, pos.y, pos.z, &success)); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_START_SCRIPT_FIRE: - { - CollectParameters(&m_nIp, 3); - CVector pos = GET_VECTOR_PARAM(0); - if (pos.z <= MAP_Z_LOW_LIMIT) - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - SET_INTEGER_PARAM(0, gFireManager.StartScriptFire(pos, nil, 0.8f, 1)); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_IS_SCRIPT_FIRE_EXTINGUISHED: - CollectParameters(&m_nIp, 1); - UpdateCompareFlag(gFireManager.IsScriptFireExtinguish(GET_INTEGER_PARAM(0))); - return 0; - case COMMAND_REMOVE_SCRIPT_FIRE: - CollectParameters(&m_nIp, 1); - gFireManager.RemoveScriptFire(GET_INTEGER_PARAM(0)); - return 0; - /* - case COMMAND_SET_COMEDY_CONTROLS: - { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - pVehicle->bComedyControls = (GET_INTEGER_PARAM(1) != 0); - return 0; - } - */ - case COMMAND_BOAT_GOTO_COORDS: - { - CollectParameters(&m_nIp, 4); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - script_assert(pVehicle->m_vehType == VEHICLE_TYPE_BOAT); - CBoat* pBoat = (CBoat*)pVehicle; - CVector pos = GET_VECTOR_PARAM(1); - if (pos.z <= MAP_Z_LOW_LIMIT) - CWaterLevel::GetWaterLevel(pos.x, pos.y, pos.z, &pos.z, false); - pBoat->AutoPilot.m_nCarMission = MISSION_GOTOCOORDS_ASTHECROWSWIMS; - pBoat->AutoPilot.m_vecDestinationCoors = pos; - pBoat->SetStatus(STATUS_PHYSICS); - pBoat->bEngineOn = true; - pBoat->AutoPilot.m_nCruiseSpeed = Max(1, pBoat->AutoPilot.m_nCruiseSpeed); - pBoat->AutoPilot.m_nAntiReverseTimer = CTimer::GetTimeInMilliseconds(); - return 0; - } - case COMMAND_BOAT_STOP: - { - CollectParameters(&m_nIp, 1); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - script_assert(pVehicle->m_vehType == VEHICLE_TYPE_BOAT); - CBoat* pBoat = (CBoat*)pVehicle; - pBoat->AutoPilot.m_nCarMission = MISSION_NONE; - pBoat->SetStatus(STATUS_PHYSICS); - pBoat->bEngineOn = false; - pBoat->AutoPilot.m_nCruiseSpeed = 0; - return 0; - } - case COMMAND_IS_PLAYER_SHOOTING_IN_AREA: - { - CollectParameters(&m_nIp, 6); - CPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(pPed); - float x1 = GET_FLOAT_PARAM(1); - float y1 = GET_FLOAT_PARAM(2); - float x2 = GET_FLOAT_PARAM(3); - float y2 = GET_FLOAT_PARAM(4); - UpdateCompareFlag(pPed->bIsShooting && pPed->IsWithinArea(x1, y1, x2, y2)); - if (GET_INTEGER_PARAM(5)) - CTheScripts::HighlightImportantArea((uintptr)this + m_nIp, x1, y1, x2, y2, MAP_Z_LOW_LIMIT); - /* - if (CTheScripts::DbgFlag) - CTheScripts::DrawDebugSquare(x1, y1, x2, y2); - */ - return 0; - } - case COMMAND_IS_CHAR_SHOOTING_IN_AREA: - { - CollectParameters(&m_nIp, 6); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - float x1 = GET_FLOAT_PARAM(1); - float y1 = GET_FLOAT_PARAM(2); - float x2 = GET_FLOAT_PARAM(3); - float y2 = GET_FLOAT_PARAM(4); - UpdateCompareFlag(pPed->bIsShooting && pPed->IsWithinArea(x1, y1, x2, y2)); - if (GET_INTEGER_PARAM(5)) - CTheScripts::HighlightImportantArea((uintptr)this + m_nIp, x1, y1, x2, y2, MAP_Z_LOW_LIMIT); - /* - if (CTheScripts::DbgFlag) - CTheScripts::DrawDebugSquare(x1, y1, x2, y2); - */ - return 0; - } - case COMMAND_IS_CURRENT_PLAYER_WEAPON: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(pPed); - UpdateCompareFlag(GET_INTEGER_PARAM(1) == pPed->GetWeapon()->m_eWeaponType); - return 0; - } - case COMMAND_IS_CURRENT_CHAR_WEAPON: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - UpdateCompareFlag(GET_INTEGER_PARAM(1) == pPed->GetWeapon()->m_eWeaponType); - return 0; - } - /* - case COMMAND_CLEAR_NUMBER_OF_POWER_PILLS_EATEN: - CPacManPickups::ResetPowerPillsEatenInRace(); - return 0; - case COMMAND_ADD_POWER_PILL: - { - CollectParameters(&m_nIp, 3); - CVector pos = GET_VECTOR_PARAM(0); - if (pos.z <= MAP_Z_LOW_LIMIT) - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - CPacManPickups::GenerateOnePMPickUp(pos); - return 0; - } - */ - case COMMAND_SET_BOAT_CRUISE_SPEED: - { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - script_assert(pVehicle->m_vehType == VEHICLE_TYPE_BOAT); - CBoat* pBoat = (CBoat*)pVehicle; - pBoat->AutoPilot.m_nCruiseSpeed = GET_FLOAT_PARAM(1); - return 0; - } - case COMMAND_GET_RANDOM_CHAR_IN_AREA: - { - CollectParameters(&m_nIp, 7); + CollectParameters(&m_nIp, 9); int ped_handle = -1; CVector pos = FindPlayerCoors(); float x1 = GET_FLOAT_PARAM(0); @@ -1852,85 +2202,31 @@ int8 CRunningScript::ProcessCommands700To799(int32 command) float x2 = GET_FLOAT_PARAM(2); float y2 = GET_FLOAT_PARAM(3); int i = CPools::GetPedPool()->GetSize(); - while (--i && ped_handle == -1){ - CPed* pPed = CPools::GetPedPool()->GetSlot(i); - if (!pPed) - continue; - if (CTheScripts::LastRandomPedId == CPools::GetPedPool()->GetIndex(pPed)) - continue; - if (pPed->CharCreatedBy != RANDOM_CHAR) - continue; - if (!pPed->IsPedInControl()) - continue; - if (pPed->bRemoveFromWorld) - continue; - if (pPed->bFadeOut) - continue; - if (pPed->m_nWaitState != WAITSTATE_FALSE) - continue; - if (!ThisIsAValidRandomPed(pPed->m_nPedType, GET_INTEGER_PARAM(5), GET_INTEGER_PARAM(6), GET_INTEGER_PARAM(7))) - continue; - if (pPed->bIsLeader || pPed->m_leader) - continue; - if (!pPed->IsWithinArea(x1, y1, x2, y2)) - continue; - if (pos.z - PED_FIND_Z_OFFSET > pPed->GetPosition().z) - continue; - if (pos.z + PED_FIND_Z_OFFSET < pPed->GetPosition().z) - continue; - ped_handle = CPools::GetPedPool()->GetIndex(pPed); - CTheScripts::LastRandomPedId = ped_handle; - pPed->CharCreatedBy = MISSION_CHAR; - pPed->bRespondsToThreats = false; - ++CPopulation::ms_nTotalMissionPeds; - if (m_bIsMissionScript) - CTheScripts::MissionCleanUp.AddEntityToList(ped_handle, CLEANUP_CHAR); - } - SET_INTEGER_PARAM(0, ped_handle); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_GET_RANDOM_CHAR_IN_ZONE: - { - char zone[KEY_LENGTH_IN_SCRIPT]; - strncpy(zone, (const char*)&CTheScripts::ScriptSpace[m_nIp], KEY_LENGTH_IN_SCRIPT); - int nZone = CTheZones::FindZoneByLabelAndReturnIndex(zone, ZONE_DEFAULT); - if (nZone != -1) - m_nIp += KEY_LENGTH_IN_SCRIPT; - CZone* pZone = CTheZones::GetNavigationZone(nZone); - CollectParameters(&m_nIp, 3); - int ped_handle = -1; - CVector pos = FindPlayerCoors(); - int i = CPools::GetPedPool()->GetSize(); while (--i && ped_handle == -1) { CPed* pPed = CPools::GetPedPool()->GetSlot(i); if (!pPed) continue; if (CTheScripts::LastRandomPedId == CPools::GetPedPool()->GetIndex(pPed)) continue; + if (pPed->m_nPedType != PEDTYPE_COP) + continue; + if (!ThisIsAValidRandomCop(pPed->GetModelIndex(), GET_INTEGER_PARAM(4), GET_INTEGER_PARAM(5), GET_INTEGER_PARAM(6), GET_INTEGER_PARAM(7), GET_INTEGER_PARAM(8))) + continue; if (pPed->CharCreatedBy != RANDOM_CHAR) continue; - if (!pPed->IsPedInControl()) + if (!pPed->IsPedInControl() && pPed->GetPedState() != PED_DRIVING && pPed->GetPedState() != PED_ABSEIL) continue; if (pPed->bRemoveFromWorld) continue; if (pPed->bFadeOut) continue; - if (pPed->m_nWaitState != WAITSTATE_FALSE) - continue; - if (!ThisIsAValidRandomPed(pPed->m_nPedType, GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2))) - continue; if (pPed->bIsLeader || pPed->m_leader) continue; - if (!CTheZones::PointLiesWithinZone(&pPed->GetPosition(), pZone)) + if (!pPed->IsWithinArea(x1, y1, x2, y2)) continue; - if (pos.z - PED_FIND_Z_OFFSET > pPed->GetPosition().z) + if (pos.z - COP_PED_FIND_Z_OFFSET > pPed->GetPosition().z) continue; - if (pos.z + PED_FIND_Z_OFFSET < pPed->GetPosition().z) - continue; - bool found; - CWorld::FindRoofZFor3DCoord(pos.x, pos.y, pos.z, &found); - if (found) + if (pos.z + COP_PED_FIND_Z_OFFSET < pPed->GetPosition().z) continue; ped_handle = CPools::GetPedPool()->GetIndex(pPed); CTheScripts::LastRandomPedId = ped_handle; @@ -1944,519 +2240,810 @@ int8 CRunningScript::ProcessCommands700To799(int32 command) StoreParameters(&m_nIp, 1); return 0; } - case COMMAND_IS_PLAYER_IN_TAXI: + case COMMAND_GET_DRIVER_OF_CAR: { CollectParameters(&m_nIp, 1); - CPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(pPed); - UpdateCompareFlag(pPed->bInVehicle && pPed->m_pMyVehicle->IsTaxi()); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + CPed* pDriver = pVehicle->pDriver; + if (pDriver) + SET_INTEGER_PARAM(0, CPools::GetPedPool()->GetIndex(pDriver)); + else + SET_INTEGER_PARAM(0, -1); + StoreParameters(&m_nIp, 1); return 0; } - case COMMAND_IS_PLAYER_SHOOTING: + case COMMAND_GET_NUMBER_OF_FOLLOWERS: { CollectParameters(&m_nIp, 1); - CPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(pPed); - UpdateCompareFlag(pPed->bIsShooting); + CPed* pLeader = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pLeader); + int total = 0; + int i = CPools::GetPedPool()->GetSize(); + while (--i) { + CPed* pPed = CPools::GetPedPool()->GetSlot(i); + if (!pPed) + continue; + if (pPed->m_leader == pLeader) + total++; + } + SET_INTEGER_PARAM(0, total); + StoreParameters(&m_nIp, 1); return 0; } - case COMMAND_IS_CHAR_SHOOTING: + case COMMAND_GIVE_REMOTE_CONTROLLED_MODEL_TO_PLAYER: + { + CollectParameters(&m_nIp, 6); + 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)), GET_INTEGER_PARAM(5)); + return 0; + } + case COMMAND_GET_CURRENT_CHAR_WEAPON: { CollectParameters(&m_nIp, 1); CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); script_assert(pPed); - UpdateCompareFlag(pPed->bIsShooting); + SET_INTEGER_PARAM(0, pPed->GetWeapon()->m_eWeaponType); + StoreParameters(&m_nIp, 1); return 0; } - case COMMAND_CREATE_MONEY_PICKUP: + case COMMAND_LOCATE_CHAR_ANY_MEANS_OBJECT_2D: + case COMMAND_LOCATE_CHAR_ON_FOOT_OBJECT_2D: + case COMMAND_LOCATE_CHAR_IN_CAR_OBJECT_2D: + case COMMAND_LOCATE_CHAR_ANY_MEANS_OBJECT_3D: + case COMMAND_LOCATE_CHAR_ON_FOOT_OBJECT_3D: + case COMMAND_LOCATE_CHAR_IN_CAR_OBJECT_3D: + LocateCharObjectCommand(command, &m_nIp); + return 0; + case COMMAND_SET_CAR_TEMP_ACTION: { - CollectParameters(&m_nIp, 4); + CollectParameters(&m_nIp, 3); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + pVehicle->AutoPilot.m_nTempAction = (uint8)GET_INTEGER_PARAM(1); + pVehicle->AutoPilot.m_nTimeTempAction = CTimer::GetTimeInMilliseconds() + GET_INTEGER_PARAM(2); + return 0; + } + case COMMAND_IS_CHAR_ON_ANY_BIKE: + { + CollectParameters(&m_nIp, 1); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + UpdateCompareFlag(pPed->bInVehicle&& pPed->m_pMyVehicle->GetVehicleAppearance() == VEHICLE_APPEARANCE_BIKE); + return 0; + } + case COMMAND_CAN_CHAR_SEE_DEAD_CHAR: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + int pedtype = GET_INTEGER_PARAM(1); + bool can = false; + for (int i = 0; i < pPed->m_numNearPeds; i++) { + CPed* pTestPed = pPed->m_nearPeds[i]; + if (pTestPed->m_fHealth <= 0.0f && pTestPed->m_nPedType == pedtype && pPed->OurPedCanSeeThisOne(pTestPed)) + can = true; + } + UpdateCompareFlag(can); + return 0; + } + case COMMAND_SET_ENTER_CAR_RANGE_MULTIPLIER: + CollectParameters(&m_nIp, 1); + CPed::nEnterCarRangeMultiplier = GET_FLOAT_PARAM(0); + return 0; + case COMMAND_SET_THREAT_REACTION_RANGE_MULTIPLIER: + CollectParameters(&m_nIp, 1); + CPed::nThreatReactionRangeMultiplier = GET_FLOAT_PARAM(0); + if (CPed::nThreatReactionRangeMultiplier < 1) + CPed::nThreatReactionRangeMultiplier = 1; + return 0; + case COMMAND_SET_CHAR_CEASE_ATTACK_TIMER: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + pPed->m_ceaseAttackTimer = GET_INTEGER_PARAM(1); + return 0; + } + case COMMAND_GET_REMOTE_CONTROLLED_CAR: + { + CollectParameters(&m_nIp, 1); + CVehicle* pVehicle = CWorld::Players[GET_INTEGER_PARAM(0)].m_pRemoteVehicle; + if (pVehicle) + SET_INTEGER_PARAM(0, CPools::GetVehiclePool()->GetIndex(pVehicle)); + else + SET_INTEGER_PARAM(0, -1); + StoreParameters(&m_nIp, 1); + return 0; + } + case COMMAND_IS_PC_VERSION: +#ifdef GTA_PC + UpdateCompareFlag(true); +#else + UpdateCompareFlag(false); +#endif + return 0; + case COMMAND_IS_MODEL_AVAILABLE: + CollectParameters(&m_nIp, 1); + UpdateCompareFlag(CModelInfo::GetModelInfo(GET_INTEGER_PARAM(0)) != nil); + return 0; + case COMMAND_SHUT_CHAR_UP: + CollectParameters(&m_nIp, 2); + DMAudio.SetPedTalkingStatus(CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)), GET_INTEGER_PARAM(1) == 0); + return 0; + case COMMAND_SET_ENABLE_RC_DETONATE: + CollectParameters(&m_nIp, 1); + CVehicle::bDisableRemoteDetonation = !GET_INTEGER_PARAM(0); + return 0; + case COMMAND_SET_CAR_RANDOM_ROUTE_SEED: + { + CollectParameters(&m_nIp, 2); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + pVehicle->m_nRouteSeed = GET_INTEGER_PARAM(1); + return 0; + } + case todo__comm_723: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_723"); + return 0; + } + case COMMAND_REMOVE_ALL_CHAR_WEAPONS: + { + CollectParameters(&m_nIp, 1); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + pPed->ClearWeapons(); + return 0; + } + case COMMAND_HAS_CHAR_GOT_WEAPON: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + bool bFound = false; + for (int i = 0; i < TOTAL_WEAPON_SLOTS; i++) { + if (pPed->GetWeapon(i).m_eWeaponType == GET_INTEGER_PARAM(1)) { + bFound = true; + break; + } + } + UpdateCompareFlag(bFound); + return 0; + } + case COMMAND_SET_TANK_DETONATE_CARS: + { + CollectParameters(&m_nIp, 2); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle && pVehicle->m_vehType == VEHICLE_TYPE_CAR); + ((CAutomobile*)pVehicle)->bTankDetonateCars = GET_INTEGER_PARAM(1); + return 0; + } + case COMMAND_GET_POSITION_OF_ANALOGUE_STICKS: + { + CollectParameters(&m_nIp, 1); + CPad* pPad = CPad::GetPad(GET_INTEGER_PARAM(0)); + SET_INTEGER_PARAM(0, pPad->NewState.LeftStickX); + SET_INTEGER_PARAM(1, pPad->NewState.LeftStickY); + SET_INTEGER_PARAM(2, pPad->NewState.RightStickX); + SET_INTEGER_PARAM(3, pPad->NewState.RightStickY); + StoreParameters(&m_nIp, 4); + return 0; + } + case COMMAND_IS_CAR_ON_FIRE: + { + CollectParameters(&m_nIp, 1); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + bool bOnFire = false; + if (pVehicle->m_pCarFire) + bOnFire = true; + if (pVehicle->m_vehType == VEHICLE_TYPE_CAR && ((CAutomobile*)pVehicle)->Damage.GetEngineStatus() >= ENGINE_STATUS_ON_FIRE) + bOnFire = true; + if (pVehicle->m_fHealth < 250.0f) + bOnFire = true; + UpdateCompareFlag(bOnFire); + return 0; + } + case COMMAND_IS_CAR_TYRE_BURST: + { + CollectParameters(&m_nIp, 2); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + bool bIsBurst = false; + CBike* pBike = (CBike*)pVehicle; + if (pVehicle->IsBike()) { + if (GET_INTEGER_PARAM(1) == 4) { + for (int i = 0; i < 2; i++) { + if (pBike->m_wheelStatus[i] == WHEEL_STATUS_BURST) + bIsBurst = true; + } + } + else { + if (GET_INTEGER_PARAM(1) == 2) + SET_INTEGER_PARAM(1, 0); + if (GET_INTEGER_PARAM(1) == 3) + SET_INTEGER_PARAM(1, 1); + bIsBurst = pBike->m_wheelStatus[GET_INTEGER_PARAM(1)] == WHEEL_STATUS_BURST; + } + } + else { + CAutomobile* pCar = (CAutomobile*)pVehicle; + if (GET_INTEGER_PARAM(1) == 4) { + for (int i = 0; i < 4; i++) { + if (pCar->Damage.GetWheelStatus(i) == WHEEL_STATUS_BURST) + bIsBurst = true; + } + } + else + bIsBurst = pCar->Damage.GetWheelStatus(GET_INTEGER_PARAM(1) == WHEEL_STATUS_BURST); + } + UpdateCompareFlag(bIsBurst); + return 0; + } + case COMMAND_HELI_GOTO_COORDS: + { + CollectParameters(&m_nIp, 5); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle && pVehicle->GetVehicleAppearance() == VEHICLE_APPEARANCE_HELI); + ((CAutomobile*)pVehicle)->TellHeliToGoToCoors(GET_FLOAT_PARAM(1), GET_FLOAT_PARAM(2), GET_FLOAT_PARAM(3), GET_INTEGER_PARAM(4)); + return 0; + } + case DUPLICATE_COMMAND_731: + { + script_assert(false && "DUPLICATE HACK NEED TEST"); // DUPLICATEH.TXT + return this->ProcessCommands0To99(27); // header duplicate + } + case COMMAND_GET_DEAD_CHAR_PICKUP_COORDS: + { + CollectParameters(&m_nIp, 1); + CPed *pTarget = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + CVector pos; + pTarget->CreateDeadPedPickupCoors(&pos.x, &pos.y, &pos.z); + SET_VECTOR_PARAM(0, pos); + StoreParameters(&m_nIp, 3); + return 0; + } + case COMMAND_CREATE_PROTECTION_PICKUP: + { + CollectParameters(&m_nIp, 5); CVector pos = GET_VECTOR_PARAM(0); if (pos.z <= MAP_Z_LOW_LIMIT) pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y) + PICKUP_PLACEMENT_OFFSET; CPickups::GetActualPickupIndex(CollectNextParameterWithoutIncreasingPC(m_nIp)); - SET_INTEGER_PARAM(0, CPickups::GenerateNewOne(pos, MI_MONEY, PICKUP_MONEY, GET_INTEGER_PARAM(3))); + SET_INTEGER_PARAM(0, CPickups::GenerateNewOne(pos, MI_PICKUP_REVENUE, PICKUP_ASSET_REVENUE, GET_INTEGER_PARAM(3), GET_INTEGER_PARAM(4))); // TODO: gpModelIndices StoreParameters(&m_nIp, 1); return 0; } - case COMMAND_SET_CHAR_ACCURACY: + case todo__comm_734: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_734"); + return 0; + } + case todo__comm_735: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_735"); + return 0; + } + case todo__comm_736: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_736"); + return 0; + } + case COMMAND_IS_CHAR_IN_WATER: + { + CollectParameters(&m_nIp, 1); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + UpdateCompareFlag(pPed && pPed->bIsInWater); + return 0; + } + case DUPLICATE_COMMAND_738: + { + script_assert(false && "DUPLICATE HACK NEED TEST"); // DUPLICATEH.TXT + return this->ProcessCommands0To99(4); // header duplicate + } + case DUPLICATE_COMMAND_739: + case DUPLICATE_COMMAND_740: + { + script_assert(false && "DUPLICATE HACK NEED TEST"); // DUPLICATEH.TXT + return this->ProcessCommands0To99(15); // header duplicate + } + case DUPLICATE_COMMAND_741: + case DUPLICATE_COMMAND_742: + { + script_assert(false && "DUPLICATE HACK NEED TEST"); // DUPLICATEH.TXT + return this->ProcessCommands0To99(21); // header duplicate + } + case COMMAND_GET_CHAR_WEAPON_IN_SLOT: { CollectParameters(&m_nIp, 2); CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); script_assert(pPed); - pPed->m_wepAccuracy = Min(100, GET_INTEGER_PARAM(1) * 1.25f); + SET_INTEGER_PARAM(0, pPed->GetWeapon(GET_INTEGER_PARAM(1) - 1).m_eWeaponType); + SET_INTEGER_PARAM(1, pPed->GetWeapon(GET_INTEGER_PARAM(1) - 1).m_nAmmoTotal); + SET_INTEGER_PARAM(2, CPickups::ModelForWeapon((eWeaponType)GET_INTEGER_PARAM(0))); + StoreParameters(&m_nIp, 3); return 0; } - case COMMAND_GET_CAR_SPEED: + case COMMAND_GET_CLOSEST_STRAIGHT_ROAD: { - CollectParameters(&m_nIp, 1); + CollectParameters(&m_nIp, 5); + int node1, node2; + float angle; + ThePaths.FindNodePairClosestToCoors(GET_VECTOR_PARAM(0), PATH_CAR, &node1, &node2, &angle, + GET_FLOAT_PARAM(3), GET_FLOAT_PARAM(4), true, true); + if (node1 == -1) { + for (int i = 0; i < 7; i++) + ScriptParams[i] = 0; + } + else { + SET_VECTOR_PARAM(0, ThePaths.FindNodeCoorsForScript(node1)); + SET_VECTOR_PARAM(3, ThePaths.FindNodeCoorsForScript(node2)); + SET_FLOAT_PARAM(6, angle); + } + StoreParameters(&m_nIp, 7); + return 0; + } + case COMMAND_SET_CAR_FORWARD_SPEED: + { + CollectParameters(&m_nIp, 2); CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); script_assert(pVehicle); - SET_FLOAT_PARAM(0, pVehicle->GetSpeed().Magnitude() * GAME_SPEED_TO_METERS_PER_SECOND); + float speed = GET_FLOAT_PARAM(1) / GAME_SPEED_TO_CARAI_SPEED; + pVehicle->SetMoveSpeed(pVehicle->GetForward() * speed); + if (pVehicle->IsRealHeli() && pVehicle->IsCar()) + ((CAutomobile*)pVehicle)->m_aWheelSpeed[1] = 0.22f; + return 0; + } + case COMMAND_SET_AREA_VISIBLE: + CollectParameters(&m_nIp, 1); + CGame::currArea = GET_INTEGER_PARAM(0); + CStreaming::RemoveBuildingsNotInArea(GET_INTEGER_PARAM(0)); + return 0; + case COMMAND_MARK_CAR_AS_CONVOY_CAR: + { + CollectParameters(&m_nIp, 2); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + pVehicle->bPartOfConvoy = GET_INTEGER_PARAM(1); + return 0; + } + case COMMAND_RESET_HAVOC_CAUSED_BY_PLAYER: + { + CollectParameters(&m_nIp, 1); + CWorld::Players[GET_INTEGER_PARAM(0)].m_nHavocLevel = 0; + return 0; + } + case COMMAND_GET_HAVOC_CAUSED_BY_PLAYER: + { + CollectParameters(&m_nIp, 1); + SET_INTEGER_PARAM(0, CWorld::Players[GET_INTEGER_PARAM(0)].m_nHavocLevel); StoreParameters(&m_nIp, 1); return 0; } - case COMMAND_LOAD_CUTSCENE: + case COMMAND_GET_OFFSET_FROM_CHAR_IN_WORLD_COORDS: { - char name[KEY_LENGTH_IN_SCRIPT]; - strncpy(name, (const char*)&CTheScripts::ScriptSpace[m_nIp], KEY_LENGTH_IN_SCRIPT); - // unknown call FUN_29df68(name) on PS2 - not on PSP - m_nIp += KEY_LENGTH_IN_SCRIPT; - CColStore::RemoveAllCollision(); - CCutsceneMgr::LoadCutsceneData(name); + CollectParameters(&m_nIp, 4); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + CVector result = Multiply3x3(pPed->GetMatrix(), GET_VECTOR_PARAM(1)) + pPed->GetPosition(); + SET_VECTOR_PARAM(0, result); + StoreParameters(&m_nIp, 3); return 0; } - case COMMAND_CREATE_CUTSCENE_OBJECT: + case COMMAND_HAS_CHAR_BEEN_PHOTOGRAPHED: { CollectParameters(&m_nIp, 1); - CCutsceneObject* pCutObj = CCutsceneMgr::CreateCutsceneObject(GET_INTEGER_PARAM(0)); - SET_INTEGER_PARAM(0, CPools::GetObjectPool()->GetIndex(pCutObj)); - StoreParameters(&m_nIp, 1); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + bool result = false; + if (pPed->bHasBeenPhotographed) { + result = true; + pPed->bHasBeenPhotographed = false; + } + UpdateCompareFlag(result); return 0; } - case COMMAND_SET_CUTSCENE_ANIM: + case COMMAND_SWITCH_SECURITY_CAMERA: { CollectParameters(&m_nIp, 1); - char name[KEY_LENGTH_IN_SCRIPT]; + if (GET_INTEGER_PARAM(0) != 0) { + // TheCamera.MBlur.? = 3; TODO(LCS) + CSpecialFX::bVideoCam = true; + } + else { + // TheCamera.MBlur.Reset(); + CSpecialFX::bVideoCam = false; + } + return 0; + } + case todo__comm_753: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_753"); + return 0; + } + case COMMAND_SET_HELI_ORIENTATION: + { + CollectParameters(&m_nIp, 2); + CAutomobile* pHeli = (CAutomobile*)CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pHeli && pHeli->IsCar() && pHeli->IsRealHeli()); + float fAngle = DEGTORAD(GET_FLOAT_PARAM(1) - 90.0f); + while (fAngle < 0.0f) + fAngle += TWOPI; + while (fAngle > TWOPI) + fAngle -= TWOPI; + pHeli->SetHeliOrientation(fAngle); + return 0; + } + case COMMAND_CLEAR_HELI_ORIENTATION: + { + CollectParameters(&m_nIp, 1); + CAutomobile* pHeli = (CAutomobile*)CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pHeli && pHeli->IsCar() && pHeli->IsRealHeli()); + pHeli->ClearHeliOrientation(); + return 0; + } + case COMMAND_PLANE_GOTO_COORDS: + { + CollectParameters(&m_nIp, 5); + CAutomobile* pPlane = (CAutomobile*)CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPlane && pPlane->IsCar() && pPlane->IsRealPlane()); + pPlane->TellPlaneToGoToCoors(GET_FLOAT_PARAM(1), GET_FLOAT_PARAM(2), GET_FLOAT_PARAM(3), GET_INTEGER_PARAM(4)); + return 0; + } + case COMMAND_GET_NTH_CLOSEST_CAR_NODE: + { + CollectParameters(&m_nIp, 4); + CVector pos = GET_VECTOR_PARAM(0); + if (pos.z <= MAP_Z_LOW_LIMIT) + pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); + SET_VECTOR_PARAM(0, ThePaths.FindNodeCoorsForScript(ThePaths.FindNthNodeClosestToCoors(pos, 0, 999999.9f, true, true, GET_INTEGER_PARAM(3) - 1))); + StoreParameters(&m_nIp, 3); + return 0; + } + case COMMAND_GET_NTH_CLOSEST_CHAR_NODE: + { + CollectParameters(&m_nIp, 4); + CVector pos = GET_VECTOR_PARAM(0); + if (pos.z <= MAP_Z_LOW_LIMIT) + pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); + SET_VECTOR_PARAM(0, ThePaths.FindNodeCoorsForScript(ThePaths.FindNthNodeClosestToCoors(pos, 1, 999999.9f, true, true, GET_INTEGER_PARAM(3) - 1))); + StoreParameters(&m_nIp, 3); + return 0; + } + case COMMAND_SET_ENABLE_RC_DETONATE_ON_CONTACT: + { + CollectParameters(&m_nIp, 1); + CVehicle::bDisableRemoteDetonationOnContact = (GET_INTEGER_PARAM(0) == 0); + return 0; + } + case COMMAND_FREEZE_CHAR_POSITION: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + pPed->bIsFrozen = GET_INTEGER_PARAM(1); + return 0; + } + case COMMAND_SET_CHAR_DROWNS_IN_WATER: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + pPed->bDrownsInWater = GET_INTEGER_PARAM(1); + return 0; + } + case COMMAND_SET_OBJECT_RECORDS_COLLISIONS: + { + CollectParameters(&m_nIp, 2); CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); script_assert(pObject); - strncpy(name, (const char*)&CTheScripts::ScriptSpace[m_nIp], KEY_LENGTH_IN_SCRIPT); - m_nIp += KEY_LENGTH_IN_SCRIPT; - CCutsceneMgr::SetCutsceneAnim(name, pObject); + pObject->bUseCollisionRecords = GET_INTEGER_PARAM(1); return 0; } - case COMMAND_START_CUTSCENE: - CCutsceneMgr::StartCutscene(); - return 0; - case COMMAND_GET_CUTSCENE_TIME: - SET_INTEGER_PARAM(0, CCutsceneMgr::GetCutsceneTimeInMilleseconds()); - StoreParameters(&m_nIp, 1); - return 0; - case COMMAND_HAS_CUTSCENE_FINISHED: + case COMMAND_HAS_OBJECT_COLLIDED_WITH_ANYTHING: { - bool bFinished = CCutsceneMgr::HasCutsceneFinished(); - if (bFinished) - printf("cutscene has now finished\n"); - UpdateCompareFlag(bFinished); - return 0; - } - case COMMAND_CLEAR_CUTSCENE: - // unknown call on PS2 FUN_29DFA0() - not on PSP - printf("clear cutscene\n"); - CCutsceneMgr::DeleteCutsceneData(); - return 0; - case COMMAND_RESTORE_CAMERA_JUMPCUT: - TheCamera.RestoreWithJumpCut(); - return 0; - case COMMAND_CREATE_COLLECTABLE1: - { - CollectParameters(&m_nIp, 3); - CVector pos = GET_VECTOR_PARAM(0); - if (pos.z <= MAP_Z_LOW_LIMIT) - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y) + PICKUP_PLACEMENT_OFFSET; - CPickups::GenerateNewOne(pos, MI_COLLECTABLE1, PICKUP_COLLECTABLE1, 0); // TODO: gpModelIndices - return 0; - } - case COMMAND_SET_COLLECTABLE1_TOTAL: CollectParameters(&m_nIp, 1); - CWorld::Players[CWorld::PlayerInFocus].m_nTotalPackages = GET_INTEGER_PARAM(0); - return 0; - /* - case COMMAND_IS_PROJECTILE_IN_AREA: - { - CollectParameters(&m_nIp, 6); - float infX = GET_FLOAT_PARAM(0); - float infY = GET_FLOAT_PARAM(1); - float infZ = GET_FLOAT_PARAM(2); - float supX = GET_FLOAT_PARAM(3); - float supY = GET_FLOAT_PARAM(4); - float supZ = GET_FLOAT_PARAM(5); - if (infX > supX) { - infX = GET_FLOAT_PARAM(3); - supX = GET_FLOAT_PARAM(0); - } - if (infY > supY) { - infY = GET_FLOAT_PARAM(4); - supY = GET_FLOAT_PARAM(1); - } - if (infZ > supZ) { - infZ = GET_FLOAT_PARAM(5); - supZ = GET_FLOAT_PARAM(2); - } - UpdateCompareFlag(CProjectileInfo::IsProjectileInRange(infX, supX, infY, supY, infZ, supZ, false)); - if (CTheScripts::DbgFlag) - CTheScripts::DrawDebugCube(infX, infY, infZ, supX, supY, supZ); + CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pObject); + UpdateCompareFlag(pObject->m_nCollisionRecords != 0); return 0; } - case COMMAND_DESTROY_PROJECTILES_IN_AREA: + case COMMAND_REMOVE_RC_BUGGY: { - CollectParameters(&m_nIp, 6); - float infX = GET_FLOAT_PARAM(0); - float infY = GET_FLOAT_PARAM(1); - float infZ = GET_FLOAT_PARAM(2); - float supX = GET_FLOAT_PARAM(3); - float supY = GET_FLOAT_PARAM(4); - float supZ = GET_FLOAT_PARAM(5); - if (infX > supX) { - infX = GET_FLOAT_PARAM(3); - supX = GET_FLOAT_PARAM(0); - } - if (infY > supY) { - infY = GET_FLOAT_PARAM(4); - supY = GET_FLOAT_PARAM(1); - } - if (infZ > supZ) { - infZ = GET_FLOAT_PARAM(5); - supZ = GET_FLOAT_PARAM(2); - } - UpdateCompareFlag(CProjectileInfo::IsProjectileInRange(infX, supX, infY, supY, infZ, supZ, true)); - if (CTheScripts::DbgFlag) - CTheScripts::DrawDebugCube(infX, infY, infZ, supX, supY, supZ); + CWorld::Players[CWorld::PlayerInFocus].BlowUpRCBuggy(false); return 0; } - case COMMAND_DROP_MINE: - { - CollectParameters(&m_nIp, 3); - CVector pos = GET_VECTOR_PARAM(0); - if (pos.z <= MAP_Z_LOW_LIMIT) - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y) + PICKUP_PLACEMENT_OFFSET; - CPickups::GenerateNewOne(pos, MI_CARMINE, PICKUP_MINE_INACTIVE, 0); + case COMMAND_HAS_PHOTOGRAPH_BEEN_TAKEN: + UpdateCompareFlag(CWeapon::bPhotographHasBeenTaken); + CWeapon::bPhotographHasBeenTaken = false; return 0; - } - case COMMAND_DROP_NAUTICAL_MINE: + case COMMAND_GET_CHAR_ARMOUR: { - CollectParameters(&m_nIp, 3); - CVector pos = GET_VECTOR_PARAM(0); - if (pos.z <= MAP_Z_LOW_LIMIT) - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y) + PICKUP_PLACEMENT_OFFSET; - CPickups::GenerateNewOne(pos, MI_NAUTICALMINE, PICKUP_MINE_INACTIVE, 0); - return 0; - } - */ - case COMMAND_IS_CHAR_MODEL: - { - CollectParameters(&m_nIp, 2); + CollectParameters(&m_nIp, 1); CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); script_assert(pPed); - UpdateCompareFlag(GET_INTEGER_PARAM(1) == pPed->GetModelIndex()); + SET_INTEGER_PARAM(0, pPed->m_fArmour); + StoreParameters(&m_nIp, 1); return 0; } - case COMMAND_LOAD_SPECIAL_MODEL: + case COMMAND_SET_HELI_STABILISER: + { + CollectParameters(&m_nIp, 2); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + pVehicle->bHeliMinimumTilt = GET_INTEGER_PARAM(1); + return 0; + } + case COMMAND_SET_CAR_STRAIGHT_LINE_DISTANCE: + { + CollectParameters(&m_nIp, 2); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + pVehicle->AutoPilot.m_nSwitchDistance = GET_INTEGER_PARAM(1); + return 0; + } + case COMMAND_POP_CAR_BOOT: { CollectParameters(&m_nIp, 1); - char name[KEY_LENGTH_IN_SCRIPT]; - strncpy(name, (const char*)&CTheScripts::ScriptSpace[m_nIp], KEY_LENGTH_IN_SCRIPT); + CAutomobile* pCar = (CAutomobile*)CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pCar&& pCar->IsCar()); + pCar->PopBoot(); + return 0; + } + case COMMAND_SET_PLAYER_MOOD: + { + CollectParameters(&m_nIp, 3); + DMAudio.SetPlayersMood(GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2)); + return 0; + } + case COMMAND_REQUEST_COLLISION: + { + CollectParameters(&m_nIp, 2); + CVector pos; + pos.x = GET_FLOAT_PARAM(0); + pos.y = GET_FLOAT_PARAM(1); + pos.z = 0.0f; + CColStore::RequestCollision(pos); + return 0; + } + case COMMAND_LOCATE_OBJECT_2D: + case COMMAND_LOCATE_OBJECT_3D: + LocateObjectCommand(command, &m_nIp); + return 0; + case COMMAND_IS_OBJECT_IN_WATER: + { + CollectParameters(&m_nIp, 1); + CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); + UpdateCompareFlag(pObject && pObject->bIsInWater); + return 0; + } + case COMMAND_IS_OBJECT_IN_AREA_2D: + case COMMAND_IS_OBJECT_IN_AREA_3D: + ObjectInAreaCheckCommand(command, &m_nIp); + return 0; + case COMMAND_SET_CHAR_CROUCH: + { + CollectParameters(&m_nIp, 3); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + if (GET_INTEGER_PARAM(1)) { + pPed->bCrouchWhenShooting = true; + pPed->SetDuck(GET_INTEGER_PARAM(2), true); + } + else { + pPed->ClearDuck(true); + pPed->bCrouchWhenShooting = false; + } + return 0; + } + case todo__comm_778: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_778"); + return 0; + } + case COMMAND_REQUEST_ANIMATION: + { + char key[KEY_LENGTH_IN_SCRIPT]; + CTheScripts::ReadTextLabelFromScript(&m_nIp, key); + m_nIp += KEY_LENGTH_IN_SCRIPT; + CStreaming::RequestAnim(CAnimManager::GetAnimationBlockIndex(key), (m_bIsMissionScript ? STREAMFLAGS_SCRIPTOWNED : STREAMFLAGS_AMBIENT_SCRIPT_OWNED)); + return 0; + } + case COMMAND_HAS_ANIMATION_LOADED: + { + char key[KEY_LENGTH_IN_SCRIPT]; + CTheScripts::ReadTextLabelFromScript(&m_nIp, key); + m_nIp += KEY_LENGTH_IN_SCRIPT; + UpdateCompareFlag(CAnimManager::GetAnimationBlock(key)->isLoaded); + return 0; + } + case COMMAND_REMOVE_ANIMATION: + { + char key[KEY_LENGTH_IN_SCRIPT]; + CTheScripts::ReadTextLabelFromScript(&m_nIp, key); + m_nIp += KEY_LENGTH_IN_SCRIPT; + CStreaming::RemoveAnim(CAnimManager::GetAnimationBlockIndex(key)); + // + empty function on PS2 (not PSP) + return 0; + } + case COMMAND_SET_CHAR_SHUFFLE_INTO_DRIVERS_SEAT: + { + CollectParameters(&m_nIp, 1); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + pPed->PedShuffle(); + return 0; + } + case COMMAND_ATTACH_CHAR_TO_OBJECT: + { + CollectParameters(&m_nIp, 8); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(1)); + pPed->AttachPedToEntity(pObject, GET_VECTOR_PARAM(2), GET_INTEGER_PARAM(5), DEGTORAD(GET_INTEGER_PARAM(6)), (eWeaponType)GET_INTEGER_PARAM(7)); + return 0; + } + case COMMAND_SET_CHAR_AS_PLAYER_FRIEND: + { + CollectParameters(&m_nIp, 3); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + pPed->bIsPlayerFriend = GET_INTEGER_PARAM(2); + return 0; + } + case COMMAND_DISPLAY_NTH_ONSCREEN_COUNTER_WITH_STRING: + { + char onscreen_str[12]; + //script_assert(CTheScripts::ScriptSpace[m_nIp++] == ARGUMENT_GLOBALVAR); + uint16 var = (uint8*)GetPointerToScriptVariable(&m_nIp) - CTheScripts::ScriptSpace; + CollectParameters(&m_nIp, 2); + wchar* text = TheText.Get((char*)&CTheScripts::ScriptSpace[m_nIp]); // ??? + strncpy(onscreen_str, (char*)&CTheScripts::ScriptSpace[m_nIp], KEY_LENGTH_IN_SCRIPT); + m_nIp += KEY_LENGTH_IN_SCRIPT; + CUserDisplay::OnscnTimer.AddCounter(var, GET_INTEGER_PARAM(0), onscreen_str, GET_INTEGER_PARAM(1) - 1, -1, nil, 0); + return 0; + } + case COMMAND_ADD_SET_PIECE: + { + CollectParameters(&m_nIp, 13); + float fTriggerInfX = GET_FLOAT_PARAM(1); + float fTriggerInfY = GET_FLOAT_PARAM(2); + float fTriggerSupX = GET_FLOAT_PARAM(3); + float fTriggerSupY = GET_FLOAT_PARAM(4); + float fSpawn1X = GET_FLOAT_PARAM(5); + float fSpawn1Y = GET_FLOAT_PARAM(6); + float fTarget1X = GET_FLOAT_PARAM(7); + float fTarget1Y = GET_FLOAT_PARAM(8); + float fSpawn2X = GET_FLOAT_PARAM(9); + float fSpawn2Y = GET_FLOAT_PARAM(10); + float fTarget2X = GET_FLOAT_PARAM(11); + float fTarget2Y = GET_FLOAT_PARAM(12); + CSetPieces::AddOne(GET_INTEGER_PARAM(0), + CVector2D(fTriggerInfX, fTriggerInfY), CVector2D(fTriggerSupX, fTriggerSupY), + CVector2D(fSpawn1X, fSpawn1Y), CVector2D(fTarget1X, fTarget1Y), + CVector2D(fSpawn2X, fSpawn2Y), CVector2D(fTarget2X, fTarget2Y)); + return 0; + } + case COMMAND_SET_EXTRA_COLOURS: + { + CollectParameters(&m_nIp, 2); + CTimeCycle::StartExtraColour(GET_INTEGER_PARAM(0)-1, GET_INTEGER_PARAM(1) != 0); + return 0; + } + case COMMAND_CLEAR_EXTRA_COLOURS: + { + CollectParameters(&m_nIp, 1); + CTimeCycle::StopExtraColour(GET_INTEGER_PARAM(0)); + return 0; + } + case COMMAND_GET_WHEELIE_STATS: + { + CollectParameters(&m_nIp, 1); + CPlayerInfo* pPlayerInfo = &CWorld::Players[GET_INTEGER_PARAM(0)]; + SET_INTEGER_PARAM(0, pPlayerInfo->m_nLastTimeCarSpentOnTwoWheels); + SET_FLOAT_PARAM(1, pPlayerInfo->m_nLastDistanceCarTravelledOnTwoWheels); + SET_INTEGER_PARAM(2, pPlayerInfo->m_nLastTimeSpentOnWheelie); + SET_FLOAT_PARAM(3, pPlayerInfo->m_nLastDistanceTravelledOnWheelie); + SET_INTEGER_PARAM(4, pPlayerInfo->m_nLastTimeSpentOnStoppie); + SET_FLOAT_PARAM(5, pPlayerInfo->m_nLastDistanceTravelledOnStoppie); + StoreParameters(&m_nIp, 6); + pPlayerInfo->m_nLastTimeCarSpentOnTwoWheels = 0; + pPlayerInfo->m_nLastDistanceCarTravelledOnTwoWheels = 0.0f; + pPlayerInfo->m_nLastTimeSpentOnWheelie = 0; + pPlayerInfo->m_nLastDistanceTravelledOnWheelie = 0.0f; + pPlayerInfo->m_nLastTimeSpentOnStoppie = 0; + pPlayerInfo->m_nLastDistanceTravelledOnStoppie = 0.0f; + return 0; + } + case COMMAND_BURST_CAR_TYRE: + { + CollectParameters(&m_nIp, 2); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + if (pVehicle->IsBike()) { + if (GET_INTEGER_PARAM(1) == 2) + SET_INTEGER_PARAM(1, 0); + else if (GET_INTEGER_PARAM(1) == 3) + SET_INTEGER_PARAM(1, 1); + } + pVehicle->BurstTyre(GET_INTEGER_PARAM(1), true); + return 0; + } + case COMMAND_IS_CHAR_OBJ_NO_OBJ: + { + CollectParameters(&m_nIp, 1); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + UpdateCompareFlag(pPed->m_prevObjective == OBJECTIVE_NONE && pPed->m_objective == OBJECTIVE_NONE); + return 0; + } + case COMMAND_IS_PLAYER_WEARING: + { + CollectParameters(&m_nIp, 1); + char key[12]; + CTheScripts::ReadTextLabelFromScript(&m_nIp, key); + m_nIp += KEY_LENGTH_IN_SCRIPT; for (int i = 0; i < KEY_LENGTH_IN_SCRIPT; i++) - name[i] = tolower(name[i]); - CStreaming::RequestSpecialModel(GET_INTEGER_PARAM(0), name, STREAMFLAGS_DEPENDENCY | (m_bIsMissionScript ? STREAMFLAGS_SCRIPTOWNED : STREAMFLAGS_AMBIENT_SCRIPT_OWNED)); - m_nIp += KEY_LENGTH_IN_SCRIPT; + key[i] = tolower(key[i]); + CPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; + script_assert(pPed); + UpdateCompareFlag(CModelInfo::GetModelInfo(pPed->GetModelIndex())->GetNameHashKey() == CKeyGen::GetUppercaseKey(key)); return 0; } - //case COMMAND_CREATE_CUTSCENE_HEAD: - //case COMMAND_SET_CUTSCENE_HEAD_ANIM: - case COMMAND_SIN: - CollectParameters(&m_nIp, 1); - SET_FLOAT_PARAM(0, Sin(DEGTORAD(GET_FLOAT_PARAM(0)))); - StoreParameters(&m_nIp, 1); - return 0; - case COMMAND_COS: - CollectParameters(&m_nIp, 1); - SET_FLOAT_PARAM(0, Cos(DEGTORAD(GET_FLOAT_PARAM(0)))); - StoreParameters(&m_nIp, 1); - return 0; - case COMMAND_GET_CAR_FORWARD_X: + case COMMAND_SET_PLAYER_CAN_DO_DRIVE_BY: { - CollectParameters(&m_nIp, 1); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - float forwardX = pVehicle->GetForward().x / pVehicle->GetForward().Magnitude2D(); - SET_FLOAT_PARAM(0, forwardX); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_GET_CAR_FORWARD_Y: - { - CollectParameters(&m_nIp, 1); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - float forwardY = pVehicle->GetForward().y / pVehicle->GetForward().Magnitude2D(); - SET_FLOAT_PARAM(0, forwardY); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_CHANGE_GARAGE_TYPE: CollectParameters(&m_nIp, 2); - CGarages::ChangeGarageType(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), 0); - return 0; - case COMMAND_ACTIVATE_CRUSHER_CRANE: - { - CollectParameters(&m_nIp, 10); - float infX = GET_FLOAT_PARAM(2); - float infY = GET_FLOAT_PARAM(3); - float supX = GET_FLOAT_PARAM(4); - float supY = GET_FLOAT_PARAM(5); - if (infX > supX) { - infX = GET_FLOAT_PARAM(4); - supX = GET_FLOAT_PARAM(2); - } - if (infY > supY) { - infY = GET_FLOAT_PARAM(5); - supY = GET_FLOAT_PARAM(3); - } - CCranes::ActivateCrane(infX, supX, infY, supY, - GET_FLOAT_PARAM(6), GET_FLOAT_PARAM(7), GET_FLOAT_PARAM(8), - DEGTORAD(GET_FLOAT_PARAM(9)), true, false, - GET_FLOAT_PARAM(0), GET_FLOAT_PARAM(1)); + CPlayerInfo* pPlayerInfo = &CWorld::Players[GET_INTEGER_PARAM(0)]; + pPlayerInfo->m_bDriveByAllowed = GET_INTEGER_PARAM(1); return 0; } - case COMMAND_PRINT_WITH_2_NUMBERS: - { - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CollectParameters(&m_nIp, 4); - CMessages::AddMessageWithNumber(text, GET_INTEGER_PARAM(2), GET_INTEGER_PARAM(3), GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), -1, -1, -1, -1); - return 0; - } - case COMMAND_PRINT_WITH_2_NUMBERS_NOW: - { - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CollectParameters(&m_nIp, 4); - CMessages::AddMessageJumpQWithNumber(text, GET_INTEGER_PARAM(2), GET_INTEGER_PARAM(3), GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), -1, -1, -1, -1); - return 0; - } - case COMMAND_PRINT_WITH_2_NUMBERS_SOON: - { - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CollectParameters(&m_nIp, 4); - CMessages::AddMessageSoonWithNumber(text, GET_INTEGER_PARAM(2), GET_INTEGER_PARAM(3), GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), -1, -1, -1, -1); - return 0; - } - case COMMAND_PRINT_WITH_3_NUMBERS: - { - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CollectParameters(&m_nIp, 5); - CMessages::AddMessageWithNumber(text, GET_INTEGER_PARAM(3), GET_INTEGER_PARAM(4), GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), -1, -1, -1); - return 0; - } - case COMMAND_PRINT_WITH_3_NUMBERS_NOW: - { - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CollectParameters(&m_nIp, 5); - CMessages::AddMessageJumpQWithNumber(text, GET_INTEGER_PARAM(3), GET_INTEGER_PARAM(4), GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), -1, -1, -1); - return 0; - } - /* - case COMMAND_PRINT_WITH_3_NUMBERS_SOON: - { - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CollectParameters(&m_nIp, 5); - CMessages::AddMessageSoonWithNumber(text, GET_INTEGER_PARAM(3), GET_INTEGER_PARAM(4), GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), -1, -1, -1); - return 0; - } - */ - case COMMAND_PRINT_WITH_4_NUMBERS: - { - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CollectParameters(&m_nIp, 6); - CMessages::AddMessageWithNumber(text, GET_INTEGER_PARAM(4), GET_INTEGER_PARAM(5), GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), GET_INTEGER_PARAM(3), -1, -1); - return 0; - } - /* - case COMMAND_PRINT_WITH_4_NUMBERS_NOW: - { - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CollectParameters(&m_nIp, 6); - CMessages::AddMessageJumpQWithNumber(text, GET_INTEGER_PARAM(4), GET_INTEGER_PARAM(5), GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), GET_INTEGER_PARAM(3), -1, -1); - return 0; - } - case COMMAND_PRINT_WITH_4_NUMBERS_SOON: - { - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CollectParameters(&m_nIp, 6); - CMessages::AddMessageSoonWithNumber(text, GET_INTEGER_PARAM(4), GET_INTEGER_PARAM(5), GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), GET_INTEGER_PARAM(3), -1, -1); - return 0; - } - case COMMAND_PRINT_WITH_5_NUMBERS: - { - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CollectParameters(&m_nIp, 7); - CMessages::AddMessageWithNumber(text, GET_INTEGER_PARAM(5), GET_INTEGER_PARAM(6), GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), GET_INTEGER_PARAM(3), GET_INTEGER_PARAM(4), -1); - return 0; - } - case COMMAND_PRINT_WITH_5_NUMBERS_NOW: - { - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CollectParameters(&m_nIp, 7); - CMessages::AddMessageJumpQWithNumber(text, GET_INTEGER_PARAM(5), GET_INTEGER_PARAM(6), GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), GET_INTEGER_PARAM(3), GET_INTEGER_PARAM(4), -1); - return 0; - } - case COMMAND_PRINT_WITH_5_NUMBERS_SOON: - { - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CollectParameters(&m_nIp, 7); - CMessages::AddMessageSoonWithNumber(text, GET_INTEGER_PARAM(5), GET_INTEGER_PARAM(6), GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), GET_INTEGER_PARAM(3), GET_INTEGER_PARAM(4), -1); - return 0; - } - */ - case COMMAND_PRINT_WITH_6_NUMBERS: - { - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CollectParameters(&m_nIp, 8); - CMessages::AddMessageWithNumber(text, GET_INTEGER_PARAM(6), GET_INTEGER_PARAM(7), GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), GET_INTEGER_PARAM(3), GET_INTEGER_PARAM(4), GET_INTEGER_PARAM(5)); - return 0; - } - /* - case COMMAND_PRINT_WITH_6_NUMBERS_NOW: - { - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CollectParameters(&m_nIp, 8); - CMessages::AddMessageJumpQWithNumber(text, GET_INTEGER_PARAM(6), GET_INTEGER_PARAM(7), GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), GET_INTEGER_PARAM(3), GET_INTEGER_PARAM(4), GET_INTEGER_PARAM(5)); - return 0; - } - case COMMAND_PRINT_WITH_6_NUMBERS_SOON: - { - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CollectParameters(&m_nIp, 8); - CMessages::AddMessageSoonWithNumber(text, GET_INTEGER_PARAM(6), GET_INTEGER_PARAM(7), GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), GET_INTEGER_PARAM(3), GET_INTEGER_PARAM(4), GET_INTEGER_PARAM(5)); - return 0; - } - */ - case COMMAND_SET_CHAR_OBJ_FOLLOW_CHAR_IN_FORMATION: + case COMMAND_CREATE_SWAT_ROPE: { CollectParameters(&m_nIp, 3); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - CPed* pTargetPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(1)); - pPed->bScriptObjectiveCompleted = false; - pPed->SetObjective(OBJECTIVE_FOLLOW_CHAR_IN_FORMATION, pTargetPed); - pPed->SetFormation((eFormation)GET_INTEGER_PARAM(2)); + CRopes::CreateRopeWithSwatComingDown(GET_VECTOR_PARAM(0)); return 0; } - case COMMAND_PLAYER_MADE_PROGRESS: - CollectParameters(&m_nIp, 1); - CStats::ProgressMade += GET_INTEGER_PARAM(0); - return 0; - case COMMAND_SET_PROGRESS_TOTAL: - CollectParameters(&m_nIp, 1); - CStats::TotalProgressInGame = GET_INTEGER_PARAM(0); - return 0; - case COMMAND_REGISTER_JUMP_DISTANCE: - CollectParameters(&m_nIp, 1); - CStats::MaximumJumpDistance = Max(CStats::MaximumJumpDistance, GET_FLOAT_PARAM(0)); - return 0; - case COMMAND_REGISTER_JUMP_HEIGHT: - CollectParameters(&m_nIp, 1); - CStats::MaximumJumpHeight = Max(CStats::MaximumJumpHeight, GET_FLOAT_PARAM(0)); - return 0; - case COMMAND_REGISTER_JUMP_FLIPS: - CollectParameters(&m_nIp, 1); - CStats::MaximumJumpFlips = Max(CStats::MaximumJumpFlips, GET_INTEGER_PARAM(0)); - return 0; - case COMMAND_REGISTER_JUMP_SPINS: - CollectParameters(&m_nIp, 1); - CStats::MaximumJumpSpins = Max(CStats::MaximumJumpSpins, GET_INTEGER_PARAM(0)); - return 0; - case COMMAND_REGISTER_JUMP_STUNT: - CollectParameters(&m_nIp, 1); - CStats::BestStuntJump = Max(CStats::BestStuntJump, GET_INTEGER_PARAM(0)); - return 0; - case COMMAND_REGISTER_UNIQUE_JUMP_FOUND: - ++CStats::NumberOfUniqueJumpsFound; - return 0; - case COMMAND_SET_UNIQUE_JUMPS_TOTAL: - CollectParameters(&m_nIp, 1); - CStats::TotalNumberOfUniqueJumps = GET_INTEGER_PARAM(0); - return 0; - case COMMAND_REGISTER_PASSENGER_DROPPED_OFF_TAXI: - ++CStats::PassengersDroppedOffWithTaxi; - return 0; - case COMMAND_REGISTER_MONEY_MADE_TAXI: - CollectParameters(&m_nIp, 1); - CStats::MoneyMadeWithTaxi += GET_INTEGER_PARAM(0); - return 0; - case COMMAND_REGISTER_MISSION_GIVEN: - ++CStats::MissionsGiven; - return 0; - case COMMAND_REGISTER_MISSION_PASSED: + case COMMAND_SET_CAR_MODEL_COMPONENTS: { - char name[KEY_LENGTH_IN_SCRIPT]; - strncpy(name, (const char*)&CTheScripts::ScriptSpace[m_nIp], KEY_LENGTH_IN_SCRIPT); - m_nIp += KEY_LENGTH_IN_SCRIPT; - strncpy(CStats::LastMissionPassedName, name, KEY_LENGTH_IN_SCRIPT); - ++CStats::MissionsPassed; - CStats::CheckPointReachedSuccessfully(); - CTheScripts::LastMissionPassedTime = CTimer::GetTimeInMilliseconds(); - CGameLogic::RemoveShortCutDropOffPointForMission(); + CollectParameters(&m_nIp, 3); + CVehicleModelInfo::SetComponentsToUse(GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2)); return 0; } - case COMMAND_SET_CHAR_RUNNING: + case COMMAND_CLOSE_ALL_CAR_DOORS: { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - pPed->bIsRunning = (GET_INTEGER_PARAM(1) != 0); + CollectParameters(&m_nIp, 1); + CAutomobile* pCar = (CAutomobile*)CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pCar&& pCar->IsCar()); + pCar->CloseAllDoors(); return 0; } - case COMMAND_REMOVE_ALL_SCRIPT_FIRES: - gFireManager.RemoveAllScriptFires(); - return 0; - /* - case COMMAND_IS_FIRST_CAR_COLOUR: + case COMMAND_GET_DISTANCE_BETWEEN_COORDS_2D: { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - UpdateCompareFlag(pVehicle->m_currentColour1 == GET_INTEGER_PARAM(1)); + CollectParameters(&m_nIp, 4); + float X1 = GET_FLOAT_PARAM(0); + float Y1 = GET_FLOAT_PARAM(1); + float X2 = GET_FLOAT_PARAM(2); + float Y2 = GET_FLOAT_PARAM(3); + SET_FLOAT_PARAM(0, (CVector2D(X1, Y1) - CVector2D(X2, Y2)).Magnitude()); + StoreParameters(&m_nIp, 1); return 0; } - case COMMAND_IS_SECOND_CAR_COLOUR: + case COMMAND_GET_DISTANCE_BETWEEN_COORDS_3D: { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - UpdateCompareFlag(pVehicle->m_currentColour2 == GET_INTEGER_PARAM(1)); + CollectParameters(&m_nIp, 6); + SET_FLOAT_PARAM(0, (GET_VECTOR_PARAM(0) - GET_VECTOR_PARAM(3)).Magnitude()); + StoreParameters(&m_nIp, 1); return 0; } - */ - case COMMAND_HAS_CHAR_BEEN_DAMAGED_BY_WEAPON: + case COMMAND_POP_CAR_BOOT_USING_PHYSICS: { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - bool result = false; - if (!pPed) - printf("HAS_CHAR_BEEN_DAMAGED_BY_WEAPON - Character doesn't exist\n"); - else { - if (GET_INTEGER_PARAM(1) == WEAPONTYPE_ANYMELEE || GET_INTEGER_PARAM(1) == WEAPONTYPE_ANYWEAPON) - result = CheckDamagedWeaponType(pPed->m_lastWepDam, GET_INTEGER_PARAM(1)); - else - result = GET_INTEGER_PARAM(1) == pPed->m_lastWepDam; - } - UpdateCompareFlag(result); - return 0; - } - case COMMAND_HAS_CAR_BEEN_DAMAGED_BY_WEAPON: - { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - bool result = false; - if (!pVehicle) - printf("HAS_CAR_BEEN_DAMAGED_BY_WEAPON - Vehicle doesn't exist\n"); - else { - if (GET_INTEGER_PARAM(1) == WEAPONTYPE_ANYMELEE || GET_INTEGER_PARAM(1) == WEAPONTYPE_ANYWEAPON) - result = CheckDamagedWeaponType(pVehicle->m_nLastWeaponDamage, GET_INTEGER_PARAM(1)); - else - result = GET_INTEGER_PARAM(1) == pVehicle->m_nLastWeaponDamage; - } - UpdateCompareFlag(result); - return 0; - } - case COMMAND_IS_CHAR_IN_CHARS_GROUP: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - CPed* pLeader = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(1)); - script_assert(pPed); - script_assert(pLeader); - UpdateCompareFlag(pPed->m_leader == pLeader && !pPed->bWaitForLeaderToComeCloser); + CollectParameters(&m_nIp, 1); + CAutomobile* pCar = (CAutomobile*)CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pCar && pCar->IsCar()); + pCar->PopBootUsingPhysics(); return 0; } + default: script_assert(0); } diff --git a/src/control/Script4.cpp b/src/control/Script4.cpp index 91c45bf2..75e49ed4 100644 --- a/src/control/Script4.cpp +++ b/src/control/Script4.cpp @@ -40,91 +40,228 @@ #include "Zones.h" #include "Bike.h" #include "Wanted.h" +//new +#include "GameLogic.h" +#include "Glass.h" +#include "MBlur.h" +#include "PedAttractor.h" +#include "VisibilityPlugins.h" +#include "Pad.h" +#include "CutsceneMgr.h" +#include "Remote.h" + +bool gDeveloperFlag; // LCS: file done except TODOs -#ifdef FIX_BUGS -static bool IsSlideObjectUsedWrongByScript(const CVector& posTarget, const CVector& slideBy) -{ - // TODO? - return false; -} -#endif - int8 CRunningScript::ProcessCommands800To899(int32 command) { CMatrix tmp_matrix; switch (command) { - case COMMAND_IS_CHAR_IN_PLAYERS_GROUP: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - CPed* pLeader = CWorld::Players[GET_INTEGER_PARAM(1)].m_pPed; - script_assert(pPed); - script_assert(pLeader); - UpdateCompareFlag(pPed->m_leader == pLeader && !pPed->bWaitForLeaderToComeCloser); - return 0; - } - case COMMAND_EXPLODE_CHAR_HEAD: + case COMMAND_IS_CHAR_LEAVING_VEHICLE_TO_DIE: { CollectParameters(&m_nIp, 1); CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); script_assert(pPed); - pPed->InflictDamage(nil, WEAPONTYPE_SNIPERRIFLE, 1000.0f, PEDPIECE_HEAD, 0); + UpdateCompareFlag(pPed->m_objective == OBJECTIVE_LEAVE_CAR_AND_DIE); return 0; } - case COMMAND_EXPLODE_PLAYER_HEAD: + case COMMAND_SORT_OUT_OBJECT_COLLISION_WITH_CAR: { - CollectParameters(&m_nIp, 1); - CPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; + CollectParameters(&m_nIp, 2); + CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pObject); + pObject->m_pCollidingEntity = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); + return 0; + } + case COMMAND_IS_CHAR_WANDER_PATH_CLEAR: + { + CollectParameters(&m_nIp, 5); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); script_assert(pPed); - pPed->InflictDamage(nil, WEAPONTYPE_SNIPERRIFLE, 1000.0f, PEDPIECE_HEAD, 0); + UpdateCompareFlag(CWorld::IsWanderPathClear(pPed->GetPosition(), GET_VECTOR_PARAM(0), GET_FLOAT_PARAM(3), 4)); return 0; } - case COMMAND_ANCHOR_BOAT: + case COMMAND_PRINT_HELP_FOREVER: { - CollectParameters(&m_nIp, 2); - CBoat* pBoat = (CBoat*)CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pBoat && pBoat->m_vehType == VEHICLE_TYPE_BOAT); - pBoat->m_bIsAnchored = (GET_INTEGER_PARAM(1) != 0); - return 0; - } - case COMMAND_SET_ZONE_GROUP: - { - char zone[KEY_LENGTH_IN_SCRIPT]; - CTheScripts::ReadTextLabelFromScript(&m_nIp, zone); - m_nIp += KEY_LENGTH_IN_SCRIPT; - CollectParameters(&m_nIp, 2); - int zone_id = CTheZones::FindZoneByLabelAndReturnIndex(zone, ZONE_INFO); - if (zone_id < 0) { - printf("Couldn't find zone - %s\n", zone); - return 0; - } - while (zone_id >= 0) { - CTheZones::SetPedGroup(zone_id, GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); - zone_id = CTheZones::FindNextZoneByLabelAndReturnIndex(zone, ZONE_INFO); + wchar* text = GetTextByKeyFromScript(&m_nIp); + CHud::SetHelpMessage(text, false, true); // + true + if (text != CHud::gLastPrintForeverString) { + CHud::gLastPrintForeverString = text; + DMAudio.PlayFrontEndSound(SOUND_HUD, 0); } return 0; } - case COMMAND_START_CAR_FIRE: + case COMMAND_SET_CHAR_CAN_BE_DAMAGED_BY_MEMBERS_OF_GANG: { - CollectParameters(&m_nIp, 1); + CollectParameters(&m_nIp, 3); + CPed* pTarget = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pTarget); + uint8 flag = 1 << (uint8)GET_INTEGER_PARAM(1); + if (GET_INTEGER_PARAM(2)) + pTarget->m_gangFlags |= flag; + else + pTarget->m_gangFlags &= ~flag; + + return 0; + } + case COMMAND_FREEZE_CAR_POSITION: + { + CollectParameters(&m_nIp, 2); CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); script_assert(pVehicle); - SET_INTEGER_PARAM(0, gFireManager.StartScriptFire(pVehicle->GetPosition(), pVehicle, 0.8f, 1)); + pVehicle->bIsFrozen = GET_INTEGER_PARAM(1); + pVehicle->bInfiniteMass = GET_INTEGER_PARAM(1); + return 0; + } + case COMMAND_HAS_CHAR_BEEN_DAMAGED_BY_CHAR: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + CPed* pTestedPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(1)); + bool result = false; + if (pPed) { + if (pPed->m_lastDamEntity) { + if (pPed->m_lastDamEntity == pTestedPed) + result = true; + if (pTestedPed->bInVehicle && pPed->m_lastDamEntity == pTestedPed->m_pMyVehicle) + result = true; + } + }else + debug("HAS_CHAR_BEEN_DAMAGED_BY_CHAR - First character doesn't exist\n"); + UpdateCompareFlag(result); + return 0; + } + case COMMAND_HAS_CHAR_BEEN_DAMAGED_BY_CAR: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + CVehicle* pTestedVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); + bool result = false; + if (pPed) { + if (pPed->m_lastDamEntity) { + if (pPed->m_lastDamEntity == pTestedVehicle) + result = true; + } + } + else + debug("HAS_CHAR_BEEN_DAMAGED_BY_CAR - Character doesn't exist\n"); + UpdateCompareFlag(result); + return 0; + } + case COMMAND_HAS_CAR_BEEN_DAMAGED_BY_CHAR: + { + CollectParameters(&m_nIp, 2); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + CPed* pTestedPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(1)); + bool result = false; + if (pVehicle) { + if (pVehicle->m_pLastDamageEntity) { + if (pVehicle->m_pLastDamageEntity == pTestedPed) + result = true; + if (pTestedPed->bInVehicle && pVehicle->m_pLastDamageEntity == pTestedPed->m_pMyVehicle) + result = true; + } + } + else + debug("HAS_CAR_BEEN_DAMAGED_BY_CHAR - Car doesn't exist\n"); + UpdateCompareFlag(result); + return 0; + } + case COMMAND_HAS_CAR_BEEN_DAMAGED_BY_CAR: + { + CollectParameters(&m_nIp, 2); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + CVehicle* pTestedVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); + bool result = false; + if (pVehicle) { + if (pVehicle->m_pLastDamageEntity) { + if (pVehicle->m_pLastDamageEntity == pTestedVehicle) + result = true; + } + } + else + debug("HAS_CAR_BEEN_DAMAGED_BY_CAR - First car doesn't exist\n"); + UpdateCompareFlag(result); + return 0; + } + case COMMAND_GET_RADIO_CHANNEL: + { + uint8 radio = DMAudio.GetRadioInCar(); + if (radio < NUM_RADIOS || radio == STREAMED_SOUND_MISSION_COMPLETED) + SET_INTEGER_PARAM(0, radio); + else + SET_INTEGER_PARAM(0, -1); StoreParameters(&m_nIp, 1); return 0; } - case COMMAND_START_CHAR_FIRE: + case COMMAND_IS_CHAR_DROWNING_IN_WATER: + { + CollectParameters(&m_nIp, 1); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + UpdateCompareFlag(pPed && pPed->bIsDrowning); + return 0; + } + case COMMAND_HAS_GLASS_BEEN_SHATTERED_NEARBY: + { + CollectParameters(&m_nIp, 3); + + bool shattered = false; + if ( CGlass::HasGlassBeenShatteredAtCoors(GET_FLOAT_PARAM(0), GET_FLOAT_PARAM(1), GET_FLOAT_PARAM(2)) ) + shattered = true; + + UpdateCompareFlag(shattered); + return 0; + } + case COMMAND_SET_CHAR_STAY_IN_CAR_WHEN_JACKED: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + pPed->bStayInCarOnJack = GET_INTEGER_PARAM(1); + return 0; + } + case COMMAND_ADD_MONEY_SPENT_ON_WEAPONS: + CollectParameters(&m_nIp, 1); + CStats::MoneySpentOnWeapons(GET_INTEGER_PARAM(0)); + return 0; + case COMMAND_SET_CHAR_ANSWERING_MOBILE: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + if (GET_INTEGER_PARAM(1)) + pPed->SetAnswerMobile(); + else + pPed->ClearAnswerMobile(); + return 0; + } + case COMMAND_SET_PLAYER_DRUNKENNESS: + { + CollectParameters(&m_nIp, 2); + CPlayerInfo* pPlayerInfo = &CWorld::Players[GET_INTEGER_PARAM(0)]; + pPlayerInfo->m_pPed->m_nDrunkenness = GET_INTEGER_PARAM(1); + pPlayerInfo->m_pPed->m_nFadeDrunkenness = 0; + if (pPlayerInfo->m_pPed->m_nDrunkenness == 0) + CMBlur::ClearDrunkBlur(); + return 0; + } + case COMMAND_SET_CHAR_IN_PLAYERS_GROUP_CAN_FIGHT: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + pPed->bDontFight = !GET_INTEGER_PARAM(1); + return 0; + } + case COMMAND_CLEAR_CHAR_WAIT_STATE: { CollectParameters(&m_nIp, 1); CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); script_assert(pPed); - SET_INTEGER_PARAM(0, gFireManager.StartScriptFire(pPed->GetPosition(), pPed, 0.8f, 1)); - StoreParameters(&m_nIp, 1); + pPed->ClearWaitState(); return 0; } - case COMMAND_GET_RANDOM_CAR_OF_TYPE_IN_AREA: + case COMMAND_GET_RANDOM_CAR_OF_TYPE_IN_AREA_NO_SAVE: { CollectParameters(&m_nIp, 5); int handle = -1; @@ -139,8 +276,6 @@ int8 CRunningScript::ProcessCommands800To899(int32 command) continue; if (pVehicle->GetVehicleAppearance() != VEHICLE_APPEARANCE_CAR && pVehicle->GetVehicleAppearance() != VEHICLE_APPEARANCE_BIKE) continue; - if (!pVehicle->bUsesCollision) - continue; if (GET_INTEGER_PARAM(4) != pVehicle->GetModelIndex() && GET_INTEGER_PARAM(4) >= 0) continue; if (pVehicle->VehicleCreatedBy != RANDOM_VEHICLE) @@ -148,1060 +283,857 @@ int8 CRunningScript::ProcessCommands800To899(int32 command) if (!pVehicle->IsWithinArea(infX, infY, supX, supY)) continue; handle = CPools::GetVehiclePool()->GetIndex(pVehicle); - pVehicle->VehicleCreatedBy = MISSION_VEHICLE; - ++CCarCtrl::NumMissionCars; - --CCarCtrl::NumRandomCars; - if (m_bIsMissionScript) - CTheScripts::MissionCleanUp.AddEntityToList(handle, CLEANUP_CAR); } SET_INTEGER_PARAM(0, handle); StoreParameters(&m_nIp, 1); return 0; } - /* - case COMMAND_GET_RANDOM_CAR_OF_TYPE_IN_ZONE: + case COMMAND_SET_CAN_BURST_CAR_TYRES: + { + CollectParameters(&m_nIp, 2); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + pVehicle->bTyresDontBurst = !GET_INTEGER_PARAM(1); + return 0; + } + case COMMAND_FIRE_HUNTER_GUN: { - char zone[KEY_LENGTH_IN_SCRIPT]; - CTheScripts::ReadTextLabelFromScript(&m_nIp, zone); - int zone_id = CTheZones::FindZoneByLabelAndReturnIndex(zone, ZONE_DEFAULT); - if (zone_id != -1) - m_nIp += KEY_LENGTH_IN_SCRIPT; - CZone* pZone = CTheZones::GetNavigationZone(zone_id); CollectParameters(&m_nIp, 1); - int handle = -1; - uint32 i = CPools::GetVehiclePool()->GetSize(); + CVehicle *pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + if (CTimer::GetTimeInMilliseconds() > pVehicle->m_nGunFiringTime + 150) { + CWeapon gun(WEAPONTYPE_HELICANNON, 5000); + CVector worldGunPos = (pVehicle->GetMatrix() * vecHunterGunPos) + (CTimer::GetTimeStep() * pVehicle->m_vecMoveSpeed); + gun.FireInstantHit(pVehicle, &worldGunPos); + gun.AddGunshell(pVehicle, worldGunPos, CVector2D(0.f, 0.1f), 0.025f); + DMAudio.PlayOneShot(pVehicle->m_audioEntityId, SOUND_WEAPON_SHOT_FIRED, 0.f); + pVehicle->m_nGunFiringTime = CTimer::GetTimeInMilliseconds(); + } + return 0; + } + case todo__comm_822: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_822"); + return 0; + } + case COMMAND_CHECK_FOR_PED_MODEL_AROUND_PLAYER: + { + CollectParameters(&m_nIp, 6); + CVector d1 = CWorld::Players[GET_INTEGER_PARAM(0)].GetPos() - GET_VECTOR_PARAM(1); + CVector d2 = CWorld::Players[GET_INTEGER_PARAM(0)].GetPos() + GET_VECTOR_PARAM(1); + int i = CPools::GetPedPool()->GetSize(); + bool result = false; while (i--) { - CVehicle* pVehicle = CPools::GetVehiclePool()->GetSlot(i); - if (!pVehicle) + CPed* pPed = CPools::GetPedPool()->GetSlot(i); + if (!pPed) continue; - if (GET_INTEGER_PARAM(0) != pVehicle->GetModelIndex() && GET_INTEGER_PARAM(0) >= 0) + if (GET_INTEGER_PARAM(4) != pPed->GetModelIndex() && GET_INTEGER_PARAM(5) != pPed->GetModelIndex()) continue; - if (pVehicle->VehicleCreatedBy != RANDOM_VEHICLE) - continue; - if (!CTheZones::PointLiesWithinZone(&pVehicle->GetPosition(), pZone)) - continue; - handle = CPools::GetVehiclePool()->GetIndex(pVehicle); - pVehicle->VehicleCreatedBy = MISSION_VEHICLE; - ++CCarCtrl::NumMissionCars; - --CCarCtrl::NumRandomCars; - if (m_bIsMissionScript) - CTheScripts::MissionCleanUp.AddEntityToList(handle, CLEANUP_CAR); + if (pPed->IsWithinArea(d1.x, d1.y, d1.z, d2.x, d2.y, d2.z)) + result = true; } - SET_INTEGER_PARAM(0, handle); - StoreParameters(&m_nIp, 1); + UpdateCompareFlag(result); return 0; } - */ - case COMMAND_HAS_RESPRAY_HAPPENED: - { - CollectParameters(&m_nIp, 1); - UpdateCompareFlag(CGarages::HasResprayHappened(GET_INTEGER_PARAM(0))); - return 0; - } - case COMMAND_SET_CAMERA_ZOOM: - { - CollectParameters(&m_nIp, 1); - if (TheCamera.Cams[TheCamera.ActiveCam].Mode == CCam::MODE_FOLLOWPED) - TheCamera.SetZoomValueFollowPedScript(GET_INTEGER_PARAM(0)); - else if (TheCamera.Cams[TheCamera.ActiveCam].Mode == CCam::MODE_CAM_ON_A_STRING) - TheCamera.SetZoomValueCamStringScript(GET_INTEGER_PARAM(0)); - return 0; - } - case COMMAND_CREATE_PICKUP_WITH_AMMO: - { - CollectParameters(&m_nIp, 6); - int16 model = GET_INTEGER_PARAM(0); - if (model < 0) - model = CTheScripts::UsedObjectArray[-model].index; - CVector pos = GET_VECTOR_PARAM(3); - if (pos.z <= MAP_Z_LOW_LIMIT) - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y) + PICKUP_PLACEMENT_OFFSET; - CPickups::GetActualPickupIndex(CollectNextParameterWithoutIncreasingPC(m_nIp)); - SET_INTEGER_PARAM(0, CPickups::GenerateNewOne(pos, model, GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2))); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_SET_CAR_RAM_CAR: - { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - CVehicle* pTarget = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); - script_assert(pTarget); - CCarAI::TellCarToRamOtherCar(pVehicle, pTarget); - return 0; - } - /* - case COMMAND_SET_CAR_BLOCK_CAR: - { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - CVehicle* pTarget = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); - script_assert(pTarget); - CCarAI::TellCarToBlockOtherCar(pVehicle, pTarget); - return 0; - } - case COMMAND_SET_CHAR_OBJ_CATCH_TRAIN: + case COMMAND_CLEAR_CHAR_FOLLOW_PATH: { CollectParameters(&m_nIp, 1); CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); script_assert(pPed); - pPed->bScriptObjectiveCompleted = false; - pPed->SetObjective(OBJECTIVE_CATCH_TRAIN); + if (pPed->GetPedState() == PED_FOLLOW_PATH) { + pPed->RestorePreviousState(); + pPed->ClearFollowPath(); + } return 0; } -#ifdef GTA_SCRIPT_COLLECTIVE - case COMMAND_SET_COLL_OBJ_CATCH_TRAIN: - CollectParameters(&m_nIp, 1); - CTheScripts::SetObjectiveForAllPedsInCollective(GET_INTEGER_PARAM(0), OBJECTIVE_CATCH_TRAIN); - return 0; -#endif - */ - case COMMAND_SET_PLAYER_NEVER_GETS_TIRED: - { - CollectParameters(&m_nIp, 2); - CPlayerInfo* pPlayer = &CWorld::Players[GET_INTEGER_PARAM(0)]; - pPlayer->m_bInfiniteSprint = (GET_INTEGER_PARAM(1) != 0); - return 0; - } - case COMMAND_SET_PLAYER_FAST_RELOAD: - { - CollectParameters(&m_nIp, 2); - CPlayerInfo* pPlayer = &CWorld::Players[GET_INTEGER_PARAM(0)]; - pPlayer->m_bFastReload = (GET_INTEGER_PARAM(1) != 0); - return 0; - } - case COMMAND_SET_CHAR_BLEEDING: + case COMMAND_SET_CHAR_CAN_BE_SHOT_IN_VEHICLE: { CollectParameters(&m_nIp, 2); CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); script_assert(pPed); - pPed->bPedIsBleeding = (GET_INTEGER_PARAM(1) != 0); + pPed->bCanBeShotInVehicle = GET_INTEGER_PARAM(1); return 0; } - /* - case COMMAND_SET_CAR_FUNNY_SUSPENSION: + case COMMAND_LOAD_MISSION_TEXT: { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - // no action - return 0; - */ - case COMMAND_SET_CAR_BIG_WHEELS: - { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - script_assert(pVehicle->m_vehType == VEHICLE_TYPE_CAR); - CAutomobile* pCar = (CAutomobile*)pVehicle; - pCar->bBigWheels = (GET_INTEGER_PARAM(1) != 0); - return 0; - } - case COMMAND_SET_FREE_RESPRAYS: - CollectParameters(&m_nIp, 1); - CGarages::SetFreeResprays(GET_INTEGER_PARAM(0) != 0); - return 0; - case COMMAND_SET_PLAYER_VISIBLE: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(pPed); - pPed->bIsVisible = (GET_INTEGER_PARAM(1) != 0); - return 0; - } - case COMMAND_SET_CHAR_VISIBLE: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - pPed->bIsVisible = (GET_INTEGER_PARAM(1) != 0); - return 0; - } - case COMMAND_SET_CAR_VISIBLE: - { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - pVehicle->bIsVisible = (GET_INTEGER_PARAM(1) != 0); - return 0; - } - case COMMAND_IS_AREA_OCCUPIED: - { - CollectParameters(&m_nIp, 11); - float infX = GET_FLOAT_PARAM(0); - float infY = GET_FLOAT_PARAM(1); - float infZ = GET_FLOAT_PARAM(2); - float supX = GET_FLOAT_PARAM(3); - float supY = GET_FLOAT_PARAM(4); - float supZ = GET_FLOAT_PARAM(5); - if (infX > supX) { - infX = GET_FLOAT_PARAM(3); - supX = GET_FLOAT_PARAM(0); - } - if (infY > supY) { - infY = GET_FLOAT_PARAM(4); - supY = GET_FLOAT_PARAM(1); - } - if (infZ > supZ) { - infZ = GET_FLOAT_PARAM(5); - supZ = GET_FLOAT_PARAM(2); - } - int16 total; - CWorld::FindObjectsIntersectingCube(CVector(infX, infY, infZ), CVector(supX, supY, supZ), &total, 2, nil, - !!GET_INTEGER_PARAM(6), !!GET_INTEGER_PARAM(7), !!GET_INTEGER_PARAM(8), !!GET_INTEGER_PARAM(9), !!GET_INTEGER_PARAM(10)); - UpdateCompareFlag(total > 0); - return 0; - } - /* - case COMMAND_START_DRUG_RUN: - CPlane::CreateIncomingCesna(); - return 0; - case COMMAND_HAS_DRUG_RUN_BEEN_COMPLETED: - UpdateCompareFlag(CPlane::HasCesnaLanded()); - return 0; - case COMMAND_HAS_DRUG_PLANE_BEEN_SHOT_DOWN: - UpdateCompareFlag(CPlane::HasCesnaBeenDestroyed()); - return 0; - case COMMAND_SAVE_PLAYER_FROM_FIRES: - CollectParameters(&m_nIp, 1); - gFireManager.ExtinguishPoint(CWorld::Players[GET_INTEGER_PARAM(0)].GetPos(), 3.0f); - return 0; - */ - case COMMAND_DISPLAY_TEXT: - { - CollectParameters(&m_nIp, 2); - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CTheScripts::IntroTextLines[CTheScripts::NumberOfIntroTextLinesThisFrame].m_fAtX = GET_FLOAT_PARAM(0); - CTheScripts::IntroTextLines[CTheScripts::NumberOfIntroTextLinesThisFrame].m_fAtY = GET_FLOAT_PARAM(1); - uint16 len = CMessages::GetWideStringLength(text); - for (uint16 i = 0; i < len; i++) - CTheScripts::IntroTextLines[CTheScripts::NumberOfIntroTextLinesThisFrame].m_Text[i] = text[i]; - for (uint16 i = len; i < SCRIPT_TEXT_MAX_LENGTH; i++) - CTheScripts::IntroTextLines[CTheScripts::NumberOfIntroTextLinesThisFrame].m_Text[i] = 0; - ++CTheScripts::NumberOfIntroTextLinesThisFrame; - return 0; - } - case COMMAND_SET_TEXT_SCALE: - { - CollectParameters(&m_nIp, 2); - CTheScripts::IntroTextLines[CTheScripts::NumberOfIntroTextLinesThisFrame].m_fScaleX = GET_FLOAT_PARAM(0); - CTheScripts::IntroTextLines[CTheScripts::NumberOfIntroTextLinesThisFrame].m_fScaleY = GET_FLOAT_PARAM(1); - return 0; - } - case COMMAND_SET_TEXT_COLOUR: - { - CollectParameters(&m_nIp, 4); - CTheScripts::IntroTextLines[CTheScripts::NumberOfIntroTextLinesThisFrame].m_sColor = - CRGBA(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), GET_INTEGER_PARAM(3)); - return 0; - } - case COMMAND_SET_TEXT_JUSTIFY: - { - CollectParameters(&m_nIp, 1); - CTheScripts::IntroTextLines[CTheScripts::NumberOfIntroTextLinesThisFrame].m_bJustify = (GET_INTEGER_PARAM(0) != 0); - return 0; - } - case COMMAND_SET_TEXT_CENTRE: - { - CollectParameters(&m_nIp, 1); - CTheScripts::IntroTextLines[CTheScripts::NumberOfIntroTextLinesThisFrame].m_bCentered = (GET_INTEGER_PARAM(0) != 0); - return 0; - } - case COMMAND_SET_TEXT_WRAPX: - { - CollectParameters(&m_nIp, 1); - CTheScripts::IntroTextLines[CTheScripts::NumberOfIntroTextLinesThisFrame].m_fWrapX = GET_FLOAT_PARAM(0); - return 0; - } - /* - case COMMAND_SET_TEXT_CENTRE_SIZE: - { - CollectParameters(&m_nIp, 1); - CTheScripts::IntroTextLines[CTheScripts::NumberOfIntroTextLinesThisFrame].m_fCenterSize = GET_FLOAT_PARAM(0); - return 0; - } - */ - case COMMAND_SET_TEXT_BACKGROUND: - { - CollectParameters(&m_nIp, 1); - CTheScripts::IntroTextLines[CTheScripts::NumberOfIntroTextLinesThisFrame].m_bBackground = (GET_INTEGER_PARAM(0) != 0); - return 0; - } - /* - case COMMAND_SET_TEXT_BACKGROUND_COLOUR: - { - CollectParameters(&m_nIp, 4); - CTheScripts::IntroTextLines[CTheScripts::NumberOfIntroTextLinesThisFrame].m_sBackgroundColor = - CRGBA(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), GET_INTEGER_PARAM(3)); - return 0; - } - case COMMAND_SET_TEXT_BACKGROUND_ONLY_TEXT: - { - CollectParameters(&m_nIp, 1); - CTheScripts::IntroTextLines[CTheScripts::NumberOfIntroTextLinesThisFrame].m_bBackgroundOnly = (GET_INTEGER_PARAM(0) != 0); - return 0; - } - */ - case COMMAND_SET_TEXT_PROPORTIONAL: - { - CollectParameters(&m_nIp, 1); - CTheScripts::IntroTextLines[CTheScripts::NumberOfIntroTextLinesThisFrame].m_bTextProportional = (GET_INTEGER_PARAM(0) != 0); - return 0; - } - /* - case COMMAND_SET_TEXT_FONT: - { - CollectParameters(&m_nIp, 1); - CTheScripts::IntroTextLines[CTheScripts::NumberOfIntroTextLinesThisFrame].m_nFont = GET_INTEGER_PARAM(0); - return 0; - } - */ - case COMMAND_INDUSTRIAL_PASSED: - CollectParameters(&m_nIp, 1); - CStats::IndustrialPassed = GET_INTEGER_PARAM(0); - return 0; - case COMMAND_COMMERCIAL_PASSED: - CollectParameters(&m_nIp, 1); - CStats::CommercialPassed = GET_INTEGER_PARAM(0); - return 0; - case COMMAND_SUBURBAN_PASSED: - CollectParameters(&m_nIp, 1); - CStats::SuburbanPassed = GET_INTEGER_PARAM(0); - return 0; - case COMMAND_ROTATE_OBJECT: - { - CollectParameters(&m_nIp, 4); - CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pObject); - float fx = pObject->GetForward().x; - float fy = pObject->GetForward().y; - float heading = LimitAngleOnCircle( - 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(); -#else - float rotateBy = GET_FLOAT_PARAM(2); -#endif - if (headingTarget == heading) { // using direct comparasion here is fine - UpdateCompareFlag(true); - return 0; - } - float angleClockwise = LimitAngleOnCircle(headingTarget - heading); - float angleCounterclockwise = LimitAngleOnCircle(heading - headingTarget); - float newHeading; - if (angleClockwise < angleCounterclockwise) - newHeading = rotateBy < angleClockwise ? heading + rotateBy : headingTarget; - else - newHeading = rotateBy < angleCounterclockwise ? heading - rotateBy : headingTarget; - bool obstacleInPath = false; - if (GET_INTEGER_PARAM(3)) { - CVector pos = pObject->GetPosition(); - tmp_matrix.SetRotateZ(DEGTORAD(newHeading)); - tmp_matrix.GetPosition() += pos; - CColModel* pColModel = pObject->GetColModel(); - CVector cp1 = tmp_matrix * pColModel->boundingBox.min; - CVector cp2 = tmp_matrix * CVector(pColModel->boundingBox.max.x, pColModel->boundingBox.min.y, pColModel->boundingBox.min.z); - CVector cp3 = tmp_matrix * CVector(pColModel->boundingBox.min.x, pColModel->boundingBox.max.y, pColModel->boundingBox.min.z); - CVector cp4 = tmp_matrix * CVector(pColModel->boundingBox.min.x, pColModel->boundingBox.min.y, pColModel->boundingBox.max.z); - int16 collisions; - CWorld::FindObjectsIntersectingAngledCollisionBox(pColModel->boundingBox, tmp_matrix, pos, - Min(cp1.x, Min(cp2.x, Min(cp3.x, cp4.x))), - Min(cp1.y, Min(cp2.y, Min(cp3.y, cp4.y))), - Max(cp1.x, Max(cp2.x, Max(cp3.x, cp4.x))), - Max(cp1.y, Max(cp2.y, Max(cp3.y, cp4.y))), - &collisions, 2, nil, false, true, true, false, false); - if (collisions > 0) - obstacleInPath = true; - } - if (obstacleInPath) { - UpdateCompareFlag(true); - return 0; - } - pObject->SetHeading(DEGTORAD(newHeading)); - pObject->GetMatrix().UpdateRW(); - pObject->UpdateRwFrame(); - UpdateCompareFlag(newHeading == headingTarget); // using direct comparasion here is fine - return 0; - } - case COMMAND_SLIDE_OBJECT: - { - CollectParameters(&m_nIp, 8); - CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pObject); - CVector pos = pObject->GetPosition(); - CVector posTarget = GET_VECTOR_PARAM(1); - CVector slideBy = GET_VECTOR_PARAM(4); -#ifdef FIX_BUGS - // the check is a hack for original script, where some objects are moved - // via SLIDE_OBJECT instead of SET_OBJECT_POSITION - // assuming the slide will take exactly one frame, which is true - // only without accounting time step (which is a bug) - if (!IsSlideObjectUsedWrongByScript(posTarget, slideBy)) - slideBy *= CTimer::GetTimeStepFix(); -#endif - if (posTarget == pos) { // using direct comparasion here is fine - UpdateCompareFlag(true); - return 0; - } - CVector posDiff = pos - posTarget; - CVector newPosition; - if (posDiff.x < 0) - newPosition.x = -posDiff.x < slideBy.x ? posTarget.x : pos.x + slideBy.x; - else - newPosition.x = posDiff.x < slideBy.x ? posTarget.x : pos.x - slideBy.x; - if (posDiff.y < 0) - newPosition.y = -posDiff.y < slideBy.y ? posTarget.y : pos.y + slideBy.y; - else - newPosition.y = posDiff.y < slideBy.y ? posTarget.y : pos.y - slideBy.y; - if (posDiff.z < 0) - newPosition.z = -posDiff.z < slideBy.z ? posTarget.z : pos.z + slideBy.z; - else - newPosition.z = posDiff.z < slideBy.z ? posTarget.z : pos.z - slideBy.z; - bool obstacleInPath = false; - if (GET_INTEGER_PARAM(7)) { - tmp_matrix = pObject->GetMatrix(); - tmp_matrix.GetPosition() = newPosition; - CColModel* pColModel = pObject->GetColModel(); - CVector cp1 = tmp_matrix * pColModel->boundingBox.min; - CVector cp2 = tmp_matrix * CVector(pColModel->boundingBox.max.x, pColModel->boundingBox.min.y, pColModel->boundingBox.min.z); - CVector cp3 = tmp_matrix * CVector(pColModel->boundingBox.min.x, pColModel->boundingBox.max.y, pColModel->boundingBox.min.z); - CVector cp4 = tmp_matrix * CVector(pColModel->boundingBox.min.x, pColModel->boundingBox.min.y, pColModel->boundingBox.max.z); - int16 collisions; - CWorld::FindObjectsIntersectingAngledCollisionBox(pColModel->boundingBox, tmp_matrix, newPosition, - Min(cp1.x, Min(cp2.x, Min(cp3.x, cp4.x))), - Min(cp1.y, Min(cp2.y, Min(cp3.y, cp4.y))), - Max(cp1.x, Max(cp2.x, Max(cp3.x, cp4.x))), - Max(cp1.y, Max(cp2.y, Max(cp3.y, cp4.y))), - &collisions, 2, nil, false, true, true, false, false); - if (collisions > 0) - obstacleInPath = true; - } - if (obstacleInPath) { - UpdateCompareFlag(true); - return 0; - } - pObject->Teleport(newPosition); - UpdateCompareFlag(newPosition == posTarget); // using direct comparasion here is fine - return 0; - } - case COMMAND_REMOVE_CHAR_ELEGANTLY: - { - CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - if (pPed && pPed->CharCreatedBy == MISSION_CHAR){ - CWorld::RemoveReferencesToDeletedObject(pPed); - if (pPed->bInVehicle && pPed->m_pMyVehicle) - CTheScripts::RemoveThisPed(pPed); - else{ - pPed->CharCreatedBy = RANDOM_CHAR; - pPed->bRespondsToThreats = true; - pPed->bScriptObjectiveCompleted = false; - pPed->ClearLeader(); - --CPopulation::ms_nTotalMissionPeds; - pPed->bFadeOut = true; - CWorld::RemoveReferencesToDeletedObject(pPed); - } - } - if (m_bIsMissionScript) - CTheScripts::MissionCleanUp.RemoveEntityFromList(GET_INTEGER_PARAM(0), CLEANUP_CHAR); - return 0; - } - case COMMAND_SET_CHAR_STAY_IN_SAME_PLACE: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - pPed->bKindaStayInSamePlace = (GET_INTEGER_PARAM(1) != 0); - return 0; - } - /* - case COMMAND_IS_NASTY_GAME: - UpdateCompareFlag(CGame::nastyGame); - return 0; - */ - case COMMAND_UNDRESS_CHAR: - { - CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - char name[KEY_LENGTH_IN_SCRIPT]; - CTheScripts::ReadTextLabelFromScript(&m_nIp, name); - for (int i = 0; i < KEY_LENGTH_IN_SCRIPT; i++) - name[i] = tolower(name[i]); + char key[8]; + CTheScripts::ReadTextLabelFromScript(&m_nIp, key); m_nIp += KEY_LENGTH_IN_SCRIPT; - pPed->Undress(name); + TheText.LoadMissionText(key); return 0; } - case COMMAND_DRESS_CHAR: + case COMMAND_CLEAR_CHAR_LAST_DAMAGE_ENTITY: { CollectParameters(&m_nIp, 1); CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - pPed->Dress(); + if (pPed) + pPed->m_lastDamEntity = nil; + else + debug("CLEAR_CHAR_LAST_DAMAGE_ENTITY - Character doesn't exist\n"); return 0; } - /* - case COMMAND_START_CHASE_SCENE: - CollectParameters(&m_nIp, 1); - CTimer::Suspend(); - CStreaming::DeleteAllRwObjects(); - CRecordDataForChase::StartChaseScene(GET_FLOAT_PARAM(0)); - CTimer::Resume(); - return 0; - case COMMAND_STOP_CHASE_SCENE: - CRecordDataForChase::CleanUpChaseScene(); - return 0; - */ - case COMMAND_IS_EXPLOSION_IN_AREA: - { - CollectParameters(&m_nIp, 7); - float infX = GET_FLOAT_PARAM(1); - float infY = GET_FLOAT_PARAM(2); - float infZ = GET_FLOAT_PARAM(3); - float supX = GET_FLOAT_PARAM(4); - float supY = GET_FLOAT_PARAM(5); - float supZ = GET_FLOAT_PARAM(6); - if (infX > supX) { - infX = GET_FLOAT_PARAM(4); - supX = GET_FLOAT_PARAM(1); - } - if (infY > supY) { - infY = GET_FLOAT_PARAM(5); - supY = GET_FLOAT_PARAM(2); - } - if (infZ > supZ) { - infZ = GET_FLOAT_PARAM(6); - supZ = GET_FLOAT_PARAM(3); - } - UpdateCompareFlag(CExplosion::TestForExplosionInArea((eExplosionType)GET_INTEGER_PARAM(0), - infX, supX, infY, supY, infZ, supZ)); - return 0; - } - /* - case COMMAND_IS_EXPLOSION_IN_ZONE: + case COMMAND_CLEAR_CAR_LAST_DAMAGE_ENTITY: { CollectParameters(&m_nIp, 1); - char zone[KEY_LENGTH_IN_SCRIPT]; - CTheScripts::ReadTextLabelFromScript(&m_nIp, zone); - int zone_id = CTheZones::FindZoneByLabelAndReturnIndex(zone, ZONE_DEFAULT); - if (zone_id != -1) - m_nIp += KEY_LENGTH_IN_SCRIPT; - CZone* pZone = CTheZones::GetNavigationZone(zone_id); - UpdateCompareFlag(CExplosion::TestForExplosionInArea((eExplosionType)GET_INTEGER_PARAM(0), - pZone->minx, pZone->maxx, pZone->miny, pZone->maxy, pZone->minz, pZone->maxz)); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + if (pVehicle) + pVehicle->m_pLastDamageEntity = nil; + else + debug("CLEAR_CAR_LAST_DAMAGE_ENTITY - Car doesn't exist\n"); return 0; } - case COMMAND_START_DRUG_DROP_OFF: - CPlane::CreateDropOffCesna(); - return 0; - case COMMAND_HAS_DROP_OFF_PLANE_BEEN_SHOT_DOWN: - UpdateCompareFlag(CPlane::HasDropOffCesnaBeenShotDown()); - return 0; - case COMMAND_FIND_DROP_OFF_PLANE_COORDINATES: - { - CVector pos = CPlane::FindDropOffCesnaCoordinates(); - SET_VECTOR_PARAM(0, pos); - StoreParameters(&m_nIp, 3); - return 0; - } - case COMMAND_CREATE_FLOATING_PACKAGE: - { - CollectParameters(&m_nIp, 3); - CVector pos = GET_VECTOR_PARAM(0); - if (pos.z <= MAP_Z_LOW_LIMIT) - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y) + PICKUP_PLACEMENT_OFFSET; - SET_INTEGER_PARAM(0, CPickups::GenerateNewOne(pos, MI_FLOATPACKAGE1, PICKUP_FLOATINGPACKAGE, 0)); - StoreParameters(&m_nIp, 1); - return 0; - } - */ - case COMMAND_PLACE_OBJECT_RELATIVE_TO_CAR: - { - CollectParameters(&m_nIp, 5); - CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pObject); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); - script_assert(pVehicle); - CVector offset = GET_VECTOR_PARAM(2); - CPhysical::PlacePhysicalRelativeToOtherPhysical(pVehicle, pObject, offset); - return 0; - } - case COMMAND_MAKE_OBJECT_TARGETTABLE: - { - CollectParameters(&m_nIp, 1); - CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pObject); - CPlayerPed* pPlayerPed = CWorld::Players[CWorld::PlayerInFocus].m_pPed; - script_assert(pPlayerPed); - pPlayerPed->MakeObjectTargettable(GET_INTEGER_PARAM(0)); - return 0; - } - case COMMAND_ADD_ARMOUR_TO_PLAYER: + case COMMAND_FREEZE_OBJECT_POSITION: { CollectParameters(&m_nIp, 2); - CPlayerPed* pPlayerPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(pPlayerPed); - pPlayerPed->m_fArmour = Clamp(pPlayerPed->m_fArmour + GET_INTEGER_PARAM(1), 0.0f, CWorld::Players[GET_INTEGER_PARAM(0)].m_nMaxArmour); - return 0; - } - case COMMAND_ADD_ARMOUR_TO_CHAR: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - pPed->m_fArmour = Clamp(pPed->m_fArmour + GET_INTEGER_PARAM(1), 0.0f, 100.0f); - return 0; - } - case COMMAND_OPEN_GARAGE: - { - CollectParameters(&m_nIp, 1); - CGarages::OpenGarage(GET_INTEGER_PARAM(0)); - return 0; - } - case COMMAND_CLOSE_GARAGE: - { - CollectParameters(&m_nIp, 1); - CGarages::CloseGarage(GET_INTEGER_PARAM(0)); - return 0; - } - case COMMAND_WARP_CHAR_FROM_CAR_TO_COORD: - { - CollectParameters(&m_nIp, 4); - CPed *pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - CVector pos = GET_VECTOR_PARAM(1); - if (pos.z <= MAP_Z_LOW_LIMIT) - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - if (pPed->bInVehicle){ - if (pPed->m_pMyVehicle->bIsBus) - pPed->bRenderPedInCar = true; - if (pPed->m_pMyVehicle->pDriver == pPed){ - pPed->m_pMyVehicle->RemoveDriver(); - pPed->m_pMyVehicle->SetStatus(STATUS_ABANDONED); - pPed->m_pMyVehicle->bEngineOn = false; - pPed->m_pMyVehicle->AutoPilot.m_nCruiseSpeed = 0; - pPed->m_pMyVehicle->SetMoveSpeed(0.0f, 0.0f, -0.00001f); - pPed->m_pMyVehicle->SetTurnSpeed(0.0f, 0.0f, 0.0f); - }else{ - pPed->m_pMyVehicle->RemovePassenger(pPed); - } - if (pPed->m_vehDoor) { - eDoors door; - switch (pPed->m_vehDoor) { - case CAR_DOOR_LF: - door = DOOR_FRONT_LEFT; - break; - case CAR_DOOR_RF: - door = DOOR_FRONT_RIGHT; - break; - case CAR_DOOR_LR: - door = DOOR_REAR_LEFT; - break; - case CAR_DOOR_RR: - door = DOOR_REAR_RIGHT; - break; - } - if (pPed->GetPedState() == PED_EXIT_CAR || pPed->GetPedState() == PED_DRAG_FROM_CAR || !pPed->m_pMyVehicle->IsDoorClosed(door)) { - uint8 flags = 0; - if (pPed->m_pMyVehicle->IsBike()) { - if (pPed->m_vehDoor == CAR_DOOR_LF || - pPed->m_vehDoor == CAR_DOOR_RF || - pPed->m_vehDoor == CAR_WINDSCREEN) - flags = CAR_DOOR_FLAG_LF | CAR_DOOR_FLAG_RF; - else if (pPed->m_vehDoor == CAR_DOOR_LR || - pPed->m_vehDoor == CAR_DOOR_RR) - flags = CAR_DOOR_FLAG_LR | CAR_DOOR_FLAG_RR; - } - else { - switch (pPed->m_vehDoor) { - case CAR_DOOR_LF: - flags = pPed->m_pMyVehicle->m_nNumMaxPassengers != 0 ? CAR_DOOR_FLAG_LF : CAR_DOOR_FLAG_LF | CAR_DOOR_FLAG_LR; - break; - case CAR_DOOR_LR: - flags = pPed->m_pMyVehicle->m_nNumMaxPassengers != 0 ? CAR_DOOR_FLAG_LR : CAR_DOOR_FLAG_LF | CAR_DOOR_FLAG_LR; - break; - case CAR_DOOR_RF: - flags = CAR_DOOR_FLAG_RF; - break; - case CAR_DOOR_RR: - flags = CAR_DOOR_FLAG_RR; - break; - } - } - pPed->m_pMyVehicle->m_nGettingOutFlags &= ~flags; - pPed->m_pMyVehicle->ProcessOpenDoor(pPed->m_vehDoor, ANIM_STD_NUM, 0.0f); - } - } - } - pPed->RemoveInCarAnims(); - pPed->bInVehicle = false; - pPed->m_pMyVehicle = nil; - pPed->SetPedState(PED_IDLE); - pPed->m_nLastPedState = PED_NONE; - pPed->bUsesCollision = true; - pPed->SetMoveSpeed(0.0f, 0.0f, 0.0f); - pPed->ReplaceWeaponWhenExitingVehicle(); - if (pPed->m_pVehicleAnim) - pPed->m_pVehicleAnim->blendDelta = -1000.0f; - pPed->m_pVehicleAnim = nil; - pPed->RestartNonPartialAnims(); - pPed->SetMoveState(PEDMOVE_NONE); - CAnimManager::BlendAnimation(pPed->GetClump(), pPed->m_animGroup, ANIM_STD_IDLE, 1000.0f); - pos.z += pPed->GetDistanceFromCentreOfMassToBaseOfModel(); - pPed->Teleport(pos); - CTheScripts::ClearSpaceForMissionEntity(pos, pPed); - return 0; - } - case COMMAND_SET_VISIBILITY_OF_CLOSEST_OBJECT_OF_TYPE: - { - CollectParameters(&m_nIp, 6); - CVector pos = GET_VECTOR_PARAM(0); - if (pos.z <= MAP_Z_LOW_LIMIT) - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - float range = GET_FLOAT_PARAM(3); - int mi = GET_INTEGER_PARAM(4) < 0 ? CTheScripts::UsedObjectArray[-GET_INTEGER_PARAM(4)].index : GET_INTEGER_PARAM(4); - int16 total; - CEntity* apEntities[16]; - CWorld::FindObjectsOfTypeInRange(mi, pos, range, true, &total, 16, apEntities, true, false, false, true, true); - if (total == 0) - CWorld::FindObjectsOfTypeInRangeSectorList(mi, CWorld::GetBigBuildingList(LEVEL_GENERIC), pos, range, true, &total, 16, apEntities); - if (total == 0) - CWorld::FindObjectsOfTypeInRangeSectorList(mi, CWorld::GetBigBuildingList(CTheZones::GetLevelFromPosition(&pos)), pos, range, true, &total, 16, apEntities); - CEntity* pClosestEntity = nil; - float min_dist = 2.0f * range; - for (int i = 0; i < total; i++) { - float dist = (apEntities[i]->GetPosition() - pos).Magnitude(); - if (dist < min_dist) { - min_dist = dist; - pClosestEntity = apEntities[i]; - } - } - if (pClosestEntity) { - pClosestEntity->bIsVisible = (GET_INTEGER_PARAM(5) != 0); - CTheScripts::AddToInvisibilitySwapArray(pClosestEntity, GET_INTEGER_PARAM(5) != 0); - } - return 0; - } - case COMMAND_HAS_CHAR_SPOTTED_CHAR: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - CPed* pTarget = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(1)); - script_assert(pTarget); - UpdateCompareFlag(pPed->OurPedCanSeeThisOne(pTarget)); - return 0; - } - case COMMAND_SET_CHAR_OBJ_HAIL_TAXI: - { - CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - pPed->bScriptObjectiveCompleted = false; - pPed->SetObjective(OBJECTIVE_HAIL_TAXI); - return 0; - } - case COMMAND_HAS_OBJECT_BEEN_DAMAGED: - { - CollectParameters(&m_nIp, 1); CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); script_assert(pObject); - UpdateCompareFlag(pObject->bRenderDamaged || !pObject->bIsVisible); + pObject->bIsFrozen = GET_INTEGER_PARAM(1); + pObject->bInfiniteMass = GET_INTEGER_PARAM(1); return 0; } - case COMMAND_START_KILL_FRENZY_HEADSHOT: + case COMMAND_SET_UP_TAXI_SHORTCUT: { - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); CollectParameters(&m_nIp, 8); - CDarkel::StartFrenzy((eWeaponType)GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), - GET_INTEGER_PARAM(3), text, GET_INTEGER_PARAM(4), GET_INTEGER_PARAM(5), - GET_INTEGER_PARAM(6), GET_INTEGER_PARAM(7) != 0, true); + CGameLogic::SetUpShortCut( + GET_VECTOR_PARAM(0), GET_FLOAT_PARAM(3), + GET_VECTOR_PARAM(4), GET_FLOAT_PARAM(7)); return 0; } - case COMMAND_ACTIVATE_MILITARY_CRANE: - { - CollectParameters(&m_nIp, 10); - float infX = GET_FLOAT_PARAM(2); - float infY = GET_FLOAT_PARAM(3); - float supX = GET_FLOAT_PARAM(4); - float supY = GET_FLOAT_PARAM(5); - if (infX > supX) { - infX = GET_FLOAT_PARAM(4); - supX = GET_FLOAT_PARAM(2); - } - if (infY > supY) { - infY = GET_FLOAT_PARAM(5); - supY = GET_FLOAT_PARAM(3); - } - CCranes::ActivateCrane(infX, supX, infY, supY, - GET_FLOAT_PARAM(6), GET_FLOAT_PARAM(7), GET_FLOAT_PARAM(8), - DEGTORAD(GET_FLOAT_PARAM(9)), false, true, - GET_FLOAT_PARAM(0), GET_FLOAT_PARAM(1)); + case COMMAND_CLEAR_TAXI_SHORTCUT: + CGameLogic::ClearShortCut(); + CGameLogic::RemoveShortCutDropOffPointForMission(); return 0; - } - case COMMAND_WARP_PLAYER_INTO_CAR: + case COMMAND_INCREASE_PLAYER_MAX_HEALTH: { CollectParameters(&m_nIp, 2); - CPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(pPed); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); - script_assert(pVehicle); - pPed->SetObjective(OBJECTIVE_ENTER_CAR_AS_DRIVER, pVehicle); - pPed->WarpPedIntoCar(pVehicle); - pPed->RestorePreviousObjective(); + CPlayerInfo* pPlayerInfo = &CWorld::Players[GET_INTEGER_PARAM(0)]; + pPlayerInfo->m_nMaxHealth += GET_INTEGER_PARAM(1); + pPlayerInfo->m_pPed->m_fHealth = pPlayerInfo->m_nMaxHealth; + CHud::m_ItemToFlash = ITEM_HEALTH; return 0; } - case COMMAND_WARP_CHAR_INTO_CAR: + case COMMAND_INCREASE_PLAYER_MAX_ARMOUR: { CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); - script_assert(pVehicle); - pPed->SetObjective(OBJECTIVE_ENTER_CAR_AS_DRIVER, pVehicle); - pPed->WarpPedIntoCar(pVehicle); - pPed->RestorePreviousObjective(); + CPlayerInfo* pPlayerInfo = &CWorld::Players[GET_INTEGER_PARAM(0)]; + pPlayerInfo->m_nMaxArmour += GET_INTEGER_PARAM(1); + pPlayerInfo->m_pPed->m_fArmour = pPlayerInfo->m_nMaxArmour; + CHud::m_ItemToFlash = ITEM_ARMOUR; return 0; } - case COMMAND_SWITCH_CAR_RADIO: + case COMMAND_CREATE_RANDOM_CHAR_AS_DRIVER: + { CollectParameters(&m_nIp, 1); - DMAudio.ChangeMusicMode(GET_INTEGER_PARAM(0)); - return 0; - //case COMMAND_SET_AUDIO_STREAM: - case COMMAND_PRINT_WITH_2_NUMBERS_BIG: - { - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CollectParameters(&m_nIp, 4); - CMessages::AddBigMessageWithNumber(text, GET_INTEGER_PARAM(2), GET_INTEGER_PARAM(3) - 1, GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), -1, -1, -1, -1); - return 0; - } - case COMMAND_PRINT_WITH_3_NUMBERS_BIG: - { - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CollectParameters(&m_nIp, 5); - CMessages::AddBigMessageWithNumber(text, GET_INTEGER_PARAM(3), GET_INTEGER_PARAM(4) - 1, GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), -1, -1, -1); - return 0; - } - /* - case COMMAND_PRINT_WITH_4_NUMBERS_BIG: - { - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CollectParameters(&m_nIp, 6); - CMessages::AddBigMessageWithNumber(text, GET_INTEGER_PARAM(4), GET_INTEGER_PARAM(5) - 1, GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), GET_INTEGER_PARAM(3), -1, -1); - return 0; - } - case COMMAND_PRINT_WITH_5_NUMBERS_BIG: - { - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CollectParameters(&m_nIp, 7); - CMessages::AddBigMessageWithNumber(text, GET_INTEGER_PARAM(5), GET_INTEGER_PARAM(6) - 1, GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), GET_INTEGER_PARAM(3), GET_INTEGER_PARAM(4), -1); - return 0; - } - case COMMAND_PRINT_WITH_6_NUMBERS_BIG: - { - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CollectParameters(&m_nIp, 8); - CMessages::AddBigMessageWithNumber(text, GET_INTEGER_PARAM(6), GET_INTEGER_PARAM(7) - 1, GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), GET_INTEGER_PARAM(3), GET_INTEGER_PARAM(4), GET_INTEGER_PARAM(5)); - return 0; - } - */ - case COMMAND_SET_CHAR_WAIT_STATE: - { - CollectParameters(&m_nIp, 3); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - pPed->SetWaitState((eWaitState)GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2) >= 0 ? &GET_INTEGER_PARAM(2) : nil); - return 0; - } - case COMMAND_SET_CAMERA_BEHIND_PLAYER: - TheCamera.SetCameraDirectlyBehindForFollowPed_CamOnAString(); - return 0; - /* - case COMMAND_SET_MOTION_BLUR: - CollectParameters(&m_nIp, 1); - TheCamera.SetMotionBlur(0, 0, 0, 0, GET_INTEGER_PARAM(0)); - return 0; - case COMMAND_PRINT_STRING_IN_STRING: - { - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); - wchar* string = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CollectParameters(&m_nIp, 2); - CMessages::AddMessageWithString(text, GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), string); - return 0; - } - */ - case COMMAND_CREATE_RANDOM_CHAR: - { - CollectParameters(&m_nIp, 3); - CZoneInfo zoneinfo; - CTheZones::GetZoneInfoForTimeOfDay(&CWorld::Players[CWorld::PlayerInFocus].GetPos(), &zoneinfo); - int mi; - ePedType pedtype = PEDTYPE_COP; - int attempt = 0; - while (pedtype != PEDTYPE_CIVMALE && pedtype != PEDTYPE_CIVFEMALE && attempt < 5) { - mi = CPopulation::ChooseCivilianOccupation(zoneinfo.pedGroup); - if (CModelInfo::GetModelInfo(mi)->GetRwObject()) - pedtype = ((CPedModelInfo*)(CModelInfo::GetModelInfo(mi)))->m_pedType; - attempt++; - } - if (!CModelInfo::GetModelInfo(mi)->GetRwObject()) { - mi = MI_MALE01; - pedtype = ((CPedModelInfo*)(CModelInfo::GetModelInfo(mi)))->m_pedType; - } - CPed* ped = new CCivilianPed(pedtype, mi); - ped->CharCreatedBy = MISSION_CHAR; - ped->bRespondsToThreats = false; - ped->bAllowMedicsToReviveMe = false; - ped->bIsPlayerFriend = false; - CVector pos = GET_VECTOR_PARAM(0); - if (pos.z <= MAP_Z_LOW_LIMIT) - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - pos.z += 1.0f; - ped->SetPosition(pos); - ped->SetOrientation(0.0f, 0.0f, 0.0f); - CTheScripts::ClearSpaceForMissionEntity(pos, ped); - if (m_bIsMissionScript) - ped->bIsStaticWaitingForCollision = true; - CWorld::Add(ped); - ped->m_nZoneLevel = CTheZones::GetLevelFromPosition(&pos); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + CPed* pPed = CPopulation::AddPedInCar(pVehicle, true); + pPed->CharCreatedBy = MISSION_CHAR; + pPed->bRespondsToThreats = false; + pPed->bAllowMedicsToReviveMe = false; + pPed->bIsPlayerFriend = false; + if (pVehicle->bIsBus) + pPed->bRenderPedInCar = false; + pPed->SetPosition(pVehicle->GetPosition()); + pPed->SetOrientation(0.0f, 0.0f, 0.0f); + pPed->SetPedState(PED_DRIVING); + pPed->m_pMyVehicle = pVehicle; + pPed->m_pMyVehicle->RegisterReference((CEntity**)&pPed->m_pMyVehicle); + pVehicle->pDriver = pPed; + pVehicle->pDriver->RegisterReference((CEntity**)&pVehicle->pDriver); + pPed->bInVehicle = true; + pVehicle->SetStatus(STATUS_PHYSICS); + if (pVehicle->m_vehType == VEHICLE_TYPE_BOAT) + pVehicle->AutoPilot.m_nCarMission = MISSION_CRUISE; + pVehicle->bEngineOn = true; + pVehicle->m_nZoneLevel = CTheZones::GetLevelFromPosition(&pVehicle->GetPosition()); CPopulation::ms_nTotalMissionPeds++; - SET_INTEGER_PARAM(0, CPools::GetPedPool()->GetIndex(ped)); + SET_INTEGER_PARAM(0, CPools::GetPedPool()->GetIndex(pPed)); StoreParameters(&m_nIp, 1); if (m_bIsMissionScript) CTheScripts::MissionCleanUp.AddEntityToList(GET_INTEGER_PARAM(0), CLEANUP_CHAR); return 0; } - case COMMAND_SET_CHAR_OBJ_STEAL_ANY_CAR: + case COMMAND_CREATE_RANDOM_CHAR_AS_PASSENGER: { - CollectParameters(&m_nIp, 1); + CollectParameters(&m_nIp, 2); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + CPed* pPed = CPopulation::AddPedInCar(pVehicle, false); + pPed->CharCreatedBy = MISSION_CHAR; + pPed->bRespondsToThreats = false; + pPed->bAllowMedicsToReviveMe = false; + pPed->bIsPlayerFriend = false; + if (pVehicle->bIsBus) + pPed->bRenderPedInCar = false; + pPed->SetPosition(pVehicle->GetPosition()); + pPed->SetOrientation(0.0f, 0.0f, 0.0f); + CPopulation::ms_nTotalMissionPeds++; + pVehicle->m_nZoneLevel = CTheZones::GetLevelFromPosition(&pVehicle->GetPosition()); + if (GET_INTEGER_PARAM(1) >= 0) + pVehicle->AddPassenger(pPed, GET_INTEGER_PARAM(1)); + else + pVehicle->AddPassenger(pPed); + + pPed->m_pMyVehicle = pVehicle; + pPed->m_pMyVehicle->RegisterReference((CEntity**)&pPed->m_pMyVehicle); + pPed->bInVehicle = true; + pPed->SetPedState(PED_DRIVING); + SET_INTEGER_PARAM(0, CPools::GetPedPool()->GetIndex(pPed)); + StoreParameters(&m_nIp, 1); + if (m_bIsMissionScript) + CTheScripts::MissionCleanUp.AddEntityToList(GET_INTEGER_PARAM(0), CLEANUP_CHAR); + return 0; + } + case COMMAND_SET_CHAR_IGNORE_THREATS_BEHIND_OBJECTS: + { + CollectParameters(&m_nIp, 2); CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); script_assert(pPed); - pPed->bScriptObjectiveCompleted = false; - pPed->SetObjective(OBJECTIVE_STEAL_ANY_CAR); + pPed->bIgnoreThreatsBehindObjects = GET_INTEGER_PARAM(1); return 0; } - /* - case COMMAND_SET_2_REPEATED_PHONE_MESSAGES: + case COMMAND_MAKE_HELI_COME_CRASHING_DOWN: { CollectParameters(&m_nIp, 1); - wchar* text1 = CTheScripts::GetTextByKeyFromScript(&m_nIp); - wchar* text2 = CTheScripts::GetTextByKeyFromScript(&m_nIp); - gPhoneInfo.SetPhoneMessage_Repeatedly(GET_INTEGER_PARAM(0), text1, text2, nil, nil, nil, nil); + CAutomobile* pHeli = (CAutomobile*)CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pHeli && pHeli->IsCar() && pHeli->IsRealHeli()); + pHeli->bHeliDestroyed = true; return 0; } - case COMMAND_SET_2_PHONE_MESSAGES: - { - CollectParameters(&m_nIp, 1); - wchar* text1 = CTheScripts::GetTextByKeyFromScript(&m_nIp); - wchar* text2 = CTheScripts::GetTextByKeyFromScript(&m_nIp); - gPhoneInfo.SetPhoneMessage_JustOnce(GET_INTEGER_PARAM(0), text1, text2, nil, nil, nil, nil); - return 0; - } - case COMMAND_SET_3_REPEATED_PHONE_MESSAGES: - { - CollectParameters(&m_nIp, 1); - wchar* text1 = CTheScripts::GetTextByKeyFromScript(&m_nIp); - wchar* text2 = CTheScripts::GetTextByKeyFromScript(&m_nIp); - wchar* text3 = CTheScripts::GetTextByKeyFromScript(&m_nIp); - gPhoneInfo.SetPhoneMessage_Repeatedly(GET_INTEGER_PARAM(0), text1, text2, text3, nil, nil, nil); - return 0; - } - case COMMAND_SET_3_PHONE_MESSAGES: - { - CollectParameters(&m_nIp, 1); - wchar* text1 = CTheScripts::GetTextByKeyFromScript(&m_nIp); - wchar* text2 = CTheScripts::GetTextByKeyFromScript(&m_nIp); - wchar* text3 = CTheScripts::GetTextByKeyFromScript(&m_nIp); - gPhoneInfo.SetPhoneMessage_JustOnce(GET_INTEGER_PARAM(0), text1, text2, text3, nil, nil, nil); - return 0; - } - case COMMAND_SET_4_REPEATED_PHONE_MESSAGES: - { - CollectParameters(&m_nIp, 1); - wchar* text1 = CTheScripts::GetTextByKeyFromScript(&m_nIp); - wchar* text2 = CTheScripts::GetTextByKeyFromScript(&m_nIp); - wchar* text3 = CTheScripts::GetTextByKeyFromScript(&m_nIp); - wchar* text4 = CTheScripts::GetTextByKeyFromScript(&m_nIp); - gPhoneInfo.SetPhoneMessage_Repeatedly(GET_INTEGER_PARAM(0), text1, text2, text3, text4, nil, nil); - return 0; - } - case COMMAND_SET_4_PHONE_MESSAGES: - { - CollectParameters(&m_nIp, 1); - wchar* text1 = CTheScripts::GetTextByKeyFromScript(&m_nIp); - wchar* text2 = CTheScripts::GetTextByKeyFromScript(&m_nIp); - wchar* text3 = CTheScripts::GetTextByKeyFromScript(&m_nIp); - wchar* text4 = CTheScripts::GetTextByKeyFromScript(&m_nIp); - gPhoneInfo.SetPhoneMessage_JustOnce(GET_INTEGER_PARAM(0), text1, text2, text3, text4, nil, nil); - return 0; - } - */ - case COMMAND_IS_SNIPER_BULLET_IN_AREA: - { - CollectParameters(&m_nIp, 6); - float infX = GET_FLOAT_PARAM(0); - float infY = GET_FLOAT_PARAM(1); - float infZ = GET_FLOAT_PARAM(2); - float supX = GET_FLOAT_PARAM(3); - float supY = GET_FLOAT_PARAM(4); - float supZ = GET_FLOAT_PARAM(5); - if (infX > supX) { - infX = GET_FLOAT_PARAM(3); - supX = GET_FLOAT_PARAM(0); - } - if (infY > supY) { - infY = GET_FLOAT_PARAM(4); - supY = GET_FLOAT_PARAM(1); - } - if (infZ > supZ) { - infZ = GET_FLOAT_PARAM(5); - supZ = GET_FLOAT_PARAM(2); - } - UpdateCompareFlag(CBulletInfo::TestForSniperBullet(infX, supX, infY, supY, infZ, supZ)); - return 0; - } - /* - case COMMAND_GIVE_PLAYER_DETONATOR: - CGarages::GivePlayerDetonator(); - return 0; -#ifdef GTA_SCRIPT_COLLECTIVE - case COMMAND_SET_COLL_OBJ_STEAL_ANY_CAR: - CollectParameters(&m_nIp, 1); - CTheScripts::SetObjectiveForAllPedsInCollective(GET_INTEGER_PARAM(0), OBJECTIVE_STEAL_ANY_CAR); - return 0; -#endif - */ - case COMMAND_SET_OBJECT_VELOCITY: - { - CollectParameters(&m_nIp, 4); - CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pObject); - pObject->SetMoveSpeed(GET_VECTOR_PARAM(1) * METERS_PER_SECOND_TO_GAME_SPEED); - return 0; - } - case COMMAND_SET_OBJECT_COLLISION: + case COMMAND_SET_OBJECT_AREA_VISIBLE: { CollectParameters(&m_nIp, 2); CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); script_assert(pObject); - pObject->bUsesCollision = (GET_INTEGER_PARAM(1) != 0); + pObject->m_area = GET_INTEGER_PARAM(1); return 0; } - case COMMAND_IS_ICECREAM_JINGLE_ON: + case COMMAND_SET_CHAR_NEVER_TARGETTED: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + pPed->bNeverEverTargetThisPed = GET_INTEGER_PARAM(1); + return 0; + } + case COMMAND_SET_CHAR_CROUCH_WHEN_THREATENED: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + pPed->bCrouchWhenScared = true; + return 0; + } + case COMMAND_IS_CHAR_IN_ANY_POLICE_VEHICLE: + { + CollectParameters(&m_nIp, 1); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + UpdateCompareFlag(pPed->bInVehicle && pPed->m_pMyVehicle && + pPed->m_pMyVehicle->IsLawEnforcementVehicle() && + pPed->m_pMyVehicle->GetModelIndex() != MI_PREDATOR); + return 0; + } + case COMMAND_DOES_CHAR_EXIST: + CollectParameters(&m_nIp, 1); + UpdateCompareFlag(CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)) != 0); + return 0; + case COMMAND_DOES_VEHICLE_EXIST: + { + CollectParameters(&m_nIp, 1); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + bool bExist = false; + if (pVehicle) { + int index = GET_INTEGER_PARAM(0) >> 8; +#ifdef FIX_BUGS + bExist = (index >= 0 && index < NUMVEHICLES); // epic fail +#else + bExist = (index > 0 && index < NUMVEHICLES); +#endif + } + UpdateCompareFlag(bExist); + return 0; + } + case COMMAND_ADD_SHORT_RANGE_SPRITE_BLIP_FOR_CONTACT_POINT: + { + CollectParameters(&m_nIp, 4); + CVector pos = GET_VECTOR_PARAM(0); + if (pos.z <= MAP_Z_LOW_LIMIT) + pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); + CRadar::GetActualBlipArrayIndex(CollectNextParameterWithoutIncreasingPC(m_nIp)); + int id = CRadar::SetShortRangeCoordBlip(BLIP_COORD, pos, 2, BLIP_DISPLAY_BOTH); + CRadar::SetBlipSprite(id, GET_INTEGER_PARAM(3)); + SET_INTEGER_PARAM(0, id); + StoreParameters(&m_nIp, 1); + return 0; + } + case COMMAND_IS_CHAR_STUCK: + { + CollectParameters(&m_nIp, 1); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + UpdateCompareFlag(pPed->m_nWaitState == WAITSTATE_STUCK); + return 0; + } + case COMMAND_SET_ALL_TAXIS_HAVE_NITRO: + { + CollectParameters(&m_nIp, 1); + CVehicle::bAllTaxisHaveNitro = GET_INTEGER_PARAM(0) != 0; + return 0; + } + case COMMAND_SET_CHAR_STOP_SHOOT_DONT_SEEK_ENTITY: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + if (GET_INTEGER_PARAM(1)) { + pPed->bKindaStayInSamePlace = true; + pPed->bStopAndShoot = true; + } + else { + pPed->bKindaStayInSamePlace = false; + pPed->bStopAndShoot = false; + } + pPed->m_nLastPedState = PED_NONE; + return 0; + } + case COMMAND_FREEZE_CAR_POSITION_AND_DONT_LOAD_COLLISION: + { + CollectParameters(&m_nIp, 2); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + if (GET_INTEGER_PARAM(1)) { + pVehicle->bIsFrozen = true; + pVehicle->bInfiniteMass = true; + if (m_bIsMissionScript) { + CWorld::Remove(pVehicle); + pVehicle->bIsStaticWaitingForCollision = true; + CWorld::Add(pVehicle); + } + } + else { + pVehicle->bIsFrozen = false; + pVehicle->bInfiniteMass = false; + } + return 0; + } + case COMMAND_REGISTER_VIGILANTE_LEVEL: + CollectParameters(&m_nIp, 1); + CStats::RegisterLevelVigilanteMission(GET_INTEGER_PARAM(0)); + return 0; + case COMMAND_CLEAR_ALL_CHAR_ANIMS: + { + CollectParameters(&m_nIp, 1); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + if (pPed && pPed->GetPedState() != PED_DRIVING && pPed->GetPedState() != PED_AIM_GUN) { + pPed->m_pVehicleAnim = nil; + pPed->RestartNonPartialAnims(); + RpAnimBlendClumpRemoveAllAssociations(pPed->GetClump()); + pPed->SetPedState(PED_IDLE); + pPed->SetMoveState(PEDMOVE_STILL); + pPed->m_nLastPedState = PED_NONE; + pPed->ClearAimFlag(); + pPed->ClearLookFlag(); + pPed->bIsPointingGunAt = false; + if (pPed->IsPlayer()) + ((CPlayerPed*)pPed)->m_fMoveSpeed = 0.0f; + else + pPed->m_nStoredMoveState = PEDMOVE_STILL; + CAnimManager::AddAnimation(pPed->GetClump(), pPed->m_animGroup, ANIM_STD_IDLE); + pPed->bIsPedDieAnimPlaying = false; + } + return 0; + } + case COMMAND_SET_MAXIMUM_NUMBER_OF_CARS_IN_GARAGE: + CollectParameters(&m_nIp, 2); + CGarages::SetMaxNumStoredCarsForGarage(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); + return 0; + case COMMAND_WANTED_STARS_ARE_FLASHING: + { + CWanted* pWanted = CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_pWanted; + UpdateCompareFlag(pWanted->m_nMinWantedLevel - pWanted->GetWantedLevel() > 0); + return 0; + } + case COMMAND_SET_ALLOW_HURRICANES: + CollectParameters(&m_nIp, 1); + CStats::NoMoreHurricanes = GET_INTEGER_PARAM(0); + return 0; + case COMMAND_PLAY_ANNOUNCEMENT: + { + CollectParameters(&m_nIp, 1); + DMAudio.PlayRadioAnnouncement(GET_INTEGER_PARAM(0) + STREAMED_SOUND_NEWS_A); + return 0; + } + case COMMAND_SET_PLAYER_IS_IN_STADIUM: + { + CollectParameters(&m_nIp, 1); + CTheScripts::bPlayerIsInTheStatium = GET_INTEGER_PARAM(0); + return 0; + } + case COMMAND_GET_BUS_FARES_COLLECTED_BY_PLAYER: + { + CollectParameters(&m_nIp, 1); + CPlayerInfo* pPlayerInfo = &CWorld::Players[GET_INTEGER_PARAM(0)]; + SET_INTEGER_PARAM(0, pPlayerInfo->m_pPed->m_nLastBusFareCollected); + pPlayerInfo->m_pPed->m_nLastBusFareCollected = 0; + StoreParameters(&m_nIp, 1); + return 0; + } + case COMMAND_SET_CHAR_OBJ_BUY_ICE_CREAM: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); + script_assert(pVehicle); + SET_INTEGER_PARAM(0, 0); + if (pPed->m_objective == OBJECTIVE_NONE && !pPed->bHasAlreadyUsedAttractor) { + C2dEffect* pEffect = (C2dEffect*)GetPedAttractorManager()->GetEffectForIceCreamVan(pVehicle, pPed->GetPosition()); // has to be casted, because inner methods are const + if (pEffect) { + CVector pos; + CPedAttractorManager::ComputeEffectPos(pEffect, pVehicle->GetMatrix(), pos); + if ((pPed->GetPosition() - pos).MagnitudeSqr() < SQR(20.0f)) { + if (GetPedAttractorManager()->HasEmptySlot(pEffect) && GetPedAttractorManager()->IsApproachable(pEffect, pVehicle->GetMatrix(), 0, pPed)) { + if (GetPedAttractorManager()->RegisterPedWithAttractor(pPed, pEffect, pVehicle->GetMatrix())) + SET_INTEGER_PARAM(0, 1); + } + } + } + } + StoreParameters(&m_nIp, 1); + return 0; + } + case COMMAND_DISPLAY_RADAR: + CollectParameters(&m_nIp, 1); + CHud::m_HideRadar = GET_INTEGER_PARAM(0) == 0; + // on PS2 two flags are set, on mobile none + return 0; + case COMMAND_IS_PLAYER_IN_INFO_ZONE: + { + CollectParameters(&m_nIp, 1); + CPlayerInfo* pPlayerInfo = &CWorld::Players[GET_INTEGER_PARAM(0)]; + char key[KEY_LENGTH_IN_SCRIPT]; + memset(key, 0, KEY_LENGTH_IN_SCRIPT); + CTheScripts::ReadTextLabelFromScript(&m_nIp, key); + m_nIp += KEY_LENGTH_IN_SCRIPT; + CVector pos = pPlayerInfo->GetPos(); + CZone* infoZone = CTheZones::FindInformationZoneForPosition(&pos); + UpdateCompareFlag(strncmp(key, infoZone->name, 8) == 0); // original code doesn't seem to be using strncmp in here and compare 2 ints instead + return 0; + } + case COMMAND_CLEAR_CHAR_ICE_CREAM_PURCHASE: + { + CollectParameters(&m_nIp, 1); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + if (pPed->m_attractor) + GetPedAttractorManager()->DeRegisterPed(pPed, pPed->m_attractor); + return 0; + } + case COMMAND_HAS_CHAR_ATTEMPTED_ATTRACTOR: + { + CollectParameters(&m_nIp, 1); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + UpdateCompareFlag(pPed->bHasAlreadyUsedAttractor); + return 0; + } + case COMMAND_SET_LOAD_COLLISION_FOR_CAR_FLAG: + { + CollectParameters(&m_nIp, 2); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + if (GET_INTEGER_PARAM(1)) { + pVehicle->bDontLoadCollision = false; + if (m_bMissionFlag) { + CWorld::Remove(pVehicle); + pVehicle->bIsStaticWaitingForCollision = true; + CWorld::Add(pVehicle); + } + } + else { + pVehicle->bDontLoadCollision = true; + if (pVehicle->bIsStaticWaitingForCollision) { + pVehicle->bIsStaticWaitingForCollision = false; + if (!pVehicle->GetIsStatic()) + pVehicle->AddToMovingList(); + } + } + return 0; + } + case COMMAND_SET_LOAD_COLLISION_FOR_CHAR_FLAG: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + if (GET_INTEGER_PARAM(1)) { + pPed->bDontLoadCollision = false; + if (m_bMissionFlag) { + CWorld::Remove(pPed); + pPed->bIsStaticWaitingForCollision = true; + CWorld::Add(pPed); + } + } + else { + pPed->bDontLoadCollision = true; + if (pPed->bIsStaticWaitingForCollision) { + pPed->bIsStaticWaitingForCollision = false; + if (!pPed->GetIsStatic()) + pPed->AddToMovingList(); + } + } + return 0; + } + case COMMAND_ADD_BIG_GUN_FLASH: + { + CollectParameters(&m_nIp, 6); + CWeapon::AddGunFlashBigGuns(GET_VECTOR_PARAM(0), GET_VECTOR_PARAM(3)); + return 0; + } + case COMMAND_HAS_CHAR_BOUGHT_ICE_CREAM: + { + CollectParameters(&m_nIp, 1); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + UpdateCompareFlag(pPed->bBoughtIceCream); + return 0; + } + case COMMAND_GET_PROGRESS_PERCENTAGE: + SET_FLOAT_PARAM(0, CStats::GetPercentageProgress()); + StoreParameters(&m_nIp, 1); + return 0; + case COMMAND_SET_SHORTCUT_PICKUP_POINT: + { + CollectParameters(&m_nIp, 4); + CGameLogic::AddShortCutPointAfterDeath(GET_VECTOR_PARAM(0), GET_FLOAT_PARAM(3)); + return 0; + } + case COMMAND_SET_SHORTCUT_DROPOFF_POINT_FOR_MISSION: + { + CollectParameters(&m_nIp, 4); + CGameLogic::AddShortCutDropOffPointForMission(GET_VECTOR_PARAM(0), GET_FLOAT_PARAM(3)); + return 0; + } + case COMMAND_GET_RANDOM_ICE_CREAM_CUSTOMER_IN_AREA: + { + CollectParameters(&m_nIp, 7); + int ped_handle = -1; + CVector pos = FindPlayerCoors(); + float x1 = GET_FLOAT_PARAM(0); + float y1 = GET_FLOAT_PARAM(1); + float x2 = GET_FLOAT_PARAM(2); + float y2 = GET_FLOAT_PARAM(3); + int i = CPools::GetPedPool()->GetSize(); + while (--i && ped_handle == -1) { + CPed* pPed = CPools::GetPedPool()->GetSlot(i); + if (!pPed) + continue; + if (CTheScripts::LastRandomPedId == CPools::GetPedPool()->GetIndex(pPed)) + continue; + if (pPed->CharCreatedBy != RANDOM_CHAR) + continue; + if (!pPed->IsPedInControl()) + continue; + if (pPed->bRemoveFromWorld) + continue; + if (pPed->bFadeOut) + continue; + if (pPed->m_nWaitState != WAITSTATE_FALSE) + continue; + if (pPed->bHasAlreadyUsedAttractor) + continue; + if (pPed->m_attractor) + continue; + if (!ThisIsAValidRandomPed(pPed->m_nPedType, GET_INTEGER_PARAM(4), GET_INTEGER_PARAM(5), GET_INTEGER_PARAM(6))) + continue; + if (pPed->bIsLeader || pPed->m_leader) + continue; + if (!pPed->IsWithinArea(x1, y1, x2, y2)) + continue; + if (pos.z - PED_FIND_Z_OFFSET > pPed->GetPosition().z) + continue; + if (pos.z + PED_FIND_Z_OFFSET < pPed->GetPosition().z) + continue; + ped_handle = CPools::GetPedPool()->GetIndex(pPed); + CTheScripts::LastRandomPedId = ped_handle; + pPed->CharCreatedBy = MISSION_CHAR; + pPed->bRespondsToThreats = false; + ++CPopulation::ms_nTotalMissionPeds; + if (m_bIsMissionScript) + CTheScripts::MissionCleanUp.AddEntityToList(ped_handle, CLEANUP_CHAR); + } + SET_INTEGER_PARAM(0, ped_handle); + StoreParameters(&m_nIp, 1); + return 0; + } + case COMMAND_UNLOCK_ALL_CAR_DOORS_IN_AREA: + { + CollectParameters(&m_nIp, 4); + uint32 i = CPools::GetVehiclePool()->GetSize(); + float infX = GET_FLOAT_PARAM(0); + float infY = GET_FLOAT_PARAM(1); + float supX = GET_FLOAT_PARAM(2); + float supY = GET_FLOAT_PARAM(3); + while (i--) { + CVehicle* pVehicle = CPools::GetVehiclePool()->GetSlot(i); + if (!pVehicle) + continue; + if (pVehicle->IsWithinArea(infX, infY, supX, supY)) + pVehicle->m_nDoorLock = CARLOCK_UNLOCKED; + } + return 0; + } + case COMMAND_SET_GANG_ATTACK_PLAYER_WITH_COPS: + CollectParameters(&m_nIp, 2); + CGangs::SetWillAttackPlayerWithCops((ePedType)((int)PEDTYPE_GANG1 + GET_INTEGER_PARAM(0)), !!GET_INTEGER_PARAM(1)); + return 0; + case COMMAND_SET_CHAR_FRIGHTENED_IN_JACKED_CAR: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + pPed->bHeldHostageInCar = GET_INTEGER_PARAM(1); + pPed->b1A4_2 = GET_INTEGER_PARAM(1); + return 0; + } + case COMMAND_SET_VEHICLE_TO_FADE_IN: + { + CollectParameters(&m_nIp, 2); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + CVisibilityPlugins::SetClumpAlpha(pVehicle->GetClump(), GET_INTEGER_PARAM(1)); + return 0; + } + case COMMAND_REGISTER_ODDJOB_MISSION_PASSED: + ++CStats::MissionsPassed; + CStats::CheckPointReachedSuccessfully(); + CTheScripts::LastMissionPassedTime = CTimer::GetTimeInMilliseconds(); + CGameLogic::RemoveShortCutDropOffPointForMission(); + return 0; + case COMMAND_IS_PLAYER_IN_SHORTCUT_TAXI: + { + CollectParameters(&m_nIp, 1); + CPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; + script_assert(pPed); + UpdateCompareFlag(pPed->bInVehicle && pPed->m_pMyVehicle && pPed->m_pMyVehicle == CGameLogic::pShortCutTaxi); + return 0; + } + case COMMAND_IS_CHAR_DUCKING: + { + CollectParameters(&m_nIp, 1); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + UpdateCompareFlag(RpAnimBlendClumpGetAssociation(pPed->GetClump(), ANIM_STD_DUCK_DOWN) != nil); + return 0; + } + case COMMAND_CREATE_DUST_EFFECT_FOR_CUTSCENE_HELI: + { + CollectParameters(&m_nIp, 3); + CObject* pHeli = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); + bool found = false; + float waterLevel = -1000.0f; + CVector pos = pHeli->GetPosition(); + float radius = GET_FLOAT_PARAM(1); + float ground = CWorld::FindGroundZFor3DCoord(pos.x, pos.y, pos.z, &found); + if (!CWaterLevel::GetWaterLevel(pos.x, pos.y, pos.z, &waterLevel, false)) + waterLevel = 0.0f; + if (waterLevel > ground) + ground = waterLevel; + if (GET_INTEGER_PARAM(2) > 8) + SET_INTEGER_PARAM(2, 8); + CVehicle::HeliDustGenerate(pHeli, (pos.z - ground - 1.0f - radius) * 0.3 + radius, ground, GET_INTEGER_PARAM(2)); + return 0; + } + case COMMAND_REGISTER_FIRE_LEVEL: + CollectParameters(&m_nIp, 1); + CStats::RegisterLevelFireMission(GET_INTEGER_PARAM(0)); + return 0; + case COMMAND_IS_AUSTRALIAN_GAME: + UpdateCompareFlag(false); // should we make some check? + return 0; + case COMMAND_DISARM_CAR_BOMB: + { + CollectParameters(&m_nIp, 1); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + if (pVehicle->IsCar()) { + if (((CAutomobile*)pVehicle)->m_bombType != CARBOMB_NONE) { + ((CAutomobile*)pVehicle)->m_bombType = CARBOMB_NONE; + ((CAutomobile*)pVehicle)->m_pBombRigger = nil; + } + } +#ifdef FIX_BUGS + else if (pVehicle->IsBike()) { + if (((CBike*)pVehicle)->m_bombType != CARBOMB_NONE) { + ((CBike*)pVehicle)->m_bombType = CARBOMB_NONE; + ((CBike*)pVehicle)->m_pBombRigger = nil; + } + } +#endif + return 0; + } + case COMMAND_IS_JAPANESE_GAME: +#ifdef MORE_LANGUAGES + UpdateCompareFlag(FrontEndMenuManager.m_PrefsLanguage == CMenuManager::LANGUAGE_JAPANESE); +#elif (defined GTAVC_JP_PATCH) + UpdateCompareFlag(true); +#else + UpdateCompareFlag(false); +#endif + return 0; + case COMMAND_DOT_PRODUCT_2D: + { + CollectParameters(&m_nIp, 4); + float X1 = GET_FLOAT_PARAM(0); + float Y1 = GET_FLOAT_PARAM(1); + float X2 = GET_FLOAT_PARAM(2); + float Y2 = GET_FLOAT_PARAM(3); + float fDistance = X1 * X2 + Y1 * Y2; + SET_FLOAT_PARAM(0, fDistance); + StoreParameters(&m_nIp, 1); + return 0; + } + case COMMAND_DOT_PRODUCT_3D: + { + CollectParameters(&m_nIp, 6); + float X1 = GET_FLOAT_PARAM(0); + float Y1 = GET_FLOAT_PARAM(1); + float Z1 = GET_FLOAT_PARAM(2); + float X2 = GET_FLOAT_PARAM(3); + float Y2 = GET_FLOAT_PARAM(4); + float Z2 = GET_FLOAT_PARAM(5); + float fDistance = X1 * X2 + Y1 * Y2 + Z1 * Z2; + SET_FLOAT_PARAM(0, fDistance); + StoreParameters(&m_nIp, 1); + return 0; + } + case COMMAND_DEBUG_PRINT_WITH_1_FLOAT: + return 0; + case COMMAND_DEBUG_PRINT_WITH_2_FLOATS: + return 0; + case COMMAND_DEBUG_PRINT_WITH_3_FLOATS: + return 0; + case COMMAND_GET_PAD_BUTTON_STATE: + { + CollectParameters(&m_nIp, 1); + switch (GET_INTEGER_PARAM(0)) { + case 0: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GetOddJobTrigger()); break; + case 1: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GetBrake()); break; + case 2: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GetSteeringLeftRight()); break; + case 3: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GetSteeringUpDown()); break; + case 4: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GetCarGunLeftRight()); break; + case 5: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GetCarGunUpDown()); break; + case 6: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GetPedWalkLeftRight()); break; + case 7: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GetPedWalkUpDown()); break; + case 8: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GetLookLeft()); break; + case 9: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GetLookRight()); break; + case 10: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GetLookBehindForCar()); break; + case 11: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GetLookBehindForPed()); break; + case 12: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GetHorn()); break; + case 13: SET_INTEGER_PARAM(0, CPad::GetPad(0)->HornJustDown()); break; + case 14: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GetCarGunFired()); break; + case 15: SET_INTEGER_PARAM(0, CPad::GetPad(0)->CarGunJustDown()); break; + case 16: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GetHandBrake()); break; + case 17: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GetBrake()); break; + case 18: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GetExitVehicle()); break; + case 19: SET_INTEGER_PARAM(0, CPad::GetPad(0)->ExitVehicleJustDown()); break; + case 20: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GetWeapon()); break; + case 21: SET_INTEGER_PARAM(0, CPad::GetPad(0)->WeaponJustDown()); break; + case 22: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GetAccelerate()); break; + case 23: SET_INTEGER_PARAM(0, CPad::GetPad(0)->CycleCameraModeUpJustDown()); break; + case 24: SET_INTEGER_PARAM(0, CPad::GetPad(0)->CycleWeaponLeftJustDown()); break; + case 25: SET_INTEGER_PARAM(0, CPad::GetPad(0)->CycleWeaponRightJustDown()); break; + case 26: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GetTarget()); break; + case 27: SET_INTEGER_PARAM(0, CPad::GetPad(0)->TargetJustDown()); break; + case 28: SET_INTEGER_PARAM(0, CPad::GetPad(0)->JumpJustDown()); break; + case 29: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GetSprint()); break; + case 30: SET_INTEGER_PARAM(0, CPad::GetPad(0)->ShiftTargetLeftJustDown()); break; + case 31: SET_INTEGER_PARAM(0, CPad::GetPad(0)->ForceCameraBehindPlayer()); break; + case 32: SET_INTEGER_PARAM(0, CPad::GetPad(0)->SniperZoomIn()); break; + case 33: SET_INTEGER_PARAM(0, CPad::GetPad(0)->SniperZoomOut()); break; + case 34: SET_INTEGER_PARAM(0, CPad::GetPad(0)->SniperModeLookLeftRight()); break; + case 35: SET_INTEGER_PARAM(0, CPad::GetPad(0)->SniperModeLookUpDown()); break; + case 36: SET_INTEGER_PARAM(0, CPad::GetPad(0)->LookAroundLeftRight()); break; + case 37: SET_INTEGER_PARAM(0, CPad::GetPad(0)->LookAroundUpDown()); break; + case 38: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GuiLeft()); break; + case 39: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GuiRight()); break; + case 40: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GuiUp()); break; + case 41: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GuiDown()); break; + case 42: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GuiSelect()); break; + case 43: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GuiBack()); break; + case 44: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GetSkipCutscene()); if (GET_INTEGER_PARAM(0)) TheCamera.m_bIgnoreFadingStuffForMusic = false; break; // spectacular hack + } + StoreParameters(&m_nIp, 1); + return 0; + } + case COMMAND_SET_NAVIGATION_ARROW: + { + CollectParameters(&m_nIp, 3); + // cNavArrow::SetTarget(GET_FLOAT_PARAM(0), GET_FLOAT_PARAM(0), GET_FLOAT_PARAM(0)); // TODO, although it's unused + return 0; + } + case COMMAND_CLEAR_NAVIGATION_ARROW: + { + // cNavArrow::ClearTarget(); // TODO, although it's unused + return 0; + } + case COMMAND_CALLNOT: + case COMMAND_CALL: + { + m_anStack[m_nStackPointer++] = m_nIp | BIT(STACKVALUE_IS_FUNCTION_CALL_BIT) | ((command == COMMAND_CALLNOT) ? BIT(STACKVALUE_INVERT_RETURN_BIT) : 0); + uint8 nInputParams = CTheScripts::Read1ByteFromScript(&m_nIp); + uint8 nOutputParameters = CTheScripts::Read1ByteFromScript(&m_nIp); + uint8 nLocalsOffset = CTheScripts::Read1ByteFromScript(&m_nIp); + uint32 nIPBeforeParameters = m_nIp; + CollectParameters(&m_nIp, 1); + if (nInputParams) + CollectParameters(&m_nIp, nInputParams, &m_anLocalVariables[m_nLocalsPointer + nLocalsOffset]); + m_nLocalsPointer += nLocalsOffset; + m_anStack[m_nStackPointer - 1] |= (m_nIp - nIPBeforeParameters) << STACKVALUE_IP_PARAMS_OFFSET; + if (GET_INTEGER_PARAM(0) < 0) + m_nIp = CTheScripts::MainScriptSize - GET_INTEGER_PARAM(0); + else + m_nIp = GET_INTEGER_PARAM(0); + return 0; + } + case COMMAND_IS_CAR_AUTOMOBILE: { CollectParameters(&m_nIp, 1); CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); script_assert(pVehicle); - // Adding this check to correspond to command name. - // All original game scripts always assume that the vehicle is actually Mr. Whoopee, - // but maybe there are mods that use it as "is alarm activated"? - script_assert(pVehicle->GetModelIndex() == MI_MRWHOOP); - UpdateCompareFlag(pVehicle->m_bSirenOrAlarm); + UpdateCompareFlag(pVehicle->GetModelIndex() >= MI_FIRST_VEHICLE && pVehicle->GetModelIndex() < MI_FERRY); return 0; } + case COMMAND_IS_CAR_BIKE: + { + CollectParameters(&m_nIp, 1); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + UpdateCompareFlag(pVehicle->GetModelIndex() >= MI_ANGEL && pVehicle->GetModelIndex() <= MI_SANCHEZ); + return 0; + } + return 0; + case COMMAND_IS_CAR_PLANE: + { + CollectParameters(&m_nIp, 1); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + UpdateCompareFlag(pVehicle->GetModelIndex() >= MI_AIRTRAIN && pVehicle->GetModelIndex() <= MI_DEADDODO); + return 0; + } + case COMMAND_IS_CAR_HELI: + { + CollectParameters(&m_nIp, 1); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + UpdateCompareFlag(pVehicle->GetModelIndex() >= MI_ESCAPE && pVehicle->GetModelIndex() <= MI_CHOPPER); + return 0; + } + case COMMAND_NULL_896: + case COMMAND_NULL_897: + case COMMAND_NULL_898: + case COMMAND_NULL_899: + { + script_assert(false && "COMMAND NULL"); + return 0; + } + default: script_assert(0); } @@ -1213,990 +1145,815 @@ int8 CRunningScript::ProcessCommands900To999(int32 command) char str[52]; char onscreen_str[KEY_LENGTH_IN_SCRIPT]; switch (command) { - case COMMAND_PRINT_STRING_IN_STRING_NOW: + case COMMAND_NULL_900: + case COMMAND_NULL_901: + case COMMAND_NULL_902: + case COMMAND_NULL_903: + case COMMAND_NULL_904: + case COMMAND_NULL_905: + case COMMAND_NULL_906: + case COMMAND_NULL_907: + case COMMAND_NULL_908: + case COMMAND_NULL_909: + case COMMAND_NULL_910: + case COMMAND_NULL_911: + { + script_assert(false && "COMMAND NULL"); + return 0; + } + case LCSWRONG_COMMAND_1476: // they DO have it in script + return 0; + case COMMAND_RETURN_IF_TRUE: + if (m_bCondResult) { + ReturnFromGosubOrFunction(); + } + return 0; + case COMMAND_RETURN_TRUE_IF_TRUE: + if (m_bCondResult) { + UpdateCompareFlag(false); + ReturnFromGosubOrFunction(); + } + return 0; + case COMMAND_SET_CHAR_ONLY_ALLOWED_TO_SIT_BEHIND: { - wchar* source = CTheScripts::GetTextByKeyFromScript(&m_nIp); - wchar* pstr = CTheScripts::GetTextByKeyFromScript(&m_nIp); CollectParameters(&m_nIp, 2); - CMessages::AddMessageJumpQWithString(source, GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), pstr); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + pPed->bOnlyAllowedToSitBehind = GET_INTEGER_PARAM(1); return 0; } - //case COMMAND_PRINT_STRING_IN_STRING_SOON: - /* - case COMMAND_SET_5_REPEATED_PHONE_MESSAGES: - { + case COMMAND_SET_RC_HELI_HEIGHT_LIMIT: CollectParameters(&m_nIp, 1); - wchar* text1 = CTheScripts::GetTextByKeyFromScript(&m_nIp); - wchar* text2 = CTheScripts::GetTextByKeyFromScript(&m_nIp); - wchar* text3 = CTheScripts::GetTextByKeyFromScript(&m_nIp); - wchar* text4 = CTheScripts::GetTextByKeyFromScript(&m_nIp); - wchar* text5 = CTheScripts::GetTextByKeyFromScript(&m_nIp); - gPhoneInfo.SetPhoneMessage_Repeatedly(GET_INTEGER_PARAM(0), text1, text2, text3, text4, text5, nil); + CVehicle::rcHeliHeightLimit = GET_FLOAT_PARAM(0); return 0; - } - case COMMAND_SET_5_PHONE_MESSAGES: - { - CollectParameters(&m_nIp, 1); - wchar* text1 = CTheScripts::GetTextByKeyFromScript(&m_nIp); - wchar* text2 = CTheScripts::GetTextByKeyFromScript(&m_nIp); - wchar* text3 = CTheScripts::GetTextByKeyFromScript(&m_nIp); - wchar* text4 = CTheScripts::GetTextByKeyFromScript(&m_nIp); - wchar* text5 = CTheScripts::GetTextByKeyFromScript(&m_nIp); - gPhoneInfo.SetPhoneMessage_JustOnce(GET_INTEGER_PARAM(0), text1, text2, text3, text4, text5, nil); - return 0; - } - case COMMAND_SET_6_REPEATED_PHONE_MESSAGES: - { - CollectParameters(&m_nIp, 1); - wchar* text1 = CTheScripts::GetTextByKeyFromScript(&m_nIp); - wchar* text2 = CTheScripts::GetTextByKeyFromScript(&m_nIp); - wchar* text3 = CTheScripts::GetTextByKeyFromScript(&m_nIp); - wchar* text4 = CTheScripts::GetTextByKeyFromScript(&m_nIp); - wchar* text5 = CTheScripts::GetTextByKeyFromScript(&m_nIp); - wchar* text6 = CTheScripts::GetTextByKeyFromScript(&m_nIp); - gPhoneInfo.SetPhoneMessage_Repeatedly(GET_INTEGER_PARAM(0), text1, text2, text3, text4, text5, text6); - return 0; - } - case COMMAND_SET_6_PHONE_MESSAGES: - { - CollectParameters(&m_nIp, 1); - wchar* text1 = CTheScripts::GetTextByKeyFromScript(&m_nIp); - wchar* text2 = CTheScripts::GetTextByKeyFromScript(&m_nIp); - wchar* text3 = CTheScripts::GetTextByKeyFromScript(&m_nIp); - wchar* text4 = CTheScripts::GetTextByKeyFromScript(&m_nIp); - wchar* text5 = CTheScripts::GetTextByKeyFromScript(&m_nIp); - wchar* text6 = CTheScripts::GetTextByKeyFromScript(&m_nIp); - gPhoneInfo.SetPhoneMessage_JustOnce(GET_INTEGER_PARAM(0), text1, text2, text3, text4, text5, text6); - return 0; - } - */ - case COMMAND_IS_POINT_OBSCURED_BY_A_MISSION_ENTITY: - { - CollectParameters(&m_nIp, 6); - float infX = GET_FLOAT_PARAM(0) - GET_FLOAT_PARAM(3); - float supX = GET_FLOAT_PARAM(0) + GET_FLOAT_PARAM(3); - float infY = GET_FLOAT_PARAM(1) - GET_FLOAT_PARAM(4); - float supY = GET_FLOAT_PARAM(1) + GET_FLOAT_PARAM(4); - float infZ = GET_FLOAT_PARAM(2) - GET_FLOAT_PARAM(5); - float supZ = GET_FLOAT_PARAM(2) + GET_FLOAT_PARAM(5); - if (infX > supX) { - float tmp = infX; - infX = supX; - supX = tmp; - } - if (infY > supY) { - float tmp = infY; - infY = supY; - supY = tmp; - } - if (infZ > supZ) { - float tmp = infZ; - infZ = supZ; - supZ = tmp; - } - int16 total; - CWorld::FindMissionEntitiesIntersectingCube(CVector(infX, infY, infZ), CVector(supX, supY, supZ), &total, 2, nil, true, true, true); - UpdateCompareFlag(total > 0); - return 0; - } - case COMMAND_LOAD_ALL_MODELS_NOW: -#ifdef FIX_BUGS - CTimer::Suspend(); -#else - CTimer::Stop(); -#endif - CStreaming::LoadAllRequestedModels(false); -#ifdef FIX_BUGS - CTimer::Resume(); -#else - CTimer::Update(); -#endif - return 0; - case COMMAND_ADD_TO_OBJECT_VELOCITY: - { - CollectParameters(&m_nIp, 4); - CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pObject); - pObject->AddToMoveSpeed(GET_VECTOR_PARAM(1) * METERS_PER_SECOND_TO_GAME_SPEED); - return 0; - } - /* - case COMMAND_DRAW_SPRITE: + case COMMAND_CREATE_SCRIPT_CORONA: { CollectParameters(&m_nIp, 9); - CTheScripts::IntroRectangles[CTheScripts::NumberOfIntroRectanglesThisFrame].m_bIsUsed = true; - CTheScripts::IntroRectangles[CTheScripts::NumberOfIntroRectanglesThisFrame].m_nTextureId = GET_INTEGER_PARAM(0) - 1; - CTheScripts::IntroRectangles[CTheScripts::NumberOfIntroRectanglesThisFrame].m_sRect = CRect( - GET_FLOAT_PARAM(1), GET_FLOAT_PARAM(2), GET_FLOAT_PARAM(1) + GET_FLOAT_PARAM(3), GET_FLOAT_PARAM(2) + GET_FLOAT_PARAM(4)); - CTheScripts::IntroRectangles[CTheScripts::NumberOfIntroRectanglesThisFrame].m_sColor = CRGBA(GET_INTEGER_PARAM(5), GET_INTEGER_PARAM(6), GET_INTEGER_PARAM(7), GET_INTEGER_PARAM(8)); - CTheScripts::NumberOfIntroRectanglesThisFrame++; - return 0; - } - case COMMAND_DRAW_RECT: - { - CollectParameters(&m_nIp, 8); - CTheScripts::IntroRectangles[CTheScripts::NumberOfIntroRectanglesThisFrame].m_bIsUsed = true; - CTheScripts::IntroRectangles[CTheScripts::NumberOfIntroRectanglesThisFrame].m_nTextureId = -1; - CTheScripts::IntroRectangles[CTheScripts::NumberOfIntroRectanglesThisFrame].m_sRect = CRect( - GET_FLOAT_PARAM(0), GET_FLOAT_PARAM(1), GET_FLOAT_PARAM(0) + GET_FLOAT_PARAM(2), GET_FLOAT_PARAM(1) + GET_FLOAT_PARAM(3)); - CTheScripts::IntroRectangles[CTheScripts::NumberOfIntroRectanglesThisFrame].m_sColor = CRGBA(GET_INTEGER_PARAM(4), GET_INTEGER_PARAM(5), GET_INTEGER_PARAM(6), GET_INTEGER_PARAM(7)); - CTheScripts::NumberOfIntroRectanglesThisFrame++; - return 0; - } - case COMMAND_LOAD_SPRITE: - { - CollectParameters(&m_nIp, 1); - strncpy(str, (char*)&CTheScripts::ScriptSpace[m_nIp], KEY_LENGTH_IN_SCRIPT); - for (int i = 0; i < KEY_LENGTH_IN_SCRIPT; i++) - str[i] = tolower(str[i]); - m_nIp += KEY_LENGTH_IN_SCRIPT; - int slot = CTxdStore::FindTxdSlot("script"); - CTxdStore::PushCurrentTxd(); - CTxdStore::SetCurrentTxd(slot); - CTheScripts::ScriptSprites[GET_INTEGER_PARAM(0) - 1].SetTexture(str); - CTxdStore::PopCurrentTxd(); - return 0; - } - case COMMAND_LOAD_TEXTURE_DICTIONARY: - { - strcpy(str, "models\\"); - strncpy(str + sizeof("models\\"), (char*)&CTheScripts::ScriptSpace[m_nIp], KEY_LENGTH_IN_SCRIPT); - strcat(str, ".txd"); - m_nIp += KEY_LENGTH_IN_SCRIPT; - int slot = CTxdStore::FindTxdSlot("script"); - if (slot == -1) - slot = CTxdStore::AddTxdSlot("script"); - CTxdStore::LoadTxd(slot, str); - CTxdStore::AddRef(slot); - return 0; - } - case COMMAND_REMOVE_TEXTURE_DICTIONARY: - { - CTheScripts::RemoveScriptTextureDictionary(); - return 0; - } - */ - case COMMAND_SET_OBJECT_DYNAMIC: - { - CollectParameters(&m_nIp, 2); - CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pObject); - if (GET_INTEGER_PARAM(1)) { - if (pObject->bIsStatic) { - pObject->SetIsStatic(false); - pObject->AddToMovingList(); - } - } - else { - if (!pObject->bIsStatic) { - pObject->SetIsStatic(true); - pObject->RemoveFromMovingList(); - } - } - return 0; - } - /* - case COMMAND_SET_CHAR_ANIM_SPEED: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - CAnimBlendAssociation* pAssoc = RpAnimBlendClumpGetFirstAssociation(pPed->GetClump()); - if (pAssoc) - pAssoc->speed = GET_FLOAT_PARAM(1); - return 0; - } - */ - case COMMAND_PLAY_MISSION_PASSED_TUNE: - { - CollectParameters(&m_nIp, 1); - DMAudio.ChangeMusicMode(MUSICMODE_FRONTEND); - DMAudio.PlayFrontEndTrack(GET_INTEGER_PARAM(0) + STREAMED_SOUND_MISSION_COMPLETED - 1, FALSE); -#ifndef GTA_PSP - //DMAudio.SaveAnnouncementsWhenMissionPassedPlayed(); // TODO! -#endif - return 0; - } - case COMMAND_CLEAR_AREA: - { - CollectParameters(&m_nIp, 5); - CVector pos = GET_VECTOR_PARAM(0); - if (pos.z <= MAP_Z_LOW_LIMIT) - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - CWorld::ClearExcitingStuffFromArea(pos, GET_FLOAT_PARAM(3), GET_INTEGER_PARAM(4)); -#ifdef GTA_MOBILE - // CPopulation::ms_blockPedCreationForAFrame = true; -#endif - return 0; - } - case COMMAND_FREEZE_ONSCREEN_TIMER: - CollectParameters(&m_nIp, 1); - CUserDisplay::OnscnTimer.m_bDisabled = GET_INTEGER_PARAM(0) != 0; - return 0; - case COMMAND_SWITCH_CAR_SIREN: - { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - pVehicle->m_bSirenOrAlarm = GET_INTEGER_PARAM(1) != 0; - return 0; - } - /* - case COMMAND_SWITCH_PED_ROADS_ON_ANGLED: - { - CollectParameters(&m_nIp, 7); - ThePaths.SwitchRoadsInAngledArea(GET_FLOAT_PARAM(0), GET_FLOAT_PARAM(1), GET_FLOAT_PARAM(2), - GET_FLOAT_PARAM(3), GET_FLOAT_PARAM(4), GET_FLOAT_PARAM(5), GET_FLOAT_PARAM(6), 0, 1); - return 0; - } - */ - case COMMAND_SWITCH_PED_ROADS_OFF_ANGLED: - CollectParameters(&m_nIp, 7); - ThePaths.SwitchRoadsInAngledArea(GET_FLOAT_PARAM(0), GET_FLOAT_PARAM(1), GET_FLOAT_PARAM(2), - GET_FLOAT_PARAM(3), GET_FLOAT_PARAM(4), GET_FLOAT_PARAM(5), GET_FLOAT_PARAM(6), 0, 0); - return 0; - /* - case COMMAND_SWITCH_ROADS_ON_ANGLED: - CollectParameters(&m_nIp, 7); - ThePaths.SwitchRoadsInAngledArea(GET_FLOAT_PARAM(0), GET_FLOAT_PARAM(1), GET_FLOAT_PARAM(2), - GET_FLOAT_PARAM(3), GET_FLOAT_PARAM(4), GET_FLOAT_PARAM(5), GET_FLOAT_PARAM(6), 1, 1); - return 0; - case COMMAND_SWITCH_ROADS_OFF_ANGLED: - CollectParameters(&m_nIp, 7); - ThePaths.SwitchRoadsInAngledArea(GET_FLOAT_PARAM(0), GET_FLOAT_PARAM(1), GET_FLOAT_PARAM(2), - GET_FLOAT_PARAM(3), GET_FLOAT_PARAM(4), GET_FLOAT_PARAM(5), GET_FLOAT_PARAM(6), 1, 0); - return 0; - */ - case COMMAND_SET_CAR_WATERTIGHT: - { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - if (pVehicle->IsBike()) { - CBike* pBike = (CBike*)pVehicle; - pBike->bWaterTight = GET_INTEGER_PARAM(1) != 0; - } - else if (pVehicle->IsCar()) { - CAutomobile* pCar = (CAutomobile*)pVehicle; - pCar->bWaterTight = GET_INTEGER_PARAM(1) != 0; - } - return 0; - } - case COMMAND_ADD_MOVING_PARTICLE_EFFECT: - { - CollectParameters(&m_nIp, 12); - CVector pos = GET_VECTOR_PARAM(1); - if (pos.z <= MAP_Z_LOW_LIMIT) - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - float size = Max(0.0f, GET_FLOAT_PARAM(7)); - eParticleObjectType type = (eParticleObjectType)GET_INTEGER_PARAM(0); - RwRGBA color; - if (type == POBJECT_SMOKE_TRAIL){ - color.alpha = -1; - color.red = GET_INTEGER_PARAM(8); - color.green = GET_INTEGER_PARAM(9); - color.blue = GET_INTEGER_PARAM(10); - }else{ - color.alpha = color.red = color.blue = color.green = 0; - } - CVector target = GET_VECTOR_PARAM(4); - CParticleObject::AddObject(type, pos, target, size, GET_INTEGER_PARAM(11), color, 1); - return 0; - } - case COMMAND_SET_CHAR_CANT_BE_DRAGGED_OUT: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - pPed->bDontDragMeOutCar = GET_INTEGER_PARAM(1) != 0; - return 0; - } - case COMMAND_TURN_CAR_TO_FACE_COORD: - { - CollectParameters(&m_nIp, 3); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - const CVector& pos = pVehicle->GetPosition(); - float heading = CGeneral::GetATanOfXY(pos.x - GET_FLOAT_PARAM(1), pos.y - GET_FLOAT_PARAM(2)) + HALFPI; - if (heading > TWOPI) - heading -= TWOPI; - pVehicle->SetHeading(heading); - return 0; - } - case COMMAND_IS_CRANE_LIFTING_CAR: - { - CollectParameters(&m_nIp, 3); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(2)); - UpdateCompareFlag(CCranes::IsThisCarPickedUp(GET_FLOAT_PARAM(0), GET_FLOAT_PARAM(1), pVehicle)); - return 0; - } - case COMMAND_DRAW_SPHERE: - { - CollectParameters(&m_nIp, 4); - CVector pos = GET_VECTOR_PARAM(0); - if (pos.z <= MAP_Z_LOW_LIMIT) - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - C3dMarkers::PlaceMarkerSet((uintptr)this + m_nIp, MARKERTYPE_CYLINDER, pos, GET_FLOAT_PARAM(3), - SPHERE_MARKER_R, SPHERE_MARKER_G, SPHERE_MARKER_B, SPHERE_MARKER_A, - SPHERE_MARKER_PULSE_PERIOD, SPHERE_MARKER_PULSE_FRACTION, 0); - return 0; - } - case COMMAND_SET_CAR_STATUS: - { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - pVehicle->SetStatus(GET_INTEGER_PARAM(1)); - return 0; - } - case COMMAND_IS_CHAR_MALE: - { - CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - UpdateCompareFlag(pPed->m_nPedType != PEDTYPE_CIVFEMALE && pPed->m_nPedType != PEDTYPE_PROSTITUTE); - return 0; - } - case COMMAND_SCRIPT_NAME: - { - strncpy(str, (char*)&CTheScripts::ScriptSpace[m_nIp], KEY_LENGTH_IN_SCRIPT); - for (int i = 0; i < KEY_LENGTH_IN_SCRIPT; i++) - str[i] = tolower(str[i]); - m_nIp += KEY_LENGTH_IN_SCRIPT; - strncpy(m_abScriptName, str, KEY_LENGTH_IN_SCRIPT); - return 0; - } - /* - case COMMAND_CHANGE_GARAGE_TYPE_WITH_CAR_MODEL: - { - CollectParameters(&m_nIp, 3); - CGarages::ChangeGarageType(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2)); - return 0; - } - case COMMAND_FIND_DRUG_PLANE_COORDINATES: - SET_VECTOR_PARAM(0, CPlane::FindDrugPlaneCoordinates()); - StoreParameters(&m_nIp, 3); - return 0; - */ - case COMMAND_SAVE_INT_TO_DEBUG_FILE: - // TODO: implement something here - CollectParameters(&m_nIp, 1); - return 0; - case COMMAND_SAVE_FLOAT_TO_DEBUG_FILE: - CollectParameters(&m_nIp, 1); - return 0; - case COMMAND_SAVE_NEWLINE_TO_DEBUG_FILE: - return 0; - case COMMAND_POLICE_RADIO_MESSAGE: - CollectParameters(&m_nIp, 3); - DMAudio.PlaySuspectLastSeen(GET_FLOAT_PARAM(0), GET_FLOAT_PARAM(1), GET_FLOAT_PARAM(2)); - return 0; - case COMMAND_SET_CAR_STRONG: - { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - pVehicle->bTakeLessDamage = GET_INTEGER_PARAM(1) != 0; - return 0; - } - case COMMAND_REMOVE_ROUTE: - CollectParameters(&m_nIp, 1); - CRouteNode::RemoveRoute(GET_INTEGER_PARAM(0)); - return 0; - case COMMAND_SWITCH_RUBBISH: - CollectParameters(&m_nIp, 1); - CRubbish::SetVisibility(GET_INTEGER_PARAM(0) != 0); - return 0; - case COMMAND_REMOVE_PARTICLE_EFFECTS_IN_AREA: - { - CollectParameters(&m_nIp, 6); - float x1 = GET_FLOAT_PARAM(0); - float y1 = GET_FLOAT_PARAM(1); - float z1 = GET_FLOAT_PARAM(2); - float x2 = GET_FLOAT_PARAM(3); - float y2 = GET_FLOAT_PARAM(4); - float z2 = GET_FLOAT_PARAM(5); - CParticleObject* tmp = CParticleObject::pCloseListHead; - while (tmp) { - CParticleObject* next = tmp->m_pNext; - if (tmp->IsWithinArea(x1, y1, z1, x2, y2, z2)) - tmp->RemoveObject(); - tmp = next; - } - tmp = CParticleObject::pFarListHead; - while (tmp) { - CParticleObject* next = tmp->m_pNext; - if (tmp->IsWithinArea(x1, y1, z1, x2, y2, z2)) - tmp->RemoveObject(); - tmp = next; - } - return 0; - } - case COMMAND_SWITCH_STREAMING: - CollectParameters(&m_nIp, 1); - CStreaming::ms_disableStreaming = GET_INTEGER_PARAM(0) == 0; - return 0; - case COMMAND_IS_GARAGE_OPEN: - CollectParameters(&m_nIp, 1); - UpdateCompareFlag(CGarages::IsGarageOpen(GET_INTEGER_PARAM(0))); - return 0; - case COMMAND_IS_GARAGE_CLOSED: - CollectParameters(&m_nIp, 1); - UpdateCompareFlag(CGarages::IsGarageClosed(GET_INTEGER_PARAM(0))); - return 0; - /* - case COMMAND_START_CATALINA_HELI: - CHeli::StartCatalinaFlyBy(); - return 0; - case COMMAND_CATALINA_HELI_TAKE_OFF: - CHeli::CatalinaTakeOff(); - return 0; - case COMMAND_REMOVE_CATALINA_HELI: - CHeli::RemoveCatalinaHeli(); - return 0; - case COMMAND_HAS_CATALINA_HELI_BEEN_SHOT_DOWN: - UpdateCompareFlag(CHeli::HasCatalinaBeenShotDown()); - return 0; - */ - case COMMAND_SWAP_NEAREST_BUILDING_MODEL: - { - CollectParameters(&m_nIp, 6); - CTheScripts::SwapNearestBuildingModel(GET_FLOAT_PARAM(0), GET_FLOAT_PARAM(1), GET_FLOAT_PARAM(2), GET_FLOAT_PARAM(3), GET_INTEGER_PARAM(4), GET_INTEGER_PARAM(5)); - return 0; - } - case COMMAND_SWITCH_WORLD_PROCESSING: - CollectParameters(&m_nIp, 1); - CWorld::bProcessCutsceneOnly = GET_INTEGER_PARAM(0) == 0; - return 0; - case COMMAND_REMOVE_ALL_PLAYER_WEAPONS: - { - CollectParameters(&m_nIp, 1); - CPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(pPed); - pPed->ClearWeapons(); - return 0; - } - /* - case COMMAND_GRAB_CATALINA_HELI: - { - CHeli* pHeli = CHeli::FindPointerToCatalinasHeli(); - SET_INTEGER_PARAM(0, pHeli ? CPools::GetVehiclePool()->GetIndex(pHeli) : -1); + base::cSList::tSItem* pCorona = new base::cSList::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_CLEAR_AREA_OF_CARS: + case COMMAND_REMOVE_SCRIPT_CORONA: + { + CollectParameters(&m_nIp, 1); + for (base::cSList::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); + CBoat* pVehicle = (CBoat*)CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle && pVehicle->IsBoat()); + UpdateCompareFlag(pVehicle->bBoatInWater); + return 0; + } + case COMMAND_IS_CAR_DRIVER_BEING_JACKED: + { + CollectParameters(&m_nIp, 1); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + UpdateCompareFlag(pVehicle->bIsBeingCarJacked); + return 0; + } + case COMMAND_SET_CHAR_ONLY_ALLOWED_TO_SIT_IN_FRONT: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + pPed->bOnlyAllowedToSitInFront = GET_INTEGER_PARAM(1); + return 0; + } + case COMMAND_SET_CAR_TILTED_BY_CHAR: + { + CollectParameters(&m_nIp, 2); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(1)); + script_assert(pVehicle); + pVehicle->ApplyTurnForce(0.0f, 0.0f, CGeneral::GetRandomNumberInRange(-0.8f, -1.2f)* pPed->m_fMass, + pPed->GetPosition().x - pVehicle->GetPosition().x, pPed->GetPosition().y - pVehicle->GetPosition().y, 0.0f); + DMAudio.PlayOneShot(pVehicle->m_audioEntityId, SOUND_CAR_JERK, 0.0f); + return 0; + } + case COMMAND_GET_WEAPON_TYPE_FOR_PICKUP_IN_AREA: + { + CollectParameters(&m_nIp, 4); + float X = GET_FLOAT_PARAM(0); + float Y = GET_FLOAT_PARAM(1); + float Z = GET_FLOAT_PARAM(2); + float radius = GET_FLOAT_PARAM(3); + int model = -1; + bool found = false; + for (uint32 i = 0; i < NUMPICKUPS; i++) { + CPickup* pPickup = &CPickups::aPickUps[i]; + if (pPickup->m_eType != PICKUP_NONE) { + CVector fDist = pPickup->m_vecPos - CVector(X, Y, Z); +#ifndef FIX_BUGS // this breaks ALL pickups! + pPickup->m_eModelIndex = 4; +#endif + if (fDist.Magnitude() < radius && pPickup->m_pObject) { + found = true; + model = CPickups::WeaponForModel(pPickup->m_pObject->GetModelIndex()); + } + } + } + SET_INTEGER_PARAM(0, model); + StoreParameters(&m_nIp, 1); + } + case todo__comm_924: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_924"); + return 0; + } + case LCSWRONG_COMMAND_1489: + { + script_assert(false && "TODO_OR_CHECK_COMMAND_1489"); + return 0; + } + case LCSWRONG_COMMAND_1490: + { + script_assert(false && "TODO_OR_CHECK_COMMAND_1490"); + return 0; + } + case todo__comm_927: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_927"); + return 0; + } + case COMMAND_SET_DEBUG_MENU_ACTIVE: + CollectParameters(&m_nIp, 1); + // this sets two values on PS2 and PSP, but not on mobile - TODO? + return 0; + case COMMAND_SET_DRAW_HUD: + CollectParameters(&m_nIp, 1); + CHud::m_Wants_To_Draw_Hud = (GET_INTEGER_PARAM(0) != 0); + return 0; + case COMMAND_GET_RANDOM_CHAR_IN_AREA_NO_CHECKS: + { + CollectParameters(&m_nIp, 4); + int ped_handle = -1; + CVector pos = FindPlayerCoors(); + float x1 = GET_FLOAT_PARAM(0); + float y1 = GET_FLOAT_PARAM(1); + float x2 = GET_FLOAT_PARAM(2); + float y2 = GET_FLOAT_PARAM(3); + int i = CPools::GetPedPool()->GetSize(); + while (--i && ped_handle == -1) { + CPed* pPed = CPools::GetPedPool()->GetSlot(i); + if (!pPed) + continue; + if (pPed->bRemoveFromWorld) + continue; + if (pPed->bFadeOut) + continue; + if (pPed->m_nWaitState != WAITSTATE_FALSE) + continue; + if (!pPed->IsWithinArea(x1, y1, x2, y2)) + continue; + if (pos.z - PED_FIND_Z_OFFSET > pPed->GetPosition().z) + continue; + if (pos.z + PED_FIND_Z_OFFSET < pPed->GetPosition().z) + continue; + ped_handle = CPools::GetPedPool()->GetIndex(pPed); + CTheScripts::LastRandomPedId = ped_handle; + pPed->CharCreatedBy = MISSION_CHAR; + pPed->bRespondsToThreats = false; + ++CPopulation::ms_nTotalMissionPeds; + if (m_bIsMissionScript) + CTheScripts::MissionCleanUp.AddEntityToList(ped_handle, CLEANUP_CHAR); + } + SET_INTEGER_PARAM(0, ped_handle); + StoreParameters(&m_nIp, 1); + return 0; + } + case COMMAND_GET_RANDOM_CAR_IN_AREA_NO_CHECKS_NO_SAVE: + { + CollectParameters(&m_nIp, 4); + int handle = -1; + uint32 i = CPools::GetVehiclePool()->GetSize(); + float infX = GET_FLOAT_PARAM(0); + float infY = GET_FLOAT_PARAM(1); + float supX = GET_FLOAT_PARAM(2); + float supY = GET_FLOAT_PARAM(3); + while (i-- && handle == -1) { + CVehicle* pVehicle = CPools::GetVehiclePool()->GetSlot(i); + if (!pVehicle) + continue; + if (!pVehicle->IsWithinArea(infX, infY, supX, supY)) + continue; + handle = CPools::GetVehiclePool()->GetIndex(pVehicle); + } + SET_INTEGER_PARAM(0, handle); + StoreParameters(&m_nIp, 1); + return 0; + } + case COMMAND_STORE_CAR_COLLIDED_WITH_NO_SAVE: + { + CollectParameters(&m_nIp, 1); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + if (!pVehicle) + printf("STORE_CAR_COLLIDED_WITH_NO_SAVE - Car doesn\'t exist\n"); + else { + if (pVehicle->m_pLastDamageEntity == nil) + SET_INTEGER_PARAM(0, -1); + else { + // what they are doing is not very safe as m_pLastDamageEntity doesn't have to be CVehicle +#ifdef FIX_BUGS + if (!pVehicle->m_pLastDamageEntity->IsVehicle()) { + SET_INTEGER_PARAM(0, -1); + } + else +#endif + { + SET_INTEGER_PARAM(0, CPools::GetVehiclePool()->GetIndex((CVehicle*)pVehicle->m_pLastDamageEntity)); + pVehicle->m_pLastDamageEntity = nil; + } + } + } + StoreParameters(&m_nIp, 1); + return 0; + } + case COMMAND_SET_CHAR_DROPS_WEAPONS_ON_DEATH: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + pPed->bDropsWeaponsOnDeath = (GET_INTEGER_PARAM(1) != 0); + return 0; + } + case COMMAND_IS_CHAR_CROUCHING: + { + CollectParameters(&m_nIp, 1); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + UpdateCompareFlag(pPed->bIsDucking); + return 0; + } + case COMMAND_OVERRIDE_CAR_REMOTE_CONTROL: + { + CollectParameters(&m_nIp, 2); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + pVehicle->SetStatus(STATUS_PLAYER_REMOTE); + CVehicle::bDisableRemoteDetonation = true; + CWorld::Players[CWorld::PlayerInFocus].m_pRemoteVehicle = pVehicle; + pVehicle->RegisterReference((CEntity**)&CWorld::Players[CWorld::PlayerInFocus].m_pRemoteVehicle); + if (pVehicle->GetVehicleAppearance() == VEHICLE_APPEARANCE_HELI || pVehicle->GetVehicleAppearance() == VEHICLE_APPEARANCE_PLANE) { + TheCamera.TakeControl(pVehicle, CCam::MODE_CAM_ON_A_STRING, GET_INTEGER_PARAM(1) ? INTERPOLATION : JUMP_CUT, CAMCONTROL_SCRIPT); + TheCamera.SetZoomValueCamStringScript(0); + } + else { + TheCamera.TakeControl(pVehicle, CCam::MODE_1STPERSON, GET_INTEGER_PARAM(1) ? INTERPOLATION : JUMP_CUT, CAMCONTROL_SCRIPT); + script_assert(pVehicle->IsCar()); + ((CAutomobile*)pVehicle)->Damage.m_bSmashedDoorDoesntClose = true; + } + if (m_bIsMissionScript) + CTheScripts::MissionCleanUp.RemoveEntityFromList(GET_INTEGER_PARAM(0), CLEANUP_CAR); + if (FindPlayerVehicle()) + FindPlayerVehicle()->bCanBeDamaged = false; + return 0; + } + case COMMAND_CANCEL_REMOTE_MODE: + { + if (FindPlayerVehicle()) + FindPlayerVehicle()->bCanBeDamaged = true; + CRemote::TakeRemoteControlledCarFromPlayer(false); + CWorld::Players[CWorld::PlayerInFocus].field_D6 = false; + CWorld::Players[CWorld::PlayerInFocus].m_pRemoteVehicle = nil; + TheCamera.Restore(); + return 0; + } + case COMMAND_SET_OBJECT_TURN_SPEED: + { + CollectParameters(&m_nIp, 4); + CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pObject); + CVector vSpeed = GET_VECTOR_PARAM(1) / GAME_SPEED_TO_METERS_PER_SECOND; + pObject->SetTurnSpeed(vSpeed.x, vSpeed.y, vSpeed.z); + return 0; + } + case COMMAND_SET_OBJECT_MASS: + { + CollectParameters(&m_nIp, 4); + CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pObject); + pObject->m_fMass = GET_FLOAT_PARAM(1); + pObject->m_fTurnMass = GET_FLOAT_PARAM(2); + pObject->m_fAirResistance = GET_FLOAT_PARAM(3); + if (pObject->m_fMass < 99998.0f) { + pObject->bInfiniteMass = false; + pObject->m_phy_flagA08 = false; + pObject->bAffectedByGravity = true; + } + else { + pObject->bInfiniteMass = true; + pObject->m_phy_flagA08 = true; + pObject->bAffectedByGravity = false; + } + return 0; + } + case COMMAND_HAS_CUTSCENE_LOADED: + UpdateCompareFlag(CCutsceneMgr::ms_cutsceneLoadStatus == CUTSCENE_LOADED); + return 0; + case COMMAND_SET_UNIQUE_JUMPS_FOUND: + CollectParameters(&m_nIp, 1); + CStats::NumberOfUniqueJumpsFound = GET_INTEGER_PARAM(0); + return 0; + case todo__comm_941: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_941"); + return 0; + } + case COMMAND_SET_CHAR_DIVE_FROM_CAR: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); + script_assert(pPed); + pPed->bRespondsToThreats = true; + pPed->SetEvasiveDive(pVehicle, 1); + return 0; + } + case COMMAND_WRECK_CAR: + { + CollectParameters(&m_nIp, 1); + CAutomobile* pVehicle = (CAutomobile*)CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + script_assert(pVehicle->IsCar()); + pVehicle->m_fHealth = 0.0f; + pVehicle->SetStatus(STATUS_WRECKED); + pVehicle->bRenderScorched = true; + pVehicle->Damage.FuckCarCompletely(); + if (pVehicle->GetModelIndex() != MI_RCBANDIT) { + pVehicle->SetBumperDamage(CAR_BUMP_FRONT, VEHBUMPER_FRONT); + pVehicle->SetBumperDamage(CAR_BUMP_REAR, VEHBUMPER_REAR); + pVehicle->SetDoorDamage(CAR_BONNET, DOOR_BONNET); + pVehicle->SetDoorDamage(CAR_BOOT, DOOR_BOOT); + pVehicle->SetDoorDamage(CAR_DOOR_LF, DOOR_FRONT_LEFT); + pVehicle->SetDoorDamage(CAR_DOOR_RF, DOOR_FRONT_RIGHT); + pVehicle->SetDoorDamage(CAR_DOOR_LR, DOOR_REAR_LEFT); + pVehicle->SetDoorDamage(CAR_DOOR_RR, DOOR_REAR_RIGHT); + } + pVehicle->m_bombType = CARBOMB_NONE; + pVehicle->bEngineOn = false; + pVehicle->bLightsOn = false; + pVehicle->m_fHealth = 0.0f; + pVehicle->m_nBombTimer = 0; + pVehicle->m_bSirenOrAlarm = false; + return 0; + } + case COMMAND_REGISTER_OUTFIT_CHANGE: + // CStats::NumberOutfitChanges++; + 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) { + printf("HAS_OBJECT_BEEN_DAMAGED_BY_WEAPON - Object doesn\'t exist\n"); + } + else { + if (GET_INTEGER_PARAM(1) == WEAPONTYPE_ANYMELEE || GET_INTEGER_PARAM(1) == WEAPONTYPE_ANYWEAPON) + result = CheckDamagedWeaponType(pObject->m_nLastWeaponToDamage, GET_INTEGER_PARAM(1)); + else + result = GET_INTEGER_PARAM(1) == pObject->m_nLastWeaponToDamage; + } + UpdateCompareFlag(result); + return 0; + } + case COMMAND_CLEAR_OBJECT_LAST_WEAPON_DAMAGE: + { + CollectParameters(&m_nIp, 1); + CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); + if (!pObject) + printf("CLEAR_OBJECT_LAST_WEAPON_DAMAGE - pObject doesn\'t exist"); + else + pObject->m_nLastWeaponToDamage = -1; + return 0; + } + case COMMAND_SET_CAR_TURN_SPEED: + { + CollectParameters(&m_nIp, 4); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + CVector vSpeed = GET_VECTOR_PARAM(1) / GAME_SPEED_TO_METERS_PER_SECOND; + pVehicle->SetTurnSpeed(vSpeed.x, vSpeed.y, vSpeed.z); + return 0; + } + case COMMAND_SET_CAR_MOVE_SPEED: + { + CollectParameters(&m_nIp, 4); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + CVector vSpeed = GET_VECTOR_PARAM(1) / GAME_SPEED_TO_METERS_PER_SECOND; + pVehicle->SetMoveSpeed(vSpeed); + return 0; + } + case COMMAND_SET_OBJECT_PROOFS: { CollectParameters(&m_nIp, 6); + CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pObject); + pObject->bBulletProof = (GET_INTEGER_PARAM(1) != 0); + pObject->bFireProof = (GET_INTEGER_PARAM(2) != 0); + pObject->bExplosionProof = (GET_INTEGER_PARAM(3) != 0); + pObject->bCollisionProof = (GET_INTEGER_PARAM(4) != 0); + pObject->bMeleeProof = (GET_INTEGER_PARAM(5) != 0); + return 0; + } + case COMMAND_GET_CAMERA_PED_ZOOM_INDICATOR: + if (TheCamera.Cams[TheCamera.ActiveCam].Mode == CCam::MODE_FOLLOWPED) + SET_INTEGER_PARAM(0, TheCamera.PedZoomIndicator); + else + SET_INTEGER_PARAM(0, -1); + StoreParameters(&m_nIp, 1); + return 0; + case COMMAND_SET_CAMERA_PED_ZOOM_INDICATOR: + CollectParameters(&m_nIp, 1); + if (TheCamera.Cams[TheCamera.ActiveCam].Mode == CCam::MODE_FOLLOWPED) + TheCamera.PedZoomIndicator = GET_INTEGER_PARAM(0); + return 0; + case COMMAND_GET_CAR_ORIENTATION: + { + CollectParameters(&m_nIp, 1); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + SET_FLOAT_PARAM(1, LimitAngleOnCircle(RADTODEG(Asin(pVehicle->GetForward().z)))); + SET_FLOAT_PARAM(2, LimitAngleOnCircle(RADTODEG(Atan2(-pVehicle->GetForward().x, pVehicle->GetForward().y)))); + SET_FLOAT_PARAM(0, LimitAngleOnCircle(RADTODEG(Atan2(-pVehicle->GetRight().z, pVehicle->GetUp().z)))); + StoreParameters(&m_nIp, 3); + return 0; + } + case COMMAND_SET_CAR_ORIENTATION: + { + CollectParameters(&m_nIp, 4); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + pVehicle->SetOrientation(DEGTORAD(GET_FLOAT_PARAM(2)), DEGTORAD(GET_FLOAT_PARAM(1)), DEGTORAD(GET_FLOAT_PARAM(3))); + return 0; + } + case COMMAND_IS_DEBUG_MENU_ON: + // on PS2 it's something actual - TODO + UpdateCompareFlag(false); + return 0; + case COMMAND_OPEN_VAN_BACK_DOORS: + { + CollectParameters(&m_nIp, 1); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + assert(pVehicle); + pVehicle->ProcessOpenDoor(CAR_DOOR_RR, ANIM_STD_VAN_OPEN_DOOR_REAR_RHS, 1.0f); + pVehicle->ProcessOpenDoor(CAR_DOOR_LR, ANIM_STD_VAN_OPEN_DOOR_REAR_LHS, 1.0f); + return 0; + } + case COMMAND_GET_CHAR_THREAT_CHAR: + { + CollectParameters(&m_nIp, 1); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + SET_INTEGER_PARAM(0, 0); + CEntity* pThreat = pPed->m_threatEntity; + if (pThreat && pThreat->IsPed()) + SET_INTEGER_PARAM(0, CPools::GetPedPool()->GetIndex((CPed*)pThreat)); + StoreParameters(&m_nIp, 1); + return 0; + } + case COMMAND_FREEZE_PED_ZOOM_SWITCH: + CollectParameters(&m_nIp, 1); + TheCamera.m_bFreezePedZoomSwitch = GET_INTEGER_PARAM(0); + return 0; + case COMMAND_SET_OBJECT_RENDERED_DAMAGED: + { + CollectParameters(&m_nIp, 1); + CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pObject); + pObject->bRenderDamaged = true; + return 0; + } + case COMMAND_GET_RANDOM_CAR_IN_AREA_NO_SAVE: + { + CollectParameters(&m_nIp, 5); + int handle = -1; + uint32 i = CPools::GetVehiclePool()->GetSize(); + float infX = GET_FLOAT_PARAM(0); + float infY = GET_FLOAT_PARAM(1); + float supX = GET_FLOAT_PARAM(2); + float supY = GET_FLOAT_PARAM(3); + while (i-- && handle == -1) { + CVehicle* pVehicle = CPools::GetVehiclePool()->GetSlot(i); + if (!pVehicle) + continue; + if (pVehicle->GetVehicleAppearance() != VEHICLE_APPEARANCE_CAR && pVehicle->GetVehicleAppearance() != VEHICLE_APPEARANCE_BIKE) + continue; +#ifdef FIX_BUGS + if (pVehicle->m_fHealth <= 0.0f) +#else + if (pVehicle->m_fHealth == 0.0f) +#endif + continue; + if (pVehicle->GetModelIndex() != GET_INTEGER_PARAM(4) && GET_INTEGER_PARAM(4) >= 0) + continue; + if (pVehicle->VehicleCreatedBy != RANDOM_VEHICLE) + continue; + if (!pVehicle->IsWithinArea(infX, infY, supX, supY)) + continue; + handle = CPools::GetVehiclePool()->GetIndex(pVehicle); + } + SET_INTEGER_PARAM(0, handle); + StoreParameters(&m_nIp, 1); + return 0; + } + case COMMAND_IS_PLAYER_MADE_SAFE: + { + UpdateCompareFlag(CPad::GetPad(0)->IsPlayerControlsDisabledBy(PLAYERCONTROL_PLAYERINFO)); + return 0; + } + case COMMAND_IS_E3_BUILD: + UpdateCompareFlag(false); + return 0; + case COMMAND_CLEAR_BIG_MESSAGES: + //CMessages::ClearBigMessagesOnly(); TODO + //CHud::ClearBigMessagesExcept(2, 2); TODO + CGarages::MessageEndTime = CGarages::MessageStartTime; + return 0; + case COMMAND_CLEAR_AREA_OF_OBJECTS: + { + CollectParameters(&m_nIp, 6); + uint32 i = CPools::GetObjectPool()->GetSize(); float infX = GET_FLOAT_PARAM(0); float infY = GET_FLOAT_PARAM(1); float infZ = GET_FLOAT_PARAM(2); float supX = GET_FLOAT_PARAM(3); float supY = GET_FLOAT_PARAM(4); float supZ = GET_FLOAT_PARAM(5); - if (infX > supX) { - infX = GET_FLOAT_PARAM(3); - supX = GET_FLOAT_PARAM(0); + while (i--) { + CObject* pObject = CPools::GetObjectPool()->GetSlot(i); + if (pObject && pObject->CanBeDeleted() && pObject->IsWithinArea(infX, infY, infZ, supX, supY, supZ)) { + pObject->DeleteRwObject(); + CWorld::Remove(pObject); + delete pObject; + } } - if (infY > supY) { - infY = GET_FLOAT_PARAM(4); - supY = GET_FLOAT_PARAM(1); + i = CPools::GetDummyPool()->GetSize(); + while (i--) { + CDummy* pDummy = CPools::GetDummyPool()->GetSlot(i); + if (pDummy && pDummy->IsObject() && pDummy->IsWithinArea(infX, infY, infZ, supX, supY, supZ)) { + pDummy->DeleteRwObject(); + CWorld::Remove(pDummy); + delete pDummy; + } } - if (infZ > supZ) { - infZ = GET_FLOAT_PARAM(5); - supZ = GET_FLOAT_PARAM(2); - } - CWorld::ClearCarsFromArea(infX, infY, infZ, supX, supY, supZ); return 0; } - case COMMAND_SET_ROTATING_GARAGE_DOOR: + case COMMAND_LOAD_NON_STANDARD_PED_ANIM: CollectParameters(&m_nIp, 1); - CGarages::SetGarageDoorToRotate(GET_INTEGER_PARAM(0)); + CPed::LoadNonStandardPedAnim((eWaitState)GET_INTEGER_PARAM(0)); return 0; - case COMMAND_ADD_SPHERE: - { - CollectParameters(&m_nIp, 4); - CVector pos = GET_VECTOR_PARAM(0); - if (pos.z <= MAP_Z_LOW_LIMIT) - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - float radius = GET_FLOAT_PARAM(3); - CTheScripts::GetActualScriptSphereIndex(CollectNextParameterWithoutIncreasingPC(m_nIp)); - SET_INTEGER_PARAM(0, CTheScripts::AddScriptSphere((uintptr)this + m_nIp, pos, radius)); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_REMOVE_SPHERE: + case COMMAND_UNLOAD_NON_STANDARD_PED_ANIM: CollectParameters(&m_nIp, 1); - CTheScripts::RemoveScriptSphere(GET_INTEGER_PARAM(0)); + CPed::UnloadNonStandardPedAnim((eWaitState)GET_INTEGER_PARAM(0)); return 0; - /* - case COMMAND_CATALINA_HELI_FLY_AWAY: - CHeli::MakeCatalinaHeliFlyAway(); - return 0; - */ - case COMMAND_SET_EVERYONE_IGNORE_PLAYER: - { - CollectParameters(&m_nIp, 2); - CPlayerPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(pPed); - if (GET_INTEGER_PARAM(1)) { - pPed->m_pWanted->m_bIgnoredByEveryone = true; - CWorld::StopAllLawEnforcersInTheirTracks(); + case COMMAND_BUILD_WORLD_GEOMETRY: + CollectParameters(&m_nIp, 1); + if (/*gBuildWorldGeom*/ false) { + //base::cWorldGeom::GetInstance()->Build(GET_INTEGER_PARAM(0)); + UpdateCompareFlag(true); } else { - pPed->m_pWanted->m_bIgnoredByEveryone = false; + UpdateCompareFlag(false); } return 0; - } - case COMMAND_STORE_CAR_CHAR_IS_IN_NO_SAVE: - { - CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - CVehicle* pVehicle = pPed->bInVehicle ? pPed->m_pMyVehicle : nil; - SET_INTEGER_PARAM(0, CPools::GetVehiclePool()->GetIndex(pVehicle)); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_STORE_CAR_PLAYER_IS_IN_NO_SAVE: - { - CollectParameters(&m_nIp, 1); - CPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(pPed); - CVehicle* pVehicle = pPed->bInVehicle ? pPed->m_pMyVehicle : nil; - SET_INTEGER_PARAM(0, CPools::GetVehiclePool()->GetIndex(pVehicle)); - StoreParameters(&m_nIp, 1); - return 0; - } - /* - case COMMAND_IS_PHONE_DISPLAYING_MESSAGE: - CollectParameters(&m_nIp, 1); - UpdateCompareFlag(gPhoneInfo.IsMessageBeingDisplayed(GET_INTEGER_PARAM(0))); - return 0; - */ - case COMMAND_DISPLAY_ONSCREEN_TIMER_WITH_STRING: - { - uint16 var = (uint8*)GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL) - CTheScripts::ScriptSpace; - CollectParameters(&m_nIp, 1); - wchar* text = TheText.Get((char*)&CTheScripts::ScriptSpace[m_nIp]); // ??? - strncpy(onscreen_str, (char*)&CTheScripts::ScriptSpace[m_nIp], KEY_LENGTH_IN_SCRIPT); - m_nIp += KEY_LENGTH_IN_SCRIPT; - CUserDisplay::OnscnTimer.AddClock(var, onscreen_str, GET_INTEGER_PARAM(0) != 0); - return 0; - } - case COMMAND_DISPLAY_ONSCREEN_COUNTER_WITH_STRING: - { - uint16 var = (uint8*)GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL) - CTheScripts::ScriptSpace; - CollectParameters(&m_nIp, 1); - wchar* text = TheText.Get((char*)&CTheScripts::ScriptSpace[m_nIp]); // ??? - strncpy(onscreen_str, (char*)&CTheScripts::ScriptSpace[m_nIp], KEY_LENGTH_IN_SCRIPT); - m_nIp += KEY_LENGTH_IN_SCRIPT; - CUserDisplay::OnscnTimer.AddCounter(var, GET_INTEGER_PARAM(0), onscreen_str, 0, -1, nil, 0); - return 0; - } - case COMMAND_CREATE_RANDOM_CAR_FOR_CAR_PARK: + case COMMAND_STORE_BUILDING_SWAP: { CollectParameters(&m_nIp, 4); - if (CCarCtrl::NumRandomCars >= 30) - return 0; - int attempts; - int model = -1; - int index = CGeneral::GetRandomNumberInRange(0, MAXVEHICLESLOADED); - for (attempts = 0; attempts < MAXVEHICLESLOADED; attempts++) { - if (model != -1) - break; - model = CStreaming::ms_vehiclesLoaded[index]; - if (model == -1) - continue; - if (CModelInfo::IsCarModel(model) || CModelInfo::IsBikeModel(model)) { - switch (model) { - case MI_LANDSTAL: - case MI_LINERUN: - case MI_RIO: - case MI_FIRETRUCK: - case MI_TRASH: - case MI_STRETCH: - case MI_VOODOO: - case MI_MULE: - case MI_AMBULAN: - case MI_FBICAR: - case MI_MRWHOOP: - case MI_BFINJECT: - case MI_HEARSE: - case MI_HUNTER: - case MI_POLICE: - case MI_ENFORCER: - case MI_SECURICA: - case MI_PREDATOR: - case MI_BUS: - case MI_RHINO: - case MI_BARRACKS: - case MI_CUBAN: - case MI_CHOPPER: - case MI_ANGEL: - case MI_COACH: - case MI_RCBANDIT: - case MI_PACKER: - case MI_SENTXS: - case MI_SQUALO: - case MI_SEASPAR: - case MI_PIZZABOY: - case MI_NOODLEBOY: - case MI_ANGEL2: - case MI_SANCHEZ2: - case MI_GANGBUR: - case MI_AIRTRAIN: - case MI_DEADDODO: - case MI_SPEEDER: - case MI_REEFER: - case MI_TROPIC: - case MI_FLATBED: - case MI_YANKEE: - case MI_CADDY: - case MI_BORGNINE: - case MI_TOPFUN: - case MI_CAMPVAN: - case MI_BALLOT: - case MI_SKIMMER: - case MI_RCBARON: - case MI_RCRAIDER: - case MI_SPARROW: - case MI_PATRIOT: - case MI_LOVEFIST: - case MI_COASTG: - case MI_DINGHY: - case MI_HERMES: - case MI_SABRETUR: - case MI_PHEONIX: - case MI_WALTON: - case MI_COMET: - case MI_DELUXO: - case MI_BURRITO: - case MI_SPAND: - case MI_MARQUIS: - case MI_BAGGAGE: - case MI_KAUFMAN: - case MI_MAVERICK: - case MI_VCNMAV: - case MI_RANCHER: - case MI_FBIRANCH: - case MI_JETMAX: - case MI_HOTRING: - case MI_SANDKING: - case MI_BLISTAC: - case MI_POLMAV: - case MI_BOXVILLE: - case MI_BENSON: - case MI_MESA: - case MI_RCGOBLIN: - case MI_HOTRINA: - case MI_HOTRINB: - case MI_BLOODRA: - case MI_BLOODRB: - case MI_VICECHEE: - case MI_CABBIE: - case MI_MAFIA: - model = -1; - break; - case MI_IDAHO: - case MI_STINGER: - case MI_PEREN: - case MI_SENTINEL: - case MI_MANANA: - case MI_INFERNUS: - case MI_PONY: - case MI_CHEETAH: - case MI_MOONBEAM: - case MI_ESPERANT: - case MI_TAXI: - case MI_WASHING: - case MI_BOBCAT: - case MI_BANSHEE: - case MI_STALLION: - case MI_RUMPO: - case MI_ADMIRAL: - case MI_PCJ600: - case MI_FAGGIO: - case MI_FREEWAY: - case MI_GLENDALE: - case MI_OCEANIC: - case MI_SANCHEZ: - case MI_SABRE: - case MI_REGINA: - case MI_VIRGO: - case MI_GREENWOO: - break; - default: - printf("CREATE_RANDOM_CAR_FOR_CAR_PARK - Unknown car model %d\n", CStreaming::ms_vehiclesLoaded[index]); - model = -1; - break; - } - } - else - model = -1; - if (++index >= 50) - index = 0; - } - if (model == -1) - return 0; - CVehicle* car; - if (CModelInfo::IsBikeModel(model)) { - car = new CBike(model, RANDOM_VEHICLE); - ((CBike*)(car))->bIsStanding = true; - } - else - car = new CAutomobile(model, RANDOM_VEHICLE); - CVector pos = GET_VECTOR_PARAM(0); - pos.z += car->GetDistanceFromCentreOfMassToBaseOfModel(); - car->SetPosition(pos); - car->SetHeading(DEGTORAD(GET_FLOAT_PARAM(3))); - CTheScripts::ClearSpaceForMissionEntity(pos, car); - car->SetStatus(STATUS_ABANDONED); - car->bIsLocked = false; - car->bIsCarParkVehicle = true; - CCarCtrl::JoinCarWithRoadSystem(car); - car->AutoPilot.m_nCarMission = MISSION_NONE; - car->AutoPilot.m_nTempAction = TEMPACT_NONE; - car->AutoPilot.m_nDrivingStyle = DRIVINGSTYLE_STOP_FOR_CARS; - car->AutoPilot.m_nCruiseSpeed = car->AutoPilot.m_fMaxTrafficSpeed = 9.0f; - car->AutoPilot.m_nCurrentLane = car->AutoPilot.m_nNextLane = 0; - car->bEngineOn = false; - car->m_nZoneLevel = CTheZones::GetLevelFromPosition(&pos); - CWorld::Add(car); + debug("mazahaka todo! COMMAND_STORE_BUILDING_SWAP\n"); + // base::cWorldGeom::GetInstance()->StoreBuildingSwap(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), GET_INTEGER_PARAM(3) != 0); return 0; } - case COMMAND_IS_COLLISION_IN_MEMORY: - CollectParameters(&m_nIp, 1); - UpdateCompareFlag(CGame::currLevel == GET_INTEGER_PARAM(0)); + case COMMAND_IS_MULTIPLAYER_ACTIVE: +#ifdef GTA_NETWORK + UpdateCompareFlag(gIsMultiplayerGame); +#else + UpdateCompareFlag(false); +#endif return 0; - case COMMAND_SET_WANTED_MULTIPLIER: - CollectParameters(&m_nIp, 1); - FindPlayerPed()->m_pWanted->m_fCrimeSensitivity = GET_FLOAT_PARAM(0); + case COMMAND_GET_MULTIPLAYER_MODE: + SET_INTEGER_PARAM(0, 0); // TODO + StoreParameters(&m_nIp, 1); return 0; - case COMMAND_SET_CAMERA_IN_FRONT_OF_PLAYER: - TheCamera.SetCameraDirectlyInFrontForFollowPed_CamOnAString(); + case COMMAND_MULTIPLAYER_SCRIPT_DONE: + printf("COMMAND_MULTIPLAYER_SCRIPT_DONE\n"); + //gbStartingScriptsFromLua = false; TODO? return 0; - case COMMAND_IS_CAR_VISIBLY_DAMAGED: + case COMMAND_IS_MULTIPLAYER_SERVER: + UpdateCompareFlag(false); // TODO? + return 0; + case COMMAND_IS_MULTIPLAYER_TEAM_GAME: + UpdateCompareFlag(false); // TODO? + return 0; + case COMMAND_GET_MULTIPLAYER_TEAM_ID: + SET_INTEGER_PARAM(0, 0); // TODO + StoreParameters(&m_nIp, 1); + return 0; + case COMMAND_DOES_SHORTCUT_TAXI_EXIST: + UpdateCompareFlag(CGameLogic::pShortCutTaxi != nil); + return 0; + case COMMAND_SET_ONSCREEN_TIMER_COLOUR: + CollectParameters(&m_nIp, 4); + gbColour = CRGBA(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), GET_INTEGER_PARAM(3)); + return 0; + case COMMAND_SET_ONSCREEN_TIMER_BACKGROUND_COLOUR: + CollectParameters(&m_nIp, 4); + gbColour2 = CRGBA(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), GET_INTEGER_PARAM(3)); + return 0; + case COMMAND_REMOVE_CAR_BOOT: { CollectParameters(&m_nIp, 1); CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); script_assert(pVehicle); - UpdateCompareFlag(pVehicle->bIsDamaged); + script_assert(pVehicle->IsCar()); + CAutomobile* pAutomobile = (CAutomobile*)pVehicle; + pAutomobile->Damage.SetDoorStatus(DOOR_BOOT, DOOR_STATUS_MISSING); + pAutomobile->SetDoorDamage(CAR_BOOT, DOOR_BOOT, true); return 0; } - case COMMAND_DOES_OBJECT_EXIST: - CollectParameters(&m_nIp, 1); - UpdateCompareFlag(CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0))); - return 0; - case COMMAND_LOAD_SCENE: + case COMMAND_ADD_POINT_3D_MARKER: { - CollectParameters(&m_nIp, 3); - CVector pos = GET_VECTOR_PARAM(0); -#ifdef FIX_BUGS - CTimer::Suspend(); -#else - CTimer::Stop(); -#endif - CStreaming::LoadSceneCollision(pos); -#ifdef FIX_BUGS - CTimer::Suspend(); -#else - CTimer::Update(); -#endif - return 0; - } - case COMMAND_ADD_STUCK_CAR_CHECK: - { - CollectParameters(&m_nIp, 3); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - CTheScripts::StuckCars.AddCarToCheck(GET_INTEGER_PARAM(0), GET_FLOAT_PARAM(1), GET_INTEGER_PARAM(2)); - return 0; - } - case COMMAND_REMOVE_STUCK_CAR_CHECK: - { - CollectParameters(&m_nIp, 1); - CTheScripts::StuckCars.RemoveCarFromCheck(GET_INTEGER_PARAM(0)); - return 0; - } - case COMMAND_IS_CAR_STUCK: - CollectParameters(&m_nIp, 1); - UpdateCompareFlag(CTheScripts::StuckCars.HasCarBeenStuckForAWhile(GET_INTEGER_PARAM(0))); - return 0; - case COMMAND_LOAD_MISSION_AUDIO: - { - CollectParameters(&m_nIp, 1); - strncpy(str, (char*)&CTheScripts::ScriptSpace[m_nIp], KEY_LENGTH_IN_SCRIPT); - for (int i = 0; i < KEY_LENGTH_IN_SCRIPT; i++) - str[i] = tolower(str[i]); - m_nIp += KEY_LENGTH_IN_SCRIPT; - DMAudio.PreloadMissionAudio(GET_INTEGER_PARAM(0) - 1, str); - return 0; - } - case COMMAND_HAS_MISSION_AUDIO_LOADED: - { - CollectParameters(&m_nIp, 1); - UpdateCompareFlag(DMAudio.GetMissionAudioLoadingStatus(GET_INTEGER_PARAM(0) - 1) == 1); - return 0; - } - case COMMAND_PLAY_MISSION_AUDIO: - CollectParameters(&m_nIp, 1); - DMAudio.PlayLoadedMissionAudio(GET_INTEGER_PARAM(0) - 1); - return 0; - case COMMAND_HAS_MISSION_AUDIO_FINISHED: - { - CollectParameters(&m_nIp, 1); - UpdateCompareFlag(DMAudio.IsMissionAudioSampleFinished(GET_INTEGER_PARAM(0) - 1)); - return 0; - } - case COMMAND_GET_CLOSEST_CAR_NODE_WITH_HEADING: - { - CollectParameters(&m_nIp, 3); + uint32 ip = m_nIp; + uint32 id = (uint32)(uintptr)GetPointerToScriptVariable(&ip); + static CVector vPreviousLocation; + CollectParameters(&m_nIp, 7); CVector pos = GET_VECTOR_PARAM(0); if (pos.z <= MAP_Z_LOW_LIMIT) pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - int node = ThePaths.FindNodeClosestToCoors(pos, 0, 999999.9f, true, true); - SET_VECTOR_PARAM(0, ThePaths.FindNodeCoorsForScript(node)); - SET_FLOAT_PARAM(3, ThePaths.FindNodeOrientationForCarPlacement(node)); - StoreParameters(&m_nIp, 4); + if (vPreviousLocation != pos) { + //C3dMarkers::CopyMarker(id, id - 1, 1, 1); + } + // TODO: 5 is not a valid type + //C3dMarkers::PlaceMarker(id, 5, pos, GET_FLOAT_PARAM(3) * 0.7f, GET_INTEGER_PARAM(4), GET_INTEGER_PARAM(5), GET_INTEGER_PARAM(6), 255, 128, 0.0f, 1); // TODO: 0, 100.0f, 1, 0 + vPreviousLocation = pos; return 0; } - case COMMAND_HAS_IMPORT_GARAGE_SLOT_BEEN_FILLED: + case COMMAND_PRINT_HELP_ALWAYS: + { + // CHud::mAlwaysAllowHelpText = true; // TODO + wchar* text = GetTextByKeyFromScript(&m_nIp); + CHud::SetHelpMessage(text, false); // + false, true + return 0; + } + case COMMAND_PRINT_HELP_FOREVER_ALWAYS: + { + // CHud::mAlwaysAllowHelpText = true; // TODO + wchar* text = GetTextByKeyFromScript(&m_nIp); + CHud::SetHelpMessage(text, false, true); // + true + return 0; + } + case COMMAND_SET_CHAR_MAX_HEALTH: { CollectParameters(&m_nIp, 2); - UpdateCompareFlag(CGarages::HasImportExportGarageCollectedThisCar(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1) - 1)); - return 0; - } - case COMMAND_CLEAR_THIS_PRINT: - { - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CMessages::ClearThisPrint(text); - return 0; - } - case COMMAND_CLEAR_THIS_BIG_PRINT: - { - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CMessages::ClearThisBigPrint(text); - return 0; - } - case COMMAND_SET_MISSION_AUDIO_POSITION: - { - CollectParameters(&m_nIp, 4); - CVector pos = GET_VECTOR_PARAM(1); - DMAudio.SetMissionAudioLocation(GET_INTEGER_PARAM(0) - 1, pos.x, pos.y, pos.z); - return 0; - } - case COMMAND_ACTIVATE_SAVE_MENU: - { - CStats::SafeHouseVisits++; - FrontEndMenuManager.m_bActivateSaveMenu = true; - FindPlayerPed()->SetMoveSpeed(0.0f, 0.0f, 0.0f); - FindPlayerPed()->SetTurnSpeed(0.0f, 0.0f, 0.0f); - return 0; - } - case COMMAND_HAS_SAVE_GAME_FINISHED: - UpdateCompareFlag(!FrontEndMenuManager.m_bMenuActive && !FrontEndMenuManager.m_bActivateSaveMenu); - return 0; - case COMMAND_NO_SPECIAL_CAMERA_FOR_THIS_GARAGE: - CollectParameters(&m_nIp, 1); - CGarages::SetLeaveCameraForThisGarage(GET_INTEGER_PARAM(0)); - return 0; - /* - case COMMAND_ADD_BLIP_FOR_PICKUP_OLD: - { - CollectParameters(&m_nIp, 3); - CObject* pObject = CPickups::aPickUps[CPickups::GetActualPickupIndex(GET_INTEGER_PARAM(0))].m_pObject; - CRadar::GetActualBlipArrayIndex(CollectNextParameterWithoutIncreasingPC(m_nIp)); - SET_INTEGER_PARAM(0, CRadar::SetEntityBlip(BLIP_OBJECT, CPools::GetObjectPool()->GetIndex(pObject), GET_INTEGER_PARAM(1), (eBlipDisplay)GET_INTEGER_PARAM(2))); - StoreParameters(&m_nIp, 1); - return 0; - } - */ - case COMMAND_ADD_BLIP_FOR_PICKUP: - { - CollectParameters(&m_nIp, 1); - CObject* pObject = CPickups::aPickUps[CPickups::GetActualPickupIndex(GET_INTEGER_PARAM(0))].m_pObject; - CRadar::GetActualBlipArrayIndex(CollectNextParameterWithoutIncreasingPC(m_nIp)); - int handle = CRadar::SetEntityBlip(BLIP_OBJECT, CPools::GetObjectPool()->GetIndex(pObject), 6, BLIP_DISPLAY_BOTH); - CRadar::ChangeBlipScale(handle, 3); - SET_INTEGER_PARAM(0, handle); - StoreParameters(&m_nIp, 1); - return 0; - } - /* - case COMMAND_ADD_SPRITE_BLIP_FOR_PICKUP: - { - CollectParameters(&m_nIp, 2); - CObject* pObject = CPickups::aPickUps[CPickups::GetActualPickupIndex(GET_INTEGER_PARAM(0))].m_pObject; - CRadar::GetActualBlipArrayIndex(CollectNextParameterWithoutIncreasingPC(m_nIp)); - int handle = CRadar::SetEntityBlip(BLIP_OBJECT, CPools::GetObjectPool()->GetIndex(pObject), 6, BLIP_DISPLAY_BOTH); - CRadar::SetBlipSprite(handle, GET_INTEGER_PARAM(1)); - SET_INTEGER_PARAM(0, handle); - StoreParameters(&m_nIp, 1); - return 0; - } - */ - case COMMAND_SET_PED_DENSITY_MULTIPLIER: - CollectParameters(&m_nIp, 1); - CPopulation::PedDensityMultiplier = GET_FLOAT_PARAM(0); - return 0; - case COMMAND_FORCE_RANDOM_PED_TYPE: - CollectParameters(&m_nIp, 1); - CPopulation::m_AllRandomPedsThisType = GET_INTEGER_PARAM(0); - return 0; - /* - case COMMAND_SET_TEXT_DRAW_BEFORE_FADE: - CollectParameters(&m_nIp, 1); - CTheScripts::IntroTextLines[CTheScripts::NumberOfIntroTextLinesThisFrame].m_bTextBeforeFade = GET_INTEGER_PARAM(0) != 0; - return 0; - */ - case COMMAND_GET_COLLECTABLE1S_COLLECTED: - SET_INTEGER_PARAM(0, CWorld::Players[CWorld::PlayerInFocus].m_nCollectedPackages); - StoreParameters(&m_nIp, 1); - return 0; - case COMMAND_SET_CHAR_OBJ_LEAVE_ANY_CAR: - { - CollectParameters(&m_nIp, 1); CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); script_assert(pPed); - pPed->bScriptObjectiveCompleted = false; - pPed->SetObjective(OBJECTIVE_LEAVE_CAR, pPed->m_pMyVehicle); + pPed->m_fHealth = GET_INTEGER_PARAM(1); + pPed->m_fMaxHealth = GET_INTEGER_PARAM(1); return 0; } - /* - case COMMAND_SET_SPRITES_DRAW_BEFORE_FADE: - CollectParameters(&m_nIp, 1); - CTheScripts::IntroRectangles[CTheScripts::NumberOfIntroRectanglesThisFrame].m_bBeforeFade = GET_INTEGER_PARAM(0) != 0; - return 0; - */ - case COMMAND_SET_TEXT_RIGHT_JUSTIFY: - CollectParameters(&m_nIp, 1); - CTheScripts::IntroTextLines[CTheScripts::NumberOfIntroTextLinesThisFrame].m_bRightJustify = GET_INTEGER_PARAM(0) != 0; - return 0; - case COMMAND_PRINT_HELP: + case COMMAND_SET_CHAR_SHOOT_TIMER: { - /* maybe will be useful? TODO - if (CCamera::m_bUseMouse3rdPerson && ( - strcmp((char*)&CTheScripts::ScriptSpace[m_nIp], "HELP15") == 0 || - strcmp((char*)&CTheScripts::ScriptSpace[m_nIp], "GUN_2A") == 0 || - strcmp((char*)&CTheScripts::ScriptSpace[m_nIp], "GUN_2C") == 0 || - strcmp((char*)&CTheScripts::ScriptSpace[m_nIp], "GUN_2D") == 0)) { - m_nIp += KEY_LENGTH_IN_SCRIPT; - return 0; - } - */ - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CHud::SetHelpMessage(text, false); + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + pPed->m_nScriptShootTimer = GET_INTEGER_PARAM(1); return 0; } - case COMMAND_CLEAR_HELP: - //CHud::gLastPrintForeverString = false; TODO - CHud::SetHelpMessage(nil, false); + case COMMAND_SET_CHAR_ATTACK_TIMER: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + pPed->m_nScriptAttackTimer = GET_INTEGER_PARAM(1); return 0; - case COMMAND_FLASH_HUD_OBJECT: + } + case COMMAND_SET_HELI_ROTOR_BLADES_FULLSPEED: + { CollectParameters(&m_nIp, 1); - CHud::m_ItemToFlash = GET_INTEGER_PARAM(0); + CAutomobile* pHeli = (CAutomobile*)CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pHeli); + if (pHeli->GetVehicleAppearance() == VEHICLE_APPEARANCE_HELI) + pHeli->m_aWheelSpeed[1] = 0.22f; return 0; + } + case COMMAND_SET_CRUSHER_REWARD_MULTIPLIER: + { + CollectParameters(&m_nIp, 1); + CGarages::CrusherRewardMultiplier = GET_INTEGER_PARAM(0); + return 0; + } + case COMMAND_SWAP_BUILDINGS: + { + CollectParameters(&m_nIp, 2); + // base::cWorldStream::Instance()->SwapBuilding(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); + return 0; + } + case COMMAND_STREAM_BUILDING_SWAPS: + { + // UpdateCompareFlag(base::cWorldStream::Instance()->StreamBuildingSwaps()); + UpdateCompareFlag(true); + return 0; + } + case COMMAND_IS_WORLD_STREAMING_COMPLETE: + { + // UpdateCompareFlag(base::cWorldStream::Instance()->IsStreamingComplet()); + UpdateCompareFlag(true); + return 0; + } + case COMMAND_SWAP_TO_STREAMED_SECTOR: + { + // base::cWorldStream::Instance()->SwapToStreamedSector(); + return 0; + } + case COMMAND_SET_CHAR_ATTACKS_PLAYER_WITH_COPS: + { + CollectParameters(&m_nIp, 2); + CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pPed); + pPed->bAttacksPlayerWithCops = (GET_INTEGER_PARAM(1) != 0); + return 0; + } + case COMMAND_REGISTER_FACE_PLANT_DISTANCE: + CollectParameters(&m_nIp, 1); + //CStats::LongestFacePlantDist = Max(CStats::LongestFacePlantDist, GET_FLOAT_PARAM(0)); + return 0; + case COMMAND_ADD_EXPORTED_CARS: + CollectParameters(&m_nIp, 1); + // CStats::NumberOfExportedCars += GET_INTEGER_PARAM(0); + return 0; + case COMMAND_SET_TOTAL_EXPORT_CARS: + CollectParameters(&m_nIp, 1); + // CStats::TotalNumberOfCarExport = GET_INTEGER_PARAM(0); + return 0; + case COMMAND_ADD_ARROW_3D_MARKER: + { + uint32 ip = m_nIp; + uint32 id = (uint32)(uintptr)GetPointerToScriptVariable(&ip); + CollectParameters(&m_nIp, 10); + CVector pos = GET_VECTOR_PARAM(0); + CVector dir = GET_VECTOR_PARAM(3); + pos.z += GET_FLOAT_PARAM(9) + 7.0f; + //C3dMarkers::PlaceMarker(id, MARKERTYPE_ARROW, pos, GET_INTEGER_PARAM(6), GET_INTEGER_PARAM(7), GET_INTEGER_PARAM(8), 200, 1, 3.2f, 1, dir, 1.0f, 0, 0); - TODO + return 0; + } + case todo__comm_995: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_995"); + return 0; + } + case todo__comm_996: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_996"); + return 0; + } + case COMMAND_IS_DEVELOPER: +#ifdef GTA_NETWORK + UpdateCompareFlag(gDeveloperFlag || gIsMultiplayerGame); +#else + UpdateCompareFlag(gDeveloperFlag); +#endif + return 0; + case COMMAND_SET_DEVELOPER_FLAG: + CollectParameters(&m_nIp, 1); + gDeveloperFlag = GET_INTEGER_PARAM(0); + return 0; + case COMMAND_ATTACH_OBJECT_TO_CAR: + { + CollectParameters(&m_nIp, 5); + CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pObject); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); + script_assert(pVehicle); + CVector offset = GET_VECTOR_PARAM(2); + // pObject->AttachObjectToEntity(pVehicle, offset); + return 0; + } + default: script_assert(0); } diff --git a/src/control/Script5.cpp b/src/control/Script5.cpp index 45952497..6ec4bac2 100644 --- a/src/control/Script5.cpp +++ b/src/control/Script5.cpp @@ -29,13 +29,13 @@ uint32 CRunningScript::CollectLocateParameters(uint32* pIp, bool b3D) uint8 type = CTheScripts::Read1ByteFromScript(&ip); if (type >= ARGUMENT_LOCAL) { ip--; - id = (uint32)(uintptr)GetPointerToScriptVariable(&ip, 0); + id = (uint32)(uintptr)GetPointerToScriptVariable(&ip); } CollectParameters(pIp, b3D ? 7 : 5, &(ScriptParams[1])); return id; } -void CRunningScript::LocatePlayerCommand(int32 command, uint32* pIp) +/*void CRunningScript::LocatePlayerCommand(int32 command, uint32* pIp) { bool b3D, result, debug, decided = false; float X, Y, Z, dX, dY, dZ; @@ -114,14 +114,14 @@ void CRunningScript::LocatePlayerCommand(int32 command, uint32* pIp) UpdateCompareFlag(result); if (debug && Abs(pos.x - X) < 80.0f && Abs(pos.y - Y) < 80.0f) CTheScripts::HighlightImportantArea(id, X - dX, Y - dY, X + dX, Y + dY, b3D ? Z : MAP_Z_LOW_LIMIT); - /* - if (CTheScripts::DbgFlag) { - if (b3D) - CTheScripts::DrawDebugCube(X - dX, Y - dY, Z - dZ, X + dX, Y + dY, Z + dZ); - else - CTheScripts::DrawDebugSquare(X - dX, Y - dY, X + dX, Y + dY); - } - */ + + //if (CTheScripts::DbgFlag) { + // if (b3D) + // CTheScripts::DrawDebugCube(X - dX, Y - dY, Z - dZ, X + dX, Y + dY, Z + dZ); + // else + // CTheScripts::DrawDebugSquare(X - dX, Y - dY, X + dX, Y + dY); + //} + } void CRunningScript::LocatePlayerCharCommand(int32 command, uint32* pIp) @@ -203,14 +203,14 @@ void CRunningScript::LocatePlayerCharCommand(int32 command, uint32* pIp) #else CTheScripts::HighlightImportantArea((uintptr)this + m_nIp, X - dX, Y - dY, X + dX, Y + dX, b3D ? Z : MAP_Z_LOW_LIMIT); #endif - /* - if (CTheScripts::DbgFlag) { - if (b3D) - CTheScripts::DrawDebugCube(X - dX, Y - dY, Z - dZ, X + dX, Y + dY, Z + dZ); - else - CTheScripts::DrawDebugSquare(X - dX, Y - dY, X + dX, Y + dY); - } - */ + + //if (CTheScripts::DbgFlag) { + // if (b3D) + // CTheScripts::DrawDebugCube(X - dX, Y - dY, Z - dZ, X + dX, Y + dY, Z + dZ); + // else + // CTheScripts::DrawDebugSquare(X - dX, Y - dY, X + dX, Y + dY); + //} + } void CRunningScript::LocatePlayerCarCommand(int32 command, uint32* pIp) @@ -282,15 +282,15 @@ void CRunningScript::LocatePlayerCarCommand(int32 command, uint32* pIp) UpdateCompareFlag(result); if (debug) CTheScripts::HighlightImportantArea((uintptr)this + m_nIp, X - dX, Y - dY, X + dX, Y + dY, b3D ? Z : MAP_Z_LOW_LIMIT); - /* - if (CTheScripts::DbgFlag) { - if (b3D) - CTheScripts::DrawDebugCube(X - dX, Y - dY, Z - dZ, X + dX, Y + dY, Z + dZ); - else - CTheScripts::DrawDebugSquare(X - dX, Y - dY, X + dX, Y + dY); - } - */ -} + + //if (CTheScripts::DbgFlag) { + // if (b3D) + // CTheScripts::DrawDebugCube(X - dX, Y - dY, Z - dZ, X + dX, Y + dY, Z + dZ); + // else + // CTheScripts::DrawDebugSquare(X - dX, Y - dY, X + dX, Y + dY); + //} + +}*/ void CRunningScript::LocateCharCommand(int32 command, uint32* pIp) { @@ -388,14 +388,14 @@ void CRunningScript::LocateCharCommand(int32 command, uint32* pIp) UpdateCompareFlag(result); if (debug) CTheScripts::HighlightImportantArea(id, X - dX, Y - dY, X + dX, Y + dY, b3D ? Z : MAP_Z_LOW_LIMIT); - /* - if (CTheScripts::DbgFlag) { - if (b3D) - CTheScripts::DrawDebugCube(X - dX, Y - dY, Z - dZ, X + dX, Y + dY, Z + dZ); - else - CTheScripts::DrawDebugSquare(X - dX, Y - dY, X + dX, Y + dY); - } - */ + + //if (CTheScripts::DbgFlag) { + // if (b3D) + // CTheScripts::DrawDebugCube(X - dX, Y - dY, Z - dZ, X + dX, Y + dY, Z + dZ); + // else + // CTheScripts::DrawDebugSquare(X - dX, Y - dY, X + dX, Y + dY); + //} + } void CRunningScript::LocateCharCharCommand(int32 command, uint32* pIp) @@ -479,14 +479,14 @@ void CRunningScript::LocateCharCharCommand(int32 command, uint32* pIp) #else CTheScripts::HighlightImportantArea((uintptr)this + m_nIp, X - dX, Y - dY, X + dX, Y + dX, b3D ? Z : MAP_Z_LOW_LIMIT); #endif - /* - if (CTheScripts::DbgFlag) { - if (b3D) - CTheScripts::DrawDebugCube(X - dX, Y - dY, Z - dZ, X + dX, Y + dY, Z + dZ); - else - CTheScripts::DrawDebugSquare(X - dX, Y - dY, X + dX, Y + dY); - } - */ + + //if (CTheScripts::DbgFlag) { + // if (b3D) + // CTheScripts::DrawDebugCube(X - dX, Y - dY, Z - dZ, X + dX, Y + dY, Z + dZ); + // else + // CTheScripts::DrawDebugSquare(X - dX, Y - dY, X + dX, Y + dY); + //} + } void CRunningScript::LocateCharCarCommand(int32 command, uint32* pIp) @@ -559,14 +559,14 @@ void CRunningScript::LocateCharCarCommand(int32 command, uint32* pIp) UpdateCompareFlag(result); if (debug) CTheScripts::HighlightImportantArea((uintptr)this + m_nIp, X - dX, Y - dY, X + dX, Y + dY, b3D ? Z : MAP_Z_LOW_LIMIT); - /* - if (CTheScripts::DbgFlag) { - if (b3D) - CTheScripts::DrawDebugCube(X - dX, Y - dY, Z - dZ, X + dX, Y + dY, Z + dZ); - else - CTheScripts::DrawDebugSquare(X - dX, Y - dY, X + dX, Y + dY); - } - */ + + //if (CTheScripts::DbgFlag) { + // if (b3D) + // CTheScripts::DrawDebugCube(X - dX, Y - dY, Z - dZ, X + dX, Y + dY, Z + dZ); + // else + // CTheScripts::DrawDebugSquare(X - dX, Y - dY, X + dX, Y + dY); + //} + } void CRunningScript::LocateCharObjectCommand(int32 command, uint32* pIp) @@ -639,14 +639,14 @@ void CRunningScript::LocateCharObjectCommand(int32 command, uint32* pIp) UpdateCompareFlag(result); if (debug) CTheScripts::HighlightImportantArea((uintptr)this + m_nIp, X - dX, Y - dY, X + dX, Y + dY, b3D ? Z : MAP_Z_LOW_LIMIT); - /* - if (CTheScripts::DbgFlag) { - if (b3D) - CTheScripts::DrawDebugCube(X - dX, Y - dY, Z - dZ, X + dX, Y + dY, Z + dZ); - else - CTheScripts::DrawDebugSquare(X - dX, Y - dY, X + dX, Y + dY); - } - */ + + //if (CTheScripts::DbgFlag) { + // if (b3D) + // CTheScripts::DrawDebugCube(X - dX, Y - dY, Z - dZ, X + dX, Y + dY, Z + dZ); + // else + // CTheScripts::DrawDebugSquare(X - dX, Y - dY, X + dX, Y + dY); + //} + } void CRunningScript::LocateCarCommand(int32 command, uint32* pIp) @@ -713,14 +713,14 @@ void CRunningScript::LocateCarCommand(int32 command, uint32* pIp) UpdateCompareFlag(result); if (debug) CTheScripts::HighlightImportantArea(id, X - dX, Y - dY, X + dX, Y + dY, b3D ? Z : MAP_Z_LOW_LIMIT); - /* - if (CTheScripts::DbgFlag) { - if (b3D) - CTheScripts::DrawDebugCube(X - dX, Y - dY, Z - dZ, X + dX, Y + dY, Z + dZ); - else - CTheScripts::DrawDebugSquare(X - dX, Y - dY, X + dX, Y + dY); - } - */ + + //if (CTheScripts::DbgFlag) { + // if (b3D) + // CTheScripts::DrawDebugCube(X - dX, Y - dY, Z - dZ, X + dX, Y + dY, Z + dZ); + // else + // CTheScripts::DrawDebugSquare(X - dX, Y - dY, X + dX, Y + dY); + //} + } void CRunningScript::LocateObjectCommand(int32 command, uint32* pIp) @@ -773,28 +773,28 @@ void CRunningScript::LocateObjectCommand(int32 command, uint32* pIp) UpdateCompareFlag(result); if (debug) CTheScripts::HighlightImportantArea(id, X - dX, Y - dY, X + dX, Y + dY, b3D ? Z : MAP_Z_LOW_LIMIT); - /* - if (CTheScripts::DbgFlag) { - if (b3D) - CTheScripts::DrawDebugCube(X - dX, Y - dY, Z - dZ, X + dX, Y + dY, Z + dZ); - else - CTheScripts::DrawDebugSquare(X - dX, Y - dY, X + dX, Y + dY); - } - */ + + //if (CTheScripts::DbgFlag) { + // if (b3D) + // CTheScripts::DrawDebugCube(X - dX, Y - dY, Z - dZ, X + dX, Y + dY, Z + dZ); + // else + // CTheScripts::DrawDebugSquare(X - dX, Y - dY, X + dX, Y + dY); + //} + } void CRunningScript::LocateSniperBulletCommand(int32 command, uint32* pIp) { bool b3D, result, debug; float X, Y, Z, dX, dY, dZ; - switch (command) { + /*switch (command) { // vcs tmp TODO:---------------------------------------------- case COMMAND_LOCATE_SNIPER_BULLET_3D: b3D = true; break; default: b3D = false; break; - } + }*/ CollectParameters(pIp, b3D ? 7 : 5); X = GET_FLOAT_PARAM(0); Y = GET_FLOAT_PARAM(1); @@ -814,17 +814,17 @@ void CRunningScript::LocateSniperBulletCommand(int32 command, uint32* pIp) UpdateCompareFlag(result); if (debug) CTheScripts::HighlightImportantArea((uintptr)this + m_nIp, X - dX, Y - dY, X + dX, Y + dY, b3D ? Z : MAP_Z_LOW_LIMIT); - /* - if (CTheScripts::DbgFlag) { - if (b3D) - CTheScripts::DrawDebugCube(X - dX, Y - dY, Z - dZ, X + dX, Y + dY, Z + dZ); - else - CTheScripts::DrawDebugSquare(X - dX, Y - dY, X + dX, Y + dY); - } - */ + + //if (CTheScripts::DbgFlag) { + // if (b3D) + // CTheScripts::DrawDebugCube(X - dX, Y - dY, Z - dZ, X + dX, Y + dY, Z + dZ); + // else + // CTheScripts::DrawDebugSquare(X - dX, Y - dY, X + dX, Y + dY); + //} + } -void CRunningScript::PlayerInAreaCheckCommand(int32 command, uint32* pIp) +/*void CRunningScript::PlayerInAreaCheckCommand(int32 command, uint32* pIp) { bool b3D, result, debug, decided = false; float infX, infY, infZ, supX, supY, supZ; @@ -933,14 +933,14 @@ void CRunningScript::PlayerInAreaCheckCommand(int32 command, uint32* pIp) UpdateCompareFlag(result); if (debug) CTheScripts::HighlightImportantArea((uintptr)this + m_nIp, infX, infY, supX, supY, b3D ? (infZ + supZ) / 2 : MAP_Z_LOW_LIMIT); - /* - if (CTheScripts::DbgFlag) { - if (b3D) - CTheScripts::DrawDebugCube(infX, infY, infZ, supX, supY, supZ); - else - CTheScripts::DrawDebugSquare(infX, infY, supX, supY); - } - */ + + //if (CTheScripts::DbgFlag) { + // if (b3D) + // CTheScripts::DrawDebugCube(infX, infY, infZ, supX, supY, supZ); + // else + // CTheScripts::DrawDebugSquare(infX, infY, supX, supY); + //} + } void CRunningScript::PlayerInAngledAreaCheckCommand(int32 command, uint32* pIp) @@ -1058,17 +1058,17 @@ void CRunningScript::PlayerInAngledAreaCheckCommand(int32 command, uint32* pIp) if (debug) CTheScripts::HighlightImportantAngledArea((uintptr)this + m_nIp, infX, infY, supX, supY, rotatedSupX, rotatedSupY, rotatedInfX, rotatedInfY, b3D ? (infZ + supZ) / 2 : MAP_Z_LOW_LIMIT); - /* - if (CTheScripts::DbgFlag) { - if (b3D) - CTheScripts::DrawDebugAngledCube(infX, infY, infZ, supX, supY, supZ, - rotatedSupX, rotatedSupY, rotatedInfX, rotatedInfY); - else - CTheScripts::DrawDebugAngledSquare(infX, infY, supX, supY, - rotatedSupX, rotatedSupY, rotatedInfX, rotatedInfY); - } - */ -} + + //if (CTheScripts::DbgFlag) { + // if (b3D) + // CTheScripts::DrawDebugAngledCube(infX, infY, infZ, supX, supY, supZ, + // rotatedSupX, rotatedSupY, rotatedInfX, rotatedInfY); + // else + // CTheScripts::DrawDebugAngledSquare(infX, infY, supX, supY, + // rotatedSupX, rotatedSupY, rotatedInfX, rotatedInfY); + //} + +}*/ void CRunningScript::CharInAreaCheckCommand(int32 command, uint32* pIp) { @@ -1528,14 +1528,14 @@ void CRunningScript::LocateCollectiveCommand(int32 command, uint32* pIp) UpdateCompareFlag(result); if (debug) CTheScripts::HighlightImportantArea(id, X - dX, Y - dY, X + dX, Y + dY, b3D ? Z : MAP_Z_LOW_LIMIT); - /* - if (CTheScripts::DbgFlag) { - if (b3D) - CTheScripts::DrawDebugCube(X - dX, Y - dY, Z - dZ, X + dX, Y + dY, Z + dZ); - else - CTheScripts::DrawDebugSquare(X - dX, Y - dY, X + dX, Y + dY); - } - */ + + //if (CTheScripts::DbgFlag) { + // if (b3D) + // CTheScripts::DrawDebugCube(X - dX, Y - dY, Z - dZ, X + dX, Y + dY, Z + dZ); + // else + // CTheScripts::DrawDebugSquare(X - dX, Y - dY, X + dX, Y + dY); + //} + } void CRunningScript::LocateCollectiveCharCommand(int32 command, uint32* pIp) @@ -1621,14 +1621,14 @@ void CRunningScript::LocateCollectiveCharCommand(int32 command, uint32* pIp) UpdateCompareFlag(result); if (debug) CTheScripts::HighlightImportantArea((uintptr)this + m_nIp, X - dX, Y - dY, X + dX, Y + dY, b3D ? Z : MAP_Z_LOW_LIMIT); - /* - if (CTheScripts::DbgFlag) { - if (b3D) - CTheScripts::DrawDebugCube(X - dX, Y - dY, Z - dZ, X + dX, Y + dY, Z + dZ); - else - CTheScripts::DrawDebugSquare(X - dX, Y - dY, X + dX, Y + dY); - } - */ + + //if (CTheScripts::DbgFlag) { + // if (b3D) + // CTheScripts::DrawDebugCube(X - dX, Y - dY, Z - dZ, X + dX, Y + dY, Z + dZ); + // else + // CTheScripts::DrawDebugSquare(X - dX, Y - dY, X + dX, Y + dY); + //} + } void CRunningScript::LocateCollectiveCarCommand(int32 command, uint32* pIp) @@ -1707,14 +1707,14 @@ void CRunningScript::LocateCollectiveCarCommand(int32 command, uint32* pIp) UpdateCompareFlag(result); if (debug) CTheScripts::HighlightImportantArea((uintptr)this + m_nIp, X - dX, Y - dY, X + dX, Y + dY, b3D ? Z : MAP_Z_LOW_LIMIT); - /* - if (CTheScripts::DbgFlag) { - if (b3D) - CTheScripts::DrawDebugCube(X - dX, Y - dY, Z - dZ, X + dX, Y + dY, Z + dZ); - else - CTheScripts::DrawDebugSquare(X - dX, Y - dY, X + dX, Y + dY); - } - */ + + //if (CTheScripts::DbgFlag) { + // if (b3D) + // CTheScripts::DrawDebugCube(X - dX, Y - dY, Z - dZ, X + dX, Y + dY, Z + dZ); + // else + // CTheScripts::DrawDebugSquare(X - dX, Y - dY, X + dX, Y + dY); + //} + } void CRunningScript::LocateCollectivePlayerCommand(int32 command, uint32* pIp) @@ -1792,14 +1792,14 @@ void CRunningScript::LocateCollectivePlayerCommand(int32 command, uint32* pIp) UpdateCompareFlag(result); if (debug) CTheScripts::HighlightImportantArea((uintptr)this + m_nIp, X - dX, Y - dY, X + dX, Y + dY, b3D ? Z : MAP_Z_LOW_LIMIT); - /* - if (CTheScripts::DbgFlag) { - if (b3D) - CTheScripts::DrawDebugCube(X - dX, Y - dY, Z - dZ, X + dX, Y + dY, Z + dZ); - else - CTheScripts::DrawDebugSquare(X - dX, Y - dY, X + dX, Y + dY); - } - */ + + //if (CTheScripts::DbgFlag) { + // if (b3D) + // CTheScripts::DrawDebugCube(X - dX, Y - dY, Z - dZ, X + dX, Y + dY, Z + dZ); + // else + // CTheScripts::DrawDebugSquare(X - dX, Y - dY, X + dX, Y + dY); + //} + } void CRunningScript::CollectiveInAreaCheckCommand(int32 command, uint32* pIp) @@ -1912,14 +1912,14 @@ void CRunningScript::CollectiveInAreaCheckCommand(int32 command, uint32* pIp) UpdateCompareFlag(result); if (debug) CTheScripts::HighlightImportantArea((uintptr)this + m_nIp, infX, infY, supX, supY, b3D ? (infZ + supZ) / 2 : MAP_Z_LOW_LIMIT); - /* - if (CTheScripts::DbgFlag) { - if (b3D) - CTheScripts::DrawDebugCube(infX, infY, infZ, supX, supY, supZ); - else - CTheScripts::DrawDebugSquare(infX, infY, supX, supY); - } - */ + + //if (CTheScripts::DbgFlag) { + // if (b3D) + // CTheScripts::DrawDebugCube(infX, infY, infZ, supX, supY, supZ); + // else + // CTheScripts::DrawDebugSquare(infX, infY, supX, supY); + //} + } #endif diff --git a/src/control/Script6.cpp b/src/control/Script6.cpp index 2dca5be9..128fc1fe 100644 --- a/src/control/Script6.cpp +++ b/src/control/Script6.cpp @@ -39,6 +39,8 @@ #include "Pickups.h" #include "Fluff.h" #include "CustomSoundTrack.h" +//new +#include "User.h" // LCS: file done except TODOs @@ -86,783 +88,599 @@ bool CRunningScript::ThisIsAValidRandomPed(uint32 pedtype, int civ, int gang, in int8 CRunningScript::ProcessCommands1000To1099(int32 command) { switch (command) { - //case COMMAND_FLASH_RADAR_BLIP: - case COMMAND_IS_CHAR_IN_CONTROL: + case COMMAND_DETACH_OBJECT_FROM_CAR: + { + CollectParameters(&m_nIp, 1); + CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pObject); + // if (pObject && pObject->m_pAttachedTo) + // pObject->DettachObjectFromEntity(); + return 0; + } + case COMMAND_SET_PAD_STICKS_MULTIPLIER: + { + CollectParameters(&m_nIp, 2); + CPad::GetPad(0)->unk_B4 = GET_FLOAT_PARAM(0); + CPad::GetPad(0)->unk_B8 = GET_FLOAT_PARAM(1); + return 0; + } + case COMMAND_PRINT_SUBTITLE_NOW: + { + wchar* key = GetTextByKeyFromScript(&m_nIp); + CollectParameters(&m_nIp, 2); + if (FrontEndMenuManager.m_PrefsShowSubtitles) + CMessages::AddMessageJumpQ(key, GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); // false, true + else + CMessages::AddToPreviousBriefArray(key, -1, -1, -1, -1, -1, -1, nil); + return 0; + } + case COMMAND_PRINT_SUBTITLE_NOW_OVERRIDE_FADE: + { + wchar* key = GetTextByKeyFromScript(&m_nIp); + CollectParameters(&m_nIp, 2); + if (FrontEndMenuManager.m_PrefsShowSubtitles) + CMessages::AddMessageJumpQ(key, GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); // true, true + else + CMessages::AddToPreviousBriefArray(key, -1, -1, -1, -1, -1, -1, nil); + return 0; + } + case COMMAND_PRINT_SUBTITLE_NOW_NO_BRIEF: + { + wchar* key = GetTextByKeyFromScript(&m_nIp); + CollectParameters(&m_nIp, 2); + if (FrontEndMenuManager.m_PrefsShowSubtitles) + CMessages::AddMessageJumpQ(key, GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); // false, false + else + CMessages::AddToPreviousBriefArray(key, -1, -1, -1, -1, -1, -1, nil); + return 0; + } + case COMMAND_PRINT_WITH_NUMBER_NOW_NO_BRIEF: + { + wchar* key = GetTextByKeyFromScript(&m_nIp); + CollectParameters(&m_nIp, 3); + CMessages::AddMessageJumpQWithNumber(key, GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), GET_INTEGER_PARAM(0), -1, -1, -1, -1, -1); // 0 + return 0; + } + case COMMAND_GET_ANGLE_BETWEEN_POINTS: + { + CollectParameters(&m_nIp, 4); + SET_FLOAT_PARAM(0, CGeneral::GetAngleBetweenPoints(GET_FLOAT_PARAM(0), GET_FLOAT_PARAM(1), GET_FLOAT_PARAM(2), GET_FLOAT_PARAM(3))); + StoreParameters(&m_nIp, 1); + return 0; + } + case COMMAND_OVERRIDE_CHAR_MOVE_ANIM: { CollectParameters(&m_nIp, 1); CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - UpdateCompareFlag(pPed->IsPedInControl()); + script_assert(pPed); + pPed->bOverrideMoveAnim = true; return 0; } - case COMMAND_SET_GENERATE_CARS_AROUND_CAMERA: - CollectParameters(&m_nIp, 1); - CCarCtrl::bCarsGeneratedAroundCamera = (GET_INTEGER_PARAM(0) != 0); - return 0; - case COMMAND_CLEAR_SMALL_PRINTS: - CMessages::ClearSmallMessagesOnly(); - //CHud::ClearSmallMessages(); // TODO - return 0; - case COMMAND_HAS_MILITARY_CRANE_COLLECTED_ALL_CARS: - UpdateCompareFlag(CCranes::HaveAllCarsBeenCollectedByMilitaryCrane()); - return 0; - case COMMAND_SET_UPSIDEDOWN_CAR_NOT_DAMAGED: + case LCSWRONG_COMMAND_1627: { + CollectParameters(&m_nIp, 1); + // something related to debug menu, not implemented + return 0; + } + case COMMAND_ENABLE_EMERGENCY_VEHICLES: + { + CollectParameters(&m_nIp, 1); + gbEmergencyVehiclesEnabled = GET_INTEGER_PARAM(0) != 0; + return 0; + } + case COMMAND_ADD_UNLOCKED_COSTUME: + CollectParameters(&m_nIp, 1); + // CStats::AddUnlockedCostume(GET_INTEGER_PARAM(0)); + return 0; + case COMMAND_CLEAR_MULTIPLAYER_SPLASH_SCREEN: + // ClearMultiplayerSplashScreen(); + return 0; + case COMMAND_PRINT_WITH_2_NUMBERS_NOW_NO_BRIEF: + { + wchar* key = GetTextByKeyFromScript(&m_nIp); + 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; + } + case COMMAND_GET_OBJECT_ORIENTATION: + { + CollectParameters(&m_nIp, 1); + CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pObject); + SET_FLOAT_PARAM(1, LimitAngleOnCircle(RADTODEG(Asin(pObject->GetForward().z)))); + SET_FLOAT_PARAM(2, LimitAngleOnCircle(RADTODEG(Atan2(-pObject->GetForward().x, pObject->GetForward().y)))); + SET_FLOAT_PARAM(0, LimitAngleOnCircle(RADTODEG(Atan2(-pObject->GetRight().z, pObject->GetUp().z)))); + StoreParameters(&m_nIp, 3); + return 0; + } + case COMMAND_SET_OBJECT_ORIENTATION: + { + CollectParameters(&m_nIp, 4); + CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pObject); + pObject->SetOrientation(DEGTORAD(GET_FLOAT_PARAM(2)), DEGTORAD(GET_FLOAT_PARAM(1)), DEGTORAD(GET_FLOAT_PARAM(3))); + return 0; + } + case COMMAND_CHANGE_ONSCREEN_COUNTER_PREFIX: + { + uint16 offset = (uint8*)GetPointerToScriptVariable(&m_nIp) - CTheScripts::ScriptSpace; + CollectParameters(&m_nIp, 1); + CUserDisplay::OnscnTimer.ChangeCounterPrefix(offset, GET_INTEGER_PARAM(0) != 0); + return 0; + } + case COMMAND_STORE_PLAYER_OUTFIT: // vcs done + { + //char tmp[12]; // TODO + //CTheScripts::ReadTextLabelFromScript(&m_nIp, tmp); + //int32 *ptr = GetPointerToScriptVariable(&m_nIp); + //debug("%p\n", ptr); + const char *key = GetKeyFromScript(&m_nIp); + script_assert(key); + for (int i = 0; i < KEY_LENGTH_IN_SCRIPT; i++) + CGameLogic::mStoredPlayerOutfit[i] = key[i]; + printf("STORED PLAYOUR OUTFIT : %s\n", CGameLogic::mStoredPlayerOutfit); + //m_nIp += KEY_LENGTH_IN_SCRIPT; + return 0; + } + case COMMAND_DISPLAY_ONSCREEN_TIMER_WITH_NUMBER_AND_STRING: + { + char onscreen_str1[12]; + uint16 var = (uint8*)GetPointerToScriptVariable(&m_nIp) - CTheScripts::ScriptSpace; CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - //assert(pVehicle->m_vehType == VEHICLE_TYPE_CAR); - // they call this for bikes again, we don't really want to destroy the structure... -#ifdef FIX_BUGS - if (pVehicle->m_vehType == VEHICLE_TYPE_CAR) -#endif - ((CAutomobile*)pVehicle)->bNotDamagedUpsideDown = (GET_INTEGER_PARAM(1) != 0); + wchar* text = TheText.Get((char*)&CTheScripts::ScriptSpace[m_nIp]); + strncpy(onscreen_str1, (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, GET_INTEGER_PARAM(0), nil, 0); return 0; } - case COMMAND_CAN_PLAYER_START_MISSION: + case COMMAND_SET_PLAYER_CURRENT_WEAPON_AMMO_IN_CLIP: { CollectParameters(&m_nIp, 1); - CPlayerPed* pPlayerPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(pPlayerPed); - UpdateCompareFlag(pPlayerPed->CanStartMission() || pPlayerPed->m_nPedState == PED_DRIVING); + CWeapon* pWeapon = FindPlayerPed()->GetWeapon(); + if (pWeapon && GET_INTEGER_PARAM(0)) + pWeapon->m_nAmmoInClip = GET_INTEGER_PARAM(0); return 0; } - case COMMAND_MAKE_PLAYER_SAFE_FOR_CUTSCENE: - { - CollectParameters(&m_nIp, 1); - CPlayerInfo* pPlayerInfo = &CWorld::Players[GET_INTEGER_PARAM(0)]; - CPad::GetPad(GET_INTEGER_PARAM(0))->SetDisablePlayerControls(PLAYERCONTROL_CUTSCENE); - pPlayerInfo->MakePlayerSafe(true); - CCutsceneMgr::StartCutsceneProcessing(); - return 0; - } - case COMMAND_USE_TEXT_COMMANDS: - CollectParameters(&m_nIp, 1); - CTheScripts::UseTextCommands = (GET_INTEGER_PARAM(0) != 0) ? 2 : 1; - return 0; - case COMMAND_SET_THREAT_FOR_PED_TYPE: - CollectParameters(&m_nIp, 2); - CPedType::AddThreat(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); - return 0; - case COMMAND_CLEAR_THREAT_FOR_PED_TYPE: - CollectParameters(&m_nIp, 2); - CPedType::RemoveThreat(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); - return 0; - case COMMAND_GET_CAR_COLOURS: - { - CollectParameters(&m_nIp, 1); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - SET_INTEGER_PARAM(0, pVehicle->m_currentColour1); - SET_INTEGER_PARAM(1, pVehicle->m_currentColour2); - StoreParameters(&m_nIp, 2); - return 0; - } - case COMMAND_SET_ALL_CARS_CAN_BE_DAMAGED: - CollectParameters(&m_nIp, 1); - CWorld::SetAllCarsCanBeDamaged(GET_INTEGER_PARAM(0) != 0); - if (!GET_INTEGER_PARAM(0)) - CWorld::ExtinguishAllCarFiresInArea(FindPlayerCoors(), 4000.0f); - return 0; - case COMMAND_SET_CAR_CAN_BE_DAMAGED: - { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - pVehicle->bCanBeDamaged = GET_INTEGER_PARAM(1) != 0; - if (!GET_INTEGER_PARAM(1)) - pVehicle->ExtinguishCarFire(); - return 0; - } - //case COMMAND_MAKE_PLAYER_UNSAFE: - /* - case COMMAND_LOAD_COLLISION: - { - CollectParameters(&m_nIp, 1); - CTimer::Stop(); - CGame::currLevel = (eLevelName)GET_INTEGER_PARAM(0); - ISLAND_LOADING_IS(LOW) - { - CStreaming::RemoveUnusedBigBuildings(CGame::currLevel); - CStreaming::RemoveUnusedBuildings(CGame::currLevel); - } - CCollision::SortOutCollisionAfterLoad(); - ISLAND_LOADING_ISNT(HIGH) - { - CStreaming::RequestIslands(CGame::currLevel); - CStreaming::LoadAllRequestedModels(true); - } - CTimer::Update(); - return 0; - } - case COMMAND_GET_BODY_CAST_HEALTH: - // SET_INTEGER_PARAM(0, CObject::nBodyCastHealth); - // StoreParameters(&m_nIp, 1); - return 0; - */ - case COMMAND_SET_CHARS_CHATTING: + case COMMAND_SET_CHAR_WAIT_STATE_REPEAT: { CollectParameters(&m_nIp, 3); - CPed* pPed1 = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - CPed* pPed2 = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(1)); - script_assert(pPed1 && pPed2); - pPed1->SetChat(pPed2, GET_INTEGER_PARAM(2)); - pPed2->SetChat(pPed1, GET_INTEGER_PARAM(2)); - return 0; - } - //case COMMAND_MAKE_PLAYER_SAFE: - /* - case COMMAND_SET_CAR_STAYS_IN_CURRENT_LEVEL: - { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - if (GET_INTEGER_PARAM(1)) - pVehicle->m_nZoneLevel = CTheZones::GetLevelFromPosition(&pVehicle->GetPosition()); - else - pVehicle->m_nZoneLevel = LEVEL_GENERIC; - return 0; - } - case COMMAND_SET_CHAR_STAYS_IN_CURRENT_LEVEL: - { - CollectParameters(&m_nIp, 2); CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - if (GET_INTEGER_PARAM(1)) - pPed->m_nZoneLevel = CTheZones::GetLevelFromPosition(&pPed->GetPosition()); - else - pPed->m_nZoneLevel = LEVEL_GENERIC; + if (pPed) + pPed->SetWaitState((eWaitState)GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2) >= 0 ? &GET_INTEGER_PARAM(2) : nil, true); return 0; } - */ - case COMMAND_SET_DRUNK_INPUT_DELAY: - { + case COMMAND_LOCK_GARAGE: CollectParameters(&m_nIp, 2); - assert(GET_INTEGER_PARAM(1) < CPad::DRUNK_STEERING_BUFFER_SIZE); - CPad::GetPad(GET_INTEGER_PARAM(0))->SetDrunkInputDelay(GET_INTEGER_PARAM(1)); + CGarages::LockGarage(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); return 0; - } - case COMMAND_SET_CHAR_MONEY: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - pPed->m_nPedMoney = GET_INTEGER_PARAM(1); - pPed->bMoneyHasBeenGivenByScript = true; - return 0; - } - //case COMMAND_INCREASE_CHAR_MONEY: - case COMMAND_GET_OFFSET_FROM_OBJECT_IN_WORLD_COORDS: - { - CollectParameters(&m_nIp, 4); - CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pObject); - CVector result = Multiply3x3(pObject->GetMatrix(), GET_VECTOR_PARAM(1)) + pObject->GetPosition(); - SET_VECTOR_PARAM(0, result); - StoreParameters(&m_nIp, 3); - return 0; - } - case COMMAND_REGISTER_LIFE_SAVED: - CStats::AnotherLifeSavedWithAmbulance(); - return 0; - case COMMAND_REGISTER_CRIMINAL_CAUGHT: - CStats::AnotherCriminalCaught(); - return 0; - case COMMAND_REGISTER_AMBULANCE_LEVEL: - CollectParameters(&m_nIp, 1); - CStats::RegisterLevelAmbulanceMission(GET_INTEGER_PARAM(0)); - return 0; - case COMMAND_REGISTER_FIRE_EXTINGUISHED: - CStats::AnotherFireExtinguished(); - return 0; - case COMMAND_TURN_PHONE_ON: - CollectParameters(&m_nIp, 1); - gPhoneInfo.m_aPhones[GET_INTEGER_PARAM(0)].m_nState = PHONE_STATE_9; - return 0; - /* - case COMMAND_REGISTER_LONGEST_DODO_FLIGHT: - CollectParameters(&m_nIp, 1); - CStats::RegisterLongestFlightInDodo(GET_INTEGER_PARAM(0)); - return 0; - */ - case COMMAND_GET_OFFSET_FROM_CAR_IN_WORLD_COORDS: - { - CollectParameters(&m_nIp, 4); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - CVector result = Multiply3x3(pVehicle->GetMatrix(), GET_VECTOR_PARAM(1)) + pVehicle->GetPosition(); - SET_VECTOR_PARAM(0, result); - StoreParameters(&m_nIp, 3); - return 0; - } - case COMMAND_SET_TOTAL_NUMBER_OF_KILL_FRENZIES: - CollectParameters(&m_nIp, 1); - CStats::SetTotalNumberKillFrenzies(GET_INTEGER_PARAM(0)); - return 0; - case COMMAND_BLOW_UP_RC_BUGGY: - CWorld::Players[CWorld::PlayerInFocus].BlowUpRCBuggy(true); - return 0; - /* - case COMMAND_REMOVE_CAR_FROM_CHASE: - CollectParameters(&m_nIp, 1); - CRecordDataForChase::RemoveCarFromChase(GET_INTEGER_PARAM(0)); - return 0; - */ - case COMMAND_IS_FRENCH_GAME: - UpdateCompareFlag(CGame::frenchGame); - return 0; - case COMMAND_IS_GERMAN_GAME: - UpdateCompareFlag(CGame::germanGame); - return 0; - case COMMAND_CLEAR_MISSION_AUDIO: - CollectParameters(&m_nIp, 1); - DMAudio.ClearMissionAudio(GET_INTEGER_PARAM(0) - 1); - return 0; - /* - case COMMAND_SET_FADE_IN_AFTER_NEXT_ARREST: - CollectParameters(&m_nIp, 1); - CRestart::bFadeInAfterNextArrest = !!GET_INTEGER_PARAM(0); - return 0; - case COMMAND_SET_FADE_IN_AFTER_NEXT_DEATH: - CollectParameters(&m_nIp, 1); - CRestart::bFadeInAfterNextDeath = !!GET_INTEGER_PARAM(0); - return 0; - case COMMAND_SET_GANG_PED_MODEL_PREFERENCE: - CollectParameters(&m_nIp, 2); - CGangs::SetGangPedModelOverride(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); - return 0; - */ - case COMMAND_SET_CHAR_USE_PEDNODE_SEEK: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - if (GET_INTEGER_PARAM(1)) - pPed->m_pNextPathNode = nil; - pPed->bUsePedNodeSeek = !!GET_INTEGER_PARAM(1); - return 0; - } - /* - case COMMAND_SWITCH_VEHICLE_WEAPONS: - { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - pVehicle->bGunSwitchedOff = !GET_INTEGER_PARAM(1); - return 0; - } - */ - case COMMAND_SET_GET_OUT_OF_JAIL_FREE: - CollectParameters(&m_nIp, 2); - CWorld::Players[GET_INTEGER_PARAM(0)].m_bGetOutOfJailFree = !!GET_INTEGER_PARAM(1); - return 0; - case COMMAND_SET_FREE_HEALTH_CARE: - CollectParameters(&m_nIp, 2); - CWorld::Players[GET_INTEGER_PARAM(0)].m_bGetOutOfHospitalFree = !!GET_INTEGER_PARAM(1); - return 0; - /* - case COMMAND_IS_CAR_DOOR_CLOSED: - { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - UpdateCompareFlag(!pVehicle->IsDoorMissing((eDoors)GET_INTEGER_PARAM(1)) && pVehicle->IsDoorClosed((eDoors)GET_INTEGER_PARAM(1))); - return 0; - } - */ - case COMMAND_LOAD_AND_LAUNCH_MISSION: - return 0; - case COMMAND_LOAD_AND_LAUNCH_MISSION_INTERNAL: - { -#ifdef USE_MISSION_REPLAY_OVERRIDE_FOR_NON_MOBILE_SCRIPT - uint32 oldIp = m_nIp; -#endif - CollectParameters(&m_nIp, 1); - - if (CTheScripts::NumberOfExclusiveMissionScripts > 0) { - if (GET_INTEGER_PARAM(0) < UINT16_MAX - 1) - return 0; - SET_INTEGER_PARAM(0, UINT16_MAX - GET_INTEGER_PARAM(0)); - } -#ifdef MISSION_REPLAY - missionRetryScriptIndex = GET_INTEGER_PARAM(0); -#ifdef USE_MISSION_REPLAY_OVERRIDE_FOR_NON_MOBILE_SCRIPT - if (CTheScripts::MissionSupportsMissionReplay(missionRetryScriptIndex)){ - if (!AlreadySavedGame) { - m_nIp = oldIp - 2; - SaveGameForPause(SAVE_TYPE_QUICKSAVE_FOR_SCRIPT); - AlreadySavedGame = true; - return 0; - } - else { - AlreadySavedGame = false; - } - } -#endif -#endif - CTimer::Suspend(); - int offset = CTheScripts::MultiScriptArray[GET_INTEGER_PARAM(0)] + 8; - int size = CTheScripts::MultiScriptArray[GET_INTEGER_PARAM(0) + 1] - CTheScripts::MultiScriptArray[GET_INTEGER_PARAM(0)]; - if (size <= 0) - size = CTheScripts::LargestMissionScriptSize; - CFileMgr::Seek(gScriptsFile, offset, 0); - CFileMgr::Read(gScriptsFile, (const char*)&CTheScripts::ScriptSpace[CTheScripts::MainScriptSize], size); - CRunningScript* pMissionScript = CTheScripts::StartNewScript(CTheScripts::MainScriptSize); - CTimer::Resume(); - pMissionScript->m_bIsMissionScript = true; - pMissionScript->m_bMissionFlag = true; - CTheScripts::bAlreadyRunningAMissionScript = true; - memset(&CTheScripts::ScriptSpace[CTheScripts::NumTrueGlobals * 4 + 8], 0, CTheScripts::MostGlobals * 4); - pMissionScript->Process(); - return 0; - } - case COMMAND_SET_OBJECT_DRAW_LAST: - { - CollectParameters(&m_nIp, 2); - CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pObject); - pObject->bDrawLast = !!GET_INTEGER_PARAM(1); - return 0; - } - case COMMAND_GET_AMMO_IN_PLAYER_WEAPON: - { - CollectParameters(&m_nIp, 2); - CPlayerPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(pPed); - SET_INTEGER_PARAM(0, 0); - for (int i = 0; i < TOTAL_WEAPON_SLOTS; i++) { - if (pPed->GetWeapon(i).m_eWeaponType == (eWeaponType)GET_INTEGER_PARAM(1)) - SET_INTEGER_PARAM(0, pPed->GetWeapon(i).m_nAmmoTotal); - } - StoreParameters(&m_nIp, 1); - return 0; - } - /* - case COMMAND_GET_AMMO_IN_CHAR_WEAPON: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - CWeapon* pWeaponSlot = &pPed->m_weapons[GET_INTEGER_PARAM(1)]; - if (pWeaponSlot->m_eWeaponType == (eWeaponType)GET_INTEGER_PARAM(1)) - SET_INTEGER_PARAM(0, pWeaponSlot->m_nAmmoTotal); - else - SET_INTEGER_PARAM(0, 0); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_REGISTER_KILL_FRENZY_PASSED: - CStats::AnotherKillFrenzyPassed(); - return 0; - */ - case COMMAND_SET_CHAR_SAY: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - switch (GET_INTEGER_PARAM(1)) { - case 15: - pPed->Say(0x93); // TODO - break; - default: - break; - } - return 0; - } - case COMMAND_SET_NEAR_CLIP: - CollectParameters(&m_nIp, 1); - TheCamera.SetNearClipScript(GET_FLOAT_PARAM(0)); - return 0; - case COMMAND_SET_RADIO_CHANNEL: - CollectParameters(&m_nIp, 2); - if (!cCustomSoundTrack::Instance()->IsPlaying()) - DMAudio.SetRadioChannel(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); - return 0; - /* - case COMMAND_OVERRIDE_HOSPITAL_LEVEL: - CollectParameters(&m_nIp, 1); - CRestart::OverrideHospitalLevel = GET_INTEGER_PARAM(0); - return 0; - case COMMAND_OVERRIDE_POLICE_STATION_LEVEL: - CollectParameters(&m_nIp, 1); - CRestart::OverridePoliceStationLevel = GET_INTEGER_PARAM(0); - return 0; - case COMMAND_FORCE_RAIN: - CollectParameters(&m_nIp, 1); - CWeather::bScriptsForceRain = !!GET_INTEGER_PARAM(0); - return 0; - */ - case COMMAND_DOES_GARAGE_CONTAIN_CAR: - { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); - script_assert(pVehicle); - UpdateCompareFlag(CGarages::IsThisCarWithinGarageArea(GET_INTEGER_PARAM(0), pVehicle)); - return 0; - } - case COMMAND_SET_CAR_TRACTION: - { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - float fTraction = GET_FLOAT_PARAM(1); - script_assert(pVehicle->m_vehType == VEHICLE_TYPE_CAR || pVehicle->m_vehType == VEHICLE_TYPE_BIKE); - if (pVehicle->m_vehType == VEHICLE_TYPE_CAR) - ((CAutomobile*)pVehicle)->m_fTraction = fTraction; - else - ((CBike*)pVehicle)->m_fTraction = fTraction; - return 0; - } - case COMMAND_ARE_MEASUREMENTS_IN_METRES: -#ifdef USE_MEASUREMENTS_IN_METERS + case COMMAND_IS_FINAL_GAME: +#ifdef FINAL UpdateCompareFlag(true); #else UpdateCompareFlag(false); #endif return 0; - case COMMAND_CONVERT_METRES_TO_FEET: - { - CollectParameters(&m_nIp, 1); - float fMeterValue = GET_FLOAT_PARAM(0); - float fFeetValue = fMeterValue / METERS_IN_FOOT; - SET_FLOAT_PARAM(0, fFeetValue); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_MARK_ROADS_BETWEEN_LEVELS: - { - CollectParameters(&m_nIp, 6); - float infX = GET_FLOAT_PARAM(0); - float infY = GET_FLOAT_PARAM(1); - float infZ = GET_FLOAT_PARAM(2); - float supX = GET_FLOAT_PARAM(3); - float supY = GET_FLOAT_PARAM(4); - float supZ = GET_FLOAT_PARAM(5); - if (infX > supX) { - infX = GET_FLOAT_PARAM(3); - supX = GET_FLOAT_PARAM(0); - } - if (infY > supY) { - infY = GET_FLOAT_PARAM(4); - supY = GET_FLOAT_PARAM(1); - } - if (infZ > supZ) { - infZ = GET_FLOAT_PARAM(5); - supZ = GET_FLOAT_PARAM(2); - } - ThePaths.MarkRoadsBetweenLevelsInArea(infX, supX, infY, supY, infZ, supZ); - return 0; - } - case COMMAND_MARK_PED_ROADS_BETWEEN_LEVELS: - { - CollectParameters(&m_nIp, 6); - float infX = GET_FLOAT_PARAM(0); - float infY = GET_FLOAT_PARAM(1); - float infZ = GET_FLOAT_PARAM(2); - float supX = GET_FLOAT_PARAM(3); - float supY = GET_FLOAT_PARAM(4); - float supZ = GET_FLOAT_PARAM(5); - if (infX > supX) { - infX = GET_FLOAT_PARAM(3); - supX = GET_FLOAT_PARAM(0); - } - if (infY > supY) { - infY = GET_FLOAT_PARAM(4); - supY = GET_FLOAT_PARAM(1); - } - if (infZ > supZ) { - infZ = GET_FLOAT_PARAM(5); - supZ = GET_FLOAT_PARAM(2); - } - ThePaths.PedMarkRoadsBetweenLevelsInArea(infX, supX, infY, supY, infZ, supZ); - return 0; - } - case COMMAND_SET_CAR_AVOID_LEVEL_TRANSITIONS: + case COMMAND_SET_ALLOWED_COLLISION: { CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - pVehicle->AutoPilot.m_bStayInCurrentLevel = !!GET_INTEGER_PARAM(1); + CTheScripts::AllowedCollision[0] = GET_INTEGER_PARAM(0); + CTheScripts::AllowedCollision[1] = GET_INTEGER_PARAM(1); return 0; } - /* - case COMMAND_SET_CHAR_AVOID_LEVEL_TRANSITIONS: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(1)); - script_assert(pPed); - // not implemented - return 0; - } - case COMMAND_IS_THREAT_FOR_PED_TYPE: - CollectParameters(&m_nIp, 2); - UpdateCompareFlag(CPedType::IsThreat(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1))); - return 0; - */ - case COMMAND_CLEAR_AREA_OF_CHARS: - { - CollectParameters(&m_nIp, 6); - float infX = GET_FLOAT_PARAM(0); - float infY = GET_FLOAT_PARAM(1); - float infZ = GET_FLOAT_PARAM(2); - float supX = GET_FLOAT_PARAM(3); - float supY = GET_FLOAT_PARAM(4); - float supZ = GET_FLOAT_PARAM(5); - if (infX > supX) { - infX = GET_FLOAT_PARAM(3); - supX = GET_FLOAT_PARAM(0); - } - if (infY > supY) { - infY = GET_FLOAT_PARAM(4); - supY = GET_FLOAT_PARAM(1); - } - if (infZ > supZ) { - infZ = GET_FLOAT_PARAM(5); - supZ = GET_FLOAT_PARAM(2); - } - CWorld::ClearPedsFromArea(infX, infY, infZ, supX, supY, supZ); - return 0; - } - case COMMAND_SET_TOTAL_NUMBER_OF_MISSIONS: - CollectParameters(&m_nIp, 1); - CStats::SetTotalNumberMissions(CGame::germanGame ? GET_INTEGER_PARAM(0) - 2 : GET_INTEGER_PARAM(0)); - return 0; - case COMMAND_CONVERT_METRES_TO_FEET_INT: - CollectParameters(&m_nIp, 1); - GET_INTEGER_PARAM(0) *= FEET_IN_METER; - StoreParameters(&m_nIp, 1); - return 0; - case COMMAND_REGISTER_FASTEST_TIME: - CollectParameters(&m_nIp, 2); - CStats::RegisterFastestTime(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); - return 0; - case COMMAND_REGISTER_HIGHEST_SCORE: - CollectParameters(&m_nIp, 2); - CStats::RegisterHighestScore(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); - return 0; - case COMMAND_WARP_CHAR_INTO_CAR_AS_PASSENGER: + case COMMAND_DISPLAY_ONSCREEN_TIMER_WITH_NUMBER_AND_2_STRINGS: { + char onscreen_str1[12]; + char onscreen_str2[12]; + uint16 var = (uint8*)GetPointerToScriptVariable(&m_nIp) - CTheScripts::ScriptSpace; CollectParameters(&m_nIp, 3); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); - script_assert(pPed); - script_assert(pVehicle); - if (GET_INTEGER_PARAM(2) < 0) - pPed->WarpPedIntoCarAsPassenger(pVehicle, GET_INTEGER_PARAM(2)); - else { - script_assert(GET_INTEGER_PARAM(2) >= 0 && GET_INTEGER_PARAM(2) < ARRAY_SIZE(pVehicle->pPassengers)); - pPed->WarpPedIntoCarAsPassenger(pVehicle, GET_INTEGER_PARAM(2)); - } + wchar* text = TheText.Get((char*)&CTheScripts::ScriptSpace[m_nIp]); + strncpy(onscreen_str1, (char*)&CTheScripts::ScriptSpace[m_nIp], KEY_LENGTH_IN_SCRIPT); + m_nIp += KEY_LENGTH_IN_SCRIPT; + wchar* text2 = TheText.Get((char*)&CTheScripts::ScriptSpace[m_nIp]); + 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_str2, 0, GET_INTEGER_PARAM(0), onscreen_str1, GET_INTEGER_PARAM(2)); return 0; + } + case COMMAND_GET_PLAYER_STORED_WEAPON: + { + CollectParameters(&m_nIp, 1); + CPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; + script_assert(pPed); + SET_INTEGER_PARAM(0, pPed->m_storedWeapon); + StoreParameters(&m_nIp, 1); + return 0; + } + case COMMAND_DISABLE_PAUSE_MENU: + CollectParameters(&m_nIp, 1); + // FrontEndMenuManager.mDisablePauseMenu = GET_INTEGER_PARAM(0) != 0; // TODO: static + member + return 0; + case COMMAND_IS_CHANNEL_PLAYING: + CollectParameters(&m_nIp, 1); + //UpdateCompareFlag(DMAudio.IsChannelPlaying(GET_INTEGER_PARAM(0)); + UpdateCompareFlag(false); + return 0; + case COMMAND_SET_CLOCK_EVENT_WARNING: + CollectParameters(&m_nIp, 3); + /* + if (CHud::m_ClockEventWarningMinutes || GET_INTEGER_PARAMS(2)){ + CHud::m_ClockEventWarningMinutes = GET_INTEGER_PARAMS(2); + CHud::m_ClockEventMinutes = GET_INTEGER_PARAMS(1); + CHud::m_ClockEventHours = GET_INTEGER_PARAMS(0); + CHud::m_ClockEventFlashTimer = 0; + } + */ + return 0; + case COMMAND_SET_EXTRA_COLOUR_LIGHT_DIRECTION: + CollectParameters(&m_nIp, 3); + // CWeather::ExtraColourLightDir = GET_VECTOR_PARAM(0); + // CWeather::ExtraColourLightDir.Normalise(); + return 0; + case todo__comm_1029: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1029"); + return 0; + } + case COMMAND_PRINT_HELP_NO_BRIEF: + { + wchar* text = GetTextByKeyFromScript(&m_nIp); + CHud::SetHelpMessage(text, false); // + false, false + return 0; + } + case COMMAND_PRINT_HELP_FOREVER_NO_BRIEF: + { + wchar* text = GetTextByKeyFromScript(&m_nIp); + CHud::SetHelpMessage(text, false, true); // + false + return 0; + } + case COMMAND_PRINT_HELP_ALWAYS_NO_BRIEF: + { + // CHud::mAlwaysAllowHelpText = true; + wchar* text = GetTextByKeyFromScript(&m_nIp); + CHud::SetHelpMessage(text, false); // + false, false + return 0; + } + case COMMAND_PRINT_HELP_FOREVER_ALWAYS_NO_BRIEF: + { + // CHud::mAlwaysAllowHelpText = true; + wchar* text = GetTextByKeyFromScript(&m_nIp); + CHud::SetHelpMessage(text, false, true); // + false + return 0; + } + case COMMAND_SET_CAR_IS_REWARD: + { + CollectParameters(&m_nIp, 2); + CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); + script_assert(pVehicle); + pVehicle->bRewardVehicle = (GET_INTEGER_PARAM(1) != 0); + return 0; + } + case todo__comm_1035: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1035"); + return 0; + } + case todo__comm_1036: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1036"); + return 0; + } + case todo__comm_1037: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1037"); + return 0; + } + case todo__comm_1038: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1038"); + return 0; + } + case todo__comm_1039: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1039"); + return 0; + } + case todo__comm_1040: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1040"); + return 0; + } + case todo__comm_1041: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1041"); + return 0; + } + case todo__comm_1042: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1042"); + return 0; + } + case todo__comm_1043: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1043"); + return 0; + } + case todo__comm_1044: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1044"); + return 0; + } + case todo__comm_1045: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1045"); + return 0; + } + case todo__comm_1046: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1046"); + return 0; + } + case todo__comm_1047: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1047"); + return 0; + } + case todo__comm_1048: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1048"); + return 0; + } + case todo__comm_1049: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1049"); + return 0; + } + case todo__comm_1050: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1050"); + return 0; + } + case todo__comm_1051: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1051"); + return 0; + } + case todo__comm_1052: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1052"); + return 0; + } + case todo__comm_1053: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1053"); + return 0; + } + case todo__comm_1054: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1054"); + return 0; + } + case todo__comm_1055: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1055"); + return 0; + } + case todo__comm_1056: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1056"); + return 0; + } + case todo__comm_1057: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1057"); + return 0; + } + case todo__comm_1058: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1058"); + return 0; + } + case todo__comm_1059: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1059"); + return 0; + } + case todo__comm_1060: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1060"); + return 0; + } + case todo__comm_1061: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1061"); + return 0; + } + case todo__comm_1062: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1062"); + return 0; + } + case todo__comm_1063: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1063"); + return 0; + } + case todo__comm_1064: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1064"); + return 0; + } + case todo__comm_1065: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1065"); + return 0; + } + case todo__comm_1066: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1066"); + return 0; + } + case todo__comm_1067: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1067"); + return 0; + } + case todo__comm_1068: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1068"); + return 0; + } + case todo__comm_1069: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1069"); + return 0; + } + case todo__comm_1070: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1070"); + return 0; + } + case todo__comm_1071: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1071"); + return 0; + } + case todo__comm_1072: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1072"); + return 0; + } + case todo__comm_1073: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1073"); + return 0; + } + case todo__comm_1074: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1074"); + return 0; + } + case todo__comm_1075: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1075"); + return 0; + } + case todo__comm_1076: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1076"); + return 0; + } + case todo__comm_1077: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1077"); + return 0; + } + case todo__comm_1078: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1078"); + return 0; + } + case todo__comm_1079: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1079"); + return 0; + } + case todo__comm_1080: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1080"); + return 0; + } + case todo__comm_1081: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1081"); + return 0; + } + case todo__comm_1082: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1082"); + return 0; + } + case todo__comm_1083: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1083"); + return 0; + } + case todo__comm_1084: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1084"); + return 0; + } + case todo__comm_1085: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1085"); + return 0; + } + case todo__comm_1086: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1086"); + return 0; + } + case todo__comm_1087: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1087"); + return 0; + } + case todo__comm_1088: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1088"); + return 0; + } + case todo__comm_1089: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1089"); + return 0; + } + case todo__comm_1090: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1090"); + return 0; + } + case todo__comm_1091: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1091"); + return 0; + } + case todo__comm_1092: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1092"); + return 0; + } + case todo__comm_1093: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1093"); + return 0; + } + case todo__comm_1094: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1094"); + return 0; + } + case todo__comm_1095: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1095"); + return 0; + } + case todo__comm_1096: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1096"); + return 0; + } + case todo__comm_1097: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1097"); + return 0; + } + case todo__comm_1098: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1098"); + return 0; + } + case todo__comm_1099: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1099"); + return 0; + } - } - case COMMAND_IS_CAR_PASSENGER_SEAT_FREE: - { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - UpdateCompareFlag(GET_INTEGER_PARAM(1) < pVehicle->m_nNumMaxPassengers && pVehicle->pPassengers[GET_INTEGER_PARAM(1)] == nil); - return 0; - } - case COMMAND_GET_CHAR_IN_CAR_PASSENGER_SEAT: - { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - script_assert(GET_INTEGER_PARAM(1) >= 0 && GET_INTEGER_PARAM(1) < ARRAY_SIZE(pVehicle->pPassengers)); - CPed* pPassenger = pVehicle->pPassengers[GET_INTEGER_PARAM(1)]; - SET_INTEGER_PARAM(0, CPools::GetPedPool()->GetIndex(pPassenger)); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_SET_CHAR_IS_CHRIS_CRIMINAL: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - pPed->bChrisCriminal = !!GET_INTEGER_PARAM(1); - return 0; - } - case COMMAND_START_CREDITS: - CollectParameters(&m_nIp, 1); - CCredits::Start(); // TODO: CCredits::Start(GET_INTEGER_PARAM(0)) - return 0; - case COMMAND_STOP_CREDITS: - CCredits::Stop(); - return 0; - case COMMAND_ARE_CREDITS_FINISHED: - UpdateCompareFlag(CCredits::AreCreditsDone()); - return 0; - case COMMAND_CREATE_SINGLE_PARTICLE: - CollectParameters(&m_nIp, 8); - CParticle::AddParticle((tParticleType)GET_INTEGER_PARAM(0), GET_VECTOR_PARAM(1), - GET_VECTOR_PARAM(4), nil, GET_FLOAT_PARAM(7), 0, 0, 0, 0); - return 0; - /* - case COMMAND_SET_CHAR_IGNORE_LEVEL_TRANSITIONS: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - if (GET_INTEGER_PARAM(1)) - pPed->m_nZoneLevel = LEVEL_IGNORE; - else - pPed->m_nZoneLevel = CTheZones::GetLevelFromPosition(&pPed->GetPosition()); - return 0; - } - case COMMAND_GET_CHASE_CAR: - { - CollectParameters(&m_nIp, 1); - CVehicle* pVehicle = CRecordDataForChase::TurnChaseCarIntoScriptCar(GET_INTEGER_PARAM(0)); - SET_INTEGER_PARAM(0, CPools::GetVehiclePool()->GetIndex(pVehicle)); - StoreParameters(&m_nIp, 1); - if (m_bIsMissionScript) - CTheScripts::MissionCleanUp.AddEntityToList(GET_INTEGER_PARAM(0), CLEANUP_CAR); - return 0; - } - case COMMAND_START_BOAT_FOAM_ANIMATION: - CSpecialParticleStuff::StartBoatFoamAnimation(); - return 0; - case COMMAND_UPDATE_BOAT_FOAM_ANIMATION: - { - CollectParameters(&m_nIp, 1); - CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pObject); - CSpecialParticleStuff::UpdateBoatFoamAnimation(&pObject->GetMatrix()); - return 0; - } - */ - case COMMAND_SET_MUSIC_DOES_FADE: - CollectParameters(&m_nIp, 1); - TheCamera.m_bIgnoreFadingStuffForMusic = (GET_INTEGER_PARAM(0) == 0); - return 0; - /* - case COMMAND_SET_INTRO_IS_PLAYING: - CollectParameters(&m_nIp, 1); - if (GET_INTEGER_PARAM(0)) { - CGame::playingIntro = true; - CStreaming::RemoveCurrentZonesModels(); - } else { - CGame::playingIntro = false; - DMAudio.ChangeMusicMode(MUSICMODE_GAME); - int mi; - CModelInfo::GetModelInfo("bridgefukb", &mi); - CStreaming::RequestModel(mi, STREAMFLAGS_DEPENDENCY); - CStreaming::LoadAllRequestedModels(false); - } - return 0; - case COMMAND_SET_PLAYER_HOOKER: - { - CollectParameters(&m_nIp, 2); - CPlayerInfo* pPlayerInfo = &CWorld::Players[GET_INTEGER_PARAM(0)]; - if (GET_INTEGER_PARAM(1) < 0) { - pPlayerInfo->m_pHooker = nil; - pPlayerInfo->m_nNextSexFrequencyUpdateTime = 0; - pPlayerInfo->m_nNextSexMoneyUpdateTime = 0; - } else { - CPed* pHooker = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(1)); - script_assert(pHooker); - pPlayerInfo->m_pHooker = (CCivilianPed*)pHooker; - pPlayerInfo->m_nSexFrequency = 1000; - pPlayerInfo->m_nNextSexFrequencyUpdateTime = CTimer::GetTimeInMilliseconds() + 1000; - pPlayerInfo->m_nNextSexMoneyUpdateTime = CTimer::GetTimeInMilliseconds() + 3000; - } - return 0; - } - */ - case COMMAND_PLAY_END_OF_GAME_TUNE: - DMAudio.ChangeMusicMode(MUSICMODE_FRONTEND); - DMAudio.PlayFrontEndTrack(STREAMED_SOUND_CUTSCENE_FINALE, 1); // third parameter is 1 - return 0; - case COMMAND_STOP_END_OF_GAME_TUNE: - DMAudio.StopCutSceneMusic(); - DMAudio.ChangeMusicMode(MUSICMODE_GAME); - return 0; - case COMMAND_GET_CAR_MODEL: - { - CollectParameters(&m_nIp, 1); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - SET_INTEGER_PARAM(0, pVehicle->GetModelIndex()); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_IS_PLAYER_SITTING_IN_CAR: - { - CollectParameters(&m_nIp, 2); - CPlayerPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(pPed); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); - UpdateCompareFlag(pPed->GetPedState() == PED_DRIVING && pPed->m_objective != OBJECTIVE_LEAVE_CAR && pPed->m_pMyVehicle == pVehicle); - return 0; - } - case COMMAND_IS_PLAYER_SITTING_IN_ANY_CAR: - { - CollectParameters(&m_nIp, 1); - CPlayerPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(pPed); - UpdateCompareFlag(pPed->GetPedState() == PED_DRIVING && pPed->m_objective != OBJECTIVE_LEAVE_CAR); - return 0; - } - /* - case COMMAND_SET_SCRIPT_FIRE_AUDIO: - CollectParameters(&m_nIp, 2); - gFireManager.SetScriptFireAudio(GET_INTEGER_PARAM(0), !!GET_INTEGER_PARAM(1)); - return 0; - */ - case COMMAND_ARE_ANY_CAR_CHEATS_ACTIVATED: - UpdateCompareFlag(CVehicle::bAllDodosCheat || CVehicle::bCheat3 || CVehicle::bHoverCheat || CVehicle::bCheat8 || CVehicle::bCheat9); - return 0; - case COMMAND_SET_CHAR_SUFFERS_CRITICAL_HITS: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - pPed->bNoCriticalHits = (GET_INTEGER_PARAM(1) == 0); - return 0; - } - /* - case COMMAND_IS_PLAYER_LIFTING_A_PHONE: - { - CollectParameters(&m_nIp, 1); - CPlayerPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(pPed); - UpdateCompareFlag(pPed->GetPedState() == PED_MAKE_CALL); - return 0; - } - */ - case COMMAND_IS_CHAR_SITTING_IN_CAR: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); - script_assert(pVehicle); - UpdateCompareFlag(pPed->GetPedState() == PED_DRIVING && pPed->m_objective != OBJECTIVE_LEAVE_CAR && pPed->m_pMyVehicle == pVehicle); - return 0; - } - case COMMAND_IS_CHAR_SITTING_IN_ANY_CAR: - { - CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - UpdateCompareFlag(pPed->GetPedState() == PED_DRIVING && pPed->m_objective != OBJECTIVE_LEAVE_CAR); - return 0; - } - case COMMAND_IS_PLAYER_ON_FOOT: - { - CollectParameters(&m_nIp, 1); - CPlayerPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(pPed); - UpdateCompareFlag(!pPed->bInVehicle && pPed->m_objective != OBJECTIVE_ENTER_CAR_AS_PASSENGER && - pPed->m_objective != OBJECTIVE_ENTER_CAR_AS_DRIVER); - return 0; - } - case COMMAND_IS_CHAR_ON_FOOT: - { - CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - UpdateCompareFlag(!pPed->bInVehicle && pPed->m_objective != OBJECTIVE_ENTER_CAR_AS_PASSENGER && - pPed->m_objective != OBJECTIVE_ENTER_CAR_AS_DRIVER); - return 0; - } default: script_assert(0); } @@ -873,991 +691,504 @@ int8 CRunningScript::ProcessCommands1100To1199(int32 command) { char tmp[48]; switch (command) { - /* - case COMMAND_LOAD_COLLISION_WITH_SCREEN: - CollectParameters(&m_nIp, 1); - CTimer::Stop(); - CGame::currLevel = (eLevelName)GET_INTEGER_PARAM(0); - if (CGame::currLevel != CCollision::ms_collisionInMemory) { - ISLAND_LOADING_IS(LOW) - { - DMAudio.SetEffectsFadeVol(0); - CPad::StopPadsShaking(); - CCollision::LoadCollisionScreen(CGame::currLevel); - DMAudio.Service(); - } - CPopulation::DealWithZoneChange(CCollision::ms_collisionInMemory, CGame::currLevel, false); - - ISLAND_LOADING_IS(LOW) - { - CStreaming::RemoveUnusedBigBuildings(CGame::currLevel); - CStreaming::RemoveUnusedBuildings(CGame::currLevel); - } - CCollision::SortOutCollisionAfterLoad(); - - ISLAND_LOADING_ISNT(HIGH) - CStreaming::RequestIslands(CGame::currLevel); - - ISLAND_LOADING_IS(LOW) - CStreaming::RequestBigBuildings(CGame::currLevel); - - ISLAND_LOADING_ISNT(HIGH) - CStreaming::LoadAllRequestedModels(true); - - ISLAND_LOADING_IS(LOW) - DMAudio.SetEffectsFadeVol(127); - } - CTimer::Update(); - return 0; - */ - case COMMAND_LOAD_SPLASH_SCREEN: - CTheScripts::ReadTextLabelFromScript(&m_nIp, tmp); - for (int i = 0; i < KEY_LENGTH_IN_SCRIPT; i++) - tmp[i] = tolower(tmp[i]); - m_nIp += 8; - LoadSplash(tmp); - return 0; - /* - case COMMAND_SET_CAR_IGNORE_LEVEL_TRANSITIONS: + case todo__comm_1100: { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - if (GET_INTEGER_PARAM(1)) - pVehicle->m_nZoneLevel = LEVEL_IGNORE; - else - pVehicle->m_nZoneLevel = CTheZones::GetLevelFromPosition(&pVehicle->GetPosition()); + script_assert(false && "TODO_OR_CHECK_todo__comm_1100"); return 0; } - case COMMAND_MAKE_CRAIGS_CAR_A_BIT_STRONGER: + case todo__comm_1101: { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - script_assert(pVehicle->m_vehType == VEHICLE_TYPE_CAR); - CAutomobile* pCar = (CAutomobile*)pVehicle; - pCar->bMoreResistantToDamage = GET_INTEGER_PARAM(1); + script_assert(false && "TODO_OR_CHECK_todo__comm_1101"); return 0; } - */ - case COMMAND_SET_JAMES_CAR_ON_PATH_TO_PLAYER: + case todo__comm_1102: { - CollectParameters(&m_nIp, 1); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - CCarCtrl::JoinCarWithRoadSystemGotoCoors(pVehicle, FindPlayerCoors(), false); + script_assert(false && "TODO_OR_CHECK_todo__comm_1102"); return 0; } - case COMMAND_LOAD_END_OF_GAME_TUNE: - return 0; - case COMMAND_ENABLE_PLAYER_CONTROL_CAMERA: - CPad::GetPad(0)->SetEnablePlayerControls(PLAYERCONTROL_CAMERA); - return 0; - case COMMAND_SET_OBJECT_ROTATION: + case todo__comm_1103: { - CollectParameters(&m_nIp, 4); - CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pObject); - CWorld::Remove(pObject); - pObject->SetOrientation( - DEGTORAD(GET_FLOAT_PARAM(1)), - DEGTORAD(GET_FLOAT_PARAM(2)), - DEGTORAD(GET_FLOAT_PARAM(3))); - pObject->GetMatrix().UpdateRW(); - pObject->UpdateRwFrame(); - CWorld::Add(pObject); + script_assert(false && "TODO_OR_CHECK_todo__comm_1103"); return 0; } - case COMMAND_GET_DEBUG_CAMERA_COORDINATES: - SET_VECTOR_PARAM(0, TheCamera.Cams[2].Source); - StoreParameters(&m_nIp, 3); - return 0; - /* - case COMMAND_GET_DEBUG_CAMERA_FRONT_VECTOR: - SET_VECTOR_PARAM(0, TheCamera.Cams[2].Front); - StoreParameters(&m_nIp, 3); - return 0; - case COMMAND_IS_PLAYER_TARGETTING_ANY_CHAR: + case todo__comm_1104: { - CollectParameters(&m_nIp, 1); - CPlayerPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(pPed); - CEntity* pTarget = pPed->m_pPointGunAt; - UpdateCompareFlag(pTarget && pTarget->IsPed()); + script_assert(false && "TODO_OR_CHECK_todo__comm_1104"); return 0; } - */ - case COMMAND_IS_PLAYER_TARGETTING_CHAR: + case todo__comm_1105: { - CollectParameters(&m_nIp, 2); - CPlayerPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(pPed); - CPed* pTestedPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(1)); - script_assert(pTestedPed); - CEntity* pTarget = pPed->m_pPointGunAt; - bool bTargetting = pTarget && pTarget->IsPed() && pTarget == pTestedPed; -#ifdef GTA_PC - static int nCounter = 0; - nCounter = Max(0, nCounter - 1); - if (!pPed->GetWeapon()->IsTypeMelee() && !bTargetting) { - if ((pTestedPed->GetPosition() - TheCamera.GetPosition()).Magnitude() < 10.0f) { - CVector vTestedPos(pTestedPed->GetPosition().x, pTestedPed->GetPosition().y, pTestedPed->GetPosition().z + 0.4); - CVector vScreenPos; - float w, h; - if (CSprite::CalcScreenCoors(vTestedPos, &vScreenPos, &w, &h, false)) { - CVector2D vCrosshairPosition(CCamera::m_f3rdPersonCHairMultX * RsGlobal.maximumWidth, CCamera::m_f3rdPersonCHairMultY * RsGlobal.maximumHeight); - float fScreenDistance = ((CVector2D)vScreenPos - vCrosshairPosition).Magnitude(); - if (SCREEN_STRETCH_X(0.45f) > fScreenDistance / w) { - CColPoint point; - CEntity* entity; - if (!CWorld::ProcessLineOfSight(TheCamera.GetPosition() + 2.0f * TheCamera.GetForward(), - vTestedPos, point, entity, true, true, true, true, true, false) || - entity == pTestedPed) { - nCounter += 2; - if (nCounter > 20) { - bTargetting = true; - nCounter = 20; - } - } - } - } - } - } -#endif - UpdateCompareFlag(bTargetting); + script_assert(false && "TODO_OR_CHECK_todo__comm_1105"); return 0; } - case COMMAND_IS_PLAYER_TARGETTING_OBJECT: + case todo__comm_1106: { - CollectParameters(&m_nIp, 2); - CPlayerPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(pPed); - CObject* pTestedObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(1)); - script_assert(pTestedObject); - CEntity* pTarget = pPed->m_pPointGunAt; - bool bTargetting = pTarget && pTarget->IsObject() && pTarget == pTestedObject; -#ifdef GTA_PC // we will never know if section is real - static int nCounter = 0; - nCounter = Max(0, nCounter - 1); - if (!pPed->GetWeapon()->IsTypeMelee() && !bTargetting) { - if ((pTestedObject->GetPosition() - TheCamera.GetPosition()).Magnitude() < 10.0f) { - CVector vTestedPos(pTestedObject->GetPosition().x, pTestedObject->GetPosition().y, pTestedObject->GetPosition().z); - CVector vScreenPos; - float w, h; - if (CSprite::CalcScreenCoors(vTestedPos, &vScreenPos, &w, &h, false)) { - CVector2D vCrosshairPosition(CCamera::m_f3rdPersonCHairMultX * RsGlobal.maximumWidth, CCamera::m_f3rdPersonCHairMultY * RsGlobal.maximumHeight); - float fScreenDistance = ((CVector2D)vScreenPos - vCrosshairPosition).Magnitude(); - if (SCREEN_STRETCH_X(0.45f) > fScreenDistance / w) { - CColPoint point; - CEntity* entity; - if (!CWorld::ProcessLineOfSight(TheCamera.GetPosition() + 2.0f * TheCamera.GetForward(), - vTestedPos, point, entity, true, true, true, true, true, false) || - entity == pTestedObject) { - nCounter += 2; - if (nCounter > 20) { - bTargetting = true; - nCounter = 20; - } - } - } - } - } - } - UpdateCompareFlag(bTargetting); -#endif + script_assert(false && "TODO_OR_CHECK_todo__comm_1106"); return 0; } - case COMMAND_TERMINATE_ALL_SCRIPTS_WITH_THIS_NAME: + case todo__comm_1107: { - CTheScripts::ReadTextLabelFromScript(&m_nIp, tmp); - for (int i = 0; i < KEY_LENGTH_IN_SCRIPT; i++) - tmp[i] = tolower(tmp[i]); - m_nIp += 8; - CRunningScript* pScript = CTheScripts::pActiveScripts; - while (pScript) { - CRunningScript* pNext = pScript->next; - if (strcmp(pScript->m_abScriptName, tmp) == 0) { - pScript->RemoveScriptFromList(&CTheScripts::pActiveScripts); - pScript->AddScriptToList(&CTheScripts::pIdleScripts); - } - pScript = pNext; - } + script_assert(false && "TODO_OR_CHECK_todo__comm_1107"); return 0; } - case COMMAND_DISPLAY_TEXT_WITH_NUMBER: + case todo__comm_1108: { - CollectParameters(&m_nIp, 2); - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CTheScripts::IntroTextLines[CTheScripts::NumberOfIntroTextLinesThisFrame].m_fAtX = GET_FLOAT_PARAM(0); - CTheScripts::IntroTextLines[CTheScripts::NumberOfIntroTextLinesThisFrame].m_fAtY = GET_FLOAT_PARAM(1); - CollectParameters(&m_nIp, 1); - CMessages::InsertNumberInString(text, GET_INTEGER_PARAM(0), -1, -1, -1, -1, -1, - CTheScripts::IntroTextLines[CTheScripts::NumberOfIntroTextLinesThisFrame++].m_Text); + script_assert(false && "TODO_OR_CHECK_todo__comm_1108"); return 0; } - case COMMAND_DISPLAY_TEXT_WITH_2_NUMBERS: + case todo__comm_1109: { - CollectParameters(&m_nIp, 2); - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CTheScripts::IntroTextLines[CTheScripts::NumberOfIntroTextLinesThisFrame].m_fAtX = GET_FLOAT_PARAM(0); - CTheScripts::IntroTextLines[CTheScripts::NumberOfIntroTextLinesThisFrame].m_fAtY = GET_FLOAT_PARAM(1); - CollectParameters(&m_nIp, 2); - CMessages::InsertNumberInString(text, GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), -1, -1, -1, -1, - CTheScripts::IntroTextLines[CTheScripts::NumberOfIntroTextLinesThisFrame++].m_Text); + script_assert(false && "TODO_OR_CHECK_todo__comm_1109"); return 0; } - case COMMAND_FAIL_CURRENT_MISSION: - CTheScripts::FailCurrentMission = 2; -#ifdef MISSION_REPLAY - MissionSkipLevel = 0; -#endif - return 0; - case COMMAND_GET_CLOSEST_OBJECT_OF_TYPE: + case todo__comm_1110: { - return 0; -/* - CollectParameters(&m_nIp, 5); - CVector pos = GET_VECTOR_PARAM(0); - if (pos.z <= MAP_Z_LOW_LIMIT) - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - float range = GET_FLOAT_PARAM(3); - int mi = GET_INTEGER_PARAM(4) < 0 ? CTheScripts::UsedObjectArray[-GET_INTEGER_PARAM(4)].index : GET_INTEGER_PARAM(4); - int16 total; - CEntity* apEntities[16]; - CWorld::FindObjectsOfTypeInRange(mi, pos, range, true, &total, 16, apEntities, false, false, false, true, true); - CEntity* pClosestEntity = nil; - float min_dist = 2.0f * range; - for (int i = 0; i < total; i++) { - float dist = (apEntities[i]->GetPosition() - pos).Magnitude(); - if (dist < min_dist) { - min_dist = dist; - pClosestEntity = apEntities[i]; - } - } - if (pClosestEntity && pClosestEntity->IsDummy()) { - CPopulation::ConvertToRealObject((CDummyObject*)pClosestEntity); - CWorld::FindObjectsOfTypeInRange(mi, pos, range, true, &total, 16, apEntities, false, false, false, true, true); - pClosestEntity = nil; - float min_dist = 2.0f * range; - for (int i = 0; i < total; i++) { - float dist = (apEntities[i]->GetPosition() - pos).Magnitude(); - if (dist < min_dist) { - min_dist = dist; - pClosestEntity = apEntities[i]; - } - } - if (pClosestEntity->IsDummy()) - pClosestEntity = nil; - } - if (pClosestEntity) { - script_assert(pClosestEntity->IsObject()); - CObject* pObject = (CObject*)pClosestEntity; - pObject->ObjectCreatedBy = MISSION_OBJECT; - SET_INTEGER_PARAM(0, CPools::GetObjectPool()->GetIndex(pObject)); - } else { - SET_INTEGER_PARAM(0, -1); - } - StoreParameters(&m_nIp, 1); - return 0; -*/ - } - /* - case COMMAND_PLACE_OBJECT_RELATIVE_TO_OBJECT: - { - CollectParameters(&m_nIp, 5); - CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pObject); - CObject* pTarget = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(1)); - script_assert(pTarget); - CVector offset = GET_VECTOR_PARAM(2); - CPhysical::PlacePhysicalRelativeToOtherPhysical(pTarget, pObject, offset); + script_assert(false && "TODO_OR_CHECK_todo__comm_1110"); return 0; } - */ - case COMMAND_SET_ALL_OCCUPANTS_OF_CAR_LEAVE_CAR: + case todo__comm_1111: { - CollectParameters(&m_nIp, 1); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - CCarAI::TellOccupantsToLeaveCar(pVehicle); + script_assert(false && "TODO_OR_CHECK_todo__comm_1111"); return 0; } - case COMMAND_SET_INTERPOLATION_PARAMETERS: - CollectParameters(&m_nIp, 2); - TheCamera.SetParametersForScriptInterpolation(GET_FLOAT_PARAM(0), 100.0f - GET_FLOAT_PARAM(0), GET_INTEGER_PARAM(1)); - return 0; - /* - case COMMAND_GET_CLOSEST_CAR_NODE_WITH_HEADING_TOWARDS_POINT: + case todo__comm_1112: { - CollectParameters(&m_nIp, 5); - CVector pos = GET_VECTOR_PARAM(0); - if (pos.z <= MAP_Z_LOW_LIMIT) - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - float destX = GET_FLOAT_PARAM(3); - float destY = GET_FLOAT_PARAM(4); - int32 nid = ThePaths.FindNodeClosestToCoors(pos, 0, 999999.9f, true, true); - CPathNode* pNode = &ThePaths.m_pathNodes[nid]; - SET_VECTOR_PARAM(0, pNode->GetPosition()); - SET_FLOAT_PARAM(3, ThePaths.FindNodeOrientationForCarPlacementFacingDestination(nid, destX, destY, true)); - StoreParameters(&m_nIp, 4); + script_assert(false && "TODO_OR_CHECK_todo__comm_1112"); return 0; } - case COMMAND_GET_CLOSEST_CAR_NODE_WITH_HEADING_AWAY_POINT: + case todo__comm_1113: { - CollectParameters(&m_nIp, 5); - CVector pos = GET_VECTOR_PARAM(0); - if (pos.z <= MAP_Z_LOW_LIMIT) - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - float destX = GET_FLOAT_PARAM(3); - float destY = GET_FLOAT_PARAM(4); - int32 nid = ThePaths.FindNodeClosestToCoors(pos, 0, 999999.9f, true, true); - CPathNode* pNode = &ThePaths.m_pathNodes[nid]; - SET_VECTOR_PARAM(0, pNode->GetPosition()); - SET_FLOAT_PARAM(3, ThePaths.FindNodeOrientationForCarPlacementFacingDestination(nid, destX, destY, false)); - StoreParameters(&m_nIp, 4); + script_assert(false && "TODO_OR_CHECK_todo__comm_1113"); return 0; } - */ - case COMMAND_GET_DEBUG_CAMERA_POINT_AT: - SET_VECTOR_PARAM(0, TheCamera.Cams[2].Source + TheCamera.Cams[2].Front); - StoreParameters(&m_nIp, 3); - return 0; - case COMMAND_ATTACH_CHAR_TO_CAR: + case todo__comm_1114: { - CollectParameters(&m_nIp, 8); - CPed *pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - CVehicle *pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); - pPed->AttachPedToEntity(pVehicle, GET_VECTOR_PARAM(2), GET_INTEGER_PARAM(5), DEGTORAD(GET_FLOAT_PARAM(6)), (eWeaponType)GET_INTEGER_PARAM(7)); + script_assert(false && "TODO_OR_CHECK_todo__comm_1114"); return 0; } - case COMMAND_DETACH_CHAR_FROM_CAR: + case todo__comm_1115: { - CollectParameters(&m_nIp, 1); - CPed *pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - if (pPed && pPed->m_attachedTo) { - pPed->DettachPedFromEntity(); - pPed->bIsAimingGun = false; - } + script_assert(false && "TODO_OR_CHECK_todo__comm_1115"); return 0; } - case COMMAND_SET_CAR_CHANGE_LANE: // for some reason changed in SA + case todo__comm_1116: { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - pVehicle->AutoPilot.m_bStayInFastLane = !GET_INTEGER_PARAM(1); + script_assert(false && "TODO_OR_CHECK_todo__comm_1116"); return 0; } - case COMMAND_CLEAR_CHAR_LAST_WEAPON_DAMAGE: + case todo__comm_1117: { - CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - if (pPed) - pPed->m_lastWepDam = -1; - else - debug("CLEAR_CHAR_LAST_WEAPON_DAMAGE - Character doesn't exist\n"); + script_assert(false && "TODO_OR_CHECK_todo__comm_1117"); return 0; } - case COMMAND_CLEAR_CAR_LAST_WEAPON_DAMAGE: + case todo__comm_1118: { - CollectParameters(&m_nIp, 1); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - if (pVehicle) - pVehicle->m_nLastWeaponDamage = -1; - else - debug("CLEAR_CAR_LAST_WEAPON_DAMAGE - Vehicle doesn't exist\n"); + script_assert(false && "TODO_OR_CHECK_todo__comm_1118"); return 0; } - case COMMAND_GET_RANDOM_COP_IN_AREA: + case todo__comm_1119: { - CollectParameters(&m_nIp, 9); - int ped_handle = -1; - CVector pos = FindPlayerCoors(); - float x1 = GET_FLOAT_PARAM(0); - float y1 = GET_FLOAT_PARAM(1); - float x2 = GET_FLOAT_PARAM(2); - float y2 = GET_FLOAT_PARAM(3); - int i = CPools::GetPedPool()->GetSize(); - while (--i && ped_handle == -1) { - CPed* pPed = CPools::GetPedPool()->GetSlot(i); - if (!pPed) - continue; - if (CTheScripts::LastRandomPedId == CPools::GetPedPool()->GetIndex(pPed)) - continue; - if (pPed->m_nPedType != PEDTYPE_COP) - continue; - if (!ThisIsAValidRandomCop(pPed->GetModelIndex(), GET_INTEGER_PARAM(4), GET_INTEGER_PARAM(5), GET_INTEGER_PARAM(6), GET_INTEGER_PARAM(7), GET_INTEGER_PARAM(8))) - continue; - if (pPed->CharCreatedBy != RANDOM_CHAR) - continue; - if (!pPed->IsPedInControl() && pPed->GetPedState() != PED_DRIVING && pPed->GetPedState() != PED_ABSEIL) - continue; - if (pPed->bRemoveFromWorld) - continue; - if (pPed->bFadeOut) - continue; - if (pPed->bIsLeader || pPed->m_leader) - continue; - if (!pPed->IsWithinArea(x1, y1, x2, y2)) - continue; - if (pos.z - COP_PED_FIND_Z_OFFSET > pPed->GetPosition().z) - continue; - if (pos.z + COP_PED_FIND_Z_OFFSET < pPed->GetPosition().z) - continue; - ped_handle = CPools::GetPedPool()->GetIndex(pPed); - CTheScripts::LastRandomPedId = ped_handle; - pPed->CharCreatedBy = MISSION_CHAR; - pPed->bRespondsToThreats = false; - ++CPopulation::ms_nTotalMissionPeds; - if (m_bIsMissionScript) - CTheScripts::MissionCleanUp.AddEntityToList(ped_handle, CLEANUP_CHAR); - } - SET_INTEGER_PARAM(0, ped_handle); - StoreParameters(&m_nIp, 1); + script_assert(false && "TODO_OR_CHECK_todo__comm_1119"); return 0; } - /* - case COMMAND_GET_RANDOM_COP_IN_ZONE: + case todo__comm_1120: { - char zone[KEY_LENGTH_IN_SCRIPT]; - strncpy(zone, (const char*)&CTheScripts::ScriptSpace[m_nIp], KEY_LENGTH_IN_SCRIPT); - int nZone = CTheZones::FindZoneByLabelAndReturnIndex(zone, ZONE_DEFAULT); - if (nZone != -1) - m_nIp += KEY_LENGTH_IN_SCRIPT; - CZone* pZone = CTheZones::GetNavigationZone(nZone); - int ped_handle = -1; - CVector pos = FindPlayerCoors(); - int i = CPools::GetPedPool()->GetSize(); - while (--i && ped_handle == -1) { - CPed* pPed = CPools::GetPedPool()->GetSlot(i); - if (!pPed) - continue; - if (CTheScripts::LastRandomPedId == CPools::GetPedPool()->GetIndex(pPed)) - continue; - if (pPed->m_nPedType != PEDTYPE_COP) - continue; - if (pPed->CharCreatedBy != RANDOM_CHAR) - continue; - if (!pPed->IsPedInControl() && pPed->GetPedState() != PED_DRIVING) - continue; - if (pPed->bRemoveFromWorld) - continue; - if (pPed->bFadeOut) - continue; - if (pPed->bIsLeader || pPed->m_leader) - continue; - if (!CTheZones::PointLiesWithinZone(&pPed->GetPosition(), pZone)) - continue; - if (pos.z - COP_PED_FIND_Z_OFFSET > pPed->GetPosition().z) - continue; - if (pos.z + COP_PED_FIND_Z_OFFSET < pPed->GetPosition().z) - continue; - ped_handle = CPools::GetPedPool()->GetIndex(pPed); - CTheScripts::LastRandomPedId = ped_handle; - pPed->CharCreatedBy = MISSION_CHAR; - pPed->bRespondsToThreats = false; - ++CPopulation::ms_nTotalMissionPeds; - if (m_bIsMissionScript) - CTheScripts::MissionCleanUp.AddEntityToList(ped_handle, CLEANUP_CHAR); - } - SET_INTEGER_PARAM(0, ped_handle); - StoreParameters(&m_nIp, 1); + script_assert(false && "TODO_OR_CHECK_todo__comm_1120"); return 0; } - */ - case COMMAND_SET_CHAR_OBJ_FLEE_CAR: + case todo__comm_1121: { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); - script_assert(pVehicle); - pPed->bScriptObjectiveCompleted = false; - pPed->SetObjective(OBJECTIVE_FLEE_CAR, pVehicle); + script_assert(false && "TODO_OR_CHECK_todo__comm_1121"); return 0; } - case COMMAND_GET_DRIVER_OF_CAR: + case todo__comm_1122: { - CollectParameters(&m_nIp, 1); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - CPed* pDriver = pVehicle->pDriver; - if (pDriver) - SET_INTEGER_PARAM(0, CPools::GetPedPool()->GetIndex(pDriver)); - else - SET_INTEGER_PARAM(0, -1); - StoreParameters(&m_nIp, 1); + script_assert(false && "TODO_OR_CHECK_todo__comm_1122"); return 0; } - case COMMAND_GET_NUMBER_OF_FOLLOWERS: + case todo__comm_1123: { - CollectParameters(&m_nIp, 1); - CPed* pLeader = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pLeader); - int total = 0; - int i = CPools::GetPedPool()->GetSize(); - while (--i) { - CPed* pPed = CPools::GetPedPool()->GetSlot(i); - if (!pPed) - continue; - if (pPed->m_leader == pLeader) - total++; - } - SET_INTEGER_PARAM(0, total); - StoreParameters(&m_nIp, 1); + script_assert(false && "TODO_OR_CHECK_todo__comm_1123"); return 0; } - case COMMAND_GIVE_REMOTE_CONTROLLED_MODEL_TO_PLAYER: + case todo__comm_1124: { - CollectParameters(&m_nIp, 6); - 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)), GET_INTEGER_PARAM(5)); + script_assert(false && "TODO_OR_CHECK_todo__comm_1124"); return 0; } - case COMMAND_GET_CURRENT_PLAYER_WEAPON: + case todo__comm_1125: { - CollectParameters(&m_nIp, 1); - CPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(pPed); - SET_INTEGER_PARAM(0, pPed->GetWeapon()->m_eWeaponType); - StoreParameters(&m_nIp, 1); + script_assert(false && "TODO_OR_CHECK_todo__comm_1125"); return 0; } - case COMMAND_GET_CURRENT_CHAR_WEAPON: + case todo__comm_1126: { - CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - SET_INTEGER_PARAM(0, pPed->GetWeapon()->m_eWeaponType); - StoreParameters(&m_nIp, 1); + script_assert(false && "TODO_OR_CHECK_todo__comm_1126"); return 0; } - case COMMAND_LOCATE_CHAR_ANY_MEANS_OBJECT_2D: - case COMMAND_LOCATE_CHAR_ON_FOOT_OBJECT_2D: - case COMMAND_LOCATE_CHAR_IN_CAR_OBJECT_2D: - case COMMAND_LOCATE_CHAR_ANY_MEANS_OBJECT_3D: - case COMMAND_LOCATE_CHAR_ON_FOOT_OBJECT_3D: - case COMMAND_LOCATE_CHAR_IN_CAR_OBJECT_3D: - LocateCharObjectCommand(command, &m_nIp); - return 0; - case COMMAND_SET_CAR_TEMP_ACTION: + case todo__comm_1127: { - CollectParameters(&m_nIp, 3); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - pVehicle->AutoPilot.m_nTempAction = (uint8)GET_INTEGER_PARAM(1); - pVehicle->AutoPilot.m_nTimeTempAction = CTimer::GetTimeInMilliseconds() + GET_INTEGER_PARAM(2); + script_assert(false && "TODO_OR_CHECK_todo__comm_1127"); return 0; } - /* - case COMMAND_SET_CAR_HANDBRAKE_TURN_RIGHT: + case todo__comm_1128: { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - pVehicle->AutoPilot.m_nTempAction = TEMPACT_HANDBRAKETURNRIGHT; - pVehicle->AutoPilot.m_nTimeTempAction = CTimer::GetTimeInMilliseconds() + GET_INTEGER_PARAM(1); + script_assert(false && "TODO_OR_CHECK_todo__comm_1128"); return 0; } - case COMMAND_SET_CAR_HANDBRAKE_STOP: + case todo__comm_1129: { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - pVehicle->AutoPilot.m_nTempAction = TEMPACT_HANDBRAKESTRAIGHT; - pVehicle->AutoPilot.m_nTimeTempAction = CTimer::GetTimeInMilliseconds() + GET_INTEGER_PARAM(1); + script_assert(false && "TODO_OR_CHECK_todo__comm_1129"); return 0; } - */ - case COMMAND_IS_CHAR_ON_ANY_BIKE: + case todo__comm_1130: { - CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - UpdateCompareFlag(pPed->bInVehicle&& pPed->m_pMyVehicle->GetVehicleAppearance() == VEHICLE_APPEARANCE_BIKE); + script_assert(false && "TODO_OR_CHECK_todo__comm_1130"); return 0; } - /* - case COMMAND_LOCATE_SNIPER_BULLET_2D: - case COMMAND_LOCATE_SNIPER_BULLET_3D: - LocateSniperBulletCommand(command, &m_nIp); - return 0; - case COMMAND_GET_NUMBER_OF_SEATS_IN_MODEL: - CollectParameters(&m_nIp, 1); - SET_INTEGER_PARAM(0, CVehicleModelInfo::GetMaximumNumberOfPassengersFromNumberOfDoors(GET_INTEGER_PARAM(0)) + 1); - StoreParameters(&m_nIp, 1); - return 0; - */ - case COMMAND_IS_PLAYER_ON_ANY_BIKE: + case todo__comm_1131: { - CollectParameters(&m_nIp, 1); - CPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(pPed); - UpdateCompareFlag(pPed->bInVehicle && pPed->m_pMyVehicle->GetVehicleAppearance() == VEHICLE_APPEARANCE_BIKE); + script_assert(false && "TODO_OR_CHECK_todo__comm_1131"); return 0; } - /* - case COMMAND_IS_CHAR_LYING_DOWN: + case todo__comm_1132: { - CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - UpdateCompareFlag(pPed->bFallenDown); + script_assert(false && "TODO_OR_CHECK_todo__comm_1132"); return 0; } - */ - case COMMAND_CAN_CHAR_SEE_DEAD_CHAR: + case todo__comm_1133: { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - int pedtype = GET_INTEGER_PARAM(1); - bool can = false; - for (int i = 0; i < pPed->m_numNearPeds; i++) { - CPed* pTestPed = pPed->m_nearPeds[i]; - if (pTestPed->m_fHealth <= 0.0f && pTestPed->m_nPedType == pedtype && pPed->OurPedCanSeeThisOne(pTestPed)) - can = true; - } - UpdateCompareFlag(can); + script_assert(false && "TODO_OR_CHECK_todo__comm_1133"); return 0; } - case COMMAND_SET_ENTER_CAR_RANGE_MULTIPLIER: - CollectParameters(&m_nIp, 1); - CPed::nEnterCarRangeMultiplier = GET_FLOAT_PARAM(0); - return 0; - case COMMAND_SET_THREAT_REACTION_RANGE_MULTIPLIER: - CollectParameters(&m_nIp, 1); - CPed::nThreatReactionRangeMultiplier = GET_FLOAT_PARAM(0); - if (CPed::nThreatReactionRangeMultiplier < 1) - CPed::nThreatReactionRangeMultiplier = 1; - return 0; - case COMMAND_SET_CHAR_CEASE_ATTACK_TIMER: + case todo__comm_1134: { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - pPed->m_ceaseAttackTimer = GET_INTEGER_PARAM(1); + script_assert(false && "TODO_OR_CHECK_todo__comm_1134"); return 0; } - case COMMAND_GET_REMOTE_CONTROLLED_CAR: + case todo__comm_1135: { - CollectParameters(&m_nIp, 1); - CVehicle* pVehicle = CWorld::Players[GET_INTEGER_PARAM(0)].m_pRemoteVehicle; - if (pVehicle) - SET_INTEGER_PARAM(0, CPools::GetVehiclePool()->GetIndex(pVehicle)); - else - SET_INTEGER_PARAM(0, -1); - StoreParameters(&m_nIp, 1); + script_assert(false && "TODO_OR_CHECK_todo__comm_1135"); return 0; } - case COMMAND_IS_PC_VERSION: -#ifdef GTA_PC - UpdateCompareFlag(true); -#else - UpdateCompareFlag(false); -#endif - return 0; - //case COMMAND_REPLAY: - //case COMMAND_IS_REPLAY_PLAYING: - case COMMAND_IS_MODEL_AVAILABLE: - CollectParameters(&m_nIp, 1); - UpdateCompareFlag(CModelInfo::GetModelInfo(GET_INTEGER_PARAM(0)) != nil); - return 0; - case COMMAND_SHUT_CHAR_UP: - CollectParameters(&m_nIp, 2); - DMAudio.SetPedTalkingStatus(CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)), GET_INTEGER_PARAM(1) == 0); - return 0; - case COMMAND_SET_ENABLE_RC_DETONATE: - CollectParameters(&m_nIp, 1); - CVehicle::bDisableRemoteDetonation = !GET_INTEGER_PARAM(0); - return 0; - case COMMAND_SET_CAR_RANDOM_ROUTE_SEED: + case todo__comm_1136: { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - pVehicle->m_nRouteSeed = GET_INTEGER_PARAM(1); + script_assert(false && "TODO_OR_CHECK_todo__comm_1136"); return 0; } - case COMMAND_IS_ANY_PICKUP_AT_COORDS: + case todo__comm_1137: { - CollectParameters(&m_nIp, 4); - CVector pos = GET_VECTOR_PARAM(0); - CRunningScript::UpdateCompareFlag(CPickups::TestForPickupsInBubble(pos, GET_FLOAT_PARAM(3))); + script_assert(false && "TODO_OR_CHECK_todo__comm_1137"); return 0; } - //case COMMAND_GET_FIRST_PICKUP_COORDS: - //case COMMAND_GET_NEXT_PICKUP_COORDS: - case COMMAND_REMOVE_ALL_CHAR_WEAPONS: + case todo__comm_1138: { - CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - pPed->ClearWeapons(); + script_assert(false && "TODO_OR_CHECK_todo__comm_1138"); return 0; } - case COMMAND_HAS_PLAYER_GOT_WEAPON: + case todo__comm_1139: { - CollectParameters(&m_nIp, 2); - CPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(pPed); - bool bFound = false; - for (int i = 0; i < TOTAL_WEAPON_SLOTS; i++) { - if (pPed->GetWeapon(i).m_eWeaponType == GET_INTEGER_PARAM(1)) { - bFound = true; - break; - } - } - UpdateCompareFlag(bFound); + script_assert(false && "TODO_OR_CHECK_todo__comm_1139"); return 0; } - case COMMAND_HAS_CHAR_GOT_WEAPON: + case todo__comm_1140: { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - bool bFound = false; - for (int i = 0; i < TOTAL_WEAPON_SLOTS; i++) { - if (pPed->GetWeapon(i).m_eWeaponType == GET_INTEGER_PARAM(1)) { - bFound = true; - break; - } - } - UpdateCompareFlag(bFound); + script_assert(false && "TODO_OR_CHECK_todo__comm_1140"); return 0; } - //case COMMAND_IS_PLAYER_FACING_CHAR: - case COMMAND_SET_TANK_DETONATE_CARS: + case todo__comm_1141: { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle && pVehicle->m_vehType == VEHICLE_TYPE_CAR); - ((CAutomobile*)pVehicle)->bTankDetonateCars = GET_INTEGER_PARAM(1); + script_assert(false && "TODO_OR_CHECK_todo__comm_1141"); return 0; } - case COMMAND_GET_POSITION_OF_ANALOGUE_STICKS: + case todo__comm_1142: { - CollectParameters(&m_nIp, 1); - CPad* pPad = CPad::GetPad(GET_INTEGER_PARAM(0)); - SET_INTEGER_PARAM(0, pPad->NewState.LeftStickX); - SET_INTEGER_PARAM(1, pPad->NewState.LeftStickY); - SET_INTEGER_PARAM(2, pPad->NewState.RightStickX); - SET_INTEGER_PARAM(3, pPad->NewState.RightStickY); - StoreParameters(&m_nIp, 4); + script_assert(false && "TODO_OR_CHECK_todo__comm_1142"); return 0; } - case COMMAND_IS_CAR_ON_FIRE: + case todo__comm_1143: { - CollectParameters(&m_nIp, 1); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - bool bOnFire = false; - if (pVehicle->m_pCarFire) - bOnFire = true; - if (pVehicle->m_vehType == VEHICLE_TYPE_CAR && ((CAutomobile*)pVehicle)->Damage.GetEngineStatus() >= ENGINE_STATUS_ON_FIRE) - bOnFire = true; - if (pVehicle->m_fHealth < 250.0f) - bOnFire = true; - UpdateCompareFlag(bOnFire); + script_assert(false && "TODO_OR_CHECK_todo__comm_1143"); return 0; } - case COMMAND_IS_CAR_TYRE_BURST: + case todo__comm_1144: { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - bool bIsBurst = false; - CBike* pBike = (CBike*)pVehicle; - if (pVehicle->IsBike()) { - if (GET_INTEGER_PARAM(1) == 4) { - for (int i = 0; i < 2; i++) { - if (pBike->m_wheelStatus[i] == WHEEL_STATUS_BURST) - bIsBurst = true; - } - } - else { - if (GET_INTEGER_PARAM(1) == 2) - SET_INTEGER_PARAM(1, 0); - if (GET_INTEGER_PARAM(1) == 3) - SET_INTEGER_PARAM(1, 1); - bIsBurst = pBike->m_wheelStatus[GET_INTEGER_PARAM(1)] == WHEEL_STATUS_BURST; - } - } - else { - CAutomobile* pCar = (CAutomobile*)pVehicle; - if (GET_INTEGER_PARAM(1) == 4) { - for (int i = 0; i < 4; i++) { - if (pCar->Damage.GetWheelStatus(i) == WHEEL_STATUS_BURST) - bIsBurst = true; - } - } - else - bIsBurst = pCar->Damage.GetWheelStatus(GET_INTEGER_PARAM(1) == WHEEL_STATUS_BURST); - } - UpdateCompareFlag(bIsBurst); + script_assert(false && "TODO_OR_CHECK_todo__comm_1144"); return 0; } - //case COMMAND_SET_CAR_DRIVE_STRAIGHT_AHEAD: - //case COMMAND_SET_CAR_WAIT: - //case COMMAND_IS_PLAYER_STANDING_ON_A_VEHICLE: - //case COMMAND_IS_PLAYER_FOOT_DOWN: - //case COMMAND_IS_CHAR_FOOT_DOWN: - case COMMAND_INITIALISE_OBJECT_PATH: { - CollectParameters(&m_nIp, 2); - int32 counter = 0; - while (counter < 3 && CScriptPaths::aArray[counter].m_state != SCRIPT_PATH_DISABLED) { - counter++; - } - CScriptPaths::aArray[counter].InitialiseOne(GET_INTEGER_PARAM(0), GET_FLOAT_PARAM(1)); - SET_INTEGER_PARAM(0, counter); - StoreParameters(&m_nIp, 1); + case todo__comm_1145: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1145"); return 0; } - case COMMAND_START_OBJECT_ON_PATH: + case todo__comm_1146: { - CollectParameters(&m_nIp, 2); - CObject *pObj = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); - assert(pObj); - CScriptPaths::aArray[GET_INTEGER_PARAM(1)].SetObjectToControl(pObj); + script_assert(false && "TODO_OR_CHECK_todo__comm_1146"); return 0; } - case COMMAND_SET_OBJECT_PATH_SPEED: + case todo__comm_1147: { - CollectParameters(&m_nIp, 2); - CScriptPaths::aArray[GET_INTEGER_PARAM(0)].m_fSpeed = GET_FLOAT_PARAM(1); + script_assert(false && "TODO_OR_CHECK_todo__comm_1147"); return 0; } - case COMMAND_SET_OBJECT_PATH_POSITION: + case todo__comm_1148: { - CollectParameters(&m_nIp, 2); - CScriptPaths::aArray[GET_INTEGER_PARAM(0)].m_fPosition = GET_FLOAT_PARAM(1); + script_assert(false && "TODO_OR_CHECK_todo__comm_1148"); return 0; } - //case COMMAND_GET_OBJECT_DISTANCE_ALONG_PATH: - case COMMAND_CLEAR_OBJECT_PATH: + case todo__comm_1149: { - CollectParameters(&m_nIp, 1); - CScriptPaths::aArray[GET_INTEGER_PARAM(0)].Clear(); + script_assert(false && "TODO_OR_CHECK_todo__comm_1149"); return 0; } - case COMMAND_HELI_GOTO_COORDS: + case todo__comm_1150: { - CollectParameters(&m_nIp, 5); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle && pVehicle->GetVehicleAppearance() == VEHICLE_APPEARANCE_HELI); - ((CAutomobile*)pVehicle)->TellHeliToGoToCoors(GET_FLOAT_PARAM(1), GET_FLOAT_PARAM(2), GET_FLOAT_PARAM(3), GET_INTEGER_PARAM(4)); + script_assert(false && "TODO_OR_CHECK_todo__comm_1150"); return 0; } - case COMMAND_IS_INT_VAR_EQUAL_TO_CONSTANT: + case todo__comm_1151: { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - CollectParameters(&m_nIp, 1); - UpdateCompareFlag(*ptr == GET_INTEGER_PARAM(0)); + script_assert(false && "TODO_OR_CHECK_todo__comm_1151"); return 0; } - case COMMAND_IS_INT_LVAR_EQUAL_TO_CONSTANT: + case todo__comm_1152: { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - CollectParameters(&m_nIp, 1); - UpdateCompareFlag(*ptr == GET_INTEGER_PARAM(0)); + script_assert(false && "TODO_OR_CHECK_todo__comm_1152"); return 0; } - case COMMAND_GET_DEAD_CHAR_PICKUP_COORDS: + case todo__comm_1153: { - CollectParameters(&m_nIp, 1); - CPed *pTarget = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - CVector pos; - pTarget->CreateDeadPedPickupCoors(&pos.x, &pos.y, &pos.z); - SET_VECTOR_PARAM(0, pos); - StoreParameters(&m_nIp, 3); + script_assert(false && "TODO_OR_CHECK_todo__comm_1153"); return 0; } - case COMMAND_CREATE_PROTECTION_PICKUP: + case todo__comm_1154: { - CollectParameters(&m_nIp, 5); - CVector pos = GET_VECTOR_PARAM(0); - if (pos.z <= MAP_Z_LOW_LIMIT) - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y) + PICKUP_PLACEMENT_OFFSET; - CPickups::GetActualPickupIndex(CollectNextParameterWithoutIncreasingPC(m_nIp)); - SET_INTEGER_PARAM(0, CPickups::GenerateNewOne(pos, MI_PICKUP_REVENUE, PICKUP_ASSET_REVENUE, GET_INTEGER_PARAM(3), GET_INTEGER_PARAM(4))); // TODO: gpModelIndices - StoreParameters(&m_nIp, 1); + script_assert(false && "TODO_OR_CHECK_todo__comm_1154"); return 0; } - /* - case COMMAND_IS_CHAR_IN_ANY_BOAT: + case todo__comm_1155: { - CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - UpdateCompareFlag(pPed->bInVehicle && pPed->m_pMyVehicle->GetVehicleAppearance() == VEHICLE_APPEARANCE_BOAT); + script_assert(false && "TODO_OR_CHECK_todo__comm_1155"); return 0; } - */ - case COMMAND_IS_PLAYER_IN_ANY_BOAT: + case todo__comm_1156: { - CollectParameters(&m_nIp, 1); - CPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(pPed); - UpdateCompareFlag(pPed->bInVehicle && pPed->m_pMyVehicle->GetVehicleAppearance() == VEHICLE_APPEARANCE_BOAT); + script_assert(false && "TODO_OR_CHECK_todo__comm_1156"); return 0; } - /* - case COMMAND_IS_CHAR_IN_ANY_HELI: + case todo__comm_1157: { - CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - UpdateCompareFlag(pPed->bInVehicle && pPed->m_pMyVehicle->GetVehicleAppearance() == VEHICLE_APPEARANCE_HELI); + script_assert(false && "TODO_OR_CHECK_todo__comm_1157"); return 0; } - */ - case COMMAND_IS_PLAYER_IN_ANY_HELI: + case todo__comm_1158: { - CollectParameters(&m_nIp, 1); - CPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(pPed); - UpdateCompareFlag(pPed->bInVehicle && pPed->m_pMyVehicle->GetVehicleAppearance() == VEHICLE_APPEARANCE_HELI); + script_assert(false && "TODO_OR_CHECK_todo__comm_1158"); return 0; } - /* - case COMMAND_IS_CHAR_IN_ANY_PLANE: + case todo__comm_1159: { - CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - UpdateCompareFlag(pPed->bInVehicle && pPed->m_pMyVehicle->GetVehicleAppearance() == VEHICLE_APPEARANCE_PLANE); + script_assert(false && "TODO_OR_CHECK_todo__comm_1159"); return 0; } - */ - case COMMAND_IS_PLAYER_IN_ANY_PLANE: + case todo__comm_1160: { - CollectParameters(&m_nIp, 1); - CPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(pPed); - UpdateCompareFlag(pPed->bInVehicle && pPed->m_pMyVehicle->GetVehicleAppearance() == VEHICLE_APPEARANCE_HELI); + script_assert(false && "TODO_OR_CHECK_todo__comm_1160"); return 0; } - case COMMAND_IS_CHAR_IN_WATER: + case todo__comm_1161: { - CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - UpdateCompareFlag(pPed && pPed->bIsInWater); + script_assert(false && "TODO_OR_CHECK_todo__comm_1161"); return 0; } - case COMMAND_SET_VAR_INT_TO_CONSTANT: + case todo__comm_1162: { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - CollectParameters(&m_nIp, 1); - *ptr = GET_INTEGER_PARAM(0); + script_assert(false && "TODO_OR_CHECK_todo__comm_1162"); return 0; } - case COMMAND_SET_LVAR_INT_TO_CONSTANT: + case todo__comm_1163: { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - CollectParameters(&m_nIp, 1); - *ptr = GET_INTEGER_PARAM(0); + script_assert(false && "TODO_OR_CHECK_todo__comm_1163"); + return 0; + } + case todo__comm_1164: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1164"); + return 0; + } + case todo__comm_1165: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1165"); + return 0; + } + case todo__comm_1166: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1166"); + return 0; + } + case todo__comm_1167: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1167"); + return 0; + } + case todo__comm_1168: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1168"); + return 0; + } + case todo__comm_1169: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1169"); + return 0; + } + case todo__comm_1170: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1170"); + return 0; + } + case todo__comm_1171: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1171"); + return 0; + } + case todo__comm_1172: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1172"); + return 0; + } + case todo__comm_1173: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1173"); + return 0; + } + case todo__comm_1174: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1174"); + return 0; + } + case todo__comm_1175: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1175"); + return 0; + } + case todo__comm_1176: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1176"); + return 0; + } + case todo__comm_1177: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1177"); + return 0; + } + case todo__comm_1178: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1178"); + return 0; + } + case todo__comm_1179: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1179"); + return 0; + } + case todo__comm_1180: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1180"); + return 0; + } + case todo__comm_1181: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1181"); + return 0; + } + case todo__comm_1182: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1182"); + return 0; + } + case todo__comm_1183: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1183"); + return 0; + } + case todo__comm_1184: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1184"); + return 0; + } + case todo__comm_1185: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1185"); + return 0; + } + case todo__comm_1186: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1186"); + return 0; + } + case todo__comm_1187: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1187"); + return 0; + } + case todo__comm_1188: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1188"); + return 0; + } + case todo__comm_1189: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1189"); + return 0; + } + case todo__comm_1190: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1190"); + return 0; + } + case todo__comm_1191: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1191"); + return 0; + } + case todo__comm_1192: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1192"); + return 0; + } + case todo__comm_1193: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1193"); + return 0; + } + case todo__comm_1194: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1194"); + return 0; + } + case todo__comm_1195: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1195"); + return 0; + } + case todo__comm_1196: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1196"); + return 0; + } + case todo__comm_1197: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1197"); + return 0; + } + case todo__comm_1198: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1198"); + return 0; + } + case todo__comm_1199: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1199"); return 0; } default: diff --git a/src/control/Script7.cpp b/src/control/Script7.cpp index fb8e69fe..8c75ba86 100644 --- a/src/control/Script7.cpp +++ b/src/control/Script7.cpp @@ -37,743 +37,507 @@ int8 CRunningScript::ProcessCommands1200To1299(int32 command) { switch (command) { - case COMMAND_IS_INT_VAR_GREATER_THAN_CONSTANT: + case todo__comm_1200: { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - CollectParameters(&m_nIp, 1); - UpdateCompareFlag(*ptr > GET_INTEGER_PARAM(0)); + script_assert(false && "TODO_OR_CHECK_todo__comm_1200"); return 0; } - case COMMAND_IS_INT_LVAR_GREATER_THAN_CONSTANT: + case todo__comm_1201: { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - CollectParameters(&m_nIp, 1); - UpdateCompareFlag(*ptr > GET_INTEGER_PARAM(0)); + script_assert(false && "TODO_OR_CHECK_todo__comm_1201"); return 0; } - case COMMAND_IS_CONSTANT_GREATER_THAN_INT_VAR: + case todo__comm_1202: { - CollectParameters(&m_nIp, 1); - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - UpdateCompareFlag(GET_INTEGER_PARAM(0) > *ptr); + script_assert(false && "TODO_OR_CHECK_todo__comm_1202"); return 0; } - case COMMAND_IS_CONSTANT_GREATER_THAN_INT_LVAR: + case todo__comm_1203: { - CollectParameters(&m_nIp, 1); - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - UpdateCompareFlag(GET_INTEGER_PARAM(0) > *ptr); + script_assert(false && "TODO_OR_CHECK_todo__comm_1203"); return 0; } - case COMMAND_IS_INT_VAR_GREATER_OR_EQUAL_TO_CONSTANT: + case todo__comm_1204: { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - CollectParameters(&m_nIp, 1); - UpdateCompareFlag(*ptr >= GET_INTEGER_PARAM(0)); + script_assert(false && "TODO_OR_CHECK_todo__comm_1204"); return 0; } - case COMMAND_IS_INT_LVAR_GREATER_OR_EQUAL_TO_CONSTANT: + case todo__comm_1205: { - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - CollectParameters(&m_nIp, 1); - UpdateCompareFlag(*ptr >= GET_INTEGER_PARAM(0)); + script_assert(false && "TODO_OR_CHECK_todo__comm_1205"); return 0; } - case COMMAND_IS_CONSTANT_GREATER_OR_EQUAL_TO_INT_VAR: + case todo__comm_1206: { - CollectParameters(&m_nIp, 1); - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL); - UpdateCompareFlag(GET_INTEGER_PARAM(0) >= *ptr); + script_assert(false && "TODO_OR_CHECK_todo__comm_1206"); return 0; } - case COMMAND_IS_CONSTANT_GREATER_OR_EQUAL_TO_INT_LVAR: + case todo__comm_1207: { - CollectParameters(&m_nIp, 1); - int32* ptr = GetPointerToScriptVariable(&m_nIp, VAR_LOCAL); - UpdateCompareFlag(GET_INTEGER_PARAM(0) >= *ptr); + script_assert(false && "TODO_OR_CHECK_todo__comm_1207"); return 0; } - case COMMAND_GET_CHAR_WEAPON_IN_SLOT: + case todo__comm_1208: { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - SET_INTEGER_PARAM(0, pPed->GetWeapon(GET_INTEGER_PARAM(1) - 1).m_eWeaponType); - SET_INTEGER_PARAM(1, pPed->GetWeapon(GET_INTEGER_PARAM(1) - 1).m_nAmmoTotal); - SET_INTEGER_PARAM(2, CPickups::ModelForWeapon((eWeaponType)GET_INTEGER_PARAM(0))); - StoreParameters(&m_nIp, 3); + script_assert(false && "TODO_OR_CHECK_todo__comm_1208"); return 0; } - case COMMAND_GET_CLOSEST_STRAIGHT_ROAD: + case todo__comm_1209: { - CollectParameters(&m_nIp, 5); - int node1, node2; - float angle; - ThePaths.FindNodePairClosestToCoors(GET_VECTOR_PARAM(0), PATH_CAR, &node1, &node2, &angle, - GET_FLOAT_PARAM(3), GET_FLOAT_PARAM(4), true, true); - if (node1 == -1) { - for (int i = 0; i < 7; i++) - ScriptParams[i] = 0; - } - else { - SET_VECTOR_PARAM(0, ThePaths.FindNodeCoorsForScript(node1)); - SET_VECTOR_PARAM(3, ThePaths.FindNodeCoorsForScript(node2)); - SET_FLOAT_PARAM(6, angle); - } - StoreParameters(&m_nIp, 7); + script_assert(false && "TODO_OR_CHECK_todo__comm_1209"); return 0; } - case COMMAND_SET_CAR_FORWARD_SPEED: + case todo__comm_1210: { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - float speed = GET_FLOAT_PARAM(1) / GAME_SPEED_TO_CARAI_SPEED; - pVehicle->SetMoveSpeed(pVehicle->GetForward() * speed); - if (pVehicle->IsRealHeli() && pVehicle->IsCar()) - ((CAutomobile*)pVehicle)->m_aWheelSpeed[1] = 0.22f; + script_assert(false && "TODO_OR_CHECK_todo__comm_1210"); return 0; } - case COMMAND_SET_AREA_VISIBLE: - CollectParameters(&m_nIp, 1); - CGame::currArea = GET_INTEGER_PARAM(0); - CStreaming::RemoveBuildingsNotInArea(GET_INTEGER_PARAM(0)); - return 0; - case COMMAND_SET_CUTSCENE_ANIM_TO_LOOP: + case todo__comm_1211: { - char key[KEY_LENGTH_IN_SCRIPT]; - CTheScripts::ReadTextLabelFromScript(&m_nIp, key); - m_nIp += KEY_LENGTH_IN_SCRIPT; - CCutsceneMgr::SetCutsceneAnimToLoop(key); + script_assert(false && "TODO_OR_CHECK_todo__comm_1211"); return 0; } - case COMMAND_MARK_CAR_AS_CONVOY_CAR: + case todo__comm_1212: { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - pVehicle->bPartOfConvoy = GET_INTEGER_PARAM(1); + script_assert(false && "TODO_OR_CHECK_todo__comm_1212"); return 0; } - case COMMAND_RESET_HAVOC_CAUSED_BY_PLAYER: + case todo__comm_1213: { - CollectParameters(&m_nIp, 1); - CWorld::Players[GET_INTEGER_PARAM(0)].m_nHavocLevel = 0; + script_assert(false && "TODO_OR_CHECK_todo__comm_1213"); return 0; } - case COMMAND_GET_HAVOC_CAUSED_BY_PLAYER: + case todo__comm_1214: { - CollectParameters(&m_nIp, 1); - SET_INTEGER_PARAM(0, CWorld::Players[GET_INTEGER_PARAM(0)].m_nHavocLevel); - StoreParameters(&m_nIp, 1); + script_assert(false && "TODO_OR_CHECK_todo__comm_1214"); return 0; } - case COMMAND_CREATE_SCRIPT_ROADBLOCK: + case todo__comm_1215: { - CollectParameters(&m_nIp, 6); - CRoadBlocks::RegisterScriptRoadBlock(GET_VECTOR_PARAM(0), GET_VECTOR_PARAM(3)); + script_assert(false && "TODO_OR_CHECK_todo__comm_1215"); return 0; } - case COMMAND_CLEAR_ALL_SCRIPT_ROADBLOCKS: + case todo__comm_1216: { - CRoadBlocks::ClearScriptRoadBlocks(); + script_assert(false && "TODO_OR_CHECK_todo__comm_1216"); return 0; } - case COMMAND_SET_CHAR_OBJ_WALK_TO_CHAR: + case todo__comm_1217: { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - CPed* pTargetPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(1)); - script_assert(pTargetPed); - pPed->bScriptObjectiveCompleted = false; - pPed->SetObjective(OBJECTIVE_GOTO_CHAR_ON_FOOT_WALKING, pTargetPed); + script_assert(false && "TODO_OR_CHECK_todo__comm_1217"); return 0; } - //case COMMAND_IS_PICKUP_IN_ZONE: - case COMMAND_GET_OFFSET_FROM_CHAR_IN_WORLD_COORDS: + case todo__comm_1218: { - CollectParameters(&m_nIp, 4); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - CVector result = Multiply3x3(pPed->GetMatrix(), GET_VECTOR_PARAM(1)) + pPed->GetPosition(); - SET_VECTOR_PARAM(0, result); - StoreParameters(&m_nIp, 3); + script_assert(false && "TODO_OR_CHECK_todo__comm_1218"); return 0; } - case COMMAND_HAS_CHAR_BEEN_PHOTOGRAPHED: + case todo__comm_1219: { - CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - bool result = false; - if (pPed->bHasBeenPhotographed) { - result = true; - pPed->bHasBeenPhotographed = false; - } - UpdateCompareFlag(result); + script_assert(false && "TODO_OR_CHECK_todo__comm_1219"); return 0; } - case COMMAND_SET_CHAR_OBJ_AIM_GUN_AT_CHAR: + case todo__comm_1220: { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - CPed* pTargetPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(1)); - script_assert(pTargetPed); - pPed->bScriptObjectiveCompleted = false; - pPed->SetObjective(OBJECTIVE_AIM_GUN_AT, pTargetPed); + script_assert(false && "TODO_OR_CHECK_todo__comm_1220"); return 0; } - case COMMAND_SWITCH_SECURITY_CAMERA: + case todo__comm_1221: { - CollectParameters(&m_nIp, 1); - if (GET_INTEGER_PARAM(0) != 0) { - // TheCamera.MBlur.? = 3; TODO(LCS) - CSpecialFX::bVideoCam = true; - } - else { - // TheCamera.MBlur.Reset(); - CSpecialFX::bVideoCam = false; - } + script_assert(false && "TODO_OR_CHECK_todo__comm_1221"); return 0; } - //case COMMAND_IS_CHAR_IN_FLYING_VEHICLE: - case COMMAND_IS_PLAYER_IN_FLYING_VEHICLE: + case todo__comm_1222: { - CollectParameters(&m_nIp, 1); - CPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(pPed); - UpdateCompareFlag(pPed->bInVehicle && (pPed->m_pMyVehicle->GetVehicleAppearance() == VEHICLE_APPEARANCE_HELI || pPed->m_pMyVehicle->GetVehicleAppearance() == VEHICLE_APPEARANCE_PLANE)); + script_assert(false && "TODO_OR_CHECK_todo__comm_1222"); return 0; } - //case COMMAND_HAS_SONY_CD_BEEN_READ: - //case COMMAND_GET_NUMBER_OF_SONY_CDS_READ: - //case COMMAND_ADD_SHORT_RANGE_BLIP_FOR_COORD_OLD: - //case COMMAND_ADD_SHORT_RANGE_BLIP_FOR_COORD: - case COMMAND_ADD_SHORT_RANGE_SPRITE_BLIP_FOR_COORD: + case todo__comm_1223: { - CollectParameters(&m_nIp, 4); - CVector pos = GET_VECTOR_PARAM(0); - if (pos.z <= MAP_Z_LOW_LIMIT) - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - CRadar::GetActualBlipArrayIndex(CollectNextParameterWithoutIncreasingPC(m_nIp)); - int id = CRadar::SetShortRangeCoordBlip(BLIP_COORD, pos, 5, BLIP_DISPLAY_BOTH); - CRadar::SetBlipSprite(id, GET_INTEGER_PARAM(3)); - SET_INTEGER_PARAM(0, id); - StoreParameters(&m_nIp, 1); + script_assert(false && "TODO_OR_CHECK_todo__comm_1223"); return 0; } - case COMMAND_ADD_MONEY_SPENT_ON_CLOTHES: - CollectParameters(&m_nIp, 1); - //CStats::MoneySpentOnFashion(GET_INTEGER_PARAM(0)); - return 0; - - case COMMAND_SET_HELI_ORIENTATION: + case todo__comm_1224: { - CollectParameters(&m_nIp, 2); - CAutomobile* pHeli = (CAutomobile*)CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pHeli && pHeli->IsCar() && pHeli->IsRealHeli()); - float fAngle = DEGTORAD(GET_FLOAT_PARAM(1) - 90.0f); - while (fAngle < 0.0f) - fAngle += TWOPI; - while (fAngle > TWOPI) - fAngle -= TWOPI; - pHeli->SetHeliOrientation(fAngle); + script_assert(false && "TODO_OR_CHECK_todo__comm_1224"); return 0; } - case COMMAND_CLEAR_HELI_ORIENTATION: + case todo__comm_1225: { - CollectParameters(&m_nIp, 1); - CAutomobile* pHeli = (CAutomobile*)CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pHeli && pHeli->IsCar() && pHeli->IsRealHeli()); - pHeli->ClearHeliOrientation(); + script_assert(false && "TODO_OR_CHECK_todo__comm_1225"); return 0; } - case COMMAND_PLANE_GOTO_COORDS: + case todo__comm_1226: { - CollectParameters(&m_nIp, 5); - CAutomobile* pPlane = (CAutomobile*)CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPlane && pPlane->IsCar() && pPlane->IsRealPlane()); - pPlane->TellPlaneToGoToCoors(GET_FLOAT_PARAM(1), GET_FLOAT_PARAM(2), GET_FLOAT_PARAM(3), GET_INTEGER_PARAM(4)); + script_assert(false && "TODO_OR_CHECK_todo__comm_1226"); return 0; } - case COMMAND_GET_NTH_CLOSEST_CAR_NODE: + case todo__comm_1227: { - CollectParameters(&m_nIp, 4); - CVector pos = GET_VECTOR_PARAM(0); - if (pos.z <= MAP_Z_LOW_LIMIT) - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - SET_VECTOR_PARAM(0, ThePaths.FindNodeCoorsForScript(ThePaths.FindNthNodeClosestToCoors(pos, 0, 999999.9f, true, true, GET_INTEGER_PARAM(3) - 1))); - StoreParameters(&m_nIp, 3); + script_assert(false && "TODO_OR_CHECK_todo__comm_1227"); return 0; } - case COMMAND_GET_NTH_CLOSEST_CHAR_NODE: + case todo__comm_1228: { - CollectParameters(&m_nIp, 4); - CVector pos = GET_VECTOR_PARAM(0); - if (pos.z <= MAP_Z_LOW_LIMIT) - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - SET_VECTOR_PARAM(0, ThePaths.FindNodeCoorsForScript(ThePaths.FindNthNodeClosestToCoors(pos, 1, 999999.9f, true, true, GET_INTEGER_PARAM(3) - 1))); - StoreParameters(&m_nIp, 3); + script_assert(false && "TODO_OR_CHECK_todo__comm_1228"); return 0; } - case COMMAND_DRAW_WEAPONSHOP_CORONA: + case todo__comm_1229: { - CollectParameters(&m_nIp, 9); - CVector pos = GET_VECTOR_PARAM(0); - if (pos.z <= MAP_Z_LOW_LIMIT) - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - CCoronas::RegisterCorona((uintptr)this + m_nIp, GET_INTEGER_PARAM(6), GET_INTEGER_PARAM(7), GET_INTEGER_PARAM(8), 255, pos, -GET_FLOAT_PARAM(3), - 150.0f, GET_INTEGER_PARAM(4), GET_INTEGER_PARAM(5), 1, 0, 0, 0.0f, false, 0.2f); + script_assert(false && "TODO_OR_CHECK_todo__comm_1229"); return 0; } - case COMMAND_SET_ENABLE_RC_DETONATE_ON_CONTACT: + case todo__comm_1230: { - CollectParameters(&m_nIp, 1); - CVehicle::bDisableRemoteDetonationOnContact = (GET_INTEGER_PARAM(0) == 0); + script_assert(false && "TODO_OR_CHECK_todo__comm_1230"); return 0; } - case COMMAND_FREEZE_CHAR_POSITION: + case todo__comm_1231: { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - pPed->bIsFrozen = GET_INTEGER_PARAM(1); + script_assert(false && "TODO_OR_CHECK_todo__comm_1231"); return 0; } - case COMMAND_SET_CHAR_DROWNS_IN_WATER: + case todo__comm_1232: { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - pPed->bDrownsInWater = GET_INTEGER_PARAM(1); + script_assert(false && "TODO_OR_CHECK_todo__comm_1232"); return 0; } - case COMMAND_SET_OBJECT_RECORDS_COLLISIONS: + case todo__comm_1233: { - CollectParameters(&m_nIp, 2); - CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pObject); - pObject->bUseCollisionRecords = GET_INTEGER_PARAM(1); + script_assert(false && "TODO_OR_CHECK_todo__comm_1233"); return 0; } - case COMMAND_HAS_OBJECT_COLLIDED_WITH_ANYTHING: + case todo__comm_1234: { - CollectParameters(&m_nIp, 1); - CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pObject); - UpdateCompareFlag(pObject->m_nCollisionRecords != 0); + script_assert(false && "TODO_OR_CHECK_todo__comm_1234"); return 0; } - case COMMAND_REMOVE_RC_BUGGY: + case todo__comm_1235: { - CWorld::Players[CWorld::PlayerInFocus].BlowUpRCBuggy(false); + script_assert(false && "TODO_OR_CHECK_todo__comm_1235"); return 0; } - case COMMAND_HAS_PHOTOGRAPH_BEEN_TAKEN: - UpdateCompareFlag(CWeapon::bPhotographHasBeenTaken); - CWeapon::bPhotographHasBeenTaken = false; - return 0; - case COMMAND_GET_CHAR_ARMOUR: + case todo__comm_1236: { - CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - SET_INTEGER_PARAM(0, pPed->m_fArmour); - StoreParameters(&m_nIp, 1); + script_assert(false && "TODO_OR_CHECK_todo__comm_1236"); return 0; } - //case COMMAND_SET_CHAR_ARMOUR: - case COMMAND_SET_HELI_STABILISER: + case todo__comm_1237: { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - pVehicle->bHeliMinimumTilt = GET_INTEGER_PARAM(1); + script_assert(false && "TODO_OR_CHECK_todo__comm_1237"); return 0; } - case COMMAND_SET_CAR_STRAIGHT_LINE_DISTANCE: + case todo__comm_1238: { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - pVehicle->AutoPilot.m_nSwitchDistance = GET_INTEGER_PARAM(1); + script_assert(false && "TODO_OR_CHECK_todo__comm_1238"); return 0; } - case COMMAND_POP_CAR_BOOT: + case todo__comm_1239: { - CollectParameters(&m_nIp, 1); - CAutomobile* pCar = (CAutomobile*)CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pCar&& pCar->IsCar()); - pCar->PopBoot(); + script_assert(false && "TODO_OR_CHECK_todo__comm_1239"); return 0; } - case COMMAND_SHUT_PLAYER_UP: + case todo__comm_1240: { - CollectParameters(&m_nIp, 2); - DMAudio.ShutUpPlayerTalking(!!GET_INTEGER_PARAM(1)); + script_assert(false && "TODO_OR_CHECK_todo__comm_1240"); return 0; } - case COMMAND_SET_PLAYER_MOOD: + case todo__comm_1241: { - CollectParameters(&m_nIp, 3); - DMAudio.SetPlayersMood(GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2)); + script_assert(false && "TODO_OR_CHECK_todo__comm_1241"); return 0; } - case COMMAND_REQUEST_COLLISION: + case todo__comm_1242: { - CollectParameters(&m_nIp, 2); - CVector pos; - pos.x = GET_FLOAT_PARAM(0); - pos.y = GET_FLOAT_PARAM(1); - pos.z = 0.0f; - CColStore::RequestCollision(pos); + script_assert(false && "TODO_OR_CHECK_todo__comm_1242"); return 0; } - case COMMAND_LOCATE_OBJECT_2D: - case COMMAND_LOCATE_OBJECT_3D: - LocateObjectCommand(command, &m_nIp); - return 0; - case COMMAND_IS_OBJECT_IN_WATER: + case todo__comm_1243: { - CollectParameters(&m_nIp, 1); - CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); - UpdateCompareFlag(pObject && pObject->bIsInWater); + script_assert(false && "TODO_OR_CHECK_todo__comm_1243"); return 0; } - //case COMMAND_SET_CHAR_OBJ_STEAL_ANY_CAR_EVEN_MISSION_CAR: - case COMMAND_IS_OBJECT_IN_AREA_2D: - case COMMAND_IS_OBJECT_IN_AREA_3D: - ObjectInAreaCheckCommand(command, &m_nIp); - return 0; - case COMMAND_SET_CHAR_CROUCH: + case todo__comm_1244: { - CollectParameters(&m_nIp, 3); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - if (GET_INTEGER_PARAM(1)) { - pPed->bCrouchWhenShooting = true; - pPed->SetDuck(GET_INTEGER_PARAM(2), true); - } - else { - pPed->ClearDuck(true); - pPed->bCrouchWhenShooting = false; - } + script_assert(false && "TODO_OR_CHECK_todo__comm_1244"); return 0; } - case COMMAND_SET_ZONE_CIVILIAN_CAR_INFO: + case todo__comm_1245: { - char label[12]; - int16 carDensities[CCarCtrl::NUM_CAR_CLASSES] = { 0 }; - int16 boatDensities[CCarCtrl::NUM_BOAT_CLASSES] = { 0 }; - int i; + script_assert(false && "TODO_OR_CHECK_todo__comm_1245"); + return 0; + } + case todo__comm_1246: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1246"); + return 0; + } + case todo__comm_1247: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1247"); + return 0; + } + case todo__comm_1248: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1248"); + return 0; + } + case todo__comm_1249: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1249"); + return 0; + } + case todo__comm_1250: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1250"); + return 0; + } + case todo__comm_1251: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1251"); + return 0; + } + case todo__comm_1252: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1252"); + return 0; + } + case todo__comm_1253: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1253"); + return 0; + } + case todo__comm_1254: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1254"); + return 0; + } + case todo__comm_1255: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1255"); + return 0; + } + case todo__comm_1256: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1256"); + return 0; + } + case todo__comm_1257: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1257"); + return 0; + } + case todo__comm_1258: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1258"); + return 0; + } + case todo__comm_1259: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1259"); + return 0; + } + case todo__comm_1260: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1260"); + return 0; + } + case todo__comm_1261: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1261"); + return 0; + } + case todo__comm_1262: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1262"); + return 0; + } + case todo__comm_1263: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1263"); + return 0; + } + case todo__comm_1264: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1264"); + return 0; + } + case todo__comm_1265: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1265"); + return 0; + } + case todo__comm_1266: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1266"); + return 0; + } + case todo__comm_1267: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1267"); + return 0; + } + case todo__comm_1268: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1268"); + return 0; + } + case todo__comm_1269: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1269"); + return 0; + } + case todo__comm_1270: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1270"); + return 0; + } + case todo__comm_1271: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1271"); + return 0; + } + case todo__comm_1272: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1272"); + return 0; + } + case todo__comm_1273: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1273"); + return 0; + } + case todo__comm_1274: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1274"); + return 0; + } + case todo__comm_1275: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1275"); + return 0; + } + case todo__comm_1276: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1276"); + return 0; + } + case todo__comm_1277: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1277"); + return 0; + } + case todo__comm_1278: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1278"); + return 0; + } + case todo__comm_1279: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1279"); + return 0; + } + case todo__comm_1280: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1280"); + return 0; + } + case todo__comm_1281: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1281"); + return 0; + } + case todo__comm_1282: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1282"); + return 0; + } + case todo__comm_1283: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1283"); + return 0; + } + case todo__comm_1284: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1284"); + return 0; + } + case todo__comm_1285: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1285"); + return 0; + } + case todo__comm_1286: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1286"); + return 0; + } + case todo__comm_1287: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1287"); + return 0; + } + case todo__comm_1288: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1288"); + return 0; + } + case todo__comm_1289: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1289"); + return 0; + } + case todo__comm_1290: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1290"); + return 0; + } + case todo__comm_1291: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1291"); + return 0; + } + case todo__comm_1292: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1292"); + return 0; + } + case todo__comm_1293: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1293"); + return 0; + } + case todo__comm_1294: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1294"); + return 0; + } + case todo__comm_1295: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1295"); + return 0; + } + case todo__comm_1296: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1296"); + return 0; + } + case todo__comm_1297: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1297"); + return 0; + } + case todo__comm_1298: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1298"); + return 0; + } + case todo__comm_1299: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1299"); + return 0; + } - CTheScripts::ReadTextLabelFromScript(&m_nIp, label); - m_nIp += KEY_LENGTH_IN_SCRIPT; - CollectParameters(&m_nIp, 12); - for (i = 0; i < CCarCtrl::NUM_CAR_CLASSES; i++) - carDensities[i] = ScriptParams[i + 1]; - for (i = 0; i < CCarCtrl::NUM_BOAT_CLASSES; i++) - boatDensities[i] = ScriptParams[i + 1 + CCarCtrl::NUM_CAR_CLASSES]; - int zone = CTheZones::FindZoneByLabelAndReturnIndex(label, ZONE_INFO); - if (zone < 0) { - debug("Couldn't find zone - %s\n", label); - return 0; - } - while (zone >= 0) { - CTheZones::SetZoneCivilianCarInfo(zone, GET_INTEGER_PARAM(0), carDensities, boatDensities); - zone = CTheZones::FindNextZoneByLabelAndReturnIndex(label, ZONE_INFO); - } - return 0; - } - case COMMAND_REQUEST_ANIMATION: - { - char key[KEY_LENGTH_IN_SCRIPT]; - CTheScripts::ReadTextLabelFromScript(&m_nIp, key); - m_nIp += KEY_LENGTH_IN_SCRIPT; - CStreaming::RequestAnim(CAnimManager::GetAnimationBlockIndex(key), (m_bIsMissionScript ? STREAMFLAGS_SCRIPTOWNED : STREAMFLAGS_AMBIENT_SCRIPT_OWNED)); - return 0; - } - case COMMAND_HAS_ANIMATION_LOADED: - { - char key[KEY_LENGTH_IN_SCRIPT]; - CTheScripts::ReadTextLabelFromScript(&m_nIp, key); - m_nIp += KEY_LENGTH_IN_SCRIPT; - UpdateCompareFlag(CAnimManager::GetAnimationBlock(key)->isLoaded); - return 0; - } - case COMMAND_REMOVE_ANIMATION: - { - char key[KEY_LENGTH_IN_SCRIPT]; - CTheScripts::ReadTextLabelFromScript(&m_nIp, key); - m_nIp += KEY_LENGTH_IN_SCRIPT; - CStreaming::RemoveAnim(CAnimManager::GetAnimationBlockIndex(key)); - // + empty function on PS2 (not PSP) - return 0; - } - case COMMAND_IS_CHAR_WAITING_FOR_WORLD_COLLISION: - { - CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - UpdateCompareFlag(pPed->bIsStaticWaitingForCollision); - return 0; - } - case COMMAND_IS_CAR_WAITING_FOR_WORLD_COLLISION: - { - CollectParameters(&m_nIp, 1); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - UpdateCompareFlag(pVehicle->bIsStaticWaitingForCollision); - return 0; - } - /* - case COMMAND_IS_OBJECT_WAITING_FOR_WORLD_COLLISION: - { - CollectParameters(&m_nIp, 1); - CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pObject); - UpdateCompareFlag(pObject->bIsStaticWaitingForCollision); - return 0; - } - */ - case COMMAND_SET_CHAR_SHUFFLE_INTO_DRIVERS_SEAT: - { - CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - pPed->PedShuffle(); - return 0; - } - case COMMAND_ATTACH_CHAR_TO_OBJECT: - { - CollectParameters(&m_nIp, 8); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(1)); - pPed->AttachPedToEntity(pObject, GET_VECTOR_PARAM(2), GET_INTEGER_PARAM(5), DEGTORAD(GET_INTEGER_PARAM(6)), (eWeaponType)GET_INTEGER_PARAM(7)); - return 0; - } - case COMMAND_SET_CHAR_AS_PLAYER_FRIEND: - { - CollectParameters(&m_nIp, 3); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - pPed->bIsPlayerFriend = GET_INTEGER_PARAM(2); - return 0; - } - //case COMMAND_DISPLAY_NTH_ONSCREEN_COUNTER: - case COMMAND_DISPLAY_NTH_ONSCREEN_COUNTER_WITH_STRING: - { - char onscreen_str[12]; - //script_assert(CTheScripts::ScriptSpace[m_nIp++] == ARGUMENT_GLOBALVAR); - uint16 var = (uint8*)GetPointerToScriptVariable(&m_nIp, 0) - CTheScripts::ScriptSpace; - CollectParameters(&m_nIp, 2); - wchar* text = TheText.Get((char*)&CTheScripts::ScriptSpace[m_nIp]); // ??? - strncpy(onscreen_str, (char*)&CTheScripts::ScriptSpace[m_nIp], KEY_LENGTH_IN_SCRIPT); - m_nIp += KEY_LENGTH_IN_SCRIPT; - CUserDisplay::OnscnTimer.AddCounter(var, GET_INTEGER_PARAM(0), onscreen_str, GET_INTEGER_PARAM(1) - 1, -1, nil, 0); - return 0; - } - case COMMAND_ADD_SET_PIECE: - { - CollectParameters(&m_nIp, 13); - float fTriggerInfX = GET_FLOAT_PARAM(1); - float fTriggerInfY = GET_FLOAT_PARAM(2); - float fTriggerSupX = GET_FLOAT_PARAM(3); - float fTriggerSupY = GET_FLOAT_PARAM(4); - float fSpawn1X = GET_FLOAT_PARAM(5); - float fSpawn1Y = GET_FLOAT_PARAM(6); - float fTarget1X = GET_FLOAT_PARAM(7); - float fTarget1Y = GET_FLOAT_PARAM(8); - float fSpawn2X = GET_FLOAT_PARAM(9); - float fSpawn2Y = GET_FLOAT_PARAM(10); - float fTarget2X = GET_FLOAT_PARAM(11); - float fTarget2Y = GET_FLOAT_PARAM(12); - CSetPieces::AddOne(GET_INTEGER_PARAM(0), - CVector2D(fTriggerInfX, fTriggerInfY), CVector2D(fTriggerSupX, fTriggerSupY), - CVector2D(fSpawn1X, fSpawn1Y), CVector2D(fTarget1X, fTarget1Y), - CVector2D(fSpawn2X, fSpawn2Y), CVector2D(fTarget2X, fTarget2Y)); - return 0; - } - case COMMAND_SET_EXTRA_COLOURS: - { - CollectParameters(&m_nIp, 2); - CTimeCycle::StartExtraColour(GET_INTEGER_PARAM(0)-1, GET_INTEGER_PARAM(1) != 0); - return 0; - } - case COMMAND_CLEAR_EXTRA_COLOURS: - { - CollectParameters(&m_nIp, 1); - CTimeCycle::StopExtraColour(GET_INTEGER_PARAM(0)); - return 0; - } - //case COMMAND_CLOSE_CAR_BOOT: - case COMMAND_GET_WHEELIE_STATS: - { - CollectParameters(&m_nIp, 1); - CPlayerInfo* pPlayerInfo = &CWorld::Players[GET_INTEGER_PARAM(0)]; - SET_INTEGER_PARAM(0, pPlayerInfo->m_nLastTimeCarSpentOnTwoWheels); - SET_FLOAT_PARAM(1, pPlayerInfo->m_nLastDistanceCarTravelledOnTwoWheels); - SET_INTEGER_PARAM(2, pPlayerInfo->m_nLastTimeSpentOnWheelie); - SET_FLOAT_PARAM(3, pPlayerInfo->m_nLastDistanceTravelledOnWheelie); - SET_INTEGER_PARAM(4, pPlayerInfo->m_nLastTimeSpentOnStoppie); - SET_FLOAT_PARAM(5, pPlayerInfo->m_nLastDistanceTravelledOnStoppie); - StoreParameters(&m_nIp, 6); - pPlayerInfo->m_nLastTimeCarSpentOnTwoWheels = 0; - pPlayerInfo->m_nLastDistanceCarTravelledOnTwoWheels = 0.0f; - pPlayerInfo->m_nLastTimeSpentOnWheelie = 0; - pPlayerInfo->m_nLastDistanceTravelledOnWheelie = 0.0f; - pPlayerInfo->m_nLastTimeSpentOnStoppie = 0; - pPlayerInfo->m_nLastDistanceTravelledOnStoppie = 0.0f; - return 0; - } - //case COMMAND_DISARM_CHAR: - case COMMAND_BURST_CAR_TYRE: - { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - if (pVehicle->IsBike()) { - if (GET_INTEGER_PARAM(1) == 2) - SET_INTEGER_PARAM(1, 0); - else if (GET_INTEGER_PARAM(1) == 3) - SET_INTEGER_PARAM(1, 1); - } - pVehicle->BurstTyre(GET_INTEGER_PARAM(1), true); - return 0; - } - case COMMAND_IS_CHAR_OBJ_NO_OBJ: - { - CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - UpdateCompareFlag(pPed->m_prevObjective == OBJECTIVE_NONE && pPed->m_objective == OBJECTIVE_NONE); - return 0; - } - case COMMAND_IS_PLAYER_WEARING: - { - CollectParameters(&m_nIp, 1); - char key[12]; - CTheScripts::ReadTextLabelFromScript(&m_nIp, key); - m_nIp += KEY_LENGTH_IN_SCRIPT; - for (int i = 0; i < KEY_LENGTH_IN_SCRIPT; i++) - key[i] = tolower(key[i]); - CPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(pPed); - UpdateCompareFlag(CModelInfo::GetModelInfo(pPed->GetModelIndex())->GetNameHashKey() == CKeyGen::GetUppercaseKey(key)); - return 0; - } - case COMMAND_SET_PLAYER_CAN_DO_DRIVE_BY: - { - CollectParameters(&m_nIp, 2); - CPlayerInfo* pPlayerInfo = &CWorld::Players[GET_INTEGER_PARAM(0)]; - pPlayerInfo->m_bDriveByAllowed = GET_INTEGER_PARAM(1); - return 0; - } - case COMMAND_SET_CHAR_OBJ_SPRINT_TO_COORD: - { - CollectParameters(&m_nIp, 3); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - CVector pos; - pos.x = GET_FLOAT_PARAM(1); - pos.y = GET_FLOAT_PARAM(2); - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - pPed->bScriptObjectiveCompleted = false; - pPed->SetObjective(OBJECTIVE_SPRINT_TO_AREA, pos); - return 0; - } - case COMMAND_CREATE_SWAT_ROPE: - { - CollectParameters(&m_nIp, 3); - CRopes::CreateRopeWithSwatComingDown(GET_VECTOR_PARAM(0)); - return 0; - } - //case COMMAND_SET_FIRST_PERSON_CONTROL_CAMERA: - //case COMMAND_GET_NEAREST_TYRE_TO_POINT: - case COMMAND_SET_CAR_MODEL_COMPONENTS: - { - CollectParameters(&m_nIp, 3); - CVehicleModelInfo::SetComponentsToUse(GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2)); - return 0; - } - case COMMAND_SWITCH_LIFT_CAMERA: - { - CollectParameters(&m_nIp, 1); - CSpecialFX::bLiftCam = GET_INTEGER_PARAM(0) != 0; - return 0; - } - case COMMAND_CLOSE_ALL_CAR_DOORS: - { - CollectParameters(&m_nIp, 1); - CAutomobile* pCar = (CAutomobile*)CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pCar&& pCar->IsCar()); - pCar->CloseAllDoors(); - return 0; - } - case COMMAND_GET_DISTANCE_BETWEEN_COORDS_2D: - { - CollectParameters(&m_nIp, 4); - float X1 = GET_FLOAT_PARAM(0); - float Y1 = GET_FLOAT_PARAM(1); - float X2 = GET_FLOAT_PARAM(2); - float Y2 = GET_FLOAT_PARAM(3); - SET_FLOAT_PARAM(0, (CVector2D(X1, Y1) - CVector2D(X2, Y2)).Magnitude()); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_GET_DISTANCE_BETWEEN_COORDS_3D: - { - CollectParameters(&m_nIp, 6); - SET_FLOAT_PARAM(0, (GET_VECTOR_PARAM(0) - GET_VECTOR_PARAM(3)).Magnitude()); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_POP_CAR_BOOT_USING_PHYSICS: - { - CollectParameters(&m_nIp, 1); - CAutomobile* pCar = (CAutomobile*)CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pCar && pCar->IsCar()); - pCar->PopBootUsingPhysics(); - return 0; - } - //case COMMAND_SET_FIRST_PERSON_WEAPON_CAMERA: - case COMMAND_IS_CHAR_LEAVING_VEHICLE_TO_DIE: - { - CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - UpdateCompareFlag(pPed->m_objective == OBJECTIVE_LEAVE_CAR_AND_DIE); - return 0; - } - case COMMAND_SORT_OUT_OBJECT_COLLISION_WITH_CAR: - { - CollectParameters(&m_nIp, 2); - CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pObject); - pObject->m_pCollidingEntity = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); - return 0; - } - //case COMMAND_GET_MAX_WANTED_LEVEL: - case COMMAND_IS_CHAR_WANDER_PATH_CLEAR: - { - CollectParameters(&m_nIp, 5); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - UpdateCompareFlag(CWorld::IsWanderPathClear(pPed->GetPosition(), GET_VECTOR_PARAM(0), GET_FLOAT_PARAM(3), 4)); - return 0; - } - //case COMMAND_PRINT_HELP_WITH_NUMBER: - case COMMAND_PRINT_HELP_FOREVER: - { - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CHud::SetHelpMessage(text, false, true); // + true - if (text != CHud::gLastPrintForeverString) { - CHud::gLastPrintForeverString = text; - DMAudio.PlayFrontEndSound(SOUND_HUD, 0); - } - return 0; - } - //case COMMAND_PRINT_HELP_FOREVER_WITH_NUMBER: default: script_assert(0); } @@ -783,748 +547,412 @@ int8 CRunningScript::ProcessCommands1200To1299(int32 command) int8 CRunningScript::ProcessCommands1300To1399(int32 command) { switch (command) { - case COMMAND_SET_CHAR_CAN_BE_DAMAGED_BY_MEMBERS_OF_GANG: + case todo__comm_1300: { - CollectParameters(&m_nIp, 3); - CPed* pTarget = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pTarget); - uint8 flag = 1 << (uint8)GET_INTEGER_PARAM(1); - if (GET_INTEGER_PARAM(2)) - pTarget->m_gangFlags |= flag; - else - pTarget->m_gangFlags &= ~flag; + script_assert(false && "TODO_OR_CHECK_todo__comm_1300"); + return 0; + } + case todo__comm_1301: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1301"); + return 0; + } + case todo__comm_1302: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1302"); + return 0; + } + case todo__comm_1303: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1303"); + return 0; + } + case todo__comm_1304: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1304"); + return 0; + } + case todo__comm_1305: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1305"); + return 0; + } + case todo__comm_1306: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1306"); + return 0; + } + case todo__comm_1307: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1307"); + return 0; + } + case todo__comm_1308: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1308"); + return 0; + } + case todo__comm_1309: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1309"); + return 0; + } + case todo__comm_1310: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1310"); + return 0; + } + case todo__comm_1311: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1311"); + return 0; + } + case todo__comm_1312: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1312"); + return 0; + } + case todo__comm_1313: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1313"); + return 0; + } + case todo__comm_1314: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1314"); + return 0; + } + case todo__comm_1315: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1315"); + return 0; + } + case todo__comm_1316: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1316"); + return 0; + } + case todo__comm_1317: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1317"); + return 0; + } + case todo__comm_1318: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1318"); + return 0; + } + case todo__comm_1319: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1319"); + return 0; + } + case todo__comm_1320: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1320"); + return 0; + } + case todo__comm_1321: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1321"); + return 0; + } + case todo__comm_1322: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1322"); + return 0; + } + case todo__comm_1323: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1323"); + return 0; + } + case todo__comm_1324: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1324"); + return 0; + } + case todo__comm_1325: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1325"); + return 0; + } + case todo__comm_1326: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1326"); + return 0; + } + case todo__comm_1327: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1327"); + return 0; + } + case todo__comm_1328: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1328"); + return 0; + } + case todo__comm_1329: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1329"); + return 0; + } + case todo__comm_1330: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1330"); + return 0; + } + case todo__comm_1331: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1331"); + return 0; + } + case todo__comm_1332: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1332"); + return 0; + } + case todo__comm_1333: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1333"); + return 0; + } + case todo__comm_1334: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1334"); + return 0; + } + case todo__comm_1335: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1335"); + return 0; + } + case todo__comm_1336: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1336"); + return 0; + } + case todo__comm_1337: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1337"); + return 0; + } + case todo__comm_1338: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1338"); + return 0; + } + case todo__comm_1339: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1339"); + return 0; + } + case todo__comm_1340: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1340"); + return 0; + } + case todo__comm_1341: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1341"); + return 0; + } + case todo__comm_1342: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1342"); + return 0; + } + case todo__comm_1343: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1343"); + return 0; + } + case todo__comm_1344: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1344"); + return 0; + } + case todo__comm_1345: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1345"); + return 0; + } + case todo__comm_1346: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1346"); + return 0; + } + case todo__comm_1347: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1347"); + return 0; + } + case todo__comm_1348: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1348"); + return 0; + } + case todo__comm_1349: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1349"); + return 0; + } + case todo__comm_1350: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1350"); + return 0; + } + case todo__comm_1351: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1351"); + return 0; + } + case todo__comm_1352: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1352"); + return 0; + } + case todo__comm_1353: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1353"); + return 0; + } + case todo__comm_1354: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1354"); + return 0; + } + case todo__comm_1355: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1355"); + return 0; + } + case todo__comm_1356: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1356"); + return 0; + } + case todo__comm_1357: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1357"); + return 0; + } + case todo__comm_1358: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1358"); + return 0; + } + case todo__comm_1359: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1359"); + return 0; + } + case todo__comm_1360: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1360"); + return 0; + } + case todo__comm_1361: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1361"); + return 0; + } + case todo__comm_1362: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1362"); + return 0; + } + case todo__comm_1363: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1363"); + return 0; + } + case todo__comm_1364: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1364"); + return 0; + } + case todo__comm_1365: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1365"); + return 0; + } + case todo__comm_1366: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1366"); + return 0; + } + case todo__comm_1367: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1367"); + return 0; + } + case todo__comm_1368: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1368"); + return 0; + } + case todo__comm_1369: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1369"); + return 0; + } + case todo__comm_1370: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1370"); + return 0; + } + case todo__comm_1371: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1371"); + return 0; + } + case todo__comm_1372: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1372"); + return 0; + } + case todo__comm_1373: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1373"); + return 0; + } + case todo__comm_1374: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1374"); + return 0; + } + case todo__comm_1375: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1375"); + return 0; + } + case todo__comm_1376: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1376"); + return 0; + } + case todo__comm_1377: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1377"); + return 0; + } + case todo__comm_1378: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1378"); + return 0; + } + case todo__comm_1379: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1379"); + return 0; + } + case todo__comm_1380: + { + script_assert(false && "TODO_OR_CHECK_todo__comm_1380"); + return 0; + } - return 0; - } - case COMMAND_LOAD_AND_LAUNCH_MISSION_EXCLUSIVE: - return 0; - //case COMMAND_IS_MISSION_AUDIO_PLAYING: - case COMMAND_CREATE_LOCKED_PROPERTY_PICKUP: - { - CollectParameters(&m_nIp, 3); - CVector pos = GET_VECTOR_PARAM(0); - if (pos.z <= MAP_Z_LOW_LIMIT) - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y) + PICKUP_PLACEMENT_OFFSET; - char key[KEY_LENGTH_IN_SCRIPT]; - CTheScripts::ReadTextLabelFromScript(&m_nIp, key); - m_nIp += KEY_LENGTH_IN_SCRIPT; - // TheText.Get(key); - CPickups::GetActualPickupIndex(CollectNextParameterWithoutIncreasingPC(m_nIp)); - SET_INTEGER_PARAM(0, CPickups::GenerateNewOne(pos, MI_PICKUP_PROPERTY, PICKUP_PROPERTY_LOCKED, 0, 0, false, key)); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_CREATE_FORSALE_PROPERTY_PICKUP: - { - CollectParameters(&m_nIp, 4); - CVector pos = GET_VECTOR_PARAM(0); - if (pos.z <= MAP_Z_LOW_LIMIT) - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y) + PICKUP_PLACEMENT_OFFSET; - char key[KEY_LENGTH_IN_SCRIPT]; - CTheScripts::ReadTextLabelFromScript(&m_nIp, key); - m_nIp += KEY_LENGTH_IN_SCRIPT; - TheText.Get(key); - CPickups::GetActualPickupIndex(CollectNextParameterWithoutIncreasingPC(m_nIp)); - SET_INTEGER_PARAM(0, CPickups::GenerateNewOne(pos, MI_PICKUP_PROPERTY_FORSALE, PICKUP_PROPERTY_FORSALE, GET_INTEGER_PARAM(3), 0, false, key)); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_FREEZE_CAR_POSITION: - { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - pVehicle->bIsFrozen = GET_INTEGER_PARAM(1); - pVehicle->bInfiniteMass = GET_INTEGER_PARAM(1); - return 0; - } - case COMMAND_HAS_CHAR_BEEN_DAMAGED_BY_CHAR: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - CPed* pTestedPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(1)); - bool result = false; - if (pPed) { - if (pPed->m_lastDamEntity) { - if (pPed->m_lastDamEntity == pTestedPed) - result = true; - if (pTestedPed->bInVehicle && pPed->m_lastDamEntity == pTestedPed->m_pMyVehicle) - result = true; - } - }else - debug("HAS_CHAR_BEEN_DAMAGED_BY_CHAR - First character doesn't exist\n"); - UpdateCompareFlag(result); - return 0; - } - case COMMAND_HAS_CHAR_BEEN_DAMAGED_BY_CAR: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - CVehicle* pTestedVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); - bool result = false; - if (pPed) { - if (pPed->m_lastDamEntity) { - if (pPed->m_lastDamEntity == pTestedVehicle) - result = true; - } - } - else - debug("HAS_CHAR_BEEN_DAMAGED_BY_CAR - Character doesn't exist\n"); - UpdateCompareFlag(result); - return 0; - } - case COMMAND_HAS_CAR_BEEN_DAMAGED_BY_CHAR: - { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - CPed* pTestedPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(1)); - bool result = false; - if (pVehicle) { - if (pVehicle->m_pLastDamageEntity) { - if (pVehicle->m_pLastDamageEntity == pTestedPed) - result = true; - if (pTestedPed->bInVehicle && pVehicle->m_pLastDamageEntity == pTestedPed->m_pMyVehicle) - result = true; - } - } - else - debug("HAS_CAR_BEEN_DAMAGED_BY_CHAR - Car doesn't exist\n"); - UpdateCompareFlag(result); - return 0; - } - case COMMAND_HAS_CAR_BEEN_DAMAGED_BY_CAR: - { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - CVehicle* pTestedVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); - bool result = false; - if (pVehicle) { - if (pVehicle->m_pLastDamageEntity) { - if (pVehicle->m_pLastDamageEntity == pTestedVehicle) - result = true; - } - } - else - debug("HAS_CAR_BEEN_DAMAGED_BY_CAR - First car doesn't exist\n"); - UpdateCompareFlag(result); - return 0; - } - case COMMAND_GET_RADIO_CHANNEL: - { - uint8 radio = DMAudio.GetRadioInCar(); - if (radio < NUM_RADIOS || radio == STREAMED_SOUND_MISSION_COMPLETED) - SET_INTEGER_PARAM(0, radio); - else - SET_INTEGER_PARAM(0, -1); - StoreParameters(&m_nIp, 1); - return 0; - } - //case COMMAND_DISPLAY_TEXT_WITH_3_NUMBERS: - //case COMMAND_IS_CAR_DROWNING_IN_WATER: - case COMMAND_IS_CHAR_DROWNING_IN_WATER: - { - CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - UpdateCompareFlag(pPed && pPed->bIsDrowning); - return 0; - } - case COMMAND_DISABLE_CUTSCENE_SHADOWS: - { - CCutsceneMgr::DisableCutsceneShadows(); - return 0; - } - case COMMAND_HAS_GLASS_BEEN_SHATTERED_NEARBY: - { - CollectParameters(&m_nIp, 3); - - bool shattered = false; - if ( CGlass::HasGlassBeenShatteredAtCoors(GET_FLOAT_PARAM(0), GET_FLOAT_PARAM(1), GET_FLOAT_PARAM(2)) ) - shattered = true; - - UpdateCompareFlag(shattered); - return 0; - } - case COMMAND_ATTACH_CUTSCENE_OBJECT_TO_BONE: - { - CollectParameters(&m_nIp, 3); - CCutsceneMgr::AttachObjectToBone(CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)), CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(1)), GET_INTEGER_PARAM(2)); - return 0; - } - case COMMAND_ATTACH_CUTSCENE_OBJECT_TO_COMPONENT: - { - CollectParameters(&m_nIp, 2); - CObject *obj1 = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); - CObject *obj2 = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(1)); - - char key[KEY_LENGTH_IN_SCRIPT]; - CTheScripts::ReadTextLabelFromScript(&m_nIp, key); - m_nIp += KEY_LENGTH_IN_SCRIPT; - - CCutsceneMgr::AttachObjectToFrame(obj1, obj2, key); - return 0; - } - case COMMAND_SET_CHAR_STAY_IN_CAR_WHEN_JACKED: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - pPed->bStayInCarOnJack = GET_INTEGER_PARAM(1); - return 0; - } - //case COMMAND_IS_MISSION_AUDIO_LOADING: - case COMMAND_ADD_MONEY_SPENT_ON_WEAPONS: - CollectParameters(&m_nIp, 1); - CStats::MoneySpentOnWeapons(GET_INTEGER_PARAM(0)); - return 0; - case COMMAND_ADD_MONEY_SPENT_ON_PROPERTY: - CollectParameters(&m_nIp, 1); - //CStats::MoneySpentOnProperty(GET_INTEGER_PARAM(0)); - return 0; - //case COMMAND_ADD_MONEY_SPENT_ON_AUTO_PAINTING: - case COMMAND_SET_CHAR_ANSWERING_MOBILE: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - if (GET_INTEGER_PARAM(1)) - pPed->SetAnswerMobile(); - else - pPed->ClearAnswerMobile(); - return 0; - } - case COMMAND_SET_PLAYER_DRUNKENNESS: - { - CollectParameters(&m_nIp, 2); - CPlayerInfo* pPlayerInfo = &CWorld::Players[GET_INTEGER_PARAM(0)]; - pPlayerInfo->m_pPed->m_nDrunkenness = GET_INTEGER_PARAM(1); - pPlayerInfo->m_pPed->m_nFadeDrunkenness = 0; - if (pPlayerInfo->m_pPed->m_nDrunkenness == 0) - CMBlur::ClearDrunkBlur(); - return 0; - } - //case COMMAND_GET_PLAYER_DRUNKENNESS: - //case COMMAND_SET_PLAYER_DRUG_LEVEL: - //case COMMAND_GET_PLAYER_DRUG_LEVEL: - //case COMMAND_ADD_LOAN_SHARK_VISITS: - case COMMAND_ADD_STORES_KNOCKED_OFF: - CollectParameters(&m_nIp, 1); - //CStats::NumOfStoresKnockedOff(GET_INTEGER_PARAM(0)); - return 0; - //case COMMAND_ADD_MOVIE_STUNTS: - case COMMAND_ADD_NUMBER_OF_ASSASSINATIONS: - CollectParameters(&m_nIp, 1); - //CStats::NumOfAssassinations(GET_INTEGER_PARAM(0)); - return 0; - case COMMAND_ADD_PIZZAS_DELIVERED: - CollectParameters(&m_nIp, 1); - CStats::NumOfPizzasDelivered(GET_INTEGER_PARAM(0)); - return 0; - //case COMMAND_ADD_GARBAGE_PICKUPS: - case COMMAND_ADD_ICE_CREAMS_SOLD: - CollectParameters(&m_nIp, 1); - CStats::NumOfIceCreamSold(GET_INTEGER_PARAM(0)); - return 0; - //case COMMAND_SET_TOP_SHOOTING_RANGE_SCORE: - //case COMMAND_ADD_SHOOTING_RANGE_RANK: - //case COMMAND_ADD_MONEY_SPENT_ON_GAMBLING: - //case COMMAND_ADD_MONEY_WON_ON_GAMBLING: - //case COMMAND_SET_LARGEST_GAMBLING_WIN: - case COMMAND_SET_CHAR_IN_PLAYERS_GROUP_CAN_FIGHT: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - pPed->bDontFight = !GET_INTEGER_PARAM(1); - return 0; - } - case COMMAND_CLEAR_CHAR_WAIT_STATE: - { - CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - pPed->ClearWaitState(); - return 0; - } - case COMMAND_GET_RANDOM_CAR_OF_TYPE_IN_AREA_NO_SAVE: - { - CollectParameters(&m_nIp, 5); - int handle = -1; - uint32 i = CPools::GetVehiclePool()->GetSize(); - float infX = GET_FLOAT_PARAM(0); - float infY = GET_FLOAT_PARAM(1); - float supX = GET_FLOAT_PARAM(2); - float supY = GET_FLOAT_PARAM(3); - while (i--) { - CVehicle* pVehicle = CPools::GetVehiclePool()->GetSlot(i); - if (!pVehicle) - continue; - if (pVehicle->GetVehicleAppearance() != VEHICLE_APPEARANCE_CAR && pVehicle->GetVehicleAppearance() != VEHICLE_APPEARANCE_BIKE) - continue; - if (GET_INTEGER_PARAM(4) != pVehicle->GetModelIndex() && GET_INTEGER_PARAM(4) >= 0) - continue; - if (pVehicle->VehicleCreatedBy != RANDOM_VEHICLE) - continue; - if (!pVehicle->IsWithinArea(infX, infY, supX, supY)) - continue; - handle = CPools::GetVehiclePool()->GetIndex(pVehicle); - } - SET_INTEGER_PARAM(0, handle); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_SET_CAN_BURST_CAR_TYRES: - { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - pVehicle->bTyresDontBurst = !GET_INTEGER_PARAM(1); - return 0; - } - case COMMAND_SET_PLAYER_AUTO_AIM: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(pPed); - pPed->bDoomAim = GET_INTEGER_PARAM(1); - return 0; - } - case COMMAND_FIRE_HUNTER_GUN: - { - CollectParameters(&m_nIp, 1); - CVehicle *pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - if (CTimer::GetTimeInMilliseconds() > pVehicle->m_nGunFiringTime + 150) { - CWeapon gun(WEAPONTYPE_HELICANNON, 5000); - CVector worldGunPos = (pVehicle->GetMatrix() * vecHunterGunPos) + (CTimer::GetTimeStep() * pVehicle->m_vecMoveSpeed); - gun.FireInstantHit(pVehicle, &worldGunPos); - gun.AddGunshell(pVehicle, worldGunPos, CVector2D(0.f, 0.1f), 0.025f); - DMAudio.PlayOneShot(pVehicle->m_audioEntityId, SOUND_WEAPON_SHOT_FIRED, 0.f); - pVehicle->m_nGunFiringTime = CTimer::GetTimeInMilliseconds(); - } - return 0; - } - case COMMAND_SET_PROPERTY_AS_OWNED: - CollectParameters(&m_nIp, 1); - CStats::AddPropertyAsOwned(GET_INTEGER_PARAM(0)); - return 0; - case COMMAND_ADD_BLOOD_RING_KILLS: - CollectParameters(&m_nIp, 1); - CStats::AddNumBloodRingKills(GET_INTEGER_PARAM(0)); - return 0; - case COMMAND_SET_LONGEST_TIME_IN_BLOOD_RING: - CollectParameters(&m_nIp, 1); - CStats::LongestTimeInBloodRing(GET_INTEGER_PARAM(0)); - return 0; - case COMMAND_REMOVE_EVERYTHING_FOR_HUGE_CUTSCENE: - { - //CCutsceneMgr::RemoveEverythingFromTheWorldForTheBiggestFuckoffCutsceneEver(); - return 0; - } - case COMMAND_IS_PLAYER_TOUCHING_VEHICLE: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(pPed); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); - CPhysical* pTestedEntity = pPed; - if (pPed->bInVehicle && pPed->m_pMyVehicle) - pTestedEntity = pPed->m_pMyVehicle; - UpdateCompareFlag(pTestedEntity->GetHasCollidedWith(pVehicle)); - return 0; - } - //case COMMAND_IS_CHAR_TOUCHING_VEHICLE: - case COMMAND_CHECK_FOR_PED_MODEL_AROUND_PLAYER: - { - CollectParameters(&m_nIp, 6); - CVector d1 = CWorld::Players[GET_INTEGER_PARAM(0)].GetPos() - GET_VECTOR_PARAM(1); - CVector d2 = CWorld::Players[GET_INTEGER_PARAM(0)].GetPos() + GET_VECTOR_PARAM(1); - int i = CPools::GetPedPool()->GetSize(); - bool result = false; - while (i--) { - CPed* pPed = CPools::GetPedPool()->GetSlot(i); - if (!pPed) - continue; - if (GET_INTEGER_PARAM(4) != pPed->GetModelIndex() && GET_INTEGER_PARAM(5) != pPed->GetModelIndex()) - continue; - if (pPed->IsWithinArea(d1.x, d1.y, d1.z, d2.x, d2.y, d2.z)) - result = true; - } - UpdateCompareFlag(result); - return 0; - } - case COMMAND_CLEAR_CHAR_FOLLOW_PATH: - { - CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - if (pPed->GetPedState() == PED_FOLLOW_PATH) { - pPed->RestorePreviousState(); - pPed->ClearFollowPath(); - } - return 0; - } - case COMMAND_SET_CHAR_CAN_BE_SHOT_IN_VEHICLE: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - pPed->bCanBeShotInVehicle = GET_INTEGER_PARAM(1); - return 0; - } - case COMMAND_ATTACH_CUTSCENE_OBJECT_TO_VEHICLE: - { - CollectParameters(&m_nIp, 2); - CCutsceneMgr::AttachObjectToParent(CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)), CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1))); - return 0; - } - case COMMAND_LOAD_MISSION_TEXT: - { - char key[8]; - CTheScripts::ReadTextLabelFromScript(&m_nIp, key); - m_nIp += KEY_LENGTH_IN_SCRIPT; - TheText.LoadMissionText(key); - return 0; - } - case COMMAND_SET_TONIGHTS_EVENT: - { - CollectParameters(&m_nIp, 1); - CScrollBar::TonightsEvent = GET_INTEGER_PARAM(0); - return 0; - } - case COMMAND_CLEAR_CHAR_LAST_DAMAGE_ENTITY: - { - CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - if (pPed) - pPed->m_lastDamEntity = nil; - else - debug("CLEAR_CHAR_LAST_DAMAGE_ENTITY - Character doesn't exist\n"); - return 0; - } - case COMMAND_CLEAR_CAR_LAST_DAMAGE_ENTITY: - { - CollectParameters(&m_nIp, 1); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - if (pVehicle) - pVehicle->m_pLastDamageEntity = nil; - else - debug("CLEAR_CAR_LAST_DAMAGE_ENTITY - Car doesn't exist\n"); - return 0; - } - case COMMAND_FREEZE_OBJECT_POSITION: - { - CollectParameters(&m_nIp, 2); - CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pObject); - pObject->bIsFrozen = GET_INTEGER_PARAM(1); - pObject->bInfiniteMass = GET_INTEGER_PARAM(1); - return 0; - } - case COMMAND_SET_PLAYER_HAS_MET_DEBBIE_HARRY: - { - CollectParameters(&m_nIp, 1); - CTheScripts::bPlayerHasMetDebbieHarry = GET_INTEGER_PARAM(0); - return 0; - } - case COMMAND_SET_RIOT_INTENSITY: - { - CollectParameters(&m_nIp, 1); - CTheScripts::RiotIntensity = GET_INTEGER_PARAM(0); - return 0; - } - //case COMMAND_IS_CAR_IN_ANGLED_AREA_2D: - //case COMMAND_IS_CAR_IN_ANGLED_AREA_3D: - //case COMMAND_REMOVE_WEAPON_FROM_CHAR: - case COMMAND_SET_UP_TAXI_SHORTCUT: - { - CollectParameters(&m_nIp, 8); - CGameLogic::SetUpShortCut( - GET_VECTOR_PARAM(0), GET_FLOAT_PARAM(3), - GET_VECTOR_PARAM(4), GET_FLOAT_PARAM(7)); - return 0; - } - case COMMAND_CLEAR_TAXI_SHORTCUT: - CGameLogic::ClearShortCut(); - CGameLogic::RemoveShortCutDropOffPointForMission(); - return 0; - //case COMMAND_SET_CHAR_OBJ_GOTO_CAR_ON_FOOT: - //case COMMAND_GET_CLOSEST_WATER_NODE: - case COMMAND_ADD_PORN_LEAFLET_TO_RUBBISH: - CollectParameters(&m_nIp, 1); - CStats::PamphletMissionPassed = GET_INTEGER_PARAM(0); - return 0; - case COMMAND_CREATE_CLOTHES_PICKUP: - { - CollectParameters(&m_nIp, 4); - CVector pos = GET_VECTOR_PARAM(0); - if (pos.z <= MAP_Z_LOW_LIMIT) - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y) + PICKUP_PLACEMENT_OFFSET; - CPickups::GetActualPickupIndex(CollectNextParameterWithoutIncreasingPC(m_nIp)); - SET_INTEGER_PARAM(0, CPickups::GenerateNewOne(pos, MI_PICKUP_CLOTHES, PICKUP_ON_STREET, GET_INTEGER_PARAM(3))); // TODO: gpModelIndices - StoreParameters(&m_nIp, 1); - return 0; - } - //case COMMAND_CHANGE_BLIP_THRESHOLD: - case COMMAND_MAKE_PLAYER_FIRE_PROOF: - { - CollectParameters(&m_nIp, 2); - CPlayerInfo* pPlayerInfo = &CWorld::Players[GET_INTEGER_PARAM(0)]; - pPlayerInfo->m_bFireproof = GET_INTEGER_PARAM(1); - return 0; - } - case COMMAND_INCREASE_PLAYER_MAX_HEALTH: - { - CollectParameters(&m_nIp, 2); - CPlayerInfo* pPlayerInfo = &CWorld::Players[GET_INTEGER_PARAM(0)]; - pPlayerInfo->m_nMaxHealth += GET_INTEGER_PARAM(1); - pPlayerInfo->m_pPed->m_fHealth = pPlayerInfo->m_nMaxHealth; - CHud::m_ItemToFlash = ITEM_HEALTH; - return 0; - } - case COMMAND_INCREASE_PLAYER_MAX_ARMOUR: - { - CollectParameters(&m_nIp, 2); - CPlayerInfo* pPlayerInfo = &CWorld::Players[GET_INTEGER_PARAM(0)]; - pPlayerInfo->m_nMaxArmour += GET_INTEGER_PARAM(1); - pPlayerInfo->m_pPed->m_fArmour = pPlayerInfo->m_nMaxArmour; - CHud::m_ItemToFlash = ITEM_ARMOUR; - return 0; - } - case COMMAND_CREATE_RANDOM_CHAR_AS_DRIVER: - { - CollectParameters(&m_nIp, 1); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - CPed* pPed = CPopulation::AddPedInCar(pVehicle, true); - pPed->CharCreatedBy = MISSION_CHAR; - pPed->bRespondsToThreats = false; - pPed->bAllowMedicsToReviveMe = false; - pPed->bIsPlayerFriend = false; - if (pVehicle->bIsBus) - pPed->bRenderPedInCar = false; - pPed->SetPosition(pVehicle->GetPosition()); - pPed->SetOrientation(0.0f, 0.0f, 0.0f); - pPed->SetPedState(PED_DRIVING); - pPed->m_pMyVehicle = pVehicle; - pPed->m_pMyVehicle->RegisterReference((CEntity**)&pPed->m_pMyVehicle); - pVehicle->pDriver = pPed; - pVehicle->pDriver->RegisterReference((CEntity**)&pVehicle->pDriver); - pPed->bInVehicle = true; - pVehicle->SetStatus(STATUS_PHYSICS); - if (pVehicle->m_vehType == VEHICLE_TYPE_BOAT) - pVehicle->AutoPilot.m_nCarMission = MISSION_CRUISE; - pVehicle->bEngineOn = true; - pVehicle->m_nZoneLevel = CTheZones::GetLevelFromPosition(&pVehicle->GetPosition()); - CPopulation::ms_nTotalMissionPeds++; - SET_INTEGER_PARAM(0, CPools::GetPedPool()->GetIndex(pPed)); - StoreParameters(&m_nIp, 1); - if (m_bIsMissionScript) - CTheScripts::MissionCleanUp.AddEntityToList(GET_INTEGER_PARAM(0), CLEANUP_CHAR); - return 0; - } - case COMMAND_CREATE_RANDOM_CHAR_AS_PASSENGER: - { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - CPed* pPed = CPopulation::AddPedInCar(pVehicle, false); - pPed->CharCreatedBy = MISSION_CHAR; - pPed->bRespondsToThreats = false; - pPed->bAllowMedicsToReviveMe = false; - pPed->bIsPlayerFriend = false; - if (pVehicle->bIsBus) - pPed->bRenderPedInCar = false; - pPed->SetPosition(pVehicle->GetPosition()); - pPed->SetOrientation(0.0f, 0.0f, 0.0f); - CPopulation::ms_nTotalMissionPeds++; - pVehicle->m_nZoneLevel = CTheZones::GetLevelFromPosition(&pVehicle->GetPosition()); - if (GET_INTEGER_PARAM(1) >= 0) - pVehicle->AddPassenger(pPed, GET_INTEGER_PARAM(1)); - else - pVehicle->AddPassenger(pPed); - - pPed->m_pMyVehicle = pVehicle; - pPed->m_pMyVehicle->RegisterReference((CEntity**)&pPed->m_pMyVehicle); - pPed->bInVehicle = true; - pPed->SetPedState(PED_DRIVING); - SET_INTEGER_PARAM(0, CPools::GetPedPool()->GetIndex(pPed)); - StoreParameters(&m_nIp, 1); - if (m_bIsMissionScript) - CTheScripts::MissionCleanUp.AddEntityToList(GET_INTEGER_PARAM(0), CLEANUP_CHAR); - return 0; - } - case COMMAND_SET_CHAR_IGNORE_THREATS_BEHIND_OBJECTS: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - pPed->bIgnoreThreatsBehindObjects = GET_INTEGER_PARAM(1); - return 0; - } - case COMMAND_ENSURE_PLAYER_HAS_DRIVE_BY_WEAPON: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(pPed); - if (pPed->bInVehicle) { - if (pPed->GetWeapon(WEAPONSLOT_SUBMACHINEGUN).m_eWeaponType) { - if (pPed->GetWeapon(WEAPONSLOT_SUBMACHINEGUN).m_nAmmoTotal < GET_INTEGER_PARAM(1)) - pPed->SetAmmo(pPed->GetWeapon(WEAPONSLOT_SUBMACHINEGUN).m_eWeaponType, GET_INTEGER_PARAM(1)); - } - else { - pPed->GiveWeapon(WEAPONTYPE_UZI, GET_INTEGER_PARAM(1), true); - if (pPed->m_storedWeapon == WEAPONTYPE_UNIDENTIFIED) - pPed->m_storedWeapon = pPed->GetWeapon()->m_eWeaponType; - pPed->SetCurrentWeapon(WEAPONTYPE_UZI); - } - } - return 0; - } - case COMMAND_MAKE_HELI_COME_CRASHING_DOWN: - { - CollectParameters(&m_nIp, 1); - CAutomobile* pHeli = (CAutomobile*)CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pHeli && pHeli->IsCar() && pHeli->IsRealHeli()); - pHeli->bHeliDestroyed = true; - return 0; - } - case COMMAND_ADD_EXPLOSION_NO_SOUND: - { - CollectParameters(&m_nIp, 4); - CExplosion::AddExplosion(nil, nil, (eExplosionType)GET_INTEGER_PARAM(3), GET_VECTOR_PARAM(0), 0, false); - return 0; - } - case COMMAND_SET_OBJECT_AREA_VISIBLE: - { - CollectParameters(&m_nIp, 2); - CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pObject); - pObject->m_area = GET_INTEGER_PARAM(1); - return 0; - } - //case COMMAND_WAS_VEHICLE_EVER_POLICE: - case COMMAND_SET_CHAR_NEVER_TARGETTED: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - pPed->bNeverEverTargetThisPed = GET_INTEGER_PARAM(1); - return 0; - } - case COMMAND_LOAD_UNCOMPRESSED_ANIM: - { - char key[KEY_LENGTH_IN_SCRIPT]; - CTheScripts::ReadTextLabelFromScript(&m_nIp, key); - m_nIp += KEY_LENGTH_IN_SCRIPT; - CCutsceneMgr::LoadAnimationUncompressed(key); - return 0; - } - case COMMAND_WAS_CUTSCENE_SKIPPED: - { - UpdateCompareFlag(CCutsceneMgr::WasCutsceneSkipped()); - return 0; - } - case COMMAND_SET_CHAR_CROUCH_WHEN_THREATENED: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - pPed->bCrouchWhenScared = true; - return 0; - } - case COMMAND_IS_CHAR_IN_ANY_POLICE_VEHICLE: - { - CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - UpdateCompareFlag(pPed->bInVehicle && pPed->m_pMyVehicle && - pPed->m_pMyVehicle->IsLawEnforcementVehicle() && - pPed->m_pMyVehicle->GetModelIndex() != MI_PREDATOR); - return 0; - } - case COMMAND_DOES_CHAR_EXIST: - CollectParameters(&m_nIp, 1); - UpdateCompareFlag(CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)) != 0); - return 0; - case COMMAND_DOES_VEHICLE_EXIST: - { - CollectParameters(&m_nIp, 1); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - bool bExist = false; - if (pVehicle) { - int index = GET_INTEGER_PARAM(0) >> 8; -#ifdef FIX_BUGS - bExist = (index >= 0 && index < NUMVEHICLES); // epic fail -#else - bExist = (index > 0 && index < NUMVEHICLES); -#endif - } - UpdateCompareFlag(bExist); - return 0; - } - //case COMMAND_ADD_SHORT_RANGE_BLIP_FOR_CONTACT_POINT: - case COMMAND_ADD_SHORT_RANGE_SPRITE_BLIP_FOR_CONTACT_POINT: - { - CollectParameters(&m_nIp, 4); - CVector pos = GET_VECTOR_PARAM(0); - if (pos.z <= MAP_Z_LOW_LIMIT) - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - CRadar::GetActualBlipArrayIndex(CollectNextParameterWithoutIncreasingPC(m_nIp)); - int id = CRadar::SetShortRangeCoordBlip(BLIP_COORD, pos, 2, BLIP_DISPLAY_BOTH); - CRadar::SetBlipSprite(id, GET_INTEGER_PARAM(3)); - SET_INTEGER_PARAM(0, id); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_IS_CHAR_STUCK: - { - CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - UpdateCompareFlag(pPed->m_nWaitState == WAITSTATE_STUCK); - return 0; - } - case COMMAND_SET_ALL_TAXIS_HAVE_NITRO: - { - CollectParameters(&m_nIp, 1); - CVehicle::bAllTaxisHaveNitro = GET_INTEGER_PARAM(0) != 0; - return 0; - } - case COMMAND_SET_CHAR_STOP_SHOOT_DONT_SEEK_ENTITY: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - if (GET_INTEGER_PARAM(1)) { - pPed->bKindaStayInSamePlace = true; - pPed->bStopAndShoot = true; - } - else { - pPed->bKindaStayInSamePlace = false; - pPed->bStopAndShoot = false; - } - pPed->m_nLastPedState = PED_NONE; - return 0; - } - case COMMAND_FREEZE_CAR_POSITION_AND_DONT_LOAD_COLLISION: - { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - if (GET_INTEGER_PARAM(1)) { - pVehicle->bIsFrozen = true; - pVehicle->bInfiniteMass = true; - if (m_bIsMissionScript) { - CWorld::Remove(pVehicle); - pVehicle->bIsStaticWaitingForCollision = true; - CWorld::Add(pVehicle); - } - } - else { - pVehicle->bIsFrozen = false; - pVehicle->bInfiniteMass = false; - } - return 0; - } - //case COMMAND_FREEZE_CHAR_POSITION_AND_DONT_LOAD_COLLISION: - //case COMMAND_FREEZE_OBJECT_POSITION_AND_DONT_LOAD_COLLISION: - //case COMMAND_SET_FADE_AND_JUMPCUT_AFTER_RC_EXPLOSION: default: script_assert(0); } diff --git a/src/control/Script8.cpp b/src/control/Script8.cpp index 3955cacb..56649d3f 100644 --- a/src/control/Script8.cpp +++ b/src/control/Script8.cpp @@ -27,783 +27,5 @@ #include "World.h" #include "Zones.h" -// LCS: file done except TODOs (also check commented out strings) -int8 CRunningScript::ProcessCommands1400To1499(int32 command) -{ - switch (command) { - case COMMAND_REGISTER_VIGILANTE_LEVEL: - CollectParameters(&m_nIp, 1); - CStats::RegisterLevelVigilanteMission(GET_INTEGER_PARAM(0)); - return 0; - case COMMAND_CLEAR_ALL_CHAR_ANIMS: - { - CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - if (pPed && pPed->GetPedState() != PED_DRIVING && pPed->GetPedState() != PED_AIM_GUN) { - pPed->m_pVehicleAnim = nil; - pPed->RestartNonPartialAnims(); - RpAnimBlendClumpRemoveAllAssociations(pPed->GetClump()); - pPed->SetPedState(PED_IDLE); - pPed->SetMoveState(PEDMOVE_STILL); - pPed->m_nLastPedState = PED_NONE; - pPed->ClearAimFlag(); - pPed->ClearLookFlag(); - pPed->bIsPointingGunAt = false; - if (pPed->IsPlayer()) - ((CPlayerPed*)pPed)->m_fMoveSpeed = 0.0f; - else - pPed->m_nStoredMoveState = PEDMOVE_STILL; - CAnimManager::AddAnimation(pPed->GetClump(), pPed->m_animGroup, ANIM_STD_IDLE); - pPed->bIsPedDieAnimPlaying = false; - } - return 0; - } - case COMMAND_SET_MAXIMUM_NUMBER_OF_CARS_IN_GARAGE: - CollectParameters(&m_nIp, 2); - CGarages::SetMaxNumStoredCarsForGarage(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); - return 0; - case COMMAND_WANTED_STARS_ARE_FLASHING: - { - CWanted* pWanted = CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_pWanted; - UpdateCompareFlag(pWanted->m_nMinWantedLevel - pWanted->GetWantedLevel() > 0); - return 0; - } - case COMMAND_SET_ALLOW_HURRICANES: - CollectParameters(&m_nIp, 1); - CStats::NoMoreHurricanes = GET_INTEGER_PARAM(0); - return 0; - case COMMAND_PLAY_ANNOUNCEMENT: - { - CollectParameters(&m_nIp, 1); - DMAudio.PlayRadioAnnouncement(GET_INTEGER_PARAM(0) + STREAMED_SOUND_NEWS_A); - return 0; - } - case COMMAND_SET_PLAYER_IS_IN_STADIUM: - { - CollectParameters(&m_nIp, 1); - CTheScripts::bPlayerIsInTheStatium = GET_INTEGER_PARAM(0); - return 0; - } - case COMMAND_GET_BUS_FARES_COLLECTED_BY_PLAYER: - { - CollectParameters(&m_nIp, 1); - CPlayerInfo* pPlayerInfo = &CWorld::Players[GET_INTEGER_PARAM(0)]; - SET_INTEGER_PARAM(0, pPlayerInfo->m_pPed->m_nLastBusFareCollected); - pPlayerInfo->m_pPed->m_nLastBusFareCollected = 0; - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_SET_CHAR_OBJ_BUY_ICE_CREAM: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); - script_assert(pVehicle); - SET_INTEGER_PARAM(0, 0); - if (pPed->m_objective == OBJECTIVE_NONE && !pPed->bHasAlreadyUsedAttractor) { - C2dEffect* pEffect = (C2dEffect*)GetPedAttractorManager()->GetEffectForIceCreamVan(pVehicle, pPed->GetPosition()); // has to be casted, because inner methods are const - if (pEffect) { - CVector pos; - CPedAttractorManager::ComputeEffectPos(pEffect, pVehicle->GetMatrix(), pos); - if ((pPed->GetPosition() - pos).MagnitudeSqr() < SQR(20.0f)) { - if (GetPedAttractorManager()->HasEmptySlot(pEffect) && GetPedAttractorManager()->IsApproachable(pEffect, pVehicle->GetMatrix(), 0, pPed)) { - if (GetPedAttractorManager()->RegisterPedWithAttractor(pPed, pEffect, pVehicle->GetMatrix())) - SET_INTEGER_PARAM(0, 1); - } - } - } - } - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_DISPLAY_RADAR: - CollectParameters(&m_nIp, 1); - CHud::m_HideRadar = GET_INTEGER_PARAM(0) == 0; - // on PS2 two flags are set, on mobile none - return 0; - case COMMAND_REGISTER_BEST_POSITION: - CollectParameters(&m_nIp, 2); - CStats::RegisterBestPosition(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); - return 0; - case COMMAND_IS_PLAYER_IN_INFO_ZONE: - { - CollectParameters(&m_nIp, 1); - CPlayerInfo* pPlayerInfo = &CWorld::Players[GET_INTEGER_PARAM(0)]; - char key[KEY_LENGTH_IN_SCRIPT]; - memset(key, 0, KEY_LENGTH_IN_SCRIPT); - CTheScripts::ReadTextLabelFromScript(&m_nIp, key); - m_nIp += KEY_LENGTH_IN_SCRIPT; - CVector pos = pPlayerInfo->GetPos(); - CZone* infoZone = CTheZones::FindInformationZoneForPosition(&pos); - UpdateCompareFlag(strncmp(key, infoZone->name, 8) == 0); // original code doesn't seem to be using strncmp in here and compare 2 ints instead - return 0; - } - case COMMAND_CLEAR_CHAR_ICE_CREAM_PURCHASE: - { - CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - if (pPed->m_attractor) - GetPedAttractorManager()->DeRegisterPed(pPed, pPed->m_attractor); - return 0; - } - case COMMAND_IS_IN_CAR_FIRE_BUTTON_PRESSED: - UpdateCompareFlag(CPad::GetPad(0)->GetCarGunFired()); - return 0; - case COMMAND_HAS_CHAR_ATTEMPTED_ATTRACTOR: - { - CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - UpdateCompareFlag(pPed->bHasAlreadyUsedAttractor); - return 0; - } - case COMMAND_SET_LOAD_COLLISION_FOR_CAR_FLAG: - { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - if (GET_INTEGER_PARAM(1)) { - pVehicle->bDontLoadCollision = false; - if (m_bMissionFlag) { - CWorld::Remove(pVehicle); - pVehicle->bIsStaticWaitingForCollision = true; - CWorld::Add(pVehicle); - } - } - else { - pVehicle->bDontLoadCollision = true; - if (pVehicle->bIsStaticWaitingForCollision) { - pVehicle->bIsStaticWaitingForCollision = false; - if (!pVehicle->GetIsStatic()) - pVehicle->AddToMovingList(); - } - } - return 0; - } - case COMMAND_SET_LOAD_COLLISION_FOR_CHAR_FLAG: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - if (GET_INTEGER_PARAM(1)) { - pPed->bDontLoadCollision = false; - if (m_bMissionFlag) { - CWorld::Remove(pPed); - pPed->bIsStaticWaitingForCollision = true; - CWorld::Add(pPed); - } - } - else { - pPed->bDontLoadCollision = true; - if (pPed->bIsStaticWaitingForCollision) { - pPed->bIsStaticWaitingForCollision = false; - if (!pPed->GetIsStatic()) - pPed->AddToMovingList(); - } - } - return 0; - } - //case COMMAND_SET_LOAD_COLLISION_FOR_OBJECT_FLAG: - case COMMAND_ADD_BIG_GUN_FLASH: - { - CollectParameters(&m_nIp, 6); - CWeapon::AddGunFlashBigGuns(GET_VECTOR_PARAM(0), GET_VECTOR_PARAM(3)); - return 0; - } - case COMMAND_HAS_CHAR_BOUGHT_ICE_CREAM: - { - CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - UpdateCompareFlag(pPed->bBoughtIceCream); - return 0; - } - case COMMAND_GET_PROGRESS_PERCENTAGE: - SET_FLOAT_PARAM(0, CStats::GetPercentageProgress()); - StoreParameters(&m_nIp, 1); - return 0; - case COMMAND_SET_SHORTCUT_PICKUP_POINT: - { - CollectParameters(&m_nIp, 4); - CGameLogic::AddShortCutPointAfterDeath(GET_VECTOR_PARAM(0), GET_FLOAT_PARAM(3)); - return 0; - } - case COMMAND_SET_SHORTCUT_DROPOFF_POINT_FOR_MISSION: - { - CollectParameters(&m_nIp, 4); - CGameLogic::AddShortCutDropOffPointForMission(GET_VECTOR_PARAM(0), GET_FLOAT_PARAM(3)); - return 0; - } - case COMMAND_GET_RANDOM_ICE_CREAM_CUSTOMER_IN_AREA: - { - CollectParameters(&m_nIp, 7); - int ped_handle = -1; - CVector pos = FindPlayerCoors(); - float x1 = GET_FLOAT_PARAM(0); - float y1 = GET_FLOAT_PARAM(1); - float x2 = GET_FLOAT_PARAM(2); - float y2 = GET_FLOAT_PARAM(3); - int i = CPools::GetPedPool()->GetSize(); - while (--i && ped_handle == -1) { - CPed* pPed = CPools::GetPedPool()->GetSlot(i); - if (!pPed) - continue; - if (CTheScripts::LastRandomPedId == CPools::GetPedPool()->GetIndex(pPed)) - continue; - if (pPed->CharCreatedBy != RANDOM_CHAR) - continue; - if (!pPed->IsPedInControl()) - continue; - if (pPed->bRemoveFromWorld) - continue; - if (pPed->bFadeOut) - continue; - if (pPed->m_nWaitState != WAITSTATE_FALSE) - continue; - if (pPed->bHasAlreadyUsedAttractor) - continue; - if (pPed->m_attractor) - continue; - if (!ThisIsAValidRandomPed(pPed->m_nPedType, GET_INTEGER_PARAM(4), GET_INTEGER_PARAM(5), GET_INTEGER_PARAM(6))) - continue; - if (pPed->bIsLeader || pPed->m_leader) - continue; - if (!pPed->IsWithinArea(x1, y1, x2, y2)) - continue; - if (pos.z - PED_FIND_Z_OFFSET > pPed->GetPosition().z) - continue; - if (pos.z + PED_FIND_Z_OFFSET < pPed->GetPosition().z) - continue; - ped_handle = CPools::GetPedPool()->GetIndex(pPed); - CTheScripts::LastRandomPedId = ped_handle; - pPed->CharCreatedBy = MISSION_CHAR; - pPed->bRespondsToThreats = false; - ++CPopulation::ms_nTotalMissionPeds; - if (m_bIsMissionScript) - CTheScripts::MissionCleanUp.AddEntityToList(ped_handle, CLEANUP_CHAR); - } - SET_INTEGER_PARAM(0, ped_handle); - StoreParameters(&m_nIp, 1); - return 0; - } - //case COMMAND_GET_RANDOM_ICE_CREAM_CUSTOMER_IN_ZONE: - case COMMAND_UNLOCK_ALL_CAR_DOORS_IN_AREA: - { - CollectParameters(&m_nIp, 4); - uint32 i = CPools::GetVehiclePool()->GetSize(); - float infX = GET_FLOAT_PARAM(0); - float infY = GET_FLOAT_PARAM(1); - float supX = GET_FLOAT_PARAM(2); - float supY = GET_FLOAT_PARAM(3); - while (i--) { - CVehicle* pVehicle = CPools::GetVehiclePool()->GetSlot(i); - if (!pVehicle) - continue; - if (pVehicle->IsWithinArea(infX, infY, supX, supY)) - pVehicle->m_nDoorLock = CARLOCK_UNLOCKED; - } - return 0; - } - case COMMAND_SET_GANG_ATTACK_PLAYER_WITH_COPS: - CollectParameters(&m_nIp, 2); - CGangs::SetWillAttackPlayerWithCops((ePedType)((int)PEDTYPE_GANG1 + GET_INTEGER_PARAM(0)), !!GET_INTEGER_PARAM(1)); - return 0; - case COMMAND_SET_CHAR_FRIGHTENED_IN_JACKED_CAR: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - pPed->bHeldHostageInCar = GET_INTEGER_PARAM(1); - pPed->b1A4_2 = GET_INTEGER_PARAM(1); - return 0; - } - case COMMAND_SET_VEHICLE_TO_FADE_IN: - { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - CVisibilityPlugins::SetClumpAlpha(pVehicle->GetClump(), GET_INTEGER_PARAM(1)); - return 0; - } - case COMMAND_REGISTER_ODDJOB_MISSION_PASSED: - ++CStats::MissionsPassed; - CStats::CheckPointReachedSuccessfully(); - CTheScripts::LastMissionPassedTime = CTimer::GetTimeInMilliseconds(); - CGameLogic::RemoveShortCutDropOffPointForMission(); - return 0; - case COMMAND_IS_PLAYER_IN_SHORTCUT_TAXI: - { - CollectParameters(&m_nIp, 1); - CPed* pPed = CWorld::Players[GET_INTEGER_PARAM(0)].m_pPed; - script_assert(pPed); - UpdateCompareFlag(pPed->bInVehicle && pPed->m_pMyVehicle && pPed->m_pMyVehicle == CGameLogic::pShortCutTaxi); - return 0; - } - case COMMAND_IS_CHAR_DUCKING: - { - CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - UpdateCompareFlag(RpAnimBlendClumpGetAssociation(pPed->GetClump(), ANIM_STD_DUCK_DOWN) != nil); - return 0; - } - case COMMAND_CREATE_DUST_EFFECT_FOR_CUTSCENE_HELI: - { - CollectParameters(&m_nIp, 3); - CObject* pHeli = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); - bool found = false; - float waterLevel = -1000.0f; - CVector pos = pHeli->GetPosition(); - float radius = GET_FLOAT_PARAM(1); - float ground = CWorld::FindGroundZFor3DCoord(pos.x, pos.y, pos.z, &found); - if (!CWaterLevel::GetWaterLevel(pos.x, pos.y, pos.z, &waterLevel, false)) - waterLevel = 0.0f; - if (waterLevel > ground) - ground = waterLevel; - if (GET_INTEGER_PARAM(2) > 8) - SET_INTEGER_PARAM(2, 8); - CVehicle::HeliDustGenerate(pHeli, (pos.z - ground - 1.0f - radius) * 0.3 + radius, ground, GET_INTEGER_PARAM(2)); - return 0; - } - case COMMAND_REGISTER_FIRE_LEVEL: - CollectParameters(&m_nIp, 1); - CStats::RegisterLevelFireMission(GET_INTEGER_PARAM(0)); - return 0; - case COMMAND_IS_AUSTRALIAN_GAME: - UpdateCompareFlag(false); // should we make some check? - return 0; - case COMMAND_DISARM_CAR_BOMB: - { - CollectParameters(&m_nIp, 1); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - if (pVehicle->IsCar()) { - if (((CAutomobile*)pVehicle)->m_bombType != CARBOMB_NONE) { - ((CAutomobile*)pVehicle)->m_bombType = CARBOMB_NONE; - ((CAutomobile*)pVehicle)->m_pBombRigger = nil; - } - } -#ifdef FIX_BUGS - else if (pVehicle->IsBike()) { - if (((CBike*)pVehicle)->m_bombType != CARBOMB_NONE) { - ((CBike*)pVehicle)->m_bombType = CARBOMB_NONE; - ((CBike*)pVehicle)->m_pBombRigger = nil; - } - } -#endif - return 0; - } - case COMMAND_IS_JAPANESE_GAME: -#ifdef MORE_LANGUAGES - UpdateCompareFlag(FrontEndMenuManager.m_PrefsLanguage == CMenuManager::LANGUAGE_JAPANESE); -#elif (defined GTAVC_JP_PATCH) - UpdateCompareFlag(true); -#else - UpdateCompareFlag(false); -#endif - return 0; - case COMMAND_1442: - CollectParameters(&m_nIp, 4); - return 0; - //case COMMAND_1443: - case COMMAND_GET_DISTANCE_BETWEEN_2D_POINTS: - { - CollectParameters(&m_nIp, 4); - float X1 = GET_FLOAT_PARAM(0); - float Y1 = GET_FLOAT_PARAM(1); - float X2 = GET_FLOAT_PARAM(2); - float Y2 = GET_FLOAT_PARAM(3); - float fDistance = Sqrt((X1 - X2) * (X1 - X2) + (Y1 - Y2) * (Y1 - Y2)); - SET_FLOAT_PARAM(0, fDistance); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_GET_DISTANCE_BETWEEN_3D_POINTS: - { - CollectParameters(&m_nIp, 6); - float X1 = GET_FLOAT_PARAM(0); - float Y1 = GET_FLOAT_PARAM(1); - float Z1 = GET_FLOAT_PARAM(2); - float X2 = GET_FLOAT_PARAM(3); - float Y2 = GET_FLOAT_PARAM(4); - float Z2 = GET_FLOAT_PARAM(5); - float fDistance = Sqrt((X1 - X2) * (X1 - X2) + (Y1 - Y2) * (Y1 - Y2) + (Z1 - Z2) * (Z1 - Z2)); - SET_FLOAT_PARAM(0, fDistance); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_DOT_PRODUCT_2D: - { - CollectParameters(&m_nIp, 4); - float X1 = GET_FLOAT_PARAM(0); - float Y1 = GET_FLOAT_PARAM(1); - float X2 = GET_FLOAT_PARAM(2); - float Y2 = GET_FLOAT_PARAM(3); - float fDistance = X1 * X2 + Y1 * Y2; - SET_FLOAT_PARAM(0, fDistance); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_DOT_PRODUCT_3D: - { - CollectParameters(&m_nIp, 6); - float X1 = GET_FLOAT_PARAM(0); - float Y1 = GET_FLOAT_PARAM(1); - float Z1 = GET_FLOAT_PARAM(2); - float X2 = GET_FLOAT_PARAM(3); - float Y2 = GET_FLOAT_PARAM(4); - float Z2 = GET_FLOAT_PARAM(5); - float fDistance = X1 * X2 + Y1 * Y2 + Z1 * Z2; - SET_FLOAT_PARAM(0, fDistance); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_DEBUG_PRINT_WITH_1_FLOAT: - return 0; - case COMMAND_DEBUG_PRINT_WITH_2_FLOATS: - return 0; - case COMMAND_DEBUG_PRINT_WITH_3_FLOATS: - return 0; - case COMMAND_GET_PAD_BUTTON_STATE: - { - CollectParameters(&m_nIp, 1); - switch (GET_INTEGER_PARAM(0)) { - case 0: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GetOddJobTrigger()); break; - case 1: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GetBrake()); break; - case 2: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GetSteeringLeftRight()); break; - case 3: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GetSteeringUpDown()); break; - case 4: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GetCarGunLeftRight()); break; - case 5: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GetCarGunUpDown()); break; - case 6: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GetPedWalkLeftRight()); break; - case 7: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GetPedWalkUpDown()); break; - case 8: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GetLookLeft()); break; - case 9: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GetLookRight()); break; - case 10: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GetLookBehindForCar()); break; - case 11: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GetLookBehindForPed()); break; - case 12: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GetHorn()); break; - case 13: SET_INTEGER_PARAM(0, CPad::GetPad(0)->HornJustDown()); break; - case 14: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GetCarGunFired()); break; - case 15: SET_INTEGER_PARAM(0, CPad::GetPad(0)->CarGunJustDown()); break; - case 16: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GetHandBrake()); break; - case 17: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GetBrake()); break; - case 18: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GetExitVehicle()); break; - case 19: SET_INTEGER_PARAM(0, CPad::GetPad(0)->ExitVehicleJustDown()); break; - case 20: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GetWeapon()); break; - case 21: SET_INTEGER_PARAM(0, CPad::GetPad(0)->WeaponJustDown()); break; - case 22: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GetAccelerate()); break; - case 23: SET_INTEGER_PARAM(0, CPad::GetPad(0)->CycleCameraModeUpJustDown()); break; - case 24: SET_INTEGER_PARAM(0, CPad::GetPad(0)->CycleWeaponLeftJustDown()); break; - case 25: SET_INTEGER_PARAM(0, CPad::GetPad(0)->CycleWeaponRightJustDown()); break; - case 26: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GetTarget()); break; - case 27: SET_INTEGER_PARAM(0, CPad::GetPad(0)->TargetJustDown()); break; - case 28: SET_INTEGER_PARAM(0, CPad::GetPad(0)->JumpJustDown()); break; - case 29: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GetSprint()); break; - case 30: SET_INTEGER_PARAM(0, CPad::GetPad(0)->ShiftTargetLeftJustDown()); break; - case 31: SET_INTEGER_PARAM(0, CPad::GetPad(0)->ForceCameraBehindPlayer()); break; - case 32: SET_INTEGER_PARAM(0, CPad::GetPad(0)->SniperZoomIn()); break; - case 33: SET_INTEGER_PARAM(0, CPad::GetPad(0)->SniperZoomOut()); break; - case 34: SET_INTEGER_PARAM(0, CPad::GetPad(0)->SniperModeLookLeftRight()); break; - case 35: SET_INTEGER_PARAM(0, CPad::GetPad(0)->SniperModeLookUpDown()); break; - case 36: SET_INTEGER_PARAM(0, CPad::GetPad(0)->LookAroundLeftRight()); break; - case 37: SET_INTEGER_PARAM(0, CPad::GetPad(0)->LookAroundUpDown()); break; - case 38: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GuiLeft()); break; - case 39: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GuiRight()); break; - case 40: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GuiUp()); break; - case 41: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GuiDown()); break; - case 42: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GuiSelect()); break; - case 43: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GuiBack()); break; - case 44: SET_INTEGER_PARAM(0, CPad::GetPad(0)->GetSkipCutscene()); if (GET_INTEGER_PARAM(0)) TheCamera.m_bIgnoreFadingStuffForMusic = false; break; // spectacular hack - } - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_SET_NAVIGATION_ARROW: - { - CollectParameters(&m_nIp, 3); - // cNavArrow::SetTarget(GET_FLOAT_PARAM(0), GET_FLOAT_PARAM(0), GET_FLOAT_PARAM(0)); // TODO, although it's unused - return 0; - } - case COMMAND_CLEAR_NAVIGATION_ARROW: - { - // cNavArrow::ClearTarget(); // TODO, although it's unused - return 0; - } - case COMMAND_CALL: - case COMMAND_CALLNOT: - { - m_anStack[m_nStackPointer++] = m_nIp | BIT(STACKVALUE_IS_FUNCTION_CALL_BIT) | ((command == COMMAND_CALLNOT) ? BIT(STACKVALUE_INVERT_RETURN_BIT) : 0); - uint8 nInputParams = CTheScripts::Read1ByteFromScript(&m_nIp); - uint8 nOutputParameters = CTheScripts::Read1ByteFromScript(&m_nIp); - uint8 nLocalsOffset = CTheScripts::Read1ByteFromScript(&m_nIp); - uint32 nIPBeforeParameters = m_nIp; - CollectParameters(&m_nIp, 1); - if (nInputParams) - CollectParameters(&m_nIp, nInputParams, &m_anLocalVariables[m_nLocalsPointer + nLocalsOffset]); - m_nLocalsPointer += nLocalsOffset; - m_anStack[m_nStackPointer - 1] |= (m_nIp - nIPBeforeParameters) << STACKVALUE_IP_PARAMS_OFFSET; - if (GET_INTEGER_PARAM(0) < 0) - m_nIp = CTheScripts::MainScriptSize - GET_INTEGER_PARAM(0); - else - m_nIp = GET_INTEGER_PARAM(0); - return 0; - } - case COMMAND_IS_CAR_AUTOMOBILE: - { - CollectParameters(&m_nIp, 1); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - UpdateCompareFlag(pVehicle->GetModelIndex() >= MI_FIRST_VEHICLE && pVehicle->GetModelIndex() < MI_FERRY); - return 0; - } - case COMMAND_IS_CAR_BIKE: - { - CollectParameters(&m_nIp, 1); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - UpdateCompareFlag(pVehicle->GetModelIndex() >= MI_ANGEL && pVehicle->GetModelIndex() <= MI_SANCHEZ); - return 0; - } - return 0; - case COMMAND_IS_CAR_PLANE: - { - CollectParameters(&m_nIp, 1); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - UpdateCompareFlag(pVehicle->GetModelIndex() >= MI_AIRTRAIN && pVehicle->GetModelIndex() <= MI_DEADDODO); - return 0; - } - case COMMAND_IS_CAR_HELI: - { - CollectParameters(&m_nIp, 1); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - UpdateCompareFlag(pVehicle->GetModelIndex() >= MI_ESCAPE && pVehicle->GetModelIndex() <= MI_CHOPPER); - return 0; - } -#ifdef FIX_BUGS - case COMMAND_1476: // they DO have it in script - return 0; -#endif - case COMMAND_RETURN_IF_TRUE: - if (m_bCondResult) { - ReturnFromGosubOrFunction(); - } - return 0; - case COMMAND_RETURN_TRUE_IF_TRUE: - if (m_bCondResult) { - UpdateCompareFlag(false); - ReturnFromGosubOrFunction(); - } - return 0; - case COMMAND_SET_CHAR_ONLY_ALLOWED_TO_SIT_BEHIND: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - pPed->bOnlyAllowedToSitBehind = GET_INTEGER_PARAM(1); - return 0; - } - case COMMAND_SET_RC_HELI_HEIGHT_LIMIT: - CollectParameters(&m_nIp, 1); - CVehicle::rcHeliHeightLimit = GET_FLOAT_PARAM(0); - return 0; - case COMMAND_CREATE_SCRIPT_CORONA: - { - CollectParameters(&m_nIp, 9); - base::cSList::tSItem* pCorona = new base::cSList::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); - for (base::cSList::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); - CBoat* pVehicle = (CBoat*)CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle && pVehicle->IsBoat()); - UpdateCompareFlag(pVehicle->bBoatInWater); - return 0; - } - case COMMAND_IS_CAR_DRIVER_BEING_JACKED: - { - CollectParameters(&m_nIp, 1); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - UpdateCompareFlag(pVehicle->bIsBeingCarJacked); - return 0; - } - case COMMAND_SET_CHAR_ONLY_ALLOWED_TO_SIT_IN_FRONT: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - pPed->bOnlyAllowedToSitInFront = GET_INTEGER_PARAM(1); - return 0; - } - case COMMAND_SET_CAR_TILTED_BY_CHAR: - { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(1)); - script_assert(pVehicle); - pVehicle->ApplyTurnForce(0.0f, 0.0f, CGeneral::GetRandomNumberInRange(-0.8f, -1.2f)* pPed->m_fMass, - pPed->GetPosition().x - pVehicle->GetPosition().x, pPed->GetPosition().y - pVehicle->GetPosition().y, 0.0f); - DMAudio.PlayOneShot(pVehicle->m_audioEntityId, SOUND_CAR_JERK, 0.0f); - return 0; - } - case COMMAND_GET_WEAPON_TYPE_FOR_PICKUP_IN_AREA: - { - CollectParameters(&m_nIp, 4); - float X = GET_FLOAT_PARAM(0); - float Y = GET_FLOAT_PARAM(1); - float Z = GET_FLOAT_PARAM(2); - float radius = GET_FLOAT_PARAM(3); - int model = -1; - bool found = false; - for (uint32 i = 0; i < NUMPICKUPS; i++) { - CPickup* pPickup = &CPickups::aPickUps[i]; - if (pPickup->m_eType != PICKUP_NONE) { - CVector fDist = pPickup->m_vecPos - CVector(X, Y, Z); -#ifndef FIX_BUGS // this breaks ALL pickups! - pPickup->m_eModelIndex = 4; -#endif - if (fDist.Magnitude() < radius && pPickup->m_pObject) { - found = true; - model = CPickups::WeaponForModel(pPickup->m_pObject->GetModelIndex()); - } - } - } - SET_INTEGER_PARAM(0, model); - StoreParameters(&m_nIp, 1); - } - case COMMAND_IS_PLAYER_USING_FIRST_PERSON_WEAPON_CAMERA: - CollectParameters(&m_nIp, 1); - UpdateCompareFlag(TheCamera.Using1stPersonWeaponMode()); - return 0; - //case COMMAND_1489: - //case COMMAND_1490: - //case COMMAND_1491: - case COMMAND_SET_DEBUG_MENU_ACTIVE: - CollectParameters(&m_nIp, 1); - // this sets two values on PS2 and PSP, but not on mobile - TODO? - return 0; - case COMMAND_SET_DRAW_HUD: - CollectParameters(&m_nIp, 1); - CHud::m_Wants_To_Draw_Hud = (GET_INTEGER_PARAM(0) != 0); - return 0; - case COMMAND_GET_RANDOM_CHAR_IN_AREA_NO_CHECKS: - { - CollectParameters(&m_nIp, 4); - int ped_handle = -1; - CVector pos = FindPlayerCoors(); - float x1 = GET_FLOAT_PARAM(0); - float y1 = GET_FLOAT_PARAM(1); - float x2 = GET_FLOAT_PARAM(2); - float y2 = GET_FLOAT_PARAM(3); - int i = CPools::GetPedPool()->GetSize(); - while (--i && ped_handle == -1) { - CPed* pPed = CPools::GetPedPool()->GetSlot(i); - if (!pPed) - continue; - if (pPed->bRemoveFromWorld) - continue; - if (pPed->bFadeOut) - continue; - if (pPed->m_nWaitState != WAITSTATE_FALSE) - continue; - if (!pPed->IsWithinArea(x1, y1, x2, y2)) - continue; - if (pos.z - PED_FIND_Z_OFFSET > pPed->GetPosition().z) - continue; - if (pos.z + PED_FIND_Z_OFFSET < pPed->GetPosition().z) - continue; - ped_handle = CPools::GetPedPool()->GetIndex(pPed); - CTheScripts::LastRandomPedId = ped_handle; - pPed->CharCreatedBy = MISSION_CHAR; - pPed->bRespondsToThreats = false; - ++CPopulation::ms_nTotalMissionPeds; - if (m_bIsMissionScript) - CTheScripts::MissionCleanUp.AddEntityToList(ped_handle, CLEANUP_CHAR); - } - SET_INTEGER_PARAM(0, ped_handle); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_GET_RANDOM_CAR_IN_AREA_NO_CHECKS_NO_SAVE: - { - CollectParameters(&m_nIp, 4); - int handle = -1; - uint32 i = CPools::GetVehiclePool()->GetSize(); - float infX = GET_FLOAT_PARAM(0); - float infY = GET_FLOAT_PARAM(1); - float supX = GET_FLOAT_PARAM(2); - float supY = GET_FLOAT_PARAM(3); - while (i-- && handle == -1) { - CVehicle* pVehicle = CPools::GetVehiclePool()->GetSlot(i); - if (!pVehicle) - continue; - if (!pVehicle->IsWithinArea(infX, infY, supX, supY)) - continue; - handle = CPools::GetVehiclePool()->GetIndex(pVehicle); - } - SET_INTEGER_PARAM(0, handle); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_STORE_CAR_COLLIDED_WITH_NO_SAVE: - { - CollectParameters(&m_nIp, 1); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - if (!pVehicle) - printf("STORE_CAR_COLLIDED_WITH_NO_SAVE - Car doesn\'t exist\n"); - else { - if (pVehicle->m_pLastDamageEntity == nil) - SET_INTEGER_PARAM(0, -1); - else { - // what they are doing is not very safe as m_pLastDamageEntity doesn't have to be CVehicle -#ifdef FIX_BUGS - if (!pVehicle->m_pLastDamageEntity->IsVehicle()) { - SET_INTEGER_PARAM(0, -1); - } - else -#endif - { - SET_INTEGER_PARAM(0, CPools::GetVehiclePool()->GetIndex((CVehicle*)pVehicle->m_pLastDamageEntity)); - pVehicle->m_pLastDamageEntity = nil; - } - } - } - StoreParameters(&m_nIp, 1); - return 0; - } - default: - script_assert(0); - } - return -1; -} + diff --git a/src/control/Script9.cpp b/src/control/Script9.cpp index 875aa96b..be57eff5 100644 --- a/src/control/Script9.cpp +++ b/src/control/Script9.cpp @@ -23,759 +23,4 @@ #include "Vehicle.h" #include "World.h" -// LCS: file done except TODOs (also check commented out strings) -int8 CRunningScript::ProcessCommands1500To1599(int32 command) -{ - switch (command) { - case COMMAND_DISABLE_FERRY_PATH: - { - CollectParameters(&m_nIp, 1); - CFerry::DissableFerryPath(GET_INTEGER_PARAM(0)); - return 0; - } - case COMMAND_ENABLE_FERRY_PATH: - { - CollectParameters(&m_nIp, 1); - CFerry::EnableFerryPath(GET_INTEGER_PARAM(0)); - return 0; - } - case COMMAND_GET_CLOSEST_DOCKED_FERRY: - { - CollectParameters(&m_nIp, 2); - CFerry* pFerry = CFerry::GetClosestFerry(GET_FLOAT_PARAM(0), GET_FLOAT_PARAM(1)); - int id = -1; - if (pFerry && pFerry->IsDocked()) - id = pFerry->m_nFerryId; - SET_INTEGER_PARAM(0, id); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_OPEN_FERRY_DOOR: - { - CollectParameters(&m_nIp, 1); - CFerry* pFerry = CFerry::GetFerry(GET_INTEGER_PARAM(0)); - script_assert(pFerry); - pFerry->OpenDoor(); - return 0; - } - case COMMAND_CLOSE_FERRY_DOOR: - { - CollectParameters(&m_nIp, 1); - CFerry* pFerry = CFerry::GetFerry(GET_INTEGER_PARAM(0)); - script_assert(pFerry); - pFerry->CloseDoor(); - return 0; - } - case COMMAND_IS_FERRY_DOOR_OPEN: - { - CollectParameters(&m_nIp, 1); - CFerry* pFerry = CFerry::GetFerry(GET_INTEGER_PARAM(0)); - script_assert(pFerry); - UpdateCompareFlag(pFerry->IsDoorOpen()); - return 0; - } - case COMMAND_IS_FERRY_DOOR_CLOSED: - { - CollectParameters(&m_nIp, 1); - CFerry* pFerry = CFerry::GetFerry(GET_INTEGER_PARAM(0)); - script_assert(pFerry); - UpdateCompareFlag(pFerry->IsDoorClosed()); - return 0; - } - case COMMAND_SKIP_FERRY_TO_NEXT_DOCK: - { - CollectParameters(&m_nIp, 1); - CFerry* pFerry = CFerry::GetFerry(GET_INTEGER_PARAM(0)); - script_assert(pFerry); - pFerry->SkipFerryToNextDock(); - return 0; - } - case COMMAND_SET_CHAR_DROPS_WEAPONS_ON_DEATH: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - pPed->bDropsWeaponsOnDeath = (GET_INTEGER_PARAM(1) != 0); - return 0; - } - case COMMAND_IS_CHAR_CROUCHING: - { - CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - UpdateCompareFlag(pPed->bIsDucking); - return 0; - } - case COMMAND_GET_FERRY_BOARDING_SPACE: - { - CollectParameters(&m_nIp, 4); - CFerry* pFerry = CFerry::GetFerry(GET_INTEGER_PARAM(0)); - script_assert(pFerry); - CVector space = pFerry->GetBoardingSpace((CFerry::eSpaceUse)GET_INTEGER_PARAM(1), (CFerry::eSpaceStyle)GET_INTEGER_PARAM(2), GET_INTEGER_PARAM(3)); - SET_FLOAT_PARAM(0, space.x); - SET_FLOAT_PARAM(1, space.y); - StoreParameters(&m_nIp, 2); - return 0; - } - case COMMAND_GET_FERRY_HEADING: - { - CollectParameters(&m_nIp, 1); - CFerry* pFerry = CFerry::GetFerry(GET_INTEGER_PARAM(0)); - script_assert(pFerry); - float fHeading = Atan2(-pFerry->GetForward().x, pFerry->GetForward().y); - SET_FLOAT_PARAM(0, fHeading); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_SET_FERRIES_DISABLED: - { - CollectParameters(&m_nIp, 2); - CFerry::SetFerriesDisabled(GET_INTEGER_PARAM(1)); - return 0; - } - case COMMAND_COMPLETE_FERRY_DOOR_MOVEMENT: - { - CollectParameters(&m_nIp, 1); - CFerry* pFerry = CFerry::GetFerry(GET_INTEGER_PARAM(0)); - script_assert(pFerry); - pFerry->CompleteDorrMovement(); - return 0; - } - case COMMAND_OVERRIDE_CAR_REMOTE_CONTROL: - { - CollectParameters(&m_nIp, 2); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - pVehicle->SetStatus(STATUS_PLAYER_REMOTE); - CVehicle::bDisableRemoteDetonation = true; - CWorld::Players[CWorld::PlayerInFocus].m_pRemoteVehicle = pVehicle; - pVehicle->RegisterReference((CEntity**)&CWorld::Players[CWorld::PlayerInFocus].m_pRemoteVehicle); - if (pVehicle->GetVehicleAppearance() == VEHICLE_APPEARANCE_HELI || pVehicle->GetVehicleAppearance() == VEHICLE_APPEARANCE_PLANE) { - TheCamera.TakeControl(pVehicle, CCam::MODE_CAM_ON_A_STRING, GET_INTEGER_PARAM(1) ? INTERPOLATION : JUMP_CUT, CAMCONTROL_SCRIPT); - TheCamera.SetZoomValueCamStringScript(0); - } - else { - TheCamera.TakeControl(pVehicle, CCam::MODE_1STPERSON, GET_INTEGER_PARAM(1) ? INTERPOLATION : JUMP_CUT, CAMCONTROL_SCRIPT); - script_assert(pVehicle->IsCar()); - ((CAutomobile*)pVehicle)->Damage.m_bSmashedDoorDoesntClose = true; - } - if (m_bIsMissionScript) - CTheScripts::MissionCleanUp.RemoveEntityFromList(GET_INTEGER_PARAM(0), CLEANUP_CAR); - if (FindPlayerVehicle()) - FindPlayerVehicle()->bCanBeDamaged = false; - return 0; - } - case COMMAND_CANCEL_REMOTE_MODE: - { - if (FindPlayerVehicle()) - FindPlayerVehicle()->bCanBeDamaged = true; - CRemote::TakeRemoteControlledCarFromPlayer(false); - CWorld::Players[CWorld::PlayerInFocus].field_D6 = false; - CWorld::Players[CWorld::PlayerInFocus].m_pRemoteVehicle = nil; - TheCamera.Restore(); - return 0; - } - case COMMAND_REGISTER_CAR_SOLD: - // CStats::CarsSold++; - return 0; - case COMMAND_ADD_MONEY_MADE_WITH_CAR_SALES: - CollectParameters(&m_nIp, 1); - // CStats::MoneyMadeWithCarSales += GET_INTEGER_PARAM(0); - return 0; - case COMMAND_SET_BRIDGE_STATE: - { - CollectParameters(&m_nIp, 1); -#ifdef GTA_BRIDGE - /* - * 0 = locked - * 1 = unlocked - * 2 = operational - */ - switch (GET_INTEGER_PARAM(0)) { - case 0: CBridge::ForceBridgeState(STATE_BRIDGE_LOCKED); break; - case 1: CBridge::ForceBridgeState(STATE_BRIDGE_ALWAYS_UNLOCKED); break; - case 2: - if (CBridge::State == STATE_LIFT_PART_IS_DOWN || CBridge::State == STATE_BRIDGE_ALWAYS_UNLOCKED) - CBridge::ForceBridgeState(STATE_LIFT_PART_ABOUT_TO_MOVE_UP); - else - CBridge::ForceBridgeState(STATE_LIFT_PART_MOVING_DOWN); - break; - default: script_assert(false); - } -#endif - return 0; - } - case COMMAND_SET_OBJECT_TURN_SPEED: - { - CollectParameters(&m_nIp, 4); - CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pObject); - CVector vSpeed = GET_VECTOR_PARAM(1) / GAME_SPEED_TO_METERS_PER_SECOND; - pObject->SetTurnSpeed(vSpeed.x, vSpeed.y, vSpeed.z); - return 0; - } - case COMMAND_SET_OBJECT_MASS: - { - CollectParameters(&m_nIp, 4); - CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pObject); - pObject->m_fMass = GET_FLOAT_PARAM(1); - pObject->m_fTurnMass = GET_FLOAT_PARAM(2); - pObject->m_fAirResistance = GET_FLOAT_PARAM(3); - if (pObject->m_fMass < 99998.0f) { - pObject->bInfiniteMass = false; - pObject->m_phy_flagA08 = false; - pObject->bAffectedByGravity = true; - } - else { - pObject->bInfiniteMass = true; - pObject->m_phy_flagA08 = true; - pObject->bAffectedByGravity = false; - } - return 0; - } - case COMMAND_HAS_CUTSCENE_LOADED: - UpdateCompareFlag(CCutsceneMgr::ms_cutsceneLoadStatus == CUTSCENE_LOADED); - return 0; - case COMMAND_SET_UNIQUE_JUMPS_FOUND: - CollectParameters(&m_nIp, 1); - CStats::NumberOfUniqueJumpsFound = GET_INTEGER_PARAM(0); - return 0; - case COMMAND_SET_HIDDEN_PACKAGES_COLLECTED: - CollectParameters(&m_nIp, 1); - CWorld::Players[CWorld::PlayerInFocus].m_nCollectedPackages = GET_INTEGER_PARAM(0); - return 0; - case COMMAND_REGISTER_BIKE_SOLD: - // CStats::BikesSold++; - return 0; - case COMMAND_ADD_MONEY_MADE_WITH_BIKE_SALES: - CollectParameters(&m_nIp, 1); - // CStats::MoneyMadeWithBikeSales += GET_INTEGER_PARAM(0); - return 0; - case COMMAND_REGISTER_PACKAGE_SMUGGLED: - // CStats::PackagesSmuggled++; - return 0; - case COMMAND_REGISTER_SMUGGLER_WASTED: - // CStats::SmugglersWasted++; - return 0; - case COMMAND_REGISTER_FASTEST_SMUGGLING_TIME: - CollectParameters(&m_nIp, 1); - // CStats::RegisterFastestSmugglingTime(GET_INTEGER_PARAM(0)); - return 0; - case COMMAND_SET_CHAR_DIVE_FROM_CAR: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(1)); - script_assert(pPed); - pPed->bRespondsToThreats = true; - pPed->SetEvasiveDive(pVehicle, 1); - return 0; - } - case COMMAND_WRECK_CAR: - { - CollectParameters(&m_nIp, 1); - CAutomobile* pVehicle = (CAutomobile*)CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - script_assert(pVehicle->IsCar()); - pVehicle->m_fHealth = 0.0f; - pVehicle->SetStatus(STATUS_WRECKED); - pVehicle->bRenderScorched = true; - pVehicle->Damage.FuckCarCompletely(); - if (pVehicle->GetModelIndex() != MI_RCBANDIT) { - pVehicle->SetBumperDamage(CAR_BUMP_FRONT, VEHBUMPER_FRONT); - pVehicle->SetBumperDamage(CAR_BUMP_REAR, VEHBUMPER_REAR); - pVehicle->SetDoorDamage(CAR_BONNET, DOOR_BONNET); - pVehicle->SetDoorDamage(CAR_BOOT, DOOR_BOOT); - pVehicle->SetDoorDamage(CAR_DOOR_LF, DOOR_FRONT_LEFT); - pVehicle->SetDoorDamage(CAR_DOOR_RF, DOOR_FRONT_RIGHT); - pVehicle->SetDoorDamage(CAR_DOOR_LR, DOOR_REAR_LEFT); - pVehicle->SetDoorDamage(CAR_DOOR_RR, DOOR_REAR_RIGHT); - } - pVehicle->m_bombType = CARBOMB_NONE; - pVehicle->bEngineOn = false; - pVehicle->bLightsOn = false; - pVehicle->m_fHealth = 0.0f; - pVehicle->m_nBombTimer = 0; - pVehicle->m_bSirenOrAlarm = false; - return 0; - } - case COMMAND_ADD_MONEY_MADE_IN_COACH: - CollectParameters(&m_nIp, 1); - // CStats::MoneyMadeInCoach += GET_INTEGER_PARAM(0); - return 0; - case COMMAND_ADD_MONEY_MADE_COLLECTING_TRASH: - CollectParameters(&m_nIp, 1); - // CStats::MoneyMadeCollectingTrash += GET_INTEGER_PARAM(0); - return 0; - case COMMAND_REGISTER_HITMAN_KILLED: - // CStats::HitmenKilled++; - return 0; - case COMMAND_REGISTER_GUARDIAN_ANGEL_MISSION_PASSED: - // CStats::GaurdianAngelMissionsPassed++; - return 0; - case COMMAND_REGISTER_HIGHEST_GUARDIAN_ANGEL_JUSTICE_DISHED: - CollectParameters(&m_nIp, 1); - // CStats::RegisterHighestGaurdianAngelJusticeDished(GET_INTEGER_PARAM(0)); - return 0; - case COMMAND_REGISTER_BEST_BANDIT_LAP_TIME: - CollectParameters(&m_nIp, 2); - // CStats::RegisterBestBanditLapTime(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); - return 0; - case COMMAND_REGISTER_BEST_BANDIT_POSITION: - CollectParameters(&m_nIp, 2); - // CStats::RegisterBestBanditPosition(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); - return 0; - case COMMAND_REGISTER_MOST_TIME_LEFT_TRAIN_RACE: - CollectParameters(&m_nIp, 1); - // CStats::RegisterMostTimeLeftTrainRace(GET_INTEGER_PARAM(0)); - return 0; - case COMMAND_REGISTER_HIGHEST_TRAIN_CASH_EARNED: - CollectParameters(&m_nIp, 1); - // CStats::RegisterHighestTrainCashEarned(GET_INTEGER_PARAM(0)); - return 0; - case COMMAND_REGISTER_FASTEST_HELI_RACE_TIME: - // CStats::RegisterFastestHeliRaceTime(GET_INTEGER_PARAM(0)); - CollectParameters(&m_nIp, 1); - return 0; - case COMMAND_REGISTER_BEST_HELI_RACE_POSITION: - // CStats::RegisterBestHeliRacePosition(GET_INTEGER_PARAM(0)); - CollectParameters(&m_nIp, 1); - return 0; - case COMMAND_REGISTER_OUTFIT_CHANGE: - // CStats::NumberOutfitChanges++; - return 0; - case COMMAND_REGISTER_STREET_RACE_FASTEST_TIME: - // CStats::RegisterStreetRaceFastestTime(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); - CollectParameters(&m_nIp, 2); - return 0; - case COMMAND_REGISTER_STREET_RACE_FASTEST_LAP: - CollectParameters(&m_nIp, 2); - // CStats::RegisterStreetRaceFastestLap(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); - return 0; - case COMMAND_REGISTER_STREET_RACE_BEST_POSITION: - CollectParameters(&m_nIp, 2); - // CStats::RegisterStreetRaceBestPosition(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); - 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) { - printf("HAS_OBJECT_BEEN_DAMAGED_BY_WEAPON - Object doesn\'t exist\n"); - } - else { - if (GET_INTEGER_PARAM(1) == WEAPONTYPE_ANYMELEE || GET_INTEGER_PARAM(1) == WEAPONTYPE_ANYWEAPON) - result = CheckDamagedWeaponType(pObject->m_nLastWeaponToDamage, GET_INTEGER_PARAM(1)); - else - result = GET_INTEGER_PARAM(1) == pObject->m_nLastWeaponToDamage; - } - UpdateCompareFlag(result); - return 0; - } - case COMMAND_CLEAR_OBJECT_LAST_WEAPON_DAMAGE: - { - CollectParameters(&m_nIp, 1); - CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); - if (!pObject) - printf("CLEAR_OBJECT_LAST_WEAPON_DAMAGE - pObject doesn\'t exist"); - else - pObject->m_nLastWeaponToDamage = -1; - return 0; - } - case COMMAND_SET_CAR_TURN_SPEED: - { - CollectParameters(&m_nIp, 4); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - CVector vSpeed = GET_VECTOR_PARAM(1) / GAME_SPEED_TO_METERS_PER_SECOND; - pVehicle->SetTurnSpeed(vSpeed.x, vSpeed.y, vSpeed.z); - return 0; - } - case COMMAND_SET_CAR_MOVE_SPEED: - { - CollectParameters(&m_nIp, 4); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - CVector vSpeed = GET_VECTOR_PARAM(1) / GAME_SPEED_TO_METERS_PER_SECOND; - pVehicle->SetMoveSpeed(vSpeed); - return 0; - } - case COMMAND_SET_OBJECT_PROOFS: - { - CollectParameters(&m_nIp, 6); - CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pObject); - pObject->bBulletProof = (GET_INTEGER_PARAM(1) != 0); - pObject->bFireProof = (GET_INTEGER_PARAM(2) != 0); - pObject->bExplosionProof = (GET_INTEGER_PARAM(3) != 0); - pObject->bCollisionProof = (GET_INTEGER_PARAM(4) != 0); - pObject->bMeleeProof = (GET_INTEGER_PARAM(5) != 0); - return 0; - } - case COMMAND_GET_CAMERA_PED_ZOOM_INDICATOR: - if (TheCamera.Cams[TheCamera.ActiveCam].Mode == CCam::MODE_FOLLOWPED) - SET_INTEGER_PARAM(0, TheCamera.PedZoomIndicator); - else - SET_INTEGER_PARAM(0, -1); - StoreParameters(&m_nIp, 1); - return 0; - case COMMAND_SET_CAMERA_PED_ZOOM_INDICATOR: - CollectParameters(&m_nIp, 1); - if (TheCamera.Cams[TheCamera.ActiveCam].Mode == CCam::MODE_FOLLOWPED) - TheCamera.PedZoomIndicator = GET_INTEGER_PARAM(0); - return 0; - case COMMAND_GET_CAR_ORIENTATION: - { - CollectParameters(&m_nIp, 1); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - SET_FLOAT_PARAM(1, LimitAngleOnCircle(RADTODEG(Asin(pVehicle->GetForward().z)))); - SET_FLOAT_PARAM(2, LimitAngleOnCircle(RADTODEG(Atan2(-pVehicle->GetForward().x, pVehicle->GetForward().y)))); - SET_FLOAT_PARAM(0, LimitAngleOnCircle(RADTODEG(Atan2(-pVehicle->GetRight().z, pVehicle->GetUp().z)))); - StoreParameters(&m_nIp, 3); - return 0; - } - case COMMAND_SET_CAR_ORIENTATION: - { - CollectParameters(&m_nIp, 4); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - pVehicle->SetOrientation(DEGTORAD(GET_FLOAT_PARAM(2)), DEGTORAD(GET_FLOAT_PARAM(1)), DEGTORAD(GET_FLOAT_PARAM(3))); - return 0; - } - case COMMAND_IS_DEBUG_MENU_ON: - // on PS2 it's something actual - TODO - UpdateCompareFlag(false); - return 0; - case COMMAND_OPEN_VAN_BACK_DOORS: - { - CollectParameters(&m_nIp, 1); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - assert(pVehicle); - pVehicle->ProcessOpenDoor(CAR_DOOR_RR, ANIM_STD_VAN_OPEN_DOOR_REAR_RHS, 1.0f); - pVehicle->ProcessOpenDoor(CAR_DOOR_LR, ANIM_STD_VAN_OPEN_DOOR_REAR_LHS, 1.0f); - return 0; - } - case COMMAND_GET_CHAR_THREAT_CHAR: - { - CollectParameters(&m_nIp, 1); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - SET_INTEGER_PARAM(0, 0); - CEntity* pThreat = pPed->m_threatEntity; - if (pThreat && pThreat->IsPed()) - SET_INTEGER_PARAM(0, CPools::GetPedPool()->GetIndex((CPed*)pThreat)); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_FREEZE_PED_ZOOM_SWITCH: - CollectParameters(&m_nIp, 1); - TheCamera.m_bFreezePedZoomSwitch = GET_INTEGER_PARAM(0); - return 0; - case COMMAND_SET_OBJECT_RENDERED_DAMAGED: - { - CollectParameters(&m_nIp, 1); - CObject* pObject = CPools::GetObjectPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pObject); - pObject->bRenderDamaged = true; - return 0; - } - case COMMAND_GET_RANDOM_CAR_IN_AREA_NO_SAVE: - { - CollectParameters(&m_nIp, 5); - int handle = -1; - uint32 i = CPools::GetVehiclePool()->GetSize(); - float infX = GET_FLOAT_PARAM(0); - float infY = GET_FLOAT_PARAM(1); - float supX = GET_FLOAT_PARAM(2); - float supY = GET_FLOAT_PARAM(3); - while (i-- && handle == -1) { - CVehicle* pVehicle = CPools::GetVehiclePool()->GetSlot(i); - if (!pVehicle) - continue; - if (pVehicle->GetVehicleAppearance() != VEHICLE_APPEARANCE_CAR && pVehicle->GetVehicleAppearance() != VEHICLE_APPEARANCE_BIKE) - continue; -#ifdef FIX_BUGS - if (pVehicle->m_fHealth <= 0.0f) -#else - if (pVehicle->m_fHealth == 0.0f) -#endif - continue; - if (pVehicle->GetModelIndex() != GET_INTEGER_PARAM(4) && GET_INTEGER_PARAM(4) >= 0) - continue; - if (pVehicle->VehicleCreatedBy != RANDOM_VEHICLE) - continue; - if (!pVehicle->IsWithinArea(infX, infY, supX, supY)) - continue; - handle = CPools::GetVehiclePool()->GetIndex(pVehicle); - } - SET_INTEGER_PARAM(0, handle); - StoreParameters(&m_nIp, 1); - return 0; - } - case COMMAND_IS_PLAYER_MADE_SAFE: - { - UpdateCompareFlag(CPad::GetPad(0)->IsPlayerControlsDisabledBy(PLAYERCONTROL_PLAYERINFO)); - return 0; - } - case COMMAND_PRINT_IF_FREE: - { - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CollectParameters(&m_nIp, 2); - //CMessages::AddMessageIfFree(text, GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); TODO - return 0; - } - case COMMAND_IS_E3_BUILD: - UpdateCompareFlag(false); - return 0; - case COMMAND_DECLARE_FORT_STAUNTON_DESTROYED_FLAG: - CTheScripts::FSDestroyedFlag = (uint8*)GetPointerToScriptVariable(&m_nIp, VAR_GLOBAL) - CTheScripts::ScriptSpace; - return 0; - case COMMAND_CLEAR_BIG_MESSAGES: - //CMessages::ClearBigMessagesOnly(); TODO - //CHud::ClearBigMessagesExcept(2, 2); TODO - CGarages::MessageEndTime = CGarages::MessageStartTime; - return 0; - case COMMAND_CLEAR_AREA_OF_OBJECTS: - { - CollectParameters(&m_nIp, 6); - uint32 i = CPools::GetObjectPool()->GetSize(); - float infX = GET_FLOAT_PARAM(0); - float infY = GET_FLOAT_PARAM(1); - float infZ = GET_FLOAT_PARAM(2); - float supX = GET_FLOAT_PARAM(3); - float supY = GET_FLOAT_PARAM(4); - float supZ = GET_FLOAT_PARAM(5); - while (i--) { - CObject* pObject = CPools::GetObjectPool()->GetSlot(i); - if (pObject && pObject->CanBeDeleted() && pObject->IsWithinArea(infX, infY, infZ, supX, supY, supZ)) { - pObject->DeleteRwObject(); - CWorld::Remove(pObject); - delete pObject; - } - } - i = CPools::GetDummyPool()->GetSize(); - while (i--) { - CDummy* pDummy = CPools::GetDummyPool()->GetSlot(i); - if (pDummy && pDummy->IsObject() && pDummy->IsWithinArea(infX, infY, infZ, supX, supY, supZ)) { - pDummy->DeleteRwObject(); - CWorld::Remove(pDummy); - delete pDummy; - } - } - return 0; - } - case COMMAND_LOAD_NON_STANDARD_PED_ANIM: - CollectParameters(&m_nIp, 1); - CPed::LoadNonStandardPedAnim((eWaitState)GET_INTEGER_PARAM(0)); - return 0; - case COMMAND_UNLOAD_NON_STANDARD_PED_ANIM: - CollectParameters(&m_nIp, 1); - CPed::UnloadNonStandardPedAnim((eWaitState)GET_INTEGER_PARAM(0)); - return 0; - case COMMAND_1566: - CollectParameters(&m_nIp, 1); - return 0; - case COMMAND_BUILD_WORLD_GEOMETRY: - CollectParameters(&m_nIp, 1); - if (/*gBuildWorldGeom*/ false) { - //base::cWorldGeom::GetInstance()->Build(GET_INTEGER_PARAM(0)); - UpdateCompareFlag(true); - } - else { - UpdateCompareFlag(false); - } - return 0; - case COMMAND_STORE_BUILDING_SWAP: - CollectParameters(&m_nIp, 4); - // base::cWorldGeom::GetInstance()->StoreBuildingSwap(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), GET_INTEGER_PARAM(3) != 0); - return 0; - case COMMAND_IS_MULTIPLAYER_ACTIVE: -#ifdef GTA_NETWORK - UpdateCompareFlag(gIsMultiplayerGame); -#else - UpdateCompareFlag(false); -#endif - return 0; - case COMMAND_GET_MULTIPLAYER_MODE: - SET_INTEGER_PARAM(0, 0); // TODO - StoreParameters(&m_nIp, 1); - return 0; - case COMMAND_MULTIPLAYER_SCRIPT_DONE: - printf("COMMAND_MULTIPLAYER_SCRIPT_DONE\n"); - //gbStartingScriptsFromLua = false; TODO? - return 0; - case COMMAND_IS_MULTIPLAYER_SERVER: - UpdateCompareFlag(false); // TODO? - return 0; - case COMMAND_IS_MULTIPLAYER_TEAM_GAME: - UpdateCompareFlag(false); // TODO? - return 0; - case COMMAND_GET_MULTIPLAYER_TEAM_ID: - SET_INTEGER_PARAM(0, 0); // TODO - StoreParameters(&m_nIp, 1); - return 0; - case COMMAND_DOES_SHORTCUT_TAXI_EXIST: - UpdateCompareFlag(CGameLogic::pShortCutTaxi != nil); - return 0; - case COMMAND_SET_ONSCREEN_TIMER_COLOUR: - CollectParameters(&m_nIp, 4); - gbColour = CRGBA(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), GET_INTEGER_PARAM(3)); - return 0; - case COMMAND_SET_ONSCREEN_TIMER_BACKGROUND_COLOUR: - CollectParameters(&m_nIp, 4); - gbColour2 = CRGBA(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1), GET_INTEGER_PARAM(2), GET_INTEGER_PARAM(3)); - return 0; - case COMMAND_REMOVE_CAR_BOOT: - { - CollectParameters(&m_nIp, 1); - CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pVehicle); - script_assert(pVehicle->IsCar()); - CAutomobile* pAutomobile = (CAutomobile*)pVehicle; - pAutomobile->Damage.SetDoorStatus(DOOR_BOOT, DOOR_STATUS_MISSING); - pAutomobile->SetDoorDamage(CAR_BOOT, DOOR_BOOT, true); - return 0; - } - case COMMAND_ADD_POINT_3D_MARKER: - { - uint32 ip = m_nIp; - uint32 id = (uint32)(uintptr)GetPointerToScriptVariable(&ip, 0); - static CVector vPreviousLocation; - CollectParameters(&m_nIp, 7); - CVector pos = GET_VECTOR_PARAM(0); - if (pos.z <= MAP_Z_LOW_LIMIT) - pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y); - if (vPreviousLocation != pos) { - //C3dMarkers::CopyMarker(id, id - 1, 1, 1); - } - // TODO: 5 is not a valid type - //C3dMarkers::PlaceMarker(id, 5, pos, GET_FLOAT_PARAM(3) * 0.7f, GET_INTEGER_PARAM(4), GET_INTEGER_PARAM(5), GET_INTEGER_PARAM(6), 255, 128, 0.0f, 1); // TODO: 0, 100.0f, 1, 0 - vPreviousLocation = pos; - return 0; - } - case COMMAND_GET_VECTOR_FROM_MULTIPLAYER: - SET_VECTOR_PARAM(0, gVectorSetInLua); - StoreParameters(&m_nIp, 3); - return 0; - case COMMAND_PRINT_HELP_ALWAYS: - { - // CHud::mAlwaysAllowHelpText = true; // TODO - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CHud::SetHelpMessage(text, false); // + false, true - return 0; - } - case COMMAND_PRINT_HELP_FOREVER_ALWAYS: - { - // CHud::mAlwaysAllowHelpText = true; // TODO - wchar* text = CTheScripts::GetTextByKeyFromScript(&m_nIp); - CHud::SetHelpMessage(text, false, true); // + true - return 0; - } - case COMMAND_SWITCH_FERRY_COLLISION: - CollectParameters(&m_nIp, 1); - CFerry::SwitchFerryCollision(GET_INTEGER_PARAM(0)); - return 0; - case COMMAND_SET_CHAR_MAX_HEALTH: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - pPed->m_fHealth = GET_INTEGER_PARAM(1); - pPed->m_fMaxHealth = GET_INTEGER_PARAM(1); - return 0; - } - case COMMAND_SET_CHAR_SHOOT_TIMER: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - pPed->m_nScriptShootTimer = GET_INTEGER_PARAM(1); - return 0; - } - case COMMAND_SET_CHAR_ATTACK_TIMER: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - pPed->m_nScriptAttackTimer = GET_INTEGER_PARAM(1); - return 0; - } - case COMMAND_SET_HELI_ROTOR_BLADES_FULLSPEED: - { - CollectParameters(&m_nIp, 1); - CAutomobile* pHeli = (CAutomobile*)CPools::GetVehiclePool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pHeli); - if (pHeli->GetVehicleAppearance() == VEHICLE_APPEARANCE_HELI) - pHeli->m_aWheelSpeed[1] = 0.22f; - return 0; - } - case COMMAND_SET_CRUSHER_REWARD_MULTIPLIER: - { - CollectParameters(&m_nIp, 1); - CGarages::CrusherRewardMultiplier = GET_INTEGER_PARAM(0); - return 0; - } - case COMMAND_SWAP_BUILDINGS: - { - CollectParameters(&m_nIp, 2); - // base::cWorldStream::Instance()->SwapBuilding(GET_INTEGER_PARAM(0), GET_INTEGER_PARAM(1)); - return 0; - } - case COMMAND_STREAM_BUILDING_SWAPS: - { - // UpdateCompareFlag(base::cWorldStream::Instance()->StreamBuildingSwaps()); - UpdateCompareFlag(true); - return 0; - } - case COMMAND_IS_WORLD_STREAMING_COMPLETE: - { - // UpdateCompareFlag(base::cWorldStream::Instance()->IsStreamingComplet()); - UpdateCompareFlag(true); - return 0; - } - case COMMAND_SWAP_TO_STREAMED_SECTOR: - { - // base::cWorldStream::Instance()->SwapToStreamedSector(); - return 0; - } - case COMMAND_SET_CHAR_ATTACKS_PLAYER_WITH_COPS: - { - CollectParameters(&m_nIp, 2); - CPed* pPed = CPools::GetPedPool()->GetAt(GET_INTEGER_PARAM(0)); - script_assert(pPed); - pPed->bAttacksPlayerWithCops = (GET_INTEGER_PARAM(1) != 0); - return 0; - } - case COMMAND_REGISTER_FACE_PLANT_DISTANCE: - CollectParameters(&m_nIp, 1); - //CStats::LongestFacePlantDist = Max(CStats::LongestFacePlantDist, GET_FLOAT_PARAM(0)); - return 0; - case COMMAND_REGISTER_MAX_SECONDS_ON_CARNAGE_LEFT: - CollectParameters(&m_nIp, 1); - //CStats::MaxSecondsOnCarnageLeft = Max(CStats::MaxSecondsOnCarnageLeft, GET_INTEGER_PARAM(0)); - return 0; - case COMMAND_REGISTER_MAX_KILLS_ON_RC_TRIAD: - CollectParameters(&m_nIp, 1); - //CStats::MaxKillsOnRcTriad = Max(CStats::MaxKillsOnRcTriad, GET_INTEGER_PARAM(0)); - return 0; - case COMMAND_REGISTER_HIGHEST_LEVEL_SLASH_TV: - CollectParameters(&m_nIp, 1); - //CStats::HighestLevelSlashTv = Max(CStats::HighestLevelSlashTv, GET_INTEGER_PARAM(0)); - return 0; - case COMMAND_ADD_MONEY_MADE_WITH_SLASH_TV: - CollectParameters(&m_nIp, 1); - //CStats::MoneyMadeWithSlashTv += GET_INTEGER_PARAM(0); - return 0; - case COMMAND_ADD_TOTAL_KILLS_ON_SLASH_TV: - CollectParameters(&m_nIp, 1); - //CStats::TotalKillsOnSlashTV += GET_INTEGER_PARAM(0); - return 0; - default: - script_assert(0); - } - return -1; -} \ No newline at end of file diff --git a/src/control/ScriptCommands.h b/src/control/ScriptCommands.h index ea968697..544503a4 100644 --- a/src/control/ScriptCommands.h +++ b/src/control/ScriptCommands.h @@ -1,82 +1,40 @@ #pragma once -enum { - COMMAND_NOP = 0, +enum +{ + COMMAND_NOP, COMMAND_WAIT, COMMAND_GOTO, COMMAND_SHAKE_CAM, - COMMAND_SET_VAR_INT, - COMMAND_SET_VAR_FLOAT, - COMMAND_SET_LVAR_INT, - COMMAND_SET_LVAR_FLOAT, - COMMAND_ADD_VAL_TO_INT_VAR, - COMMAND_ADD_VAL_TO_FLOAT_VAR, - COMMAND_ADD_VAL_TO_INT_LVAR, - COMMAND_ADD_VAL_TO_FLOAT_LVAR, - COMMAND_SUB_VAL_FROM_INT_VAR, - COMMAND_SUB_VAL_FROM_FLOAT_VAR, - COMMAND_SUB_VAL_FROM_INT_LVAR, - COMMAND_SUB_VAL_FROM_FLOAT_LVAR, - COMMAND_MULT_INT_VAR_BY_VAL, - COMMAND_MULT_FLOAT_VAR_BY_VAL, - COMMAND_MULT_INT_LVAR_BY_VAL, - COMMAND_MULT_FLOAT_LVAR_BY_VAL, - COMMAND_DIV_INT_VAR_BY_VAL, - COMMAND_DIV_FLOAT_VAR_BY_VAL, - COMMAND_DIV_INT_LVAR_BY_VAL, - COMMAND_DIV_FLOAT_LVAR_BY_VAL, - COMMAND_IS_INT_VAR_GREATER_THAN_NUMBER, - COMMAND_IS_INT_LVAR_GREATER_THAN_NUMBER, - COMMAND_IS_NUMBER_GREATER_THAN_INT_VAR, - COMMAND_IS_NUMBER_GREATER_THAN_INT_LVAR, - COMMAND_IS_INT_VAR_GREATER_THAN_INT_VAR, - COMMAND_IS_INT_LVAR_GREATER_THAN_INT_LVAR, - COMMAND_IS_INT_VAR_GREATER_THAN_INT_LVAR, - COMMAND_IS_INT_LVAR_GREATER_THAN_INT_VAR, - COMMAND_IS_FLOAT_VAR_GREATER_THAN_NUMBER, - COMMAND_IS_FLOAT_LVAR_GREATER_THAN_NUMBER, - COMMAND_IS_NUMBER_GREATER_THAN_FLOAT_VAR, - COMMAND_IS_NUMBER_GREATER_THAN_FLOAT_LVAR, - COMMAND_IS_FLOAT_VAR_GREATER_THAN_FLOAT_VAR, - COMMAND_IS_FLOAT_LVAR_GREATER_THAN_FLOAT_LVAR, - COMMAND_IS_FLOAT_VAR_GREATER_THAN_FLOAT_LVAR, - COMMAND_IS_FLOAT_LVAR_GREATER_THAN_FLOAT_VAR, - COMMAND_IS_INT_VAR_GREATER_OR_EQUAL_TO_NUMBER, - COMMAND_IS_INT_LVAR_GREATER_OR_EQUAL_TO_NUMBER, - COMMAND_IS_NUMBER_GREATER_OR_EQUAL_TO_INT_VAR, - COMMAND_IS_NUMBER_GREATER_OR_EQUAL_TO_INT_LVAR, - COMMAND_IS_INT_VAR_GREATER_OR_EQUAL_TO_INT_VAR, - COMMAND_IS_INT_LVAR_GREATER_OR_EQUAL_TO_INT_LVAR, - COMMAND_IS_INT_VAR_GREATER_OR_EQUAL_TO_INT_LVAR, - COMMAND_IS_INT_LVAR_GREATER_OR_EQUAL_TO_INT_VAR, - COMMAND_IS_FLOAT_VAR_GREATER_OR_EQUAL_TO_NUMBER, - COMMAND_IS_FLOAT_LVAR_GREATER_OR_EQUAL_TO_NUMBER, - COMMAND_IS_NUMBER_GREATER_OR_EQUAL_TO_FLOAT_VAR, - COMMAND_IS_NUMBER_GREATER_OR_EQUAL_TO_FLOAT_LVAR, - COMMAND_IS_FLOAT_VAR_GREATER_OR_EQUAL_TO_FLOAT_VAR, - COMMAND_IS_FLOAT_LVAR_GREATER_OR_EQUAL_TO_FLOAT_LVAR, - COMMAND_IS_FLOAT_VAR_GREATER_OR_EQUAL_TO_FLOAT_LVAR, - COMMAND_IS_FLOAT_LVAR_GREATER_OR_EQUAL_TO_FLOAT_VAR, - COMMAND_IS_INT_VAR_EQUAL_TO_NUMBER, - COMMAND_IS_INT_LVAR_EQUAL_TO_NUMBER, - COMMAND_IS_INT_VAR_EQUAL_TO_INT_VAR, - COMMAND_IS_INT_LVAR_EQUAL_TO_INT_LVAR, - COMMAND_IS_INT_VAR_EQUAL_TO_INT_LVAR, - COMMAND_IS_INT_VAR_NOT_EQUAL_TO_NUMBER, - COMMAND_IS_INT_LVAR_NOT_EQUAL_TO_NUMBER, - COMMAND_IS_INT_VAR_NOT_EQUAL_TO_INT_VAR, - COMMAND_IS_INT_LVAR_NOT_EQUAL_TO_INT_LVAR, - COMMAND_IS_INT_VAR_NOT_EQUAL_TO_INT_LVAR, - COMMAND_IS_FLOAT_VAR_EQUAL_TO_NUMBER, - COMMAND_IS_FLOAT_LVAR_EQUAL_TO_NUMBER, - COMMAND_IS_FLOAT_VAR_EQUAL_TO_FLOAT_VAR, - COMMAND_IS_FLOAT_LVAR_EQUAL_TO_FLOAT_LVAR, - COMMAND_IS_FLOAT_VAR_EQUAL_TO_FLOAT_LVAR, - COMMAND_IS_FLOAT_VAR_NOT_EQUAL_TO_NUMBER, - COMMAND_IS_FLOAT_LVAR_NOT_EQUAL_TO_NUMBER, - COMMAND_IS_FLOAT_VAR_NOT_EQUAL_TO_FLOAT_VAR, - COMMAND_IS_FLOAT_LVAR_NOT_EQUAL_TO_FLOAT_LVAR, - COMMAND_IS_FLOAT_VAR_NOT_EQUAL_TO_FLOAT_LVAR, + COMMAND_SET_VAR_INT, + COMMAND_SET_VAR_FLOAT, + COMMAND_SET_VAR_STRING, + COMMAND_ADD_VAL_TO_INT_LVAR, + COMMAND_ADD_VAL_TO_FLOAT_LVAR, + COMMAND_SUB_VAL_FROM_INT_VAR, + COMMAND_SUB_VAL_FROM_FLOAT_VAR, + COMMAND_MULT_INT_LVAR_BY_VAL, + COMMAND_MULT_FLOAT_LVAR_BY_VAL, + COMMAND_DIV_INT_LVAR_BY_VAL, + COMMAND_DIV_FLOAT_LVAR_BY_VAL, + COMMAND_IS_INT_VAR_GREATER_THAN_NUMBER, + COMMAND_IS_NUMBER_GREATER_THAN_INT_LVAR, + COMMAND_IS_INT_LVAR_GREATER_THAN_INT_LVAR, + COMMAND_IS_FLOAT_LVAR_GREATER_THAN_NUMBER, + COMMAND_IS_NUMBER_GREATER_THAN_FLOAT_LVAR, + COMMAND_IS_FLOAT_LVAR_GREATER_THAN_FLOAT_LVAR, + COMMAND_IS_INT_LVAR_GREATER_OR_EQUAL_TO_NUMBER, + COMMAND_IS_NUMBER_GREATER_OR_EQUAL_TO_INT_VAR, + COMMAND_IS_INT_LVAR_GREATER_OR_EQUAL_TO_INT_LVAR, + COMMAND_IS_FLOAT_LVAR_GREATER_OR_EQUAL_TO_NUMBER, + COMMAND_IS_NUMBER_GREATER_OR_EQUAL_TO_FLOAT_LVAR, + COMMAND_IS_FLOAT_LVAR_GREATER_OR_EQUAL_TO_FLOAT_LVAR, + COMMAND_IS_INT_VAR_EQUAL_TO_NUMBER, + COMMAND_IS_INT_VAR_EQUAL_TO_INT_LVAR, + COMMAND_IS_FLOAT_LVAR_EQUAL_TO_NUMBER, + COMMAND_IS_FLOAT_LVAR_EQUAL_TO_FLOAT_LVAR, + COMMAND_IS_STRING_VAR_EQUAL_TO_STRING_VAR_31, + COMMAND_IS_STRING_VAR_EQUAL_TO_STRING_VAR_32, COMMAND_GOTO_IF_TRUE, COMMAND_GOTO_IF_FALSE, COMMAND_TERMINATE_THIS_SCRIPT, @@ -85,80 +43,30 @@ enum { COMMAND_RETURN, COMMAND_LINE, COMMAND_CREATE_PLAYER, - COMMAND_GET_PLAYER_COORDINATES, - COMMAND_SET_PLAYER_COORDINATES, - COMMAND_IS_PLAYER_IN_AREA_2D, - COMMAND_IS_PLAYER_IN_AREA_3D, - COMMAND_ADD_INT_VAR_TO_INT_VAR, - COMMAND_ADD_FLOAT_VAR_TO_FLOAT_VAR, - COMMAND_ADD_INT_LVAR_TO_INT_LVAR, - COMMAND_ADD_FLOAT_LVAR_TO_FLOAT_LVAR, - COMMAND_ADD_INT_VAR_TO_INT_LVAR, - COMMAND_ADD_FLOAT_VAR_TO_FLOAT_LVAR, - COMMAND_ADD_INT_LVAR_TO_INT_VAR, - COMMAND_ADD_FLOAT_LVAR_TO_FLOAT_VAR, - COMMAND_SUB_INT_VAR_FROM_INT_VAR, - COMMAND_SUB_FLOAT_VAR_FROM_FLOAT_VAR, - COMMAND_SUB_INT_LVAR_FROM_INT_LVAR, - COMMAND_SUB_FLOAT_LVAR_FROM_FLOAT_LVAR, - COMMAND_SUB_INT_VAR_FROM_INT_LVAR, - COMMAND_SUB_FLOAT_VAR_FROM_FLOAT_LVAR, - COMMAND_SUB_INT_LVAR_FROM_INT_VAR, - COMMAND_SUB_FLOAT_LVAR_FROM_FLOAT_VAR, - COMMAND_MULT_INT_VAR_BY_INT_VAR, - COMMAND_MULT_FLOAT_VAR_BY_FLOAT_VAR, - COMMAND_MULT_INT_LVAR_BY_INT_LVAR, - COMMAND_MULT_FLOAT_LVAR_BY_FLOAT_LVAR, - COMMAND_MULT_INT_VAR_BY_INT_LVAR, - COMMAND_MULT_FLOAT_VAR_BY_FLOAT_LVAR, - COMMAND_MULT_INT_LVAR_BY_INT_VAR, - COMMAND_MULT_FLOAT_LVAR_BY_FLOAT_VAR, - COMMAND_DIV_INT_VAR_BY_INT_VAR, - COMMAND_DIV_FLOAT_VAR_BY_FLOAT_VAR, - COMMAND_DIV_INT_LVAR_BY_INT_LVAR, - COMMAND_DIV_FLOAT_LVAR_BY_FLOAT_LVAR, - COMMAND_DIV_INT_VAR_BY_INT_LVAR, - COMMAND_DIV_FLOAT_VAR_BY_FLOAT_LVAR, - COMMAND_DIV_INT_LVAR_BY_INT_VAR, - COMMAND_DIV_FLOAT_LVAR_BY_FLOAT_VAR, - COMMAND_ADD_TIMED_VAL_TO_FLOAT_VAR, - COMMAND_ADD_TIMED_VAL_TO_FLOAT_LVAR, - COMMAND_ADD_TIMED_FLOAT_VAR_TO_FLOAT_VAR, - COMMAND_ADD_TIMED_FLOAT_LVAR_TO_FLOAT_LVAR, - COMMAND_ADD_TIMED_FLOAT_LVAR_TO_FLOAT_VAR, - COMMAND_ADD_TIMED_FLOAT_VAR_TO_FLOAT_LVAR, - COMMAND_SUB_TIMED_VAL_FROM_FLOAT_VAR, - COMMAND_SUB_TIMED_VAL_FROM_FLOAT_LVAR, - COMMAND_SUB_TIMED_FLOAT_VAR_FROM_FLOAT_VAR, - COMMAND_SUB_TIMED_FLOAT_LVAR_FROM_FLOAT_LVAR, - COMMAND_SUB_TIMED_FLOAT_LVAR_FROM_FLOAT_VAR, - COMMAND_SUB_TIMED_FLOAT_VAR_FROM_FLOAT_LVAR, - COMMAND_SET_VAR_INT_TO_VAR_INT, - COMMAND_SET_LVAR_INT_TO_LVAR_INT, - COMMAND_SET_VAR_FLOAT_TO_VAR_FLOAT, - COMMAND_SET_LVAR_FLOAT_TO_LVAR_FLOAT, - COMMAND_SET_VAR_FLOAT_TO_LVAR_FLOAT, - COMMAND_SET_LVAR_FLOAT_TO_VAR_FLOAT, - COMMAND_SET_VAR_INT_TO_LVAR_INT, - COMMAND_SET_LVAR_INT_TO_VAR_INT, - COMMAND_CSET_VAR_INT_TO_VAR_FLOAT, - COMMAND_CSET_VAR_FLOAT_TO_VAR_INT, - COMMAND_CSET_LVAR_INT_TO_VAR_FLOAT, - COMMAND_CSET_LVAR_FLOAT_TO_VAR_INT, - COMMAND_CSET_VAR_INT_TO_LVAR_FLOAT, - COMMAND_CSET_VAR_FLOAT_TO_LVAR_INT, - COMMAND_CSET_LVAR_INT_TO_LVAR_FLOAT, - COMMAND_CSET_LVAR_FLOAT_TO_LVAR_INT, + COMMAND_ADD_INT_LVAR_TO_INT_LVAR, + COMMAND_ADD_FLOAT_LVAR_TO_FLOAT_LVAR, + COMMAND_SUB_INT_LVAR_FROM_INT_LVAR, + COMMAND_SUB_FLOAT_LVAR_FROM_FLOAT_LVAR, + COMMAND_MULT_INT_LVAR_BY_INT_LVAR, + COMMAND_MULT_FLOAT_LVAR_BY_FLOAT_LVAR, + COMMAND_DIV_INT_LVAR_BY_INT_LVAR, + COMMAND_DIV_FLOAT_LVAR_BY_FLOAT_LVAR, + COMMAND_ADD_TIMED_VAL_TO_FLOAT_VAR, + COMMAND_ADD_TIMED_FLOAT_LVAR_TO_FLOAT_LVAR, + COMMAND_SUB_TIMED_VAL_FROM_FLOAT_VAR, + COMMAND_SUB_TIMED_FLOAT_LVAR_FROM_FLOAT_LVAR, + COMMAND_SET_VAR_INT_TO_LVAR_INT, // todo lvar to var + COMMAND_SET_VAR_FLOAT_TO_VAR_FLOAT, + DUPLICATE_COMMAND_55, + COMMAND_CSET_LVAR_INT_TO_LVAR_FLOAT, // sb наоборот + COMMAND_CSET_LVAR_FLOAT_TO_LVAR_INT, COMMAND_ABS_VAR_INT, - COMMAND_ABS_LVAR_INT, COMMAND_ABS_VAR_FLOAT, - COMMAND_ABS_LVAR_FLOAT, COMMAND_GENERATE_RANDOM_FLOAT, COMMAND_GENERATE_RANDOM_INT, COMMAND_CREATE_CHAR, COMMAND_DELETE_CHAR, COMMAND_CHAR_WANDER_DIR, - COMMAND_CHAR_WANDER_RANGE, COMMAND_CHAR_FOLLOW_PATH, COMMAND_CHAR_SET_IDLE, COMMAND_GET_CHAR_COORDINATES, @@ -179,14 +87,6 @@ enum { COMMAND_SET_CAR_MISSION, COMMAND_IS_CAR_IN_AREA_2D, COMMAND_IS_CAR_IN_AREA_3D, - COMMAND_SPECIAL_0, - COMMAND_SPECIAL_1, - COMMAND_SPECIAL_2, - COMMAND_SPECIAL_3, - COMMAND_SPECIAL_4, - COMMAND_SPECIAL_5, - COMMAND_SPECIAL_6, - COMMAND_SPECIAL_7, COMMAND_PRINT_BIG, COMMAND_PRINT, COMMAND_PRINT_NOW, @@ -196,52 +96,40 @@ enum { COMMAND_SET_TIME_OF_DAY, COMMAND_GET_MINUTES_TO_TIME_OF_DAY, COMMAND_IS_POINT_ON_SCREEN, - COMMAND_DEBUG_ON, - COMMAND_DEBUG_OFF, COMMAND_RETURN_TRUE, COMMAND_RETURN_FALSE, - COMMAND_VAR_INT, - COMMAND_VAR_FLOAT, - COMMAND_LVAR_INT, - COMMAND_LVAR_FLOAT, - COMMAND_LBRACKET, - COMMAND_RBRACKET, - COMMAND_REPEAT, - COMMAND_ENDREPEAT, - COMMAND_IF, - COMMAND_IFNOT, - COMMAND_ELSE, - COMMAND_ENDIF, - COMMAND_WHILE, - COMMAND_WHILENOT, - COMMAND_ENDWHILE, - COMMAND_214, - COMMAND_215, - COMMAND_216, - COMMAND_217, - COMMAND_218, + COMMAND_NULL_96, + COMMAND_NULL_97, + COMMAND_NULL_98, + COMMAND_NULL_99, + COMMAND_NULL_100, + COMMAND_NULL_101, + COMMAND_NULL_102, + COMMAND_NULL_103, + COMMAND_NULL_104, + COMMAND_NULL_105, + COMMAND_NULL_106, + COMMAND_NULL_107, + COMMAND_NULL_108, + COMMAND_NULL_109, + COMMAND_NULL_110, + COMMAND_NULL_111, + COMMAND_NULL_112, + COMMAND_NULL_113, + COMMAND_NULL_114, + COMMAND_NULL_115, + COMMAND_NULL_116, + COMMAND_NULL_117, + COMMAND_NULL_118, + COMMAND_NULL_119, COMMAND_ANDOR, COMMAND_LAUNCH_MISSION, COMMAND_MISSION_HAS_FINISHED, COMMAND_STORE_CAR_CHAR_IS_IN, - COMMAND_STORE_CAR_PLAYER_IS_IN, COMMAND_IS_CHAR_IN_CAR, - COMMAND_IS_PLAYER_IN_CAR, COMMAND_IS_CHAR_IN_MODEL, - COMMAND_IS_PLAYER_IN_MODEL, COMMAND_IS_CHAR_IN_ANY_CAR, - COMMAND_IS_PLAYER_IN_ANY_CAR, COMMAND_IS_BUTTON_PRESSED, - COMMAND_GET_PAD_STATE, - COMMAND_LOCATE_PLAYER_ANY_MEANS_2D, - COMMAND_LOCATE_PLAYER_ON_FOOT_2D, - COMMAND_LOCATE_PLAYER_IN_CAR_2D, - COMMAND_LOCATE_STOPPED_PLAYER_ANY_MEANS_2D, - COMMAND_LOCATE_STOPPED_PLAYER_ON_FOOT_2D, - COMMAND_LOCATE_STOPPED_PLAYER_IN_CAR_2D, - COMMAND_LOCATE_PLAYER_ANY_MEANS_CHAR_2D, - COMMAND_LOCATE_PLAYER_ON_FOOT_CHAR_2D, - COMMAND_LOCATE_PLAYER_IN_CAR_CHAR_2D, COMMAND_LOCATE_CHAR_ANY_MEANS_2D, COMMAND_LOCATE_CHAR_ON_FOOT_2D, COMMAND_LOCATE_CHAR_IN_CAR_2D, @@ -251,16 +139,7 @@ enum { COMMAND_LOCATE_CHAR_ANY_MEANS_CHAR_2D, COMMAND_LOCATE_CHAR_ON_FOOT_CHAR_2D, COMMAND_LOCATE_CHAR_IN_CAR_CHAR_2D, - COMMAND_LOCATE_PLAYER_ANY_MEANS_3D, - COMMAND_LOCATE_PLAYER_ON_FOOT_3D, - COMMAND_LOCATE_PLAYER_IN_CAR_3D, - COMMAND_LOCATE_STOPPED_PLAYER_ANY_MEANS_3D, - COMMAND_LOCATE_STOPPED_PLAYER_ON_FOOT_3D, - COMMAND_LOCATE_STOPPED_PLAYER_IN_CAR_3D, - COMMAND_LOCATE_PLAYER_ANY_MEANS_CHAR_3D, - COMMAND_LOCATE_PLAYER_ON_FOOT_CHAR_3D, - COMMAND_LOCATE_PLAYER_IN_CAR_CHAR_3D, - COMMAND_LOCATE_CHAR_ANY_MEANS_3D, + COMMAND_LOCATE_CHAR_ANY_MEANS_3D, //COMMAND_LOCATE_PLAYER_ANY_MEANS_3D, ?? COMMAND_LOCATE_CHAR_ON_FOOT_3D, COMMAND_LOCATE_CHAR_IN_CAR_3D, COMMAND_LOCATE_STOPPED_CHAR_ANY_MEANS_3D, @@ -281,75 +160,24 @@ enum { COMMAND_CLEAR_WANTED_LEVEL, COMMAND_SET_DEATHARREST_STATE, COMMAND_HAS_DEATHARREST_BEEN_EXECUTED, - COMMAND_ADD_AMMO_TO_PLAYER, COMMAND_ADD_AMMO_TO_CHAR, - COMMAND_ADD_AMMO_TO_CAR, - COMMAND_IS_PLAYER_STILL_ALIVE, - COMMAND_IS_PLAYER_DEAD, COMMAND_IS_CHAR_DEAD, COMMAND_IS_CAR_DEAD, COMMAND_SET_CHAR_THREAT_SEARCH, - COMMAND_SET_CHAR_THREAT_REACTION, COMMAND_SET_CHAR_OBJ_NO_OBJ, - COMMAND_ORDER_DRIVER_OUT_OF_CAR, - COMMAND_ORDER_CHAR_TO_DRIVE_CAR, - COMMAND_ADD_PATROL_POINT, - COMMAND_IS_PLAYER_IN_GANGZONE, - COMMAND_IS_PLAYER_IN_ZONE, - COMMAND_IS_PLAYER_PRESSING_HORN, - COMMAND_HAS_CHAR_SPOTTED_PLAYER, -#ifdef SUPPORT_GINPUT_SCRIPT - COMMAND_HAS_PAD_IN_HANDS, -#else - COMMAND_ORDER_CHAR_TO_BACKDOOR, -#endif - COMMAND_ADD_CHAR_TO_GANG, COMMAND_IS_CHAR_OBJECTIVE_PASSED, - COMMAND_SET_CHAR_DRIVE_AGGRESSION, - COMMAND_SET_CHAR_MAX_DRIVESPEED, COMMAND_CREATE_CHAR_INSIDE_CAR, - COMMAND_WARP_PLAYER_FROM_CAR_TO_COORD, - COMMAND_MAKE_CHAR_DO_NOTHING, - COMMAND_SET_CHAR_INVINCIBLE, - COMMAND_SET_PLAYER_INVINCIBLE, - COMMAND_SET_CHAR_GRAPHIC_TYPE, - COMMAND_SET_PLAYER_GRAPHIC_TYPE, COMMAND_HAS_PLAYER_BEEN_ARRESTED, - COMMAND_STOP_CHAR_DRIVING, - COMMAND_KILL_CHAR, - COMMAND_SET_FAVOURITE_CAR_MODEL_FOR_CHAR, - COMMAND_SET_CHAR_OCCUPATION, - COMMAND_CHANGE_CAR_LOCK, - COMMAND_SHAKE_CAM_WITH_POINT, COMMAND_IS_CAR_MODEL, - COMMAND_IS_CAR_REMAP, - COMMAND_HAS_CAR_JUST_SUNK, - COMMAND_SET_CAR_NO_COLLIDE, - COMMAND_IS_CAR_DEAD_IN_AREA_2D, - COMMAND_IS_CAR_DEAD_IN_AREA_3D, - COMMAND_IS_TRAILER_ATTACHED, - COMMAND_IS_CAR_ON_TRAILER, - COMMAND_HAS_CAR_GOT_WEAPON, - COMMAND_PARK, - COMMAND_HAS_PARK_FINISHED, - COMMAND_KILL_ALL_PASSENGERS, - COMMAND_SET_CAR_BULLETPROOF, - COMMAND_SET_CAR_FLAMEPROOF, - COMMAND_SET_CAR_ROCKETPROOF, - COMMAND_IS_CARBOMB_ACTIVE, COMMAND_GIVE_CAR_ALARM, - COMMAND_PUT_CAR_ON_TRAILER, COMMAND_IS_CAR_CRUSHED, - COMMAND_CREATE_GANG_CAR, COMMAND_CREATE_CAR_GENERATOR, COMMAND_SWITCH_CAR_GENERATOR, - COMMAND_ADD_PAGER_MESSAGE, COMMAND_DISPLAY_ONSCREEN_TIMER, COMMAND_CLEAR_ONSCREEN_TIMER, COMMAND_DISPLAY_ONSCREEN_COUNTER, COMMAND_CLEAR_ONSCREEN_COUNTER, COMMAND_SET_ZONE_CAR_INFO, - COMMAND_IS_CHAR_IN_GANG_ZONE, COMMAND_IS_CHAR_IN_ZONE, COMMAND_SET_CAR_DENSITY, COMMAND_SET_PED_DENSITY, @@ -357,55 +185,40 @@ enum { COMMAND_POINT_CAMERA_AT_CAR, COMMAND_POINT_CAMERA_AT_CHAR, COMMAND_RESTORE_CAMERA, - COMMAND_SHAKE_PAD, COMMAND_SET_ZONE_PED_INFO, COMMAND_SET_TIME_SCALE, - COMMAND_IS_CAR_IN_AIR, COMMAND_SET_FIXED_CAMERA_POSITION, COMMAND_POINT_CAMERA_AT_POINT, - COMMAND_ADD_BLIP_FOR_CAR_OLD, - COMMAND_ADD_BLIP_FOR_CHAR_OLD, - COMMAND_ADD_BLIP_FOR_OBJECT_OLD, COMMAND_REMOVE_BLIP, COMMAND_CHANGE_BLIP_COLOUR, COMMAND_DIM_BLIP, COMMAND_ADD_BLIP_FOR_COORD_OLD, COMMAND_CHANGE_BLIP_SCALE, + COMMAND_ADD_BLIP_FOR_CAR, + COMMAND_ADD_BLIP_FOR_CHAR, + COMMAND_ADD_BLIP_FOR_OBJECT, + COMMAND_ADD_BLIP_FOR_COORD, + COMMAND_CHANGE_BLIP_DISPLAY, + COMMAND_ADD_SPRITE_BLIP_FOR_CONTACT_POINT, + COMMAND_ADD_SPRITE_BLIP_FOR_COORD, + COMMAND_ADD_SHORT_RANGE_SPRITE_BLIP_FOR_COORD, COMMAND_SET_FADING_COLOUR, COMMAND_DO_FADE, COMMAND_GET_FADING_STATUS, COMMAND_ADD_HOSPITAL_RESTART, COMMAND_ADD_POLICE_RESTART, COMMAND_OVERRIDE_NEXT_RESTART, - COMMAND_DRAW_SHADOW, - COMMAND_GET_PLAYER_HEADING, - COMMAND_SET_PLAYER_HEADING, COMMAND_GET_CHAR_HEADING, COMMAND_SET_CHAR_HEADING, COMMAND_GET_CAR_HEADING, COMMAND_SET_CAR_HEADING, COMMAND_GET_OBJECT_HEADING, COMMAND_SET_OBJECT_HEADING, - COMMAND_IS_PLAYER_TOUCHING_OBJECT, COMMAND_IS_CHAR_TOUCHING_OBJECT, - COMMAND_SET_PLAYER_AMMO, COMMAND_SET_CHAR_AMMO, - COMMAND_SET_CAR_AMMO, - COMMAND_LOAD_CAMERA_SPLINE, - COMMAND_MOVE_CAMERA_ALONG_SPLINE, - COMMAND_GET_CAMERA_POSITION_ALONG_SPLINE, COMMAND_DECLARE_MISSION_FLAG, - COMMAND_DECLARE_MISSION_FLAG_FOR_CONTACT, - COMMAND_DECLARE_BASE_BRIEF_ID_FOR_CONTACT, - COMMAND_IS_PLAYER_HEALTH_GREATER, COMMAND_IS_CHAR_HEALTH_GREATER, COMMAND_IS_CAR_HEALTH_GREATER, - COMMAND_ADD_BLIP_FOR_CAR, - COMMAND_ADD_BLIP_FOR_CHAR, - COMMAND_ADD_BLIP_FOR_OBJECT, - COMMAND_ADD_BLIP_FOR_CONTACT_POINT, - COMMAND_ADD_BLIP_FOR_COORD, - COMMAND_CHANGE_BLIP_DISPLAY, COMMAND_ADD_ONE_OFF_SOUND, COMMAND_ADD_CONTINUOUS_SOUND, COMMAND_REMOVE_SOUND, @@ -417,16 +230,24 @@ enum { COMMAND_SET_CHAR_OBJ_GUARD_SPOT, COMMAND_SET_CHAR_OBJ_GUARD_AREA, COMMAND_SET_CHAR_OBJ_WAIT_IN_CAR, - COMMAND_IS_PLAYER_IN_AREA_ON_FOOT_2D, - COMMAND_IS_PLAYER_IN_AREA_IN_CAR_2D, - COMMAND_IS_PLAYER_STOPPED_IN_AREA_2D, - COMMAND_IS_PLAYER_STOPPED_IN_AREA_ON_FOOT_2D, - COMMAND_IS_PLAYER_STOPPED_IN_AREA_IN_CAR_2D, - COMMAND_IS_PLAYER_IN_AREA_ON_FOOT_3D, - COMMAND_IS_PLAYER_IN_AREA_IN_CAR_3D, - COMMAND_IS_PLAYER_STOPPED_IN_AREA_3D, - COMMAND_IS_PLAYER_STOPPED_IN_AREA_ON_FOOT_3D, - COMMAND_IS_PLAYER_STOPPED_IN_AREA_IN_CAR_3D, + COMMAND_SET_CHAR_OBJ_KILL_CHAR_ON_FOOT, + COMMAND_SET_CHAR_OBJ_KILL_CHAR_ANY_MEANS, + COMMAND_SET_CHAR_OBJ_FLEE_CHAR_ON_FOOT_ALWAYS, + COMMAND_SET_CHAR_OBJ_GOTO_CHAR_ON_FOOT, + COMMAND_SET_CHAR_OBJ_LEAVE_CAR, + COMMAND_SET_CHAR_OBJ_ENTER_CAR_AS_PASSENGER, + COMMAND_SET_CHAR_OBJ_ENTER_CAR_AS_DRIVER, + COMMAND_SET_CHAR_OBJ_DESTROY_OBJECT, + COMMAND_SET_CHAR_OBJ_DESTROY_CAR, + COMMAND_SET_CHAR_OBJ_GOTO_AREA_ON_FOOT, + COMMAND_SET_CHAR_OBJ_GOTO_COORD_ON_FOOT, + COMMAND_SET_CHAR_OBJ_FOLLOW_CHAR_IN_FORMATION, + COMMAND_SET_CHAR_OBJ_STEAL_ANY_CAR, + COMMAND_SET_CHAR_OBJ_LEAVE_ANY_CAR, + COMMAND_SET_CHAR_OBJ_FLEE_CAR, + COMMAND_SET_CHAR_OBJ_WALK_TO_CHAR, + COMMAND_SET_CHAR_OBJ_AIM_GUN_AT_CHAR, + COMMAND_SET_CHAR_OBJ_SPRINT_TO_COORD, COMMAND_IS_CHAR_IN_AREA_ON_FOOT_2D, COMMAND_IS_CHAR_IN_AREA_IN_CAR_2D, COMMAND_IS_CHAR_STOPPED_IN_AREA_2D, @@ -443,21 +264,16 @@ enum { COMMAND_LOCATE_STOPPED_CAR_2D, COMMAND_LOCATE_CAR_3D, COMMAND_LOCATE_STOPPED_CAR_3D, - COMMAND_GIVE_WEAPON_TO_PLAYER, COMMAND_GIVE_WEAPON_TO_CHAR, - COMMAND_GIVE_WEAPON_TO_CAR, COMMAND_SET_PLAYER_CONTROL, COMMAND_FORCE_WEATHER, COMMAND_FORCE_WEATHER_NOW, COMMAND_RELEASE_WEATHER, - COMMAND_SET_CURRENT_PLAYER_WEAPON, COMMAND_SET_CURRENT_CHAR_WEAPON, - COMMAND_SET_CURRENT_CAR_WEAPON, COMMAND_GET_OBJECT_COORDINATES, COMMAND_SET_OBJECT_COORDINATES, COMMAND_GET_GAME_TIMER, COMMAND_TURN_CHAR_TO_FACE_COORD, - COMMAND_TURN_PLAYER_TO_FACE_COORD, COMMAND_STORE_WANTED_LEVEL, COMMAND_IS_CAR_STOPPED, COMMAND_MARK_CHAR_AS_NO_LONGER_NEEDED, @@ -467,29 +283,7 @@ enum { COMMAND_DONT_REMOVE_CAR, COMMAND_DONT_REMOVE_OBJECT, COMMAND_CREATE_CHAR_AS_PASSENGER, - COMMAND_SET_CHAR_OBJ_KILL_CHAR_ON_FOOT, - COMMAND_SET_CHAR_OBJ_KILL_PLAYER_ON_FOOT, - COMMAND_SET_CHAR_OBJ_KILL_CHAR_ANY_MEANS, - COMMAND_SET_CHAR_OBJ_KILL_PLAYER_ANY_MEANS, - COMMAND_SET_CHAR_OBJ_FLEE_CHAR_ON_FOOT_TILL_SAFE, - COMMAND_SET_CHAR_OBJ_FLEE_PLAYER_ON_FOOT_TILL_SAFE, - COMMAND_SET_CHAR_OBJ_FLEE_CHAR_ON_FOOT_ALWAYS, - COMMAND_SET_CHAR_OBJ_FLEE_PLAYER_ON_FOOT_ALWAYS, - COMMAND_SET_CHAR_OBJ_GOTO_CHAR_ON_FOOT, - COMMAND_SET_CHAR_OBJ_GOTO_PLAYER_ON_FOOT, - COMMAND_SET_CHAR_OBJ_LEAVE_CAR, - COMMAND_SET_CHAR_OBJ_ENTER_CAR_AS_PASSENGER, - COMMAND_SET_CHAR_OBJ_ENTER_CAR_AS_DRIVER, - COMMAND_SET_CHAR_OBJ_FOLLOW_CAR_IN_CAR, - COMMAND_SET_CHAR_OBJ_FIRE_AT_OBJECT_FROM_VEHICLE, - COMMAND_SET_CHAR_OBJ_DESTROY_OBJECT, - COMMAND_SET_CHAR_OBJ_DESTROY_CAR, - COMMAND_SET_CHAR_OBJ_GOTO_AREA_ON_FOOT, - COMMAND_SET_CHAR_OBJ_GOTO_AREA_IN_CAR, - COMMAND_SET_CHAR_OBJ_FOLLOW_CAR_ON_FOOT_WITH_OFFSET, - COMMAND_SET_CHAR_OBJ_GUARD_ATTACK, COMMAND_SET_CHAR_AS_LEADER, - COMMAND_SET_PLAYER_AS_LEADER, COMMAND_LEAVE_GROUP, COMMAND_SET_CHAR_OBJ_FOLLOW_ROUTE, COMMAND_ADD_ROUTE_POINT, @@ -504,26 +298,16 @@ enum { COMMAND_SET_CAR_DENSITY_MULTIPLIER, COMMAND_SET_CAR_HEAVY, COMMAND_CLEAR_CHAR_THREAT_SEARCH, - COMMAND_ACTIVATE_CRANE, - COMMAND_DEACTIVATE_CRANE, COMMAND_SET_MAX_WANTED_LEVEL, - COMMAND_SAVE_VAR_INT, - COMMAND_SAVE_VAR_FLOAT, + COMMAND_NULL_297, + COMMAND_NULL_298, + COMMAND_NULL_299, COMMAND_IS_CAR_IN_AIR_PROPER, COMMAND_IS_CAR_UPSIDEDOWN, - COMMAND_GET_PLAYER_CHAR, - COMMAND_CANCEL_OVERRIDE_RESTART, COMMAND_SET_POLICE_IGNORE_PLAYER, - COMMAND_ADD_PAGER_MESSAGE_WITH_NUMBER, COMMAND_START_KILL_FRENZY, COMMAND_READ_KILL_FRENZY_STATUS, COMMAND_SQRT, - COMMAND_LOCATE_PLAYER_ANY_MEANS_CAR_2D, - COMMAND_LOCATE_PLAYER_ON_FOOT_CAR_2D, - COMMAND_LOCATE_PLAYER_IN_CAR_CAR_2D, - COMMAND_LOCATE_PLAYER_ANY_MEANS_CAR_3D, - COMMAND_LOCATE_PLAYER_ON_FOOT_CAR_3D, - COMMAND_LOCATE_PLAYER_IN_CAR_CAR_3D, COMMAND_LOCATE_CHAR_ANY_MEANS_CAR_2D, COMMAND_LOCATE_CHAR_ON_FOOT_CAR_2D, COMMAND_LOCATE_CHAR_IN_CAR_CAR_2D, @@ -537,10 +321,6 @@ enum { COMMAND_ADD_EXPLOSION, COMMAND_IS_CAR_UPRIGHT, COMMAND_TURN_CHAR_TO_FACE_CHAR, - COMMAND_TURN_CHAR_TO_FACE_PLAYER, - COMMAND_TURN_PLAYER_TO_FACE_CHAR, - COMMAND_SET_CHAR_OBJ_GOTO_COORD_ON_FOOT, - COMMAND_SET_CHAR_OBJ_GOTO_COORD_IN_CAR, COMMAND_CREATE_PICKUP, COMMAND_HAS_PICKUP_BEEN_COLLECTED, COMMAND_REMOVE_PICKUP, @@ -548,18 +328,13 @@ enum { COMMAND_PRINT_BIG_Q, COMMAND_PRINT_WITH_NUMBER_BIG_Q, COMMAND_SET_GARAGE, - COMMAND_SET_GARAGE_WITH_CAR_MODEL, COMMAND_SET_TARGET_CAR_FOR_MISSION_GARAGE, COMMAND_IS_CAR_IN_MISSION_GARAGE, COMMAND_SET_FREE_BOMBS, - COMMAND_SET_POWERPOINT, - COMMAND_SET_ALL_TAXI_LIGHTS, COMMAND_IS_CAR_ARMED_WITH_ANY_BOMB, COMMAND_APPLY_BRAKES_TO_PLAYERS_CAR, - COMMAND_SET_PLAYER_HEALTH, COMMAND_SET_CHAR_HEALTH, COMMAND_SET_CAR_HEALTH, - COMMAND_GET_PLAYER_HEALTH, COMMAND_GET_CHAR_HEALTH, COMMAND_GET_CAR_HEALTH, COMMAND_IS_CAR_ARMED_WITH_BOMB, @@ -567,48 +342,30 @@ enum { COMMAND_SWITCH_PED_ROADS_ON, COMMAND_SWITCH_PED_ROADS_OFF, COMMAND_CHAR_LOOK_AT_CHAR_ALWAYS, - COMMAND_CHAR_LOOK_AT_PLAYER_ALWAYS, - COMMAND_PLAYER_LOOK_AT_CHAR_ALWAYS, COMMAND_STOP_CHAR_LOOKING, - COMMAND_STOP_PLAYER_LOOKING, - COMMAND_SWITCH_HELICOPTER, - COMMAND_SET_GANG_ATTITUDE, - COMMAND_SET_GANG_GANG_ATTITUDE, - COMMAND_SET_GANG_PLAYER_ATTITUDE, COMMAND_SET_GANG_PED_MODELS, COMMAND_SET_GANG_CAR_MODEL, COMMAND_SET_GANG_WEAPONS, - COMMAND_SET_CHAR_OBJ_RUN_TO_AREA, COMMAND_SET_CHAR_OBJ_RUN_TO_COORD, - COMMAND_IS_PLAYER_TOUCHING_OBJECT_ON_FOOT, - COMMAND_IS_CHAR_TOUCHING_OBJECT_ON_FOOT, COMMAND_LOAD_SPECIAL_CHARACTER, COMMAND_HAS_SPECIAL_CHARACTER_LOADED, - COMMAND_FLASH_CAR, - COMMAND_FLASH_CHAR, - COMMAND_FLASH_OBJECT, COMMAND_IS_PLAYER_IN_REMOTE_MODE, COMMAND_ARM_CAR_WITH_BOMB, COMMAND_SET_CHAR_PERSONALITY, COMMAND_SET_CUTSCENE_OFFSET, COMMAND_SET_ANIM_GROUP_FOR_CHAR, - COMMAND_SET_ANIM_GROUP_FOR_PLAYER, COMMAND_REQUEST_MODEL, COMMAND_HAS_MODEL_LOADED, COMMAND_MARK_MODEL_AS_NO_LONGER_NEEDED, COMMAND_GRAB_PHONE, - COMMAND_SET_REPEATED_PHONE_MESSAGE, - COMMAND_SET_PHONE_MESSAGE, - COMMAND_HAS_PHONE_DISPLAYED_MESSAGE, COMMAND_TURN_PHONE_OFF, COMMAND_DRAW_CORONA, - COMMAND_DRAW_LIGHT, COMMAND_STORE_WEATHER, COMMAND_RESTORE_WEATHER, COMMAND_STORE_CLOCK, COMMAND_RESTORE_CLOCK, COMMAND_RESTART_CRITICAL_MISSION, - COMMAND_IS_PLAYER_PLAYING, + todo__comm_363, COMMAND_SET_COLL_OBJ_NO_OBJ, COMMAND_SET_COLL_OBJ_WAIT_ON_FOOT, COMMAND_SET_COLL_OBJ_FLEE_ON_FOOT_TILL_SAFE, @@ -616,114 +373,74 @@ enum { COMMAND_SET_COLL_OBJ_GUARD_AREA, COMMAND_SET_COLL_OBJ_WAIT_IN_CAR, COMMAND_SET_COLL_OBJ_KILL_CHAR_ON_FOOT, - COMMAND_SET_COLL_OBJ_KILL_PLAYER_ON_FOOT, COMMAND_SET_COLL_OBJ_KILL_CHAR_ANY_MEANS, - COMMAND_SET_COLL_OBJ_KILL_PLAYER_ANY_MEANS, - COMMAND_SET_COLL_OBJ_FLEE_CHAR_ON_FOOT_TILL_SAFE, - COMMAND_SET_COLL_OBJ_FLEE_PLAYER_ON_FOOT_TILL_SAFE, COMMAND_SET_COLL_OBJ_FLEE_CHAR_ON_FOOT_ALWAYS, - COMMAND_SET_COLL_OBJ_FLEE_PLAYER_ON_FOOT_ALWAYS, COMMAND_SET_COLL_OBJ_GOTO_CHAR_ON_FOOT, - COMMAND_SET_COLL_OBJ_GOTO_PLAYER_ON_FOOT, - COMMAND_SET_COLL_OBJ_LEAVE_CAR, + todo__comm_374, COMMAND_SET_COLL_OBJ_ENTER_CAR_AS_PASSENGER, COMMAND_SET_COLL_OBJ_ENTER_CAR_AS_DRIVER, - COMMAND_SET_COLL_OBJ_FOLLOW_CAR_IN_CAR, - COMMAND_SET_COLL_OBJ_FIRE_AT_OBJECT_FROM_VEHICLE, - COMMAND_SET_COLL_OBJ_DESTROY_OBJECT, - COMMAND_SET_COLL_OBJ_DESTROY_CAR, + todo__comm_377, + todo__comm_378, COMMAND_SET_COLL_OBJ_GOTO_AREA_ON_FOOT, - COMMAND_SET_COLL_OBJ_GOTO_AREA_IN_CAR, - COMMAND_SET_COLL_OBJ_FOLLOW_CAR_ON_FOOT_WITH_OFFSET, - COMMAND_SET_COLL_OBJ_GUARD_ATTACK, - COMMAND_SET_COLL_OBJ_FOLLOW_ROUTE, COMMAND_SET_COLL_OBJ_GOTO_COORD_ON_FOOT, - COMMAND_SET_COLL_OBJ_GOTO_COORD_IN_CAR, - COMMAND_SET_COLL_OBJ_RUN_TO_AREA, + todo__comm_381, + todo__comm_382, + COMMAND_SET_COLL_OBJ_LEAVE_CAR, + todo__comm_384, + todo__comm_385, + todo__comm_386, + todo__comm_387, + COMMAND_SET_COLL_OBJ_FOLLOW_ROUTE, COMMAND_SET_COLL_OBJ_RUN_TO_COORD, - COMMAND_ADD_PEDS_IN_AREA_TO_COLL, - COMMAND_ADD_PEDS_IN_VEHICLE_TO_COLL, - COMMAND_CLEAR_COLL, - COMMAND_IS_COLL_IN_CARS, - COMMAND_LOCATE_COLL_ANY_MEANS_2D, - COMMAND_LOCATE_COLL_ON_FOOT_2D, - COMMAND_LOCATE_COLL_IN_CAR_2D, - COMMAND_LOCATE_STOPPED_COLL_ANY_MEANS_2D, - COMMAND_LOCATE_STOPPED_COLL_ON_FOOT_2D, - COMMAND_LOCATE_STOPPED_COLL_IN_CAR_2D, - COMMAND_LOCATE_COLL_ANY_MEANS_CHAR_2D, - COMMAND_LOCATE_COLL_ON_FOOT_CHAR_2D, - COMMAND_LOCATE_COLL_IN_CAR_CHAR_2D, - COMMAND_LOCATE_COLL_ANY_MEANS_CAR_2D, - COMMAND_LOCATE_COLL_ON_FOOT_CAR_2D, - COMMAND_LOCATE_COLL_IN_CAR_CAR_2D, - COMMAND_LOCATE_COLL_ANY_MEANS_PLAYER_2D, - COMMAND_LOCATE_COLL_ON_FOOT_PLAYER_2D, - COMMAND_LOCATE_COLL_IN_CAR_PLAYER_2D, - COMMAND_IS_COLL_IN_AREA_2D, - COMMAND_IS_COLL_IN_AREA_ON_FOOT_2D, - COMMAND_IS_COLL_IN_AREA_IN_CAR_2D, - COMMAND_IS_COLL_STOPPED_IN_AREA_2D, - COMMAND_IS_COLL_STOPPED_IN_AREA_ON_FOOT_2D, - COMMAND_IS_COLL_STOPPED_IN_AREA_IN_CAR_2D, - COMMAND_GET_NUMBER_OF_PEDS_IN_COLL, + todo__comm_390, + todo__comm_391, + todo__comm_392, + todo__comm_393, + todo__comm_394, + todo__comm_395, + todo__comm_396, + todo__comm_397, + todo__comm_398, + todo__comm_399, + todo__comm_400, + todo__comm_401, + todo__comm_402, + todo__comm_403, + todo__comm_404, + todo__comm_405, + todo__comm_406, + todo__comm_407, + todo__comm_408, + todo__comm_409, + todo__comm_410, + todo__comm_411, + todo__comm_412, + todo__comm_413, + todo__comm_414, + todo__comm_415, + todo__comm_416, + todo__comm_417, + todo__comm_418, + todo__comm_419, COMMAND_SET_CHAR_HEED_THREATS, - COMMAND_SET_PLAYER_HEED_THREATS, COMMAND_GET_CONTROLLER_MODE, COMMAND_SET_CAN_RESPRAY_CAR, - COMMAND_IS_TAXI, COMMAND_UNLOAD_SPECIAL_CHARACTER, COMMAND_RESET_NUM_OF_MODELS_KILLED_BY_PLAYER, COMMAND_GET_NUM_OF_MODELS_KILLED_BY_PLAYER, - COMMAND_ACTIVATE_GARAGE, - COMMAND_SWITCH_TAXI_TIMER, COMMAND_CREATE_OBJECT_NO_OFFSET, COMMAND_IS_BOAT, - COMMAND_SET_CHAR_OBJ_GOTO_AREA_ANY_MEANS, - COMMAND_SET_COLL_OBJ_GOTO_AREA_ANY_MEANS, - COMMAND_IS_PLAYER_STOPPED, COMMAND_IS_CHAR_STOPPED, COMMAND_MESSAGE_WAIT, - COMMAND_ADD_PARTICLE_EFFECT, COMMAND_SWITCH_WIDESCREEN, - COMMAND_ADD_SPRITE_BLIP_FOR_CAR, - COMMAND_ADD_SPRITE_BLIP_FOR_CHAR, - COMMAND_ADD_SPRITE_BLIP_FOR_OBJECT, - COMMAND_ADD_SPRITE_BLIP_FOR_CONTACT_POINT, - COMMAND_ADD_SPRITE_BLIP_FOR_COORD, COMMAND_SET_CHAR_ONLY_DAMAGED_BY_PLAYER, COMMAND_SET_CAR_ONLY_DAMAGED_BY_PLAYER, COMMAND_SET_CHAR_PROOFS, COMMAND_SET_CAR_PROOFS, - COMMAND_IS_PLAYER_IN_ANGLED_AREA_2D, - COMMAND_IS_PLAYER_IN_ANGLED_AREA_ON_FOOT_2D, - COMMAND_IS_PLAYER_IN_ANGLED_AREA_IN_CAR_2D, - COMMAND_IS_PLAYER_STOPPED_IN_ANGLED_AREA_2D, - COMMAND_IS_PLAYER_STOPPED_IN_ANGLED_AREA_ON_FOOT_2D, - COMMAND_IS_PLAYER_STOPPED_IN_ANGLED_AREA_IN_CAR_2D, - COMMAND_IS_PLAYER_IN_ANGLED_AREA_3D, - COMMAND_IS_PLAYER_IN_ANGLED_AREA_ON_FOOT_3D, - COMMAND_IS_PLAYER_IN_ANGLED_AREA_IN_CAR_3D, - COMMAND_IS_PLAYER_STOPPED_IN_ANGLED_AREA_3D, - COMMAND_IS_PLAYER_STOPPED_IN_ANGLED_AREA_ON_FOOT_3D, - COMMAND_IS_PLAYER_STOPPED_IN_ANGLED_AREA_IN_CAR_3D, - COMMAND_DEACTIVATE_GARAGE, - COMMAND_GET_NUMBER_OF_CARS_COLLECTED_BY_GARAGE, - COMMAND_HAS_CAR_BEEN_TAKEN_TO_GARAGE, - COMMAND_SET_SWAT_REQUIRED, - COMMAND_SET_FBI_REQUIRED, - COMMAND_SET_ARMY_REQUIRED, COMMAND_IS_CAR_IN_WATER, COMMAND_GET_CLOSEST_CHAR_NODE, COMMAND_GET_CLOSEST_CAR_NODE, COMMAND_CAR_GOTO_COORDINATES_ACCURATE, - COMMAND_START_PACMAN_RACE, - COMMAND_START_PACMAN_RECORD, - COMMAND_GET_NUMBER_OF_POWER_PILLS_EATEN, - COMMAND_CLEAR_PACMAN, - COMMAND_START_PACMAN_SCRAMBLE, - COMMAND_GET_NUMBER_OF_POWER_PILLS_CARRIED, - COMMAND_CLEAR_NUMBER_OF_POWER_PILLS_CARRIED, COMMAND_IS_CAR_ON_SCREEN, COMMAND_IS_CHAR_ON_SCREEN, COMMAND_IS_OBJECT_ON_SCREEN, @@ -732,18 +449,12 @@ enum { COMMAND_START_SCRIPT_FIRE, COMMAND_IS_SCRIPT_FIRE_EXTINGUISHED, COMMAND_REMOVE_SCRIPT_FIRE, - COMMAND_SET_COMEDY_CONTROLS, COMMAND_BOAT_GOTO_COORDS, COMMAND_BOAT_STOP, COMMAND_IS_PLAYER_SHOOTING_IN_AREA, - COMMAND_IS_CHAR_SHOOTING_IN_AREA, - COMMAND_IS_CURRENT_PLAYER_WEAPON, COMMAND_IS_CURRENT_CHAR_WEAPON, - COMMAND_CLEAR_NUMBER_OF_POWER_PILLS_EATEN, - COMMAND_ADD_POWER_PILL, COMMAND_SET_BOAT_CRUISE_SPEED, COMMAND_GET_RANDOM_CHAR_IN_AREA, - COMMAND_GET_RANDOM_CHAR_IN_ZONE, COMMAND_IS_PLAYER_IN_TAXI, COMMAND_IS_PLAYER_SHOOTING, COMMAND_IS_CHAR_SHOOTING, @@ -751,23 +462,12 @@ enum { COMMAND_SET_CHAR_ACCURACY, COMMAND_GET_CAR_SPEED, COMMAND_LOAD_CUTSCENE, - COMMAND_CREATE_CUTSCENE_OBJECT, - COMMAND_SET_CUTSCENE_ANIM, COMMAND_START_CUTSCENE, - COMMAND_GET_CUTSCENE_TIME, COMMAND_HAS_CUTSCENE_FINISHED, COMMAND_CLEAR_CUTSCENE, COMMAND_RESTORE_CAMERA_JUMPCUT, - COMMAND_CREATE_COLLECTABLE1, - COMMAND_SET_COLLECTABLE1_TOTAL, - COMMAND_IS_PROJECTILE_IN_AREA, - COMMAND_DESTROY_PROJECTILES_IN_AREA, - COMMAND_DROP_MINE, - COMMAND_DROP_NAUTICAL_MINE, COMMAND_IS_CHAR_MODEL, COMMAND_LOAD_SPECIAL_MODEL, - COMMAND_CREATE_CUTSCENE_HEAD, - COMMAND_SET_CUTSCENE_HEAD_ANIM, COMMAND_SIN, COMMAND_COS, COMMAND_GET_CAR_FORWARD_X, @@ -779,17 +479,8 @@ enum { COMMAND_PRINT_WITH_2_NUMBERS_SOON, COMMAND_PRINT_WITH_3_NUMBERS, COMMAND_PRINT_WITH_3_NUMBERS_NOW, - COMMAND_PRINT_WITH_3_NUMBERS_SOON, COMMAND_PRINT_WITH_4_NUMBERS, - COMMAND_PRINT_WITH_4_NUMBERS_NOW, - COMMAND_PRINT_WITH_4_NUMBERS_SOON, - COMMAND_PRINT_WITH_5_NUMBERS, - COMMAND_PRINT_WITH_5_NUMBERS_NOW, - COMMAND_PRINT_WITH_5_NUMBERS_SOON, COMMAND_PRINT_WITH_6_NUMBERS, - COMMAND_PRINT_WITH_6_NUMBERS_NOW, - COMMAND_PRINT_WITH_6_NUMBERS_SOON, - COMMAND_SET_CHAR_OBJ_FOLLOW_CHAR_IN_FORMATION, COMMAND_PLAYER_MADE_PROGRESS, COMMAND_SET_PROGRESS_TOTAL, COMMAND_REGISTER_JUMP_DISTANCE, @@ -805,74 +496,43 @@ enum { COMMAND_REGISTER_MISSION_PASSED, COMMAND_SET_CHAR_RUNNING, COMMAND_REMOVE_ALL_SCRIPT_FIRES, - COMMAND_IS_FIRST_CAR_COLOUR, - COMMAND_IS_SECOND_CAR_COLOUR, COMMAND_HAS_CHAR_BEEN_DAMAGED_BY_WEAPON, COMMAND_HAS_CAR_BEEN_DAMAGED_BY_WEAPON, - COMMAND_IS_CHAR_IN_CHARS_GROUP, COMMAND_IS_CHAR_IN_PLAYERS_GROUP, COMMAND_EXPLODE_CHAR_HEAD, - COMMAND_EXPLODE_PLAYER_HEAD, COMMAND_ANCHOR_BOAT, COMMAND_SET_ZONE_GROUP, COMMAND_START_CAR_FIRE, COMMAND_START_CHAR_FIRE, COMMAND_GET_RANDOM_CAR_OF_TYPE_IN_AREA, - COMMAND_GET_RANDOM_CAR_OF_TYPE_IN_ZONE, COMMAND_HAS_RESPRAY_HAPPENED, COMMAND_SET_CAMERA_ZOOM, COMMAND_CREATE_PICKUP_WITH_AMMO, - COMMAND_SET_CAR_RAM_CAR, - COMMAND_SET_CAR_BLOCK_CAR, - COMMAND_SET_CHAR_OBJ_CATCH_TRAIN, - COMMAND_SET_COLL_OBJ_CATCH_TRAIN, + todo__comm_506, COMMAND_SET_PLAYER_NEVER_GETS_TIRED, COMMAND_SET_PLAYER_FAST_RELOAD, COMMAND_SET_CHAR_BLEEDING, - COMMAND_SET_CAR_FUNNY_SUSPENSION, - COMMAND_SET_CAR_BIG_WHEELS, + todo__comm_510, COMMAND_SET_FREE_RESPRAYS, - COMMAND_SET_PLAYER_VISIBLE, COMMAND_SET_CHAR_VISIBLE, COMMAND_SET_CAR_VISIBLE, COMMAND_IS_AREA_OCCUPIED, - COMMAND_START_DRUG_RUN, - COMMAND_HAS_DRUG_RUN_BEEN_COMPLETED, - COMMAND_HAS_DRUG_PLANE_BEEN_SHOT_DOWN, - COMMAND_SAVE_PLAYER_FROM_FIRES, COMMAND_DISPLAY_TEXT, COMMAND_SET_TEXT_SCALE, COMMAND_SET_TEXT_COLOUR, COMMAND_SET_TEXT_JUSTIFY, COMMAND_SET_TEXT_CENTRE, COMMAND_SET_TEXT_WRAPX, - COMMAND_SET_TEXT_CENTRE_SIZE, + todo__comm_521, COMMAND_SET_TEXT_BACKGROUND, - COMMAND_SET_TEXT_BACKGROUND_COLOUR, - COMMAND_SET_TEXT_BACKGROUND_ONLY_TEXT, - COMMAND_SET_TEXT_PROPORTIONAL, - COMMAND_SET_TEXT_FONT, - COMMAND_INDUSTRIAL_PASSED, - COMMAND_COMMERCIAL_PASSED, - COMMAND_SUBURBAN_PASSED, COMMAND_ROTATE_OBJECT, COMMAND_SLIDE_OBJECT, COMMAND_REMOVE_CHAR_ELEGANTLY, COMMAND_SET_CHAR_STAY_IN_SAME_PLACE, - COMMAND_IS_NASTY_GAME, COMMAND_UNDRESS_CHAR, - COMMAND_DRESS_CHAR, - COMMAND_START_CHASE_SCENE, - COMMAND_STOP_CHASE_SCENE, COMMAND_IS_EXPLOSION_IN_AREA, - COMMAND_IS_EXPLOSION_IN_ZONE, - COMMAND_START_DRUG_DROP_OFF, - COMMAND_HAS_DROP_OFF_PLANE_BEEN_SHOT_DOWN, - COMMAND_FIND_DROP_OFF_PLANE_COORDINATES, - COMMAND_CREATE_FLOATING_PACKAGE, COMMAND_PLACE_OBJECT_RELATIVE_TO_CAR, COMMAND_MAKE_OBJECT_TARGETTABLE, - COMMAND_ADD_ARMOUR_TO_PLAYER, COMMAND_ADD_ARMOUR_TO_CHAR, COMMAND_OPEN_GARAGE, COMMAND_CLOSE_GARAGE, @@ -882,58 +542,26 @@ enum { COMMAND_SET_CHAR_OBJ_HAIL_TAXI, COMMAND_HAS_OBJECT_BEEN_DAMAGED, COMMAND_START_KILL_FRENZY_HEADSHOT, - COMMAND_ACTIVATE_MILITARY_CRANE, - COMMAND_WARP_PLAYER_INTO_CAR, COMMAND_WARP_CHAR_INTO_CAR, COMMAND_SWITCH_CAR_RADIO, - COMMAND_SET_AUDIO_STREAM, COMMAND_PRINT_WITH_2_NUMBERS_BIG, COMMAND_PRINT_WITH_3_NUMBERS_BIG, - COMMAND_PRINT_WITH_4_NUMBERS_BIG, - COMMAND_PRINT_WITH_5_NUMBERS_BIG, - COMMAND_PRINT_WITH_6_NUMBERS_BIG, COMMAND_SET_CHAR_WAIT_STATE, COMMAND_SET_CAMERA_BEHIND_PLAYER, - COMMAND_SET_MOTION_BLUR, - COMMAND_PRINT_STRING_IN_STRING, COMMAND_CREATE_RANDOM_CHAR, - COMMAND_SET_CHAR_OBJ_STEAL_ANY_CAR, - COMMAND_SET_2_REPEATED_PHONE_MESSAGES, - COMMAND_SET_2_PHONE_MESSAGES, - COMMAND_SET_3_REPEATED_PHONE_MESSAGES, - COMMAND_SET_3_PHONE_MESSAGES, - COMMAND_SET_4_REPEATED_PHONE_MESSAGES, - COMMAND_SET_4_PHONE_MESSAGES, COMMAND_IS_SNIPER_BULLET_IN_AREA, - COMMAND_GIVE_PLAYER_DETONATOR, - COMMAND_SET_COLL_OBJ_STEAL_ANY_CAR, COMMAND_SET_OBJECT_VELOCITY, COMMAND_SET_OBJECT_COLLISION, - COMMAND_IS_ICECREAM_JINGLE_ON, COMMAND_PRINT_STRING_IN_STRING_NOW, - COMMAND_PRINT_STRING_IN_STRING_SOON, - COMMAND_SET_5_REPEATED_PHONE_MESSAGES, - COMMAND_SET_5_PHONE_MESSAGES, - COMMAND_SET_6_REPEATED_PHONE_MESSAGES, - COMMAND_SET_6_PHONE_MESSAGES, COMMAND_IS_POINT_OBSCURED_BY_A_MISSION_ENTITY, COMMAND_LOAD_ALL_MODELS_NOW, COMMAND_ADD_TO_OBJECT_VELOCITY, - COMMAND_DRAW_SPRITE, - COMMAND_DRAW_RECT, - COMMAND_LOAD_SPRITE, - COMMAND_LOAD_TEXTURE_DICTIONARY, - COMMAND_REMOVE_TEXTURE_DICTIONARY, COMMAND_SET_OBJECT_DYNAMIC, - COMMAND_SET_CHAR_ANIM_SPEED, COMMAND_PLAY_MISSION_PASSED_TUNE, COMMAND_CLEAR_AREA, COMMAND_FREEZE_ONSCREEN_TIMER, COMMAND_SWITCH_CAR_SIREN, - COMMAND_SWITCH_PED_ROADS_ON_ANGLED, COMMAND_SWITCH_PED_ROADS_OFF_ANGLED, - COMMAND_SWITCH_ROADS_ON_ANGLED, - COMMAND_SWITCH_ROADS_OFF_ANGLED, COMMAND_SET_CAR_WATERTIGHT, COMMAND_ADD_MOVING_PARTICLE_EFFECT, COMMAND_SET_CHAR_CANT_BE_DRAGGED_OUT, @@ -943,8 +571,6 @@ enum { COMMAND_SET_CAR_STATUS, COMMAND_IS_CHAR_MALE, COMMAND_SCRIPT_NAME, - COMMAND_CHANGE_GARAGE_TYPE_WITH_CAR_MODEL, - COMMAND_FIND_DRUG_PLANE_COORDINATES, COMMAND_SAVE_INT_TO_DEBUG_FILE, COMMAND_SAVE_FLOAT_TO_DEBUG_FILE, COMMAND_SAVE_NEWLINE_TO_DEBUG_FILE, @@ -956,27 +582,17 @@ enum { COMMAND_SWITCH_STREAMING, COMMAND_IS_GARAGE_OPEN, COMMAND_IS_GARAGE_CLOSED, - COMMAND_START_CATALINA_HELI, - COMMAND_CATALINA_HELI_TAKE_OFF, - COMMAND_REMOVE_CATALINA_HELI, - COMMAND_HAS_CATALINA_HELI_BEEN_SHOT_DOWN, COMMAND_SWAP_NEAREST_BUILDING_MODEL, COMMAND_SWITCH_WORLD_PROCESSING, - COMMAND_REMOVE_ALL_PLAYER_WEAPONS, - COMMAND_GRAB_CATALINA_HELI, COMMAND_CLEAR_AREA_OF_CARS, COMMAND_SET_ROTATING_GARAGE_DOOR, COMMAND_ADD_SPHERE, COMMAND_REMOVE_SPHERE, - COMMAND_CATALINA_HELI_FLY_AWAY, COMMAND_SET_EVERYONE_IGNORE_PLAYER, COMMAND_STORE_CAR_CHAR_IS_IN_NO_SAVE, - COMMAND_STORE_CAR_PLAYER_IS_IN_NO_SAVE, - COMMAND_IS_PHONE_DISPLAYING_MESSAGE, COMMAND_DISPLAY_ONSCREEN_TIMER_WITH_STRING, COMMAND_DISPLAY_ONSCREEN_COUNTER_WITH_STRING, COMMAND_CREATE_RANDOM_CAR_FOR_CAR_PARK, - COMMAND_IS_COLLISION_IN_MEMORY, COMMAND_SET_WANTED_MULTIPLIER, COMMAND_SET_CAMERA_IN_FRONT_OF_PLAYER, COMMAND_IS_CAR_VISIBLY_DAMAGED, @@ -987,7 +603,7 @@ enum { COMMAND_IS_CAR_STUCK, COMMAND_LOAD_MISSION_AUDIO, COMMAND_HAS_MISSION_AUDIO_LOADED, - COMMAND_PLAY_MISSION_AUDIO, + todo__comm_601, COMMAND_HAS_MISSION_AUDIO_FINISHED, COMMAND_GET_CLOSEST_CAR_NODE_WITH_HEADING, COMMAND_HAS_IMPORT_GARAGE_SLOT_BEEN_FILLED, @@ -997,24 +613,16 @@ enum { COMMAND_ACTIVATE_SAVE_MENU, COMMAND_HAS_SAVE_GAME_FINISHED, COMMAND_NO_SPECIAL_CAMERA_FOR_THIS_GARAGE, - COMMAND_ADD_BLIP_FOR_PICKUP_OLD, COMMAND_ADD_BLIP_FOR_PICKUP, - COMMAND_ADD_SPRITE_BLIP_FOR_PICKUP, COMMAND_SET_PED_DENSITY_MULTIPLIER, COMMAND_FORCE_RANDOM_PED_TYPE, - COMMAND_SET_TEXT_DRAW_BEFORE_FADE, - COMMAND_GET_COLLECTABLE1S_COLLECTED, - COMMAND_SET_CHAR_OBJ_LEAVE_ANY_CAR, - COMMAND_SET_SPRITES_DRAW_BEFORE_FADE, COMMAND_SET_TEXT_RIGHT_JUSTIFY, COMMAND_PRINT_HELP, COMMAND_CLEAR_HELP, COMMAND_FLASH_HUD_OBJECT, - COMMAND_FLASH_RADAR_BLIP, COMMAND_IS_CHAR_IN_CONTROL, COMMAND_SET_GENERATE_CARS_AROUND_CAMERA, COMMAND_CLEAR_SMALL_PRINTS, - COMMAND_HAS_MILITARY_CRANE_COLLECTED_ALL_CARS, COMMAND_SET_UPSIDEDOWN_CAR_NOT_DAMAGED, COMMAND_CAN_PLAYER_START_MISSION, COMMAND_MAKE_PLAYER_SAFE_FOR_CUTSCENE, @@ -1024,64 +632,40 @@ enum { COMMAND_GET_CAR_COLOURS, COMMAND_SET_ALL_CARS_CAN_BE_DAMAGED, COMMAND_SET_CAR_CAN_BE_DAMAGED, - COMMAND_MAKE_PLAYER_UNSAFE, - COMMAND_LOAD_COLLISION, - COMMAND_GET_BODY_CAST_HEALTH, COMMAND_SET_CHARS_CHATTING, - COMMAND_MAKE_PLAYER_SAFE, - COMMAND_SET_CAR_STAYS_IN_CURRENT_LEVEL, - COMMAND_SET_CHAR_STAYS_IN_CURRENT_LEVEL, COMMAND_SET_DRUNK_INPUT_DELAY, COMMAND_SET_CHAR_MONEY, - COMMAND_INCREASE_CHAR_MONEY, COMMAND_GET_OFFSET_FROM_OBJECT_IN_WORLD_COORDS, COMMAND_REGISTER_LIFE_SAVED, COMMAND_REGISTER_CRIMINAL_CAUGHT, COMMAND_REGISTER_AMBULANCE_LEVEL, COMMAND_REGISTER_FIRE_EXTINGUISHED, COMMAND_TURN_PHONE_ON, - COMMAND_REGISTER_LONGEST_DODO_FLIGHT, COMMAND_GET_OFFSET_FROM_CAR_IN_WORLD_COORDS, COMMAND_SET_TOTAL_NUMBER_OF_KILL_FRENZIES, COMMAND_BLOW_UP_RC_BUGGY, - COMMAND_REMOVE_CAR_FROM_CHASE, COMMAND_IS_FRENCH_GAME, COMMAND_IS_GERMAN_GAME, COMMAND_CLEAR_MISSION_AUDIO, - COMMAND_SET_FADE_IN_AFTER_NEXT_ARREST, - COMMAND_SET_FADE_IN_AFTER_NEXT_DEATH, - COMMAND_SET_GANG_PED_MODEL_PREFERENCE, COMMAND_SET_CHAR_USE_PEDNODE_SEEK, - COMMAND_SWITCH_VEHICLE_WEAPONS, COMMAND_SET_GET_OUT_OF_JAIL_FREE, COMMAND_SET_FREE_HEALTH_CARE, - COMMAND_IS_CAR_DOOR_CLOSED, - COMMAND_LOAD_AND_LAUNCH_MISSION, + todo__comm_648, COMMAND_LOAD_AND_LAUNCH_MISSION_INTERNAL, COMMAND_SET_OBJECT_DRAW_LAST, - COMMAND_GET_AMMO_IN_PLAYER_WEAPON, - COMMAND_GET_AMMO_IN_CHAR_WEAPON, - COMMAND_REGISTER_KILL_FRENZY_PASSED, + todo__comm_651, COMMAND_SET_CHAR_SAY, COMMAND_SET_NEAR_CLIP, COMMAND_SET_RADIO_CHANNEL, - COMMAND_OVERRIDE_HOSPITAL_LEVEL, - COMMAND_OVERRIDE_POLICE_STATION_LEVEL, - COMMAND_FORCE_RAIN, COMMAND_DOES_GARAGE_CONTAIN_CAR, COMMAND_SET_CAR_TRACTION, COMMAND_ARE_MEASUREMENTS_IN_METRES, COMMAND_CONVERT_METRES_TO_FEET, COMMAND_MARK_ROADS_BETWEEN_LEVELS, - COMMAND_MARK_PED_ROADS_BETWEEN_LEVELS, COMMAND_SET_CAR_AVOID_LEVEL_TRANSITIONS, - COMMAND_SET_CHAR_AVOID_LEVEL_TRANSITIONS, - COMMAND_IS_THREAT_FOR_PED_TYPE, COMMAND_CLEAR_AREA_OF_CHARS, COMMAND_SET_TOTAL_NUMBER_OF_MISSIONS, COMMAND_CONVERT_METRES_TO_FEET_INT, - COMMAND_REGISTER_FASTEST_TIME, - COMMAND_REGISTER_HIGHEST_SCORE, COMMAND_WARP_CHAR_INTO_CAR_AS_PASSENGER, COMMAND_IS_CAR_PASSENGER_SEAT_FREE, COMMAND_GET_CHAR_IN_CAR_PASSENGER_SEAT, @@ -1090,62 +674,38 @@ enum { COMMAND_STOP_CREDITS, COMMAND_ARE_CREDITS_FINISHED, COMMAND_CREATE_SINGLE_PARTICLE, - COMMAND_SET_CHAR_IGNORE_LEVEL_TRANSITIONS, - COMMAND_GET_CHASE_CAR, - COMMAND_START_BOAT_FOAM_ANIMATION, - COMMAND_UPDATE_BOAT_FOAM_ANIMATION, COMMAND_SET_MUSIC_DOES_FADE, - COMMAND_SET_INTRO_IS_PLAYING, - COMMAND_SET_PLAYER_HOOKER, COMMAND_PLAY_END_OF_GAME_TUNE, COMMAND_STOP_END_OF_GAME_TUNE, COMMAND_GET_CAR_MODEL, - COMMAND_IS_PLAYER_SITTING_IN_CAR, - COMMAND_IS_PLAYER_SITTING_IN_ANY_CAR, - COMMAND_SET_SCRIPT_FIRE_AUDIO, COMMAND_ARE_ANY_CAR_CHEATS_ACTIVATED, COMMAND_SET_CHAR_SUFFERS_CRITICAL_HITS, - COMMAND_IS_PLAYER_LIFTING_A_PHONE, COMMAND_IS_CHAR_SITTING_IN_CAR, COMMAND_IS_CHAR_SITTING_IN_ANY_CAR, - COMMAND_IS_PLAYER_ON_FOOT, COMMAND_IS_CHAR_ON_FOOT, - COMMAND_LOAD_COLLISION_WITH_SCREEN, COMMAND_LOAD_SPLASH_SCREEN, - COMMAND_SET_CAR_IGNORE_LEVEL_TRANSITIONS, - COMMAND_MAKE_CRAIGS_CAR_A_BIT_STRONGER, - COMMAND_SET_JAMES_CAR_ON_PATH_TO_PLAYER, - COMMAND_LOAD_END_OF_GAME_TUNE, + todo__comm_682, COMMAND_ENABLE_PLAYER_CONTROL_CAMERA, COMMAND_SET_OBJECT_ROTATION, COMMAND_GET_DEBUG_CAMERA_COORDINATES, - COMMAND_GET_DEBUG_CAMERA_FRONT_VECTOR, - COMMAND_IS_PLAYER_TARGETTING_ANY_CHAR, - COMMAND_IS_PLAYER_TARGETTING_CHAR, - COMMAND_IS_PLAYER_TARGETTING_OBJECT, + todo__comm_686, + todo__comm_687, COMMAND_TERMINATE_ALL_SCRIPTS_WITH_THIS_NAME, COMMAND_DISPLAY_TEXT_WITH_NUMBER, COMMAND_DISPLAY_TEXT_WITH_2_NUMBERS, - COMMAND_FAIL_CURRENT_MISSION, - COMMAND_GET_CLOSEST_OBJECT_OF_TYPE, - COMMAND_PLACE_OBJECT_RELATIVE_TO_OBJECT, COMMAND_SET_ALL_OCCUPANTS_OF_CAR_LEAVE_CAR, COMMAND_SET_INTERPOLATION_PARAMETERS, - COMMAND_GET_CLOSEST_CAR_NODE_WITH_HEADING_TOWARDS_POINT, - COMMAND_GET_CLOSEST_CAR_NODE_WITH_HEADING_AWAY_POINT, COMMAND_GET_DEBUG_CAMERA_POINT_AT, COMMAND_ATTACH_CHAR_TO_CAR, COMMAND_DETACH_CHAR_FROM_CAR, + todo__comm_696, COMMAND_SET_CAR_CHANGE_LANE, COMMAND_CLEAR_CHAR_LAST_WEAPON_DAMAGE, COMMAND_CLEAR_CAR_LAST_WEAPON_DAMAGE, COMMAND_GET_RANDOM_COP_IN_AREA, - COMMAND_GET_RANDOM_COP_IN_ZONE, - COMMAND_SET_CHAR_OBJ_FLEE_CAR, COMMAND_GET_DRIVER_OF_CAR, COMMAND_GET_NUMBER_OF_FOLLOWERS, COMMAND_GIVE_REMOTE_CONTROLLED_MODEL_TO_PLAYER, - COMMAND_GET_CURRENT_PLAYER_WEAPON, COMMAND_GET_CURRENT_CHAR_WEAPON, COMMAND_LOCATE_CHAR_ANY_MEANS_OBJECT_2D, COMMAND_LOCATE_CHAR_ON_FOOT_OBJECT_2D, @@ -1154,100 +714,53 @@ enum { COMMAND_LOCATE_CHAR_ON_FOOT_OBJECT_3D, COMMAND_LOCATE_CHAR_IN_CAR_OBJECT_3D, COMMAND_SET_CAR_TEMP_ACTION, - COMMAND_SET_CAR_HANDBRAKE_TURN_RIGHT, - COMMAND_SET_CAR_HANDBRAKE_STOP, COMMAND_IS_CHAR_ON_ANY_BIKE, - COMMAND_LOCATE_SNIPER_BULLET_2D, - COMMAND_LOCATE_SNIPER_BULLET_3D, - COMMAND_GET_NUMBER_OF_SEATS_IN_MODEL, - COMMAND_IS_PLAYER_ON_ANY_BIKE, - COMMAND_IS_CHAR_LYING_DOWN, COMMAND_CAN_CHAR_SEE_DEAD_CHAR, COMMAND_SET_ENTER_CAR_RANGE_MULTIPLIER, COMMAND_SET_THREAT_REACTION_RANGE_MULTIPLIER, COMMAND_SET_CHAR_CEASE_ATTACK_TIMER, COMMAND_GET_REMOTE_CONTROLLED_CAR, COMMAND_IS_PC_VERSION, - COMMAND_REPLAY, - COMMAND_IS_REPLAY_PLAYING, COMMAND_IS_MODEL_AVAILABLE, COMMAND_SHUT_CHAR_UP, COMMAND_SET_ENABLE_RC_DETONATE, COMMAND_SET_CAR_RANDOM_ROUTE_SEED, - COMMAND_IS_ANY_PICKUP_AT_COORDS, - COMMAND_GET_FIRST_PICKUP_COORDS, - COMMAND_GET_NEXT_PICKUP_COORDS, + todo__comm_723, COMMAND_REMOVE_ALL_CHAR_WEAPONS, - COMMAND_HAS_PLAYER_GOT_WEAPON, COMMAND_HAS_CHAR_GOT_WEAPON, - COMMAND_IS_PLAYER_FACING_CHAR, COMMAND_SET_TANK_DETONATE_CARS, COMMAND_GET_POSITION_OF_ANALOGUE_STICKS, COMMAND_IS_CAR_ON_FIRE, COMMAND_IS_CAR_TYRE_BURST, - COMMAND_SET_CAR_DRIVE_STRAIGHT_AHEAD, - COMMAND_SET_CAR_WAIT, - COMMAND_IS_PLAYER_STANDING_ON_A_VEHICLE, - COMMAND_IS_PLAYER_FOOT_DOWN, - COMMAND_IS_CHAR_FOOT_DOWN, - COMMAND_INITIALISE_OBJECT_PATH, - COMMAND_START_OBJECT_ON_PATH, - COMMAND_SET_OBJECT_PATH_SPEED, - COMMAND_SET_OBJECT_PATH_POSITION, - COMMAND_GET_OBJECT_DISTANCE_ALONG_PATH, - COMMAND_CLEAR_OBJECT_PATH, COMMAND_HELI_GOTO_COORDS, - COMMAND_IS_INT_VAR_EQUAL_TO_CONSTANT, - COMMAND_IS_INT_LVAR_EQUAL_TO_CONSTANT, + DUPLICATE_COMMAND_731, //ProcessCommand_27_28_29_30_731_ COMMAND_GET_DEAD_CHAR_PICKUP_COORDS, COMMAND_CREATE_PROTECTION_PICKUP, - COMMAND_IS_CHAR_IN_ANY_BOAT, - COMMAND_IS_PLAYER_IN_ANY_BOAT, - COMMAND_IS_CHAR_IN_ANY_HELI, - COMMAND_IS_PLAYER_IN_ANY_HELI, - COMMAND_IS_CHAR_IN_ANY_PLANE, - COMMAND_IS_PLAYER_IN_ANY_PLANE, + todo__comm_734, + todo__comm_735, + todo__comm_736, COMMAND_IS_CHAR_IN_WATER, - COMMAND_SET_VAR_INT_TO_CONSTANT, - COMMAND_SET_LVAR_INT_TO_CONSTANT, - COMMAND_IS_INT_VAR_GREATER_THAN_CONSTANT, - COMMAND_IS_INT_LVAR_GREATER_THAN_CONSTANT, - COMMAND_IS_CONSTANT_GREATER_THAN_INT_VAR, - COMMAND_IS_CONSTANT_GREATER_THAN_INT_LVAR, - COMMAND_IS_INT_VAR_GREATER_OR_EQUAL_TO_CONSTANT, - COMMAND_IS_INT_LVAR_GREATER_OR_EQUAL_TO_CONSTANT, - COMMAND_IS_CONSTANT_GREATER_OR_EQUAL_TO_INT_VAR, - COMMAND_IS_CONSTANT_GREATER_OR_EQUAL_TO_INT_LVAR, + DUPLICATE_COMMAND_738, //ProcessCommand_4_5_53_54_738_ + DUPLICATE_COMMAND_739, //ProcessCommand_15_16_17_739_740_ + DUPLICATE_COMMAND_740, //ProcessCommand_15_16_17_739_740_ + DUPLICATE_COMMAND_741, //ProcessCommand_21_22_23_741_742_ + DUPLICATE_COMMAND_742, //ProcessCommand_21_22_23_741_742_ COMMAND_GET_CHAR_WEAPON_IN_SLOT, COMMAND_GET_CLOSEST_STRAIGHT_ROAD, COMMAND_SET_CAR_FORWARD_SPEED, COMMAND_SET_AREA_VISIBLE, - COMMAND_SET_CUTSCENE_ANIM_TO_LOOP, COMMAND_MARK_CAR_AS_CONVOY_CAR, COMMAND_RESET_HAVOC_CAUSED_BY_PLAYER, COMMAND_GET_HAVOC_CAUSED_BY_PLAYER, - COMMAND_CREATE_SCRIPT_ROADBLOCK, - COMMAND_CLEAR_ALL_SCRIPT_ROADBLOCKS, - COMMAND_SET_CHAR_OBJ_WALK_TO_CHAR, - COMMAND_IS_PICKUP_IN_ZONE, COMMAND_GET_OFFSET_FROM_CHAR_IN_WORLD_COORDS, COMMAND_HAS_CHAR_BEEN_PHOTOGRAPHED, - COMMAND_SET_CHAR_OBJ_AIM_GUN_AT_CHAR, COMMAND_SWITCH_SECURITY_CAMERA, - COMMAND_IS_CHAR_IN_FLYING_VEHICLE, - COMMAND_IS_PLAYER_IN_FLYING_VEHICLE, - COMMAND_HAS_SONY_CD_BEEN_READ, - COMMAND_GET_NUMBER_OF_SONY_CDS_READ, - COMMAND_ADD_SHORT_RANGE_BLIP_FOR_COORD_OLD, - COMMAND_ADD_SHORT_RANGE_BLIP_FOR_COORD, - COMMAND_ADD_SHORT_RANGE_SPRITE_BLIP_FOR_COORD, - COMMAND_ADD_MONEY_SPENT_ON_CLOTHES, + todo__comm_753, COMMAND_SET_HELI_ORIENTATION, COMMAND_CLEAR_HELI_ORIENTATION, COMMAND_PLANE_GOTO_COORDS, COMMAND_GET_NTH_CLOSEST_CAR_NODE, COMMAND_GET_NTH_CLOSEST_CHAR_NODE, - COMMAND_DRAW_WEAPONSHOP_CORONA, COMMAND_SET_ENABLE_RC_DETONATE_ON_CONTACT, COMMAND_FREEZE_CHAR_POSITION, COMMAND_SET_CHAR_DROWNS_IN_WATER, @@ -1256,160 +769,88 @@ enum { COMMAND_REMOVE_RC_BUGGY, COMMAND_HAS_PHOTOGRAPH_BEEN_TAKEN, COMMAND_GET_CHAR_ARMOUR, - COMMAND_SET_CHAR_ARMOUR, COMMAND_SET_HELI_STABILISER, COMMAND_SET_CAR_STRAIGHT_LINE_DISTANCE, COMMAND_POP_CAR_BOOT, - COMMAND_SHUT_PLAYER_UP, COMMAND_SET_PLAYER_MOOD, COMMAND_REQUEST_COLLISION, COMMAND_LOCATE_OBJECT_2D, COMMAND_LOCATE_OBJECT_3D, COMMAND_IS_OBJECT_IN_WATER, - COMMAND_SET_CHAR_OBJ_STEAL_ANY_CAR_EVEN_MISSION_CAR, COMMAND_IS_OBJECT_IN_AREA_2D, COMMAND_IS_OBJECT_IN_AREA_3D, COMMAND_SET_CHAR_CROUCH, - COMMAND_SET_ZONE_CIVILIAN_CAR_INFO, + todo__comm_778, COMMAND_REQUEST_ANIMATION, COMMAND_HAS_ANIMATION_LOADED, COMMAND_REMOVE_ANIMATION, - COMMAND_IS_CHAR_WAITING_FOR_WORLD_COLLISION, - COMMAND_IS_CAR_WAITING_FOR_WORLD_COLLISION, - COMMAND_IS_OBJECT_WAITING_FOR_WORLD_COLLISION, COMMAND_SET_CHAR_SHUFFLE_INTO_DRIVERS_SEAT, COMMAND_ATTACH_CHAR_TO_OBJECT, COMMAND_SET_CHAR_AS_PLAYER_FRIEND, - COMMAND_DISPLAY_NTH_ONSCREEN_COUNTER, COMMAND_DISPLAY_NTH_ONSCREEN_COUNTER_WITH_STRING, COMMAND_ADD_SET_PIECE, COMMAND_SET_EXTRA_COLOURS, COMMAND_CLEAR_EXTRA_COLOURS, - COMMAND_CLOSE_CAR_BOOT, COMMAND_GET_WHEELIE_STATS, - COMMAND_DISARM_CHAR, COMMAND_BURST_CAR_TYRE, COMMAND_IS_CHAR_OBJ_NO_OBJ, COMMAND_IS_PLAYER_WEARING, COMMAND_SET_PLAYER_CAN_DO_DRIVE_BY, - COMMAND_SET_CHAR_OBJ_SPRINT_TO_COORD, COMMAND_CREATE_SWAT_ROPE, - COMMAND_SET_FIRST_PERSON_CONTROL_CAMERA, - COMMAND_GET_NEAREST_TYRE_TO_POINT, COMMAND_SET_CAR_MODEL_COMPONENTS, - COMMAND_SWITCH_LIFT_CAMERA, COMMAND_CLOSE_ALL_CAR_DOORS, COMMAND_GET_DISTANCE_BETWEEN_COORDS_2D, COMMAND_GET_DISTANCE_BETWEEN_COORDS_3D, COMMAND_POP_CAR_BOOT_USING_PHYSICS, - COMMAND_SET_FIRST_PERSON_WEAPON_CAMERA, COMMAND_IS_CHAR_LEAVING_VEHICLE_TO_DIE, COMMAND_SORT_OUT_OBJECT_COLLISION_WITH_CAR, - COMMAND_GET_MAX_WANTED_LEVEL, COMMAND_IS_CHAR_WANDER_PATH_CLEAR, - COMMAND_PRINT_HELP_WITH_NUMBER, COMMAND_PRINT_HELP_FOREVER, - COMMAND_PRINT_HELP_FOREVER_WITH_NUMBER, COMMAND_SET_CHAR_CAN_BE_DAMAGED_BY_MEMBERS_OF_GANG, - COMMAND_LOAD_AND_LAUNCH_MISSION_EXCLUSIVE, - COMMAND_IS_MISSION_AUDIO_PLAYING, - COMMAND_CREATE_LOCKED_PROPERTY_PICKUP, - COMMAND_CREATE_FORSALE_PROPERTY_PICKUP, COMMAND_FREEZE_CAR_POSITION, COMMAND_HAS_CHAR_BEEN_DAMAGED_BY_CHAR, COMMAND_HAS_CHAR_BEEN_DAMAGED_BY_CAR, COMMAND_HAS_CAR_BEEN_DAMAGED_BY_CHAR, COMMAND_HAS_CAR_BEEN_DAMAGED_BY_CAR, COMMAND_GET_RADIO_CHANNEL, - COMMAND_DISPLAY_TEXT_WITH_3_NUMBERS, - COMMAND_IS_CAR_DROWNING_IN_WATER, COMMAND_IS_CHAR_DROWNING_IN_WATER, - COMMAND_DISABLE_CUTSCENE_SHADOWS, COMMAND_HAS_GLASS_BEEN_SHATTERED_NEARBY, - COMMAND_ATTACH_CUTSCENE_OBJECT_TO_BONE, - COMMAND_ATTACH_CUTSCENE_OBJECT_TO_COMPONENT, COMMAND_SET_CHAR_STAY_IN_CAR_WHEN_JACKED, - COMMAND_IS_MISSION_AUDIO_LOADING, COMMAND_ADD_MONEY_SPENT_ON_WEAPONS, - COMMAND_ADD_MONEY_SPENT_ON_PROPERTY, - COMMAND_ADD_MONEY_SPENT_ON_AUTO_PAINTING, COMMAND_SET_CHAR_ANSWERING_MOBILE, COMMAND_SET_PLAYER_DRUNKENNESS, - COMMAND_GET_PLAYER_DRUNKENNESS, - COMMAND_SET_PLAYER_DRUG_LEVEL, - COMMAND_GET_PLAYER_DRUG_LEVEL, - COMMAND_ADD_LOAN_SHARK_VISITS, - COMMAND_ADD_STORES_KNOCKED_OFF, - COMMAND_ADD_MOVIE_STUNTS, - COMMAND_ADD_NUMBER_OF_ASSASSINATIONS, - COMMAND_ADD_PIZZAS_DELIVERED, - COMMAND_ADD_GARBAGE_PICKUPS, - COMMAND_ADD_ICE_CREAMS_SOLD, - COMMAND_SET_TOP_SHOOTING_RANGE_SCORE, - COMMAND_ADD_SHOOTING_RANGE_RANK, - COMMAND_ADD_MONEY_SPENT_ON_GAMBLING, - COMMAND_ADD_MONEY_WON_ON_GAMBLING, - COMMAND_SET_LARGEST_GAMBLING_WIN, COMMAND_SET_CHAR_IN_PLAYERS_GROUP_CAN_FIGHT, COMMAND_CLEAR_CHAR_WAIT_STATE, COMMAND_GET_RANDOM_CAR_OF_TYPE_IN_AREA_NO_SAVE, COMMAND_SET_CAN_BURST_CAR_TYRES, - COMMAND_SET_PLAYER_AUTO_AIM, COMMAND_FIRE_HUNTER_GUN, - COMMAND_SET_PROPERTY_AS_OWNED, - COMMAND_ADD_BLOOD_RING_KILLS, - COMMAND_SET_LONGEST_TIME_IN_BLOOD_RING, - COMMAND_REMOVE_EVERYTHING_FOR_HUGE_CUTSCENE, - COMMAND_IS_PLAYER_TOUCHING_VEHICLE, - COMMAND_IS_CHAR_TOUCHING_VEHICLE, + todo__comm_822, COMMAND_CHECK_FOR_PED_MODEL_AROUND_PLAYER, COMMAND_CLEAR_CHAR_FOLLOW_PATH, COMMAND_SET_CHAR_CAN_BE_SHOT_IN_VEHICLE, - COMMAND_ATTACH_CUTSCENE_OBJECT_TO_VEHICLE, COMMAND_LOAD_MISSION_TEXT, - COMMAND_SET_TONIGHTS_EVENT, COMMAND_CLEAR_CHAR_LAST_DAMAGE_ENTITY, COMMAND_CLEAR_CAR_LAST_DAMAGE_ENTITY, COMMAND_FREEZE_OBJECT_POSITION, - COMMAND_SET_PLAYER_HAS_MET_DEBBIE_HARRY, - COMMAND_SET_RIOT_INTENSITY, - COMMAND_IS_CAR_IN_ANGLED_AREA_2D, - COMMAND_IS_CAR_IN_ANGLED_AREA_3D, - COMMAND_REMOVE_WEAPON_FROM_CHAR, COMMAND_SET_UP_TAXI_SHORTCUT, COMMAND_CLEAR_TAXI_SHORTCUT, - COMMAND_SET_CHAR_OBJ_GOTO_CAR_ON_FOOT, - COMMAND_GET_CLOSEST_WATER_NODE, - COMMAND_ADD_PORN_LEAFLET_TO_RUBBISH, - COMMAND_CREATE_CLOTHES_PICKUP, - COMMAND_CHANGE_BLIP_THRESHOLD, - COMMAND_MAKE_PLAYER_FIRE_PROOF, COMMAND_INCREASE_PLAYER_MAX_HEALTH, COMMAND_INCREASE_PLAYER_MAX_ARMOUR, COMMAND_CREATE_RANDOM_CHAR_AS_DRIVER, COMMAND_CREATE_RANDOM_CHAR_AS_PASSENGER, COMMAND_SET_CHAR_IGNORE_THREATS_BEHIND_OBJECTS, - COMMAND_ENSURE_PLAYER_HAS_DRIVE_BY_WEAPON, COMMAND_MAKE_HELI_COME_CRASHING_DOWN, - COMMAND_ADD_EXPLOSION_NO_SOUND, COMMAND_SET_OBJECT_AREA_VISIBLE, - COMMAND_WAS_VEHICLE_EVER_POLICE, COMMAND_SET_CHAR_NEVER_TARGETTED, - COMMAND_LOAD_UNCOMPRESSED_ANIM, - COMMAND_WAS_CUTSCENE_SKIPPED, COMMAND_SET_CHAR_CROUCH_WHEN_THREATENED, COMMAND_IS_CHAR_IN_ANY_POLICE_VEHICLE, COMMAND_DOES_CHAR_EXIST, COMMAND_DOES_VEHICLE_EXIST, - COMMAND_ADD_SHORT_RANGE_BLIP_FOR_CONTACT_POINT, COMMAND_ADD_SHORT_RANGE_SPRITE_BLIP_FOR_CONTACT_POINT, COMMAND_IS_CHAR_STUCK, COMMAND_SET_ALL_TAXIS_HAVE_NITRO, COMMAND_SET_CHAR_STOP_SHOOT_DONT_SEEK_ENTITY, COMMAND_FREEZE_CAR_POSITION_AND_DONT_LOAD_COLLISION, - COMMAND_FREEZE_CHAR_POSITION_AND_DONT_LOAD_COLLISION, - COMMAND_FREEZE_OBJECT_POSITION_AND_DONT_LOAD_COLLISION, - COMMAND_SET_FADE_AND_JUMPCUT_AFTER_RC_EXPLOSION, COMMAND_REGISTER_VIGILANTE_LEVEL, COMMAND_CLEAR_ALL_CHAR_ANIMS, COMMAND_SET_MAXIMUM_NUMBER_OF_CARS_IN_GARAGE, @@ -1420,21 +861,17 @@ enum { COMMAND_GET_BUS_FARES_COLLECTED_BY_PLAYER, COMMAND_SET_CHAR_OBJ_BUY_ICE_CREAM, COMMAND_DISPLAY_RADAR, - COMMAND_REGISTER_BEST_POSITION, COMMAND_IS_PLAYER_IN_INFO_ZONE, COMMAND_CLEAR_CHAR_ICE_CREAM_PURCHASE, - COMMAND_IS_IN_CAR_FIRE_BUTTON_PRESSED, COMMAND_HAS_CHAR_ATTEMPTED_ATTRACTOR, COMMAND_SET_LOAD_COLLISION_FOR_CAR_FLAG, COMMAND_SET_LOAD_COLLISION_FOR_CHAR_FLAG, - COMMAND_SET_LOAD_COLLISION_FOR_OBJECT_FLAG, COMMAND_ADD_BIG_GUN_FLASH, COMMAND_HAS_CHAR_BOUGHT_ICE_CREAM, COMMAND_GET_PROGRESS_PERCENTAGE, COMMAND_SET_SHORTCUT_PICKUP_POINT, COMMAND_SET_SHORTCUT_DROPOFF_POINT_FOR_MISSION, COMMAND_GET_RANDOM_ICE_CREAM_CUSTOMER_IN_AREA, - COMMAND_GET_RANDOM_ICE_CREAM_CUSTOMER_IN_ZONE, COMMAND_UNLOCK_ALL_CAR_DOORS_IN_AREA, COMMAND_SET_GANG_ATTACK_PLAYER_WITH_COPS, COMMAND_SET_CHAR_FRIGHTENED_IN_JACKED_CAR, @@ -1447,10 +884,6 @@ enum { COMMAND_IS_AUSTRALIAN_GAME, COMMAND_DISARM_CAR_BOMB, COMMAND_IS_JAPANESE_GAME, - COMMAND_1442, - COMMAND_1443, - COMMAND_GET_DISTANCE_BETWEEN_2D_POINTS, - COMMAND_GET_DISTANCE_BETWEEN_3D_POINTS, COMMAND_DOT_PRODUCT_2D, COMMAND_DOT_PRODUCT_3D, COMMAND_DEBUG_PRINT_WITH_1_FLOAT, @@ -1459,29 +892,29 @@ enum { COMMAND_GET_PAD_BUTTON_STATE, COMMAND_SET_NAVIGATION_ARROW, COMMAND_CLEAR_NAVIGATION_ARROW, + COMMAND_CALLNOT, // lcs swap call callnot, lcs call 0x8, callnot 0xC, vcs 0x8 is 891 so is call COMMAND_CALL, - COMMAND_CALLNOT, COMMAND_IS_CAR_AUTOMOBILE, COMMAND_IS_CAR_BIKE, COMMAND_IS_CAR_PLANE, COMMAND_IS_CAR_HELI, - COMMAND_1460, - COMMAND_1461, - COMMAND_1462, - COMMAND_1463, - COMMAND_1464, - COMMAND_1465, - COMMAND_1466, - COMMAND_1467, - COMMAND_1468, - COMMAND_1469, - COMMAND_1470, - COMMAND_1471, - COMMAND_1472, - COMMAND_1473, - COMMAND_1474, - COMMAND_1475, - COMMAND_1476, + COMMAND_NULL_896, + COMMAND_NULL_897, + COMMAND_NULL_898, + COMMAND_NULL_899, + COMMAND_NULL_900, + COMMAND_NULL_901, + COMMAND_NULL_902, + COMMAND_NULL_903, + COMMAND_NULL_904, + COMMAND_NULL_905, + COMMAND_NULL_906, + COMMAND_NULL_907, + COMMAND_NULL_908, + COMMAND_NULL_909, + COMMAND_NULL_910, + COMMAND_NULL_911, + LCSWRONG_COMMAND_1476, COMMAND_RETURN_IF_TRUE, COMMAND_RETURN_TRUE_IF_TRUE, COMMAND_SET_CHAR_ONLY_ALLOWED_TO_SIT_BEHIND, @@ -1493,61 +926,27 @@ enum { COMMAND_SET_CHAR_ONLY_ALLOWED_TO_SIT_IN_FRONT, COMMAND_SET_CAR_TILTED_BY_CHAR, COMMAND_GET_WEAPON_TYPE_FOR_PICKUP_IN_AREA, - COMMAND_IS_PLAYER_USING_FIRST_PERSON_WEAPON_CAMERA, - COMMAND_1489, - COMMAND_1490, - COMMAND_1491, + todo__comm_924, + LCSWRONG_COMMAND_1489, + LCSWRONG_COMMAND_1490, + todo__comm_927, COMMAND_SET_DEBUG_MENU_ACTIVE, COMMAND_SET_DRAW_HUD, COMMAND_GET_RANDOM_CHAR_IN_AREA_NO_CHECKS, COMMAND_GET_RANDOM_CAR_IN_AREA_NO_CHECKS_NO_SAVE, COMMAND_STORE_CAR_COLLIDED_WITH_NO_SAVE, - COMMAND_DISABLE_FERRY_PATH, - COMMAND_ENABLE_FERRY_PATH, - COMMAND_GET_CLOSEST_DOCKED_FERRY, - COMMAND_OPEN_FERRY_DOOR, - COMMAND_CLOSE_FERRY_DOOR, - COMMAND_IS_FERRY_DOOR_OPEN, - COMMAND_IS_FERRY_DOOR_CLOSED, - COMMAND_SKIP_FERRY_TO_NEXT_DOCK, COMMAND_SET_CHAR_DROPS_WEAPONS_ON_DEATH, COMMAND_IS_CHAR_CROUCHING, - COMMAND_GET_FERRY_BOARDING_SPACE, - COMMAND_GET_FERRY_HEADING, - COMMAND_SET_FERRIES_DISABLED, - COMMAND_COMPLETE_FERRY_DOOR_MOVEMENT, COMMAND_OVERRIDE_CAR_REMOTE_CONTROL, COMMAND_CANCEL_REMOTE_MODE, - COMMAND_REGISTER_CAR_SOLD, - COMMAND_ADD_MONEY_MADE_WITH_CAR_SALES, - COMMAND_SET_BRIDGE_STATE, COMMAND_SET_OBJECT_TURN_SPEED, COMMAND_SET_OBJECT_MASS, COMMAND_HAS_CUTSCENE_LOADED, COMMAND_SET_UNIQUE_JUMPS_FOUND, - COMMAND_SET_HIDDEN_PACKAGES_COLLECTED, - COMMAND_REGISTER_BIKE_SOLD, - COMMAND_ADD_MONEY_MADE_WITH_BIKE_SALES, - COMMAND_REGISTER_PACKAGE_SMUGGLED, - COMMAND_REGISTER_SMUGGLER_WASTED, - COMMAND_REGISTER_FASTEST_SMUGGLING_TIME, + todo__comm_941, COMMAND_SET_CHAR_DIVE_FROM_CAR, COMMAND_WRECK_CAR, - COMMAND_ADD_MONEY_MADE_IN_COACH, - COMMAND_ADD_MONEY_MADE_COLLECTING_TRASH, - COMMAND_REGISTER_HITMAN_KILLED, - COMMAND_REGISTER_GUARDIAN_ANGEL_MISSION_PASSED, - COMMAND_REGISTER_HIGHEST_GUARDIAN_ANGEL_JUSTICE_DISHED, - COMMAND_REGISTER_BEST_BANDIT_LAP_TIME, - COMMAND_REGISTER_BEST_BANDIT_POSITION, - COMMAND_REGISTER_MOST_TIME_LEFT_TRAIN_RACE, - COMMAND_REGISTER_HIGHEST_TRAIN_CASH_EARNED, - COMMAND_REGISTER_FASTEST_HELI_RACE_TIME, - COMMAND_REGISTER_BEST_HELI_RACE_POSITION, COMMAND_REGISTER_OUTFIT_CHANGE, - COMMAND_REGISTER_STREET_RACE_FASTEST_TIME, - COMMAND_REGISTER_STREET_RACE_FASTEST_LAP, - COMMAND_REGISTER_STREET_RACE_BEST_POSITION, COMMAND_HAS_OBJECT_BEEN_DAMAGED_BY_WEAPON, COMMAND_CLEAR_OBJECT_LAST_WEAPON_DAMAGE, COMMAND_SET_CAR_TURN_SPEED, @@ -1564,14 +963,11 @@ enum { COMMAND_SET_OBJECT_RENDERED_DAMAGED, COMMAND_GET_RANDOM_CAR_IN_AREA_NO_SAVE, COMMAND_IS_PLAYER_MADE_SAFE, - COMMAND_PRINT_IF_FREE, COMMAND_IS_E3_BUILD, - COMMAND_DECLARE_FORT_STAUNTON_DESTROYED_FLAG, COMMAND_CLEAR_BIG_MESSAGES, COMMAND_CLEAR_AREA_OF_OBJECTS, COMMAND_LOAD_NON_STANDARD_PED_ANIM, COMMAND_UNLOAD_NON_STANDARD_PED_ANIM, - COMMAND_1566, COMMAND_BUILD_WORLD_GEOMETRY, COMMAND_STORE_BUILDING_SWAP, COMMAND_IS_MULTIPLAYER_ACTIVE, @@ -1585,10 +981,8 @@ enum { COMMAND_SET_ONSCREEN_TIMER_BACKGROUND_COLOUR, COMMAND_REMOVE_CAR_BOOT, COMMAND_ADD_POINT_3D_MARKER, - COMMAND_GET_VECTOR_FROM_MULTIPLAYER, COMMAND_PRINT_HELP_ALWAYS, COMMAND_PRINT_HELP_FOREVER_ALWAYS, - COMMAND_SWITCH_FERRY_COLLISION, COMMAND_SET_CHAR_MAX_HEALTH, COMMAND_SET_CHAR_SHOOT_TIMER, COMMAND_SET_CHAR_ATTACK_TIMER, @@ -1600,29 +994,13 @@ enum { COMMAND_SWAP_TO_STREAMED_SECTOR, COMMAND_SET_CHAR_ATTACKS_PLAYER_WITH_COPS, COMMAND_REGISTER_FACE_PLANT_DISTANCE, - COMMAND_REGISTER_MAX_SECONDS_ON_CARNAGE_LEFT, - COMMAND_REGISTER_MAX_KILLS_ON_RC_TRIAD, - COMMAND_REGISTER_HIGHEST_LEVEL_SLASH_TV, - COMMAND_ADD_MONEY_MADE_WITH_SLASH_TV, - COMMAND_ADD_TOTAL_KILLS_ON_SLASH_TV, - COMMAND_ADD_NOODLES_DELIVERED, - COMMAND_REGISTER_SCRAPYARD_CHALLENGE_SCORE, - COMMAND_REGISTER_9MM_MAYHEM_SCORE, - COMMAND_REGISTER_SCOOTER_SHOOTER_SCORE, - COMMAND_ADD_MONEY_MADE_FROM_TOURIST, - COMMAND_ADD_TOURISTS_TAKEN_TO_SPOTS, COMMAND_ADD_EXPORTED_CARS, COMMAND_SET_TOTAL_EXPORT_CARS, - COMMAND_REGISTER_DIRT_BIKE_FASTEST_LAP, - COMMAND_REGISTER_DIRT_BIKE_FASTEST_TIME, - COMMAND_REGISTER_DIRT_BIKE_AIR_TIME, COMMAND_ADD_ARROW_3D_MARKER, - COMMAND_PRINT_NOW_OVERRIDE_FADE, - COMMAND_GET_PICKUP_VALUE, - COMMAND_SET_PICKUP_VALUE, + todo__comm_995, + todo__comm_996, COMMAND_IS_DEVELOPER, COMMAND_SET_DEVELOPER_FLAG, - COMMAND_REGISTER_WICHITA_WIPEOUT_SCORE, COMMAND_ATTACH_OBJECT_TO_CAR, COMMAND_DETACH_OBJECT_FROM_CAR, COMMAND_SET_PAD_STICKS_MULTIPLIER, @@ -1632,7 +1010,7 @@ enum { COMMAND_PRINT_WITH_NUMBER_NOW_NO_BRIEF, COMMAND_GET_ANGLE_BETWEEN_POINTS, COMMAND_OVERRIDE_CHAR_MOVE_ANIM, - COMMAND_1627, + LCSWRONG_COMMAND_1627, COMMAND_ENABLE_EMERGENCY_VEHICLES, COMMAND_ADD_UNLOCKED_COSTUME, COMMAND_CLEAR_MULTIPLAYER_SPLASH_SCREEN, @@ -1644,24 +1022,371 @@ enum { COMMAND_DISPLAY_ONSCREEN_TIMER_WITH_NUMBER_AND_STRING, COMMAND_SET_PLAYER_CURRENT_WEAPON_AMMO_IN_CLIP, COMMAND_SET_CHAR_WAIT_STATE_REPEAT, - COMMAND_REGISTER_BEST_TIME_GOGO_FAGGIO, COMMAND_LOCK_GARAGE, COMMAND_IS_FINAL_GAME, COMMAND_SET_ALLOWED_COLLISION, - COMMAND_REGISTER_GUARDIAN_ANGEL_LEVEL, COMMAND_DISPLAY_ONSCREEN_TIMER_WITH_NUMBER_AND_2_STRINGS, COMMAND_GET_PLAYER_STORED_WEAPON, COMMAND_DISABLE_PAUSE_MENU, COMMAND_IS_CHANNEL_PLAYING, COMMAND_SET_CLOCK_EVENT_WARNING, COMMAND_SET_EXTRA_COLOUR_LIGHT_DIRECTION, - COMMAND_SET_CHAR_CAN_BE_TARGETTED_BY_LEADER, + todo__comm_1029, COMMAND_PRINT_HELP_NO_BRIEF, COMMAND_PRINT_HELP_FOREVER_NO_BRIEF, COMMAND_PRINT_HELP_ALWAYS_NO_BRIEF, COMMAND_PRINT_HELP_FOREVER_ALWAYS_NO_BRIEF, COMMAND_SET_CAR_IS_REWARD, - COMMAND_FREEZE_ALL_PLAYER_FOLLOWERS, + todo__comm_1035, + todo__comm_1036, + todo__comm_1037, + todo__comm_1038, + todo__comm_1039, + todo__comm_1040, + todo__comm_1041, + todo__comm_1042, + todo__comm_1043, + todo__comm_1044, + todo__comm_1045, + todo__comm_1046, + todo__comm_1047, + todo__comm_1048, + todo__comm_1049, + todo__comm_1050, + todo__comm_1051, + todo__comm_1052, + todo__comm_1053, + todo__comm_1054, + todo__comm_1055, + todo__comm_1056, + todo__comm_1057, + todo__comm_1058, + todo__comm_1059, + todo__comm_1060, + todo__comm_1061, + todo__comm_1062, + todo__comm_1063, + todo__comm_1064, + todo__comm_1065, + todo__comm_1066, + todo__comm_1067, + todo__comm_1068, + todo__comm_1069, + todo__comm_1070, + todo__comm_1071, + todo__comm_1072, + todo__comm_1073, + todo__comm_1074, + todo__comm_1075, + todo__comm_1076, + todo__comm_1077, + todo__comm_1078, + todo__comm_1079, + todo__comm_1080, + todo__comm_1081, + todo__comm_1082, + todo__comm_1083, + todo__comm_1084, + todo__comm_1085, + todo__comm_1086, + todo__comm_1087, + todo__comm_1088, + todo__comm_1089, + todo__comm_1090, + todo__comm_1091, + todo__comm_1092, + todo__comm_1093, + todo__comm_1094, + todo__comm_1095, + todo__comm_1096, + todo__comm_1097, + todo__comm_1098, + todo__comm_1099, + todo__comm_1100, + todo__comm_1101, + todo__comm_1102, + todo__comm_1103, + todo__comm_1104, + todo__comm_1105, + todo__comm_1106, + todo__comm_1107, + todo__comm_1108, + todo__comm_1109, + todo__comm_1110, + todo__comm_1111, + todo__comm_1112, + todo__comm_1113, + todo__comm_1114, + todo__comm_1115, + todo__comm_1116, + todo__comm_1117, + todo__comm_1118, + todo__comm_1119, + todo__comm_1120, + todo__comm_1121, + todo__comm_1122, + todo__comm_1123, + todo__comm_1124, + todo__comm_1125, + todo__comm_1126, + todo__comm_1127, + todo__comm_1128, + todo__comm_1129, + todo__comm_1130, + todo__comm_1131, + todo__comm_1132, + todo__comm_1133, + todo__comm_1134, + todo__comm_1135, + todo__comm_1136, + todo__comm_1137, + todo__comm_1138, + todo__comm_1139, + todo__comm_1140, + todo__comm_1141, + todo__comm_1142, + todo__comm_1143, + todo__comm_1144, + todo__comm_1145, + todo__comm_1146, + todo__comm_1147, + todo__comm_1148, + todo__comm_1149, + todo__comm_1150, + todo__comm_1151, + todo__comm_1152, + todo__comm_1153, + todo__comm_1154, + todo__comm_1155, + todo__comm_1156, + todo__comm_1157, + todo__comm_1158, + todo__comm_1159, + todo__comm_1160, + todo__comm_1161, + todo__comm_1162, + todo__comm_1163, + todo__comm_1164, + todo__comm_1165, + todo__comm_1166, + todo__comm_1167, + todo__comm_1168, + todo__comm_1169, + todo__comm_1170, + todo__comm_1171, + todo__comm_1172, + todo__comm_1173, + todo__comm_1174, + todo__comm_1175, + todo__comm_1176, + todo__comm_1177, + todo__comm_1178, + todo__comm_1179, + todo__comm_1180, + todo__comm_1181, + todo__comm_1182, + todo__comm_1183, + todo__comm_1184, + todo__comm_1185, + todo__comm_1186, + todo__comm_1187, + todo__comm_1188, + todo__comm_1189, + todo__comm_1190, + todo__comm_1191, + todo__comm_1192, + todo__comm_1193, + todo__comm_1194, + todo__comm_1195, + todo__comm_1196, + todo__comm_1197, + todo__comm_1198, + todo__comm_1199, + todo__comm_1200, + todo__comm_1201, + todo__comm_1202, + todo__comm_1203, + todo__comm_1204, + todo__comm_1205, + todo__comm_1206, + todo__comm_1207, + todo__comm_1208, + todo__comm_1209, + todo__comm_1210, + todo__comm_1211, + todo__comm_1212, + todo__comm_1213, + todo__comm_1214, + todo__comm_1215, + todo__comm_1216, + todo__comm_1217, + todo__comm_1218, + todo__comm_1219, + todo__comm_1220, + todo__comm_1221, + todo__comm_1222, + todo__comm_1223, + todo__comm_1224, + todo__comm_1225, + todo__comm_1226, + todo__comm_1227, + todo__comm_1228, + todo__comm_1229, + todo__comm_1230, + todo__comm_1231, + todo__comm_1232, + todo__comm_1233, + todo__comm_1234, + todo__comm_1235, + todo__comm_1236, + todo__comm_1237, + todo__comm_1238, + todo__comm_1239, + todo__comm_1240, + todo__comm_1241, + todo__comm_1242, + todo__comm_1243, + todo__comm_1244, + todo__comm_1245, + todo__comm_1246, + todo__comm_1247, + todo__comm_1248, + todo__comm_1249, + todo__comm_1250, + todo__comm_1251, + todo__comm_1252, + todo__comm_1253, + todo__comm_1254, + todo__comm_1255, + todo__comm_1256, + todo__comm_1257, + todo__comm_1258, + todo__comm_1259, + todo__comm_1260, + todo__comm_1261, + todo__comm_1262, + todo__comm_1263, + todo__comm_1264, + todo__comm_1265, + todo__comm_1266, + todo__comm_1267, + todo__comm_1268, + todo__comm_1269, + todo__comm_1270, + todo__comm_1271, + todo__comm_1272, + todo__comm_1273, + todo__comm_1274, + todo__comm_1275, + todo__comm_1276, + todo__comm_1277, + todo__comm_1278, + todo__comm_1279, + todo__comm_1280, + todo__comm_1281, + todo__comm_1282, + todo__comm_1283, + todo__comm_1284, + todo__comm_1285, + todo__comm_1286, + todo__comm_1287, + todo__comm_1288, + todo__comm_1289, + todo__comm_1290, + todo__comm_1291, + todo__comm_1292, + todo__comm_1293, + todo__comm_1294, + todo__comm_1295, + todo__comm_1296, + todo__comm_1297, + todo__comm_1298, + todo__comm_1299, + todo__comm_1300, + todo__comm_1301, + todo__comm_1302, + todo__comm_1303, + todo__comm_1304, + todo__comm_1305, + todo__comm_1306, + todo__comm_1307, + todo__comm_1308, + todo__comm_1309, + todo__comm_1310, + todo__comm_1311, + todo__comm_1312, + todo__comm_1313, + todo__comm_1314, + todo__comm_1315, + todo__comm_1316, + todo__comm_1317, + todo__comm_1318, + todo__comm_1319, + todo__comm_1320, + todo__comm_1321, + todo__comm_1322, + todo__comm_1323, + todo__comm_1324, + todo__comm_1325, + todo__comm_1326, + todo__comm_1327, + todo__comm_1328, + todo__comm_1329, + todo__comm_1330, + todo__comm_1331, + todo__comm_1332, + todo__comm_1333, + todo__comm_1334, + todo__comm_1335, + todo__comm_1336, + todo__comm_1337, + todo__comm_1338, + todo__comm_1339, + todo__comm_1340, + todo__comm_1341, + todo__comm_1342, + todo__comm_1343, + todo__comm_1344, + todo__comm_1345, + todo__comm_1346, + todo__comm_1347, + todo__comm_1348, + todo__comm_1349, + todo__comm_1350, + todo__comm_1351, + todo__comm_1352, + todo__comm_1353, + todo__comm_1354, + todo__comm_1355, + todo__comm_1356, + todo__comm_1357, + todo__comm_1358, + todo__comm_1359, + todo__comm_1360, + todo__comm_1361, + todo__comm_1362, + todo__comm_1363, + todo__comm_1364, + todo__comm_1365, + todo__comm_1366, + todo__comm_1367, + todo__comm_1368, + todo__comm_1369, + todo__comm_1370, + todo__comm_1371, + todo__comm_1372, + todo__comm_1373, + todo__comm_1374, + todo__comm_1375, + todo__comm_1376, + todo__comm_1377, + todo__comm_1378, + todo__comm_1379, + todo__comm_1380, + + // old lcs ops //--------------------------------------------------------------------------- + + #ifdef USE_ADVANCED_SCRIPT_DEBUG_OUTPUT LAST_SCRIPT_COMMAND #endif diff --git a/src/control/ScriptDebug.cpp b/src/control/ScriptDebug.cpp index fd64b44e..076ec878 100644 --- a/src/control/ScriptDebug.cpp +++ b/src/control/ScriptDebug.cpp @@ -24,8 +24,8 @@ uint32 CRunningScript::storedIp; #define REGISTER_COMMAND(command, in, out, cond, ovrd, visual) { command, #command, in, out, cond, ovrd, visual } #define INPUT_ARGUMENTS(...) { __VA_ARGS__ ARGTYPE_NONE } #define OUTPUT_ARGUMENTS(...) { __VA_ARGS__ ARGTYPE_NONE } -const tScriptCommandData commands[] = { - REGISTER_COMMAND(COMMAND_NOP, INPUT_ARGUMENTS(), OUTPUT_ARGUMENTS(), false, -1, ""), +const tScriptCommandData commands[1] = { + /*REGISTER_COMMAND(COMMAND_NOP, INPUT_ARGUMENTS(), OUTPUT_ARGUMENTS(), false, -1, ""), REGISTER_COMMAND(COMMAND_WAIT, INPUT_ARGUMENTS(ARGTYPE_INT,), OUTPUT_ARGUMENTS(), false, -1, ""), REGISTER_COMMAND(COMMAND_GOTO, INPUT_ARGUMENTS(ARGTYPE_LABEL,), OUTPUT_ARGUMENTS(), false, -1, ""), REGISTER_COMMAND(COMMAND_SHAKE_CAM, INPUT_ARGUMENTS(ARGTYPE_INT,), OUTPUT_ARGUMENTS(), false, -1, ""), @@ -1686,12 +1686,13 @@ const tScriptCommandData commands[] = { REGISTER_COMMAND(COMMAND_PRINT_HELP_FOREVER_ALWAYS_NO_BRIEF, INPUT_ARGUMENTS(), OUTPUT_ARGUMENTS(), false, -1, ""), REGISTER_COMMAND(COMMAND_SET_CAR_IS_REWARD, INPUT_ARGUMENTS(ARGTYPE_INT, ARGTYPE_INT,), OUTPUT_ARGUMENTS(), false, -1, ""), REGISTER_COMMAND(COMMAND_FREEZE_ALL_PLAYER_FOLLOWERS, INPUT_ARGUMENTS(ARGTYPE_INT, ARGTYPE_INT,), OUTPUT_ARGUMENTS(), false, -1, ""), + */ }; #undef REGISTER_COMMAND #undef INPUT_ARGUMENTS #undef OUTPUT_ARGUMENTS -static_assert(ARRAY_SIZE(commands) == LAST_SCRIPT_COMMAND, "commands array not filled"); +///////////////static_assert(ARRAY_SIZE(commands) == LAST_SCRIPT_COMMAND, "commands array not filled"); #if SCRIPT_LOG_FILE_LEVEL == 1 || SCRIPT_LOG_FILE_LEVEL == 2 static FILE* dbg_log; @@ -1710,9 +1711,11 @@ static void PrintToLog(const char* format, ...) va_end(va); #if SCRIPT_LOG_FILE_LEVEL == 1 || SCRIPT_LOG_FILE_LEVEL == 2 +#ifndef MAZAHAKA_DEBUG_NOFILE if (dbg_log) fwrite(tmp, 1, strlen(tmp), dbg_log); #endif +#endif } #endif @@ -1733,11 +1736,34 @@ int32* GetPointerToScriptVariableForDebug(CRunningScript* pScript, uint32* pIp, uint8 type = CTheScripts::Read1ByteFromScript(pIp); if (type >= ARGUMENT_GLOBAL_ARRAY) { uint8 index_in_block = CTheScripts::Read1ByteFromScript(pIp); + //debug("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&index_in_block %d\n", index_in_block); + //debug("pIp 0x%p\n", &CTheScripts::ScriptSpace[(*pIp) - 1]); uint8 index_id = CTheScripts::Read1ByteFromScript(pIp); uint8 size = CTheScripts::Read1ByteFromScript(pIp); + +/*#ifdef MAZAHAKA_8_IN_LOCAL_VARS_SCRIPTS_ASSERT_STUFF + if(!(pScript->m_anLocalVariables[pScript->m_nLocalsPointer + index_id] < size)) { + debug("index_in_block %d\n", index_in_block); // 94 + debug("index_id %d\n", index_id); // 5 + debug("size %d\n", size); // 4 + debug("pIp %d\n", *pIp); // 4 + debug("pIp 0x%p\n", &CTheScripts::ScriptSpace[(*pIp) - 3]); // 4 + debug("\n"); + // debug(""); // 4 breakpoint + } +#endif*/ + script_assert(size > 0); +#ifdef MAZAHAKA_8_IN_LOCAL_VARS_SCRIPTS_ASSERT_STUFF +//#if 0 + //script_assert(pScript->m_anLocalVariables[pScript->m_nLocalsPointer + index_id] < size); // :RAYS2_7614 0573: does_vehicle_exist $3934(5@,4) + // knowed issue + if(pScript->m_abScriptName && strcmp(pScript->m_abScriptName, "rays2")) { script_assert(pScript->m_anLocalVariables[pScript->m_nLocalsPointer + index_id] < size); } + uint8 index = Min(pScript->m_anLocalVariables[pScript->m_nLocalsPointer + index_id + 8], size - 1); +#else script_assert(pScript->m_anLocalVariables[pScript->m_nLocalsPointer + index_id] < size); uint8 index = Min(pScript->m_anLocalVariables[pScript->m_nLocalsPointer + index_id], size - 1); +#endif sprintf(tmpstr, " $%d[%d@ (%d)]", ((int)(type - ARGUMENT_GLOBAL_ARRAY) << 8) + index_in_block, index_id, pScript->m_anLocalVariables[pScript->m_nLocalsPointer + index_id]); strcat(buf, tmpstr); return (int32*)&CTheScripts::ScriptSpace[4 * (((int)(type - ARGUMENT_GLOBAL_ARRAY) << 8) + index + index_in_block)]; @@ -1751,9 +1777,26 @@ int32* GetPointerToScriptVariableForDebug(CRunningScript* pScript, uint32* pIp, else if (type >= ARGUMENT_LOCAL_ARRAY) { uint8 index_id = CTheScripts::Read1ByteFromScript(pIp); uint8 size = CTheScripts::Read1ByteFromScript(pIp); + +/*#ifdef MAZAHAKA_8_IN_LOCAL_VARS_SCRIPTS_ASSERT_STUFF + if(!(pScript->m_anLocalVariables[pScript->m_nLocalsPointer + index_id] < size)) { + debug("index_id %d\n", index_id); + debug("size %d\n", size); + debug("pIp %d\n", *pIp); // 4 + debug("pIp 0x%p\n", &CTheScripts::ScriptSpace[(*pIp) - 3]); // 4 + debug("\n"); // debug(""); // 4 breakpoint + } +#endif*/ + script_assert(size > 0); +//#ifdef MAZAHAKA_8_IN_LOCAL_VARS_SCRIPTS_ASSERT_STUFF +#if 0 + script_assert(pScript->m_anLocalVariables[pScript->m_nLocalsPointer + index_id + 8] < size); + uint8 index = Min(pScript->m_anLocalVariables[pScript->m_nLocalsPointer + index_id + 8], size - 1); +#else script_assert(pScript->m_anLocalVariables[pScript->m_nLocalsPointer + index_id] < size); uint8 index = Min(pScript->m_anLocalVariables[pScript->m_nLocalsPointer + index_id], size - 1); +#endif sprintf(tmpstr, " %d@[%d@ (%d)]", (type - ARGUMENT_LOCAL_ARRAY), index_id, pScript->m_anLocalVariables[pScript->m_nLocalsPointer + index_id]); strcat(buf, tmpstr); return &pScript->m_anLocalVariables[pScript->m_nLocalsPointer + (type - ARGUMENT_LOCAL_ARRAY) + index]; @@ -1772,6 +1815,8 @@ int32* GetPointerToScriptVariableForDebug(CRunningScript* pScript, uint32* pIp, return nil; } +//#if SCRIPT_LOG_FILE_LEVEL == 1 || SCRIPT_LOG_FILE_LEVEL == 2 // mazahaka tmp compile error without scriptdebug +#if 1 int CRunningScript::CollectParameterForDebug(char* buf, bool& var) { var = false; @@ -1951,6 +1996,7 @@ void CRunningScript::LogAfterProcessingCommand(int32 command) } } } +#endif #ifdef MISSION_SWITCHER void