Mercurial > mm7
changeset 2229:10c909eb6766
dword_AE336C to NPCStats::dword_AE336C_LastMispronouncedNameFirstLetter,
dword_AE3370 to NPCStats::dword_AE3370_LastMispronouncedNameResult
sub_495366 to NPCStats::sub_495366_MispronounceName + cleanup
author | Grumpy7 |
---|---|
date | Sat, 22 Feb 2014 18:25:18 +0100 |
parents | 080fd5a5433d |
children | afca92154795 |
files | NPC.cpp NPC.h UI/UiGame.cpp mm7_4.cpp mm7_data.cpp mm7_data.h mm7_unsorted_subs.h |
diffstat | 7 files changed, 46 insertions(+), 56 deletions(-) [+] |
line wrap: on
line diff
--- a/NPC.cpp Wed Feb 19 22:30:39 2014 +0100 +++ b/NPC.cpp Sat Feb 22 18:25:18 2014 +0100 @@ -19,6 +19,9 @@ int uNumDialogueNPCPortraits; // weak struct NPCStats *pNPCStats = nullptr; +int NPCStats::dword_AE336C_LastMispronouncedNameFirstLetter = -1; +int NPCStats::dword_AE3370_LastMispronouncedNameResult = -1; + void InitializeAwards(); void InitializeScrolls(); void InitializeMerchants(); @@ -891,6 +894,43 @@ pNPCDataBuff->evt_F = 0; } + +//----- (00495366) -------------------------------------------------------- +char *NPCStats::sub_495366_MispronounceName(unsigned __int8 firstLetter, unsigned __int8 genderId) +{ + int pickedName; // edx@2 + + if ( firstLetter == dword_AE336C_LastMispronouncedNameFirstLetter) + pickedName = dword_AE3370_LastMispronouncedNameResult; + else + { + dword_AE336C_LastMispronouncedNameFirstLetter = firstLetter; + if ( this->uNumNPCNames[genderId] == 0 ) + pickedName = rand() % this->uNumNPCNames[(genderId + 1) % 2]; //originally without " + 1) % 2", but that would yield a div by zero + else + { + int rangeBottom = 0; + int rangeTop = 0; + for ( int i = 0; i < this->uNumNPCNames[genderId]; ++i ) + { + if (tolower(this->pNPCNames[i][genderId][0])) + { + if ( rangeBottom ) + rangeTop = i; + else + rangeBottom = i; + } + } + if ( rangeTop != 0 ) + pickedName = rangeBottom + rand() % (rangeTop - rangeBottom); + else + pickedName = rand() % this->uNumNPCNames[genderId]; + } + } + dword_AE3370_LastMispronouncedNameResult = pickedName; + return this->pNPCNames[pickedName][genderId]; +} + //----- (00476387) -------------------------------------------------------- bool PartyHasDragon() {
--- a/NPC.h Wed Feb 19 22:30:39 2014 +0100 +++ b/NPC.h Sat Feb 22 18:25:18 2014 +0100 @@ -161,6 +161,7 @@ void Release(); void InitializeAdditionalNPCs(NPCData *pNPCDataBuff, int npc_uid, int uLocation2D, int uMapId); void _476C60(); + char * sub_495366_MispronounceName(unsigned __int8 firstLetter, unsigned __int8 genderId); NPCData pNPCData[501]; //0 - 94BCh count from 1 @@ -190,6 +191,9 @@ char *pNPCDistTXT_Raw; char *pNPCGreetTXT_Raw; char *pNCPGroupTXT_Raw; + + static int dword_AE336C_LastMispronouncedNameFirstLetter; + static int dword_AE3370_LastMispronouncedNameResult; }; #pragma pack(pop)
--- a/UI/UiGame.cpp Wed Feb 19 22:30:39 2014 +0100 +++ b/UI/UiGame.cpp Sat Feb 22 18:25:18 2014 +0100 @@ -246,7 +246,7 @@ char pContainer[32]; // [sp+14h] [bp-28h]@3 dword_A74CDC = -1; - dword_AE336C = -1; + pNPCStats->dword_AE336C_LastMispronouncedNameFirstLetter = -1; pEventTimer->Pause(); pMiscTimer->Pause(); pAudioPlayer->StopChannels(-1, -1);
--- a/mm7_4.cpp Wed Feb 19 22:30:39 2014 +0100 +++ b/mm7_4.cpp Sat Feb 22 18:25:18 2014 +0100 @@ -1160,55 +1160,6 @@ return 1; } -//----- (00495366) -------------------------------------------------------- -char *__fastcall sub_495366(unsigned __int8 a1, unsigned __int8 a2) -{ - int v2; // edi@1 - int v3; // edx@2 - //int v4; // esi@3 - int v5; // ebx@5 - signed int v7; // [sp+Ch] [bp-14h]@1 - signed int v8; // [sp+10h] [bp-10h]@1 - int **v9; // [sp+14h] [bp-Ch]@4 - signed int v10; // [sp+18h] [bp-8h]@3 - unsigned __int8 v11; // [sp+1Ch] [bp-4h]@1 - - v2 = a1; - v11 = a2; - v8 = 0; - v7 = 0; - if ( dword_AE336C == a1 ) - v3 = dword_AE3370; - else - { - //v4 = a2; - dword_AE336C = a1; - if ( (signed int)pNPCStats->uNumNPCNames[a2] <= 0 ) - v3 = rand() % (signed int)pNPCStats->uNumNPCNames[a2]; - else - { - v9 = (int **)((char *)pNPCStats->pNPCNames + a2 * 4); - for ( v10 = 0; v10 < (signed int)pNPCStats->uNumNPCNames[a2]; ++v10 ) - { - v5 = tolower(*(char *)*v9); - if ( v5 == tolower(v2) ) - { - if ( v8 ) - v7 = v10; - else - v8 = v10; - } - v9 += 2; - } - if ( v8 && v8 != v7 ) - v3 = v8 + rand() % (v7 - v8); - else - v3 = rand() % (signed int)pNPCStats->uNumNPCNames[a2]; - } - } - dword_AE3370 = v3; - return pNPCStats->pNPCNames[0][v11 + 2 * v3]; -} //----- (00495430) -------------------------------------------------------- @@ -1414,7 +1365,7 @@ i += 2; break; case 13: - strcat(pTmpBuf2.data(), sub_495366(pPlayer->pName[0], pPlayer->uSex)); + strcat(pTmpBuf2.data(), pNPCStats->sub_495366_MispronounceName(pPlayer->pName[0], pPlayer->uSex)); dst = strlen(pTmpBuf2.data()); i += 2; break;
--- a/mm7_data.cpp Wed Feb 19 22:30:39 2014 +0100 +++ b/mm7_data.cpp Sat Feb 22 18:25:18 2014 +0100 @@ -1103,8 +1103,6 @@ std::array<const char *, 36> pClassNames; std::array<const char *, 19> aCharacterConditionNames; std::array<const char *, 38> pSkillNames; -int dword_AE336C; // weak -int dword_AE3370; // weak char byte_AE5B91; // weak std::array<int, 32> dword_F1B430; // weak //int dword_F8B144; // nexindex [-1] to the following
--- a/mm7_data.h Wed Feb 19 22:30:39 2014 +0100 +++ b/mm7_data.h Sat Feb 22 18:25:18 2014 +0100 @@ -754,8 +754,6 @@ extern std::array<const char *, 36> pClassNames; extern std::array<const char *, 19> aCharacterConditionNames; extern std::array<const char *, 38> pSkillNames; -extern int dword_AE336C; // weak -extern int dword_AE3370; // weak extern char byte_AE5B91; // weak extern std::array<int, 32> dword_F1B430; // weak extern std::array<int, 4> player_levels;
--- a/mm7_unsorted_subs.h Wed Feb 19 22:30:39 2014 +0100 +++ b/mm7_unsorted_subs.h Sat Feb 22 18:25:18 2014 +0100 @@ -205,7 +205,6 @@ void init_summoned_item(struct stru351_summoned_item *_this, __int64 duration); void _494035_timed_effects__water_walking_damage__etc(); unsigned int __fastcall _494820_training_time(unsigned int a1); -char *__fastcall sub_495366(unsigned __int8 a1, unsigned __int8 a2); const char *GetReputationString(signed int a1); char *BuildDialogueString(const char *lpsz, unsigned __int8 uPlayerID, struct ItemGen *a3, char *a4, int a5, __int64 *a6); void PlayerCreationUI_Draw();