Mercurial > mm7
view NPC.cpp @ 272:6e585f21a01e
Merge
author | Nomad |
---|---|
date | Mon, 18 Feb 2013 13:09:08 +0200 |
parents | 96f3a1177b37 |
children | 0ea5fbd16edb |
line wrap: on
line source
#include <string.h> #include <stdlib.h> #include "Allocator.h" #include "texts.h" #include "Party.h" #include "LOD.h" #include "Autonotes.h" #include "Awards.h" #include "mm7_data.h" #include "MM7.h" #include "NPC.h" void InitializeAwards(); void InitializeScrolls(); void InitializeMerchants(); void InitializeTransitions(); void InitializeAutonotes(); void InitializeQuests(); //----- (00476977) -------------------------------------------------------- void NPCStats::Initialize2() { int i; char* test_string; unsigned char c; bool break_loop; unsigned int temp_str_len; char* tmp_pos; int decode_step; if (pNPCTextTXT_Raw) pAllocator->FreeChunk(pNPCTextTXT_Raw); pNPCTextTXT_Raw =NULL; pNPCTextTXT_Raw = (char *)pEvents_LOD->LoadRaw("npctext.txt", 0); strtok(pNPCTextTXT_Raw, "\r"); for (i=0; i<789; ++i) { test_string = strtok(NULL, "\r") + 1; break_loop = false; decode_step=0; do { c = *(unsigned char*)test_string; temp_str_len = 0; while((c!='\t')&&(c>0)) { ++temp_str_len; c=test_string[temp_str_len]; } tmp_pos=test_string+temp_str_len; if (*tmp_pos == 0) break_loop = true; *tmp_pos = 0; if (temp_str_len) { if ( decode_step == 1) pNPCTopics[i].pText =RemoveQuotes(test_string); } else { break_loop = true; } ++decode_step; test_string=tmp_pos+1; } while ((decode_step<2)&&!break_loop); } if (pNPCTopicTXT_Raw) pAllocator->FreeChunk(pNPCTopicTXT_Raw); pNPCTopicTXT_Raw =NULL; pNPCTopicTXT_Raw = (char *)pEvents_LOD->LoadRaw("npctopic.txt", 0); strtok(pNPCTopicTXT_Raw, "\r"); for (i=0; i<579; ++i) { test_string = strtok(NULL, "\r") + 1; break_loop = false; decode_step=0; do { c = *(unsigned char*)test_string; temp_str_len = 0; while((c!='\t')&&(c>0)) { ++temp_str_len; c=test_string[temp_str_len]; } tmp_pos=test_string+temp_str_len; if (*tmp_pos == 0) break_loop = true; *tmp_pos = 0; if (temp_str_len) { if ( decode_step == 1) pNPCTopics[i].pTopic = RemoveQuotes(test_string); } else { break_loop = true; } ++decode_step; test_string=tmp_pos+1; } while ((decode_step<2)&&!break_loop); } if (pNPCDistTXT_Raw) pAllocator->FreeChunk(pNPCDistTXT_Raw); pNPCDistTXT_Raw = NULL; pNPCDistTXT_Raw = (char *)pEvents_LOD->LoadRaw("npcdist.txt", 0); strtok(pNPCDistTXT_Raw, "\r"); strtok(NULL, "\r"); for (i=1; i<59; ++i) { test_string = strtok(NULL, "\r") + 1; break_loop = false; decode_step=0; do { c = *(unsigned char*)test_string; temp_str_len = 0; while((c!='\t')&&(c>0)) { ++temp_str_len; c=test_string[temp_str_len]; } tmp_pos=test_string+temp_str_len; if (*tmp_pos == 0) break_loop = true; *tmp_pos = 0; if (temp_str_len) { if ((decode_step>0)&&(decode_step<77)) { array_16544[decode_step].field_4[i]=atoi(test_string); } else if (decode_step==0) { array_16544[0].field_4[i]=10; } } else { break_loop = true; } ++decode_step; test_string=tmp_pos+1; } while ((decode_step<78)&&!break_loop); } for (i=0; i<78; ++i) { array_16544[i].field_0=0; for (int ii=1; ii<59; ++ii) { array_16544[i].field_0+=array_16544[i].field_4[ii]; } } if (pNPCDistTXT_Raw) { pAllocator->FreeChunk(pNPCDistTXT_Raw); pNPCDistTXT_Raw = NULL; } } //----- (00476C60) -------------------------------------------------------- void NPCStats::_476C60() { for (unsigned int i = 1; i < uNumNewNPCs; ++i) pNewNPCData[i].pName = pNPCNames2[i - 1]; if (pParty->pHirelings[0].pName) pParty->pHirelings[0].pName = pParty->pHireling1Name; if (pParty->pHirelings[1].pName) pParty->pHirelings[1].pName = pParty->pHireling2Name; } //----- (00476CB5) -------------------------------------------------------- void NPCStats::Initialize1() { NPCStats *pNPCStats; // esi@1 char *pRaw; // eax@1 char *pHouse; // edi@1 char *v4; // eax@2 char v5; // dl@3 int v6; // ecx@3 char *v7; // eax@11 char *v8; // eax@26 char *v9; // ecx@27 char v10; // dl@28 int v11; // eax@28 int v12; // edi@32 char *v13; // eax@42 char *v14; // eax@43 char v15; // dl@44 int v16; // ecx@44 int v17; // edi@48 char *v18; // eax@56 char *v19; // eax@57 char v20; // cl@58 int v21; // edi@58 int v22; // esi@62 int v23; // [sp+Ch] [bp-14h]@7 signed int v24; // [sp+10h] [bp-10h]@1 signed int v25; // [sp+10h] [bp-10h]@26 signed int v26; // [sp+10h] [bp-10h]@42 signed int v27; // [sp+10h] [bp-10h]@56 char *Str; // [sp+14h] [bp-Ch]@1 NPCGreeting *pGreetings; // [sp+14h] [bp-Ch]@26 unsigned __int16 *pGroups; // [sp+14h] [bp-Ch]@42 char **pCatchPhrase; // [sp+14h] [bp-Ch]@56 signed int v32; // [sp+18h] [bp-8h]@2 signed int v33; // [sp+18h] [bp-8h]@27 signed int v34; // [sp+18h] [bp-8h]@43 signed int v35; // [sp+18h] [bp-8h]@57 signed int v36; // [sp+1Ch] [bp-4h]@2 signed int v37; // [sp+1Ch] [bp-4h]@27 signed int v38; // [sp+1Ch] [bp-4h]@43 signed int v39; // [sp+1Ch] [bp-4h]@57 pNPCStats = this; pRaw = (char *)pEvents_LOD->LoadRaw("npcdata.txt", 0); pNPCStats->pNPCDataTXT_Raw = pRaw; strtok(pRaw, "\r"); strtok(0, "\r"); pHouse = (char *)&pNPCStats->pNPCData[1].house; Str = (char *)pNPCStats->pNPCNames2; v24 = 500; do { v32 = 0; v4 = strtok(0, "\r") + 1; v36 = -1; do { v5 = *v4; v6 = 0; while ( v5 != 9 && v5 ) { ++v6; v5 = v4[v6]; } v23 = (int)&v4[v6]; if ( !v4[v6] ) v32 = 1; v4[v6] = 0; if ( v6 ) { switch ( v36 ) { case 0: v7 = RemoveQuotes(v4); *((int *)pHouse - 5) = (int)v7; *(int *)Str = (int)v7; break; case 1: *((int *)pHouse - 4) = atoi(v4); break; case 5: *(int *)pHouse = atoi(v4); break; case 6: *((int *)pHouse + 1) = atoi(v4); break; case 7: *((int *)pHouse + 2) = atoi(v4); break; case 8: *((int *)pHouse + 3) = *v4 == 121; break; case 9: *((int *)pHouse + 5) = atoi(v4); break; case 10: *((int *)pHouse + 6) = atoi(v4); break; case 11: *((int *)pHouse + 7) = atoi(v4); break; case 12: *((int *)pHouse + 8) = atoi(v4); break; case 13: *((int *)pHouse + 9) = atoi(v4); break; case 14: *((int *)pHouse + 10) = atoi(v4); break; default: break; } } ++v36; v4 = (char *)(v23 + 1); } while ( v36 + 1 <= 15 && !v32 ); Str += 4; pHouse += 76; --v24; } while ( v24 ); pNPCStats->uNumNewNPCs = 501; v8 = (char *)pEvents_LOD->LoadRaw("npcgreet.txt", 0); pNPCStats->pNPCGreetTXT_Raw = v8; strtok(v8, "\r"); pGreetings = pNPCStats->pNPCGreetings; v25 = 205; do { v37 = 0; v33 = 0; v9 = strtok(0, "\r") + 1; do { v10 = *v9; v11 = 0; while ( v10 != 9 && v10 ) { ++v11; v10 = v9[v11]; } v12 = (int)&v9[v11]; if ( !v9[v11] ) v33 = 1; *(char *)v12 = 0; if ( v11 ) { if ( v37 == 1 ) { pGreetings->pGreeting1 = (char *)RemoveQuotes(v9); } else { if ( v37 == 2 ) pGreetings->pGreeting2 = (char *)RemoveQuotes(v9); } } ++v37; v9 = (char *)(v12 + 1); } while ( v37 <= 2 && !v33 ); ++pGreetings; --v25; } while ( v25 ); v13 = (char *)pEvents_LOD->LoadRaw("npcgroup.txt", 0); pNPCStats->pNCPGroupTXT_Raw = v13; strtok(v13, "\r"); pGroups = pNPCStats->pGroups; v26 = 51; do { v14 = strtok(0, "\r") + 1; v38 = 0; v34 = 0; do { v15 = *v14; v16 = 0; while ( v15 != 9 && v15 ) { ++v16; v15 = v14[v16]; } v17 = (int)&v14[v16]; if ( !v14[v16] ) v34 = 1; *(char *)v17 = 0; if ( v16 && v38 == 1 ) *pGroups = atoi(v14); ++v38; v14 = (char *)(v17 + 1); } while ( v38 <= 1 && !v34 ); ++pGroups; --v26; } while ( v26 ); v18 = (char *)pEvents_LOD->LoadRaw("npcnews.txt", 0); pNPCStats->pNPCNewsTXT_Raw = v18; strtok(v18, "\r"); pCatchPhrase = pNPCStats->pCatchPhrases; v27 = 51; do { v19 = strtok(0, "\r") + 1; v39 = 0; v35 = 0; do { v20 = *v19; v21 = 0; while ( v20 != 9 && v20 ) { ++v21; v20 = v19[v21]; } v22 = (int)&v19[v21]; if ( !v19[v21] ) v35 = 1; *(char *)v22 = 0; if ( v21 && v39 == 1 ) *pCatchPhrase = (char *)RemoveQuotes(v19); ++v39; v19 = (char *)(v22 + 1); } while ( v39 <= 1 && !v35 ); ++pCatchPhrase; --v27; } while ( v27 ); } //----- (0047702F) -------------------------------------------------------- void NPCStats::Initialize() { //NPCStats *v1; // edi@1 char *v2; // ebx@1 //char *v3; // eax@1 char *v4; // ebx@3 char v5; // al@4 int v6; // ecx@4 //char *v7; // eax@18 char *v8; // ebx@18 char *v9; // ecx@19 char v10; // dl@20 int v11; // eax@20 char v12; // zf@41 signed int v13; // [sp+Ch] [bp-14h]@18 int v14; // [sp+10h] [bp-10h]@4 int v15; // [sp+10h] [bp-10h]@24 char *v16; // [sp+14h] [bp-Ch]@1 signed int v17; // [sp+14h] [bp-Ch]@19 unsigned int v18; // [sp+18h] [bp-8h]@1 char *v19; // [sp+18h] [bp-8h]@18 signed int v20; // [sp+1Ch] [bp-4h]@3 signed int v21; // [sp+1Ch] [bp-4h]@19 //v1 = this; Initialize1(); Initialize2(); InitializeQuests(); InitializeAutonotes(); InitializeAwards(); InitializeTransitions(); InitializeMerchants(); InitializeScrolls(); v2 = 0; field_17FC0 = 0; pNPCNamesTXT_Raw = 0; //v3 = (char *)pEvents_LOD->LoadRaw("npcnames.txt", 0); pNPCNamesTXT_Raw = (char *)pEvents_LOD->LoadRaw("npcnames.txt", 0); strtok(pNPCNamesTXT_Raw, "\r"); v18 = 0; v16 = (char *)pNPCNames; while ( 1 ) { v4 = strtok(v2, "\r") + 1; v20 = 0; do { v5 = *v4; v6 = 0; v14 = 0; if ( *v4 == 9 ) goto LABEL_45; do { if ( !v5 ) break; if ( v5 == 10 ) break; ++v6; v14 = v6; v5 = v4[v6]; } while ( v5 != 9 ); if ( v6 ) { v4[v6] = 0; if ( v20 ) { if ( v20 == 1 ) *((int *)v16 + 1) = (int)RemoveQuotes(v4); } else { *(int *)v16 = (int)RemoveQuotes(v4); } } else { LABEL_45: if ( v20 == 1 && !uNumNPCNames[1] ) uNumNPCNames[1] = v18; } ++v20; v4 += v14 + 1; } while ( v20 <= 1 ); ++v18; v16 += 8; if ( (signed int)v18 >= 540 ) break; v2 = 0; } pNPCProfTXT_Raw = 0; uNumNPCNames[0] = v18; //v7 = (char *)pEvents_LOD->LoadRaw("npcprof.txt", 0); pNPCProfTXT_Raw = (char *)pEvents_LOD->LoadRaw("npcprof.txt", 0); strtok(pNPCProfTXT_Raw, "\r"); strtok(0, "\r"); strtok(0, "\r"); strtok(0, "\r"); v8 = (char *)&pProfessions[0].pJoinText; v19 = (char *)&pProfessions[0].pJoinText; v13 = 58; do { v21 = 0; v9 = strtok(0, "\r") + 1; v17 = 0; do { v10 = *v9; v11 = 0; if ( *v9 != 9 ) { do { if ( !v10 ) break; ++v11; v10 = v9[v11]; } while ( v10 != 9 ); v8 = v19; } v15 = (int)&v9[v11]; if ( !v9[v11] ) v17 = 1; *(char *)v15 = 0; if ( v11 ) { switch ( v21 ) { case 2: *((int *)v8 - 3) = atoi(v9); break; case 3: *((int *)v8 - 1) = (int)RemoveQuotes(v9); break; case 4: *((int *)v8 - 2) = (int)RemoveQuotes(v9); break; case 5: *(int *)v8 = (int)RemoveQuotes(v9); break; case 6: *((int *)v8 + 1) = (int)RemoveQuotes(v9); break; } } else { if ( !v21 ) v17 = 1; } ++v21; v9 = (char *)(v15 + 1); } while ( v21 <= 6 && !v17 ); v8 += 20; v12 = v13-- == 1; v19 = v8; } while ( !v12 ); uNumNPCProfessions = 59; } //----- (00477266) -------------------------------------------------------- void NPCStats::Release() { NPCStats *v1; // esi@1 void *v2; // ST00_4@1 int v3; // ebx@1 v1 = this; pAllocator->FreeChunk(this->pNPCTopicTXT_Raw); v2 = v1->pNPCTextTXT_Raw; v1->pNPCNewsTXT_Raw = 0; pAllocator->FreeChunk(v2); v1->pNPCNewsTXT_Raw = 0; pAllocator->FreeChunk(0); v1->pNPCNewsTXT_Raw = 0; pAllocator->FreeChunk(v1->pNPCProfTXT_Raw); v1->pNPCProfTXT_Raw = 0; pAllocator->FreeChunk(v1->pNPCNamesTXT_Raw); v1->pNPCNamesTXT_Raw = 0; pAllocator->FreeChunk(v1->pNPCDataTXT_Raw); v1->pNPCDataTXT_Raw = 0; pAllocator->FreeChunk(v1->pNPCDistTXT_Raw); v1->pNPCDistTXT_Raw = 0; v3 = (int)&v1->pNPCGreetTXT_Raw; pAllocator->FreeChunk(v1->pNPCGreetTXT_Raw); v1 = (NPCStats *)((char *)v1 + 98296); *(int *)v3 = 0; pAllocator->FreeChunk(v1->pNPCData[0].pName); v1->pNPCData[0].pName = 0; } //----- (0047730C) -------------------------------------------------------- int __fastcall const_1(int a1, int) { return 1; } // 47730C: using guessed type int __stdcall const_1(int); //----- (0047732C) -------------------------------------------------------- bool NPCStats::InitializeAdditionalNPCs(NPCData *a2, int a3, int a4, int a5) { //NPCStats *v5; // ebx@1 signed __int64 v6; // qax@1 int v7; // esi@1 int v8; // edx@1 NPCData *v9; // edi@1 int v10; // eax@1 //int v11; // eax@23 int v12; // ecx@23 int v13; // edx@28 int v14; // esi@37 int v15; // edx@37 int v16; // ecx@37 int v17; // eax@37 int v18; // edx@37 signed int result; // eax@39 int v20; // [sp+Ch] [bp-Ch]@1 signed int v21; // [sp+10h] [bp-8h]@1 signed int v22; // [sp+14h] [bp-4h]@1 int v23; // [sp+24h] [bp+Ch]@1 v23 = a3 - 1; //v5 = this; v6 = (signed __int64)((double)v23 * -0.33333334); v7 = (unsigned __int8)byte_4E8394[-(_DWORD)v6 + 28]; v20 = (unsigned __int8)byte_4E8394[-(_DWORD)v6 + 116]; v8 = rand() % uNumNPCNames[v7]; v9 = a2; a2->uSex = v7; a2->pName = pNPCNames[v8][v7]; v10 = 0; v22 = 0; v21 = 0; while ( 1 ) { if ( v20 == v10 ) { if ( v7 == v10 ) { v23 = 2; a2 = (NPCData *)100; } else { if ( v7 - v10 == 1 ) { v23 = 201; a2 = (NPCData *)250; } } } else { switch ( v20 - v10 ) { case 1: if ( v7 == v10 ) { v23 = 400; a2 = (NPCData *)430; } else { if ( v7 - v10 == 1 ) { v23 = 460; a2 = (NPCData *)490; } } break; case 2: if ( v7 == v10 ) { v23 = 500; a2 = (NPCData *)520; } else { if ( v7 - v10 == 1 ) { v23 = 530; a2 = (NPCData *)550; } } break; case 3: if ( v7 == v10 ) { v23 = 300; a2 = (NPCData *)330; } else { if ( v7 - v10 == 1 ) { v23 = 360; a2 = (NPCData *)387; } } break; } } v12 = v23 + rand() % ((int)a2 - v23 + 1); if ( const_1(v12, v7) == 1 ) v21 = 1; ++v22; if ( v22 >= 4 ) { v12 = v23; v21 = 1; } if ( v21 ) break; v10 = 0; } v9->uPortraitID = v12; v9->uFlags = 0; v9->fame = 0; v13 = rand() % 100 + 1; if ( v13 >= 60 ) { if ( v13 >= 90 ) { if ( v13 >= 95 ) { if ( v13 >= 98 ) v9->rep = -600; else v9->rep = 400; } else { v9->rep = -300; } } else { v9->rep = 200; } } else { v9->rep = 0; } //v14 = (int)((char *)v5 + 64 * a5); //v15 = rand() % *(_DWORD *)(v14 + 91460); v15 = rand() % array_16544[a5].field_0; v16 = 0; v17 = 0; v18 = v15 + 1; if ( v18 > 0 ) { do //v14 += *(char *)(v14 + v17++ + 0x16548); v16 += array_16544[a5].field_4[v17++]; while ( v16 < v18 ); } v9->uProfession = v17 - 1; v9->house = a4; v9->field_24 = 1; v9->joins = 1; return true; } //----- (00476387) -------------------------------------------------------- bool PartyHasDragon() { return pNPCStats->pNewNPCData[57].Hired(); } //----- (00476395) -------------------------------------------------------- //0x26 Wizard eye at skill level 2 bool __thiscall CheckHiredNPCSpeciality(unsigned int uProfession) { bool result; // eax@2 signed int v2; // esi@3 char *v3; // eax@4 if ( bNoNPCHiring == 1 ) return 0; v2 = 0; if ( (signed int)pNPCStats->uNumNewNPCs <= 0 ) { LABEL_8: result = 0; if ( pParty->pHirelings[0].uProfession != uProfession ) { LOBYTE(result) = pParty->pHirelings[1].uProfession == uProfession; return result; } } else { v3 = (char *)&pNPCStats->pNewNPCData[0].uFlags; while ( *((int *)v3 + 4) != uProfession || !(*v3 & 0x80) ) { ++v2; v3 += 76; if ( v2 >= (signed int)pNPCStats->uNumNewNPCs ) goto LABEL_8; } result = 0; } ++result; return result; } // 6BE3C5: using guessed type char bNoNPCHiring; //----- (004763E0) -------------------------------------------------------- void InitializeAwards() { int i; char* test_string; unsigned char c; bool break_loop; unsigned int temp_str_len; char* tmp_pos; int decode_step; int item_counter; if ( pAwardsTXT_Raw ) pAllocator->FreeChunk(pAwardsTXT_Raw); pAwardsTXT_Raw = NULL; pAwardsTXT_Raw = (char *)pEvents_LOD->LoadRaw("awards.txt", 0); strtok(pAwardsTXT_Raw, "\r"); for (i=1; i<104; ++i) { test_string = strtok(NULL, "\r") + 1; break_loop = false; decode_step=0; do { c = *(unsigned char*)test_string; temp_str_len = 0; while((c!='\t')&&(c>0)) { ++temp_str_len; c=test_string[temp_str_len]; } tmp_pos=test_string+temp_str_len; if (*tmp_pos == 0) break_loop = true; *tmp_pos = 0; if (temp_str_len) { if (decode_step==1) pAwards[i].pText=RemoveQuotes(test_string); else if (decode_step==2) pAwards[i].uSort=atoi(test_string); } else { break_loop = true; } ++decode_step; test_string=tmp_pos+1; } while ((decode_step<3)&&!break_loop); } } // 7241C8: using guessed type int dword_7241C8; //----- (004764C2) -------------------------------------------------------- void InitializeScrolls() { int i; char* test_string; unsigned char c; bool break_loop; unsigned int temp_str_len; char* tmp_pos; int decode_step; int item_counter; if ( pScrollsTXT_Raw ) pAllocator->FreeChunk(pScrollsTXT_Raw); pScrollsTXT_Raw = NULL; pScrollsTXT_Raw = (char *)pEvents_LOD->LoadRaw("scroll.txt", 0); strtok(pScrollsTXT_Raw, "\r"); for (i=0; i<82; ++i) { test_string = strtok(NULL, "\r") + 1; break_loop = false; decode_step=0; do { c = *(unsigned char*)test_string; temp_str_len = 0; while((c!='\t')&&(c>0)) { ++temp_str_len; c=test_string[temp_str_len]; } tmp_pos=test_string+temp_str_len; if (*tmp_pos == 0) break_loop = true; *tmp_pos = 0; if (temp_str_len) { if ( decode_step == 1) pScrolls[i]=RemoveQuotes(test_string); } else { break_loop = true; } ++decode_step; test_string=tmp_pos+1; } while ((decode_step<2)&&!break_loop); } } //----- (00476590) -------------------------------------------------------- void InitializeMerchants() { int i; char* test_string; unsigned char c; bool break_loop; unsigned int temp_str_len; char* tmp_pos; int decode_step; int item_counter; if ( pMerchantsTXT_Raw ) pAllocator->FreeChunk(pMerchantsTXT_Raw); pMerchantsTXT_Raw = NULL; pMerchantsTXT_Raw = (char *)pEvents_LOD->LoadRaw("merchant.txt", 0); strtok(pMerchantsTXT_Raw, "\r"); for (i=0; i<7; ++i) { test_string = strtok(NULL, "\r") + 1; break_loop = false; decode_step=0; do { c = *(unsigned char*)test_string; temp_str_len = 0; while((c!='\t')&&(c>0)) { ++temp_str_len; c=test_string[temp_str_len]; } tmp_pos=test_string+temp_str_len; if (*tmp_pos == 0) break_loop = true; *tmp_pos = 0; if (temp_str_len) { switch (decode_step) { case 1: pMerchantsBuyPhrases[i]=RemoveQuotes(test_string); break; case 2: pMerchantsSellPhrases[i]=RemoveQuotes(test_string); break; case 3: pMerchantsRepairPhrases[i]=RemoveQuotes(test_string); break; case 4: pMerchantsIdentifyPhrases[i]=RemoveQuotes(test_string); break; } } else { break_loop = true; } ++decode_step; test_string=tmp_pos+1; } while ((decode_step<5)&&!break_loop); } } //----- (00476682) -------------------------------------------------------- void InitializeTransitions() { int i; char* test_string; unsigned char c; bool break_loop; unsigned int temp_str_len; char* tmp_pos; int decode_step; int item_counter; if ( pTransitionsTXT_Raw ) pAllocator->FreeChunk(pTransitionsTXT_Raw); pTransitionsTXT_Raw = NULL; pTransitionsTXT_Raw = (char *)pEvents_LOD->LoadRaw("trans.txt", 0); strtok(pTransitionsTXT_Raw, "\r"); for (i=0; i<464; ++i) { test_string = strtok(NULL, "\r") + 1; break_loop = false; decode_step=0; do { c = *(unsigned char*)test_string; temp_str_len = 0; while((c!='\t')&&(c>0)) { ++temp_str_len; c=test_string[temp_str_len]; } tmp_pos=test_string+temp_str_len; if (*tmp_pos == 0) break_loop = true; *tmp_pos = 0; if (temp_str_len) { if ( decode_step == 1) pTransitionStrings[i]=RemoveQuotes(test_string); } else { break_loop = true; } ++decode_step; test_string=tmp_pos+1; } while ((decode_step<2)&&!break_loop); } } //----- (00476750) -------------------------------------------------------- void __cdecl InitializeAutonotes() { int i; char* test_string; unsigned char c; bool break_loop; unsigned int temp_str_len; char* tmp_pos; int decode_step; int item_counter; if ( pAutonoteTXT_Raw ) pAllocator->FreeChunk(pAutonoteTXT_Raw); pAutonoteTXT_Raw = 0; pAutonoteTXT_Raw = (char *)pEvents_LOD->LoadRaw("autonote.txt", 0); strtok(pAutonoteTXT_Raw, "\r"); for (i=0; i<195; ++i) { test_string = strtok(NULL, "\r") + 1; break_loop = false; decode_step=0; do { c = *(unsigned char*)test_string; temp_str_len = 0; while((c!='\t')&&(c>0)) { ++temp_str_len; c=test_string[temp_str_len]; } tmp_pos=test_string+temp_str_len; if (*tmp_pos == 0) break_loop = true; *tmp_pos = 0; if (temp_str_len) { switch (decode_step) { case 1: pAutonoteTxt[i].pText=RemoveQuotes(test_string); break; case 2: { if ( !_strcmpi(test_string, "potion")) { pAutonoteTxt[i].eType = AUTONOTE_POTION_RECEPIE; break; } if ( !_strcmpi(test_string, "stat") ) { pAutonoteTxt[i].eType = AUTONOTE_STAT_HINT; break; } if ( !_strcmpi(test_string, "seer") ) { pAutonoteTxt[i].eType = AUTONOTE_SEER; break; } if ( !_strcmpi(test_string, "obelisk") ) { pAutonoteTxt[i].eType = AUTONOTE_OBELISK; break; } if ( !_strcmpi(test_string, "teacher") ) { pAutonoteTxt[i].eType = AUTONOTE_TEACHER; break; } pAutonoteTxt[i].eType =AUTONOTE_MISC; break; } } } else { break_loop = true; } ++decode_step; test_string=tmp_pos+1; } while ((decode_step<3)&&!break_loop); } } //----- (004768A9) -------------------------------------------------------- void __cdecl InitializeQuests() { int i; char* test_string; unsigned char c; bool break_loop; unsigned int temp_str_len; char* tmp_pos; int decode_step; int item_counter; if ( pQuestsTXT_Raw ) pAllocator->FreeChunk(pQuestsTXT_Raw); pQuestsTXT_Raw = NULL; pQuestsTXT_Raw = (char *)pEvents_LOD->LoadRaw("quests.txt", 0); strtok(pQuestsTXT_Raw, "\r"); for (i=0; i<512; ++i) { test_string = strtok(NULL, "\r") + 1; break_loop = false; decode_step=0; do { c = *(unsigned char*)test_string; temp_str_len = 0; while((c!='\t')&&(c>0)) { ++temp_str_len; c=test_string[temp_str_len]; } tmp_pos=test_string+temp_str_len; if (*tmp_pos == 0) break_loop = true; *tmp_pos = 0; if (temp_str_len) { if ( decode_step == 1) pQuestTable[i] =RemoveQuotes(test_string); } else { break_loop = true; } ++decode_step; test_string=tmp_pos+1; } while ((decode_step<2)&&!break_loop); } }