summaryrefslogtreecommitdiffstats
path: root/src/control/PedType.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/control/PedType.cpp')
-rw-r--r--src/control/PedType.cpp243
1 files changed, 0 insertions, 243 deletions
diff --git a/src/control/PedType.cpp b/src/control/PedType.cpp
deleted file mode 100644
index 66eb49a1..00000000
--- a/src/control/PedType.cpp
+++ /dev/null
@@ -1,243 +0,0 @@
-#include "common.h"
-#include "patcher.h"
-#include "FileMgr.h"
-#include "PedType.h"
-
-CPedType *(&CPedType::ms_apPedType)[NUM_PEDTYPES] = *(CPedType *(*)[NUM_PEDTYPES]) *(uintptr*)0x941594;
-
-void
-CPedType::Initialise(void)
-{
- int i;
-
- debug("Initialising CPedType...\n");
- for(i = 0; i < NUM_PEDTYPES; i++){
- ms_apPedType[i] = new CPedType;
- ms_apPedType[i]->m_flag = PED_FLAG_PLAYER1;
- ms_apPedType[i]->unknown1 = 0.0f;
- ms_apPedType[i]->unknown2 = 0.0f;
- // unknown3 not initialized
- ms_apPedType[i]->unknown4 = 0.0f;
- ms_apPedType[i]->unknown5 = 0.0f;
- ms_apPedType[i]->m_threats = 0;
- ms_apPedType[i]->m_avoid = 0;
- }
- debug("Loading ped data...\n");
- LoadPedData();
- debug("CPedType ready\n");
-}
-
-void
-CPedType::Shutdown(void)
-{
- int i;
- debug("Shutting down CPedType...\n");
- for(i = 0; i < NUM_PEDTYPES; i++)
- delete ms_apPedType[i];
- debug("CPedType shut down\n");
-}
-
-void
-CPedType::LoadPedData(void)
-{
- char *buf;
- char line[256];
- char word[32];
- int bp, buflen;
- int lp, linelen;
- int type;
- uint32 flags;
- float f1, f2, f3, f4, f5;
-
- type = NUM_PEDTYPES;
- buf = new char[16 * 1024];
-
- CFileMgr::SetDir("DATA");
- buflen = CFileMgr::LoadFile("PED.DAT", (uint8*)buf, 16 * 1024, "r");
- CFileMgr::SetDir("");
-
- for(bp = 0; bp < buflen; ){
- // read file line by line
- for(linelen = 0; buf[bp] != '\n' && bp < buflen; bp++){
- if(buf[bp] == '\r' || buf[bp] == ',' || buf[bp] == '\t')
- line[linelen++] = ' ';
- else
- line[linelen++] = buf[bp];
- line[linelen] = '\0';
- }
- bp++;
-
- // skip white space
- for(lp = 0; line[lp] <= ' '; lp++);
-
- if(lp >= linelen || // FIX: game uses == here, but this is safer if we have empty lines
- line[lp] == '#')
- continue;
-
- // FIX: game just uses line here
- sscanf(&line[lp], "%s", word);
-
- if(strncmp(word, "Threat", 7) == 0){
- flags = 0;
- lp += 7;
- while(sscanf(&line[lp], "%s", word) == 1 && lp <= linelen){
- flags |= FindPedFlag(word);
- // skip word
- while(line[lp] != ' ' && line[lp] != '\n' && line[lp] != '\0')
- lp++;
- // skip white space
- while(line[lp] == ' ')
- lp++;
- }
- ms_apPedType[type]->m_threats = flags;
- }else if(strncmp(word, "Avoid", 6) == 0){
- flags = 0;
- lp += 6;
- while(sscanf(&line[lp], "%s", word) == 1 && lp <= linelen){
- flags |= FindPedFlag(word);
- // skip word
- while(line[lp] != ' ' && line[lp] != '\n' && line[lp] != '\0')
- lp++;
- // skip white space
- while(line[lp] == ' ')
- lp++;
- }
- ms_apPedType[type]->m_avoid = flags;
- }else{
- sscanf(line, "%s %f %f %f %f %f", word, &f1, &f2, &f3, &f4, &f5);
- type = FindPedType(word);
- ms_apPedType[type]->m_flag = FindPedFlag(word);
- // unknown values
- ms_apPedType[type]->unknown1 = f1 / 50.0f;
- ms_apPedType[type]->unknown2 = f2 / 50.0f;
- ms_apPedType[type]->unknown3 = f3 / 50.0f;
- ms_apPedType[type]->unknown4 = f4;
- ms_apPedType[type]->unknown5 = f5;
-
- }
- }
-
- delete[] buf;
-}
-
-int32
-CPedType::FindPedType(char *type)
-{
- if(strcmp(type, "PLAYER1") == 0) return PEDTYPE_PLAYER1;
- if(strcmp(type, "PLAYER2") == 0) return PEDTYPE_PLAYER2;
- if(strcmp(type, "PLAYER3") == 0) return PEDTYPE_PLAYER3;
- if(strcmp(type, "PLAYER4") == 0) return PEDTYPE_PLAYER4;
- if(strcmp(type, "CIVMALE") == 0) return PEDTYPE_CIVMALE;
- if(strcmp(type, "CIVFEMALE") == 0) return PEDTYPE_CIVFEMALE;
- if(strcmp(type, "COP") == 0) return PEDTYPE_COP;
- if(strcmp(type, "GANG1") == 0) return PEDTYPE_GANG1;
- if(strcmp(type, "GANG2") == 0) return PEDTYPE_GANG2;
- if(strcmp(type, "GANG3") == 0) return PEDTYPE_GANG3;
- if(strcmp(type, "GANG4") == 0) return PEDTYPE_GANG4;
- if(strcmp(type, "GANG5") == 0) return PEDTYPE_GANG5;
- if(strcmp(type, "GANG6") == 0) return PEDTYPE_GANG6;
- if(strcmp(type, "GANG7") == 0) return PEDTYPE_GANG7;
- if(strcmp(type, "GANG8") == 0) return PEDTYPE_GANG8;
- if(strcmp(type, "GANG9") == 0) return PEDTYPE_GANG9;
- if(strcmp(type, "EMERGENCY") == 0) return PEDTYPE_EMERGENCY;
- if(strcmp(type, "FIREMAN") == 0) return PEDTYPE_FIREMAN;
- if(strcmp(type, "CRIMINAL") == 0) return PEDTYPE_CRIMINAL;
- if(strcmp(type, "SPECIAL") == 0) return PEDTYPE_SPECIAL;
- if(strcmp(type, "PROSTITUTE") == 0) return PEDTYPE_PROSTITUTE;
- Error("Unknown ped type, Pedtype.cpp");
- return NUM_PEDTYPES;
-}
-
-uint32
-CPedType::FindPedFlag(char *type)
-{
- if(strcmp(type, "PLAYER1") == 0) return PED_FLAG_PLAYER1;
- if(strcmp(type, "PLAYER2") == 0) return PED_FLAG_PLAYER2;
- if(strcmp(type, "PLAYER3") == 0) return PED_FLAG_PLAYER3;
- if(strcmp(type, "PLAYER4") == 0) return PED_FLAG_PLAYER4;
- if(strcmp(type, "CIVMALE") == 0) return PED_FLAG_CIVMALE;
- if(strcmp(type, "CIVFEMALE") == 0) return PED_FLAG_CIVFEMALE;
- if(strcmp(type, "COP") == 0) return PED_FLAG_COP;
- if(strcmp(type, "GANG1") == 0) return PED_FLAG_GANG1;
- if(strcmp(type, "GANG2") == 0) return PED_FLAG_GANG2;
- if(strcmp(type, "GANG3") == 0) return PED_FLAG_GANG3;
- if(strcmp(type, "GANG4") == 0) return PED_FLAG_GANG4;
- if(strcmp(type, "GANG5") == 0) return PED_FLAG_GANG5;
- if(strcmp(type, "GANG6") == 0) return PED_FLAG_GANG6;
- if(strcmp(type, "GANG7") == 0) return PED_FLAG_GANG7;
- if(strcmp(type, "GANG8") == 0) return PED_FLAG_GANG8;
- if(strcmp(type, "GANG9") == 0) return PED_FLAG_GANG9;
- if(strcmp(type, "EMERGENCY") == 0) return PED_FLAG_EMERGENCY;
- if(strcmp(type, "FIREMAN") == 0) return PED_FLAG_FIREMAN;
- if(strcmp(type, "CRIMINAL") == 0) return PED_FLAG_CRIMINAL;
- if(strcmp(type, "SPECIAL") == 0) return PED_FLAG_SPECIAL;
- if(strcmp(type, "GUN") == 0) return PED_FLAG_GUN;
- if(strcmp(type, "COP_CAR") == 0) return PED_FLAG_COP_CAR;
- if(strcmp(type, "FAST_CAR") == 0) return PED_FLAG_FAST_CAR;
- if(strcmp(type, "EXPLOSION") == 0) return PED_FLAG_EXPLOSION;
- if(strcmp(type, "PROSTITUTE") == 0) return PED_FLAG_PROSTITUTE;
- if(strcmp(type, "DEADPEDS") == 0) return PED_FLAG_DEADPEDS;
- return 0;
-}
-
-void
-CPedType::Save(uint8 *buffer, uint32 *length)
-{
- int i;
-
- *length = 8 + NUM_PEDTYPES*32;
-
- buffer[0] = 'P';
- buffer[1] = 'T';
- buffer[2] = 'P';
- buffer[3] = '\0';
- *(uint32*)(buffer+4) = *length - 8;
- buffer += 8;
-
- for(i = 0; i < NUM_PEDTYPES; i++){
- *(uint32*)(buffer) = ms_apPedType[i]->m_flag;
- *(float*)(buffer+4) = ms_apPedType[i]->unknown1;
- *(float*)(buffer+8) = ms_apPedType[i]->unknown2;
- *(float*)(buffer+12) = ms_apPedType[i]->unknown3;
- *(float*)(buffer+16) = ms_apPedType[i]->unknown4;
- *(float*)(buffer+20) = ms_apPedType[i]->unknown5;
- *(uint32*)(buffer+24) = ms_apPedType[i]->m_threats;
- *(uint32*)(buffer+28) = ms_apPedType[i]->m_avoid;
- buffer += 32;
- }
-}
-
-void
-CPedType::Load(uint8 *buffer, uint32 length)
-{
- int i;
-
- assert(length == 8 + NUM_PEDTYPES*32);
- assert(buffer[0] == 'P');
- assert(buffer[1] == 'T');
- assert(buffer[2] == 'P');
- assert(buffer[3] == '\0');
- assert(*(uint32*)(buffer+4) == length - 8);
- buffer += 8;
-
- for(i = 0; i < NUM_PEDTYPES; i++){
- ms_apPedType[i]->m_flag = *(uint32*)(buffer);
- ms_apPedType[i]->unknown1 = *(float*)(buffer+4);
- ms_apPedType[i]->unknown2 = *(float*)(buffer+8);
- ms_apPedType[i]->unknown3 = *(float*)(buffer+12);
- ms_apPedType[i]->unknown4 = *(float*)(buffer+16);
- ms_apPedType[i]->unknown5 = *(float*)(buffer+20);
- ms_apPedType[i]->m_threats = *(uint32*)(buffer+24);
- ms_apPedType[i]->m_avoid = *(uint32*)(buffer+28);
- buffer += 32;
- }
-}
-
-STARTPATCHES
- InjectHook(0x4EE7E0, &CPedType::Initialise, PATCH_JUMP);
- InjectHook(0x4EE890, &CPedType::Shutdown, PATCH_JUMP);
- InjectHook(0x4EEC10, &CPedType::FindPedType, PATCH_JUMP);
- InjectHook(0x4EEF40, &CPedType::FindPedFlag, PATCH_JUMP);
- InjectHook(0x4EF320, &CPedType::Save, PATCH_JUMP);
- InjectHook(0x4EF3D0, &CPedType::Load, PATCH_JUMP);
-ENDPATCHES