Mercurial > mm7
changeset 2275:8193a64c7461
Слияние
author | Ritor1 |
---|---|
date | Fri, 14 Mar 2014 09:32:42 +0600 |
parents | 90f56da08d76 (current diff) 42b6a910b5d8 (diff) |
children | e2433db49428 |
files | DecorationList.cpp Render.cpp |
diffstat | 25 files changed, 1413 insertions(+), 2567 deletions(-) [+] |
line wrap: on
line diff
--- a/Build/Visual Studio 2012/World of Might and Magic.vcxproj Fri Mar 14 09:32:25 2014 +0600 +++ b/Build/Visual Studio 2012/World of Might and Magic.vcxproj Fri Mar 14 09:32:42 2014 +0600 @@ -168,6 +168,7 @@ <ClCompile Include="..\..\LOD.cpp" /> <ClCompile Include="..\..\Log.cpp" /> <ClCompile Include="..\..\LuaVM.cpp" /> + <ClCompile Include="..\..\MapInfo.cpp" /> <ClCompile Include="..\..\mm7text_ru.cpp" /> <ClCompile Include="..\..\mm7_2.cpp" /> <ClCompile Include="..\..\mm7_3.cpp" />
--- a/Build/Visual Studio 2012/World of Might and Magic.vcxproj.filters Fri Mar 14 09:32:25 2014 +0600 +++ b/Build/Visual Studio 2012/World of Might and Magic.vcxproj.filters Fri Mar 14 09:32:42 2014 +0600 @@ -334,6 +334,7 @@ <ClCompile Include="..\..\UI\Books\UISpellBook.cpp"> <Filter>UI\Books</Filter> </ClCompile> + <ClCompile Include="..\..\MapInfo.cpp" /> </ItemGroup> <ItemGroup> <ClInclude Include="..\..\Level\Decoration.h" />
--- a/Chest.cpp Fri Mar 14 09:32:25 2014 +0600 +++ b/Chest.cpp Fri Mar 14 09:32:42 2014 +0600 @@ -302,26 +302,26 @@ item_texture = pIcons_LOD->GetTexture(item_texture_id); v6 = item_texture->uTextureWidth; if ( v6 < 14 ) - v6 = 14; + v6 = 14; texture_cell_width = ((v6 - 14) >> 5) + 1; v8 = item_texture->uTextureHeight; if ( v8 < 14 ) v8 = 14; texture_cell_height = ((v8 - 14) >> 5) + 1; if ( !areWeLoadingTexture ) - { - item_texture->Release(); - pIcons_LOD->SyncLoadedFilesCount(); - } + { + item_texture->Release(); + pIcons_LOD->SyncLoadedFilesCount(); + } if ( (texture_cell_width + test_cell_position % chest_cell_width <= chest_cell_width) && (texture_cell_height + test_cell_position / chest_cell_width <= chest_cell_heght) ) - { //we not put over borders + { //we not put over borders _row = 0; if ( texture_cell_height <= 0 ) return true; _cell_rows = 0; while ( 1 ) - { + { _column = 0; if ( texture_cell_width > 0 ) { @@ -353,19 +353,17 @@ item_count = 0; max_items = pChestWidthsByType[pChests[uChestID].uChestBitmapID] * pChestHeightsByType[pChests[uChestID].uChestBitmapID]; if ( max_items <= 0 ) - { item_count = -1; - } else { while ( pChests[uChestID].igChestItems[item_count].uItemID ) { ++item_count; if ( item_count >= max_items ) - { - item_count = -1; - break; - } + { + item_count = -1; + break; + } } } return item_count; @@ -373,14 +371,13 @@ //----- (0041FFA2) -------------------------------------------------------- int Chest::PutItemInChest(int position, ItemGen *put_item, signed int uChestID) -{ - int v3; // eax@1 +{//(rus: ) ItemGen *v4; // edi@1 int v5; // esi@1 int result; // eax@11 unsigned int v7; // eax@12 int v8; // edx@12 - Texture *v9; // ecx@12 + Texture *texture; // ecx@12 signed int v10; // eax@12 signed int v11; // edi@14 unsigned int v12; // esi@14 @@ -397,11 +394,10 @@ int v23; // [sp+20h] [bp-4h]@19 v21 = 0; - v3 = pChests[uChestID].uChestBitmapID; v4 = put_item; - v5 = pChestWidthsByType[v3] * pChestHeightsByType[v3]; + v5 = pChestWidthsByType[pChests[uChestID].uChestBitmapID] * pChestHeightsByType[pChests[uChestID].uChestBitmapID]; Src = put_item; - v19 = pChestWidthsByType[v3]; + v19 = pChestWidthsByType[pChests[uChestID].uChestBitmapID]; if ( position == -1 ) { item_in_chest_count = CountChestItems(uChestID); @@ -410,9 +406,7 @@ for( int _i = 0; _i < v5; _i++) { if ( Chest::CanPlaceItemAt(_i, v4->uItemID, pChestWindow->par1C) ) - { v21 = _i; - } } if ( v21 == v5 ) { @@ -422,18 +416,18 @@ } v7 = pIcons_LOD->LoadTexture(v4->GetIconName(), TEXTURE_16BIT_PALETTE); HIWORD(v8) = 0; - v9 = pIcons_LOD->GetTexture(v7); - v10 = v9->uTextureWidth; - if ( v10 < 14 ) + texture = pIcons_LOD->GetTexture(v7); + v10 = texture->uTextureWidth; + if ( texture->uTextureWidth < 14 ) v10 = 14; - v11 = v9->uTextureHeight; v12 = ((v10 - 14) >> 5) + 1; - if ( v11 < 14 ) + v11 = texture->uTextureHeight; + if ( texture->uTextureHeight < 14 ) v11 = 14; v13 = ((v11 - 14) >> 5) + 1; if ( !areWeLoadingTexture ) { - ((Texture *)v9)->Release(); + texture->Release(); pIcons_LOD->SyncLoadedFilesCount(); } if ( v13 > 0 ) @@ -466,62 +460,58 @@ result = v21 + 1; } else - { result = 1; - } return result; } // 506128: using guessed type int areWeLoadingTexture; //----- (0042013E) -------------------------------------------------------- void Chest::PlaceItemAt( unsigned int put_cell_pos, unsigned int item_at_cell, signed int uChestID ) - { - int uItemID; // edi@1 - int v6; // edx@4 - unsigned int v7; // eax@5 - Texture *v8; // ecx@5 - signed int v9; // eax@5 - signed int v10; // edi@7 - unsigned int texture_cell_width; // ebx@7 - int textute_cell_height; // edi@9 - int chest_cell_row_pos; // edx@12 - int chest_cell_width; // [sp+10h] [bp-Ch]@11 +{ + int uItemID; // edi@1 + int v6; // edx@4 + unsigned int v7; // eax@5 + Texture *texture; // ecx@5 + signed int v9; // eax@5 + signed int v10; // edi@7 + unsigned int texture_cell_width; // ebx@7 + int textute_cell_height; // edi@9 + int chest_cell_row_pos; // edx@12 + int chest_cell_width; // [sp+10h] [bp-Ch]@11 - uItemID = pChests[ uChestID].igChestItems[item_at_cell].uItemID; - pItemsTable->SetSpecialBonus(&pChests[ uChestID].igChestItems[item_at_cell]); - if ( uItemID >= 135 && uItemID <= 159 && !pChests[ uChestID].igChestItems[item_at_cell].uNumCharges) - { - v6 = rand() % 21 + 10; - pChests[ uChestID].igChestItems[item_at_cell].uNumCharges = v6; - pChests[ uChestID].igChestItems[item_at_cell].uMaxCharges = v6; - } - v7 = pIcons_LOD->LoadTexture(pItemsTable->pItems[uItemID].pIconName, TEXTURE_16BIT_PALETTE); - v8 = pIcons_LOD->GetTexture(v7); - v9 = v8->uTextureWidth; - if ( v9 < 14 ) - v9 = 14; - v10 = v8->uTextureHeight; - texture_cell_width = ((v9 - 14) >> 5) + 1; - if ( v10 < 14 ) - v10 = 14; - textute_cell_height = ((v10 - 14) >> 5) + 1; - if ( !areWeLoadingTexture ) - { - v8->Release(); - pIcons_LOD->SyncLoadedFilesCount(); - } - chest_cell_width = pChestWidthsByType[pChests[ uChestID].uChestBitmapID]; - chest_cell_row_pos = 0; - for(int i=0; i<textute_cell_height; ++i) - { - for (int j=0; j<texture_cell_width; ++j) - { - pChests[uChestID].pInventoryIndices[put_cell_pos + chest_cell_row_pos+j]=(signed __int16)-(put_cell_pos+1); - } - chest_cell_row_pos += chest_cell_width; - } - pChests[uChestID].pInventoryIndices[put_cell_pos] = item_at_cell + 1; - } + uItemID = pChests[ uChestID].igChestItems[item_at_cell].uItemID; + pItemsTable->SetSpecialBonus(&pChests[ uChestID].igChestItems[item_at_cell]); + if ( uItemID >= 135 && uItemID <= 159 && !pChests[ uChestID].igChestItems[item_at_cell].uNumCharges) + { + v6 = rand() % 21 + 10; + pChests[ uChestID].igChestItems[item_at_cell].uNumCharges = v6; + pChests[ uChestID].igChestItems[item_at_cell].uMaxCharges = v6; + } + v7 = pIcons_LOD->LoadTexture(pItemsTable->pItems[uItemID].pIconName, TEXTURE_16BIT_PALETTE); + texture = pIcons_LOD->GetTexture(v7); + v9 = texture->uTextureWidth; + if ( texture->uTextureWidth < 14 ) + v9 = 14; + texture_cell_width = ((v9 - 14) >> 5) + 1; + v10 = texture->uTextureHeight; + if ( texture->uTextureHeight < 14 ) + v10 = 14; + textute_cell_height = ((v10 - 14) >> 5) + 1; + if ( !areWeLoadingTexture ) + { + texture->Release(); + pIcons_LOD->SyncLoadedFilesCount(); + } + chest_cell_width = pChestWidthsByType[pChests[ uChestID].uChestBitmapID]; + chest_cell_row_pos = 0; + for(int i = 0; i < textute_cell_height; ++i) + { + for (int j = 0; j < texture_cell_width; ++j) + pChests[uChestID].pInventoryIndices[put_cell_pos + chest_cell_row_pos+j]=(signed __int16)-(put_cell_pos+1); + chest_cell_row_pos += chest_cell_width; + } + pChests[uChestID].pInventoryIndices[put_cell_pos] = item_at_cell + 1; +} // 506128: using guessed type int areWeLoadingTexture; //----- (00420284) -------------------------------------------------------- @@ -581,34 +571,29 @@ //----- (00448A17) -------------------------------------------------------- void Chest::ToggleFlag(signed int uChestID, unsigned __int16 uFlag, unsigned int bToggle) - { - unsigned __int16 *pFlags; // eax@3 - - if ( uChestID >= 0 && uChestID <= 19 ) - { - pFlags = &pChests[uChestID].uFlags; - if ( bToggle ) - *pFlags |= uFlag; - else - *pFlags &= ~uFlag; - } - } +{ + if ( uChestID >= 0 && uChestID <= 19 ) + { + if ( bToggle ) + pChests[uChestID].uFlags |= uFlag; + else + pChests[uChestID].uFlags &= ~uFlag; + } +} //----- (00458B03) -------------------------------------------------------- void ChestList::ToFile() { - ChestList *v1; // esi@1 FILE *v2; // eax@1 FILE *v3; // edi@1 - v1 = this; v2 = fopen("data\\dchest.bin", "wb"); v3 = v2; if ( !v2 ) Error("Unable to save dchest.bin!"); - fwrite(v1, 4u, 1u, v2); - fwrite(v1->pChests, 0x24u, v1->uNumChests, v3); + fwrite(this, 4, 1, v2); + fwrite(this->pChests, 36, this->uNumChests, v3); fclose(v3); } @@ -634,7 +619,7 @@ //----- (00458B9C) -------------------------------------------------------- int ChestList::FromFileTxt(const char *Args) { - ChestList *v2; // ebx@1 + //ChestList *v2; // ebx@1 __int32 v3; // edi@1 FILE *v4; // eax@1 unsigned int v5; // esi@3 @@ -652,11 +637,11 @@ FILE *File; // [sp+2F4h] [bp-4h]@1 unsigned int Argsa; // [sp+300h] [bp+8h]@3 - v2 = this; + //v2 = this; free(this->pChests); v3 = 0; - v2->pChests = 0; - v2->uNumChests = 0; + this->pChests = 0; + this->uNumChests = 0; v4 = fopen(Args, "r"); File = v4; if ( !v4 ) @@ -677,16 +662,16 @@ v5 = Argsa; v3 = 0; } - v6 = v2->pChests; - v2->uNumChests = v5; + v6 = this->pChests; + this->uNumChests = v5; v7 = malloc(36 * v5); - v2->pChests = (ChestDesc *)v7; + this->pChests = (ChestDesc *)v7; if ( v7 == (void *)v3 ) Error("ChestDescriptionList::load - Out of Memory!"); - memset(v7, v3, 36 * v2->uNumChests); + memset(v7, v3, 36 * this->uNumChests); v8 = File; - v2->uNumChests = v3; + this->uNumChests = v3; fseek(v8, v3, v3); for ( i = fgets(&Buf, 490, File); i; i = fgets(&Buf, 490, File) ) { @@ -694,14 +679,14 @@ memcpy(&v17, txt_file_frametable_parser(&Buf, &v16), sizeof(v17)); if ( v17.uPropCount && *v17.pProperties[0] != 47 ) { - strcpy(v2->pChests[v2->uNumChests].pName, v17.pProperties[0]); + strcpy(this->pChests[this->uNumChests].pName, v17.pProperties[0]); v10 = atoi(v17.pProperties[1]); v11 = v17.pProperties[2]; - v2->pChests[v2->uNumChests].uWidth = v10; + this->pChests[this->uNumChests].uWidth = v10; v12 = atoi(v11); v13 = v17.pProperties[3]; - v2->pChests[v2->uNumChests].uHeight = v12; - v2->pChests[v2->uNumChests++].uTextureID = atoi(v13); + this->pChests[this->uNumChests].uHeight = v12; + this->pChests[this->uNumChests++].uTextureID = atoi(v13); } } fclose(File); @@ -710,11 +695,10 @@ //----- (00420B13) -------------------------------------------------------- void __fastcall sub_420B13(int a1, int a2) -{ +{ //Give item from chest(rus: ) void *v2; // eax@1 - ItemGen *v3; // ebx@1 unsigned int v4; // eax@1 - Texture *v5; // ecx@1 + Texture *texture; // ecx@1 signed int v6; // eax@1 signed int v7; // edi@3 signed int v8; // eax@3 @@ -728,85 +712,68 @@ int i; // ecx@10 int v17; // [sp+Ch] [bp-14h]@1 int v18; // [sp+10h] [bp-10h]@3 - int v19; // [sp+14h] [bp-Ch]@1 - int v20; // [sp+18h] [bp-8h]@1 int v21; // [sp+1Ch] [bp-4h]@5 int v22; // [sp+1Ch] [bp-4h]@8 - v19 = a2; - v2 = pChestWindow->ptr_1C; - v20 = (int)v2; - v2 = (void *)(5324 * (int)v2); - //v3 = (ItemGen *)((char *)v2 + 36 * a1 + (int)((char *)pChests + 4)); - v3 = &pChests[v20].igChestItems[a1]; - //v17 = pChestWidthsByType[*(short *)((char *)v2 + (int)pChests)]; - v17 = pChestWidthsByType[pChests[v20].uChestBitmapID]; - v4 = pIcons_LOD->LoadTexture(v3->GetIconName(), TEXTURE_16BIT_PALETTE); - v5 = pIcons_LOD->GetTexture(v4); - v6 = v5->uTextureWidth; - if ( v6 < 14 ) - v6 = 14; + v2 = (void *)(5324 * (int)pChestWindow->ptr_1C); + v17 = pChestWidthsByType[pChests[(int)pChestWindow->ptr_1C].uChestBitmapID]; + v4 = pIcons_LOD->LoadTexture(pChests[(int)pChestWindow->ptr_1C].igChestItems[a1].GetIconName(), TEXTURE_16BIT_PALETTE); + texture = pIcons_LOD->GetTexture(v4); + + v6 = texture->uTextureWidth; + if ( texture->uTextureWidth < 14 ) + v6 = 14; v7 = v6 - 14; - v8 = v5->uTextureHeight; v9 = (v7 >> 5) + 1; v18 = v9; - if ( v8 < 14 ) - v8 = 14; + + v8 = texture->uTextureHeight; + if ( texture->uTextureHeight < 14 ) + v8 = 14; v10 = ((v8 - 14) >> 5) + 1; v21 = v10; + if ( !areWeLoadingTexture ) { - v5->Release(); - pIcons_LOD->SyncLoadedFilesCount(); - v10 = v21; + texture->Release(); + pIcons_LOD->SyncLoadedFilesCount(); + v10 = v21; } if ( v10 > 0 ) { - v11 = 0; - v22 = v10; - do + v11 = 0; + for ( v22 = v10; v22; --v22 ) + { + if ( v9 > 0 ) { - if ( v9 > 0 ) - { - v12 = v9; - //v13 = &pChests[0].pInventoryIndices[v19 + v11 + 2662 * (int)v20]; - v13 = &pChests[v20].pInventoryIndices[v19 + v11]; - v14 = v12 & 1; - v12 >>= 1; - memset(v13, 0, 4 * v12); - v15 = (int)((char *)v13 + 4 * v12); - for ( i = v14; i; --i ) - { - *(short *)v15 = 0; - v15 += 2; - } - v9 = v18; - } - v11 += v17; - --v22; + v12 = v9; + v13 = &pChests[(int)pChestWindow->ptr_1C].pInventoryIndices[a2 + v11]; + v14 = v12 & 1; + v12 >>= 1; + memset(&pChests[(int)pChestWindow->ptr_1C].pInventoryIndices[a2 + v11], 0, 4 * v12); + v15 = (int)((char *)v13 + 4 * v12); + for ( i = v14; i; --i ) + { + *(short *)v15 = 0; + v15 += 2; + } + v9 = v18; } - while ( v22 ); + v11 += v17; + } } - v3->Reset(); + pChests[(int)pChestWindow->ptr_1C].igChestItems[a1].Reset(); } // 506128: using guessed type int areWeLoadingTexture; //----- (00420E01) -------------------------------------------------------- void OnChestLeftClick() { - int chest_id; // edi@1 - POINT *v1; // esi@2 int v2; // eax@2 int v3; // ebx@4 int v4; // esi@6 - int v5; // ecx@6 - //SpriteObject v6; // [sp+Ch] [bp-80h]@1 - POINT v7; // [sp+7Ch] [bp-10h]@2 - POINT a2; // [sp+84h] [bp-8h]@2 + POINT cursor; // [sp+84h] [bp-8h]@2 SpriteObject v6; // [sp+Ch] [bp-80h]@1 - //SpriteObject::SpriteObject(&v6); - - chest_id = pGUIWindow_CurrentMenu->par1C; if ( pParty->pPickedItem.uItemID ) { if ( Chest::PutItemInChest(-1, &pParty->pPickedItem, pGUIWindow_CurrentMenu->par1C) ) @@ -814,24 +781,22 @@ } else { - v1 = pMouse->GetCursorPos(&a2); - v2 = pRenderer->pActiveZBuffer[v1->x + pSRZBufferLineOffsets[pMouse->GetCursorPos(&v7)->y]] & 0xFFFF; + pMouse->GetCursorPos(&cursor); + v2 = pRenderer->pActiveZBuffer[cursor.x + pSRZBufferLineOffsets[cursor.y]] & 0xFFFF; if ( v2 ) { if ( v2 ) v3 = v2 - 1; else v3 = -1; - v4 = pChests[chest_id].pInventoryIndices[v3] - 1; - if ( pChests[chest_id].igChestItems[v4].GetItemEquipType() == EQUIP_GOLD ) + v4 = pChests[(int)pGUIWindow_CurrentMenu->par1C].pInventoryIndices[v3] - 1; + if ( pChests[(int)pGUIWindow_CurrentMenu->par1C].igChestItems[v4].GetItemEquipType() == EQUIP_GOLD ) { - pParty->PartyFindsGold(pChests[chest_id].igChestItems[v4].uSpecEnchantmentType, 0); + pParty->PartyFindsGold(pChests[(int)pGUIWindow_CurrentMenu->par1C].igChestItems[v4].uSpecEnchantmentType, 0); viewparams->bRedrawGameUI = 1; } else - { - pParty->SetHoldingItem(&pChests[chest_id].igChestItems[v4]); - } + pParty->SetHoldingItem(&pChests[(int)pGUIWindow_CurrentMenu->par1C].igChestItems[v4]); sub_420B13(v4, v3); } }
--- a/Conditions.cpp Fri Mar 14 09:32:25 2014 +0600 +++ b/Conditions.cpp Fri Mar 14 09:32:42 2014 +0600 @@ -28,16 +28,14 @@ bool ConditionProcessor::IsPlayerAffected( Player* inPlayer, int condToCheck, int blockable) { if ( !blockable ) - { return true; - } ConditionProcessor* thisProc = &conditionArray[condToCheck]; if (thisProc->m_IsBlockedByProtFromMagic && pParty->pPartyBuffs[PARTY_BUFF_PROTECTION_FROM_MAGIC].uExpireTime > 0) { if (!(thisProc->m_DoesNeedGmProtFromMagic && pParty->pPartyBuffs[PARTY_BUFF_PROTECTION_FROM_MAGIC].uSkill < 4)) { --pParty->pPartyBuffs[PARTY_BUFF_PROTECTION_FROM_MAGIC].uPower; - if ( pParty->pPartyBuffs[PARTY_BUFF_PROTECTION_FROM_MAGIC].uPower < 1u ) + if ( pParty->pPartyBuffs[PARTY_BUFF_PROTECTION_FROM_MAGIC].uPower < 1 ) pParty->pPartyBuffs[PARTY_BUFF_PROTECTION_FROM_MAGIC].Reset(); return false; } @@ -50,24 +48,18 @@ for (unsigned int i = 0; i < thisProc->m_equipmentPairs.size() / 2; i++) { if (thisProc->m_equipmentPairs[i * 2].m_ItemId == (ITEM_TYPE)0) - { return true; - } ITEM_TYPE itemId = thisProc->m_equipmentPairs[i * 2].m_ItemId; ITEM_EQUIP_TYPE slot = thisProc->m_equipmentPairs[i * 2 + 1].m_EquipSlot; if (slot == EQIUP_ANY) { if (inPlayer->WearsItemAnyWhere(itemId)) - { return false; - } } else { if (inPlayer->WearsItem(itemId, slot)) - { return false; - } } } return true;
--- a/DecalBuilder.cpp Fri Mar 14 09:32:25 2014 +0600 +++ b/DecalBuilder.cpp Fri Mar 14 09:32:42 2014 +0600 @@ -32,16 +32,10 @@ result = 0.0; } else - { result = 1.0; - } return result; } - - - - //----- (0043B6EF) -------------------------------------------------------- void BloodsplatContainer::AddBloodsplat(float x, float y, float z, float radius, char r, char g, char b) { @@ -53,7 +47,7 @@ if ( this->uNumBloodsplats == 64 ) v8 = 0; v9 = 5 * (v8 + 1); - v10 = &this->std__vector_pBloodsplats[8 * v9 / 0x28u]; + v10 = &this->std__vector_pBloodsplats[8 * v9 / 40]; v10->x = x; v10->y = y; v10->z = z; @@ -469,12 +463,12 @@ char DecalBuilder::ApplyDecals_OutdoorFace(ODMFace *pFace) { double v8; // st7@12 - unsigned int v10; // [sp+20h] [bp-1Ch]@1 + //unsigned int v10; // [sp+20h] [bp-1Ch]@1 Bloodsplat *pBloodsplat; this->uNumDecals = 0; - v10 = pBloodsplatContainer->std__vector_pBloodsplats_size; + //v10 = pBloodsplatContainer->std__vector_pBloodsplats_size; if ( !pFace->Indoor_sky() && !pFace->Fluid() ) { for(int i = 0; i < pBloodsplatContainer->std__vector_pBloodsplats_size; i++ ) @@ -506,28 +500,28 @@ bool DecalBuilder::_49BE8A(struct Polygon *a2, Vec3_float_ *_a3, float *a4, RenderVertexSoft *a5, unsigned int uStripType, char a7) { bool result; // eax@1 - RenderVertexSoft *v8; // edi@3 - Vec3_float_ *v9; // ebx@3 - Bloodsplat *v10; // esi@3 - float v11; // eax@5 + //RenderVertexSoft *v8; // edi@3 + //Vec3_float_ *v9; // ebx@3 + //Bloodsplat *v10; // esi@3 + //float v11; // eax@5 float v12; // eax@6 - double v13; // st7@13 + //double v13; // st7@13 double v14; // st7@19 - short v15; // eax@20 + //short v15; // eax@20 int v16; // eax@22 - int v17; // edx@24 - DecalBuilder *v18; // eax@24 + //int v17; // edx@24 + //DecalBuilder *v18; // eax@24 std::string v19; // [sp-18h] [bp-54h]@12 const char *v20; // [sp-8h] [bp-44h]@12 - int v21; // [sp-4h] [bp-40h]@12 + //int v21; // [sp-4h] [bp-40h]@12 double v22; // [sp+Ch] [bp-30h]@19 unsigned int v23; // [sp+14h] [bp-28h]@1 - DecalBuilder *v24; // [sp+18h] [bp-24h]@1 - int v25; // [sp+1Ch] [bp-20h]@19 + //DecalBuilder *v24; // [sp+18h] [bp-24h]@1 + //int v25; // [sp+1Ch] [bp-20h]@19 float v26; // [sp+20h] [bp-1Ch]@12 int v27; // [sp+24h] [bp-18h]@12 float v28; // [sp+28h] [bp-14h]@13 - float v29; // [sp+2Ch] [bp-10h]@7 + //float v29; // [sp+2Ch] [bp-10h]@7 float v30; // [sp+30h] [bp-Ch]@6 float v31; // [sp+34h] [bp-8h]@6 bool v32; // [sp+38h] [bp-4h]@2 @@ -535,92 +529,91 @@ this->uNumDecals = 0; result = pBloodsplatContainer->std__vector_pBloodsplats_size != 0; - v24 = this; + // v24 = this; v23 = pBloodsplatContainer->std__vector_pBloodsplats_size; if ( pBloodsplatContainer->std__vector_pBloodsplats_size ) { - v32 = 0; + if ( (signed int)pBloodsplatContainer->std__vector_pBloodsplats_size > 0 ) { - v8 = a5; - v9 = _a3; - v10 = pBloodsplatContainer->std__vector_pBloodsplats; - while ( v32 < (signed int)v23) + //v8 = a5; + //v9 = _a3; + for ( v32 = 0; v32 < (signed int)v23; ++v32 ) { - if ( uStripType == 4 ) - { - a3 = v8->vWorldPosition.x; - v11 = v8[3].vWorldPosition.x; - v31 = v11; - v30 = v8[1].vWorldPosition.y; - v12 = v8->vWorldPosition.y; - v29 = v12; - } - else if ( uStripType == 3 ) + if ( uStripType == 4 ) + { + a3 = a5->vWorldPosition.x; + //v11 = v8[3].vWorldPosition.x; + v31 = a5[3].vWorldPosition.x; + v30 = a5[1].vWorldPosition.y; + v12 = a5->vWorldPosition.y; + //v29 = v12; + } + else if ( uStripType == 3 ) { if ( a7 ) { - a3 = v8->vWorldPosition.x; - v31 = v8[2].vWorldPosition.x; - v30 = v8[1].vWorldPosition.y; - v12 = v8[2].vWorldPosition.y; - v29 = v12; + a3 = a5->vWorldPosition.x; + v31 = a5[2].vWorldPosition.x; + v30 = a5[1].vWorldPosition.y; + v12 = a5[2].vWorldPosition.y; + //v29 = v12; } else { - a3 = v8[1].vWorldPosition.x; - v11 = v8[2].vWorldPosition.x; - v31 = v11; - v30 = v8[1].vWorldPosition.y; - v12 = v8->vWorldPosition.y; - v29 = v12; + a3 = a5[1].vWorldPosition.x; + //v11 = v8[2].vWorldPosition.x; + v31 = a5[2].vWorldPosition.x; + v30 = a5[1].vWorldPosition.y; + v12 = a5->vWorldPosition.y; + //v29 = v12; } } else MessageBoxW(nullptr, L"Uknown strip type detected!", L"E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\PolyProjector.cpp:434", 0); - v21 = uStripType; - v13 = pGame->pIndoorCameraD3D->GetPolygonMinZ(v8, uStripType); - v21 = uStripType; - v28 = v13; - v26 = pGame->pIndoorCameraD3D->GetPolygonMaxZ(v8, uStripType); - if ( a3 - v10->radius < v10->x && - v31 + v10->radius > v10->x && - v30 - v10->radius < v10->y && - v29 + v10->radius > v10->y && - v28 - v10->radius < v10->z && - v26 + v10->radius > v10->z ) + //v21 = uStripType; + //v13 = pGame->pIndoorCameraD3D->GetPolygonMinZ(v8, uStripType); + //v21 = uStripType; + v28 = pGame->pIndoorCameraD3D->GetPolygonMinZ(a5, uStripType); + v26 = pGame->pIndoorCameraD3D->GetPolygonMaxZ(a5, uStripType); + if ( a3 - pBloodsplatContainer->std__vector_pBloodsplats[v32].radius < pBloodsplatContainer->std__vector_pBloodsplats[v32].x && + v31 + pBloodsplatContainer->std__vector_pBloodsplats[v32].radius > pBloodsplatContainer->std__vector_pBloodsplats[v32].x && + v30 - pBloodsplatContainer->std__vector_pBloodsplats[v32].radius < pBloodsplatContainer->std__vector_pBloodsplats[v32].y && + v12 + pBloodsplatContainer->std__vector_pBloodsplats[v32].radius > pBloodsplatContainer->std__vector_pBloodsplats[v32].y && + v28 - pBloodsplatContainer->std__vector_pBloodsplats[v32].radius < pBloodsplatContainer->std__vector_pBloodsplats[v32].z && + v26 + pBloodsplatContainer->std__vector_pBloodsplats[v32].radius > pBloodsplatContainer->std__vector_pBloodsplats[v32].z ) { - Vec3_float_::NegDot(&v8->vWorldPosition, v9, a4); - v26 = v9->y * v10->y - + v9->z * v10->z - + v9->x * v10->x + Vec3_float_::NegDot(&a5->vWorldPosition, _a3, a4); + v26 = _a3->y * pBloodsplatContainer->std__vector_pBloodsplats[v32].y + + _a3->z * pBloodsplatContainer->std__vector_pBloodsplats[v32].z + + _a3->x * pBloodsplatContainer->std__vector_pBloodsplats[v32].x + *a4; v22 = v26 + 6.7553994e15; - v25 = LODWORD(v22); + //v25 = LODWORD(v22); v14 = (double)SLODWORD(v22); v28 = v14; - if ( v14 <= v10->radius ) + if ( v14 <= pBloodsplatContainer->std__vector_pBloodsplats[v32].radius ) { - v15 = a2->flags; + //v15 = a2->flags; if ( a2->flags & 2 || a2->flags & 0x100 ) { - v16 = v10->field_1C; - if ( !(v16 & 1) ) + v16 = pBloodsplatContainer->std__vector_pBloodsplats[v32].field_1C; + if ( !(pBloodsplatContainer->std__vector_pBloodsplats[v32].field_1C & 1) ) { LOBYTE(v16) = v16 | 1; - v10->field_1C = v16; - v10->field_20 = pEventTimer->Time(); + pBloodsplatContainer->std__vector_pBloodsplats[v32].field_1C = v16; + pBloodsplatContainer->std__vector_pBloodsplats[v32].field_20 = pEventTimer->Time(); } } - v17 = v32; - v10->dot_dist = LODWORD(v28); - v18 = v24; - v24->std__vector_30B00C[v24->uNumDecals] = v17; - ++v18->uNumDecals; + //v17 = v32; + pBloodsplatContainer->std__vector_pBloodsplats[v32].dot_dist = LODWORD(v28); + //v18 = this; + this->std__vector_30B00C[this->uNumDecals] = v32; + ++this->uNumDecals; } } - ++v32; - ++v10; + //++v32; + //++v10; result = v32; } }
--- a/DecorationList.cpp Fri Mar 14 09:32:25 2014 +0600 +++ b/DecorationList.cpp Fri Mar 14 09:32:42 2014 +0600 @@ -66,7 +66,6 @@ unsigned __int8 v25; // of@16 int j; // edi@17 const char *v27; // esi@18 - int v28; // eax@19 int v29; // eax@21 int v30; // eax@23 int v31; // eax@25 @@ -224,10 +223,7 @@ } } else - { - v28 = (int)&v2->pDecorations[v2->uNumDecorations].uFlags; - *(char *)v28 |= 1u; - } + v2->pDecorations[v2->uNumDecorations].uFlags |= 1; } } ++v2->uNumDecorations; @@ -239,44 +235,28 @@ //----- (00458600) -------------------------------------------------------- void DecorationList::ToFile() { - DecorationList *v1; // esi@1 FILE *v2; // eax@1 FILE *v3; // edi@1 - v1 = this; v2 = fopen("data\\ddeclist.bin", "wb"); v3 = v2; if ( !v2 ) Error("Unable to save ddeclist.bin!"); - fwrite(v1, 4u, 1u, v2); - fwrite(v1->pDecorations, 0x54u, v1->uNumDecorations, v3); + fwrite(this, 4, 1, v2); + fwrite(this->pDecorations, 84, this->uNumDecorations, v3); fclose(v3); } //----- (004488B6) -------------------------------------------------------- unsigned __int16 DecorationList::GetDecorIdByName(const char *pName) { - DecorationList *v2; // esi@1 - signed int uID; // edi@2 - signed int v4; // ebx@3 - unsigned __int16 result; // ax@6 - - v2 = this; - if ( pName && (uID = 1, (signed int)this->uNumDecorations > 1) ) + if ( pName && (signed int)this->uNumDecorations > 1 ) { - v4 = 1; - while ( _stricmp(pName, v2->pDecorations[v4].pName) ) + for ( uint uID = 1; uID < (signed int)this->uNumDecorations; ++uID ) { - ++uID; - ++v4; - if ( uID >= (signed int)v2->uNumDecorations ) - return 0; + if ( !_stricmp(pName, this->pDecorations[uID].pName) ) + return uID; } - result = uID; } - else - { - result = 0; - } - return result; + return 0; } \ No newline at end of file
--- a/Events.cpp Fri Mar 14 09:32:25 2014 +0600 +++ b/Events.cpp Fri Mar 14 09:32:42 2014 +0600 @@ -282,17 +282,8 @@ { unsigned int v3; // eax@5 signed int v4; // esi@7 - //char *v5; // eax@8 - Player *v6; // ecx@8 - //char *v7; // ebp@8 - //signed int v8; // edx@10 - //int v9; // edi@12 - //ByteArray *v10; // esi@12 int v11; // eax@14 char *v12; // eax@15 - //char *v13; // edi@21 - int v14; // ebp@21 - int v15; // edi@21 const char *v16; // esi@21 bool v17; // edx@21 int v18; // ecx@22 @@ -302,11 +293,9 @@ int v22; // edx@40 int v23; // eax@40 unsigned __int16 v24; // ax@45 - int v25; // eax@54 LevelDecoration *v26; // eax@55 int v27; // eax@57 int v28; // ecx@57 - //int v29; // edx@58 int pEventID; // eax@58 int pNPC_ID; // ecx@58 int pIndex; // esi@58 @@ -317,12 +306,8 @@ int v37; // esi@62 int v38; // eax@78 int v39; // ecx@78 - size_t v40; // edx@78 - Actor *v41; // esi@79 int v42; // eax@84 int v43; // ecx@84 - size_t v44; // edx@84 - Actor *v45; // esi@85 void *v46; // eax@91 GUIWindow *v47; // eax@93 GUIButton *v48; // ecx@93 @@ -357,16 +342,9 @@ signed int v77; // ebp@186 int v78; // edx@186 Player *v79; // esi@187 - //signed int v80; // ebp@200 - //int v81; // edx@200 Player *v82; // esi@201 int v83; // eax@212 int v84; // ebp@220 - signed int v85; // ebp@224 - char v86; // al@224 - Player *v87; // esi@227 - Player *v88; // ecx@231 - int v89; // ecx@232 int v90; // eax@243 const char *v91; // ecx@247 int v92; // eax@251 @@ -378,37 +356,24 @@ unsigned int v98; // edx@265 const char *v99; // esi@267 int v100; // edx@267 - //char *v101; // edi@281 unsigned int v102; // esi@281 int v103; // edi@284 int v104; // eax@288 int v105; // edx@294 int v106; // [sp-20h] [bp-4C8h]@278 - signed int v107; // [sp-1Ch] [bp-4C4h]@278 - unsigned int v108; // [sp-18h] [bp-4C0h]@278 signed int v109; // [sp-14h] [bp-4BCh]@278 signed int v110; // [sp-10h] [bp-4B8h]@278 - int v111; // [sp-Ch] [bp-4B4h]@278 - // Event *v112; // [sp-8h] [bp-4B0h]@5 int v113; // [sp-8h] [bp-4B0h]@106 int v114; // [sp-8h] [bp-4B0h]@117 - signed int v115; // [sp-8h] [bp-4B0h]@231 - unsigned int v116; // [sp-8h] [bp-4B0h]@278 int v117; // [sp-4h] [bp-4ACh]@106 int v118; // [sp-4h] [bp-4ACh]@117 - int v119; // [sp-4h] [bp-4ACh]@231 - int v120; // [sp-4h] [bp-4ACh]@278 int v121; // [sp-4h] [bp-4ACh]@294 int curr_seq_num; // [sp+10h] [bp-498h]@4 - //char *v123; // [sp+14h] [bp-494h]@0 - signed int v124; // [sp+18h] [bp-490h]@7 - //signed int v125; // [sp+1Ch] [bp-48Ch]@155 int v126; // [sp+1Ch] [bp-48Ch]@262 int player_choose; // [sp+20h] [bp-488h]@4 int v128; // [sp+24h] [bp-484h]@21 int v129; // [sp+24h] [bp-484h]@262 signed int v130; // [sp+28h] [bp-480h]@0 - //int v131; // [sp+2Ch] [bp-47Ch]@1 int v132; // [sp+30h] [bp-478h]@262 signed int v133; // [sp+34h] [bp-474h]@1 int v134; // [sp+38h] [bp-470h]@262 @@ -422,7 +387,6 @@ char Str[120]; // [sp+ECh] [bp-3BCh]@21 Actor Dst; // [sp+164h] [bp-344h]@53 - //v131 = uEventID; v133 = 0; EvtTargetObj = targetObj; dword_5B65C4_cancelEventProcessing = 0; @@ -434,158 +398,129 @@ return; } */ if ( !uEventID ) - { + { if ( !GameUI_Footer_TimeLeft ) ShowStatusBarString(pGlobalTXT_LocalizationStrings[521], 2u);// Nothing here return; - } + } player_choose = (uActiveCharacter == 0)?6:4; //4 - active or 6 - random player if active =0 curr_seq_num = entry_line; if ( activeLevelDecoration ) - { + { uSomeEVT_NumEvents = uGlobalEVT_NumEvents; pSomeEVT = pGlobalEVT.data(); memcpy(pSomeEVT_Events.data(), pGlobalEVT_Index.data(), sizeof(EventIndex)*4400); //4400 evts - } + } else - { + { uSomeEVT_NumEvents = uLevelEVT_NumEvents; pSomeEVT = pLevelEVT.data(); memcpy(pSomeEVT_Events.data(), pLevelEVT_Index.data(), sizeof(EventIndex)*4400); - } + } - v4 = 0; - v124 = 0; - //for (uint i = 0; i < uSomeEVT_NumEvents; ++i) - // { - //v6 = v123; - //v7 = ""; - while ( 1 ) + for ( v4 = 0; v4 < uSomeEVT_NumEvents; ++v4 ) + { + if ( dword_5B65C4_cancelEventProcessing ) { - if ( dword_5B65C4_cancelEventProcessing ) - goto LABEL_301; - //v8 = v4; + if ( v133 == 1 ) + OnMapLeave(); + return; + } if ( pSomeEVT_Events[v4].uEventID == uEventID && pSomeEVT_Events[v4].event_sequence_num == curr_seq_num ) { - //v9 = pSomeEVT_Events[v8].uEventOffsetInEVT; - //v10 = (ByteArray *)&v5[v9]; _evt_raw * _evt = (_evt_raw *)(pSomeEVT + pSomeEVT_Events[v4].uEventOffsetInEVT); switch (_evt->_e_type) - { + { case EVENT_CheckSeason: - // if ( !sub_4465DF_check_season(_evt->v5) ) - { + { ++curr_seq_num; - v4 = v124; + //v4 = v124; break; - } - v124 = -1; + } + v4 = -1; curr_seq_num = _evt->v6 - 1; ++curr_seq_num; break; case EVENT_ShowMovie: - { + { strcpy(Source, (char *)&_evt->v7); v12 = (char *)&item.uExpireTime + strlen(Source) + 7; if ( *v12 == 32 ) *v12 = 0; - if (pVideoPlayer->bBufferLoaded) + if (pVideoPlayer->bBufferLoaded) pVideoPlayer->Unload(); pVideoPlayer->bStopBeforeSchedule = 0; pVideoPlayer->pResetflag = 0; v128 = pCurrentScreen; - //v13 = &pSomeEVT[v9]; - //v14 = (unsigned __int8)v13[5]; - //v15 = (unsigned __int8)v13[6]; - v14 = _evt->v5; - v15 = _evt->v6; strcpy(Str, Source); v16 = RemoveQuotes(Str); - pVideoPlayer->MovieLoop(v16, 0, v14, 1); + pVideoPlayer->MovieLoop(v16, 0, _evt->v5, 1); if ( !_stricmp(v16, "arbiter good") ) { pParty->alignment = PartyAlignment_Good; v18 = 0; LOBYTE(v17) = 1; SetUserInterface(PartyAlignment_Good, v17); - if ( !v15 || v128 == 3 ) - { + if ( !_evt->v6 || v128 == 3 ) + { pCurrentScreen = v128; if ( v128 == 3 ) pGameLoadingUI_ProgressBar->uType = GUIProgressBar::TYPE_Fullscreen; if ( v128 == 13 ) pVideoPlayer->OpenHouseMovie(pAnimatedRooms[uCurrentHouse_Animation].video_name, 1u); - } - + } ++curr_seq_num; - v4 = v124; - - //v6 = v123; - //v7 = ""; break; - } + } if ( !_stricmp(v16, "arbiter evil") ) - { + { v18 = 2; pParty->alignment = PartyAlignment_Evil; LOBYTE(v17) = 1; SetUserInterface(PartyAlignment_Evil, v17); - if ( !v15 || v128 == 3 ) - { + if ( !_evt->v6 || v128 == 3 ) + { pCurrentScreen = v128; if ( v128 == 3 ) pGameLoadingUI_ProgressBar->uType = GUIProgressBar::TYPE_Fullscreen; if ( v128 == 13 ) pVideoPlayer->OpenHouseMovie(pAnimatedRooms[uCurrentHouse_Animation].video_name, 1u); - } + } ++curr_seq_num; - v4 = v124; - - //v6 = v123; - //v7 = ""; - break; - } + } if ( !_stricmp(v16, "pcout01") ) // moving to harmondale from emerald isle - { + { Rest(0x2760u); pParty->RestAndHeal(); pParty->days_played_without_rest = 0; - } - if ( !v15 || v128 == 3 ) - { + } + if ( !_evt->v6 || v128 == 3 ) + { pCurrentScreen = v128; if ( v128 == 3 ) pGameLoadingUI_ProgressBar->uType = GUIProgressBar::TYPE_Fullscreen; if ( v128 == 13 ) - pVideoPlayer->OpenHouseMovie(pAnimatedRooms[uCurrentHouse_Animation].video_name, 1u); - } + pVideoPlayer->OpenHouseMovie(pAnimatedRooms[uCurrentHouse_Animation].video_name, 1); + } ++curr_seq_num; - v4 = v124; - - //v6 = v123; - //v7 = ""; } break; case EVENT_CheckSkill: - { + { v19 = _evt->v7 + ((_evt->v8 + ((_evt->v9 + ((unsigned int)_evt->v10 << 8)) << 8)) << 8); if ( player_choose < 0 ) goto LABEL_47; if ( player_choose <= 3 ) - { v24 = pParty->pPlayers[0].pActiveSkills[3486 * player_choose + _evt->v5]; - } else { if ( player_choose == 4 ) - { v24 = pPlayers[uActiveCharacter]->pActiveSkills[_evt->v5]; - } else { if ( player_choose == 5 ) @@ -605,15 +540,12 @@ if ( v20 >= 4 ) { ++curr_seq_num; - v4 = v124; - - //v6 = v123; - //v7 = ""; break; } } - v11 = _evt->v11; - goto LABEL_130; + curr_seq_num = _evt->v11 - 1; + ++curr_seq_num; + break; } LABEL_47: //v10 = (ByteArray *)&v5[v9]; @@ -626,14 +558,11 @@ v139 = v24 & 0x100; if ( (v24 & 0x3F) >= v19 && *(&v136 + _evt->v6) ) { - v11 = _evt->v11; - goto LABEL_130; + curr_seq_num = _evt->v11 - 1; + ++curr_seq_num; + break; } ++curr_seq_num; - v4 = v124; - - //v6 = v123; - //v7 = ""; } break; @@ -647,29 +576,19 @@ GameUI_InitializeDialogue(&Dst, false); } else - { bDialogueUI_InitializeActor_NPC_ID = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((unsigned int)_evt->v8 << 8)) << 8)) << 8); - } ++curr_seq_num; - v4 = v124; - - //v6 = v123; - //v7 = ""; break; case EVENT_ChangeEvent: - v25 = EVT_DWORD(_evt->v5); - if ( v25 ) - { + if ( EVT_DWORD(_evt->v5) ) stru_5E4C90_MapPersistVars._decor_events[activeLevelDecoration->_idx_in_stru123] = _evt->v5 - 124; - } else - { + { v26 = (LevelDecoration *)activeLevelDecoration; stru_5E4C90_MapPersistVars._decor_events[activeLevelDecoration ->_idx_in_stru123] = 0; v26->uFlags |= LEVEL_DECORATION_INVISIBLE; - } + } ++curr_seq_num; - v4 = v124; break; case EVENT_SetNPCGreeting: @@ -677,10 +596,6 @@ pNPCStats->pNewNPCData[v27].uFlags &= 0xFFFFFFFCu; pNPCStats->pNewNPCData[v27].greet = EVT_DWORD(_evt->v9); ++curr_seq_num; - v4 = v124; - - //v6 = v123; - //v7 = ""; break; case EVENT_SetNPCTopic: { @@ -723,79 +638,48 @@ } ++curr_seq_num; } - v4 = v124; break; case EVENT_NPCSetItem: sub_448518_npc_set_item(EVT_DWORD(_evt->v5),EVT_DWORD(_evt->v9), _evt->v13); ++curr_seq_num; - v4 = v124; - break; case EVENT_SetActorItem: Actor::GiveItem(EVT_DWORD(_evt->v5),EVT_DWORD(_evt->v9), _evt->v13); ++curr_seq_num; - v4 = v124; break; case EVENT_SetNPCGroupNews: pNPCStats->pGroups_copy[_evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8)] = _evt->v9 + ((uint)_evt->v10 << 8); ++curr_seq_num; - v4 = v124; break; case EVENT_SetActorGroup: __debugbreak(); *(&pActors[0].uGroup + 0x11000000 * _evt->v8 + 209 * (_evt->v5 + ((_evt->v6 + ((uint)_evt->v7 << 8)) << 8))) = _evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8); ++curr_seq_num; - v4 = v124; break; case EVENT_ChangeGroup: v38 = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8); v39 = _evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8); - v40 = uNumActors; __debugbreak(); - if ( (signed int)uNumActors > 0 ) - { - v41 = pActors.data();//[0].uGroup; - do - { - if ( v41->uGroup == v38 ) - v41->uGroup = v39; - ++v41; - --v40; - } - while ( v40 ); - } + for ( uint actor_id = 0; actor_id < uNumActors; actor_id++ ) + { + if ( pActors[actor_id].uGroup == v38 ) + pActors[actor_id].uGroup = v39; + } ++curr_seq_num; - v4 = v124; - - //v6 = v123; - //v7 = ""; break; case EVENT_ChangeGroupAlly: v42 = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8); v43 = _evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8); - v44 = uNumActors; __debugbreak(); - if ( (signed int)uNumActors > 0 ) - { - v45 = pActors.data();//[0].uAlly; - do - { - if ( v45->uGroup == v42 ) - v45->uAlly = v43; - ++v45; - --v44; - } - while ( v44 ); - } + for ( uint actor_id = 0; actor_id < uNumActors; actor_id++ ) + { + if ( pActors[actor_id].uGroup == v42 ) + pActors[actor_id].uAlly = v43; + } ++curr_seq_num; - v4 = v124; - - //v6 = v123; - //v7 = ""; break; case EVENT_MoveNPC: { - pNPCStats->pNewNPCData[EVT_DWORD(_evt->v5)].Location2D =EVT_DWORD(_evt->v9); if ( window_SpeakInHouse ) { @@ -812,7 +696,7 @@ pAudioPlayer->PlaySound((SoundID)0, 0, 0, -1, 0, 0, 0, 0); window_SpeakInHouse = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_HouseInterior, 165, 0); v48 = window_SpeakInHouse->pControlsHead; - if ( v48 ) + if ( window_SpeakInHouse->pControlsHead ) { do { @@ -835,9 +719,7 @@ } } - ++curr_seq_num; - v4 = v124; - + ++curr_seq_num; break; case EVENT_Jmp: curr_seq_num = _evt->v5 - 1; @@ -852,33 +734,28 @@ pParty->pPlayers[uActiveCharacter].PlayEmotion((CHARACTER_EXPRESSION_ID)_evt->v6, 0); else if ( _evt->v5 == 5 ) //all players { - for(int i=0; i<4; ++i) + for(int i = 0; i < 4; ++i) pParty->pPlayers[i].PlayEmotion((CHARACTER_EXPRESSION_ID)_evt->v6, 0); } else //random player pParty->pPlayers[rand() % 4].PlayEmotion((CHARACTER_EXPRESSION_ID)_evt->v6, 0); ++curr_seq_num; - v4 = v124; - break; case EVENT_CharacterAnimation: - if ( _evt->v5 <= 3u ) //someone + if ( _evt->v5 <= 3 ) //someone pParty->pPlayers[_evt->v5].PlaySound((PlayerSpeech) _evt->v6, 0); else if ( _evt->v5 == 4 ) //active pParty->pPlayers[uActiveCharacter].PlaySound((PlayerSpeech) _evt->v6, 0); else if ( _evt->v5 == 5 ) //all - for(int i=0; i<4; ++i) + for(int i = 0; i < 4; ++i) pParty->pPlayers[i].PlaySound((PlayerSpeech) _evt->v6, 0); else //random pParty->pPlayers[rand() % 4].PlaySound((PlayerSpeech) _evt->v6, 0); ++curr_seq_num; - v4 = v124; - break; case EVENT_ForPartyMember: player_choose = _evt->v5; ++curr_seq_num; - v4 = v124; break; case EVENT_SummonItem: sub_42F7EB_DropItemAt(_evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8), @@ -888,10 +765,6 @@ _evt->v21 + ((_evt->v22 + ((_evt->v23 + ((uint)_evt->v24 << 8)) << 8)) << 8), _evt->v25, _evt->v26, 0, 0); ++curr_seq_num; - v4 = v124; - - //v6 = v123; - //v7 = ""; break; case EVENT_Compare: pValue = EVT_DWORD(_evt->v7); @@ -899,7 +772,7 @@ { if ( pPlayers[player_choose]->CompareVariable((enum VariableType)EVT_WORD(_evt->v5), pValue) ) { - v124 = -1; + // v124 = -1; curr_seq_num = _evt->v11 - 1; } } @@ -909,19 +782,19 @@ { if ( pPlayers[uActiveCharacter]->CompareVariable((enum VariableType)EVT_WORD(_evt->v5), pValue) ) { - v124 = -1; + // v124 = -1; curr_seq_num = _evt->v11 - 1; } } } else if ( player_choose == 5 )//all { - v130=0; + v130 = 0; for(int i = 1; i < 5; ++i) { if ( pPlayers[i]->CompareVariable((enum VariableType)EVT_WORD(_evt->v5), pValue) ) { - v124 = -1; + // v124 = -1; curr_seq_num = _evt->v11 - 1; break; } @@ -932,21 +805,21 @@ { if ( pPlayers[rand() % 4 + 1]->CompareVariable((enum VariableType)EVT_WORD(_evt->v5), pValue) ) { - v124 = -1; + // v124 = -1; curr_seq_num = _evt->v11 - 1; } } ++curr_seq_num; - v4 = v124; + v4 = -1; break; case EVENT_IsActorAlive: if (IsActorAlive(EVT_BYTE(_evt->v5), EVT_DWORD(_evt->v6), EVT_BYTE(_evt->v10))) - { - v124 = -1; + { + //v124 = -1; curr_seq_num = _evt->v11 - 1; - } + } ++curr_seq_num; - v4 = v124; + v4 = -1; break; case EVENT_Substract: pValue = EVT_DWORD(_evt->v7); @@ -1029,18 +902,11 @@ else if ( player_choose == 5 )//all { for(int i = 1; i < 5; ++i) - { pPlayers[i]->SubtractVariable((enum VariableType)EVT_WORD(_evt->v5), pValue); - } } else if ( player_choose == 6 ) //random - { - player_choose = rand() % 4; - pParty->pPlayers[player_choose].SubtractVariable((enum VariableType)EVT_WORD(_evt->v5), pValue); - } -//substract: + pParty->pPlayers[rand() % 4].SubtractVariable((enum VariableType)EVT_WORD(_evt->v5), pValue); ++curr_seq_num; - v4 = v124; break; case EVENT_Set: pValue = EVT_DWORD(_evt->v7); @@ -1053,18 +919,13 @@ } else if ( player_choose == 5 )//all { - //recheck v130 + //recheck v130 for ( int i = 1; i < 5; ++i ) pPlayers[i]->SetVariable((enum VariableType)EVT_WORD(_evt->v5), pValue); } else if ( player_choose == 6 ) //random - { - player_choose = rand() % 4; - pPlayer = &pParty->pPlayers[player_choose]; - pPlayer->SetVariable((enum VariableType)EVT_WORD(_evt->v5), pValue); - } + pParty->pPlayers[rand() % 4].SetVariable((enum VariableType)EVT_WORD(_evt->v5), pValue); ++curr_seq_num; - v4 = v124; break; case EVENT_Add: pValue = EVT_DWORD(_evt->v7); @@ -1084,10 +945,7 @@ pPlayers[i]->AddVariable((enum VariableType)EVT_WORD(_evt->v5), pValue); } else if ( player_choose == 6 ) //random - { - player_choose = rand() % 4; - pParty->pPlayers[player_choose].AddVariable((enum VariableType)EVT_WORD(_evt->v5), pValue); - } + pParty->pPlayers[rand() % 4].AddVariable((enum VariableType)EVT_WORD(_evt->v5), pValue); v83 = EVT_WORD(_evt->v5); if (v83 == 21 || // gold well on emerald isle v83 == 22 || v83 == 23 || v83 == 24 ) @@ -1096,36 +954,25 @@ viewparams->bRedrawGameUI = true; } ++curr_seq_num; - v4 = v124; break; case EVENT_InputString: if ( !entry_line ) - { + { strcpy(GameUI_Footer_TimedString.data(), &pLevelStr[pLevelStrOffsets[EVT_DWORD(_evt->v5 )]]); - v105 = curr_seq_num; - v121 = 26; -LABEL_295: - sub_4451A8_press_any_key(uEventID, v105, v121); -LABEL_301: + sub_4451A8_press_any_key(uEventID, curr_seq_num, 26); if ( v133 == 1 ) OnMapLeave(); return; - } + } v84 = _evt->v13 + ((_evt->v14 + ((_evt->v15 + ((uint)_evt->v16 << 8)) << 8)) << 8); if ( !_stricmp(GameUI_Footer_TimedString.data(), &pLevelStr[pLevelStrOffsets[_evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8)]]) || !_stricmp(GameUI_Footer_TimedString.data(), &pLevelStr[pLevelStrOffsets[v84]]) ) - { + { v11 = _evt->v17; -LABEL_130: - //v124 = -1; -LABEL_131: curr_seq_num = v11 - 1; - } + } ++curr_seq_num; - v4 = v124; - - //v6 = v123; - //v7 = ""; + v4 = -1; break; case EVENT_RandomGoTo: //v124 = -1; @@ -1133,219 +980,131 @@ + (_evt->v10 != 0))); curr_seq_num = v11 - 1; ++curr_seq_num; - v4 = v124; + v4 = -1; break; case EVENT_ReceiveDamage: - v85 = EVT_DWORD(_evt->v7 ); - v86 = _evt->v5; - if ( (unsigned __int8)v86 <= 3 ) - { - v119 = _evt->v6; - v115 = EVT_DWORD(_evt->v7 ); - v89 = (unsigned __int8)v86; - v88 = &pParty->pPlayers[v89]; - v88->ReceiveDamage(v115, (DAMAGE_TYPE)v119); - ++curr_seq_num; - v4 = v124; - break; - } - if ( v86 == 4 ) - { - if ( !uActiveCharacter ) - { - ++curr_seq_num; - v4 = v124; - - //v6 = v123; - //v7 = ""; - break; - } - v119 = _evt->v6; - v88 = pPlayers[uActiveCharacter]; - v115 = EVT_DWORD(_evt->v7 ); - v88->ReceiveDamage(v115, (DAMAGE_TYPE)v119); + if ( (unsigned __int8)_evt->v5 <= 3 ) + { + pParty->pPlayers[(unsigned __int8)_evt->v5].ReceiveDamage(EVT_DWORD(_evt->v7 ), (DAMAGE_TYPE)_evt->v6); ++curr_seq_num; - v4 = v124; break; - } - if ( v86 != 5 ) + } + if ( _evt->v5 == 4 ) + { + if ( !uActiveCharacter ) { - v119 = _evt->v6; - v115 = EVT_DWORD(_evt->v7 ); - v89 = rand() % 4; - v88 = &pParty->pPlayers[v89]; - v88->ReceiveDamage(v115, (DAMAGE_TYPE)v119); + ++curr_seq_num; + break; + } + pPlayers[uActiveCharacter]->ReceiveDamage(EVT_DWORD(_evt->v7 ), (DAMAGE_TYPE)_evt->v6); ++curr_seq_num; - v4 = v124; - - //v6 = v123; - //v7 = ""; break; - } - v87 = pParty->pPlayers.data(); - do - { - v87->ReceiveDamage(v85, (DAMAGE_TYPE)_evt->v6); - ++v87; - } - while ( (signed int)v87 < (signed int)pParty->pHirelings.data() ); + } + if ( _evt->v5 != 5 ) + { + pParty->pPlayers[rand() % 4].ReceiveDamage(EVT_DWORD(_evt->v7 ), (DAMAGE_TYPE)_evt->v6); ++curr_seq_num; - v4 = v124; - - //v6 = v123; - //v7 = ""; + break; + } + for ( uint pl_id = 0;pl_id < 4; pl_id++ ) + pParty->pPlayers[pl_id].ReceiveDamage(EVT_DWORD(_evt->v7 ), (DAMAGE_TYPE)_evt->v6); + ++curr_seq_num; break; case EVENT_ToggleIndoorLight: pIndoor->ToggleLight(EVT_DWORD(_evt->v5 ), _evt->v9); ++curr_seq_num; - v4 = v124; - - //v6 = v123; - //v7 = ""; break; case EVENT_SetFacesBit: sub_44892E_set_faces_bit(EVT_DWORD(_evt->v5),EVT_DWORD(_evt->v9), _evt->v13); ++curr_seq_num; - v4 = v124; - - //v6 = v123; - //v7 = ""; break; case EVENT_ToggleChestFlag: Chest::ToggleFlag(EVT_DWORD(_evt->v5 ), EVT_DWORD(_evt->v9 ), _evt->v13); ++curr_seq_num; - v4 = v124; - - //v6 = v123; - //v7 = ""; break; case EVENT_ToggleActorFlag: Actor::ToggleFlag(EVT_DWORD(_evt->v5 ), EVT_DWORD(_evt->v9 ), _evt->v13); ++curr_seq_num; - v4 = v124; - - //v6 = v123; - //v7 = ""; break; case EVENT_ToggleActorGroupFlag: ToggleActorGroupFlag(EVT_DWORD(_evt->v5 ), EVT_DWORD(_evt->v9 ), _evt->v13); ++curr_seq_num; - v4 = v124; - - //v6 = v123; - //v7 = ""; break; case EVENT_SetSnow: if ( !_evt->v5 ) pWeather->bRenderSnow = _evt->v6 != 0; ++curr_seq_num; - v4 = v124; - - //v6 = v123; - //v7 = ""; break; case EVENT_StatusText: v90 = EVT_DWORD(_evt->v5 ); if ( activeLevelDecoration ) - { + { if ( activeLevelDecoration == (LevelDecoration*)1 ) - { current_npc_text = pNPCTopics[v90-1].pText;//(&dword_721664)[8 * v90]; - } if ( canShowMessages == 1 ) { v91 = pNPCTopics[v90-1].pText;//(&dword_721664)[8 * v90]; //LABEL_248: - ShowStatusBarString(v91, 2u); + ShowStatusBarString(v91, 2); } - } + } else - { + { if ( canShowMessages == 1 ) - { + { v91 = &pLevelStr[pLevelStrOffsets[v90]]; - ShowStatusBarString(v91, 2u); - } + ShowStatusBarString(v91, 2); } + } ++curr_seq_num; - v4 = v124; - - //v6 = v123; - //v7 = ""; break; case EVENT_ShowMessage: - v92 = EVT_DWORD(_evt->v5 ); if ( activeLevelDecoration ) - { - v93 = (char *)pNPCTopics[v92-1].pText;//(&dword_721664)[8 * v92]; + { + current_npc_text = pNPCTopics[EVT_DWORD(_evt->v5 )-1].pText;//(&dword_721664)[8 * v92]; byte_5B0938[0] = 0; - current_npc_text = v93; - } + } else - { - strcpy(byte_5B0938.data(), &pLevelStr[pLevelStrOffsets[v92]]); - } + strcpy(byte_5B0938.data(), &pLevelStr[pLevelStrOffsets[EVT_DWORD(_evt->v5 )]]); ++curr_seq_num; - v4 = v124; - - //v6 = v123; - //v7 = ""; break; case EVENT_CastSpell: EventCastSpell(_evt->v5, _evt->v6, _evt->v7, EVT_DWORD(_evt->v8 ), EVT_DWORD(_evt->v12 ), EVT_DWORD(_evt->v16 ), EVT_DWORD(_evt->v20 ), EVT_DWORD(_evt->v24 ), EVT_DWORD(_evt->v28 )); ++curr_seq_num; - v4 = v124; break; case EVENT_SetTexture: sub_44861E_set_texture(EVT_DWORD(_evt->v5 ), (char *)&_evt->v9); ++curr_seq_num; - v4 = v124; - - //v6 = v123; - //v7 = ""; break; case EVENT_SetSprite: SetDecorationSprite(EVT_DWORD(_evt->v5 ), _evt->v9, (char *)&_evt->v10); ++curr_seq_num; - v4 = v124; - - //v6 = v123; - //v7 = ""; break; case EVENT_SummonMonsters: sub_448CF4_spawn_monsters(_evt->v5, _evt->v6, _evt->v7,EVT_DWORD(_evt->v8 ), EVT_DWORD(_evt->v12 ), EVT_DWORD(_evt->v16 ), EVT_DWORD(_evt->v20 ), EVT_DWORD(_evt->v24 )); ++curr_seq_num; - v4 = v124; - - //v6 = v123; - //v7 = ""; break; case EVENT_MouseOver: case EVENT_LocationName: --curr_seq_num; ++curr_seq_num; - v4 = v124; - - //v6 = v123; - //v7 = ""; break; case EVENT_ChangeDoorState: Door_switch_animation(_evt->v5, _evt->v6); ++curr_seq_num; - v4 = v124; break; case EVENT_OpenChest: if ( !Chest::Open(_evt->v5) ) - goto LABEL_301; + { + if ( v133 == 1 ) + OnMapLeave(); + return; + } ++curr_seq_num; - v4 = v124; - - //v6 = v123; - //v7 = ""; break; case EVENT_MoveToMap: v94 = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8); @@ -1363,20 +1122,20 @@ TransitionUI_Load(_evt->v29, _evt->v30, v135, v132, v126, v129, v95, v134, (char *)&_evt->v31); dword_5C3418 = uEventID; dword_5C341C = curr_seq_num + 1; - goto LABEL_301; + if ( v133 == 1 ) + OnMapLeave(); + return; } _5B65AC_npcdata_fame_or_other = _evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8); _5B65A8_npcdata_uflags_or_other = v94; _5B65B0_npcdata_rep_or_other = v126; if ( v129 == -1 ) - { v98 = _5B65B4_npcdata_loword_house_or_other; - } else - { + { v98 = v129 & stru_5C6E00->uDoublePiMask; _5B65B4_npcdata_loword_house_or_other = v129 & stru_5C6E00->uDoublePiMask; - } + } v99 = (char *)&_evt->v31; _5B65B8_npcdata_hiword_house_or_other = v95; dword_5B65BC = v97; @@ -1393,13 +1152,6 @@ if ( _5B65B4_npcdata_loword_house_or_other != -1 ) pParty->sRotationY = _5B65B4_npcdata_loword_house_or_other; _5B65B4_npcdata_loword_house_or_other = -1; - v120 = 0; - v116 = 0; - v111 = 0; - v110 = 0; - v109 = -1; - v108 = 0; - v107 = 0; pParty->sRotationX = v95; pParty->uFallSpeed = v134; dword_5B65C0 = 0; @@ -1409,8 +1161,7 @@ _5B65AC_npcdata_fame_or_other = 0; _5B65A8_npcdata_uflags_or_other = 0; v106 = 232; -LABEL_280: - pAudioPlayer->PlaySound((SoundID)v106, v107, v108, v109, v110, v111, v116, v120); + pAudioPlayer->PlaySound((SoundID)v106, 0, 0, -1, 0, 0, 0, 0); } } else @@ -1444,34 +1195,22 @@ } } ++curr_seq_num; - v4 = v124; - - //v6 = v123; - //v7 = ""; break; case EVENT_PlaySound: - v120 = 0; - v116 = 0; - v111 = 0; v110 = _evt->v13 + ((_evt->v14 + ((_evt->v15 + ((uint)_evt->v16 << 8)) << 8)) << 8); v109 = _evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8); - v108 = 0; - v107 = 0; v106 = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8); - goto LABEL_280; + pAudioPlayer->PlaySound((SoundID)v106, 0, 0, v109, v110, 0, 0, 0); + ++curr_seq_num; + break; case EVENT_GiveItem: item.Reset(); - //v101 = &pSomeEVT[v9]; - v102 = _evt->v7 - + ((_evt->v8 + ((_evt->v9 + ((uint)_evt->v10 << 8)) << 8)) << 8); + v102 = _evt->v7 + ((_evt->v8 + ((_evt->v9 + ((uint)_evt->v10 << 8)) << 8)) << 8); pItemsTable->GenerateItem(_evt->v5, _evt->v6, &item); if ( v102 ) item.uItemID = v102; pParty->SetHoldingItem(&item); ++curr_seq_num; - v4 = v124; - //v6 = v123; - //v7 = ""; break; case EVENT_SpeakInHouse: if ( EnterHouse((enum HOUSE_ID)EVT_DWORD(_evt->v5))) @@ -1490,34 +1229,25 @@ window_SpeakInHouse->CreateButton( 0, 0, 0, 0, 1, 0, UIMSG_CycleCharacters, 0, '\t', "", 0); } ++curr_seq_num; - v4 = v124; - - //v6 = v123; - //v7 = ""; break; case EVENT_PressAnyKey: - v121 = 33; - v105 = curr_seq_num + 1; - goto LABEL_295; + sub_4451A8_press_any_key(uEventID, curr_seq_num + 1, 33); + if ( v133 == 1 ) + OnMapLeave(); + return; case EVENT_Exit: if ( v133 == 1 ) OnMapLeave(); return; default: ++curr_seq_num; - v4 = v124; - - //v6 = v123; - //v7 = ""; break; } } - ++v4; - v124 = v4; - if ( v4 >= uSomeEVT_NumEvents ) - goto LABEL_301; - //} } + if ( v133 == 1 ) + OnMapLeave(); + return; } //----- (00444732) -------------------------------------------------------- @@ -1540,8 +1270,8 @@ { if ( pLevelEVT_Index[event_index].uEventID == uEventID ) { - test_evt=(_evt_raw*)&pLevelEVT[pLevelEVT_Index[event_index].uEventOffsetInEVT]; - last_evt=test_evt; + test_evt=(_evt_raw*)&pLevelEVT[pLevelEVT_Index[event_index].uEventOffsetInEVT]; + last_evt=test_evt; event_pos = pLevelEVT_Index[event_index+1].uEventOffsetInEVT; if ( test_evt->_e_type == EVENT_MouseOver ) break; @@ -1550,7 +1280,7 @@ if ( event_index >= uLevelEVT_NumEvents ) return NULL; } - test_evt=(_evt_raw*)&pLevelEVT[event_pos]; + test_evt=(_evt_raw*)&pLevelEVT[event_pos]; if ( test_evt->_e_type== EVENT_SpeakInHouse ) { str_index = EVT_DWORD(test_evt->v5); @@ -1558,10 +1288,10 @@ } else { - for ( i = event_index+1; pLevelEVT_Index[i].uEventID == uEventID; ++i ) + for ( i = event_index + 1; pLevelEVT_Index[i].uEventID == uEventID; ++i ) { event_pos = pLevelEVT_Index[i].uEventOffsetInEVT; - test_evt=(_evt_raw*)&pLevelEVT[event_pos]; + test_evt=(_evt_raw*)&pLevelEVT[event_pos]; if ( test_evt->_e_type == EVENT_SpeakInHouse ) { str_index = EVT_DWORD(test_evt->v5);
--- a/GUIButton.cpp Fri Mar 14 09:32:25 2014 +0600 +++ b/GUIButton.cpp Fri Mar 14 09:32:42 2014 +0600 @@ -114,73 +114,51 @@ //----- (0041D0D8) -------------------------------------------------------- void GUIButton::Release() { - GUIWindow *v1; // eax@2 - GUIButton *v2; // edx@2 - GUIButton *v3; // eax@6 - GUIButton *ptr; - - ptr=this; - if ( ptr ) + if ( this ) { - v1 = ptr->pParent; - v2 = ptr->pNext; - if ( ptr == v1->pControlsHead ) + if ( this == this->pParent->pControlsHead ) { - if ( v2 ) + if ( this->pNext ) { - v1->pControlsHead = v2; - ptr->pNext->pPrev = 0; + this->pParent->pControlsHead = this->pNext; + this->pNext->pPrev = 0; } else { - v1->pControlsHead = 0; - ptr->pParent->pControlsTail = 0; + this->pParent->pControlsHead = 0; + this->pParent->pControlsTail = 0; } } else { - v3 = ptr->pPrev; - if ( v2 ) + if ( this->pNext ) { - v3->pNext = v2; - ptr->pNext->pPrev = v3; + this->pPrev->pNext = this->pNext; + this->pNext->pPrev = this->pPrev; } else { - v3->pNext = 0; - ptr->pParent->pControlsTail = v3; + this->pPrev->pNext = 0; + this->pParent->pControlsTail = this->pPrev; } } - --ptr->pParent->uNumControls; + --this->pParent->uNumControls; } } - //----- (00415180) -------------------------------------------------------- void GUIButton::DrawLabel( const char *label_text, struct GUIFont *pFont, int a5, int uFontShadowColor ) - { - const char *v5; // ebx@1 - GUIButton *v6; // esi@1 - int v7; // eax@1 - - v5 = label_text; - v6 = this; +{ //strlen(edx0); - v7 = pFont->GetLineWidth(label_text); - return pParent->DrawText( - pFont, - v6->uX + (signed int)(v6->uWidth - v7) / 2, - v6->uY + (signed int)(v6->uHeight - pFont->uFontHeight) / 2, - a5, - label_text, - 0, - 0, - uFontShadowColor); + return pParent->DrawText(pFont, + this->uX + (signed int)(this->uWidth - pFont->GetLineWidth(label_text)) / 2, + this->uY + (signed int)(this->uHeight - pFont->uFontHeight) / 2, + a5, label_text, 0, 0, uFontShadowColor); } //----- (004B36CC) -------------------------------------------------------- void CreateButtonInColumn( int column_pos, unsigned int control_id ) { - pDialogueWindow->CreateButton( 480, 30 * column_pos + 146, 140, 30, 1, 0, UIMSG_SelectShopDialogueOption, control_id, 0, "", 0); + pDialogueWindow->CreateButton( 480, 30 * column_pos + 146, 140, 30, 1, 0, UIMSG_SelectShopDialogueOption, control_id, 0, "", 0); } //----- (00419379) -------------------------------------------------------- void ReleaseAwardsScrollBar()
--- a/GUIFont.cpp Fri Mar 14 09:32:25 2014 +0600 +++ b/GUIFont.cpp Fri Mar 14 09:32:42 2014 +0600 @@ -55,8 +55,6 @@ return pFont; } - - //----- (0044D2FD) -------------------------------------------------------- void GUIFont::_44D2FD_prolly_draw_credits_entry( GUIFont *pSecondFont, int uFrameX, int uFrameY, unsigned int w, unsigned int h, unsigned __int16 firstColor, unsigned __int16 secondColor, const char *pString, @@ -110,8 +108,6 @@ } } - - //----- (0044D1E7) -------------------------------------------------------- void GUIFont::DrawTextLine( unsigned int uDefaultColor, signed int uX, signed int uY, const char *text, int max_len_pix ) @@ -649,5 +645,5 @@ //----- (00414174) -------------------------------------------------------- void uGameUIFontShadow_initialize() { - uGameUIFontShadow = Color16(0xE6u, 214u, 193u); + uGameUIFontShadow = Color16(0xE6u, 214, 193); } \ No newline at end of file
--- a/GUIProgressBar.cpp Fri Mar 14 09:32:25 2014 +0600 +++ b/GUIProgressBar.cpp Fri Mar 14 09:32:42 2014 +0600 @@ -60,7 +60,7 @@ } while ( v4 <= 5 ); if ( v5 == 5 ) - memset(&field_10, 0, 8u); + memset(&field_10, 0, 8); v7 = rand() % 5 + 1; if ( *(&field_10 + v7) == 1 ) { @@ -125,48 +125,41 @@ //----- (004435CD) -------------------------------------------------------- void GUIProgressBar::Progress() { - unsigned __int8 v1; // al@1 - ++this->uProgressCurrent; - v1 = this->uProgressMax; - if ( this->uProgressCurrent > v1 ) - this->uProgressCurrent = v1; + if ( this->uProgressCurrent > this->uProgressMax ) + this->uProgressCurrent = this->uProgressMax; Draw(); } //----- (004435E2) -------------------------------------------------------- void GUIProgressBar::Release() { - GUIProgressBar *v1; // esi@1 - char v2; // al@5 int v3; // edi@7 - v1 = this; - if ( v1->uType == 1 ) + if ( this->uType == 1 ) { - if ( !v1->pLoadingBg.pPixels ) + if ( !this->pLoadingBg.pPixels ) return; - v2 = v1->uProgressMax; - if ( v1->uProgressCurrent != v2 ) + if ( this->uProgressCurrent != this->uProgressMax ) { - v1->uProgressCurrent = v2 - 1; + this->uProgressCurrent = this->uProgressMax - 1; Progress(); } - free(v1->pLoadingBg.pPixels); - v3 = (int)&v1->pLoadingProgress.pLevelOfDetail0_prolly_alpha_mask; - free(v1->pLoadingProgress.pLevelOfDetail0_prolly_alpha_mask); - free(v1->pLoadingProgress.pPalette16); - v1->pLoadingProgress.pPalette16 = 0; - v1->pLoadingBg.pPixels = 0; + free(this->pLoadingBg.pPixels); + v3 = (int)&this->pLoadingProgress.pLevelOfDetail0_prolly_alpha_mask; + free(this->pLoadingProgress.pLevelOfDetail0_prolly_alpha_mask); + free(this->pLoadingProgress.pPalette16); + this->pLoadingProgress.pPalette16 = 0; + this->pLoadingBg.pPixels = 0; } else { - if ( !v1->pBardata.pLevelOfDetail0_prolly_alpha_mask ) + if ( !this->pBardata.pLevelOfDetail0_prolly_alpha_mask ) return; - free(v1->pBardata.pLevelOfDetail0_prolly_alpha_mask); - v3 = (int)&v1->pBardata.pPalette16; - free(v1->pBardata.pPalette16); - v1->pBardata.pLevelOfDetail0_prolly_alpha_mask = 0; + free(this->pBardata.pLevelOfDetail0_prolly_alpha_mask); + v3 = (int)&this->pBardata.pPalette16; + free(this->pBardata.pPalette16); + this->pBardata.pLevelOfDetail0_prolly_alpha_mask = 0; } *(int *)v3 = 0; } @@ -179,7 +172,7 @@ { if (pBardata.pLevelOfDetail0_prolly_alpha_mask) { - pRenderer->Sub01(); + pRenderer->Sub01(); pRenderer->DrawTextureIndexed(80, 122, &pBardata);// pRenderer->DrawTextureTransparent(100, 146, &pIcons_LOD->pTextures[pIconsFrameTable->GetFrame(uIconID_TurnHour, 0)->uTextureID]);
--- a/GUIWindow.cpp Fri Mar 14 09:32:25 2014 +0600 +++ b/GUIWindow.cpp Fri Mar 14 09:32:42 2014 +0600 @@ -80,41 +80,27 @@ uNumMessages = pMessages[0].field_8 != 0; } - //----- (004356B9) -------------------------------------------------------- void GUIMessageQueue::PopMessage(enum UIMessageType *pType, int *pParam, int *a4) { - signed int v4; // edx@1 - GUIMessage *v5; // eax@2 - - v4 = 0; if ( this->uNumMessages ) { - v5 = this->pMessages; *pType = this->pMessages[0].eType; *pParam = this->pMessages[0].param; *a4 = this->pMessages[0].field_8; if ( (signed int)(this->uNumMessages - 1) > 0 ) { - do + for ( uint i = 0; i < (signed int)(this->uNumMessages - 1); ++i ) { - v5->eType = v5[1].eType; - v5->param = v5[1].param; - v5->field_8 = v5[1].field_8; - ++v4; - ++v5; + this->pMessages[i].eType = this->pMessages[i + 1].eType; + this->pMessages[i].param = this->pMessages[i + 1].param; + this->pMessages[i].field_8 = this->pMessages[i + 1].field_8; } - while ( v4 < (signed int)(this->uNumMessages - 1) ); } --this->uNumMessages; } } - - - - - //----- (0041B4E1) -------------------------------------------------------- int __fastcall GUI_ReplaceHotkey(unsigned __int8 uOldHotkey, unsigned __int8 uNewHotkey, char bFirstCall) { @@ -160,9 +146,6 @@ return result; } - - - //----- (0041B438) -------------------------------------------------------- GUIButton *__fastcall GUI_HandleHotkey(unsigned __int8 uHotkey) { @@ -343,9 +326,7 @@ case WINDOW_null: return; default: - { break; - } } //v8 = this->pControlsHead; if ( this->pControlsHead ) @@ -373,11 +354,6 @@ uNumVisibleWindows = uNumVisibleWindows - 1; } - - - - - //----- (0041CD3B) -------------------------------------------------------- GUIButton *GUIWindow::GetControl(unsigned int uID) { @@ -647,30 +623,14 @@ void GUIWindow::DrawMessageBox(int arg0) { unsigned int v2; // edi@1 - GUIWindow *v3; // ebx@1 signed int v4; // esi@2 unsigned int v5; // eax@2 - unsigned int v6; // edx@4 - unsigned int v7; // ecx@6 - unsigned int v8; // eax@9 - __int32 v9; // eax@10 - unsigned int v10; // eax@18 - LONG v11; // ecx@18 - unsigned int v12; // edx@18 - unsigned int v13; // eax@18 - const char *v14; // ecx@18 - int v15; // eax@19 unsigned int v16; // esi@19 - const char *v17; // ebx@25 - int v18; // eax@26 - GUIWindow v19; // [sp+Ch] [bp-60h]@18 - POINT a2; // [sp+60h] [bp-Ch]@8 - unsigned int v21; // [sp+68h] [bp-4h]@18 + GUIWindow current_window; // [sp+Ch] [bp-60h]@18 + POINT cursor; // [sp+60h] [bp-Ch]@8 unsigned int v22; // [sp+74h] [bp+8h]@2 - unsigned int v23; // [sp+74h] [bp+8h]@18 v2 = 0; - v3 = this; if ( arg0 ) { v4 = pViewport->uViewportTL_X; @@ -684,108 +644,82 @@ v5 = window->GetWidth(); v22 = window->GetHeight(); } - v6 = this->uFrameX; + pMouse->GetCursorPos(&cursor); if ( (signed int)this->uFrameX >= v4 ) { - v7 = this->uFrameWidth; - if ( (signed int)(v7 + v6) <= (signed int)v5 ) - goto LABEL_9; - v3->uFrameX = v5 - v7; + if ( (signed int)(this->uFrameWidth + this->uFrameX) > (signed int)v5 ) + { + this->uFrameX = v5 - this->uFrameWidth; + this->uFrameY = cursor.y + 30; + } } else { this->uFrameX = v4; + this->uFrameY = cursor.y + 30; } - v3->uFrameY = pMouse->GetCursorPos(&a2)->y + 30; -LABEL_9: - v8 = v3->uFrameY; - if ( (signed int)v8 >= (signed int)v2 ) + + if ( (signed int)this->uFrameY >= (signed int)v2 ) { - if ( (signed int)(v8 + v3->uFrameHeight) <= (signed int)v22 ) - goto LABEL_14; - v9 = pMouse->GetCursorPos(&a2)->y - v3->uFrameHeight - 30; + if ( (signed int)(this->uFrameY + this->uFrameHeight) > (signed int)v22 ) + this->uFrameY = cursor.y - this->uFrameHeight - 30; } else - { - v9 = pMouse->GetCursorPos(&a2)->y + 30; - } - v3->uFrameY = v9; -LABEL_14: - if ( (signed int)v3->uFrameY < (signed int)v2 ) - v3->uFrameY = v2; - if ( (signed int)v3->uFrameX < v4 ) - v3->uFrameX = v4; - v10 = v3->uFrameWidth; - v11 = v3->uFrameX; - v12 = v3->uFrameY; - v21 = v10; - a2.y = v11; - v3->uFrameZ = v10 + v11 - 1; - v13 = v3->uFrameHeight; - v3->uFrameW = v13 + v12 - 1; - memcpy(&v19, v3, sizeof(v19)); - v19.uFrameX += 12; - v19.uFrameWidth -= 24; - v19.uFrameY += 12; - v19.uFrameHeight -= 12; - v19.uFrameZ = v19.uFrameWidth + v19.uFrameX - 1; - v23 = v12; - v19.uFrameW = v19.uFrameHeight + v19.uFrameY - 1; - v14 = v3->Hint; - if ( v14 ) - { - v15 = pFontLucida->CalcTextHeight(v14, &v19, 0, 0); - v12 = v23; - v16 = v15 + 24; - } + this->uFrameY = cursor.y + 30; + if ( (signed int)this->uFrameY < (signed int)v2 ) + this->uFrameY = v2; + if ( (signed int)this->uFrameX < v4 ) + this->uFrameX = v4; + this->uFrameZ = this->uFrameWidth + this->uFrameX - 1; + this->uFrameW = this->uFrameHeight + this->uFrameY - 1; + memcpy(¤t_window, this, sizeof(current_window)); + current_window.uFrameX += 12; + current_window.uFrameWidth -= 24; + current_window.uFrameY += 12; + current_window.uFrameHeight -= 12; + current_window.uFrameZ = current_window.uFrameWidth + current_window.uFrameX - 1; + current_window.uFrameW = current_window.uFrameHeight + current_window.uFrameY - 1; + if ( this->Hint ) + v16 = pFontLucida->CalcTextHeight(this->Hint, ¤t_window, 0, 0) + 24; else - { - v16 = v13; - } + v16 = this->uFrameHeight; if ( (signed int)v16 < 64 ) v16 = 64; - if ( (signed int)(v16 + v12) > 479 ) - v16 = 479 - v12; - DrawPopupWindow(a2.y, v12, v21, v16); - v17 = v3->Hint; - if ( v17 ) - { - v18 = pFontLucida->CalcTextHeight(v17, &v19, 0, 0); - v19.DrawTitleText(pFontLucida, 0, (signed int)(v16 - v18) / 2 - 14, 0, v17, 3); - } + if ( (signed int)(v16 + this->uFrameY) > 479 ) + v16 = 479 - this->uFrameY; + DrawPopupWindow(this->uFrameX, this->uFrameY, this->uFrameWidth, v16); + if ( this->Hint ) + current_window.DrawTitleText(pFontLucida, 0, (signed int)(v16 - pFontLucida->CalcTextHeight(this->Hint, ¤t_window, 0, 0)) / 2 - 14, 0, this->Hint, 3); } - - - //----- (00411B59) -------------------------------------------------------- void __fastcall LoadThumbnailLloydTexture(unsigned int uSlot, unsigned int uPlayer) { - unsigned int v2; // esi@1 - unsigned int v3; // edi@1 + //unsigned int v2; // esi@1 + //unsigned int v3; // edi@1 FILE *v4; // ebx@1 FILE *v5; // eax@2 char pContainerName[64]; // [sp+Ch] [bp-44h]@1 - unsigned int v7; // [sp+4Ch] [bp-4h]@1 + //unsigned int v7; // [sp+4Ch] [bp-4h]@1 - v2 = uSlot; - v7 = uPlayer; - v3 = uSlot + 1; + //v2 = uSlot; + //v7 = uPlayer; + //v3 = uSlot + 1; sprintf(pContainerName, "data\\lloyd%d%d.pcx", uPlayer, uSlot + 1); v4 = fopen(pContainerName, "rb"); if ( v4 ) { - pSavegameThumbnails[v2].LoadFromFILE(v4, 0, 1u); + pSavegameThumbnails[uSlot].LoadFromFILE(v4, 0, 1); fclose(v4); } else { - sprintf(pContainerName, "lloyd%d%d.pcx", v7, v3); + sprintf(pContainerName, "lloyd%d%d.pcx", uPlayer, uSlot + 1); v5 = pNew_LOD->FindContainer(pContainerName, 1); if ( v5 ) - pSavegameThumbnails[v2].LoadFromFILE(v5, 0, 0); + pSavegameThumbnails[uSlot].LoadFromFILE(v5, 0, 0); else - *((int *)&pSavegameThumbnails.data()->pPixels + 10 * v2) = 0; + *((int *)&pSavegameThumbnails.data()->pPixels + 10 * uSlot) = 0; } } @@ -900,9 +834,7 @@ pRenderer->DrawTextureIndexed(476, 451, &pIcons_LOD->pTextures[uTextureID_x_ok_u]); } else - { pRenderer->DrawTextureIndexed(471, 445, &pIcons_LOD->pTextures[uExitCancelTextureId]); - } return; } if ( current_npc_text ) @@ -925,9 +857,7 @@ pRenderer->DrawTextureIndexed(476, 451, &pIcons_LOD->pTextures[uTextureID_x_ok_u]); } else - { pRenderer->DrawTextureIndexed(471, 445, &pIcons_LOD->pTextures[uExitCancelTextureId]); - } return; } for ( v8 = 0; v8 < uNumDialogueNPCPortraits; ++v8 ) @@ -964,9 +894,7 @@ pRenderer->DrawTextureIndexed(476, 451, &pIcons_LOD->pTextures[uTextureID_x_ok_u]); } else - { pRenderer->DrawTextureIndexed(471, 445, &pIcons_LOD->pTextures[uExitCancelTextureId]); - } return; } v4 = (char *)pDialogueNPCCount - 1; @@ -981,15 +909,11 @@ pRenderer->DrawTextureIndexed(476, 451, &pIcons_LOD->pTextures[uTextureID_x_ok_u]); } else - { pRenderer->DrawTextureIndexed(471, 445, &pIcons_LOD->pTextures[uExitCancelTextureId]); - } return; } if ( v4 || !dword_591080 )// - { SimpleHouseDialog(); - } else { sprintfex( pTmpBuf.data(), pGlobalTXT_LocalizationStrings[429], @@ -1058,9 +982,7 @@ pRenderer->DrawTextureIndexed(476, 451, &pIcons_LOD->pTextures[uTextureID_x_ok_u]); } else - { pRenderer->DrawTextureIndexed(471, 445, &pIcons_LOD->pTextures[uExitCancelTextureId]); - } } //----- (004B1854) -------------------------------------------------------- @@ -1117,13 +1039,11 @@ this->DrawTitleText(pFontArrus, 0, (212 - pFontArrus->CalcTextHeight(pTmpBuf.data(), this, 0, 0)) / 2 + 101, Color16(0xFFu, 0xFFu, 0x9Bu), pTmpBuf.data(), 3); } - - //----- (0044D406) -------------------------------------------------------- void GUIWindow::DrawTitleText( GUIFont *a2, signed int uHorizontalMargin, unsigned int uVerticalMargin, unsigned __int16 uDefaultColor, const char *pInString, unsigned int uLineSpacing ) { - GUIWindow *pWindow; // esi@1 + //GUIWindow *pWindow; // esi@1 unsigned int v8; // ebx@1 char *v9; // eax@1 unsigned int v11; // edi@1 @@ -1132,14 +1052,14 @@ GUIFont *pFont; // [sp+Ch] [bp-4h]@1 const char *Stra; // [sp+24h] [bp+14h]@5 - pWindow = this; + //pWindow = this; pFont = a2; v8 = this->uFrameWidth - uHorizontalMargin; ui_current_text_color = uDefaultColor; v9 = FitTextInAWindow(pInString, a2, this, uHorizontalMargin, 0); Stra = strtok(v9, "\n"); - v11 = uHorizontalMargin + pWindow->uFrameX; - v12 = uVerticalMargin + pWindow->uFrameY; + v11 = uHorizontalMargin + this->uFrameX; + v12 = uVerticalMargin + this->uFrameY; while ( 1 ) { if ( !Stra ) @@ -1154,8 +1074,6 @@ } // 5C6DB4: using guessed type int ui_current_text_color; - - //----- (0044CE08) -------------------------------------------------------- void GUIWindow::DrawText( GUIFont *a2, signed int uX, int uY, unsigned int uFontColor, const char *Str, int a7, int a8, signed int uFontShadowColor ) { @@ -1202,9 +1120,7 @@ if ( !uX ) uX = 12; if ( a8 ) - { v32 = Str; - } else { v11 = (int)FitTextInAWindow(Str, v10, v9, uX, 0); @@ -1230,7 +1146,7 @@ switch ( (unsigned __int8)v11 ) { case 9u: - strncpy(Dest, &v32[v14 + 1], 3u); + strncpy(Dest, &v32[v14 + 1], 3); Dest[3] = 0; pInString += 3; v29 = atoi(Dest); @@ -1244,17 +1160,21 @@ v13 = uY + v31->uFrameY; v12 = uX + v29 + v31->uFrameX; if ( a8 ) - goto LABEL_36; + { + v11 = v11 + v13 - 3; + if ( v11 > a8 ) + return; + } break; case 0xCu: - strncpy(Dest, &v32[v14 + 1], 5u); + strncpy(Dest, &v32[v14 + 1], 5); Dest[5] = 0; v11 = atoi(Dest); pInString += 5; uFontColor = v11; break; case 0xDu: - strncpy(Dest, &v32[v14 + 1], 3u); + strncpy(Dest, &v32[v14 + 1], 3); Dest[3] = 0; pInString += 3; v18 = atoi(Dest); @@ -1264,7 +1184,6 @@ if ( a8 ) { v11 = LOBYTE(v10->uFontHeight); -LABEL_36: v11 = v11 + v13 - 3; if ( v11 > a8 ) return; @@ -1285,24 +1204,11 @@ v12 += v10->pMetrics[v15].uLeftSpacing; v17 = (int)((char *)&v10[1] + v10->font_pixels_offset[v15]); if ( (short)uFontColor ) - pRenderer->DrawText( - v12, - v13, - (unsigned __int8 *)v17, - v16, - LOBYTE(v10->uFontHeight), - v10->pFontPalettes[0], - uFontColor, - uFontShadowColor); + pRenderer->DrawText(v12, v13, (unsigned __int8 *)v17, v16, LOBYTE(v10->uFontHeight), + v10->pFontPalettes[0], uFontColor, uFontShadowColor); else - pRenderer->DrawTextPalette( - v12, - v13, - (unsigned char*)v17, - v16, - LOBYTE(v10->uFontHeight), - v10->pFontPalettes[0], - a7); + pRenderer->DrawTextPalette(v12, v13, (unsigned char*)v17, v16, LOBYTE(v10->uFontHeight), + v10->pFontPalettes[0], a7); LOBYTE(v11) = v30; v12 += v28; if ( (signed int)pInString < (signed int)v30 ) @@ -1325,8 +1231,7 @@ //----- (0044CB4F) -------------------------------------------------------- int GUIWindow::DrawTextInRect( GUIFont *pFont, unsigned int uX, unsigned int uY, unsigned int uColor, const char *text, int rect_width, int reverse_text ) - { - +{ int pLineWidth; // ebx@1 int text_width; // esi@3 unsigned __int8 v12; // cl@7 @@ -1368,7 +1273,7 @@ if ( reverse_text ) _strrev(pTmpBuf2.data()); Str1a = 0; - for (i=0; i<pNumLen; ++i) + for ( i = 0; i < pNumLen; ++i ) { if ( text_width >= rect_width ) break; @@ -1390,7 +1295,7 @@ text_width += pFont->pMetrics[v12].uWidth; if ( i < pNumLen ) text_width += pFont->pMetrics[v12].uRightSpacing; - } + } } } pTmpBuf2[i - 1] = 0; @@ -1456,10 +1361,8 @@ v13 += v20; if ( i < (signed int)pNumLen ) v13 += pFont->pMetrics[v15].uRightSpacing; - } + } } - - } return v28; } @@ -1528,7 +1431,7 @@ //----- (0041C432) -------------------------------------------------------- GUIWindow * GUIWindow::Create( unsigned int uX, unsigned int uY, unsigned int uWidth, unsigned int uHeight, enum WindowType eWindowType, int pButton, const char* hint ) - { +{ unsigned int uNextFreeWindowID; // ebp@1 //int *v8; // eax@1 //GUIWindow *pWindow; // esi@4 @@ -1665,9 +1568,7 @@ pWindow->CreateButton(0x1E0u, v11 + 130, 0x8Cu, v11, 1, 0, UIMSG_SelectNPCDialogueOption, 0x4Cu, 0, pTmpBuf.data(), 0); } else - { pWindow->CreateButton(0x1E0u, v11 + 130, 0x8Cu, v11, 1, 0, UIMSG_SelectNPCDialogueOption, 0x4Cu, 0, pGlobalTXT_LocalizationStrings[406], 0);// - } num_menu_buttons = 2; } } @@ -1675,7 +1576,8 @@ } break; } - case WINDOW_ChangeLocation: { + case WINDOW_ChangeLocation: + { pMainScreenNum = pCurrentScreen; pCurrentScreen = SCREEN_CHANGE_LOCATION; pBtn_ExitCancel = pWindow->CreateButton( 566, 445, 75, 33, 1, 0, UIMSG_CHANGE_LOCATION_ClickCencelBtn, 0, 'N', pGlobalTXT_LocalizationStrings[156], pIcons_LOD->GetTexture(uTextureID_BUTTDESC2), 0);// @@ -1683,7 +1585,7 @@ pWindow->CreateButton(pNPCPortraits_x[0][0], pNPCPortraits_y[0][0], 63, 73, 1, 0, UIMSG_OnTravelByFoot, 1, ' ', pWindow->Hint, 0, 0, 0); pWindow->CreateButton( 8, 8, 460, 344, 1, 0, UIMSG_OnTravelByFoot, 1, 0, pWindow->Hint, 0); break; - } + } case WINDOW_SpellBook: {// InitializeBookTextures(); pWindow->OpenSpellBook(); @@ -1700,11 +1602,11 @@ return pWindow; } //LABEL_62: - pWindow->CreateButton(0x3Du, 0x1A8u, 0x1Fu, 0, 2, 94, UIMSG_SelectCharacter, 1u, '1', "", 0); - pWindow->CreateButton(0xB1u, 0x1A8u, 0x1Fu, 0, 2, 94, UIMSG_SelectCharacter, 2u, '2', "", 0); - pWindow->CreateButton(0x124u, 0x1A8u, 0x1Fu, 0, 2, 94, UIMSG_SelectCharacter, 3u, '3', "", 0); - pWindow->CreateButton(0x197u, 0x1A8u, 0x1Fu, 0, 2, 94, UIMSG_SelectCharacter, 4u, '4', "", 0); - pWindow->CreateButton(0, 0, 0, 0, 1, 0, UIMSG_CycleCharacters, 0, 9u, "", 0); + pWindow->CreateButton(61, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 1, '1', "", 0); + pWindow->CreateButton(177, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 2, '2', "", 0); + pWindow->CreateButton(292, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 3, '3', "", 0); + pWindow->CreateButton(407, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 4, '4', "", 0); + pWindow->CreateButton(0, 0, 0, 0, 1, 0, UIMSG_CycleCharacters, 0, 9, "", 0); return pWindow; } if (eWindowType == WINDOW_HouseInterior) @@ -1927,9 +1829,7 @@ if ( pParty->PartyTimes._shop_ban_times[window_SpeakInHouse->par1C] <=pParty->uTimePlayed ) { if ( window_SpeakInHouse->par1C < 53 ) - { pParty->PartyTimes._shop_ban_times[window_SpeakInHouse->par1C] = 0; - } continue; } pNumMessages = pMessageQueue_50CBD0->uNumMessages; @@ -2212,9 +2112,7 @@ continue; } default: - { continue; - } } } if ( GetCurrentMenuID() == -1 ) @@ -2255,9 +2153,6 @@ Dst.DrawTitleText(pFontSmallnum, 0, 0xCu, ui_mainmenu_copyright_color, pGlobalTXT_LocalizationStrings[157], 3); } - - - int modal_window_prev_screen; //----- (004141CA) -------------------------------------------------------- @@ -2299,10 +2194,9 @@ //----- (00467FB6) -------------------------------------------------------- void CreateScrollWindow() - { +{ unsigned int v0; // eax@1 char *v1; // ST18_4@3 - unsigned int v2; // eax@3 GUIWindow a1; // [sp+Ch] [bp-54h]@1 memcpy(&a1, pGUIWindow_ScrollWindow, sizeof(a1)); @@ -2311,8 +2205,7 @@ a1.uFrameY = 1; a1.uFrameWidth = 468; v0 = pFontSmallnum->CalcTextHeight(pScrolls[pGUIWindow_ScrollWindow->par1C], &a1, 0, 0) - + 2 * LOBYTE(pFontCreate->uFontHeight) - + 24; + + 2 * LOBYTE(pFontCreate->uFontHeight) + 24; a1.uFrameHeight = v0; if ( (signed int)(v0 + a1.uFrameY) > 479 ) { @@ -2329,31 +2222,20 @@ a1.uFrameZ = a1.uFrameWidth + a1.uFrameX - 1; a1.uFrameW = a1.uFrameHeight + a1.uFrameY - 1; v1 = pItemsTable->pItems[(unsigned int)pGUIWindow_ScrollWindow->ptr_1C + 700].pName; - v2 = Color16(0xFFu, 0xFFu, 0x9Bu); - sprintf(pTmpBuf.data(), format_4E2D80, v2, v1); - a1.DrawTitleText(pFontCreate, 0, 0, 0, pTmpBuf.data(), 3u); - a1.DrawText( - pFontSmallnum, - 1, - LOBYTE(pFontCreate->uFontHeight) - 3, - 0, - pScrolls[(unsigned int)pGUIWindow_ScrollWindow->ptr_1C], - 0, - 0, - 0); + sprintf(pTmpBuf.data(), format_4E2D80, Color16(0xFFu, 0xFFu, 0x9Bu), v1); + a1.DrawTitleText(pFontCreate, 0, 0, 0, pTmpBuf.data(), 3); + a1.DrawText(pFontSmallnum, 1, LOBYTE(pFontCreate->uFontHeight) - 3, 0, + pScrolls[(unsigned int)pGUIWindow_ScrollWindow->ptr_1C], 0, 0, 0); } //----- (00467F48) -------------------------------------------------------- void CreateMsgScrollWindow( signed int mscroll_id ) - { - signed int v1; // esi@1 - - v1 = mscroll_id; +{ if ( !pGUIWindow_ScrollWindow && mscroll_id >= 700 ) { if ( mscroll_id <= 782 ) { uTextureID_720980 = pIcons_LOD->LoadTexture("leather", TEXTURE_16BIT_PALETTE); - pGUIWindow_ScrollWindow = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_Scroll, v1 - 700, 0); + pGUIWindow_ScrollWindow = GUIWindow::Create(0, 0, window->GetWidth(), window->GetHeight(), WINDOW_Scroll, mscroll_id - 700, 0); } } }
--- a/Game.cpp Fri Mar 14 09:32:25 2014 +0600 +++ b/Game.cpp Fri Mar 14 09:32:42 2014 +0600 @@ -72,14 +72,11 @@ //----- (0044103C) -------------------------------------------------------- void Game::Draw() { - //float v2; // ST24_4@11 - //double v3; // ST28_8@11 int v4; // edi@26 - //int v5; // eax@35 uFlags2 &= ~0x02; if ( pParty->_497FC5_check_party_perception_against_level() ) - uFlags2 |= 2u; + uFlags2 |= 2; pGame->pIndoorCameraD3D->sRotationX = pParty->sRotationX; pGame->pIndoorCameraD3D->sRotationY = pParty->sRotationY; @@ -2987,7 +2984,7 @@ { if ( !*((int *)&pSavegameThumbnails[10 * uMessageParam].pPixels ) ) continue; - v173 = pMapStats->pInfos[sub_410D99_get_map_index(pPlayer->pInstalledBeacons[uMessageParam].SaveFileID)].pName; + v173 = pMapStats->pInfos[pMapStats->sub_410D99_get_map_index(pPlayer->pInstalledBeacons[uMessageParam].SaveFileID)].pName; sprintfex(pTmpBuf.data(), pGlobalTXT_LocalizationStrings[474], v173);// "Recall to %s" GameUI_SetFooterString(pTmpBuf.data()); continue; @@ -3002,7 +2999,7 @@ GameUI_SetFooterString(pTmpBuf.data()); continue; } - v174 = pMapStats->pInfos[sub_410D99_get_map_index(*(short *)(uNumSeconds + 26))].pName; + v174 = pMapStats->pInfos[pMapStats->sub_410D99_get_map_index(*(short *)(uNumSeconds + 26))].pName; sprintf(pTmpBuf.data(), pGlobalTXT_LocalizationStrings[475], (unsigned int)pMapName, v174);// "Set %s over %s" GameUI_SetFooterString(pTmpBuf.data()); continue;
--- a/GammaControl.cpp Fri Mar 14 09:32:25 2014 +0600 +++ b/GammaControl.cpp Fri Mar 14 09:32:42 2014 +0600 @@ -23,30 +23,25 @@ double v2; // st7@1 unsigned __int16 *v3; // ecx@1 double v4; // st6@2 - double result; // st7@7 signed int v6; // [sp+0h] [bp-8h]@1 signed int v7; // [sp+4h] [bp-4h]@1 - v7 = 0; v2 = 0.0; v6 = 256; v3 = a1->green; - do + for ( v7 = 0; v7 < 256; ++v7 ) { v4 = ((double)*(v3 - 256) + (double)v3[256] + (double)*v3) * 0.000015259022 * 0.33333334; if ( v4 == 0.0 ) --v6; else v2 = v2 + (double)v7 * 0.0039215689 / v4; - ++v7; ++v3; } - while ( v7 < 256 ); if ( v6 ) - result = v2 / (double)v6; + return v2 / (double)v6; else - result = 1.0; - return result; + return 1.0; } //----- (0044F408) -------------------------------------------------------- @@ -66,42 +61,33 @@ signed __int64 v4; // qax@3 signed int v6; // [sp+Ch] [bp-4h]@1 - v6 = 0; v2 = pRamp->green; - do + for ( v6 = 0; v6 < 256; ++v6 ) { v3 = (double)v6 * 0.0039215689 * this->fGamma; if ( v3 >= 1.0 || (v4 = (signed __int64)(v3 * 65535.0), (signed int)v4 > 65535) ) - { - LODWORD(v4) = 65535; - } + LODWORD(v4) = 65535; else if ( (signed int)v4 < 0 ) - { LODWORD(v4) = 0; - } else { if ( (signed int)v4 > 65535 ) LODWORD(v4) = 65535; } - ++v6; v2[256] = v4; *v2 = v4; *(v2 - 256) = v4; ++v2; } - while ( v6 < 256 ); return v4; } //----- (0044F4D9) -------------------------------------------------------- void GammaController::Initialize(float gamma) { - GammaController *v2; // esi@1 double v3; // st7@3 double v4; // st6@4 - v2 = this; //if (pVersion->pVersionInfo.dwPlatformId != VER_PLATFORM_WIN32_NT || //pVersion->pVersionInfo.dwMajorVersion != 4) { @@ -117,19 +103,13 @@ v3 = gamma; } else - { v3 = 0.1; - } - v2->fGamma = v3; - InitGammaRamp(&v2->field_60C); - SetGammaRamp(&v2->field_60C); + this->fGamma = v3; + InitGammaRamp(&this->field_60C); + SetGammaRamp(&this->field_60C); } } - - - - //----- (0044F215) -------------------------------------------------------- GammaController::GammaController() { @@ -139,29 +119,20 @@ fGamma = flt_4D8670_default_gamma; } - - //----- (0044F24B) -------------------------------------------------------- void GammaController::InitializeFromSurface(IDirectDrawSurface4 *a2) { - GammaController *v2; // esi@1 - IDirectDrawGammaControl **v3; // edi@1 - IDirectDrawGammaControl *v4; // eax@1 - - v2 = this; - v3 = &this->pGammaControl; this->pSurface = a2; - v4 = this->pGammaControl; - if ( v4 ) + if ( this->pGammaControl ) { - v4->Release(); - *v3 = 0; + this->pGammaControl->Release(); + this->pGammaControl = 0; } if ( pRenderer->IsGammaSupported() ) { - ErrD3D(a2->QueryInterface(IID_IDirectDrawGammaControl, (LPVOID *)v3)); + ErrD3D(a2->QueryInterface(IID_IDirectDrawGammaControl, (LPVOID *)&this->pGammaControl)); GetRamp(); - memcpy(&v2->field_60C, &v2->pDefaultRamp, 0x600u); - fGamma = _44F377(&v2->field_60C); + memcpy(&this->field_60C, &this->pDefaultRamp, 0x600u); + fGamma = _44F377(&this->field_60C); } } \ No newline at end of file
--- a/IconFrameTable.cpp Fri Mar 14 09:32:25 2014 +0600 +++ b/IconFrameTable.cpp Fri Mar 14 09:32:42 2014 +0600 @@ -7,83 +7,44 @@ //----- (00494F3A) -------------------------------------------------------- unsigned int IconFrameTable::FindIcon(const char *pIconName) { - IconFrameTable *v2; // esi@1 - int v3; // ebx@1 - unsigned int uID; // edi@1 - unsigned int result; // eax@4 - - v2 = this; - v3 = 0; - uID = 0; - if ( (signed int)this->uNumIcons <= 0 ) + for ( uint i = 0; i < (signed int)this->uNumIcons; i++ ) { -LABEL_4: - result = 0; + if ( !_stricmp(pIconName, this->pIcons[i].pAnimationName) ) + return i; } - else - { - while ( _stricmp(pIconName, v2->pIcons[v3].pAnimationName) ) - { - ++uID; - ++v3; - if ( (signed int)uID >= (signed int)v2->uNumIcons ) - goto LABEL_4; - } - result = uID; - } - return result; + return 0; } //----- (00494F70) -------------------------------------------------------- IconFrame *IconFrameTable::GetFrame(unsigned int uIconID, unsigned int uFrameID) { - //IconFrame *v3; // edi@1 - IconFrame *v4; // ecx@1 - //__int16 v5; // dx@2 int v6; // edx@3 - //unsigned int v7; // eax@3 - char *i; // ecx@3 - int v9; // esi@5 - IconFrame *result; // eax@6 + uint i; - v4 = &this->pIcons[uIconID]; - if ( v4->uFlags & 1 && v4->uAnimLength != 0 ) + if ( this->pIcons[uIconID].uFlags & 1 && this->pIcons[uIconID].uAnimLength != 0 ) { - v6 = ((signed int)uFrameID >> 3) % (unsigned __int16)v4->uAnimLength; - for ( i = (char *)&v4->uAnimTime; ; i += 32 ) - { - v9 = *(short *)i; - if ( v6 <= v9 ) - break; - v6 -= v9; - ++uIconID; - } - result = &this->pIcons[uIconID]; + v6 = ((signed int)uFrameID >> 3) % (unsigned __int16)this->pIcons[uIconID].uAnimLength; + for ( i = uIconID; v6 > this->pIcons[i].uAnimTime; i++ ) + v6 -= this->pIcons[i].uAnimTime; + return &this->pIcons[i]; } else - { - result = &this->pIcons[uIconID]; - } - return result; + return &this->pIcons[uIconID]; } //----- (00494FBF) -------------------------------------------------------- void IconFrameTable::InitializeAnimation(unsigned int uIconID) { - IconFrameTable *v2; // esi@1 unsigned int v3; // edi@3 const char *i; // eax@3 - IconFrame *v5; // eax@5 - v2 = this; if ( (signed int)uIconID <= (signed int)this->uNumIcons && (uIconID & 0x80000000u) == 0 ) { v3 = uIconID; - for ( i = this->pIcons[uIconID].pTextureName; ; i = v5[v3].pTextureName ) + for ( i = this->pIcons[uIconID].pTextureName; ; i = this->pIcons[v3].pTextureName ) { - v2->pIcons[v3].uTextureID = pIcons_LOD->LoadTexture(i, TEXTURE_16BIT_PALETTE); - v5 = v2->pIcons; - if ( !(v5[v3].uFlags & 1) ) + this->pIcons[v3].uTextureID = pIcons_LOD->LoadTexture(i, TEXTURE_16BIT_PALETTE); + if ( !(this->pIcons[v3].uFlags & 1) ) break; ++v3; } @@ -93,20 +54,20 @@ //----- (0049500A) -------------------------------------------------------- void IconFrameTable::ToFile() { - IconFrameTable *v1; // esi@1 + //IconFrameTable *v1; // esi@1 FILE *v2; // eax@1 - FILE *v3; // edi@1 + //FILE *v3; // edi@1 - IconFrameTable* Str = this; + //IconFrameTable* Str = this; - v1 = Str; + //v1 = Str; v2 = fopen("data\\dift.bin", "wb"); - v3 = v2; + //v3 = v2; if ( !v2 ) Error("Unable to save dift.bin!"); - fwrite(v1, 4u, 1u, v2); - fwrite(v1->pIcons, 0x20u, v1->uNumIcons, v3); - fclose(v3); + fwrite(this, 4, 1, v2); + fwrite(this->pIcons, 0x20u, this->uNumIcons, v2); + fclose(v2); } //----- (00495056) -------------------------------------------------------- @@ -129,7 +90,7 @@ //----- (0049509D) -------------------------------------------------------- int IconFrameTable::FromFileTxt(const char *Args) { - IconFrameTable *v2; // ebx@1 + //IconFrameTable *v2; // ebx@1 FILE *v3; // eax@1 int v4; // esi@3 void *v5; // eax@10 @@ -153,8 +114,9 @@ FILE *File; // [sp+300h] [bp-4h]@1 int Argsa; // [sp+30Ch] [bp+8h]@26 - v2 = this; + //v2 = this; //TileTable::dtor((TileTable *)this); + __debugbreak();//Ritor1: this function not used v3 = fopen(Args, "r"); File = v3; if ( !v3 ) @@ -179,13 +141,13 @@ while ( fgets(&Buf, 490, File) ); v4 = v21; } - v2->uNumIcons = v4; + this->uNumIcons = v4; v5 = malloc(32 * v4);//, "I Frames"); - v2->pIcons = (IconFrame *)v5; + this->pIcons = (IconFrame *)v5; if ( v5 ) { v6 = File; - v2->uNumIcons = 0; + this->uNumIcons = 0; fseek(v6, 0, 0); for ( i = fgets(&Buf, 490, File); i; i = fgets(&Buf, 490, File) ) { @@ -193,38 +155,38 @@ memcpy(&v20, frame_table_txt_parser(&Buf, &v19), sizeof(v20)); if ( v20.uPropCount && *v20.pProperties[0] != 47 ) { - strcpy(v2->pIcons[v2->uNumIcons].pAnimationName, v20.pProperties[0]); - strcpy(v2->pIcons[v2->uNumIcons].pTextureName, v20.pProperties[1]); + strcpy(this->pIcons[this->uNumIcons].pAnimationName, v20.pProperties[0]); + strcpy(this->pIcons[this->uNumIcons].pTextureName, v20.pProperties[1]); v8 = v20.pProperties[2]; - v2->pIcons[v2->uNumIcons].uFlags = 0; + this->pIcons[this->uNumIcons].uFlags = 0; if ( !_stricmp(v8, "new") ) { - v9 = (int)&v2->pIcons[v2->uNumIcons].uFlags; + v9 = (int)&this->pIcons[this->uNumIcons].uFlags; *(char *)v9 |= 4u; } - v2->pIcons[v2->uNumIcons].uAnimTime = atoi(v20.pProperties[3]); - v2->pIcons[v2->uNumIcons].uAnimLength = 0; - v2->pIcons[v2->uNumIcons++].uTextureID = 0; + this->pIcons[this->uNumIcons].uAnimTime = atoi(v20.pProperties[3]); + this->pIcons[this->uNumIcons].uAnimLength = 0; + this->pIcons[this->uNumIcons++].uTextureID = 0; } } fclose(File); v10 = 0; - if ( (signed int)(v2->uNumIcons - 1) > 0 ) + if ( (signed int)(this->uNumIcons - 1) > 0 ) { v11 = 0; do { - v12 = (int)&v2->pIcons[v11]; + v12 = (int)&this->pIcons[v11]; if ( !(*(char *)(v12 + 60) & 4) ) *(char *)(v12 + 28) |= 1u; ++v10; ++v11; } - while ( v10 < (signed int)(v2->uNumIcons - 1) ); + while ( v10 < (signed int)(this->uNumIcons - 1) ); } - for ( j = 0; j < (signed int)v2->uNumIcons; *(short *)(Argsa + 26) = v15 ) + for ( j = 0; j < (signed int)this->uNumIcons; *(short *)(Argsa + 26) = v15 ) { - v14 = v2->pIcons; + v14 = this->pIcons; Argsa = (int)&v14[j]; v15 = *(short *)(Argsa + 24); if ( *(char *)(Argsa + 28) & 1 )
--- a/Indoor.cpp Fri Mar 14 09:32:25 2014 +0600 +++ b/Indoor.cpp Fri Mar 14 09:32:42 2014 +0600 @@ -93,18 +93,9 @@ //----- (0043F39E) -------------------------------------------------------- void __fastcall PrepareDrawLists_BLV() { - //int *v1; // ecx@1 - //double v2; // ST30_8@3 - //double v3; // ST30_8@6 - //double v4; // ST28_8@6 int v5; // eax@4 - //int v6; // eax@7 unsigned int v7; // ebx@8 BLVSector *v8; // esi@8 - //unsigned __int16 *v9; // edi@8 - //int i; // [sp+18h] [bp-8h]@7 - //unsigned __int8 v11; // [sp+1Ch] [bp-4h]@3 - //signed int v12; // [sp+1Ch] [bp-4h]@8 pBLVRenderParams->Reset(); pMobileLightsStack->uNumLightsActive = 0; @@ -137,46 +128,25 @@ PrepareItemsRenderList_BLV(); PrepareActorRenderList_BLV(); - //v6 = 0; for (uint i = 0; i < pBspRenderer->uNumVisibleNotEmptySectors; ++i) { v7 = pBspRenderer->pVisibleSectorIDs_toDrawDecorsActorsEtcFrom[i]; - //v12 = 0; v8 = &pIndoor->pSectors[pBspRenderer->pVisibleSectorIDs_toDrawDecorsActorsEtcFrom[i]]; - //v9 = v8->pDecorationIDs; for (uint j = 0; j < v8->uNumDecorations; ++j) - //if ( v8->uNumDecorations > 0 ) - { - // do PrepareDecorationsRenderList_BLV(v8->pDecorationIDs[j], v7); - // while ( v12 < v8->uNumDecorations ); - } - //v6 = i + 1; } FindBillboardsLightLevels_BLV(); pGame->PrepareBloodsplats(); } - - //----- (004407D9) -------------------------------------------------------- void BLVRenderParams::Reset() { - //IndoorLocation_drawstru *v2; // ebx@1 - //int v4; // ST08_4@1 - //int v5; // ST04_4@1 - //int v6; // ST00_4@1 int v7; // eax@1 int v8; // ST08_4@2 int v9; // ST04_4@2 int v10; // ST00_4@2 - //unsigned int v11; // edi@4 - //unsigned int v12; // ecx@4 - //int v13; // edx@4 - //signed int v14; // ecx@4 - //unsigned int v15; // edx@4 - //unsigned int v16; // eax@4 double v17; // st7@5 int v18; // eax@5 double v19; // st7@5 @@ -188,7 +158,6 @@ int v25; // eax@5 int v26; // eax@5 signed int v27; // eax@6 - //int result; // eax@6 int v29; // [sp+24h] [bp+8h]@5 this->field_0_timer_ = pEventTimer->uTotalGameTimeElapsed; @@ -295,21 +264,17 @@ //----- (00440B44) -------------------------------------------------------- void IndoorLocation::ExecDraw(bool bD3D) { - int v2; // eax@3 - //IndoorCameraD3D_Vec4 *v3; // edx@4 - //unsigned int v5; // ecx@9 - //RenderVertexSoft *v6; // [sp-4h] [bp-8h]@4 - if (bD3D) { pIndoor->GetSector(pParty->vPosition.x, pParty->vPosition.y, pParty->vPosition.z); for (uint i = 0; i < pBspRenderer->num_faces; ++i) { - //v2 = pBspRenderer->faces[i].uNodeID; if (pBspRenderer->nodes[pBspRenderer->faces[i].uNodeID].viewing_portal_id == -1) IndoorLocation::ExecDraw_d3d(pBspRenderer->faces[i].uFaceID, nullptr, 4, nullptr); else - IndoorLocation::ExecDraw_d3d(pBspRenderer->faces[i].uFaceID, pBspRenderer->nodes[pBspRenderer->faces[i].uNodeID].std__vector_0007AC, 4, pBspRenderer->nodes[pBspRenderer->faces[i].uNodeID].pPortalBounding); + IndoorLocation::ExecDraw_d3d(pBspRenderer->faces[i].uFaceID, + pBspRenderer->nodes[pBspRenderer->faces[i].uNodeID].std__vector_0007AC, 4, + pBspRenderer->nodes[pBspRenderer->faces[i].uNodeID].pPortalBounding); } } else for (uint j = 0; j < pBspRenderer->num_faces; ++j ) @@ -373,9 +338,6 @@ } */ - - - //----- (00441BD4) -------------------------------------------------------- void IndoorLocation::Draw() { @@ -870,9 +832,7 @@ return true; } else - { return false; - } } //----- (00444810) -------------------------------------------------------- @@ -895,8 +855,8 @@ if ( bToggle ) pIndoor->pLights[sLightID].uAtributes &= 0xFFFFFFF7u; else - pIndoor->pLights[sLightID].uAtributes |= 8u; - pParty->uFlags |= 2u; + pIndoor->pLights[sLightID].uAtributes |= 8; + pParty->uFlags |= 2; } } @@ -1958,7 +1918,7 @@ //v201 = pFilename; *(int *)pDest = 1; File = pGames_LOD->FindContainer(pFilename, 0); - fread(&header, 0x10u, 1u, File); + fread(&header, 0x10u, 1, File); uint v155 = header.uCompressedSize; uint Count = header.uDecompressedSize; BLVFace* Src = (BLVFace *)malloc(header.uDecompressedSize); @@ -1966,9 +1926,7 @@ if ( v155 <= Count ) { if ( v155 == Count ) - { fread(Src, 1, Count, File); - } else { void* _uSourceLen = malloc(v155); @@ -1978,9 +1936,7 @@ } } else - { - MessageBoxW(nullptr, L"Can't load file!", L"E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\Polydata.cpp:1195", 0); - } + MessageBoxW(nullptr, L"Can't load file!", L"E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\Polydata.cpp:1195", 0); pData = ((char *)Src + 40); //v154 = 875; goto LABEL_140; @@ -2375,7 +2331,6 @@ v4 = v43[0]; if ( v55 == 1 ) return this->pFaces[v4].uSectorID; - v37 = 0; if ( !v55 ) return 0; pSectorID = 0; @@ -2383,38 +2338,25 @@ if ( v55 > 0 ) { v39 = sY; - while ( 1 ) + for ( v37 = 0; v37 < v55; ++v37 ) { - pFace = &this->pFaces[v43[v37]]; - //pPolygonType = pFace->uPolygonType; - if ( pFace->uPolygonType == POLYGON_Floor ) + if ( this->pFaces[v43[v37]].uPolygonType == POLYGON_Floor ) + v39 = sZ - this->pVertices[*this->pFaces[v43[v37]].pVertexIDs].z; + if ( this->pFaces[v43[v37]].uPolygonType == POLYGON_InBetweenFloorAndWall ) { - v42 = this->pVertices[*pFace->pVertexIDs].z; - v39 = sZ - v42; - //goto LABEL_47; + v39 = sZ - ((fixpoint_mul(this->pFaces[v43[v37]].zCalc1, (sX << 16)) + + fixpoint_mul(this->pFaces[v43[v37]].zCalc2, (sY << 16)) + + this->pFaces[v43[v37]].zCalc3 + + 0x8000) >> 16); } - if ( pFace->uPolygonType == POLYGON_InBetweenFloorAndWall ) - { - //v51 = pFace->zCalc1; - v57 = fixpoint_mul(pFace->zCalc1, (sX << 16)); - //v56 = sY << 16; - //v51 = pFace->zCalc2; - v56 = fixpoint_mul(pFace->zCalc2, (sY << 16)); - v42 = (v56 + pFace->zCalc3 + v57 + 32768) >> 16; - v39 = sZ - v42; - } -//LABEL_47: if ( v39 >= 0 ) { if ( v39 < v53 ) { - pSectorID = pFace->uSectorID; + pSectorID = this->pFaces[v43[v37]].uSectorID; v53 = v39; } } - ++v37; - if ( v37 >= v55 ) - return pSectorID; } } return pSectorID; @@ -2498,7 +2440,7 @@ //----- (0044C23B) -------------------------------------------------------- bool BLVFaceExtra::HasEventint() - { +{ signed int event_index; // eax@1 _evt_raw* start_evt; _evt_raw* end_evt; @@ -2548,8 +2490,6 @@ unsigned __int16 v50; // ax@48 unsigned int v51; // eax@51 unsigned __int16 v52; // ax@54 - int v53; // ecx@57 - unsigned __int64 v55; // qax@57 int v56; // ecx@58 int v57; // eax@58 Vec3_int_ v67; @@ -2650,7 +2590,11 @@ v84 = (unsigned __int64)(door->vDirection.z * (signed __int64)v67.z) >> 16; v31 = (v85 + v83 + v84) * (signed __int64)v29; v32 = v31 >> 16; - goto LABEL_58; + v57 = -v32; + v28->sTextureDeltaV = v57; + v28->sTextureDeltaU += door->pDeltaUs[v88]; + v28->sTextureDeltaV = v57 + door->pDeltaVs[v88]; + continue; }*/ v28->sTextureDeltaU = 0; v28->sTextureDeltaV = 0; @@ -2696,7 +2640,7 @@ v28->sTextureDeltaV -= v40; else { - if ( face->uAttributes & 0x20000 ) + if ( face->uAttributes & FACE_UNKNOW7 ) { if ( face->uBitmapID != -1 ) v28->sTextureDeltaV -= v82 + pBitmaps_LOD->GetTexture(face->uBitmapID)->uTextureHeight; @@ -2708,16 +2652,13 @@ v82 = fixpoint_mul(door->vDirection.y, v70.y); v83 = fixpoint_mul(door->vDirection.z, v70.z); v75 = v84 + v82 + v83; - v53 = v89; v82 = fixpoint_mul(v75, v89); v28->sTextureDeltaU = -v82; v84 = fixpoint_mul(door->vDirection.x, v67.x); v82 = fixpoint_mul(door->vDirection.y, v67.y); v83 = fixpoint_mul(door->vDirection.z, v67.z); v75 = v84 + v82 + v83; - v55 = v75 * (signed __int64)v53; - v32 = v55 >> 16; -LABEL_58: + v32 = fixpoint_mul(v75, v89); v57 = -v32; v28->sTextureDeltaV = v57; v28->sTextureDeltaU += door->pDeltaUs[v88];
--- a/Items.cpp Fri Mar 14 09:32:25 2014 +0600 +++ b/Items.cpp Fri Mar 14 09:32:42 2014 +0600 @@ -1,5 +1,6 @@ #define _CRT_SECURE_NO_WARNINGS #include <stdlib.h> +#include <string> #include "Items.h" #include "MapInfo.h" @@ -14,6 +15,22 @@ #include "texts.h" #include "mm7_data.h" +struct ci_less : std::binary_function<std::string, std::string, bool> +{ + // case-independent (ci) compare_less binary function + struct nocase_compare : public std::binary_function<unsigned char,unsigned char,bool> + { + bool operator() (const unsigned char& c1, const unsigned char& c2) const { + return tolower (c1) < tolower (c2); + } + }; + bool operator() (const std::string & s1, const std::string & s2) const { + return std::lexicographical_compare + (s1.begin (), s1.end (), // source range + s2.begin (), s2.end (), // dest range + nocase_compare ()); // comparison + } +}; struct ITEM_VARIATION @@ -309,15 +326,55 @@ //----- (00456D84) -------------------------------------------------------- void ItemsTable::Initialize() - { +{ + std::map<std::string, ITEM_EQUIP_TYPE, ci_less> equipStatMap; + equipStatMap["weapon"] = EQUIP_SINGLE_HANDED; + equipStatMap["weapon2"] = EQUIP_TWO_HANDED; + equipStatMap["weapon1or2"] = EQUIP_SINGLE_HANDED; + equipStatMap["missile"] = EQUIP_BOW; + equipStatMap["bow"] = EQUIP_BOW; + equipStatMap["armor"] = EQUIP_ARMOUR; + equipStatMap["shield"] = EQUIP_SHIELD; + equipStatMap["helm"] = EQUIP_HELMET; + equipStatMap["belt"] = EQUIP_BELT; + equipStatMap["cloak"] = EQUIP_CLOAK; + equipStatMap["gauntlets"] = EQUIP_GAUNTLETS; + equipStatMap["boots"] = EQUIP_BOOTS; + equipStatMap["ring"] = EQUIP_RING; + equipStatMap["amulet"] = EQUIP_AMULET; + equipStatMap["weaponw"] = EQUIP_WAND; + equipStatMap["herb"] = EQUIP_REAGENT; + equipStatMap["reagent"] = EQUIP_REAGENT; + equipStatMap["bottle"] = EQUIP_POTION; + equipStatMap["sscroll"] = EQUIP_SPELL_SCROLL; + equipStatMap["book"] = EQUIP_BOOK; + equipStatMap["mscroll"] = EQUIP_MESSAGE_SCROLL; + equipStatMap["gold"] = EQUIP_GOLD; + equipStatMap["gem"] = EQUIP_GEM; + + std::map<std::string, PLAYER_SKILL_TYPE, ci_less> equipSkillMap; + equipSkillMap["staff"] = PLAYER_SKILL_STAFF; + equipSkillMap["sword"] = PLAYER_SKILL_SWORD; + equipSkillMap["dagger"] = PLAYER_SKILL_DAGGER; + equipSkillMap["axe"] = PLAYER_SKILL_AXE; + equipSkillMap["spear"] = PLAYER_SKILL_SPEAR; + equipSkillMap["bow"] = PLAYER_SKILL_BOW; + equipSkillMap["mace"] = PLAYER_SKILL_MACE; + equipSkillMap["blaster"] = PLAYER_SKILL_BLASTER; + equipSkillMap["shield"] = PLAYER_SKILL_SHIELD; + equipSkillMap["leather"] = PLAYER_SKILL_LEATHER; + equipSkillMap["chain"] = PLAYER_SKILL_CHAIN; + equipSkillMap["plate"] = PLAYER_SKILL_PLATE; + equipSkillMap["club"] = PLAYER_SKILL_CLUB; + + std::map<std::string, ITEM_MATERIAL, ci_less> materialMap; + materialMap["artifact"] = MATERIAL_ARTEFACT; + materialMap["relic"] = MATERIAL_RELIC; + materialMap["special"] = MATERIAL_SPECIAL; + int i,j; - char* test_string; - unsigned char c; - bool break_loop; - unsigned int temp_str_len; - char* tmp_pos; - int decode_step; - int item_counter; + char* test_string; + int item_counter; pMapStats = new MapStats; pMapStats->Initialize(); @@ -348,44 +405,14 @@ for (i=0;i<24;++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 0: - pEnchantments[i].pBonusStat=RemoveQuotes(test_string); - break; - case 1: - pEnchantments[i].pOfName= RemoveQuotes(test_string); - break; - default: - pEnchantments[i].to_item[decode_step-2]=atoi(test_string); - } - } - else - { - if (decode_step) - break_loop = true; - } - ++decode_step; - test_string=tmp_pos+1; - } while ((decode_step<11)&&!break_loop); - } + auto tokens = Tokenize(test_string, '\t'); + pEnchantments[i].pBonusStat=RemoveQuotes(tokens[0]); + pEnchantments[i].pOfName=RemoveQuotes(tokens[1]); + for (int j = 0; j < 9; j++) + { + pEnchantments[i].to_item[j]=atoi(tokens[j+2]); + } + } memset(&pEnchantmentsSumm, 0, 36); for(i=0;i<9;++i) @@ -401,31 +428,13 @@ strtok(NULL, "\r"); strtok(NULL, "\r"); for(i=0;i<6;++i) //counted from 1 - { - 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 (decode_step==2) - bonus_ranges[i].minR = atoi(test_string); - else if (decode_step==3) - bonus_ranges[i].maxR =atoi(test_string); - ++decode_step; - test_string=tmp_pos+1; - } while ((decode_step<4)&&!break_loop); - } + { + test_string = strtok(NULL, "\r") + 1; + auto tokens = Tokenize(test_string, '\t'); + Assert(tokens.size() == 4, "Invalid number of tokens"); + bonus_ranges[i].minR = atoi(tokens[2]); + bonus_ranges[i].maxR =atoi(tokens[3]); + } pSpcItemsTXT_Raw = 0; @@ -435,67 +444,34 @@ strtok(NULL, "\r"); strtok(NULL, "\r"); for (i=0;i<72;++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 0: - pSpecialEnchantments[i].pBonusStatement=RemoveQuotes(test_string); - break; - case 1: - pSpecialEnchantments[i].pNameAdd= RemoveQuotes(test_string); - break; - case 14: - int res; - res=atoi(test_string); - if(!res) - { - ++test_string; - while (*test_string==' ')//fix X 2 case - ++test_string; - res=atoi(test_string); - } - pSpecialEnchantments[i].iValue=res; - break; - case 15: - pSpecialEnchantments[i].iTreasureLevel= tolower(*test_string) - 97;; - break; - default: - pSpecialEnchantments[i].to_item_apply[decode_step-2]=atoi(test_string); - } - } - else - { - if (decode_step) - break_loop = true; - } - ++decode_step; - test_string=tmp_pos+1; - } while ((decode_step<16)&&!break_loop); - } + { + test_string = strtok(NULL, "\r") + 1; + auto tokens = Tokenize(test_string, '\t'); + Assert(tokens.size() >= 17, "Invalid number of tokens"); + pSpecialEnchantments[i].pBonusStatement=RemoveQuotes(tokens[0]); + pSpecialEnchantments[i].pNameAdd= RemoveQuotes(tokens[1]); + for (int j = 0; j < 12; j++) + { + pSpecialEnchantments[i].to_item_apply[j]=atoi(tokens[j+2]); + } + int res; + res=atoi(tokens[14]); + if(!res) + { + ++tokens[14]; + while (*tokens[14]==' ')//fix X 2 case + ++tokens[14]; + res=atoi(tokens[14]); + } + pSpecialEnchantments[i].iValue=res; + pSpecialEnchantments[i].iTreasureLevel= tolower(tokens[15][0]) - 97; + } pSpecialEnchantments_count = 71; memset(&pSpecialEnchantmentsSumm, 0, 96); for(i=0;i<12;++i) { - for (j=0;j<=pSpecialEnchantments_count;++j) + for (unsigned int j=0;j<=pSpecialEnchantments_count;++j) pSpecialEnchantmentsSumm[i]+=pSpecialEnchantments[j].to_item_apply[i]; } @@ -507,346 +483,81 @@ strtok(NULL, "\r"); uAllItemsCount = 0; item_counter = 0; - while (true) + while (item_counter < 800) { 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 0: //Item # - item_counter=atoi(test_string); - uAllItemsCount=item_counter; - break; - case 1: //Pic File - pItems[item_counter].pIconName = RemoveQuotes(test_string); - break; - case 2: //Name - pItems[item_counter].pName = RemoveQuotes(test_string); - break; - case 3: //Value - pItems[item_counter].uValue=atoi(test_string); - break; - case 4: //Equip Stat - { - if ( !_stricmp(test_string, "weapon") ) - { - pItems[item_counter].uEquipType = EQUIP_SINGLE_HANDED; - break; - } - if ( !_stricmp(test_string, "weapon2") ) - { - pItems[item_counter].uEquipType = EQUIP_TWO_HANDED; - break; - } - if ( !_stricmp(test_string, "weapon1or2") ) - { - pItems[item_counter].uEquipType = EQUIP_SINGLE_HANDED; - break; - } - if ( !(_stricmp(test_string, "missile")&&_stricmp(test_string, "bow"))) - { - pItems[item_counter].uEquipType = EQUIP_BOW; - break; - } - if ( !_stricmp(test_string, "armor") ) - { - pItems[item_counter].uEquipType = EQUIP_ARMOUR; - break; - } - if ( !_stricmp(test_string, "shield") ) - { - pItems[item_counter].uEquipType = EQUIP_SHIELD; - break; - } - if ( !_stricmp(test_string, "helm") ) - { - pItems[item_counter].uEquipType = EQUIP_HELMET; - break; - } - if ( !_stricmp(test_string, "belt") ) - { - pItems[item_counter].uEquipType = EQUIP_BELT; - break; - } - if ( !_stricmp(test_string, "cloak") ) - { - pItems[item_counter].uEquipType = EQUIP_CLOAK; - break; - } - if ( !_stricmp(test_string, "gauntlets") ) - { - pItems[item_counter].uEquipType = EQUIP_GAUNTLETS; - break; - } - if ( !_stricmp(test_string, "boots") ) - { - pItems[item_counter].uEquipType = EQUIP_BOOTS; - break; - } - if ( !_stricmp(test_string, "ring") ) - { - pItems[item_counter].uEquipType = EQUIP_RING; - break; - } - if ( !_stricmp(test_string, "amulet") ) - { - pItems[item_counter].uEquipType = EQUIP_AMULET; - break; - } - if ( !_stricmp(test_string, "weaponw") ) - { - pItems[item_counter].uEquipType = EQUIP_WAND; - break; - } - if ( !(_stricmp(test_string, "herb")&&_stricmp(test_string, "reagent"))) - { - pItems[item_counter].uEquipType = EQUIP_REAGENT; - break; - } - if ( !_stricmp(test_string, "bottle") ) - { - pItems[item_counter].uEquipType = EQUIP_POTION; - break; - } - if ( !_stricmp(test_string, "sscroll") ) - { - pItems[item_counter].uEquipType = EQUIP_SPELL_SCROLL; - break; - } - if ( !_stricmp(test_string, "book") ) - { - pItems[item_counter].uEquipType = EQUIP_BOOK; - break; - } - if ( !_stricmp(test_string, "mscroll") ) - { - pItems[item_counter].uEquipType = EQUIP_MESSAGE_SCROLL; - break; - } - if ( !_stricmp(test_string, "gold") ) - { - pItems[item_counter].uEquipType = EQUIP_GOLD; - break; - } - if ( !_stricmp(test_string, "gem") ) - { - pItems[item_counter].uEquipType = EQUIP_GEM; - break; - } - pItems[item_counter].uEquipType = EQUIP_NONE; - break; - } - case 5: //Skill Group - { - if ( !_stricmp(test_string, "staff") ) - { - pItems[item_counter].uSkillType = PLAYER_SKILL_STAFF; - break; - } - if ( !_stricmp(test_string, "sword") ) - { - pItems[item_counter].uSkillType = PLAYER_SKILL_SWORD; - break; - } - if ( !_stricmp(test_string, "dagger") ) - { - pItems[item_counter].uSkillType = PLAYER_SKILL_DAGGER; - break; - } - if ( !_stricmp(test_string, "axe") ) - { - pItems[item_counter].uSkillType = PLAYER_SKILL_AXE; - break; - } - if ( !_stricmp(test_string, "spear") ) - { - pItems[item_counter].uSkillType = PLAYER_SKILL_SPEAR; - break; - } - if ( !_stricmp(test_string, "bow") ) - { - pItems[item_counter].uSkillType = PLAYER_SKILL_BOW; - break; - } - if ( !_stricmp(test_string, "mace") ) - { - pItems[item_counter].uSkillType = PLAYER_SKILL_MACE; - break; - } - if ( !_stricmp(test_string, "blaster") ) - { - pItems[item_counter].uSkillType = PLAYER_SKILL_BLASTER; - break; - } - if ( !_stricmp(test_string, "shield") ) - { - pItems[item_counter].uSkillType = PLAYER_SKILL_SHIELD; - break; - } - if ( !_stricmp(test_string, "leather") ) - { - pItems[item_counter].uSkillType = PLAYER_SKILL_LEATHER; - break; - } - if ( !_stricmp(test_string, "chain") ) - { - pItems[item_counter].uSkillType = PLAYER_SKILL_CHAIN; - break; - } - if ( !_stricmp(test_string, "plate") ) - { - pItems[item_counter].uSkillType = PLAYER_SKILL_PLATE; - break; - } - if ( !_stricmp(test_string, "club") ) - { - pItems[item_counter].uSkillType = PLAYER_SKILL_CLUB; - break; - } - pItems[item_counter].uSkillType = PLAYER_SKILL_MISC; - break; - } - case 6: //Mod1 - { - int ii; - char* test_char; - int tst_len; - tst_len=strlen(test_string); - pItems[item_counter].uDamageDice=0; - pItems[item_counter].uDamageRoll=0; - test_char=test_string; - for (ii=0; ii<tst_len; ++ii) - { - if (tolower(*test_char)=='d') - { - *test_char=0; - pItems[item_counter].uDamageDice=atoi(test_string); - pItems[item_counter].uDamageRoll=atoi(test_char+1); - *test_char='d'; - break; - } - ++test_char; - } - test_char=test_string; - if ((ii==tst_len)&&(tolower(*test_char)!='s')) - { - pItems[item_counter].uDamageDice=atoi(test_char); - pItems[item_counter].uDamageRoll=1; - } - break; - } - case 7: //Mod2 - pItems[item_counter].uDamageMod=atoi(test_string); - break; - case 8: //material - { - if ( !_stricmp(test_string, "artifact") ) - { - pItems[item_counter].uMaterial = MATERIAL_ARTEFACT; - break; - } - if ( !_stricmp(test_string, "relic") ) - { - pItems[item_counter].uMaterial = MATERIAL_RELIC; - break; - } - if ( !_stricmp(test_string, "special") ) - { - pItems[item_counter].uMaterial = MATERIAL_SPECIAL; - break; - } - pItems[item_counter].uMaterial = MATERIAL_COMMON; - break;} - case 9: //ID/Rep/St - pItems[item_counter].uItemID_Rep_St=atoi(test_string); - break; - case 10: //Not identified name - pItems[item_counter].pUnidentifiedName = RemoveQuotes(test_string); - break; - case 11: //Sprite Index - pItems[item_counter].uSpriteID=atoi(test_string); - break; - case 12: //VarA - { - pItems[item_counter]._additional_value=0; - pItems[item_counter]._bonus_type=0; - if (pItems[item_counter].uMaterial==MATERIAL_SPECIAL) - { - for(int ii=0; ii<24; ++ii) - { - if (!_stricmp(test_string,pEnchantments[ii].pOfName)) - { - pItems[item_counter]._bonus_type=ii+1; - break; - } - } - if (!pItems[item_counter]._bonus_type) - { - for(int ii=0; ii<72; ++ii) - { - if (!_stricmp(test_string,pSpecialEnchantments[ii].pNameAdd)) - { - pItems[item_counter]._additional_value=ii+1; - } - } - } - } + auto tokens = Tokenize(test_string, '\t'); + item_counter=atoi(tokens[0]); + uAllItemsCount=item_counter; + pItems[item_counter].pIconName = RemoveQuotes(tokens[1]); + pItems[item_counter].pName = RemoveQuotes(tokens[2]); + pItems[item_counter].uValue=atoi(tokens[3]); + auto findResult = equipStatMap.find(tokens[4]); + pItems[item_counter].uEquipType = findResult == equipStatMap.end() ? EQUIP_NONE : findResult->second; + auto findResult2 = equipSkillMap.find(tokens[5]); + pItems[item_counter].uSkillType = findResult2 == equipSkillMap.end() ? PLAYER_SKILL_MISC : findResult2->second; + auto tokens2 = Tokenize(tokens[6], 'd'); + if (tokens2.size() == 2) + { + pItems[item_counter].uDamageDice=atoi(tokens2[0]); + pItems[item_counter].uDamageRoll=atoi(tokens2[1]); + } + else if (tolower(tokens2[0][0]) != 's') + { + pItems[item_counter].uDamageDice=atoi(tokens2[0]); + pItems[item_counter].uDamageRoll=1; + } + else + { + pItems[item_counter].uDamageDice=0; + pItems[item_counter].uDamageRoll=0; + } + pItems[item_counter].uDamageMod=atoi(tokens[7]); + auto findResult3 = materialMap.find(tokens[8]); + pItems[item_counter].uMaterial = findResult3 == materialMap.end() ? MATERIAL_COMMON : findResult->second; + pItems[item_counter].uItemID_Rep_St=atoi(tokens[9]); + pItems[item_counter].pUnidentifiedName = RemoveQuotes(tokens[10]); + pItems[item_counter].uSpriteID=atoi(tokens[11]); - break; - } - case 13: //VarB - if ((pItems[item_counter].uMaterial==MATERIAL_SPECIAL)&&(pItems[item_counter]._bonus_type)) - { - char b_s=atoi(test_string); - if (b_s) - pItems[item_counter]._bonus_strength=b_s; - else - pItems[item_counter]._bonus_strength=1; - } - else - pItems[item_counter]._bonus_strength=0; - break; - case 14: //Equip X - pItems[item_counter].uEquipX=atoi(test_string); - break; - case 15: //Equip Y - pItems[item_counter].uEquipY=atoi(test_string); - break; - case 16: //Notes - pItems[item_counter].pDescription = RemoveQuotes(test_string); - break; + pItems[item_counter]._additional_value=0; + pItems[item_counter]._bonus_type=0; + if (pItems[item_counter].uMaterial==MATERIAL_SPECIAL) + { + for(int ii=0; ii<24; ++ii) + { + if (!_stricmp(tokens[12],pEnchantments[ii].pOfName)) + { + pItems[item_counter]._bonus_type=ii+1; + break; + } + } + if (!pItems[item_counter]._bonus_type) + { + for(int ii=0; ii<72; ++ii) + { + if (!_stricmp(tokens[12],pSpecialEnchantments[ii].pNameAdd)) + { + pItems[item_counter]._additional_value=ii+1; + } + } + } + } - } - } - else - { - if (decode_step) - break_loop = true; - } - ++decode_step; - test_string=tmp_pos+1; - } while ((decode_step<17)&&!break_loop); - ++item_counter; - if (item_counter>799) - break; - } - + if ((pItems[item_counter].uMaterial==MATERIAL_SPECIAL)&&(pItems[item_counter]._bonus_type)) + { + char b_s=atoi(tokens[13]); + if (b_s) + pItems[item_counter]._bonus_strength=b_s; + else + pItems[item_counter]._bonus_strength=1; + } + else + pItems[item_counter]._bonus_strength=0; + pItems[item_counter].uEquipX=atoi(tokens[14]); + pItems[item_counter].uEquipY=atoi(tokens[15]); + pItems[item_counter].pDescription = RemoveQuotes(tokens[16]); + item_counter++; + } pRndItemsTXT_Raw = NULL; uAllItemsCount = item_counter; @@ -855,64 +566,19 @@ strtok(NULL, "\r"); strtok(NULL, "\r"); strtok(NULL, "\r"); - item_counter = 0; - while (true) + for (item_counter = 0; item_counter < 619; item_counter++) { 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 0: - item_counter=atoi(test_string); - break; - case 2: - pItems[item_counter].uChanceByTreasureLvl1=atoi(test_string); - break; - case 3: - pItems[item_counter].uChanceByTreasureLvl2=atoi(test_string); - break; - case 4: - pItems[item_counter].uChanceByTreasureLvl3=atoi(test_string); - break; - case 5: - pItems[item_counter].uChanceByTreasureLvl4=atoi(test_string); - break; - case 6: - pItems[item_counter].uChanceByTreasureLvl5=atoi(test_string); - break; - case 7: - pItems[item_counter].uChanceByTreasureLvl6=atoi(test_string); - break; - } - } - else - { - if (decode_step) - break_loop = true; - } - ++decode_step; - test_string=tmp_pos+1; - } while ((decode_step<8)&&!break_loop); - ++item_counter; - if (item_counter>618) - break; - } + auto tokens = Tokenize(test_string, '\t'); + Assert(tokens.size() > 7, "Invalid number of tokens"); + item_counter = atoi(tokens[0]); + pItems[item_counter].uChanceByTreasureLvl1=atoi(tokens[2]); + pItems[item_counter].uChanceByTreasureLvl2=atoi(tokens[3]); + pItems[item_counter].uChanceByTreasureLvl3=atoi(tokens[4]); + pItems[item_counter].uChanceByTreasureLvl4=atoi(tokens[5]); + pItems[item_counter].uChanceByTreasureLvl5=atoi(tokens[6]); + pItems[item_counter].uChanceByTreasureLvl6=atoi(tokens[7]); + } //ChanceByTreasureLvl Summ - to calculate chance memset(&uChanceByTreasureLvlSumm, 0, 24); @@ -930,119 +596,35 @@ for (i=0;i<3;++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 2: - switch (i) - { - case 0: - uBonusChanceStandart[0]=atoi(test_string); - break; - case 1: - uBonusChanceSpecial[0]=atoi(test_string); - break; - case 2: - uBonusChanceWpSpecial[0]=atoi(test_string); - break; - } - break; - case 3: - switch (i) - { - case 0: - uBonusChanceStandart[1]=atoi(test_string); - break; - case 1: - uBonusChanceSpecial[1]=atoi(test_string); - break; - case 2: - uBonusChanceWpSpecial[1]=atoi(test_string); - break; - } - break; - case 4: - switch (i) - { - case 0: - uBonusChanceStandart[2]=atoi(test_string); - break; - case 1: - uBonusChanceSpecial[2]=atoi(test_string); - break; - case 2: - uBonusChanceWpSpecial[2]=atoi(test_string); - break; - } - break; - case 5: - switch (i) - { - case 0: - uBonusChanceStandart[3]=atoi(test_string); - break; - case 1: - uBonusChanceSpecial[3]=atoi(test_string); - break; - case 2: - uBonusChanceWpSpecial[3]=atoi(test_string); - break; - } - break; - case 6: - switch (i) - { - case 0: - uBonusChanceStandart[4]=atoi(test_string); - break; - case 1: - uBonusChanceSpecial[4]=atoi(test_string); - break; - case 2: - uBonusChanceWpSpecial[4]=atoi(test_string); - break; - } - break; - case 7: - switch (i) - { - case 0: - uBonusChanceStandart[5]=atoi(test_string); - break; - case 1: - uBonusChanceSpecial[5]=atoi(test_string); - break; - case 2: - uBonusChanceWpSpecial[5]=atoi(test_string); - break; - } - break; - } - } - else - { - if (decode_step) - break_loop = true; - } - ++decode_step; - test_string=tmp_pos+1; - } while ((decode_step<8)&&!break_loop); + auto tokens = Tokenize(test_string, '\t'); + Assert(tokens.size() > 7, "Invalid number of tokens"); + switch (i) + { + case 0: + uBonusChanceStandart[0]=atoi(tokens[2]); + uBonusChanceStandart[1]=atoi(tokens[3]); + uBonusChanceStandart[2]=atoi(tokens[4]); + uBonusChanceStandart[3]=atoi(tokens[5]); + uBonusChanceStandart[4]=atoi(tokens[6]); + uBonusChanceStandart[5]=atoi(tokens[7]); + break; + case 1: + uBonusChanceSpecial[0]=atoi(tokens[2]); + uBonusChanceSpecial[1]=atoi(tokens[3]); + uBonusChanceSpecial[2]=atoi(tokens[4]); + uBonusChanceSpecial[3]=atoi(tokens[5]); + uBonusChanceSpecial[4]=atoi(tokens[6]); + uBonusChanceSpecial[5]=atoi(tokens[7]); + break; + case 2: + uBonusChanceWpSpecial[0]=atoi(tokens[2]); + uBonusChanceWpSpecial[1]=atoi(tokens[3]); + uBonusChanceWpSpecial[2]=atoi(tokens[4]); + uBonusChanceWpSpecial[3]=atoi(tokens[5]); + uBonusChanceWpSpecial[4]=atoi(tokens[6]); + uBonusChanceWpSpecial[5]=atoi(tokens[7]); + break; + } } if ( pRndItemsTXT_Raw ) @@ -1057,51 +639,14 @@ for (i=0; i<37; ++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: - pSkillDesc[i] = RemoveQuotes(test_string); - break; - case 2: - pNormalSkillDesc[i] = RemoveQuotes(test_string); - break; - case 3: - pExpertSkillDesc[i] = RemoveQuotes(test_string); - break; - case 4: - pMasterSkillDesc[i] = RemoveQuotes(test_string); - break; - case 5: - pGrandSkillDesc[i] = RemoveQuotes(test_string); - break; - } - } - else - { - if (decode_step) - break_loop = true; - } - ++decode_step; - test_string=tmp_pos+1; - } while ((decode_step<6)&&!break_loop); - } + auto tokens = Tokenize(test_string, '\t'); + Assert(tokens.size() >= 6, "Invalid number of tokens"); + pSkillDesc[i] = RemoveQuotes(tokens[1]); + pNormalSkillDesc[i] = RemoveQuotes(tokens[2]); + pExpertSkillDesc[i] = RemoveQuotes(tokens[3]); + pMasterSkillDesc[i] = RemoveQuotes(tokens[4]); + pGrandSkillDesc[i] = RemoveQuotes(tokens[5]); + } pStatsTXT_Raw = 0; pStatsTXT_Raw = (char *)pEvents_LOD->LoadRaw("stats.txt", 0); @@ -1109,139 +654,89 @@ for (i=0; i<26; ++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 (i) - { - case 0: - case 1: - case 2: - case 3: - case 4: - case 5: - case 6: - pAttributeDescriptions[i] = RemoveQuotes(test_string); - break; - case 7: - pHealthPointsAttributeDescription = RemoveQuotes(test_string); - break; - case 8: - pArmourClassAttributeDescription = RemoveQuotes(test_string); - break; - case 9: - pSpellPointsAttributeDescription = RemoveQuotes(test_string); - break; - case 10: - pPlayerConditionAttributeDescription = RemoveQuotes(test_string); - break; - case 11: - pFastSpellAttributeDescription = RemoveQuotes(test_string); - break; - case 12: - pPlayerAgeAttributeDescription = RemoveQuotes(test_string); - break; - case 13: - pPlayerLevelAttributeDescription = RemoveQuotes(test_string); - break; - case 14: - pPlayerExperienceAttributeDescription = RemoveQuotes(test_string); - break; - case 15: - pAttackBonusAttributeDescription = RemoveQuotes(test_string); - break; - case 16: - pAttackDamageAttributeDescription = RemoveQuotes(test_string); - break; - case 17: - pMissleBonusAttributeDescription = RemoveQuotes(test_string); - break; - case 18: - pMissleDamageAttributeDescription = RemoveQuotes(test_string); - break; - case 19: - pFireResistanceAttributeDescription = RemoveQuotes(test_string); - break; - case 20: - pAirResistanceAttributeDescription = RemoveQuotes(test_string); - break; - case 21: - pWaterResistanceAttributeDescription = RemoveQuotes(test_string); - break; - case 22: - pEarthResistanceAttributeDescription = RemoveQuotes(test_string); - break; - case 23: - pMindResistanceAttributeDescription = RemoveQuotes(test_string); - break; - case 24: - pBodyResistanceAttributeDescription = RemoveQuotes(test_string); - break; - case 25: - pSkillPointsAttributeDescription = RemoveQuotes(test_string); - break; - } - } - else - { - if (decode_step) - break_loop = true; - } - ++decode_step; - test_string=tmp_pos+1; - } while ((decode_step<2)&&!break_loop); - } - - + auto tokens = Tokenize(test_string, '\t'); + Assert(tokens.size() == 2, "Invalid number of tokens"); + switch (i) + { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + pAttributeDescriptions[i] = RemoveQuotes(tokens[1]); + break; + case 7: + pHealthPointsAttributeDescription = RemoveQuotes(tokens[1]); + break; + case 8: + pArmourClassAttributeDescription = RemoveQuotes(tokens[1]); + break; + case 9: + pSpellPointsAttributeDescription = RemoveQuotes(tokens[1]); + break; + case 10: + pPlayerConditionAttributeDescription = RemoveQuotes(tokens[1]); + break; + case 11: + pFastSpellAttributeDescription = RemoveQuotes(tokens[1]); + break; + case 12: + pPlayerAgeAttributeDescription = RemoveQuotes(tokens[1]); + break; + case 13: + pPlayerLevelAttributeDescription = RemoveQuotes(tokens[1]); + break; + case 14: + pPlayerExperienceAttributeDescription = RemoveQuotes(tokens[1]); + break; + case 15: + pAttackBonusAttributeDescription = RemoveQuotes(tokens[1]); + break; + case 16: + pAttackDamageAttributeDescription = RemoveQuotes(tokens[1]); + break; + case 17: + pMissleBonusAttributeDescription = RemoveQuotes(tokens[1]); + break; + case 18: + pMissleDamageAttributeDescription = RemoveQuotes(tokens[1]); + break; + case 19: + pFireResistanceAttributeDescription = RemoveQuotes(tokens[1]); + break; + case 20: + pAirResistanceAttributeDescription = RemoveQuotes(tokens[1]); + break; + case 21: + pWaterResistanceAttributeDescription = RemoveQuotes(tokens[1]); + break; + case 22: + pEarthResistanceAttributeDescription = RemoveQuotes(tokens[1]); + break; + case 23: + pMindResistanceAttributeDescription = RemoveQuotes(tokens[1]); + break; + case 24: + pBodyResistanceAttributeDescription = RemoveQuotes(tokens[1]); + break; + case 25: + pSkillPointsAttributeDescription = RemoveQuotes(tokens[1]); + break; + } + } + pClassTXT_Raw = 0; pClassTXT_Raw = (char *)pEvents_LOD->LoadRaw("class.txt", 0); strtok(pClassTXT_Raw, "\r"); for (i=0; i<36; ++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(i) - pClassDescriptions[i]=RemoveQuotes(test_string); - } - else - { - if (decode_step) - break_loop = true; - } - ++decode_step; - test_string=tmp_pos+1; - } while ((decode_step<2)&&!break_loop); - } + auto tokens = Tokenize(test_string, '\t'); + Assert(tokens.size() == 3, "Invalid number of tokens"); + pClassDescriptions[i]=RemoveQuotes(tokens[1]); + } @@ -1543,62 +1038,28 @@ ItemsTable *v5; // edi@1 int v6; // ebx@3 - int *v7; // ecx@33 + //int *v7; // ecx@33 //int v8; // eax@34 //int v9; // eax@39 int current_chance; // ebx@43 int tmp_chance; // ecx@47 - unsigned int *v12; // edx@48 - unsigned int v13; // eax@49 - signed int v14; // ebx@52 - int v15; // eax@53 - signed int v16; // eax@55 int v17; // ebx@57 int v18; // edx@62 - signed int v19; // ebx@70 - unsigned __int8 v20; // al@81 - int v21; // eax@84 - int v22; // ebx@85 - int v23; // eax@86 - int v24; // ebx@86 - int special_chance; // edx@86 - int v26; // edx@89 + unsigned int special_chance; // edx@86 + unsigned int v26; // edx@89 unsigned int v27; // eax@89 - int i; // ebx@89 - unsigned int v29; // ecx@90 - int v30; // ebx@91 - int v31; // eax@91 int v32; // ecx@91 int v33; // eax@91 - int v34; // eax@97 - unsigned __int8 v35; // sf@97 - unsigned __int8 v36; // of@97 - int v37; // ebx@98 - int v38; // edx@99 - signed int v39; // ebx@101 - int v40; // ecx@102 - char v41; // zf@107 - char v42; // al@108 - char v43; // al@111 - int *v44; // edx@118 + unsigned int v34; // eax@97 int v45; // eax@120 int v46; // edx@120 int j; // eax@121 - unsigned int v48; // ecx@123 - int v49; // eax@123 - int v50; // eax@123 int val_list[800]; // [sp+Ch] [bp-C88h]@33 int total_chance; // [sp+C8Ch] [bp-8h]@33 - int v53; // [sp+C90h] [bp-4h]@1 int v54; // [sp+C9Ch] [bp+8h]@3 //int v55; // [sp+CA0h] [bp+Ch]@34 signed int v56; // [sp+CA0h] [bp+Ch]@55 int v57; // [sp+CA0h] [bp+Ch]@62 - int *v58; // [sp+CA0h] [bp+Ch]@102 - int v59; // [sp+CA0h] [bp+Ch]@123 - //signed int a2a; // [sp+CA4h] [bp+10h]@33 - int a2b; // [sp+CA4h] [bp+10h]@101 - int a2c; // [sp+CA4h] [bp+10h]@120 v5 = this; if (!out_item) @@ -1770,7 +1231,7 @@ case EQUIP_BOW : if ( !uBonusChanceWpSpecial[v6] ) return; - if ((rand() % 100)>=uBonusChanceWpSpecial[v6]) + if ((uint)(rand() % 100)>=uBonusChanceWpSpecial[v6]) return; break; case EQUIP_ARMOUR : @@ -1827,7 +1288,7 @@ int spc_sum=0; int spc; memset(&val_list, 0, 3200); - for (int i=0; i<pSpecialEnchantments_count;++i) + for (unsigned int i=0; i<pSpecialEnchantments_count;++i) { int tr_lv= pSpecialEnchantments[i].iTreasureLevel; switch ( treasure_level - 1 ) @@ -2534,29 +1995,18 @@ void GenerateItemsInChest() { unsigned int v0; // eax@1 - Chest *v1; // ebx@1 MapInfo *v2; // esi@1 ItemGen *v3; // ebx@2 int v4; // ebp@4 int v5; // edi@4 int v6; // esi@4 - int v7; // eax@4 signed int v8; // esi@4 int v9; // edx@4 int v10; // esi@8 int v11; // ebp@25 int v12; // esi@25 - signed int v13; // ebp@27 ItemGen *v14; // edi@28 - signed int v15; // edx@32 - signed __int64 v16; // qtt@32 - int v17; // esi@34 signed int v18; // [sp+10h] [bp-18h]@1 - int v19; // [sp+14h] [bp-14h]@4 - MapInfo *v20; // [sp+18h] [bp-10h]@1 - Chest *v21; // [sp+1Ch] [bp-Ch]@1 - int v22; // [sp+20h] [bp-8h]@26 - signed int v23; // [sp+24h] [bp-4h]@2 v18 = rand() % 100; //main random v0 = pMapStats->GetMapInfo(pCurrentMapName); @@ -2859,10 +2309,6 @@ { int result; // eax@2 char v5; // zf@3 - const char *v6; // [sp-Ch] [bp-18h]@88 - signed int v7; // [sp-8h] [bp-14h]@61 - int v8; // [sp-4h] [bp-10h]@61 - signed int v9; // [sp-4h] [bp-10h]@69 result = 0; //BUG fn is void if ( item_id <= 500 )
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MapInfo.cpp Fri Mar 14 09:32:42 2014 +0600 @@ -0,0 +1,518 @@ +#include "MapInfo.h" +#include "LOD.h" +#include "ErrorHandling.h" +#include "mm7_data.h" +#include "texts.h" +#include "ObjectList.h" +#include "SpriteObject.h" +#include "Indoor.h" +#include "mm7_unsorted_subs.h" + + +//----- (00453F62) -------------------------------------------------------- +void MapStats::Initialize() +{ + char work_str[32]; // [sp+Ch] [bp-34h]@3 + int work_str_pos; + int work_str_len; + 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 ( pMapStatsTXT_Raw ) + free(pMapStatsTXT_Raw); + pMapStatsTXT_Raw = NULL; + pMapStatsTXT_Raw = (char *)pEvents_LOD->LoadRaw("MapStats.txt", 0); + strtok(pMapStatsTXT_Raw, "\r"); + strtok(NULL, "\r"); + strtok(NULL, "\r"); + + for (i=1; i<77; ++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: + pInfos[i].pName = RemoveQuotes(test_string); + break; + case 2: + pInfos[i].pFilename = RemoveQuotes(test_string); + break; + case 3: + pInfos[i].uNumResets = atoi(test_string); + break; + case 4: + pInfos[i].uFirstVisitedAt = atoi(test_string); + break; + case 5: + pInfos[i]._per = atoi(test_string); + break; + case 6: + pInfos[i].uRespawnIntervalDays = atoi(test_string); + break; + case 7: + pInfos[i]._alert_days = atoi(test_string); + break; + case 8: + pInfos[i]._steal_perm = atoi(test_string); + break; + case 9: + pInfos[i].LockX5 = atoi(test_string); + break; + case 10: + pInfos[i].Trap_D20 = atoi(test_string); + break; + case 11: + pInfos[i].Treasure_prob = atoi(test_string); + break; + case 12: + pInfos[i].Encounter_percent = atoi(test_string); + break; + case 13: + pInfos[i].EncM1percent = atoi(test_string); + break; + case 14: + pInfos[i].EncM2percent = atoi(test_string); + break; + case 15: + pInfos[i].EncM3percent = atoi(test_string); + break; + case 16: + pInfos[i].pEncounterMonster1Texture = RemoveQuotes(test_string); + break; + case 18: + pInfos[i].Dif_M1 = atoi(test_string); + break; + case 19: + pInfos[i].uEncounterMonster1AtLeast = 1; + pInfos[i].uEncounterMonster1AtMost = 1; + strcpy(work_str, test_string); + work_str_pos = 0; + work_str_len=strlen(work_str); + if (work_str_len ) + { + while (work_str[work_str_pos] != '-' ) + { + ++work_str_pos; + if (work_str_pos >= work_str_len ) + break; + } + work_str[work_str_pos] = 0; + pInfos[i].uEncounterMonster1AtLeast = atoi(work_str); + if ( work_str_pos < work_str_len ) + pInfos[i].uEncounterMonster1AtMost = atoi(&work_str[work_str_pos + 1]); + else + pInfos[i].uEncounterMonster1AtMost = pInfos[i].uEncounterMonster1AtLeast; + } + break; + case 20: + pInfos[i].pEncounterMonster2Texture = RemoveQuotes(test_string); + break; + case 22: + pInfos[i].Dif_M2 = atoi(test_string); + break; + case 23: + pInfos[i].uEncounterMonster2AtLeast = 1; + pInfos[i].uEncounterMonster2AtMost = 1; + strcpy(work_str, test_string); + work_str_pos = 0; + work_str_len=strlen(work_str); + if (work_str_len ) + { + while (work_str[work_str_pos] != '-' ) + { + ++work_str_pos; + if (work_str_pos >= work_str_len ) + break; + } + work_str[work_str_pos] = 0; + pInfos[i].uEncounterMonster2AtLeast = atoi(work_str); + if ( work_str_pos < work_str_len ) + pInfos[i].uEncounterMonster2AtMost = atoi(&work_str[work_str_pos + 1]); + else + pInfos[i].uEncounterMonster2AtMost = pInfos[i].uEncounterMonster2AtLeast; + } + break; + case 24: + pInfos[i].pEncounterMonster3Texture = RemoveQuotes(test_string); + break; + case 26: + pInfos[i].Dif_M3 = atoi(test_string); + break; + case 27: + pInfos[i].uEncounterMonster3AtLeast = 1; + pInfos[i].uEncounterMonster3AtMost = 1; + strcpy(work_str, test_string); + work_str_pos = 0; + work_str_len=strlen(work_str); + if (work_str_len ) + { + while (work_str[work_str_pos] != '-' ) + { + ++work_str_pos; + if (work_str_pos >= work_str_len ) + break; + } + work_str[work_str_pos] = 0; + pInfos[i].uEncounterMonster3AtLeast = atoi(work_str); + if ( work_str_pos < work_str_len ) + pInfos[i].uEncounterMonster3AtMost = atoi(&work_str[work_str_pos + 1]); + else + pInfos[i].uEncounterMonster3AtMost = pInfos[i].uEncounterMonster3AtLeast; + } + break; + case 28: + pInfos[i].uRedbookTrackID = atoi(test_string); + break; + case 29: + { + if ( !strcmp(test_string, "CAVE") ) + { + pInfos[i].uEAXEnv = 8; + break; + } + if ( !strcmp(test_string, "STONEROOM") ) + { + pInfos[i].uEAXEnv = 5; + break; + } + if ( !strcmp(test_string, "MOUNTAINS") ) + { + pInfos[i].uEAXEnv = 17; + break; + } + if ( !strcmp(test_string, "PLAIN") ) + { + pInfos[i].uEAXEnv = 19; + break; + } + if ( !strcmp(test_string, "FOREST") ) + { + pInfos[i].uEAXEnv = 15; + break; + } + if ( !strcmp(test_string, "CITY") ) + { + pInfos[i].uEAXEnv = 16; + break; + } + if ( !strcmp(test_string, "UNDERWATER") ) + { + pInfos[i].uEAXEnv = 22; + break; + } + if ( !strcmp(test_string, "ARENA") ) + { + pInfos[i].uEAXEnv = 9; + break; + } + if ( !strcmp(test_string, "GENERIC") ) + { + pInfos[i].uEAXEnv = 0; + break; + } + if ( !strcmp(test_string, "PADDEDCELL") ) + { + pInfos[i].uEAXEnv = 1; + break; + } + if ( !strcmp(test_string, "ROOM") ) + { + pInfos[i].uEAXEnv = 2; + break; + } + if ( !strcmp(test_string, "BATHROOM") ) + { + pInfos[i].uEAXEnv = 3; + break; + } + if ( !strcmp(test_string, "LIVINGROOM") ) + { + pInfos[i].uEAXEnv = 4; + break; + } + if ( !strcmp(test_string, "AUDITORIUM") ) + { + pInfos[i].uEAXEnv = 6; + break; + } + if ( !strcmp(test_string, "CONCERTHALL") ) + { + pInfos[i].uEAXEnv = 7; + break; + } + if ( !strcmp(test_string, "HANGAR") ) + { + pInfos[i].uEAXEnv = 10; + break; + } + if ( !strcmp(test_string, "CARPETEDHALLWAY") ) + { + pInfos[i].uEAXEnv = 11; + break; + } + if ( !strcmp(test_string, "HALLWAY") ) + { + pInfos[i].uEAXEnv = 12; + break; + } + if ( !strcmp(test_string, "STONECORRIDOR") ) + { + pInfos[i].uEAXEnv = 13; + break; + } + if ( !strcmp(test_string, "ALLEY") ) + { + pInfos[i].uEAXEnv = 14; + break; + } + if ( !strcmp(test_string, "QUARRY") ) + { + pInfos[i].uEAXEnv = 18; + break; + } + if ( !strcmp(test_string, "PARKINGLOT") ) + { + pInfos[i].uEAXEnv = 20; + break; + } + if ( !strcmp(test_string, "SEWERPIPE") ) + { + pInfos[i].uEAXEnv = 21; + break; + } + if ( !strcmp(test_string, "DRUGGED") ) + { + pInfos[i].uEAXEnv = 23; + break; + } + if ( !strcmp(test_string, "DIZZY") ) + { + pInfos[i].uEAXEnv = 24; + break; + } + if ( !strcmp(test_string, "PSYCHOTIC") ) + { + pInfos[i].uEAXEnv = 25; + break; + } + pInfos[i].uEAXEnv = 26; + + } + break; + } + } + else + { + break_loop = true; + } + ++decode_step; + test_string=tmp_pos+1; + } while ((decode_step<31)&&!break_loop); + } + + uNumMaps = 77; +} +// 453F62: using guessed type char Str[32]; + +//----- (00410D99) -------------------------------------------------------- +int MapStats::sub_410D99_get_map_index(int a1) +{ + for (int i = 1; i <= pMapStats->uNumMaps; i++) + { + if (_stricmp(pMapStats->pInfos[i].pFilename, pGames_LOD->pSubIndices[a1].pFilename) ) + return i; + } + Error("Map not found"); + return -1; +} + +//----- (004547A3) -------------------------------------------------------- +MAP_TYPE MapStats::GetMapInfo(const char *Str2) +{ + Assert(uNumMaps >= 2); + + for (uint i = 1; i < uNumMaps; ++i) + if (!_stricmp(pInfos[i].pFilename, Str2)) + return (MAP_TYPE)i; + + Error("Map not found!"); + return (MAP_TYPE)-1; +} + + +//----- (0044FFD8) -------------------------------------------------------- +int MapInfo::SpawnRandomTreasure(SpawnPointMM7 *a2) +{ + //MapInfo *v2; // ebx@1 + //SpawnPointMM7 *v3; // esi@1 + //int v4; // eax@1 + int v5; // edx@1 + int v6; // eax@1 + int v7; // ecx@1 + int v8; // ebx@1 + int v9; // eax@1 + signed int v10; // ebx@1 + signed int result; // eax@1 + signed __int64 v12; // qtt@1 + int v13; // ebx@1 + int v14; // edx@10 + signed int v15; // ebx@20 + unsigned __int16 v16; // dx@20 + ObjectDesc *v17; // ecx@21 + unsigned __int16 v18; // ax@24 + int v19; // ST0C_4@27 + int v20; // ST08_4@27 + int v21; // ST04_4@27 + int v22; // eax@27 + signed int v23; // ebx@29 + unsigned __int16 v24; // dx@29 + ObjectDesc *v25; // ecx@30 + unsigned __int16 v26; // ax@33 + //int v27; // ecx@35 + //int v28; // eax@35 + //int v29; // esi@35 + //__int16 v30; // ax@35 + SpriteObject a1a; // [sp+Ch] [bp-7Ch]@1 + //int v32; // [sp+7Ch] [bp-Ch]@1 + //int v33; // [sp+80h] [bp-8h]@1 + int v34; // [sp+84h] [bp-4h]@1 + + //auto a1 = this; + //v2 = a1; + //v3 = a2; + //v4 = rand(); + v34 = 0; + v5 = rand() % 100; + // v6 = 2 * (v2->Treasure_prob + 7 * v3->uIndex) - 14; + v7 = (unsigned __int8)byte_4E8168[a2->uIndex - 1][2 * Treasure_prob]; + v8 = (unsigned __int8)byte_4E8168[a2->uIndex - 1][2 * Treasure_prob + 1]; + //v32 = v5; + //v33 = v7; + v9 = rand(); + v10 = v8 - v7 + 1; + v12 = v9; + result = v9 / v10; + v13 = v7 + (unsigned __int64)(v12 % v10); + if ( v13 < 7 ) + { + if ( v5 < 20 ) + return result; + if ( v5 >= 60 ) + { + v19 = a2->vPosition.z; + v20 = a2->vPosition.y; + v21 = a2->vPosition.x; + v22 = rand(); + return sub_450521_ProllyDropItemAt(v13, v22 % 27 + 20, v21, v20, v19, 0); + } + if ( a2->uIndex == 1 ) + { + v14 = rand() % 51 + 50; + a1a.stru_24.uItemID = 197; + v34 = v14; + } + else if ( a2->uIndex == 2 ) + { + v14 = rand() % 101 + 100; + a1a.stru_24.uItemID = 197; + v34 = v14; + } + else if ( a2->uIndex == 3 ) + { + v14 = rand() % 301 + 200; + a1a.stru_24.uItemID = 198; + v34 = v14; + } + else if ( a2->uIndex == 4 ) + { + v14 = rand() % 501 + 500; + a1a.stru_24.uItemID = 198; + v34 = v14; + } + else if ( a2->uIndex == 5 ) + { + v14 = rand() % 1001 + 1000; + a1a.stru_24.uItemID = 199; + v34 = v14; + } + else if ( a2->uIndex == 6 ) + { + v14 = rand() % 3001 + 2000; + a1a.stru_24.uItemID = 199; + v34 = v14; + } + v15 = 0; + v16 = pItemsTable->pItems[a1a.stru_24.uItemID].uSpriteID; + a1a.uType = pItemsTable->pItems[a1a.stru_24.uItemID].uSpriteID; + v18 = 0; + for( int i = 0; i < pObjectList->uNumObjects; i++ ) + { + if ( pObjectList->pObjects[i].uObjectID == v16 ) + { + v18 = i; + break; + } + } + a1a.stru_24.SetIdentified(); + a1a.uObjectDescID = v18; + a1a.stru_24.uSpecEnchantmentType = v34; + } + else + { + result = a1a.stru_24.GenerateArtifact(); + if ( !result ) + return result; + v23 = 0; + v24 = pItemsTable->pItems[a1a.stru_24.uItemID].uSpriteID; + a1a.uType = pItemsTable->pItems[a1a.stru_24.uItemID].uSpriteID; + v26 = 0; + for( int i = 0; i < pObjectList->uNumObjects; i++ ) + { + if( v24 == pObjectList->pObjects[i].uObjectID ) + { + v26 = i; + break; + } + } + a1a.uObjectDescID = v26; + a1a.stru_24.Reset(); + } + a1a.vPosition.y = a2->vPosition.y; + a1a.uAttributes = 0; + a1a.uSoundID = 0; + a1a.uFacing = 0; + a1a.vPosition.z = a2->vPosition.z; + a1a.vPosition.x = a2->vPosition.x; + a1a.spell_skill = 0; + a1a.spell_level = 0; + a1a.spell_id = 0; + a1a.spell_target_pid = 0; + a1a.spell_caster_pid = 0; + a1a.uSpriteFrameID = 0; + a1a.uSectorID = pIndoor->GetSector(a2->vPosition.x, a2->vPosition.y, a2->vPosition.z);; + return a1a.Create(0, 0, 0, 0); +} +
--- a/MapInfo.h Fri Mar 14 09:32:25 2014 +0600 +++ b/MapInfo.h Fri Mar 14 09:32:42 2014 +0600 @@ -86,9 +86,11 @@ { void Initialize(); MAP_TYPE GetMapInfo(const char *Str2); - + int sub_410D99_get_map_index(int a1); MapInfo pInfos[77]; unsigned int uNumMaps; + + }; #pragma pack(pop)
--- a/Render.cpp Fri Mar 14 09:32:25 2014 +0600 +++ b/Render.cpp Fri Mar 14 09:32:42 2014 +0600 @@ -8486,18 +8486,18 @@ { //t = near_clip - v0.x / v1.x - v0.x ( ) t = (8.0 - array_50AC10[i].vWorldViewPosition.x) / (array_50AC10[i + 1].vWorldViewPosition.x - array_50AC10[i].vWorldViewPosition.x); - array_507D30[out_num_vertices].vWorldViewPosition.y = fixpoint_mul((array_50AC10[i + 1].vWorldViewPosition.y - array_50AC10[i].vWorldViewPosition.y), t) + array_50AC10[i].vWorldViewPosition.y; - array_507D30[out_num_vertices].vWorldViewPosition.z = fixpoint_mul((array_50AC10[i + 1].vWorldViewPosition.z - array_50AC10[i].vWorldViewPosition.z), t) + array_50AC10[i].vWorldViewPosition.z; - array_507D30[out_num_vertices].u = fixpoint_mul((array_50AC10[i + 1].u - array_50AC10[i].u), t) + array_50AC10[i].u; - array_507D30[out_num_vertices].v = fixpoint_mul((array_50AC10[i + 1].v - array_50AC10[i].v), t) + array_50AC10[i].v; + array_507D30[out_num_vertices].vWorldViewPosition.y = (array_50AC10[i + 1].vWorldViewPosition.y - array_50AC10[i].vWorldViewPosition.y) * t + array_50AC10[i].vWorldViewPosition.y; + array_507D30[out_num_vertices].vWorldViewPosition.z = (array_50AC10[i + 1].vWorldViewPosition.z - array_50AC10[i].vWorldViewPosition.z) * t + array_50AC10[i].vWorldViewPosition.z; + array_507D30[out_num_vertices].u = (array_50AC10[i + 1].u - array_50AC10[i].u) * t + array_50AC10[i].u; + array_507D30[out_num_vertices].v = (array_50AC10[i + 1].v - array_50AC10[i].v) * t + array_50AC10[i].v; } else { t = (8.0 - array_50AC10[i + 1].vWorldViewPosition.x) / (array_50AC10[i].vWorldViewPosition.x - array_50AC10[i + 1].vWorldViewPosition.x); - array_507D30[out_num_vertices].vWorldViewPosition.y = fixpoint_mul((array_50AC10[i].vWorldViewPosition.y - array_50AC10[i + 1].vWorldViewPosition.y), t) + array_50AC10[i + 1].vWorldViewPosition.y; - array_507D30[out_num_vertices].vWorldViewPosition.z = fixpoint_mul((array_50AC10[i].vWorldViewPosition.z - array_50AC10[i + 1].vWorldViewPosition.z), t) + array_50AC10[i + 1].vWorldViewPosition.z; - array_507D30[out_num_vertices].u = fixpoint_mul((array_50AC10[i].u - array_50AC10[i + 1].u), t) + array_50AC10[i + 1].u; - array_507D30[out_num_vertices].v = fixpoint_mul((array_50AC10[i].v - array_50AC10[i + 1].v), t) + array_50AC10[i + 1].v; + array_507D30[out_num_vertices].vWorldViewPosition.y = (array_50AC10[i].vWorldViewPosition.y - array_50AC10[i + 1].vWorldViewPosition.y) * t + array_50AC10[i + 1].vWorldViewPosition.y; + array_507D30[out_num_vertices].vWorldViewPosition.z = (array_50AC10[i].vWorldViewPosition.z - array_50AC10[i + 1].vWorldViewPosition.z) * t + array_50AC10[i + 1].vWorldViewPosition.z; + array_507D30[out_num_vertices].u = (array_50AC10[i].u - array_50AC10[i + 1].u) * t + array_50AC10[i + 1].u; + array_507D30[out_num_vertices].v = (array_50AC10[i].v - array_50AC10[i + 1].v) * t + array_50AC10[i + 1].v; } array_507D30[out_num_vertices].vWorldViewPosition.x = 8.0; array_507D30[out_num_vertices]._rhw = 1.0 / 8.0;
--- a/UI/Books/UIMapBook.cpp Fri Mar 14 09:32:25 2014 +0600 +++ b/UI/Books/UIMapBook.cpp Fri Mar 14 09:32:42 2014 +0600 @@ -137,7 +137,7 @@ { pRenderer->DrawTextureTransparent(pLloydsBeacons_SomeXs[BeaconID], pLloydsBeacons_SomeYs[BeaconID], pTexture_CurrentBook); pRenderer->DrawTextureRGB(pLloydsBeaconsPreviewXs[BeaconID], pLloydsBeaconsPreviewYs[BeaconID], &pSavegameThumbnails[BeaconID]); - Str = pMapStats->pInfos[sub_410D99_get_map_index(pPlayer->pInstalledBeacons[BeaconID].SaveFileID)].pName; + Str = pMapStats->pInfos[pMapStats->sub_410D99_get_map_index(pPlayer->pInstalledBeacons[BeaconID].SaveFileID)].pName; pTextHeight = pSpellFont->CalcTextHeight(Str, &pWindow, 0, 0); pWindow.uFrameY += -6 - pTextHeight; pWindow.DrawTitleText(pSpellFont, 0, 0, 1, Str, 3);
--- a/mm7_2.cpp Fri Mar 14 09:32:25 2014 +0600 +++ b/mm7_2.cpp Fri Mar 14 09:32:42 2014 +0600 @@ -1389,159 +1389,6 @@ return result; } -//----- (0044FFD8) -------------------------------------------------------- -int MapInfo::SpawnRandomTreasure(SpawnPointMM7 *a2) -{ - //MapInfo *v2; // ebx@1 - //SpawnPointMM7 *v3; // esi@1 - //int v4; // eax@1 - int v5; // edx@1 - int v6; // eax@1 - int v7; // ecx@1 - int v8; // ebx@1 - int v9; // eax@1 - signed int v10; // ebx@1 - signed int result; // eax@1 - signed __int64 v12; // qtt@1 - int v13; // ebx@1 - int v14; // edx@10 - signed int v15; // ebx@20 - unsigned __int16 v16; // dx@20 - ObjectDesc *v17; // ecx@21 - unsigned __int16 v18; // ax@24 - int v19; // ST0C_4@27 - int v20; // ST08_4@27 - int v21; // ST04_4@27 - int v22; // eax@27 - signed int v23; // ebx@29 - unsigned __int16 v24; // dx@29 - ObjectDesc *v25; // ecx@30 - unsigned __int16 v26; // ax@33 - //int v27; // ecx@35 - //int v28; // eax@35 - //int v29; // esi@35 - //__int16 v30; // ax@35 - SpriteObject a1a; // [sp+Ch] [bp-7Ch]@1 - //int v32; // [sp+7Ch] [bp-Ch]@1 - //int v33; // [sp+80h] [bp-8h]@1 - int v34; // [sp+84h] [bp-4h]@1 - - //auto a1 = this; - //v2 = a1; - //v3 = a2; - //v4 = rand(); - v34 = 0; - v5 = rand() % 100; - // v6 = 2 * (v2->Treasure_prob + 7 * v3->uIndex) - 14; - v7 = (unsigned __int8)byte_4E8168[a2->uIndex - 1][2 * Treasure_prob]; - v8 = (unsigned __int8)byte_4E8168[a2->uIndex - 1][2 * Treasure_prob + 1]; - //v32 = v5; - //v33 = v7; - v9 = rand(); - v10 = v8 - v7 + 1; - v12 = v9; - result = v9 / v10; - v13 = v7 + (unsigned __int64)(v12 % v10); - if ( v13 < 7 ) - { - if ( v5 < 20 ) - return result; - if ( v5 >= 60 ) - { - v19 = a2->vPosition.z; - v20 = a2->vPosition.y; - v21 = a2->vPosition.x; - v22 = rand(); - return sub_450521_ProllyDropItemAt(v13, v22 % 27 + 20, v21, v20, v19, 0); - } - if ( a2->uIndex == 1 ) - { - v14 = rand() % 51 + 50; - a1a.stru_24.uItemID = 197; - v34 = v14; - } - else if ( a2->uIndex == 2 ) - { - v14 = rand() % 101 + 100; - a1a.stru_24.uItemID = 197; - v34 = v14; - } - else if ( a2->uIndex == 3 ) - { - v14 = rand() % 301 + 200; - a1a.stru_24.uItemID = 198; - v34 = v14; - } - else if ( a2->uIndex == 4 ) - { - v14 = rand() % 501 + 500; - a1a.stru_24.uItemID = 198; - v34 = v14; - } - else if ( a2->uIndex == 5 ) - { - v14 = rand() % 1001 + 1000; - a1a.stru_24.uItemID = 199; - v34 = v14; - } - else if ( a2->uIndex == 6 ) - { - v14 = rand() % 3001 + 2000; - a1a.stru_24.uItemID = 199; - v34 = v14; - } - v15 = 0; - v16 = pItemsTable->pItems[a1a.stru_24.uItemID].uSpriteID; - a1a.uType = pItemsTable->pItems[a1a.stru_24.uItemID].uSpriteID; - v18 = 0; - for( int i = 0; i < pObjectList->uNumObjects; i++ ) - { - if ( pObjectList->pObjects[i].uObjectID == v16 ) - { - v18 = i; - break; - } - } - a1a.stru_24.SetIdentified(); - a1a.uObjectDescID = v18; - a1a.stru_24.uSpecEnchantmentType = v34; - } - else - { - result = a1a.stru_24.GenerateArtifact(); - if ( !result ) - return result; - v23 = 0; - v24 = pItemsTable->pItems[a1a.stru_24.uItemID].uSpriteID; - a1a.uType = pItemsTable->pItems[a1a.stru_24.uItemID].uSpriteID; - v26 = 0; - for( int i = 0; i < pObjectList->uNumObjects; i++ ) - { - if( v24 == pObjectList->pObjects[i].uObjectID ) - { - v26 = i; - break; - } - } - a1a.uObjectDescID = v26; - a1a.stru_24.Reset(); - } - a1a.vPosition.y = a2->vPosition.y; - a1a.uAttributes = 0; - a1a.uSoundID = 0; - a1a.uFacing = 0; - a1a.vPosition.z = a2->vPosition.z; - a1a.vPosition.x = a2->vPosition.x; - a1a.spell_skill = 0; - a1a.spell_level = 0; - a1a.spell_id = 0; - a1a.spell_target_pid = 0; - a1a.spell_caster_pid = 0; - a1a.uSpriteFrameID = 0; - a1a.uSectorID = pIndoor->GetSector(a2->vPosition.x, a2->vPosition.y, a2->vPosition.z);; - return a1a.Create(0, 0, 0, 0); -} - //----- (00450521) -------------------------------------------------------- int __fastcall sub_450521_ProllyDropItemAt(int ecx0, signed int a2, int a3, int a4, int a5, unsigned __int16 a6) { @@ -2241,345 +2088,7 @@ return 0; } -//----- (00453F62) -------------------------------------------------------- -void MapStats::Initialize() -{ - char work_str[32]; // [sp+Ch] [bp-34h]@3 - int work_str_pos; - int work_str_len; - 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 ( pMapStatsTXT_Raw ) - free(pMapStatsTXT_Raw); - pMapStatsTXT_Raw = NULL; - pMapStatsTXT_Raw = (char *)pEvents_LOD->LoadRaw("MapStats.txt", 0); - strtok(pMapStatsTXT_Raw, "\r"); - strtok(NULL, "\r"); - strtok(NULL, "\r"); - - for (i=1; i<77; ++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: - pInfos[i].pName = RemoveQuotes(test_string); - break; - case 2: - pInfos[i].pFilename = RemoveQuotes(test_string); - break; - case 3: - pInfos[i].uNumResets = atoi(test_string); - break; - case 4: - pInfos[i].uFirstVisitedAt = atoi(test_string); - break; - case 5: - pInfos[i]._per = atoi(test_string); - break; - case 6: - pInfos[i].uRespawnIntervalDays = atoi(test_string); - break; - case 7: - pInfos[i]._alert_days = atoi(test_string); - break; - case 8: - pInfos[i]._steal_perm = atoi(test_string); - break; - case 9: - pInfos[i].LockX5 = atoi(test_string); - break; - case 10: - pInfos[i].Trap_D20 = atoi(test_string); - break; - case 11: - pInfos[i].Treasure_prob = atoi(test_string); - break; - case 12: - pInfos[i].Encounter_percent = atoi(test_string); - break; - case 13: - pInfos[i].EncM1percent = atoi(test_string); - break; - case 14: - pInfos[i].EncM2percent = atoi(test_string); - break; - case 15: - pInfos[i].EncM3percent = atoi(test_string); - break; - case 16: - pInfos[i].pEncounterMonster1Texture = RemoveQuotes(test_string); - break; - case 18: - pInfos[i].Dif_M1 = atoi(test_string); - break; - case 19: - pInfos[i].uEncounterMonster1AtLeast = 1; - pInfos[i].uEncounterMonster1AtMost = 1; - strcpy(work_str, test_string); - work_str_pos = 0; - work_str_len=strlen(work_str); - if (work_str_len ) - { - while (work_str[work_str_pos] != '-' ) - { - ++work_str_pos; - if (work_str_pos >= work_str_len ) - break; - } - work_str[work_str_pos] = 0; - pInfos[i].uEncounterMonster1AtLeast = atoi(work_str); - if ( work_str_pos < work_str_len ) - pInfos[i].uEncounterMonster1AtMost = atoi(&work_str[work_str_pos + 1]); - else - pInfos[i].uEncounterMonster1AtMost = pInfos[i].uEncounterMonster1AtLeast; - } - break; - case 20: - pInfos[i].pEncounterMonster2Texture = RemoveQuotes(test_string); - break; - case 22: - pInfos[i].Dif_M2 = atoi(test_string); - break; - case 23: - pInfos[i].uEncounterMonster2AtLeast = 1; - pInfos[i].uEncounterMonster2AtMost = 1; - strcpy(work_str, test_string); - work_str_pos = 0; - work_str_len=strlen(work_str); - if (work_str_len ) - { - while (work_str[work_str_pos] != '-' ) - { - ++work_str_pos; - if (work_str_pos >= work_str_len ) - break; - } - work_str[work_str_pos] = 0; - pInfos[i].uEncounterMonster2AtLeast = atoi(work_str); - if ( work_str_pos < work_str_len ) - pInfos[i].uEncounterMonster2AtMost = atoi(&work_str[work_str_pos + 1]); - else - pInfos[i].uEncounterMonster2AtMost = pInfos[i].uEncounterMonster2AtLeast; - } - break; - case 24: - pInfos[i].pEncounterMonster3Texture = RemoveQuotes(test_string); - break; - case 26: - pInfos[i].Dif_M3 = atoi(test_string); - break; - case 27: - pInfos[i].uEncounterMonster3AtLeast = 1; - pInfos[i].uEncounterMonster3AtMost = 1; - strcpy(work_str, test_string); - work_str_pos = 0; - work_str_len=strlen(work_str); - if (work_str_len ) - { - while (work_str[work_str_pos] != '-' ) - { - ++work_str_pos; - if (work_str_pos >= work_str_len ) - break; - } - work_str[work_str_pos] = 0; - pInfos[i].uEncounterMonster3AtLeast = atoi(work_str); - if ( work_str_pos < work_str_len ) - pInfos[i].uEncounterMonster3AtMost = atoi(&work_str[work_str_pos + 1]); - else - pInfos[i].uEncounterMonster3AtMost = pInfos[i].uEncounterMonster3AtLeast; - } - break; - case 28: - pInfos[i].uRedbookTrackID = atoi(test_string); - break; - case 29: - { - if ( !strcmp(test_string, "CAVE") ) - { - pInfos[i].uEAXEnv = 8; - break; - } - if ( !strcmp(test_string, "STONEROOM") ) - { - pInfos[i].uEAXEnv = 5; - break; - } - if ( !strcmp(test_string, "MOUNTAINS") ) - { - pInfos[i].uEAXEnv = 17; - break; - } - if ( !strcmp(test_string, "PLAIN") ) - { - pInfos[i].uEAXEnv = 19; - break; - } - if ( !strcmp(test_string, "FOREST") ) - { - pInfos[i].uEAXEnv = 15; - break; - } - if ( !strcmp(test_string, "CITY") ) - { - pInfos[i].uEAXEnv = 16; - break; - } - if ( !strcmp(test_string, "UNDERWATER") ) - { - pInfos[i].uEAXEnv = 22; - break; - } - if ( !strcmp(test_string, "ARENA") ) - { - pInfos[i].uEAXEnv = 9; - break; - } - if ( !strcmp(test_string, "GENERIC") ) - { - pInfos[i].uEAXEnv = 0; - break; - } - if ( !strcmp(test_string, "PADDEDCELL") ) - { - pInfos[i].uEAXEnv = 1; - break; - } - if ( !strcmp(test_string, "ROOM") ) - { - pInfos[i].uEAXEnv = 2; - break; - } - if ( !strcmp(test_string, "BATHROOM") ) - { - pInfos[i].uEAXEnv = 3; - break; - } - if ( !strcmp(test_string, "LIVINGROOM") ) - { - pInfos[i].uEAXEnv = 4; - break; - } - if ( !strcmp(test_string, "AUDITORIUM") ) - { - pInfos[i].uEAXEnv = 6; - break; - } - if ( !strcmp(test_string, "CONCERTHALL") ) - { - pInfos[i].uEAXEnv = 7; - break; - } - if ( !strcmp(test_string, "HANGAR") ) - { - pInfos[i].uEAXEnv = 10; - break; - } - if ( !strcmp(test_string, "CARPETEDHALLWAY") ) - { - pInfos[i].uEAXEnv = 11; - break; - } - if ( !strcmp(test_string, "HALLWAY") ) - { - pInfos[i].uEAXEnv = 12; - break; - } - if ( !strcmp(test_string, "STONECORRIDOR") ) - { - pInfos[i].uEAXEnv = 13; - break; - } - if ( !strcmp(test_string, "ALLEY") ) - { - pInfos[i].uEAXEnv = 14; - break; - } - if ( !strcmp(test_string, "QUARRY") ) - { - pInfos[i].uEAXEnv = 18; - break; - } - if ( !strcmp(test_string, "PARKINGLOT") ) - { - pInfos[i].uEAXEnv = 20; - break; - } - if ( !strcmp(test_string, "SEWERPIPE") ) - { - pInfos[i].uEAXEnv = 21; - break; - } - if ( !strcmp(test_string, "DRUGGED") ) - { - pInfos[i].uEAXEnv = 23; - break; - } - if ( !strcmp(test_string, "DIZZY") ) - { - pInfos[i].uEAXEnv = 24; - break; - } - if ( !strcmp(test_string, "PSYCHOTIC") ) - { - pInfos[i].uEAXEnv = 25; - break; - } - pInfos[i].uEAXEnv = 26; - - } - break; - } - } - else - { - break_loop = true; - } - ++decode_step; - test_string=tmp_pos+1; - } while ((decode_step<31)&&!break_loop); - } - - uNumMaps = 77; -} -// 453F62: using guessed type char Str[32]; - -//----- (004547A3) -------------------------------------------------------- -MAP_TYPE MapStats::GetMapInfo(const char *Str2) -{ - assert(uNumMaps >= 2); - - for (uint i = 1; i < uNumMaps; ++i) - if (!_stricmp(pInfos[i].pFilename, Str2)) - return (MAP_TYPE)i; - - assert(false && "Map not found!"); -} + //----- (004547E4) -------------------------------------------------------- void FactionTable::Initialize()
--- a/mm7_5.cpp Fri Mar 14 09:32:25 2014 +0600 +++ b/mm7_5.cpp Fri Mar 14 09:32:42 2014 +0600 @@ -1060,33 +1060,6 @@ } } -//----- (00410D99) -------------------------------------------------------- -int __fastcall sub_410D99_get_map_index(int a1) -{ - int v1; // edi@1 - signed int v2; // ebp@1 - const char **v3; // esi@2 - char *v4; // ebx@2 - - __debugbreak();//Ritor1 - v1 = a1; - v2 = 1; - if ( _stricmp(pMapStats->pInfos[1].pFilename, (const char *)&pGames_LOD->pSubIndices[a1]) ) - { - v3 = (const char **)&pMapStats->pInfos[1].pFilename; - v4 = (char *)&pMapStats->pInfos[1].pFilename; - do - { - if ( !*(int *)v4 ) - break; - v3 += 17; - ++v2; - v4 = (char *)v3; - } - while ( _stricmp(*v3, (const char *)&pGames_LOD->pSubIndices[v1]) ); - } - return v2; -} // 4E28F8: using guessed type int pCurrentScreen;
--- a/mm7_unsorted_subs.h Fri Mar 14 09:32:25 2014 +0600 +++ b/mm7_unsorted_subs.h Fri Mar 14 09:32:42 2014 +0600 @@ -37,7 +37,6 @@ void __fastcall ZBuffer_DoFill(int *pZBuffer, struct Texture *pTex, int uZValue); void __fastcall ZBuffer_DoFill2(int *pZBuffer, struct Texture *a2, int a3); // idb void SetMoonPhaseNames(); -int __fastcall sub_410D99_get_map_index(int a1); void __fastcall LoadThumbnailLloydTexture(unsigned int uSlot, unsigned int uPlayer); void SetAttributeNames(); void uGameUIFontMain_initialize();
--- a/texts.cpp Fri Mar 14 09:32:25 2014 +0600 +++ b/texts.cpp Fri Mar 14 09:32:42 2014 +0600 @@ -6,6 +6,21 @@ #include "texts.h" +std::vector<char*> Tokenize( char* input, const char separator ) +{ + std::vector<char*> retVect; + retVect.push_back(input); + while (*input) + { + if (*input == separator) + { + *input = '\0'; + retVect.push_back(input + 1); + } + ++input; + } + return retVect; +}
--- a/texts.h Fri Mar 14 09:32:25 2014 +0600 +++ b/texts.h Fri Mar 14 09:32:42 2014 +0600 @@ -1,5 +1,6 @@ #pragma once #include <array> +#include <vector> int sprintfex(char *buf, const char *format, ...); @@ -9,6 +10,7 @@ char *RemoveQuotes(char *Str); void InitializeGameText(); +std::vector<char*> Tokenize(char* input, const char separator); enum GLOBAL_LOCALIZ_INDEX {