# HG changeset patch # User Ritor1 # Date 1361371915 -21600 # Node ID 405d0c4dd1b3e319448963fa7270323817da9b7d # Parent e8fcde8ba3fcacd8870a60c283589d98c84d0887# Parent 8e23edf57e27f86aa100ab83e9695f7d3c241edb Слияние diff -r e8fcde8ba3fc -r 405d0c4dd1b3 Actor.cpp --- a/Actor.cpp Wed Feb 20 20:50:22 2013 +0600 +++ b/Actor.cpp Wed Feb 20 20:51:55 2013 +0600 @@ -1,3 +1,5 @@ +#include + #include "Actor.h" #include "LayingItem.h" #include "Math.h" @@ -974,7 +976,7 @@ 0); pGame->pStru6Instance->_4A7E89_sparkles_on_actor_after_it_casts_buff( v5, - (unsigned int)((char *)&pLevelEVT_Events[4335].uEventID + 2)); + (unsigned int)((char *)&pLevelEVT_Index[4335].uEventID + 2)); v106 = 0; v104 = 0; v103 = 0; @@ -1404,7 +1406,7 @@ //----- (0043ABB0) -------------------------------------------------------- -bool Actor::_43ABB0(Actor *a1, Actor *a2) +bool Actor::ArePeasantsOfSameFaction(Actor *a1, Actor *a2) { unsigned int v2; // esi@1 unsigned int v3; // edi@1 @@ -1427,50 +1429,34 @@ } //----- (0043AC45) -------------------------------------------------------- -void Actor::_43AC45(unsigned int uActorID, int a2) +void Actor::AggroSurroundingPeasants(unsigned int uActorID, int a2) { - Actor *v2; // esi@1 - Actor *v3; // edi@4 int v4; // ebx@8 int v5; // ST1C_4@8 int v6; // eax@8 - int v7; // [sp+4h] [bp-10h]@1 - unsigned int uActorID_; // [sp+Ch] [bp-8h]@1 - signed int v9; // [sp+10h] [bp-4h]@3 - uActorID_ = uActorID; - v2 = &pActors[uActorID]; - v7 = a2; + auto victim = pActors + uActorID; if ( a2 == 1 ) - BYTE2(v2->uAttributes) |= 8u; - v9 = 0; - if ( (signed int)uNumActors > 0 ) + BYTE2(victim->uAttributes) |= 8u; + + for (uint i = 0; i < uNumActors; ++i) { - v3 = pActors; - do + auto actor = pActors + i; + if (!actor->CanAct() || i == uActorID) + continue; + + if (Actor::ArePeasantsOfSameFaction(victim, actor)) { - if ( v3->CanAct() ) + v4 = abs(actor->vPosition.x - victim->vPosition.x); + v5 = abs(actor->vPosition.y - victim->vPosition.y); + v6 = abs(actor->vPosition.z - victim->vPosition.z); + if (int_get_vector_length(v4, v5, v6) < 4096) { - if ( v9 != uActorID_ ) - { - if ( Actor::_43ABB0(v2, v3) ) - { - v4 = abs(v3->vPosition.x - v2->vPosition.x); - v5 = abs(v3->vPosition.y - v2->vPosition.y); - v6 = abs(v3->vPosition.z - v2->vPosition.z); - if ( (double)sub_4621DA(v4, v5, v6) < 4096.0 ) - { - v3->pMonsterInfo.uHostilityType = (MonsterInfo::HostilityRadius)4; - if ( v7 == 1 ) - BYTE2(v3->uAttributes) |= 8u; - } - } - } + actor->pMonsterInfo.uHostilityType = MonsterInfo::Hostility_Long; + if ( a2 == 1 ) + BYTE2(actor->uAttributes) |= 8u; } - ++v9; - ++v3; } - while ( v9 < (signed int)uNumActors ); } } @@ -1958,11 +1944,11 @@ //----- (00404030) -------------------------------------------------------- -unsigned int __fastcall Actor::FaceObject(unsigned int uActorID, unsigned int uObjID, int _48, AIDirection *a4) +void Actor::FaceObject(unsigned int uActorID, unsigned int uObjID, int _48, AIDirection *a4) { unsigned int v4; // edi@1 unsigned int v5; // esi@1 - unsigned int result; // eax@2 + //unsigned int result; // eax@2 AIDirection *v7; // eax@3 unsigned int v8; // ecx@3 Actor *v9; // ebx@3 @@ -1994,20 +1980,17 @@ v9->uPitchAngle = v11; v9->uCurrentActionLength = 256; v9->uAIState = Interacting; - result = v9->UpdateAnimation(); + v9->UpdateAnimation(); } else - { - result = Actor::_402F87(v5, v4, a4); - } - return result; + Actor::_402F87(v5, v4, a4); } //----- (00403F58) -------------------------------------------------------- -unsigned int __fastcall Actor::_403F58(unsigned int uActorID, signed int uObjID, int uActionLength, AIDirection *a4) +void Actor::_403F58(unsigned int uActorID, signed int uObjID, int uActionLength, AIDirection *a4) { unsigned int v4; // esi@1 - unsigned int result; // eax@2 + //unsigned int result; // eax@2 AIDirection *v6; // eax@3 unsigned int v7; // edi@3 Actor *v8; // ebx@3 @@ -2020,10 +2003,10 @@ v4 = uActorID; if ( rand() % 2 ) { - result = Actor::_402F87(v4, a2, a4); + Actor::_402F87(v4, a2, a4); + return; } - else - { + v6 = a4; v7 = 0; v8 = &pActors[v4]; @@ -2045,15 +2028,13 @@ v8->vVelocity.z = v7; v8->vVelocity.y = v7; v8->vVelocity.x = v7; - result = v8->UpdateAnimation(); - } - return result; + v8->UpdateAnimation(); } //----- (00403EB6) -------------------------------------------------------- -unsigned int __fastcall Actor::_403EB6(unsigned int uActorID, unsigned int a2, unsigned int uActionLength, AIDirection *a4) +void Actor::_403EB6(unsigned int uActorID, unsigned int a2, unsigned int uActionLength, AIDirection *a4) { AIDirection *v4; // eax@1 unsigned int v5; // esi@1 @@ -2082,7 +2063,7 @@ v6->vVelocity.z = v5; v6->vVelocity.y = v5; v6->vVelocity.x = v5; - return v6->UpdateAnimation(); + v6->UpdateAnimation(); } @@ -2102,17 +2083,17 @@ } //----- (00403C6C) -------------------------------------------------------- -unsigned int __fastcall Actor::_403C6C(unsigned int uActorID, signed int edx0, struct AIDirection *arg0) +void Actor::_403C6C(unsigned int uActorID, signed int edx0, struct AIDirection *arg0) { Actor *v3; // ebx@1 char v4; // zf@1 - unsigned int result; // eax@3 + //unsigned int result; // eax@3 AIDirection *v6; // esi@6 AIDirection *v7; // edi@6 signed int v8; // eax@7 double v9; // st7@9 Vec3_int_ v10; // ST04_12@9 - int v11; // eax@10 + //int v11; // eax@10 AIDirection *v12; // eax@11 unsigned int v13; // esi@11 AIDirection *v14; // esi@12 @@ -2134,11 +2115,11 @@ v24 = uActorID; if ( v4 && v3->pMonsterInfo.uAIType == 1 ) { - result = Actor::_403EB6(uActorID, edx0, 0, arg0); + Actor::_403EB6(uActorID, edx0, 0, arg0); + return; } - else - { - if ( (edx0 & 7) == OBJECT_Actor) + + if ( (edx0 & 7) == OBJECT_Actor) { v8 = edx0 >> 3; v6 = (AIDirection *)pActors[v8].vPosition.x; @@ -2178,7 +2159,7 @@ } v15 = pSpriteFrameTable->pSpriteSFrames; v3->uYawAngle = LOWORD(v12->uYawAngle); - v16 = v15[v3->pSpriteIDs[2]].uAnimLength; + v16 = v15[v3->pSpriteIDs[ANIM_AtkMelee]].uAnimLength; v17 = v24; v3->uCurrentActionLength = 8 * v16; v3->uCurrentActionTime = v13; @@ -2198,31 +2179,28 @@ v3->vVelocity.z = v13; v3->vVelocity.y = v13; v3->vVelocity.x = v13; - result = v3->UpdateAnimation(); + v3->UpdateAnimation(); } else - { - v11 = rand(); - result = Actor::_402AD7(v24, a2, v11 % 2, 64, arg0); - } - } - return result; + Actor::_402AD7(v24, a2, rand() % 2, 64, arg0); } //----- (00438CF3) -------------------------------------------------------- -void Actor::_438CF3(unsigned int uActorID) +void Actor::ApplyFineForKillingPeasant(unsigned int uActorID) { unsigned int v1; // esi@1 unsigned int v2; // edi@2 char v3; // bl@3 - char *v4; // ecx@16 - signed int v5; // eax@18 + //char *v4; // ecx@16 + //signed int v5; // eax@18 Player **ppPlayers; // esi@20 v1 = uLevelMapStatsID; - if ( !uLevelMapStatsID || (v2 = uActorID, !pActors[uActorID]._438B9B()) ) + if ( !uLevelMapStatsID || !pActors[uActorID].IsPeasant()) return; + + v2 = uActorID; v3 = 1; if ( v1 != 5 ) { @@ -2243,20 +2221,24 @@ if ( v3 ) { LABEL_12: - pParty->uFine += 100 - * (pMapStats->pInfos[uLevelMapStatsID]._steal_perm - + pActors[v2].pMonsterInfo.uLevel - + GetPartyReputation()); + pParty->uFine += 100 * (pMapStats->pInfos[uLevelMapStatsID]._steal_perm + pActors[v2].pMonsterInfo.uLevel + GetPartyReputation()); if ( pParty->uFine < 0 ) pParty->uFine = 0; if ( pParty->uFine > 4000000 ) pParty->uFine = 4000000; - v4 = (char *)&pOutdoor->ddm; - if ( uCurrentlyLoadedLevelType == LEVEL_Indoor) - v4 = (char *)&pIndoor->dlv; - v5 = *((int *)v4 + 2); - if ( v5 < 10000 ) - *((int *)v4 + 2) = v5 + 1; + + if (uCurrentlyLoadedLevelType == LEVEL_Outdoor) + { + if (pOutdoor->ddm.uReputation < 10000) + pOutdoor->ddm.uReputation++; + } + else if (uCurrentlyLoadedLevelType == LEVEL_Indoor) + { + if (pIndoor->dlv.uReputation < 10000) + pIndoor->dlv.uReputation++; + } + else assert(false); + ppPlayers = &pPlayers[1]; do { @@ -2273,7 +2255,7 @@ //----- (0043AE80) -------------------------------------------------------- -int Actor::AddBloodsplatOnDamageOverlay(unsigned int uActorID, int a2, signed int a3) +void Actor::AddBloodsplatOnDamageOverlay(unsigned int uActorID, int a2, signed int a3) { int result; // eax@1 unsigned int v4; // esi@1 @@ -2297,7 +2279,7 @@ v5 = 904; goto LABEL_16; } - return result; + return; case 2: if ( a3 ) { @@ -2308,7 +2290,7 @@ v5 = 905; goto LABEL_16; } - return result; + return; case 3: if ( a3 ) { @@ -2319,7 +2301,7 @@ v5 = 906; goto LABEL_16; } - return result; + return; case 4: if ( a3 ) { @@ -2330,7 +2312,7 @@ v5 = 907; goto LABEL_16; } - return result; + return; case 5: v9 = 4; v8 = 65536; @@ -2376,9 +2358,9 @@ result = pOtherOverlayList->_4418B6(v5, v6, v7, v8, v9); break; default: - return result; + return; } - return result; + return; } @@ -2457,7 +2439,7 @@ } //----- (00438B9B) -------------------------------------------------------- -char Actor::_438B9B() +bool Actor::IsPeasant() { unsigned int v1; // eax@1 @@ -2510,14 +2492,14 @@ //----- (00403A60) -------------------------------------------------------- -unsigned int __fastcall Actor::_403A60(unsigned int uActorID, signed int edx0, AIDirection *pDir) +void Actor::_403A60(unsigned int uActorID, signed int edx0, AIDirection *pDir) { Actor *v3; // ebx@1 AIDirection *v4; // esi@3 AIDirection *v5; // edi@3 signed int v6; // eax@4 Vec3_int_ v7; // ST04_12@6 - unsigned int result; // eax@7 + //unsigned int result; // eax@7 AIDirection *v9; // eax@8 unsigned int v10; // esi@8 AIDirection *v11; // esi@9 @@ -2575,7 +2557,7 @@ } v12 = pSpriteFrameTable->pSpriteSFrames; v3->uYawAngle = LOWORD(v9->uYawAngle); - v13 = v12[v3->pSpriteIDs[3]].uAnimLength; + v13 = v12[v3->pSpriteIDs[ANIM_AtkRanged]].uAnimLength; v14 = v22; v3->uCurrentActionLength = 8 * v13; v3->uCurrentActionTime = v10; @@ -2605,31 +2587,26 @@ v3->uCurrentActionLength = 64; v3->uCurrentActionTime = v10; v3->uAIState = Fidgeting; - result = v3->UpdateAnimation(); + v3->UpdateAnimation(); v3->uAIState = AttackingRanged4; } else - { - result = v3->UpdateAnimation(); - } + v3->UpdateAnimation(); } else - { - result = Actor::_402AD7(v22, a2, v22, 64, pDir); - } - return result; + Actor::_402AD7(v22, a2, v22, 64, pDir); } //----- (00403854) -------------------------------------------------------- -unsigned int __fastcall Actor::_403854(unsigned int uActorID, signed int edx0, AIDirection *pDir) +void Actor::_403854(unsigned int uActorID, signed int edx0, AIDirection *pDir) { Actor *v3; // ebx@1 AIDirection *v4; // esi@3 AIDirection *v5; // edi@3 signed int v6; // eax@4 Vec3_int_ v7; // ST04_12@6 - unsigned int result; // eax@7 + //unsigned int result; // eax@7 AIDirection *v9; // eax@8 unsigned int v10; // esi@8 AIDirection *v11; // esi@9 @@ -2687,7 +2664,7 @@ } v12 = pSpriteFrameTable->pSpriteSFrames; v3->uYawAngle = LOWORD(v9->uYawAngle); - v13 = v12[v3->pSpriteIDs[3]].uAnimLength; + v13 = v12[v3->pSpriteIDs[ANIM_AtkRanged]].uAnimLength; v14 = v22; v3->uCurrentActionLength = 8 * v13; v3->uCurrentActionTime = v10; @@ -2717,31 +2694,26 @@ v3->uCurrentActionLength = 64; v3->uCurrentActionTime = v10; v3->uAIState = Fidgeting; - result = v3->UpdateAnimation(); + v3->UpdateAnimation(); v3->uAIState = AttackingRanged3; } else - { - result = v3->UpdateAnimation(); - } + v3->UpdateAnimation(); } else - { - result = Actor::_402AD7(v22, a2, v22, 64, pDir); - } - return result; + Actor::_402AD7(v22, a2, v22, 64, pDir); } //----- (0040368B) -------------------------------------------------------- -unsigned int __fastcall Actor::_40368B(unsigned int uActorID, signed int edx0, AIDirection *pDir) +void Actor::_40368B(unsigned int uActorID, signed int edx0, AIDirection *pDir) { Actor *v3; // ebx@1 AIDirection *v4; // esi@3 AIDirection *v5; // edi@3 signed int v6; // eax@4 Vec3_int_ v7; // ST04_12@6 - unsigned int result; // eax@7 + //unsigned int result; // eax@7 AIDirection *v9; // eax@8 unsigned int v10; // esi@8 AIDirection *v11; // esi@9 @@ -2798,7 +2770,7 @@ } v12 = pSpriteFrameTable->pSpriteSFrames; v3->uYawAngle = LOWORD(v9->uYawAngle); - v13 = v12[v3->pSpriteIDs[3]].uAnimLength; + v13 = v12[v3->pSpriteIDs[ANIM_AtkRanged]].uAnimLength; v14 = v21; v3->uCurrentActionLength = 8 * v13; v3->uCurrentActionTime = v10; @@ -2818,18 +2790,15 @@ v3->vVelocity.z = v10; v3->vVelocity.y = v10; v3->vVelocity.x = v10; - result = v3->UpdateAnimation(); + v3->UpdateAnimation(); } else - { - result = Actor::_402AD7(v21, a2, v21, 64, pDir); - } - return result; + Actor::_402AD7(v21, a2, v21, 64, pDir); } //----- (00403476) -------------------------------------------------------- -unsigned int __fastcall Actor::_403476(unsigned int uActorID, signed int edx0, AIDirection *pDir) +void Actor::_403476(unsigned int uActorID, signed int edx0, AIDirection *pDir) { Actor *v3; // ebx@1 int v4; // esi@3 @@ -2837,7 +2806,7 @@ signed int v6; // eax@4 Vec3_int_ v7; // ST04_12@6 unsigned char v8[12]; // ST04_12@7 - unsigned int result; // eax@8 + //unsigned int result; // eax@8 AIDirection *v10; // eax@9 unsigned int v11; // esi@9 AIDirection *v12; // esi@10 @@ -2902,7 +2871,7 @@ } v13 = pSpriteFrameTable->pSpriteSFrames; v3->uYawAngle = LOWORD(v10->uYawAngle); - v14 = v13[v3->pSpriteIDs[3]].uAnimLength; + v14 = v13[v3->pSpriteIDs[ANIM_AtkRanged]].uAnimLength; v15 = v21; v3->uCurrentActionLength = 8 * v14; v3->uCurrentActionTime = v11; @@ -2926,17 +2895,14 @@ v3->vVelocity.z = v11; v3->vVelocity.y = v11; v3->vVelocity.x = v11; - result = v3->UpdateAnimation(); + v3->UpdateAnimation(); } else - { - result = Actor::_402AD7(v21, a2, v21, 64, pDir); - } - return result; + Actor::_402AD7(v21, a2, v21, 64, pDir); } //----- (004032B2) -------------------------------------------------------- -void __fastcall Actor::_4032B2(unsigned int a1, unsigned int a2, int a3, int uActionLength) +void Actor::_4032B2(unsigned int a1, unsigned int a2, int a3, int uActionLength) { unsigned int v4; // edi@1 Actor *v5; // esi@1 @@ -3072,11 +3038,11 @@ //----- (004030AD) -------------------------------------------------------- -__int16 __fastcall Actor::_4030AD(unsigned int uActorID, signed int edx0, int arg0) +void Actor::_4030AD(unsigned int uActorID, signed int edx0, int arg0) { unsigned int v3; // edi@1 Actor *v4; // ebx@1 - __int16 result; // ax@10 + //__int16 result; // ax@10 SpriteFrame *v6; // ecx@16 __int16 v7; // ax@16 unsigned int v8; // ecx@16 @@ -3101,29 +3067,28 @@ if ( (signed __int64)v4->pActorBuffs[4].uExpireTime > 0 ) v4->pActorBuffs[4].Reset(); if ( arg0 - || (result = v4->uAIState, result != 8) - && result != 3 - && result != 12 - && result != 13 - && result != 18 - && result != 2 ) + || (v4->uAIState != 8 + && v4->uAIState != 3 + && v4->uAIState != 12 + && v4->uAIState != 13 + && v4->uAIState != 18 + && v4->uAIState != 2)) { memcpy(&v10, Actor::GetDirectionInfo(8 * v3 | 3, a2, &a3, 0), sizeof(v10)); v6 = pSpriteFrameTable->pSpriteSFrames; v4->uYawAngle = LOWORD(v10.uYawAngle); - v7 = v6[v4->pSpriteIDs[4]].uAnimLength; + v7 = v6[v4->pSpriteIDs[ANIM_GotHit]].uAnimLength; v8 = v11; v4->uCurrentActionTime = 0; v4->uAIState = Stunned; v4->uCurrentActionLength = 8 * v7; Actor::PlaySound(v8, 2u); - result = v4->UpdateAnimation(); + v4->UpdateAnimation(); } - return result; } //----- (00402F87) -------------------------------------------------------- -int __fastcall Actor::_402F87(unsigned int uActorID, unsigned int uObjID, AIDirection *a4) +void Actor::_402F87(unsigned int uActorID, unsigned int uObjID, AIDirection *a4) { int v3; // edi@1 AIDirection *v4; // esi@1 @@ -3132,7 +3097,7 @@ unsigned int v7; // eax@3 int v8; // edx@3 unsigned int v9; // eax@3 - int result; // eax@4 + //int result; // eax@4 AIDirection a3; // [sp+Ch] [bp-5Ch]@2 AIDirection v12; // [sp+28h] [bp-40h]@2 AIDirection v13; // [sp+44h] [bp-24h]@2 @@ -3153,13 +3118,13 @@ } v6 = pSpriteFrameTable->pSpriteSFrames; v5->uYawAngle = LOWORD(v4->uYawAngle); - v5->uCurrentActionLength = 8 * v6[v5->pSpriteIDs[7]].uAnimLength; + v5->uCurrentActionLength = 8 * v6[v5->pSpriteIDs[ANIM_Bored]].uAnimLength; v7 = stru_5C6E00->Atan2(v5->vPosition.x - pIndoorCamera->pos.x, v5->vPosition.y - pIndoorCamera->pos.y); LOWORD(v8) = v5->uYawAngle; v9 = stru_5C6E00->uIntegerPi + v8 + ((signed int)stru_5C6E00->uIntegerPi >> 3) - v7; if ( BYTE1(v9) & 7 ) { - result = Actor::_403EB6(v3, v14, v5->uCurrentActionLength, v4); + Actor::_403EB6(v3, v14, v5->uCurrentActionLength, v4); } else { @@ -3170,13 +3135,12 @@ v5->vVelocity.x = 0; if ( rand() % 100 < 5 ) Actor::PlaySound(v3, 3u); - result = v5->UpdateAnimation(); + v5->UpdateAnimation(); } - return result; } //----- (00402F27) -------------------------------------------------------- -unsigned int __fastcall Actor::Resurrect(unsigned int uActorID) +void Actor::Resurrect(unsigned int uActorID) { Actor *pActor; // esi@1 SpriteFrame *v2; // edx@1 @@ -3184,253 +3148,82 @@ pActor = &pActors[uActorID]; v2 = pSpriteFrameTable->pSpriteSFrames; - v3 = pActor->pSpriteIDs[5]; + v3 = pActor->pSpriteIDs[ANIM_Dying]; pActor->uCurrentActionTime = 0; pActor->uAIState = Resurrected; pActor->uCurrentActionAnimation = ANIM_Dying; pActor->uCurrentActionLength = 8 * v2[v3].uAnimLength; pActor->sCurrentHP = LOWORD(pActor->pMonsterInfo.uHP); Actor::PlaySound(uActorID, 1u); - return pActor->UpdateAnimation(); + pActor->UpdateAnimation(); } //----- (00402D6E) -------------------------------------------------------- -void __fastcall Actor::Die(unsigned int uActorID) +void Actor::Die(unsigned int uActorID) { - Actor *v1; // esi@1 - SpriteFrame *v2; // ecx@1 - int v3; // eax@1 - int v4; // ecx@1 - char *v5; // eax@1 - SpellBuff *v6; // edi@5 - signed int v7; // ebx@5 - MONSTER_TYPE v8; // eax@7 - int v9; // eax@23 - ItemGen _this; // [sp+8h] [bp-28h]@7 - unsigned int v11; // [sp+2Ch] [bp-4h]@1 + auto actor = &pActors[uActorID]; - v1 = &pActors[uActorID]; - v11 = uActorID; - v2 = pSpriteFrameTable->pSpriteSFrames; - v3 = 60 * v1->pSpriteIDs[5]; - v1->uCurrentActionTime = 0; - v1->uAIState = Dying; - v1->uCurrentActionAnimation = 5; - LOWORD(v3) = *(__int16 *)((char *)&v2->uAnimLength + v3); - v1->sCurrentHP = 0; - v1->uCurrentActionLength = 8 * v3; - v1->pActorBuffs[6].Reset(); - v1->pActorBuffs[5].Reset(); - Actor::PlaySound(v11, 1u); - v1->UpdateAnimation(); - v4 = v1->pMonsterInfo.uID; - v5 = (char *)pParty->field_75A; - do - { - if ( v4 == *((short *)v5 - 5) ) - *(short *)v5 = 1; - v5 += 2; - } - while ( (signed int)v5 < (signed int)&pParty->field_764 ); - v6 = v1->pActorBuffs; - v7 = 22; - do - { - v6->Reset(); - ++v6; - --v7; - } - while ( v7 ); - _this.Reset(); - v8 = (MONSTER_TYPE)v1->pMonsterInfo.uID; - if ( v8 > MONSTER_HARPY_3 ) + actor->uCurrentActionTime = 0; + actor->uAIState = Dying; + actor->uCurrentActionAnimation = ANIM_Dying; + actor->sCurrentHP = 0; + actor->uCurrentActionLength = 8 * pSpriteFrameTable->pSpriteSFrames[actor->pSpriteIDs[ANIM_Dying]].uAnimLength; + actor->pActorBuffs[6].Reset(); + actor->pActorBuffs[5].Reset(); + Actor::PlaySound(uActorID, 1); + actor->UpdateAnimation(); + + for (uint i = 0; i < 5; ++i) + if (pParty->field_750[i] == actor->pMonsterInfo.uID) + pParty->field_75A[i] = true; + + for (uint i = 0; i < 22; ++i) + actor->pActorBuffs[i].Reset(); + + ItemGen drop; + switch (actor->pMonsterInfo.uID) { - if ( v8 < MONSTER_OOZE_1 ) - { - if ( !_this.uItemID ) - { - if ( v1->pMonsterInfo.uSpecialAbilityType == MONSTER_SPECIAL_ABILITY_EXPLODE ) - Actor::Explode(v11); - return; - } - if ( rand() % 100 < 20 ) - { - v9 = rand(); - sub_42F7EB_DropItemAt( - pItemsTable->pItems[_this.uItemID].uSpriteID, - v1->vPosition.x, - v1->vPosition.y, - v1->vPosition.z + 16, - v9 % 200 + 200, - 1, - 1, - 0, - &_this); - } - if ( v1->pMonsterInfo.uSpecialAbilityType == MONSTER_SPECIAL_ABILITY_EXPLODE ) - Actor::Explode(v11); - return; - } - if ( v8 <= MONSTER_OOZE_3 ) - { - _this.uItemID = ITEM_OOZE_ECTOPLASM_BOTTLE; - if ( !_this.uItemID ) - { - if ( v1->pMonsterInfo.uSpecialAbilityType == MONSTER_SPECIAL_ABILITY_EXPLODE ) - Actor::Explode(v11); - return; - } - if ( rand() % 100 < 20 ) - { - v9 = rand(); - sub_42F7EB_DropItemAt( - pItemsTable->pItems[_this.uItemID].uSpriteID, - v1->vPosition.x, - v1->vPosition.y, - v1->vPosition.z + 16, - v9 % 200 + 200, - 1, - 1, - 0, - &_this); - } - if ( v1->pMonsterInfo.uSpecialAbilityType == MONSTER_SPECIAL_ABILITY_EXPLODE ) - Actor::Explode(v11); - return; - } - if ( v8 <= MONSTER_PEASANT_GOBLIN_MALE_3_3 || v8 > MONSTER_TROLL_3 ) - { - if ( !_this.uItemID ) - { - if ( v1->pMonsterInfo.uSpecialAbilityType == MONSTER_SPECIAL_ABILITY_EXPLODE ) - Actor::Explode(v11); - return; - } - if ( rand() % 100 < 20 ) - { - v9 = rand(); - sub_42F7EB_DropItemAt( - pItemsTable->pItems[_this.uItemID].uSpriteID, - v1->vPosition.x, - v1->vPosition.y, - v1->vPosition.z + 16, - v9 % 200 + 200, - 1, - 1, - 0, - &_this); - } - if ( v1->pMonsterInfo.uSpecialAbilityType == MONSTER_SPECIAL_ABILITY_EXPLODE ) - Actor::Explode(v11); - return; - } - _this.uItemID = ITEM_TROLL_BLOOD; + case MONSTER_HARPY_1: case MONSTER_HARPY_2: case MONSTER_HARPY_3: + drop.uItemID = ITEM_HARPY_FEATHER; + break; + + case MONSTER_OOZE_1: case MONSTER_OOZE_2: case MONSTER_OOZE_3: + drop.uItemID = ITEM_OOZE_ECTOPLASM_BOTTLE; + break; + + case MONSTER_TROLL_1: case MONSTER_TROLL_2: case MONSTER_TROLL_3: + drop.uItemID = ITEM_TROLL_BLOOD; + break; + + case MONSTER_DEVIL_1: case MONSTER_DEVIL_2: case MONSTER_DEVIL_3: + drop.uItemID = ITEM_DEVIL_ICHOR; + break; + + case MONSTER_DRAGON_1: case MONSTER_DRAGON_2: case MONSTER_DRAGON_3: + drop.uItemID = ITEM_DRAGON_EYE; + break; } - else + + if (rand() % 100 < 20) { - if ( v8 >= MONSTER_HARPY_1 ) - { - _this.uItemID = ITEM_HARPY_FEATHER; - } - else - { - if ( v8 < MONSTER_DEVIL_1 ) - { - if ( !_this.uItemID ) - { - if ( v1->pMonsterInfo.uSpecialAbilityType == MONSTER_SPECIAL_ABILITY_EXPLODE ) - Actor::Explode(v11); - return; - } - if ( rand() % 100 < 20 ) - { - v9 = rand(); - sub_42F7EB_DropItemAt( - pItemsTable->pItems[_this.uItemID].uSpriteID, - v1->vPosition.x, - v1->vPosition.y, - v1->vPosition.z + 16, - v9 % 200 + 200, - 1, - 1, - 0, - &_this); - } - if ( v1->pMonsterInfo.uSpecialAbilityType == MONSTER_SPECIAL_ABILITY_EXPLODE ) - Actor::Explode(v11); - return; - } - if ( v8 > MONSTER_DEVIL_3 ) - { - if ( v8 <= MONSTER_DRAGON_3 ) - { - _this.uItemID = ITEM_DRAGON_EYE; - if ( rand() % 100 < 20 ) - { - v9 = rand(); - sub_42F7EB_DropItemAt( - pItemsTable->pItems[_this.uItemID].uSpriteID, - v1->vPosition.x, - v1->vPosition.y, - v1->vPosition.z + 16, - v9 % 200 + 200, - 1, - 1, - 0, - &_this); - } - if ( v1->pMonsterInfo.uSpecialAbilityType == MONSTER_SPECIAL_ABILITY_EXPLODE ) - Actor::Explode(v11); - return; - } - if ( !_this.uItemID ) - { - if ( v1->pMonsterInfo.uSpecialAbilityType == MONSTER_SPECIAL_ABILITY_EXPLODE ) - Actor::Explode(v11); - return; - } - if ( rand() % 100 < 20 ) - { - v9 = rand(); - sub_42F7EB_DropItemAt( - pItemsTable->pItems[_this.uItemID].uSpriteID, - v1->vPosition.x, - v1->vPosition.y, - v1->vPosition.z + 16, - v9 % 200 + 200, - 1, - 1, - 0, - &_this); - } - if ( v1->pMonsterInfo.uSpecialAbilityType == MONSTER_SPECIAL_ABILITY_EXPLODE ) - Actor::Explode(v11); - return; - } - _this.uItemID = ITEM_DEVIL_ICHOR; - } - } - if ( rand() % 100 < 20 ) - { - v9 = rand(); - sub_42F7EB_DropItemAt( - pItemsTable->pItems[_this.uItemID].uSpriteID, - v1->vPosition.x, - v1->vPosition.y, - v1->vPosition.z + 16, - v9 % 200 + 200, + sub_42F7EB_DropItemAt(pItemsTable->pItems[drop.uItemID].uSpriteID, + actor->vPosition.x, + actor->vPosition.y, + actor->vPosition.z + 16, + rand() % 200 + 200, 1, 1, 0, - &_this); + &drop); } - if ( v1->pMonsterInfo.uSpecialAbilityType == MONSTER_SPECIAL_ABILITY_EXPLODE ) - Actor::Explode(v11); + + if (actor->pMonsterInfo.uSpecialAbilityType == MONSTER_SPECIAL_ABILITY_EXPLODE) + Actor::Explode(uActorID); } //----- (00402CED) -------------------------------------------------------- -void __fastcall Actor::PlaySound(unsigned int uActorID, unsigned int uSoundID) +void Actor::PlaySound(unsigned int uActorID, unsigned int uSoundID) { Actor *v2; // eax@1 unsigned __int16 v3; // dx@1 @@ -3492,7 +3285,7 @@ //----- (00402AD7) -------------------------------------------------------- -unsigned int __fastcall Actor::_402AD7(unsigned int uActorID, unsigned int a2, signed int arg0, signed int uActionLength, AIDirection *pDir) +void Actor::_402AD7(unsigned int uActorID, unsigned int a2, signed int arg0, signed int uActionLength, AIDirection *pDir) { unsigned int v5; // edi@1 int v6; // eax@1 @@ -3535,25 +3328,29 @@ { if ( !uActionLength ) uActionLength = 256; - return Actor::_403F58(v5, 4, uActionLength, v10); + Actor::_403F58(v5, 4, uActionLength, v10); + return; } if ( (double)(signed int)v10->uDistance < 307.2 ) { if ( !uActionLength ) uActionLength = 256; - return Actor::_403EB6(v5, v18, uActionLength, v10); + Actor::_403EB6(v5, v18, uActionLength, v10); + return; } if ( !v7->uMovementSpeed ) - return Actor::_403EB6(v5, v18, uActionLength, v10); + { + Actor::_403EB6(v5, v18, uActionLength, v10); + return; + } v18 = 16; if ( arg0 % 2 ) v18 = -16; - v12 = ((unsigned __int64)(stru_5C6E00->SinCos(v18 + stru_5C6E00->uIntegerPi + v10->uYawAngle) - * (signed __int64)v10->uDistanceXZ) >> 16) + v12 = ((unsigned __int64)(stru_5C6E00->Cos(v18 + stru_5C6E00->uIntegerPi + v10->uYawAngle) * (signed __int64)v10->uDistanceXZ) >> 16) + pParty->vPosition.x; v13 = stru_5C6E00->uIntegerPi + v10->uYawAngle; v17 = v12; - v19 = stru_5C6E00->SinCos(v18 + v13 - stru_5C6E00->uIntegerHalfPi); + v19 = stru_5C6E00->Sin(v18 + v13); v7->uYawAngle = stru_5C6E00->Atan2( v17 - v7->vPosition.x, pParty->vPosition.y @@ -3565,15 +3362,15 @@ v7->uCurrentActionLength = 128; v7->uPitchAngle = LOWORD(v10->uPitchAngle); v7->uAIState = Pursuing; - return v7->UpdateAnimation(); + v7->UpdateAnimation(); } //----- (00402968) -------------------------------------------------------- -unsigned int __fastcall Actor::_402968(unsigned int uActorID, signed int edx0, int uActionLength, AIDirection *a4) +void Actor::_402968(unsigned int uActorID, signed int edx0, int uActionLength, AIDirection *a4) { unsigned int v4; // esi@1 Actor *v5; // ebx@1 - unsigned int result; // eax@1 + //unsigned int result; // eax@1 int v7; // ecx@2 signed __int16 v8; // cx@10 unsigned __int16 v9; // ax@15 @@ -3589,8 +3386,8 @@ a2 = edx0; v15 = uActorID; v5 = &pActors[uActorID]; - result = pActors[uActorID].CanAct(); - if ( result ) + //result = pActors[uActorID].CanAct(); + if ( pActors[uActorID].CanAct() ) { v7 = 8 * v4 | 3; a1 = 8 * v4 | 3; @@ -3607,7 +3404,7 @@ { if ( !uActionLength ) uActionLength = 256; - result = Actor::_403F58(v15, 4, uActionLength, &v13); + Actor::_403F58(v15, 4, uActionLength, &v13); } else { @@ -3624,15 +3421,14 @@ v5->uCurrentActionTime = 0; v5->uPitchAngle = v9; v5->uAIState = Fleeing; - result = v5->UpdateAnimation(); + v5->UpdateAnimation(); } } - return result; } //----- (0040281C) -------------------------------------------------------- -int __fastcall Actor::_40281C(unsigned int uActorID, unsigned int a2, signed int uActionLength, AIDirection *pDir, int a5) +void Actor::_40281C(unsigned int uActorID, unsigned int a2, signed int uActionLength, AIDirection *pDir, int a5) { unsigned int v5; // edi@1 int v6; // eax@1 @@ -3679,7 +3475,8 @@ v16 = v10; v15 = uActionLength; v11 = 4; - return Actor::_403F58(v5, v11, v15, v16); + Actor::_403F58(v5, v11, v15, v16); + return; } if ( (signed int)v10->uDistance < a5 ) { @@ -3688,7 +3485,8 @@ v11 = v19; v16 = v10; v15 = uActionLength; - return Actor::_403F58(v5, v11, v15, v16); + Actor::_403F58(v5, v11, v15, v16); + return; } if ( uActionLength ) { @@ -3709,12 +3507,12 @@ v7->uCurrentActionTime = 0; v7->uPitchAngle = v14; v7->uAIState = Pursuing; - return v7->UpdateAnimation(); + v7->UpdateAnimation(); } //----- (00402686) -------------------------------------------------------- -unsigned int __fastcall Actor::_402686(unsigned int uActorID, unsigned int a2, signed int uActionLength, AIDirection *a4) +void Actor::_402686(unsigned int uActorID, unsigned int a2, signed int uActionLength, AIDirection *a4) { unsigned int v4; // edi@1 int v5; // eax@1 @@ -3802,11 +3600,11 @@ v6->uAIState = Pursuing; if ( rand() % 100 < 2 ) Actor::PlaySound(v4, 2u); - return v6->UpdateAnimation(); + v6->UpdateAnimation(); } //----- (00401221) -------------------------------------------------------- -void __fastcall Actor::_401221(unsigned int uActorID, int *a2, unsigned int a3) +void Actor::_401221(unsigned int uActorID, int *a2, unsigned int a3) { Actor *v3; // esi@1 unsigned int v4; // ebx@1 @@ -4084,61 +3882,72 @@ //----- (0045976D) -------------------------------------------------------- -unsigned int Actor::UpdateAnimation() +void Actor::UpdateAnimation() { - AIState state; // edx@1 - unsigned int result; // eax@1 + //AIState state; // edx@1 + //unsigned int result; // eax@1 - state = (AIState)this->uAIState; - BYTE2(this->uAttributes) &= 0xDFu; - result = this->uAttributes; - switch ( state ) + //state = (AIState)this->; + uAttributes &= 0xFFDFFFFF; + //result = this->uAttributes; + switch (uAIState) { case Tethered: - this->uCurrentActionAnimation = ANIM_Walking; - return result; + uCurrentActionAnimation = ANIM_Walking; + break; + case AttackingMelee: - this->uCurrentActionAnimation = ANIM_AtkMelee; - goto LABEL_10; + uCurrentActionAnimation = ANIM_AtkMelee; + uAttributes |= 0x200000u; + break; + case AttackingRanged1: case AttackingRanged2: case AttackingRanged3: case AttackingRanged4: - this->uCurrentActionAnimation = ANIM_AtkRanged; - goto LABEL_10; + uCurrentActionAnimation = ANIM_AtkRanged; + uAttributes |= 0x200000u; + break; + case Dying: case Resurrected: - this->uCurrentActionAnimation = ANIM_Dying; - goto LABEL_10; + uCurrentActionAnimation = ANIM_Dying; + uAttributes |= 0x200000u; + break; + case Pursuing: case Fleeing: - this->uCurrentActionAnimation = ANIM_Walking; - goto LABEL_10; + uCurrentActionAnimation = ANIM_Walking; + uAttributes |= 0x200000u; + break; + case Stunned: - this->uCurrentActionAnimation = ANIM_GotHit; - goto LABEL_10; + uCurrentActionAnimation = ANIM_GotHit; + uAttributes |= 0x200000u; + break; + case Fidgeting: - this->uCurrentActionAnimation = ANIM_Bored; - goto LABEL_10; + uCurrentActionAnimation = ANIM_Bored; + uAttributes |= 0x200000u; + break; + case Standing: case Interacting: case Summoned: - this->uCurrentActionAnimation = ANIM_Standing; -LABEL_10: - result |= 0x200000u; - this->uAttributes = result; - break; + uCurrentActionAnimation = ANIM_Standing; + uAttributes |= 0x200000u; + break; + case Dead: - result = 60 * this->pSpriteIDs[6]; - if ( *(__int16 *)((char *)pSpriteFrameTable->pSpriteSFrames->pHwSpriteIDs + result) <= 0 ) - this->uAIState = Removed; + if (pSpriteFrameTable->pSpriteSFrames[pSpriteIDs[ANIM_Dead]].pHwSpriteIDs[0] <= 0) + uAIState = Removed; else - this->uCurrentActionAnimation = ANIM_Dead; - break; + uCurrentActionAnimation = ANIM_Dead; + break; + default: - return result; + assert(false); } - return result; } //----- (00459671) -------------------------------------------------------- @@ -4168,7 +3977,7 @@ this->uActorRadius = 32; this->uActorHeight = 128; this->uAIState = Standing; - this->uCurrentActionAnimation = 0; + this->uCurrentActionAnimation = ANIM_Standing; this->uMovementSpeed = 200; this->uCarriedItemID = 0; this->uGroup = 0; @@ -4318,10 +4127,10 @@ v8->uMovementSpeed = v11; v12 = rand(); v13 = v12 % 2048; - v14 = stru_5C6E00->SinCos(v12 % 2048); + v14 = stru_5C6E00->Cos(v12 % 2048); v26 = v14; v15 = ((unsigned __int64)(v14 * (signed __int64)v27) >> 16) + v30->vPosition.x; - v16 = stru_5C6E00->SinCos(v13 - stru_5C6E00->uIntegerHalfPi); + v16 = stru_5C6E00->Sin(v13); v26 = v16; v29 = (unsigned __int64)(v16 * (signed __int64)v27) >> 16; LOWORD(v16) = uFaceID; diff -r e8fcde8ba3fc -r 405d0c4dd1b3 Actor.h --- a/Actor.h Wed Feb 20 20:50:22 2013 +0600 +++ b/Actor.h Wed Feb 20 20:51:55 2013 +0600 @@ -190,49 +190,49 @@ void Reset(); void Remove(); void PrepareSprites(char load_sounds_if_bit1_set); - unsigned int UpdateAnimation(); + void UpdateAnimation(); signed int GetActorsRelation(Actor *a2); void SetRandomGoldIfTheresNoItem(); bool CanAct(); bool IsNotAlive(); void InitializeDialogue(int bPlayerSaysHello); - char _438B9B(); + bool IsPeasant(); - static void __fastcall _401221(unsigned int uActorID, int *a2, unsigned int a3); - static unsigned int __fastcall _402686(unsigned int uActorID, unsigned int a2, signed int uActionLength, struct AIDirection *a4); - static int __fastcall _40281C(unsigned int uActorID, unsigned int a2, signed int uActionLength, struct AIDirection *pDir, int a5); - static unsigned int __fastcall _402968(unsigned int uActorID, signed int edx0, int uActionLength, struct AIDirection *a4); - static unsigned int __fastcall _402AD7(unsigned int uActorID, unsigned int a2, signed int arg0, signed int uActionLength, struct AIDirection *pDir); - static void __fastcall PlaySound(unsigned int uActorID, unsigned int uSoundID); - static void __fastcall Die(unsigned int uActorID); - static unsigned int __fastcall Resurrect(unsigned int uActorID); - static int __fastcall _402F87(unsigned int uActorID, unsigned int uObjID, struct AIDirection *a4); - static __int16 __fastcall _4030AD(unsigned int uActorID, signed int edx0, int arg0); + static void _401221(unsigned int uActorID, int *a2, unsigned int a3); + static void _402686(unsigned int uActorID, unsigned int a2, signed int uActionLength, struct AIDirection *a4); + static void _40281C(unsigned int uActorID, unsigned int a2, signed int uActionLength, struct AIDirection *pDir, int a5); + static void _402968(unsigned int uActorID, signed int edx0, int uActionLength, struct AIDirection *a4); + static void _402AD7(unsigned int uActorID, unsigned int a2, signed int arg0, signed int uActionLength, struct AIDirection *pDir); + static void PlaySound(unsigned int uActorID, unsigned int uSoundID); + static void Die(unsigned int uActorID); + static void Resurrect(unsigned int uActorID); + static void _402F87(unsigned int uActorID, unsigned int uObjID, struct AIDirection *a4); + static void _4030AD(unsigned int uActorID, signed int edx0, int arg0); static char __fastcall _4031C1_update_job(unsigned int uActorID, signed int a2, int a3); - static void __fastcall _4032B2(unsigned int a1, unsigned int a2, int a3, int uActionLength); - static unsigned int __fastcall _403476(unsigned int uActorID, signed int edx0, struct AIDirection *pDir); - static unsigned int __fastcall _40368B(unsigned int uActorID, signed int edx0, struct AIDirection *pDir); - static unsigned int __fastcall _403854(unsigned int uActorID, signed int edx0, struct AIDirection *pDir); - static unsigned int __fastcall _403A60(unsigned int uActorID, signed int edx0, struct AIDirection *pDir); - static unsigned int __fastcall _403C6C(unsigned int uActorID, signed int edx0, struct AIDirection *arg0); + static void _4032B2(unsigned int a1, unsigned int a2, int a3, int uActionLength); + static void _403476(unsigned int uActorID, signed int edx0, struct AIDirection *pDir); + static void _40368B(unsigned int uActorID, signed int edx0, struct AIDirection *pDir); + static void _403854(unsigned int uActorID, signed int edx0, struct AIDirection *pDir); + static void _403A60(unsigned int uActorID, signed int edx0, struct AIDirection *pDir); + static void _403C6C(unsigned int uActorID, signed int edx0, struct AIDirection *arg0); static void __fastcall StandAwhile(unsigned int uActorID); - static unsigned int __fastcall _403EB6(unsigned int uActorID, unsigned int a2, unsigned int uActionLength, struct AIDirection *a4); - static unsigned int __fastcall _403F58(unsigned int uActorID, signed int uObjID, int uActionLength, struct AIDirection *a4); - static unsigned int __fastcall FaceObject(unsigned int uActorID, unsigned int uObjID, int _48, struct AIDirection *a4); + static void _403EB6(unsigned int uActorID, unsigned int a2, unsigned int uActionLength, struct AIDirection *a4); + static void _403F58(unsigned int uActorID, signed int uObjID, int uActionLength, struct AIDirection *a4); + static void FaceObject(unsigned int uActorID, unsigned int uObjID, int _48, struct AIDirection *a4); static struct AIDirection *__fastcall GetDirectionInfo(unsigned int uObj1ID, unsigned int uObj2ID, struct AIDirection *pOut, int a4); static signed int __fastcall Explode(unsigned int uActorID); static char __fastcall _404874(unsigned int uActorID, struct AIDirection *a2, int a3, char a4); static void __fastcall _404AC7(unsigned int uActorID, struct AIDirection *pDir, int spellnum, int a4, unsigned int uSkillLevel); - static void _43AC45(unsigned int uActorID, int a2); - static bool _43ABB0(Actor *a1, Actor *a2); + static void AggroSurroundingPeasants(unsigned int uActorID, int a2); + static bool ArePeasantsOfSameFaction(Actor *a1, Actor *a2); static bool StealFrom(unsigned int uActorID); static void GiveItem(unsigned int uActorID, unsigned int uItemID, unsigned int bGive); static void ToggleFlag(signed int uActorID, unsigned int uFlag, int bToggle); - static void _438CF3(unsigned int uActorID); + static void ApplyFineForKillingPeasant(unsigned int uActorID); static void DrawHealthBar(Actor *a1, struct GUIWindow *a2); static int _43B3E0_CalcDamage(Actor *a1, signed int a2); - static int AddBloodsplatOnDamageOverlay(unsigned int uActorID, int a2, signed int a3); + static void AddBloodsplatOnDamageOverlay(unsigned int uActorID, int a2, signed int a3); char pActorName[32]; diff -r e8fcde8ba3fc -r 405d0c4dd1b3 AudioPlayer.cpp --- a/AudioPlayer.cpp Wed Feb 20 20:50:22 2013 +0600 +++ b/AudioPlayer.cpp Wed Feb 20 20:51:55 2013 +0600 @@ -45,17 +45,9 @@ float pSoundVolumeLevels[10] = { - 0.0, - 0.10999999940395, - 0.21999999880791, - 0.33000001311302, - 0.43999999761581, - 0.55000001192093, - 0.66000002622604, - 0.76999998092651, - 0.87999999523163, - 0.99000000953674 -}; // idb + 0.0000000f, 0.1099999f, 0.2199999f, 0.3300000f, 0.4399999f, + 0.5500000f, 0.6600000f, 0.7699999f, 0.8799999f, 0.9900000f +}; @@ -541,7 +533,7 @@ if (!bNoSound && bPlayerReady && hAILRedbook && uMusicVolimeMultiplier) { AIL_redbook_stop(hAILRedbook); - AIL_redbook_set_volume(hAILRedbook, (signed)(pSoundVolumeLevels[uMusicVolimeMultiplier] * 64.0)); + AIL_redbook_set_volume(hAILRedbook, (signed)pSoundVolumeLevels[uMusicVolimeMultiplier] * 64.0f); AIL_redbook_track_info(hAILRedbook, eTrack, &uCurrentMusicTrackStartMS, &uCurrentMusicTrackEndMS); AIL_redbook_play(hAILRedbook, uCurrentMusicTrackStartMS + 1, uCurrentMusicTrackEndMS); uCurrentMusicTrackLength = ((uCurrentMusicTrackEndMS - uCurrentMusicTrackStartMS) * 128) / 1000; @@ -560,20 +552,15 @@ } //----- (004AA214) -------------------------------------------------------- -void AudioPlayer::SetMasterVolume(unsigned int uVolume) +void AudioPlayer::SetMasterVolume(float fVolume) { - AudioPlayer *v2; // esi@1 - _DIG_DRIVER *hDrv; // eax@2 - - v2 = this; - if ( this->bPlayerReady ) + if ( bPlayerReady ) { - hDrv = this->hDigDriver; - this->uMasterVolume = uVolume; - if ( hDrv ) - AIL_set_digital_master_volume(hDrv, uVolume); - if ( v2->b3DSoundInitialized ) - v2->s3DSoundVolume = (signed __int64)((double)(signed int)uVolume * 0.5); + uMasterVolume = fVolume; + if ( hDigDriver ) + AIL_set_digital_master_volume(hDigDriver, fVolume); + if ( b3DSoundInitialized ) + s3DSoundVolume = fVolume * 0.5f; } } // 4D8304: using guessed type int __stdcall AIL_set_digital_master_volume(int, int); @@ -1197,7 +1184,7 @@ v27 = abs((signed __int64)v26); v28 = abs((signed __int64)v93); v29 = abs((signed __int64)*(float *)&varC); - v90 = sub_4621DA(v29, v28, v27); + v90 = int_get_vector_length(v29, v28, v27); sPlaybackRate = v12; if ( v12 > v25 ) goto LABEL_192; @@ -1208,7 +1195,7 @@ v31 = abs((signed __int64)*(float *)&uVolume); v32 = abs((signed __int64)v93); v33 = abs((signed __int64)*(float *)&varC); - v34 = sub_4621DA(v33, v32, v31); + v34 = int_get_vector_length(v33, v32, v31); v35 = v103 == v34; if ( v103 < v34 ) { @@ -1287,7 +1274,7 @@ v50 = abs((signed __int64)v49); v51 = abs(0); v52 = abs((signed __int64)v99); - if ( sub_4621DA(v52, v51, v50) <= 100 ) + if ( int_get_vector_length(v52, v51, v50) <= 100 ) { AIL_set_3D_position((void *)*(int *)v42, LODWORD(v99), 0.0, LODWORD(uNumRepeatsa)); v53 = -uNumRepeatsa; @@ -1559,7 +1546,7 @@ v23 = abs((signed __int64)v22); v24 = abs(0); v25 = abs((signed __int64)v58); - if ( sub_4621DA(v25, v24, v23) <= 100 ) + if ( int_get_vector_length(v25, v24, v23) <= 100 ) { AIL_set_3D_position(v6->hSample, LODWORD(v58), 0.0, uNumRepeats); v26 = -*(float *)&uNumRepeats; @@ -1690,7 +1677,7 @@ v45 = abs(v44->vPosition.z - pParty->vPosition.z); v46 = abs(v44->vPosition.y - pParty->vPosition.y); v47 = abs(v44->vPosition.x - pParty->vPosition.x); - if ( sub_4621DA(v47, v46, v45) <= 8192 ) + if ( int_get_vector_length(v47, v46, v45) <= 8192 ) break; LABEL_89: ++v59; @@ -1772,7 +1759,6 @@ int v5; // ST08_4@1 int v6; // esi@1 int v7; // eax@1 - int result; // eax@2 int v9; // [sp+10h] [bp+8h]@1 v3 = a2; @@ -1780,12 +1766,11 @@ v5 = abs(a3 - pParty->vPosition.z); v6 = abs(v3 - pParty->vPosition.y); v7 = abs(v4 - pParty->vPosition.x); - v9 = sub_4621DA(v7, v6, v5); + v9 = int_get_vector_length(v7, v6, v5); if ( v9 <= 8192 ) - result = 114 - (unsigned __int64)(signed __int64)((double)v9 * 0.0001220703125 * 100.0); + return 114 - (unsigned __int64)(signed __int64)((double)v9 * 0.0001220703125 * 100.0); else - result = 0; - return result; + return 0; } @@ -1974,9 +1959,9 @@ uNumRedbookTracks = AIL_redbook_tracks(hAILRedbook); } pAudioPlayer->sRedbookVolume = AIL_redbook_volume(hAILRedbook); - pAudioPlayer->SetMasterVolume(pSoundVolumeLevels[uSoundVolumeMultiplier] * 128.0); + pAudioPlayer->SetMasterVolume(pSoundVolumeLevels[uSoundVolumeMultiplier] * 128.0f); if ( bPlayerReady && hAILRedbook ) - AIL_redbook_set_volume(hAILRedbook, (unsigned __int64)(pSoundVolumeLevels[uMusicVolimeMultiplier] * 64.0) >> 32); + AIL_redbook_set_volume(hAILRedbook, (unsigned __int64)(pSoundVolumeLevels[uMusicVolimeMultiplier] * 64.0f) >> 32); LoadAudioSnd(); } diff -r e8fcde8ba3fc -r 405d0c4dd1b3 AudioPlayer.h --- a/AudioPlayer.h Wed Feb 20 20:50:22 2013 +0600 +++ b/AudioPlayer.h Wed Feb 20 20:51:55 2013 +0600 @@ -141,7 +141,7 @@ } void SetMusicVolume(int vol); - void SetMasterVolume(unsigned int uVolume); + void SetMasterVolume(float fVolume); void _4AA258(int a2); void PlaySound(SoundID eSoundID, signed int a3, unsigned int uNumRepeats, signed int a5, signed int a6, int a7, unsigned int uVolume, int sPlaybackRate); void _4AAFCF(); diff -r e8fcde8ba3fc -r 405d0c4dd1b3 Events.cpp --- a/Events.cpp Wed Feb 20 20:50:22 2013 +0600 +++ b/Events.cpp Wed Feb 20 20:51:55 2013 +0600 @@ -1,19 +1,44 @@ +#include + +#include "MapInfo.h" +#include "Game.h" +#include "GUIWindow.h" +#include "GUIFont.h" +#include "GUIButton.h" +#include "GUIProgressBar.h" +#include "Chest.h" +#include "stru176.h" +#include "LOD.h" +#include "NPC.h" +#include "Actor.h" +#include "Party.h" +#include "Math.h" +#include "AudioPlayer.h" +#include "Indoor.h" +#include "Viewport.h" +#include "texts.h" +#include "Texture.h" +#include "Allocator.h" +#include "mm7_data.h" +#include "stru123.h" +#include "stru159.h" #include "Events.h" #include "Events2D.h" +#include "Weather.h" -Event pSomeOtherEVT_Events[4400]; +EventIndex pSomeOtherEVT_Events[4400]; unsigned int uSomeOtherEVT_NumEvents; char *pSomeOtherEVT; -Event pSomeEVT_Events[4400]; +EventIndex pSomeEVT_Events[4400]; unsigned int uSomeEVT_NumEvents; char *pSomeEVT; unsigned int uGlobalEVT_NumEvents; unsigned int uGlobalEVT_Size; char pGlobalEVT[46080]; -Event pGlobalEVT_Events[4400]; +EventIndex pGlobalEVT_Index[4400]; unsigned int pLevelStrOffsets[500]; unsigned int uLevelStrNumStrings; @@ -22,7 +47,1627 @@ unsigned int uLevelEVT_Size; char pLevelStr[9216]; char pLevelEVT[9216]; -Event pLevelEVT_Events[4400]; +EventIndex pLevelEVT_Index[4400]; _2devent p2DEvents[525]; // weak + + + +//----- (00443CE1) -------------------------------------------------------- +unsigned int LoadEventsToBuffer(const char *pContainerName, char *pBuffer, unsigned int uBufferSize) + { + FILE *pLodFile; // eax@1 + unsigned int uTextureSize; // esi@3 + char Args[60]; // [sp+8h] [bp-B4h]@6 + void *ptr; // [sp+B8h] [bp-4h]@1 + Texture DstBuf; // [sp+6Ch] [bp-50h]@1 + + ptr = pEvents_LOD->LoadRaw(pContainerName, 0); + pLodFile = pEvents_LOD->FindContainer(pContainerName, 0); + if ( !pLodFile ) + Abortf("Unable to load %s", pContainerName); + fread(&DstBuf, 1, 48, pLodFile); + uTextureSize = DstBuf.uDecompressedSize; + if ( !DstBuf.uDecompressedSize ) + uTextureSize = DstBuf.uTextureSize; + memset(&DstBuf, 0, 72); + if ( uTextureSize >= (signed int)uBufferSize ) + { + sprintf(Args, "File %s Size %lu - Buffer size %lu", pContainerName, uTextureSize, uBufferSize); + Abortf(Args); + } + memcpy(pBuffer, ptr, uTextureSize); + pAllocator->FreeChunk(ptr); + return uTextureSize; + } + +//----- (00443DA1) -------------------------------------------------------- +void __cdecl Initialize_GlobalEVT() + { + struct raw_event_header + { + unsigned char evt_size; + unsigned char evt_id_l; + unsigned char evt_id_h; + unsigned char evt_sequence_num; + } ; + uint events_count; + unsigned int offset_in; + raw_event_header *current_hdr; + uGlobalEVT_NumEvents = 0; + uGlobalEVT_Size = LoadEventsToBuffer("global.evt", pGlobalEVT, 46080); + if ( !uGlobalEVT_Size ) + return; + memset(pGlobalEVT_Index, 0x80, sizeof(pGlobalEVT_Index));//52800 + events_count = uGlobalEVT_NumEvents; + current_hdr=(raw_event_header *)pGlobalEVT; + offset_in=0; + for (events_count = 0, offset_in = 0; offset_in < uGlobalEVT_Size; ++events_count) + { + pGlobalEVT_Index[events_count].uEventID=current_hdr->evt_id_l+(current_hdr->evt_id_h<<8); + pGlobalEVT_Index[events_count].event_sequence_num=current_hdr->evt_sequence_num; + pGlobalEVT_Index[events_count].uEventOffsetInEVT=offset_in; + offset_in+=current_hdr->evt_size+1; + current_hdr=(raw_event_header *)&pGlobalEVT[offset_in]; + } + uGlobalEVT_NumEvents = events_count; + + } + + +//----- (00443EF8) -------------------------------------------------------- +void LoadLevel_InitializeLevelEvt() + { + if (!uLevelEVT_Size) + return; + + memset(array_5B5928, 0, 3200); + memset(pLevelEVT_Index, 80, 52800); + + uLevelEVT_NumEvents = 0; + dword_5B65C8 = 0; + + for (uint i = 0, j = 0; j < uLevelEVT_Size; ++i) + { + pLevelEVT_Index[i].uEventID = pLevelEVT[j + 1] + ((unsigned short)pLevelEVT[j + 2] << 8); + pLevelEVT_Index[i].event_sequence_num = pLevelEVT[j + 3]; + pLevelEVT_Index[i].uEventOffsetInEVT = j; + j += pLevelEVT[j] + 1; + uLevelEVT_NumEvents++; + } + } + + +//----- (0044684A) -------------------------------------------------------- +void EventProcessor(int uEventID, int a2, int a3) + { + 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 + int v19; // ebp@36 + signed int v20; // ecx@40 + int v21; // eax@40 + 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 v30; // eax@58 + int v31; // ecx@58 + int v32; // esi@58 + NPCData *v33; // ecx@58 + int v34; // esi@59 + int v35; // esi@60 + int v36; // esi@61 + 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 + GUIButton *v49; // esi@94 + char v50; // al@100 + Player *v51; // esi@103 + Player *v52; // ecx@106 + int v53; // ecx@107 + char v54; // al@111 + Player *v55; // esi@114 + Player *v56; // ecx@117 + int v57; // ecx@118 + signed int v58; // ebp@124 + Player *v59; // esi@125 + int v60; // eax@126 + int v61; // edx@133 + int v62; // eax@139 + void *v63; // ebp@145 + signed int v64; // edi@146 + unsigned int v65; // edx@148 + Player *v66; // ecx@148 + int v67; // esi@148 + signed int v68; // eax@151 + int v69; // esi@151 + Player *v70; // ecx@158 + unsigned int v71; // eax@159 + int v72; // esi@159 + signed int v73; // eax@162 + int v74; // esi@162 + int v75; // edx@172 + Player *v76; // esi@173 + 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 + char *v93; // eax@252 + int v94; // ecx@262 + int v95; // ebp@262 + int v96; // edx@262 + int v97; // eax@262 + 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 v127; // [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 + int v135; // [sp+3Ch] [bp-46Ch]@262 + int v136; // [sp+40h] [bp-468h]@40 + int v137; // [sp+44h] [bp-464h]@40 + int v138; // [sp+48h] [bp-460h]@40 + int v139; // [sp+4Ch] [bp-45Ch]@40 + ItemGen item; // [sp+50h] [bp-458h]@15 + char Source[120]; // [sp+74h] [bp-434h]@15 + char Str[120]; // [sp+ECh] [bp-3BCh]@21 + Actor Dst; // [sp+164h] [bp-344h]@53 + + //v131 = uEventID; + v133 = 0; + dword_5B5920 = a2; + dword_5B65C4 = 0; + if ( !a1 ) + { + if ( !GameUI_StatusBar_TimedStringTimeLeft ) + ShowStatusBarString(pGlobalTXT_LocalizationStrings[521], 2u);// Nothing here + return; + } + v127 = 2 * (uActiveCharacter == 0) + 4; //4 and 6 + curr_seq_num = dword_597F18; + if ( _5C3420_pDecoration ) + { + uSomeEVT_NumEvents = uGlobalEVT_NumEvents; + pSomeEVT = pGlobalEVT; + memcpy(pSomeEVT_Events, pGlobalEVT_Index, 52800); //4400 evts + } + else + { + uSomeEVT_NumEvents = uLevelEVT_NumEvents; + pSomeEVT = pLevelEVT; + memcpy(pSomeEVT_Events, pLevelEVT_Index, 52800); + } + + + //v4 = 0; + //v124 = 0; + for (uint i = 0; i < uSomeEVT_NumEvents; ++i) + { + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + //while ( 1 ) + //{ + if ( dword_5B65C4 ) + goto LABEL_301; + //v8 = v4; + if ( pSomeEVT_Events[i/*v4*/].uEventID == uEventID && pSomeEVT_Events[i/*v4*/].event_sequence_num == curr_seq_num ) + { + //v9 = pSomeEVT_Events[v8].uEventOffsetInEVT; + //v10 = (ByteArray *)&v5[v9]; + auto _evt = (_evt_raw *)(pSomeEVT + pSomeEVT_Events[i/*v4*/].uEventOffsetInEVT); + + switch (_evt->_e_type) + { + case EVENT_CheckSeason: + if ( !sub_4465DF_check_season(_evt->v5) ) + { + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + } + v11 = _evt->v6; + goto LABEL_130; + case EVENT_ShowMovie: + { + strcpy(Source, (char *)&_evt->v7); + v12 = (char *)&item.uExpireTime + strlen(Source) + 7; + if ( *v12 == 32 ) + *v12 = 0; + if ( pVideoPlayer->field_54 ) + pVideoPlayer->Unload(); + pVideoPlayer->bStopBeforeSchedule = 0; + pVideoPlayer->pResetflag = 0; + if (pAsyncMouse) + pAsyncMouse->Suspend(); + 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); + VideoPlayer::MovieLoop(v16, 0, v14, 1); + if ( !_strcmpi(v16, "arbiter good") ) + { + pParty->uAlignment = 0; + v18 = 0; + LOBYTE(v17) = 1; + SetUserInterface(v18, v17); + if ( !v15 || v128 == 3 ) + { + pCurrentScreen = v128; + if ( v128 == 3 ) + pGameLoadingUI_ProgressBar->uType = GUIProgressBar::TYPE_Fullscreen; + if ( v128 == 13 ) + pVideoPlayer->_4BF28F(pAnimatedRooms[uCurrentHouse_Animation].field_0, 1u); + } + if (pAsyncMouse) + pAsyncMouse->Resume(); + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + } + if ( !_strcmpi(v16, "arbiter evil") ) + { + v18 = 2; + pParty->uAlignment = 2; + LOBYTE(v17) = 1; + SetUserInterface(v18, v17); + if ( !v15 || v128 == 3 ) + { + pCurrentScreen = v128; + if ( v128 == 3 ) + pGameLoadingUI_ProgressBar->uType = GUIProgressBar::TYPE_Fullscreen; + if ( v128 == 13 ) + pVideoPlayer->_4BF28F(pAnimatedRooms[uCurrentHouse_Animation].field_0, 1u); + } + if (pAsyncMouse) + pAsyncMouse->Resume(); + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + + break; + } + if ( !_strcmpi(v16, "pcout01") ) // moving to harmondale from emerald isle + { + Rest(0x2760u); + pParty->RestAndHeal(); + pParty->field_764 = 0; + } + if ( !v15 || v128 == 3 ) + { + pCurrentScreen = v128; + if ( v128 == 3 ) + pGameLoadingUI_ProgressBar->uType = GUIProgressBar::TYPE_Fullscreen; + if ( v128 == 13 ) + pVideoPlayer->_4BF28F(pAnimatedRooms[uCurrentHouse_Animation].field_0, 1u); + } + if (pAsyncMouse) + pAsyncMouse->Resume(); + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + } + break; + case EVENT_CheckSkill: + { + v19 = _evt->v7 + ((_evt->v8 + ((_evt->v9 + ((unsigned int)_evt->v10 << 8)) << 8)) << 8); + if ( v127 < 0 ) + goto LABEL_47; + if ( v127 <= 3 ) + { + v24 = pParty->pPlayers[0].pActiveSkills[3486 * v127 + _evt->v5]; + } + else + { + if ( v127 == 4 ) + { + v24 = pPlayers[uActiveCharacter]->pActiveSkills[_evt->v5]; + } + else + { + if ( v127 == 5 ) + { + v20 = 0; + v21 = 3486 * v130 + _evt->v5; + v136 = 1; + LOWORD(v21) = pParty->pPlayers[0].pActiveSkills[v21]; + v137 = v21 & 0x40; + v138 = v21 & 0x80; + v22 = v21 & 0x100; + v23 = v21 & 0x3F; + v139 = v22; + while ( v23 < v19 || !*(&v136 + _evt->v6) ) + { + ++v20; + if ( v20 >= 4 ) + { + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + } + } + v11 = _evt->v11; + goto LABEL_130; + } +LABEL_47: + //v10 = (ByteArray *)&v5[v9]; + v24 = pParty->pPlayers[0].pActiveSkills[_evt->v5 + 3486 * rand() % 4]; + } + } + v136 = 1; + v137 = v24 & 0x40; + v138 = v24 & 0x80; + v139 = v24 & 0x100; + if ( (v24 & 0x3F) >= v19 && *(&v136 + _evt->v6) ) + { + v11 = _evt->v11; + goto LABEL_130; + } + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + } + break; + + case EVENT_SpeakNPC: + if ( a3 ) + { + //Actor::Actor(&Dst); + memset(&Dst, 0, 0x344u); + dword_5B65D0_dialogue_actor_npc_id = _evt->v5 + + ((_evt->v6 + + ((_evt->v7 + + ((unsigned int)_evt->v8 << 8)) << 8)) << 8); + Dst.uNPC_ID = dword_5B65D0_dialogue_actor_npc_id; + Dst.InitializeDialogue(0); + } + else + { + bDialogueUI_InitializeActor_NPC_ID = _evt->v5 + + ((_evt->v6 + ((_evt->v7 + ((unsigned int)_evt->v8 << 8)) << 8)) << 8); + } + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + case EVENT_ChangeEvent: + v25 = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((unsigned int)_evt->v8 << 8)) << 8)) << 8); + if ( v25 ) + { + stru_5E4C90._decor_events[_5C3420_pDecoration->_idx_in_stru123 - 75] = _evt->v5 - 124; + } + else + { + v26 = _5C3420_pDecoration; + stru_5E4C90._decor_events[_5C3420_pDecoration->_idx_in_stru123 - 75] = 0; + LOBYTE(v26->field_2) |= 0x20u; + } + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + case EVENT_SetNPCGreeting: + v27 = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8); + v28 = _evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8); + pNPCStats->pNewNPCData[v27].uFlags &= 0xFFFFFFFCu; + pNPCStats->pNewNPCData[v27].greet = v28; + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + case EVENT_SetNPCTopic: + { + + v29 = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8); + v30 = _evt->v10 + ((_evt->v11 + ((_evt->v12 + ((uint)_evt->v13 << 8)) << 8)) << 8); + v31 = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8); + v32 = _evt->v9; + v33 = &pNPCStats->pNewNPCData[v31]; + if ( v32 ) + { + v34 = v32 - 1; + if ( v34 ) + { + v35 = v34 - 1; + if ( v35 ) + { + v36 = v35 - 1; + if ( v36 ) + { + v37 = v36 - 1; + if ( v37 ) + { + if ( v37 == 1 ) + v33->evt_F = v30; + } + else + { + v33->evt_E = v30; + } + } + else + { + v33->evt_D = v30; + } + } + else + { + v33->evt_C = v30; + } + } + else + { + v33->evt_B = v30; + } + } + else + { + v33->evt_A = v30; + } + if ( v29 == 8 ) + { + if ( v30 == 78 ) + { + sub_4BD8B5(); + ptr_507BC0->Release(); + pParty->uFlags &= 0xFFFFFFFDu; + if ( EnterHouse((enum HOUSE_TYPE)170) ) + { + pAudioPlayer->StopChannels(-1, -1); + ptr_507BC0 = GUIWindow::Create(0, 0, 640, 480, WINDOW_HouseInterior, 170, 0); + ptr_507BC0->CreateButton(0x3Du, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 1u, 0x31u, "", 0); + ptr_507BC0->CreateButton(0xB1u, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 2u, 0x32u, "", 0); + ptr_507BC0->CreateButton(0x124u, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 3u, 0x33u, "", 0); + ptr_507BC0->CreateButton(0x197u, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 4u, 0x34u, "", 0); + ptr_507BC0->CreateButton(0, 0, 0, 0, 1, 0, 0xB0u, 0, 9u, "", 0); + ptr_F8B1E8 = pNPCTopics[90].pText; + } + } + } + ++curr_seq_num; + } + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + case EVENT_NPCSetItem: + sub_448518_npc_set_item(_evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8), + _evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8), _evt->v13); + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + case EVENT_SetActorItem: + Actor::GiveItem(_evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8), + _evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8), _evt->v13); + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + 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; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + 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; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + 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;//[0].uGroup; + do + { + if ( v41->uGroup == v38 ) + v41->uGroup = v39; + ++v41; + --v40; + } + while ( v40 ); + } + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //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;//[0].uAlly; + do + { + if ( v45->uGroup == v42 ) + v45->uAlly = v43; + ++v45; + --v44; + } + while ( v44 ); + } + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + case EVENT_MoveNPC: + { + + pNPCStats->pNewNPCData[_evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8)].Location2D = _evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8); + if ( ptr_507BC0 ) + { + v46 = ptr_507BC0->ptr_1C; + if ( v46 == (void *)165 ) + { + sub_4BD8B5(); + pVideoPlayer->Unload(); + ptr_507BC0->Release(); + pParty->uFlags &= 0xFFFFFFFDu; + _5C3420_pDecoration = (LevelDecoration *)1; + if ( EnterHouse((enum HOUSE_TYPE)165) ) + { + pAudioPlayer->PlaySound((SoundID)0, 0, 0, -1, 0, 0, 0, 0); + v47 = GUIWindow::Create(0, 0, 640, 480, WINDOW_HouseInterior, 165, 0); + ptr_507BC0 = v47; + v48 = v47->pControlsHead; + if ( v48 ) + { + do + { + v49 = v48->pNext; + pAllocator->FreeChunk(v48); + v48 = v49; + } + while ( v49 ); + v47 = ptr_507BC0; + } + v47->pControlsHead = 0; + ptr_507BC0->pControlsTail = 0; + ptr_507BC0->uNumControls = 0; + } + } + else + { + if ( v46 == (void *)553 ) + pVideoPlayer->bLoopPlaying = 0; + } + } + ++curr_seq_num; + } + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + case EVENT_Jmp: + //v124 = -1; + curr_seq_num = _evt->v5 - 1; + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + case EVENT_ShowFace: + v50 = _evt->v5; + if ( (unsigned __int8)v50 <= 3u ) + { + v117 = 0; + v113 = _evt->v6; + v53 = (unsigned __int8)v50; + v52 = &pParty->pPlayers[v53]; + v52->PlayEmotion((CHARACTER_EXPRESSION_ID)v113, v117); + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + } + if ( v50 == 4 ) + { + v117 = 0; + v113 = _evt->v6; + v52 = pPlayers[uActiveCharacter]; + v52->PlayEmotion((CHARACTER_EXPRESSION_ID)v113, v117); + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + } + if ( v50 != 5 ) + { + v117 = 0; + v113 = _evt->v6; + v53 = rand() % 4; + v52 = &pParty->pPlayers[v53]; + v52->PlayEmotion((CHARACTER_EXPRESSION_ID)v113, v117); + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + } + v51 = pParty->pPlayers; + do + { + v51->PlayEmotion((CHARACTER_EXPRESSION_ID)_evt->v6, 0); + ++v51; + } + while ( (signed int)v51 < (signed int)pParty->pHirelings ); + //LABEL_291: + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + case EVENT_CharacterAnimation: + v54 = _evt->v5; + if ( (unsigned __int8)v54 <= 3u ) + { + v118 = 0; + v114 = _evt->v6; + v57 = (unsigned __int8)v54; + goto LABEL_119; + } + if ( v54 == 4 ) + { + v118 = 0; + v114 = _evt->v6; + v56 = pPlayers[uActiveCharacter]; + goto LABEL_120; + } + if ( v54 != 5 ) + { + v118 = 0; + v114 = _evt->v6; + v57 = rand() % 4; +LABEL_119: + v56 = &pParty->pPlayers[v57]; +LABEL_120: + v56->PlaySound((PlayerSpeech)v114, v118); + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + } + v55 = pParty->pPlayers; + for (int iii = 0; iii < 4; ++iii) + { + v55->PlaySound((PlayerSpeech)_evt->v6, 0); + ++v55; + } + //while ( (signed int)v55 < (signed int)pParty->pHirelings ); + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + case EVENT_ForPartyMember: + v127 = _evt->v5; + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + case EVENT_SummonItem: + sub_42F7EB_DropItemAt(_evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8), + _evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8), + _evt->v13 + ((_evt->v14 + ((_evt->v15 + ((uint)_evt->v16 << 8)) << 8)) << 8), + _evt->v17 + ((_evt->v18 + ((_evt->v19 + ((uint)_evt->v20 << 8)) << 8)) << 8), + _evt->v21 + ((_evt->v22 + ((_evt->v23 + ((uint)_evt->v24 << 8)) << 8)) << 8), + _evt->v25, _evt->v26, 0, 0); + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + case EVENT_Compare: + v58 = _evt->v7 + ((_evt->v8 + ((_evt->v9 + ((uint)_evt->v10 << 8)) << 8)) << 8); + if ( v127 == 5 ) + { + v130 = 0; + v59 = pParty->pPlayers; + while ( 1 ) + { + LOBYTE(v60) = v59->CompareVariable((enum VariableType)(_evt->v5 + ((uint)_evt->v6 << 8)), v58); + if ( v60 ) + break; + ++v130; + ++v59; + if ( (signed int)v59 >= (signed int)pParty->pHirelings ) + { + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + } + } +LABEL_129: + v11 = _evt->v11; + goto LABEL_130; + } + if ( v127 < 0 ) + goto LABEL_139; + v61 = v127; + if ( v127 <= 3 ) + goto LABEL_137; + if ( v127 == 4 ) + { + if ( uActiveCharacter ) + { + v6 = pPlayers[uActiveCharacter]; + goto LABEL_138; + } + } + else + { + if ( v127 != 6 ) + goto LABEL_139; + } + v61 = rand() % 4; + //v5 = pSomeEVT; +LABEL_137: + v6 = &pParty->pPlayers[v61]; +LABEL_138: + //v123 = v6; +LABEL_139: + LOBYTE(v62) = ((Player *)v6)->CompareVariable( + (enum VariableType)(_evt->v5 + ((uint)_evt->v6 << 8)), + v58); +LABEL_140: + if ( v62 ) + goto LABEL_129; + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + case EVENT_IsActorAlive: + v62 = IsActorAlive( + _evt->v5, + _evt->v6 + ((_evt->v7 + ((_evt->v8 + ((uint)_evt->v9 << 8)) << 8)) << 8), + _evt->v10); + goto LABEL_140; + case EVENT_Substract: + v63 = (void *)(_evt->v7 + ((_evt->v8 + ((_evt->v9 + ((uint)_evt->v10 << 8)) << 8)) << 8)); + if ( _evt->v5 + ((uint)_evt->v6 << 8) == VAR_PlayerItemInHands ) + { + v64 = 0; + if ( (void *)pParty->pPickedItem.uItemID == v63 ) + { + pMouse->RemoveHoldingItem(); + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + } + v65 = 0; + v66 = pPlayers[uActiveCharacter]; + v67 = (int)v66->pInventoryIndices; + do + { + if ( *(void **)&v66->spellbook.pDarkSpellbook.bIsSpellAvailable[36 * *(int *)v67 + 5] == v63 ) + { + v66->RemoveItemAtInventoryIndex(v65); + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + } + ++v65; + v67 += 4; + } + while ( (signed int)v65 < 126 ); + v68 = 0; + v69 = (int)&v66->pEquipment; + do + { + if ( *(int *)v69 && *(void **)&v66->spellbook.pDarkSpellbook.bIsSpellAvailable[36 * *(int *)v69 + 5] == v63 ) + { + *(&v66->pEquipment.uOffHand + v68) = 0; + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + } + ++v68; + v69 += 4; + } + while ( v68 < 16 ); + v125 = (signed int)&pPlayers[1]; + while ( 1 ) + { + v70 = *(Player **)v125; + if ( !v64 ) + { + v71 = 0; + v72 = (int)v70->pInventoryIndices; + do + { + if ( *(void **)&v70->spellbook.pDarkSpellbook.bIsSpellAvailable[36 * *(int *)v72 + 5] == v63 ) + { + v70->RemoveItemAtInventoryIndex(v71); + goto LABEL_169; + } + ++v71; + v72 += 4; + } + while ( (signed int)v71 < 126 ); + v73 = 0; + v74 = (int)&v70->pEquipment; + while ( !*(int *)v74 + || *(void **)&v70->spellbook.pDarkSpellbook.bIsSpellAvailable[36 * *(int *)v74 + 5] != v63 ) + { + ++v73; + v74 += 4; + if ( v73 >= 16 ) + goto LABEL_170; + } + *(&v70->pEquipment.uOffHand + v73) = 0; +LABEL_169: + v64 = 1; + } +LABEL_170: + v125 += 4; + if ( v125 > (signed int)&pPlayers[4] ) + { + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + } + } + } + v75 = v127; + if ( v127 != 5 ) + { + if ( v127 < 0 ) + goto LABEL_183; + if ( v127 > 3 ) + { + if ( v127 != 4 ) + { + if ( v127 == 6 ) + goto LABEL_180; +LABEL_183: + ((Player *)v6)->SubtractVariable((enum VariableType)(_evt->v5 + ((uint)_evt->v6 << 8)), v63); + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + } + if ( uActiveCharacter ) + { + v6 = pPlayers[uActiveCharacter]; + goto LABEL_182; + } +LABEL_180: + v75 = rand() % 4; + //v5 = pSomeEVT; + } + v6 = &pParty->pPlayers[v75]; +LABEL_182: + //v123 = v6; + goto LABEL_183; + } + v76 = pParty->pPlayers; + v130 = 4; + do + { + v76->SubtractVariable( + (enum VariableType)(_evt->v5 + ((uint)_evt->v6 << 8)), + v63); + ++v76; + } + while ( (signed int)v76 < (signed int)pParty->pHirelings ); + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + case EVENT_Set: + v77 = _evt->v7 + ((_evt->v8 + ((_evt->v9 + ((uint)_evt->v10 << 8)) << 8)) << 8); + v78 = v127; + if ( v127 != 5 ) + { + if ( v127 < 0 ) + goto LABEL_197; + if ( v127 > 3 ) + { + if ( v127 != 4 ) + { + if ( v127 == 6 ) + goto LABEL_194; +LABEL_197: + ((Player *)v6)->SetVariable((enum VariableType)(_evt->v5 + ((uint)_evt->v6 << 8)), v77); + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + } + if ( uActiveCharacter ) + { + v6 = pPlayers[uActiveCharacter]; + goto LABEL_196; + } +LABEL_194: + v78 = rand() % 4; + //v5 = pSomeEVT; + } + v6 = &pParty->pPlayers[v78]; +LABEL_196: + //v123 = v6; + goto LABEL_197; + } + v79 = pParty->pPlayers; + v130 = 4; + do + { + v79->SetVariable( + (enum VariableType)(_evt->v5 + ((uint)_evt->v6 << 8)), + v77); + ++v79; + } + while ( (signed int)v79 < (signed int)pParty->pHirelings ); + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + case EVENT_Add: + v80 = _evt->v7 + ((_evt->v8 + ((_evt->v9 + ((uint)_evt->v10 << 8)) << 8)) << 8); + v81 = v127; + if ( v127 != 5 ) + { + if ( v127 < 0 ) + goto LABEL_211; + if ( v127 > 3 ) + { + if ( v127 != 4 ) + { + if ( v127 == 6 ) + goto LABEL_208; +LABEL_211: + ((Player *)v6)->AddVariable( + (enum VariableType)(_evt->v5 + ((uint)_evt->v6 << 8)), + v80); + goto LABEL_212; + } + if ( uActiveCharacter ) + { + v6 = pPlayers[uActiveCharacter]; + goto LABEL_210; + } +LABEL_208: + v81 = rand() % 4; + //v5 = pSomeEVT; + } + v6 = &pParty->pPlayers[v81]; +LABEL_210: + //v123 = v6; + goto LABEL_211; + } + v82 = pParty->pPlayers; + v130 = 4; + do + { + v82->AddVariable( + (enum VariableType)(_evt->v5 + ((uint)_evt->v6 << 8)), + v80); + ++v82; + } + while ( (signed int)v82 < (signed int)pParty->pHirelings ); +LABEL_212: + v83 = _evt->v5 + ((uint)_evt->v6 << 8); + if ( v83 == 21 || v83 == 22 || v83 == 23 || v83 == 24 ) + viewparams->bRedrawGameUI = 1; + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + case EVENT_InputString: + if ( !dword_597F18 ) + { + strcpy( + GameUI_StatusBar_TimedString, + &pLevelStr[pLevelStrOffsets[_evt->v5 + + ((_evt->v6 + + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8)]]); + v105 = curr_seq_num; + v121 = 26; +LABEL_295: + sub_4451A8_press_any_key(uEventID, v105, v121); +LABEL_301: + if ( v133 == 1 ) +LABEL_302: + OnMapLeave(); + return; + } + v84 = _evt->v13 + ((_evt->v14 + ((_evt->v15 + ((uint)_evt->v16 << 8)) << 8)) << 8); + if ( !_strcmpi( + GameUI_StatusBar_TimedString, + &pLevelStr[pLevelStrOffsets[_evt->v9 + + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8)]]) + || !_strcmpi(GameUI_StatusBar_TimedString, &pLevelStr[pLevelStrOffsets[v84]]) ) + { + v11 = _evt->v17; +LABEL_130: + //v124 = -1; +LABEL_131: + curr_seq_num = v11 - 1; + } + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + case EVENT_RandomGoTo: + //v124 = -1; + v11 = (unsigned __int8)*(&_evt->v5 + rand() % ((_evt->v5 != 0) + (_evt->v6 != 0) + (_evt->v7 != 0) + (_evt->v8 != 0) + (_evt->v9 != 0) + + (_evt->v10 != 0))); + goto LABEL_131; + case EVENT_ReceiveDamage: + v85 = _evt->v7 + ((_evt->v8 + ((_evt->v9 + ((uint)_evt->v10 << 8)) << 8)) << 8); + v86 = _evt->v5; + if ( (unsigned __int8)v86 <= 3u ) + { + v119 = _evt->v6; + v115 = _evt->v7 + ((_evt->v8 + ((_evt->v9 + ((uint)_evt->v10 << 8)) << 8)) << 8); + v89 = (unsigned __int8)v86; + goto LABEL_233; + } + if ( v86 == 4 ) + { + if ( !uActiveCharacter ) + { + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + } + v119 = _evt->v6; + v88 = pPlayers[uActiveCharacter]; + v115 = _evt->v7 + ((_evt->v8 + ((_evt->v9 + ((uint)_evt->v10 << 8)) << 8)) << 8); + goto LABEL_234; + } + if ( v86 != 5 ) + { + v119 = _evt->v6; + v115 = _evt->v7 + ((_evt->v8 + ((_evt->v9 + ((uint)_evt->v10<< 8)) << 8)) << 8); + v89 = rand() % 4; +LABEL_233: + v88 = &pParty->pPlayers[v89]; +LABEL_234: + v88->ReceiveDamage(v115, v119); + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + } + v87 = pParty->pPlayers; + do + { + v87->ReceiveDamage(v85, _evt->v6); + ++v87; + } + while ( (signed int)v87 < (signed int)pParty->pHirelings ); + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + case EVENT_ToggleIndoorLight: + pIndoor->ToggleLight(_evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8), _evt->v9); + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + case EVENT_SetFacesBit: + sub_44892E_set_faces_bit(_evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8), + _evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8), _evt->v13); + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + case EVENT_ToggleChestFlag: + Chest::ToggleFlag(_evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8), + _evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8), _evt->v13); + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + case EVENT_ToggleActorFlag: + Actor::ToggleFlag(_evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8), + _evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8), _evt->v13); + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + case EVENT_ToggleActorGroupFlag: + ToggleActorGroupFlag( + _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8), + _evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8), + _evt->v13); + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + case EVENT_SetSnow: + if ( !_evt->v5 ) + pWeather->bRenderSnow = _evt->v6 != 0; + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + case EVENT_StatusText: + v90 = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8); + if ( _5C3420_pDecoration ) + { + if ( _5C3420_pDecoration == (LevelDecoration *)1 ) + { + ptr_F8B1E8 = pNPCTopics[v90-1].pText;//(&dword_721664)[8 * v90]; + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + } + if ( a3 == 1 ) + { + v91 = pNPCTopics[v90-1].pText;//(&dword_721664)[8 * v90]; + //LABEL_248: + ShowStatusBarString(v91, 2u); + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + } + } + else + { + if ( a3 == 1 ) + { + v91 = &pLevelStr[pLevelStrOffsets[v90]]; + ShowStatusBarString(v91, 2u); + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + } + } + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + case EVENT_ShowMessage: + v92 = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8); + if ( _5C3420_pDecoration ) + { + v93 = (char *)pNPCTopics[v92-1].pText;//(&dword_721664)[8 * v92]; + byte_5B0938[0] = 0; + ptr_F8B1E8 = v93; + } + else + { + strcpy(byte_5B0938, &pLevelStr[pLevelStrOffsets[v92]]); + } + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + case EVENT_CastSpell: + sub_448DF8_cast_spell(_evt->v5, _evt->v6, _evt->v7, _evt->v8 + ((_evt->v9 + ((_evt->v10 + ((uint)_evt->v11 << 8)) << 8)) << 8), + _evt->v12 + ((_evt->v13 + ((_evt->v14 + ((uint)_evt->v15 << 8)) << 8)) << 8), + _evt->v16 + ((_evt->v17 + ((_evt->v18 + ((uint)_evt->v19 << 8)) << 8)) << 8), + _evt->v20 + ((_evt->v21 + ((_evt->v22 + ((uint)_evt->v23 << 8)) << 8)) << 8), + _evt->v24 + ((_evt->v25 + ((_evt->v26 + ((uint)_evt->v27 << 8)) << 8)) << 8), + _evt->v28 + ((_evt->v29 + ((_evt->v30 + ((uint)_evt->v31 << 8)) << 8)) << 8)); + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + case EVENT_SetTexture: + sub_44861E_set_texture(_evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8), (char *)&_evt->v9); + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + case EVENT_SetSprite: + SetDecorationSprite(_evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8), _evt->v9, (char *)&_evt->v10); + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + case EVENT_SummonMonsters: + sub_448CF4_spawn_monsters(_evt->v5, _evt->v6, _evt->v7, + _evt->v8 + ((_evt->v9 + ((_evt->v10 + ((uint)_evt->v11 << 8)) << 8)) << 8), + _evt->v12 + ((_evt->v13 + ((_evt->v14 + ((uint)_evt->v15 << 8)) << 8)) << 8), + _evt->v16 + ((_evt->v17 + ((_evt->v18 + ((uint)_evt->v19 << 8)) << 8)) << 8), + _evt->v20 + ((_evt->v21 + ((_evt->v22 + ((uint)_evt->v23 << 8)) << 8)) << 8), + _evt->v24 + ((_evt->v25 + ((_evt->v26 + ((uint)_evt->v27 << 8)) << 8)) << 8)); + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + case EVENT_MouseOver: + case EVENT_LocationName: + --curr_seq_num; + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + case EVENT_ChangeDoorState: + sub_449A49_door_switch_animation(_evt->v5, _evt->v6); + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + case EVENT_OpenChest: + if ( !Chest::Open(_evt->v5) ) + goto LABEL_301; + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + case EVENT_MoveToMap: + v94 = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8); + v135 = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8); + v132 = _evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8); + v126 = _evt->v13 + ((_evt->v14 + ((_evt->v15 + ((uint)_evt->v16 << 8)) << 8)) << 8); + v129 = _evt->v17 + ((_evt->v18 + ((_evt->v19 + ((uint)_evt->v20 << 8)) << 8)) << 8); + v95 = _evt->v21 + ((_evt->v22 + ((_evt->v23 + ((uint)_evt->v24 << 8)) << 8)) << 8); + v96 = _evt->v25; + v97 = v96 + ((_evt->v26 + ((_evt->v27 + ((uint)_evt->v28 << 8)) << 8)) << 8); + v134 = v96 + ((_evt->v26 + ((_evt->v27 + ((uint)_evt->v28 << 8)) << 8)) << 8); + if ( _evt->v29 || _evt->v30 ) + { + if ( pRenderer->pRenderD3D && !pRenderer->bWindowMode ) + pRenderer->_49FD3A(); + sub_444839_move_map(_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; + } + _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; + v100 = v94 | v132 | v126 | v95 | v97 | v98; + dword_5B65C0 = v100; + if ( *v99 == 48 ) + { + if ( v100 ) + { + pParty->vPosition.x = v135; + pParty->vPosition.y = v132; + pParty->vPosition.z = v126; + pParty->uFallStartY = v126; + 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; + dword_5B65BC = 0; + _5B65B8_npcdata_hiword_house_or_other = 0; + _5B65B0_npcdata_rep_or_other = 0; + _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); + } + } + else + { + pGameLoadingUI_ProgressBar->uType = (GUIProgressBar::Type)((_5C3420_pDecoration == 0) + 1); + sub_44987B(v99, 0); + v133 = 1; + if ( pCurrentScreen == SCREEN_HOUSE ) + { + if ( uGameState == 2 ) + { + pAudioPlayer->StopChannels(-1, -1); + dword_F8B19C = 0; + while ( sub_4BD8B5() ) + ; + pVideoPlayer->Unload(); + ptr_507BC0->Release(); + ptr_507BC0 = 0; + if ( pMessageQueue_50CBD0->uNumMessages ) + pMessageQueue_50CBD0->uNumMessages = pMessageQueue_50CBD0->pMessages[0].field_8 != 0; + pCurrentScreen = SCREEN_GAME; + viewparams->bRedrawGameUI = 1; + array_5913D8[6] = 0; + pDialogueWindow->Release(); + dword_F8B19C = 0; + pDialogueWindow = 0; + pIcons_LOD->_40F9C5(); + } + goto LABEL_302; + } + } + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //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; + case EVENT_GiveItem: + item.Reset(); + //v101 = &pSomeEVT[v9]; + 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; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + case EVENT_SpeakInHouse: + v103 = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8); + if ( EnterHouse((enum HOUSE_TYPE)(_evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8))) ) + { + if ( pRenderer->pRenderD3D && !pRenderer->bWindowMode ) + pRenderer->_49FD3A(); + pAudioPlayer->PlaySound((SoundID)0, 0, 0, -1, 0, 0, 0, 0); + pAudioPlayer->PlaySound(SOUND_EnteringAHouse, 814, 0, -1, 0, 0, 0, 0); + v104 = 187; + if ( uCurrentHouse_Animation != 167 ) + v104 = v103; + ptr_507BC0 = GUIWindow::Create(0, 0, 640, 480, WINDOW_HouseInterior, v104, 0); + ptr_507BC0->CreateButton(0x3Du, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 1u, 0x31u, "", 0); + ptr_507BC0->CreateButton(0xB1u, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 2u, 0x32u, "", 0); + ptr_507BC0->CreateButton(0x124u, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 3u, 0x33u, "", 0); + ptr_507BC0->CreateButton(0x197u, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 4u, 0x34u, "", 0); + ptr_507BC0->CreateButton(0, 0, 0, 0, 1, 0, 0xB0u, 0, 9u, "", 0); + } + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + case EVENT_PressAnyKey: + v121 = 33; + v105 = curr_seq_num + 1; + goto LABEL_295; + case EVENT_Exit: + goto LABEL_301; + default: + ++curr_seq_num; + //v4 = v124; + //v5 = pSomeEVT; + //v6 = v123; + //v7 = ""; + break; + } + } + //++v4; + //v124 = v4; + //if ( v4 >= (signed int)uSomeEVT_NumEvents ) + //goto LABEL_301; + //} + } + } + diff -r e8fcde8ba3fc -r 405d0c4dd1b3 Events.h --- a/Events.h Wed Feb 20 20:50:22 2013 +0600 +++ b/Events.h Wed Feb 20 20:51:55 2013 +0600 @@ -5,23 +5,29 @@ /* 167 */ #pragma pack(push, 1) -struct Event +struct EventIndex { int uEventID; - int field_4; + int event_sequence_num; unsigned int uEventOffsetInEVT; }; #pragma pack(pop) - +// raw event struct +// header +// size_event 1 header+data +// event id 2 3 +// event_sequence_num +// event data #pragma pack(push, 1) struct _evt_raw { - unsigned char v0; + unsigned char _e_size; unsigned char v1; unsigned char v2; unsigned char v3; - unsigned char v4; + + unsigned char _e_type; unsigned char v5; unsigned char v6; unsigned char v7; @@ -289,17 +295,17 @@ -extern Event pSomeOtherEVT_Events[4400]; +extern EventIndex pSomeOtherEVT_Events[4400]; extern unsigned int uSomeOtherEVT_NumEvents; extern char *pSomeOtherEVT; -extern Event pSomeEVT_Events[4400]; +extern EventIndex pSomeEVT_Events[4400]; extern unsigned int uSomeEVT_NumEvents; extern char *pSomeEVT; extern unsigned int uGlobalEVT_NumEvents; extern unsigned int uGlobalEVT_Size; extern char pGlobalEVT[46080]; -extern Event pGlobalEVT_Events[4400]; +extern EventIndex pGlobalEVT_Index[4400]; extern unsigned int pLevelStrOffsets[500]; extern unsigned int uLevelStrNumStrings; @@ -308,11 +314,13 @@ extern unsigned int uLevelEVT_Size; extern char pLevelStr[9216]; extern char pLevelEVT[9216]; -extern Event pLevelEVT_Events[4400]; +extern EventIndex pLevelEVT_Index[4400]; - - +unsigned int LoadEventsToBuffer(const char *pContainerName, char *pBuffer, unsigned int uBufferSize); +void Initialize_GlobalEVT(); +void LoadLevel_InitializeLevelEvt(); +void EventProcessor(int uEventID, int a2, int a3); diff -r e8fcde8ba3fc -r 405d0c4dd1b3 GUIWindow.cpp --- a/GUIWindow.cpp Wed Feb 20 20:50:22 2013 +0600 +++ b/GUIWindow.cpp Wed Feb 20 20:51:55 2013 +0600 @@ -215,7 +215,7 @@ v15 = pPlayerFrameTable->GetFrameBy_x(uFramesetID, v14); } pPlayer->field_1AA2 = v15->uTextureID - 1; - v13 = pTextures_PlayerFaces[(unsigned int)ptr_1C][v15->uTextureID]; + v13 = pTextures_PlayerFaces[(unsigned int)ptr_1C][v15->uTextureID-1]; } pRenderer->DrawTextureTransparent(uFrameX + 24, uFrameY + 24, v13); diff -r e8fcde8ba3fc -r 405d0c4dd1b3 Game.cpp --- a/Game.cpp Wed Feb 20 20:50:22 2013 +0600 +++ b/Game.cpp Wed Feb 20 20:51:55 2013 +0600 @@ -231,7 +231,7 @@ LoadPlayerPortraintsAndVoices(); pIcons_LOD->dword_11B84 = pIcons_LOD->uNumLoadedFiles; - pAudioPlayer->SetMusicVolume(pSoundVolumeLevels[uMusicVolimeMultiplier] * 64.0); + pAudioPlayer->SetMusicVolume(pSoundVolumeLevels[uMusicVolimeMultiplier] * 64.0f); while ( 2 ) { @@ -624,7 +624,7 @@ } //depth = v2; - PickMouse(depth, y, x, true, v10, v11); + PickMouse(depth, y, x, false, v10, v11); pLightmapBuilder->std__vector_000004_size = 0; pLightmapBuilder->std__vector_183808_size = 0; pDecalBuilder->std__vector_pDecals_size = 0; @@ -1114,6 +1114,7 @@ } else assert(false); } + break; default: { diff -r e8fcde8ba3fc -r 405d0c4dd1b3 Indoor.cpp --- a/Indoor.cpp Wed Feb 20 20:50:22 2013 +0600 +++ b/Indoor.cpp Wed Feb 20 20:51:55 2013 +0600 @@ -192,10 +192,10 @@ } if ( pRenderer->pRenderD3D ) { - v3->sCosineY = stru_5C6E00->SinCos(v3->sPartyRotY); - v3->sSineY = stru_5C6E00->SinCos(v3->sPartyRotY - stru_5C6E00->uIntegerHalfPi); - v3->sCosineNegX = stru_5C6E00->SinCos(-v3->sPartyRotX); - v3->sSineNegX = stru_5C6E00->SinCos(-v3->sPartyRotX - stru_5C6E00->uIntegerHalfPi); + v3->sCosineY = stru_5C6E00->Cos(v3->sPartyRotY); + v3->sSineY = stru_5C6E00->Sin(v3->sPartyRotY); + v3->sCosineNegX = stru_5C6E00->Cos(-v3->sPartyRotX); + v3->sSineNegX = stru_5C6E00->Sin(-v3->sPartyRotX); v3->fCosineY = cos((3.141592653589793 + 3.141592653589793) * (double)v3->sPartyRotY * 0.00048828125); v3->fSineY = sin((3.141592653589793 + 3.141592653589793) * (double)v3->sPartyRotY * 0.00048828125); v3->fCosineNegX = cos((3.141592653589793 + 3.141592653589793) * (double)-v3->sPartyRotX * 0.00048828125); @@ -214,10 +214,10 @@ } else { - v3->sCosineY = stru_5C6E00->SinCos(-v3->sPartyRotY); - v3->sSineY = stru_5C6E00->SinCos(-v3->sPartyRotY - stru_5C6E00->uIntegerHalfPi); - v3->sCosineNegX = stru_5C6E00->SinCos(-v3->sPartyRotX); - v3->sSineNegX = stru_5C6E00->SinCos(-v3->sPartyRotX - stru_5C6E00->uIntegerHalfPi); + v3->sCosineY = stru_5C6E00->Cos(-v3->sPartyRotY); + v3->sSineY = stru_5C6E00->Sin(-v3->sPartyRotY); + v3->sCosineNegX = stru_5C6E00->Cos(-v3->sPartyRotX); + v3->sSineNegX = stru_5C6E00->Sin(-v3->sPartyRotX); v17 = cos((double)-v3->sPartyRotY * 0.0030664064); v18 = v3->sPartyRotY; v3->fCosineY = v17; @@ -372,10 +372,8 @@ _this.uFlags |= INDOOR_CAMERA_DRAW_D3D_OUTLINES; _this.field_0_timer = pEventTimer->uTotalGameTimeElapsed; - _this.vPosition.x = pParty->vPosition.x - - ((unsigned __int64)(stru_5C6E00->SinCos(pParty->sRotationY) - * (signed __int64)pParty->y_rotation_granularity) >> 16); - v2 = stru_5C6E00->SinCos(pParty->sRotationY - stru_5C6E00->uIntegerHalfPi); + _this.vPosition.x = pParty->vPosition.x - ((unsigned __int64)(stru_5C6E00->Cos(pParty->sRotationY) * (signed __int64)pParty->y_rotation_granularity) >> 16); + v2 = stru_5C6E00->Sin(pParty->sRotationY); v3 = (unsigned __int64)(v2 * (signed __int64)pParty->y_rotation_granularity) >> 16; _this.field_1C_mb_fov = 65; _this.vPosition.y = pParty->vPosition.y - v3; @@ -1305,7 +1303,7 @@ auto pFace = &pIndoor->pFaces[uFaceID]; - if (pFace->uAttributes & 1) + if (pFace->TwoSided()) { auto p = &field_FA8[a2]; //v6 = (int)((char *)this + 2252 * a2); @@ -1502,7 +1500,7 @@ v3 = this; v4 = &pIndoor->pFaces[uFaceID]; v21 = v4; - if ( v4->uAttributes & 1 ) + if (v4->TwoSided()) { v5 = (char *)this + 2252 * a2; v20 = v5; @@ -3463,14 +3461,14 @@ int BLVFaceExtra::HasEventint() { signed int v1; // eax@1 - Event *v2; // esi@2 + EventIndex *v2; // esi@2 signed int result; // eax@5 signed int v4; // eax@6 v1 = 0; if ( (signed int)(uLevelEVT_NumEvents - 1) <= 0 ) goto LABEL_5; - v2 = pLevelEVT_Events; + v2 = pLevelEVT_Index; while ( v2->uEventID != this->uEventID ) { ++v1; @@ -3479,8 +3477,8 @@ goto LABEL_5; } v4 = v1; - if ( pLevelEVT[pLevelEVT_Events[v4 + 1].uEventOffsetInEVT + 4] != 1 - || pLevelEVT[pLevelEVT_Events[v4].uEventOffsetInEVT + 4] != 4 ) + if ( pLevelEVT[pLevelEVT_Index[v4 + 1].uEventOffsetInEVT + 4] != 1 + || pLevelEVT[pLevelEVT_Index[v4].uEventOffsetInEVT + 4] != 4 ) LABEL_5: result = 0; else @@ -4004,7 +4002,7 @@ || (v56 = _46CEC3_get_floor_level(v0->vPosition.x, v0->vPosition.y, v0->vPosition.z, v5, &uFaceID), v56 == -30000) ) goto LABEL_123; } - if ( v0->uCurrentActionAnimation == 1 ) + if ( v0->uCurrentActionAnimation == ANIM_Walking) { v6 = v0->uMovementSpeed; v7 = HIDWORD(v0->pActorBuffs[7].uExpireTime) == 0; @@ -4030,18 +4028,18 @@ v6 = (signed __int64)((double)v61 * flt_6BE3AC_debug_recmod1_x_1_6); if ( v6 > 1000 ) v6 = 1000; - v12 = stru_5C6E00->SinCos(v0->uYawAngle); + v12 = stru_5C6E00->Cos(v0->uYawAngle); uSectorID = v12; v13 = v12 * (signed __int64)v6; v61 = v13 >> 16; v0->vVelocity.x = WORD1(v13); - uSectorID = stru_5C6E00->SinCos(v0->uYawAngle - stru_5C6E00->uIntegerHalfPi); + uSectorID = stru_5C6E00->Sin(v0->uYawAngle); v61 = (unsigned __int64)(uSectorID * (signed __int64)v6) >> 16; v7 = v62 == 0; v0->vVelocity.y = (unsigned int)(uSectorID * v6) >> 16; if ( !v7 ) { - v14 = stru_5C6E00->SinCos(v0->uPitchAngle - stru_5C6E00->uIntegerHalfPi); + v14 = stru_5C6E00->Sin(v0->uPitchAngle); uSectorID = v14; v15 = v14 * (signed __int64)v6; v61 = v15 >> 16; @@ -4157,7 +4155,7 @@ v27 = abs(pActors[v54].vPosition.z - v0->vPosition.z); v28 = abs(pActors[v26].vPosition.y - v0->vPosition.y); v29 = abs(pActors[v26].vPosition.x - v0->vPosition.x); - if ( sub_4621DA(v29, v28, v27) >= v0->uActorRadius + (signed int)pActors[v26].uActorRadius + if ( int_get_vector_length(v29, v28, v27) >= v0->uActorRadius + (signed int)pActors[v26].uActorRadius && _46DF1A_collide_against_actor(v54, 40) ) ++v58; v22 = 0; @@ -4229,11 +4227,11 @@ v45 = stru_5C6E00->Atan2( v0->vPosition.x - pLevelDecorations[v37].vPosition.x, v0->vPosition.y - pLevelDecorations[v37].vPosition.y); - v54 = stru_5C6E00->SinCos(v45); + v54 = stru_5C6E00->Cos(v45); v56 = (unsigned __int64)(v54 * (signed __int64)(signed int)_this) >> 16; v46 = v45 - stru_5C6E00->uIntegerHalfPi; v0->vVelocity.x = v54 * _this >> 16; - v47 = stru_5C6E00->SinCos(v46); + v47 = stru_5C6E00->Sin(v45); v54 = v47; v48 = v47 * (signed __int64)(signed int)_this; v56 = v48 >> 16; diff -r e8fcde8ba3fc -r 405d0c4dd1b3 IndoorCamera.cpp --- a/IndoorCamera.cpp Wed Feb 20 20:50:22 2013 +0600 +++ b/IndoorCamera.cpp Wed Feb 20 20:51:55 2013 +0600 @@ -102,11 +102,11 @@ fRotationXCosine = cos(v2 * 0.00048828125); //v5 = stru_5C6E00->SinCos(sRotationY - stru_5C6E00->uIntegerHalfPi); //v6 = sRotationY; - _int_sine = stru_5C6E00->SinCos(sRotationY - stru_5C6E00->uIntegerHalfPi); - _int_cosine = stru_5C6E00->SinCos(sRotationY); + _int_sine = stru_5C6E00->Sin(sRotationY); + _int_cosine = stru_5C6E00->Cos(sRotationY); //v7 = stru_5C6E00->SinCos(sRotationX - stru_5C6E00->uIntegerHalfPi); //v8 = sRotationX; - _int_sine_2 = stru_5C6E00->SinCos(sRotationX - stru_5C6E00->uIntegerHalfPi); - _int_cosine_2 = stru_5C6E00->SinCos(sRotationX); + _int_sine_2 = stru_5C6E00->Sin(sRotationX); + _int_cosine_2 = stru_5C6E00->Cos(sRotationX); } // 4D864C: using guessed type char byte_4D864C; \ No newline at end of file diff -r e8fcde8ba3fc -r 405d0c4dd1b3 Items.cpp --- a/Items.cpp Wed Feb 20 20:50:22 2013 +0600 +++ b/Items.cpp Wed Feb 20 20:51:55 2013 +0600 @@ -19,7 +19,7 @@ ItemGen *ptr_50C9A4; -struct ItemsTable *pItemsTable; +struct ItemsTable *pItemsTable; // 005D29E0 diff -r e8fcde8ba3fc -r 405d0c4dd1b3 Items.h --- a/Items.h Wed Feb 20 20:50:22 2013 +0600 +++ b/Items.h Wed Feb 20 20:51:55 2013 +0600 @@ -56,6 +56,7 @@ ITEM_SPELLBOOK_LIGHT_SUN_BURST = 0x1E6, ITEM_SPELLBOOK_LIGHT_DIVINE_INTERVENTION = 0x1E7, ITEM_ARTIFACT_PUCK = 0x1F4, + ITEM_ARTIFACT_SPLITTER = 506,//1FA ITEM_RELIC_MEKORIGS_HAMMER = 0x210, }; @@ -80,7 +81,7 @@ EQUIP_F = 0xF, EQUIP_BOOK = 0x10, EQUIP_11 = 0x11, - EQUIP_GOLD = 0x12, + EQUIP_GOLD = 18, EQUIP_GEM = 0x13, }; @@ -96,7 +97,10 @@ Reset(); } - inline bool Broken() {return uAttributes & ITEM_BROKEN;} + inline bool Broken() {return uAttributes & ITEM_BROKEN;} + inline bool Identified() {return uAttributes & ITEM_IDENTIFIED;} + inline void SetIdentified() {uAttributes |= ITEM_IDENTIFIED;} + inline bool Stolen() {return uAttributes & ITEM_STOLEN;} bool GenerateArtifact(); unsigned int GetValue(); @@ -151,7 +155,7 @@ char field_26; //26 2A char field_27; // 27 2b union - { + { unsigned __int8 uChanceByTreasureLvl[6]; struct { unsigned __int8 uChanceByTreasureLvl1; // 28 2c @@ -161,10 +165,10 @@ unsigned __int8 uChanceByTreasureLvl5; // 2C 30 unsigned __int8 uChanceByTreasureLvl6; // 2D 32 }; - }; - unsigned char uItemID_Rep_St; //2e 32 - char field_2f; - }; + }; + unsigned char uItemID_Rep_St; //2e 32 + char field_2f; +}; #pragma pack(pop) @@ -250,6 +254,9 @@ unsigned int pSpecialEnchantmentsSumm[24]; //11738h unsigned int pSpecialEnchantments_count; //11798h char field_1179C; + char field_1179D; + char field_1179E; + char field_1179F; }; #pragma pack(pop) diff -r e8fcde8ba3fc -r 405d0c4dd1b3 Keyboard.cpp --- a/Keyboard.cpp Wed Feb 20 20:50:22 2013 +0600 +++ b/Keyboard.cpp Wed Feb 20 20:51:55 2013 +0600 @@ -37,6 +37,7 @@ { uLastKeyPressed = 0; field_204 = 0; + pWindow = nullptr; SetDefaultMapping(); ReadMappings(); diff -r e8fcde8ba3fc -r 405d0c4dd1b3 Math.h --- a/Math.h Wed Feb 20 20:50:22 2013 +0600 +++ b/Math.h Wed Feb 20 20:51:55 2013 +0600 @@ -7,9 +7,9 @@ struct stru193_math { stru193_math(); - int SinCos(int angle); + int Cos(int angle); unsigned int Atan2(int x, int y); - int _42EBDB(int angle); + int Sin(int angle); int pTanTable[520]; int pCosTable[520]; diff -r e8fcde8ba3fc -r 405d0c4dd1b3 Monsters.h --- a/Monsters.h Wed Feb 20 20:50:22 2013 +0600 +++ b/Monsters.h Wed Feb 20 20:51:55 2013 +0600 @@ -6,8 +6,10 @@ enum MONSTER_TYPE { MONSTER_DEVIL_1 = 0x16, + MONSTER_DEVIL_2 = 0x17, MONSTER_DEVIL_3 = 0x18, MONSTER_DRAGON_1 = 0x19, + MONSTER_DRAGON_2 = 0x1A, MONSTER_DRAGON_3 = 0x1B, MONSTER_ELEMENTAL_WATER_1 = 0x2E, MONSTER_ELEMENTAL_WATER_3 = 0x30, @@ -18,10 +20,12 @@ MONSTER_GHOST_1 = 0x46, MONSTER_GHOST_3 = 0x48, MONSTER_HARPY_1 = 0x55, + MONSTER_HARPY_2 = 0x56, MONSTER_HARPY_3 = 0x57, MONSTER_LICH_1 = 0x5B, MONSTER_LICH_3 = 0x5D, MONSTER_OOZE_1 = 0x70, + MONSTER_OOZE_2 = 0x71, MONSTER_OOZE_3 = 0x72, MONSTER_PEASANT_ELF_FEMALE_1_1 = 0x85, MONSTER_PEASANT_ELF_MALE_3_3 = 0x96, @@ -36,6 +40,8 @@ MONSTER_ZOMBIE_1 = 0xE5, MONSTER_ZOMBIE_3 = 0xE7, MONSTER_PEASANT_GOBLIN_MALE_3_3 = 0xF9, + MONSTER_TROLL_1 = 0xFA, + MONSTER_TROLL_2 = 0xFB, MONSTER_TROLL_3 = 0xFC, MONSTER_TREANT_1 = 0xFD, MONSTER_TREANT_3 = 0xFF, diff -r e8fcde8ba3fc -r 405d0c4dd1b3 Mouse.cpp --- a/Mouse.cpp Wed Feb 20 20:50:22 2013 +0600 +++ b/Mouse.cpp Wed Feb 20 20:51:55 2013 +0600 @@ -518,17 +518,12 @@ while ( v8 < v1->field_4C ); v6 = v15; } - if ( pParty->pPickedItem.uAttributes & 2 ) - { - pRenderer->_4A6776(a2, v6, v3); - } + if (pParty->pPickedItem.Broken()) + pRenderer->DrawTransparentRedShade(a2, v6, v3); + else if (!pParty->pPickedItem.Identified()) + pRenderer->DrawTransparentGreenShade(a2, v6, v3); else - { - if ( pParty->pPickedItem.uAttributes & 1 ) - pRenderer->DrawTextureTransparent(a2, v6, v3); - else - pRenderer->DrawTransparentGreenShade(a2, v6, v3); - } + pRenderer->DrawTextureTransparent(a2, v6, v3); } } else diff -r e8fcde8ba3fc -r 405d0c4dd1b3 NPC.cpp --- a/NPC.cpp Wed Feb 20 20:50:22 2013 +0600 +++ b/NPC.cpp Wed Feb 20 20:51:55 2013 +0600 @@ -18,7 +18,7 @@ void InitializeTransitions(); void InitializeAutonotes(); void InitializeQuests(); -bool CheckPortretAgainsSex(int portret_num, int sex); +bool CheckPortretAgainstSex(int portret_num, int sex); //----- (00476977) -------------------------------------------------------- void NPCStats::InitializeNPCText() @@ -518,7 +518,7 @@ } //----- (0047730C) -------------------------------------------------------- -bool CheckPortretAgainsSex(int a1, int) +bool CheckPortretAgainstSex(int a1, int) { return true; } @@ -553,7 +553,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0}; - unsigned __int8 seed = (unsigned __int8)((double)(npc_uid - 1) * 0.33333334); + unsigned __int8 seed = (unsigned __int8)((double)(npc_uid - 1)/3.0); uNPCSex = NPCSexGenTable[seed]; uRace = NPCRaceGenTable[seed]; pNPCDataBuff->uSex = uNPCSex; @@ -617,7 +617,7 @@ } uGeneratedPortret = uPortretMin + rand() % (uPortretMax - uPortretMin + 1); - if ( CheckPortretAgainsSex(uGeneratedPortret, uNPCSex)) + if ( CheckPortretAgainstSex(uGeneratedPortret, uNPCSex)) break_gen = true; ++gen_attempts; if ( gen_attempts >= 4 ) diff -r e8fcde8ba3fc -r 405d0c4dd1b3 Outdoor.cpp --- a/Outdoor.cpp Wed Feb 20 20:50:22 2013 +0600 +++ b/Outdoor.cpp Wed Feb 20 20:51:55 2013 +0600 @@ -57,10 +57,8 @@ pIndoorCamera->sRotationX = pParty->sRotationX; pIndoorCamera->sRotationY = pParty->sRotationY; - pIndoorCamera->pos.x = pParty->vPosition.x - - ((unsigned __int64)(stru_5C6E00->SinCos(pParty->sRotationY) - * (signed __int64)pParty->y_rotation_granularity) >> 16); - pIndoorCamera->pos.y = pParty->vPosition.y - pParty->y_rotation_granularity * ((stru_5C6E00->SinCos(pParty->sRotationY)) >> 16); + pIndoorCamera->pos.x = pParty->vPosition.x - ((stru_5C6E00->Cos(pParty->sRotationY) * (signed __int64)pParty->y_rotation_granularity) >> 16); + pIndoorCamera->pos.y = pParty->vPosition.y - pParty->y_rotation_granularity * (stru_5C6E00->Sin(pParty->sRotationY) >> 16); pIndoorCamera->pos.z = pParty->vPosition.z + pParty->sEyelevel; if (bRedraw || pRenderer->pRenderD3D) { @@ -470,10 +468,10 @@ { v3 = pParty->uCurrentMinute + 60 * (pParty->uCurrentHour - 5); v4 = (signed int)(v3 * stru_5C6E00->uIntegerPi) / 960; - v5 = stru_5C6E00->SinCos((signed int)(v3 * stru_5C6E00->uIntegerPi) / 960); + v5 = stru_5C6E00->Cos((signed int)(v3 * stru_5C6E00->uIntegerPi) / 960); v2->field_D1C = 0; v2->field_D18 = v5; - v6 = stru_5C6E00->SinCos(v4 - stru_5C6E00->uIntegerHalfPi); + v6 = stru_5C6E00->Sin(v4); v7 = v2->field_D18; v2->field_D20 = v6; v2->vSunlight.x = -v7; @@ -3146,14 +3144,14 @@ bool ODMFace::HasEventHint() { signed int v1; // eax@1 - Event *v2; // esi@2 + EventIndex *v2; // esi@2 bool result; // eax@5 signed int v4; // eax@6 v1 = 0; if ( (signed int)(uLevelEVT_NumEvents - 1) <= 0 ) goto LABEL_5; - v2 = pLevelEVT_Events; + v2 = pLevelEVT_Index; while ( v2->uEventID != this->sCogTriggeredID ) { ++v1; @@ -3162,8 +3160,8 @@ goto LABEL_5; } v4 = v1; - if ( pLevelEVT[pLevelEVT_Events[v4 + 1].uEventOffsetInEVT + 4] != 1 - || pLevelEVT[pLevelEVT_Events[v4].uEventOffsetInEVT + 4] != 4 ) + if ( pLevelEVT[pLevelEVT_Index[v4 + 1].uEventOffsetInEVT + 4] != 1 + || pLevelEVT[pLevelEVT_Index[v4].uEventOffsetInEVT + 4] != 4 ) LABEL_5: result = 0; else diff -r e8fcde8ba3fc -r 405d0c4dd1b3 ParticleEngine.cpp --- a/ParticleEngine.cpp Wed Feb 20 20:50:22 2013 +0600 +++ b/ParticleEngine.cpp Wed Feb 20 20:51:55 2013 +0600 @@ -468,10 +468,10 @@ int uIDb; // [sp+58h] [bp+8h]@9 v2 = this; - v3 = stru_5C6E00->SinCos(pIndoorCamera->sRotationX); - v44 = stru_5C6E00->SinCos(pIndoorCamera->sRotationX - stru_5C6E00->uIntegerHalfPi); - v4 = stru_5C6E00->SinCos(pIndoorCamera->sRotationY); - v5 = stru_5C6E00->SinCos(pIndoorCamera->sRotationY - stru_5C6E00->uIntegerHalfPi); + v3 = stru_5C6E00->Cos(pIndoorCamera->sRotationX); + v44 = stru_5C6E00->Sin(pIndoorCamera->sRotationX); + v4 = stru_5C6E00->Cos(pIndoorCamera->sRotationY); + v5 = stru_5C6E00->Sin(pIndoorCamera->sRotationY); v6 = &v2->pParticles[uID]; if ( v6->uType ) { diff -r e8fcde8ba3fc -r 405d0c4dd1b3 Party.cpp --- a/Party.cpp Wed Feb 20 20:50:22 2013 +0600 +++ b/Party.cpp Wed Feb 20 20:51:55 2013 +0600 @@ -280,7 +280,7 @@ signed __int16 v3; // ax@1 //int pResMagicBase; // ecx@1 Player *pCharacter; // esi@3 - signed int uSpellBookPageCount; // edx@5 + //signed int uSpellBookPageCount; // edx@5 int pMagicSkills; // eax@5 int uSkillIdx; // eax@11 //unsigned __int8 v9; // zf@37 @@ -377,9 +377,10 @@ pCharacter = &pParty->pPlayers[uNumPlayers]; if (pCharacter->classType == PLAYER_CLASS_KNIGHT) pCharacter->sResMagicBase = v3; //player[i].pResMagicBase - uSpellBookPageCount = 0; + //uSpellBookPageCount = 0; //pMagicSkills = pPlayers[uNumPlayers].pActiveSkills[12];// Skills //while ( !*(short *)pMagicSkills ) //player[i].skillFire + pCharacter->lastOpenedSpellbookPage = 0; for (int i = 0; i < 9; i++)//for Magic Book { //++uSpellBookPageCount; @@ -387,9 +388,11 @@ //if ( uSpellBookPageCount >= 9 ) //goto LABEL_10; if (pPlayers[uNumPlayers].pActiveSkills[12+i]) - ++uSpellBookPageCount; + { + pCharacter->lastOpenedSpellbookPage = i; + break; + } } - pCharacter->lastOpenedSpellbookPage = uSpellBookPageCount; //LABEL_10: pCharacter->uExpressionTimePassed = 0; Dst.Reset(); @@ -802,7 +805,7 @@ v1 = abs(v0->vPosition.x - pParty->vPosition.x); v2 = abs(v0->vPosition.y - pParty->vPosition.y); v3 = abs(v0->vPosition.z - pParty->vPosition.z); - if ( (double)sub_4621DA(v1, v2, v3) < 512.0 ) + if (int_get_vector_length(v1, v2, v3) < 512) Actor::_402968(v4, 4, 0, 0); } ++v4; diff -r e8fcde8ba3fc -r 405d0c4dd1b3 Player.cpp --- a/Player.cpp Wed Feb 20 20:50:22 2013 +0600 +++ b/Player.cpp Wed Feb 20 20:51:55 2013 +0600 @@ -620,7 +620,7 @@ { pSoundId = rand() % _v1 + 2 * (v11 + 50 * uVoiceID) + 4998; v12 = (8 * pPlayerNum + 312) | OBJECT_Player; - pAudioPlayer->PlaySound((SoundID)pSoundId, v12, 0, -1, 0, 0, (pSoundVolumeLevels[uVoicesVolumeMultiplier] * 128.0), 0); + pAudioPlayer->PlaySound((SoundID)pSoundId, v12, 0, -1, 0, 0, pSoundVolumeLevels[uVoicesVolumeMultiplier] * 128.0f, 0); } } } @@ -1859,7 +1859,7 @@ return result; } LABEL_16: - if ( BYTE1(pItem->uAttributes) & 1 ) + if (pItem->Stolen()) return 6; LABEL_26: //v14 = &p2DEvents_minus1__20[13 * a4]; @@ -1872,7 +1872,7 @@ v23 = *v14; v24 = pItem->GetValue(); v17 = v27->_4B8102(v24, v23); - if ( !(pItem->uAttributes & 2) ) + if (!pItem->Broken()) goto LABEL_39; goto LABEL_38; } @@ -1895,7 +1895,7 @@ v18 = *v14; v19 = pItem->GetValue(); v17 = v27->_4B8102(v19, v18) / 2; - if ( pItem->uAttributes & 2 ) + if (pItem->Broken()) v17 = 1; if ( v17 >= 1 ) goto LABEL_39; @@ -2339,7 +2339,7 @@ v20 = thos; v2 = pItem->uItemID; if ( !pItemsTable->pItems[v2].uItemID_Rep_St ) - pItem->uAttributes |= 1u; + pItem->SetIdentified(); ///v15 = 0; //v16 = 1; //v18 = 3; @@ -3509,7 +3509,7 @@ v10 = v5->pMonsterInfo.uLevel + 100 * (_steal_perm + reputation); if ( rand() % 100 < 5 || v10 > v29 + v7 * v30 || (_steal_perma = 2, BYTE2(v5->uAttributes) & 8) ) { - Actor::_43AC45(uActorID, 1); + Actor::AggroSurroundingPeasants(uActorID, 1); _steal_perma = 0; v26 = (int)v31->pName; v25 = pGlobalTXT_LocalizationStrings[376]; @@ -3796,7 +3796,7 @@ v13 = this->pInventoryItems; do { - if ( (signed int)v13->uItemID > 0 && (signed int)v13->uItemID <= 134 && !(v13->uAttributes & 2) ) + if ( (signed int)v13->uItemID > 0 && (signed int)v13->uItemID <= 134 && !v13->Broken()) v46[v4++] = v12; ++v12; ++v13; @@ -4054,6 +4054,7 @@ } return result; } + // 48DCF6: using guessed type char var_94[140]; //----- (0048E1A3) -------------------------------------------------------- @@ -7542,7 +7543,7 @@ goto LABEL_92; } v15 = pParty->pPickedItem.uItemID - 400; - v72 = (char *)&v3->pConditions[0] + pParty->pPickedItem.uItemID + 2; + v72 = (char *)&v3->spellbook.pFireSpellbook+pParty->pPickedItem.uItemID-400;//(char *)&v3->pConditions[0] + pParty->pPickedItem.uItemID + 2; if ( *v72 ) { v66 = pParty->pPickedItem.GetDisplayName(); @@ -8301,7 +8302,7 @@ } if ( var <= VAR_Counter8 ) { - if ( (signed int)var >= 245 ) + if ( (signed int)var >= 0xF5 ) { *(int *)&stru_AA1058[3].pSounds[8 * var + 44300] = LODWORD(pParty->uTimePlayed); *(int *)&stru_AA1058[3].pSounds[8 * var + 44304] = HIDWORD(pParty->uTimePlayed); @@ -8328,7 +8329,7 @@ } if ( var < VAR_Counter9 ) return; - if ( (signed int)var <= 274 ) + if ( (signed int)var <= 0x112 ) { *(int *)&stru_AA1058[3].pSounds[8 * var + 44532] = LODWORD(pParty->uTimePlayed); *(int *)&stru_AA1058[3].pSounds[8 * var + 44536] = HIDWORD(pParty->uTimePlayed); @@ -8764,7 +8765,7 @@ //----- (0044AFFB) -------------------------------------------------------- -void Player::AddVariable(enum VariableType var, signed int val) +void Player::AddVariable(enum VariableType var_type, signed int val) { char v3; // bl@1 Player *v4; // esi@1 @@ -8793,7 +8794,7 @@ DDM_DLV_Header *v27; // eax@153 signed int v28; // eax@176 int v29; // [sp-8h] [bp-40h]@84 - signed int v30; // [sp-4h] [bp-3Ch]@4 + // signed int v30; // [sp-4h] [bp-3Ch]@4 int v31; // [sp-4h] [bp-3Ch]@84 ItemGen item; // [sp+Ch] [bp-2Ch]@45 unsigned int v33; // [sp+30h] [bp-8h]@34 @@ -8805,31 +8806,21 @@ v4 = Dst; uPlayerIdx = 0; if ( Dst == pPlayers[2] ) - { uPlayerIdx = 1; - goto LABEL_8; - } - if ( Dst == pPlayers[3] ) - { - v30 = 2; - } - else - { - if ( Dst != pPlayers[4] ) - goto LABEL_8; - v30 = 3; - } - uPlayerIdx = v30; -LABEL_8: - if ( var <= VAR_AutoNotes ) - { - if ( var != VAR_AutoNotes ) - { - if ( var <= VAR_ActualMight ) - { - if ( var != VAR_ActualMight ) + else if ( Dst == pPlayers[3] ) + uPlayerIdx = 2; + else if ( Dst == pPlayers[4] ) + uPlayerIdx = 3; + + if ( var_type <= VAR_AutoNotes ) + { + if ( var_type != VAR_AutoNotes ) + { + if ( var_type <= VAR_ActualMight ) + { + if ( var_type != VAR_ActualMight ) { - switch ( var ) + switch ( var_type ) { case VAR_RandomGold: if ( !val ) @@ -9002,11 +8993,11 @@ v19 = (__int16 *)&Dst->uMightBonus; goto LABEL_113; } - if ( var <= VAR_FireResistanceBonus ) - { - if ( var != VAR_FireResistanceBonus ) + if ( var_type <= VAR_FireResistanceBonus ) + { + if ( var_type != VAR_FireResistanceBonus ) { - switch ( var ) + switch ( var_type ) { case VAR_ActualIntellect: LABEL_66: @@ -9085,13 +9076,13 @@ pPlayers[uPlayerIdx + 1]->PlaySound((PlayerSpeech)v29, v31); goto _play_anim_and_maybe_sound; } - if ( var <= VAR_DisarmTrapSkill ) - { - if ( var != VAR_DisarmTrapSkill ) + if ( var_type <= VAR_DisarmTrapSkill ) + { + if ( var_type != VAR_DisarmTrapSkill ) { - if ( var <= VAR_BodyResistanceBonus ) + if ( var_type <= VAR_BodyResistanceBonus ) { - switch ( var ) + switch ( var_type ) { case VAR_BodyResistanceBonus: v19 = &Dst->sResBodyBonus; @@ -9109,43 +9100,43 @@ v19 = &Dst->sResSpiritBonus; break; default: - if ( var != 62 ) + if ( var_type != 62 ) return; v19 = &Dst->sResMindBonus; break; } goto LABEL_113; } - if ( var == VAR_LightResistanceBonus ) + if ( var_type == VAR_LightResistanceBonus ) { v19 = &Dst->sResLightBonus; goto LABEL_113; } - if ( var == VAR_DarkResistanceBonus ) + if ( var_type == VAR_DarkResistanceBonus ) { v19 = &Dst->sResDarkBonus; goto LABEL_113; } - if ( var == VAR_MagicResistanceBonus ) + if ( var_type == VAR_MagicResistanceBonus ) { v19 = &Dst->sResMagicBonus; goto LABEL_113; } - if ( var <= VAR_MagicResistanceBonus || var > VAR_DiplomacySkill ) + if ( var_type <= VAR_MagicResistanceBonus || var_type > VAR_DiplomacySkill ) return; } goto LABEL_106; } - if ( var == VAR_LearningSkill ) + if ( var_type == VAR_LearningSkill ) { LABEL_106: if ( val <= VAR_BodyResistanceBonus ) { - *((short *)&Dst->pConditions[16] + var) = (unsigned __int8)val | *((char *)&Dst->pConditions[16] + 2 * var) & VAR_BodyResistanceBonus; + *((short *)&Dst->pConditions[16] + var_type) = (unsigned __int8)val | *((char *)&Dst->pConditions[16] + 2 * var_type) & VAR_BodyResistanceBonus; } else { - v20 = (char *)&Dst->pConditions[16] + 2 * var; + v20 = (char *)&Dst->pConditions[16] + 2 * var_type; v21 = *(short *)v20; v22 = (unsigned __int8)val + (v21 & VAR_BodyResistanceBonus); if ( v22 > 60 ) @@ -9155,22 +9146,22 @@ } goto _play_anim_and_exit; } - if ( var <= VAR_LearningSkill ) + if ( var_type <= VAR_LearningSkill ) return; - if ( var <= VAR_Eradicated ) - { - Dst->SetCondition(var - 105, 0); + if ( var_type <= VAR_Eradicated ) + { + Dst->SetCondition(var_type - 105, 0); } else { - if ( var != VAR_MajorCondition ) + if ( var_type != VAR_MajorCondition ) { - if ( var > VAR_MajorCondition && var <= VAR_ActiveSpells ) + if ( var_type > VAR_MajorCondition && var_type <= VAR_ActiveSpells ) { - if ( (unsigned __int8)val + (unsigned __int8)byte_5E4C15[var] <= 255 ) - byte_5E4C15[var] += val; + if ( (unsigned __int8)val + (unsigned __int8)byte_5E4C15[var_type] <= 255 ) + byte_5E4C15[var_type] += val; else - byte_5E4C15[var] = -1; + byte_5E4C15[var_type] = -1; } return; } @@ -9203,14 +9194,14 @@ goto _maybe_play_sound; goto _play_anim_and_maybe_sound; } - if ( var > VAR_GoldInBank ) - { - if ( var == 307 ) + if ( var_type > VAR_GoldInBank ) + { + if ( var_type == 307 ) { pParty->uNumDeaths += val; goto LABEL_173; } - switch ( var ) + switch ( var_type ) { case 308: pParty->uNumBountiesCollected += val; @@ -9234,21 +9225,21 @@ } else { - if ( var == VAR_GoldInBank ) + if ( var_type == VAR_GoldInBank ) { pParty->uNumGoldInBank += val; return; } - if ( var <= VAR_Counter8 ) - { - if ( (signed int)var >= 245 ) - { - *(int *)&stru_AA1058[3].pSounds[8 * var + 44300] = LODWORD(pParty->uTimePlayed); - *(int *)&stru_AA1058[3].pSounds[8 * var + 44304] = HIDWORD(pParty->uTimePlayed); + if ( var_type <= VAR_Counter8 ) + { + if ( (signed int)var_type >= 245 ) + { + *(int *)&stru_AA1058[3].pSounds[8 * var_type + 44300] = LODWORD(pParty->uTimePlayed); + *(int *)&stru_AA1058[3].pSounds[8 * var_type + 44304] = HIDWORD(pParty->uTimePlayed); } else { - switch ( var ) + switch ( var_type ) { case VAR_MonthEquals|VAR_CurrentSP: _449B7E_toggle_bit((unsigned char *)Dst->field_1A50, val, 1u); @@ -9266,22 +9257,22 @@ } return; } - if ( var < VAR_Counter9 ) + if ( var_type < VAR_Counter9 ) return; - if ( (signed int)var <= 274 ) - { - *(int *)&stru_AA1058[3].pSounds[8 * var + 44532] = LODWORD(pParty->uTimePlayed); - *(int *)&stru_AA1058[3].pSounds[8 * var + 44536] = HIDWORD(pParty->uTimePlayed); + if ( (signed int)var_type <= 274 ) + { + *(int *)&stru_AA1058[3].pSounds[8 * var_type + 44532] = LODWORD(pParty->uTimePlayed); + *(int *)&stru_AA1058[3].pSounds[8 * var_type + 44536] = HIDWORD(pParty->uTimePlayed); goto _play_sound; } - if ( var != VAR_ReputationInCurrentLocation ) - { - if ( var <= VAR_ReputationInCurrentLocation - || var > VAR_History_28 - || (v25 = var - 276, pParty->field_3C.field_4F0[2 * v25 + 1] | pParty->field_3C.field_4F0[2 * v25]) - || (pParty->field_3C.field_4F0[2 * (var - 276)] = LODWORD(pParty->uTimePlayed), + if ( var_type != VAR_ReputationInCurrentLocation ) + { + if ( var_type <= VAR_ReputationInCurrentLocation + || var_type > VAR_History_28 + || (v25 = var_type - 276, pParty->field_3C.field_4F0[2 * v25 + 1] | pParty->field_3C.field_4F0[2 * v25]) + || (pParty->field_3C.field_4F0[2 * (var_type - 276)] = LODWORD(pParty->uTimePlayed), v26 = pStorylineText->StoreLine[v25].pText==0,//*(&pStorylineText->field_0 + 3 * v25) == 0, - pParty->field_3C.field_4F0[2 * (var - 276) + 1] = HIDWORD(pParty->uTimePlayed), + pParty->field_3C.field_4F0[2 * (var_type - 276) + 1] = HIDWORD(pParty->uTimePlayed), v26) ) return; bFlashHistoryBook = 1; diff -r e8fcde8ba3fc -r 405d0c4dd1b3 Render.cpp --- a/Render.cpp Wed Feb 20 20:50:22 2013 +0600 +++ b/Render.cpp Wed Feb 20 20:51:55 2013 +0600 @@ -610,10 +610,10 @@ array_77EC08[1999].field_58 = 23 - (-20 * pOutdoor->vSunlight.z >> 16); if ( array_77EC08[1999].field_58 > 20 ) array_77EC08[1999].field_58 = 20; - v10 = stru_5C6E00->SinCos(pIndoorCamera->sRotationX - stru_5C6E00->uIntegerHalfPi); + v10 = stru_5C6E00->Sin(pIndoorCamera->sRotationX); array_77EC08[1999].v_18.y = 0; array_77EC08[1999].v_18.x = v10; - array_77EC08[1999].v_18.z = stru_5C6E00->SinCos(pIndoorCamera->sRotationX); + array_77EC08[1999].v_18.z = stru_5C6E00->Cos(pIndoorCamera->sRotationX); array_77EC08[1999].field_24 = 2048 - (pIndoorCamera->pos.z << 16); a1a = (signed __int64)((double)(pIndoorCamera->pos.z * pOutdoorCamera->int_fov_rad) / ((double)pOutdoorCamera->int_fov_rad + 8192.0) @@ -627,10 +627,10 @@ if ( !(pOutdoor->uSky_TextureID != -1 ? (int)v2 : 0) ) return (signed __int16)v2; array_77EC08[1999].field_58 = 0; - v11 = stru_5C6E00->SinCos(pIndoorCamera->sRotationX + 16 - stru_5C6E00->uIntegerHalfPi); + v11 = stru_5C6E00->Sin(pIndoorCamera->sRotationX + 16); array_77EC08[1999].v_18.y = 0; array_77EC08[1999].v_18.x = -v11; - array_77EC08[1999].v_18.z = -stru_5C6E00->SinCos(pIndoorCamera->sRotationX + 16); + array_77EC08[1999].v_18.z = -stru_5C6E00->Cos(pIndoorCamera->sRotationX + 16); LOWORD(v2) = 224 * LOWORD(pMiscTimer->uTotalGameTimeElapsed); array_77EC08[1999].field_24 = 0x2000000u; array_77EC08[1999].sTextureDeltaU = 224 * pMiscTimer->uTotalGameTimeElapsed; @@ -729,13 +729,6 @@ } return (signed __int16)v2; } -// 6BE030: using guessed type int day_attrib; -// 6BE3C4: using guessed type char bUnderwater; -// 80AA10: using guessed type char byte_80AA10; -// 80AA14: using guessed type int dword_80AA14; -// 80AA18: using guessed type int dword_80AA18; -// 80AA1C: using guessed type int dword_80AA1C; -// 80AA20: using guessed type int dword_80AA20; //----- (00485044) -------------------------------------------------------- int Render::DrawSkySW(Span *a1, stru148 *a2, int a3) @@ -1034,8 +1027,8 @@ v105 = pIndoorCamera->sRotationY / ((signed int)stru_5C6E00->uIntegerHalfPi / 2);//2 pDirectionIndicator1 = stru_5C6E00->uDoublePiMask & (stru_5C6E00->uIntegerDoublePi - pIndoorCamera->sRotationY);//1536 pDirectionIndicator2 = stru_5C6E00->uDoublePiMask & (stru_5C6E00->uIntegerPi + pDirectionIndicator1);//512 - v124 = ((pIndoorCamera->uMapGridCellX << 16) + 3 * stru_5C6E00->SinCos(stru_5C6E00->uDoublePiMask & (stru_5C6E00->uIntegerPi + pDirectionIndicator1))) >> 16; - v123 = ((pIndoorCamera->uMapGridCellZ << 16) + 3 * stru_5C6E00->SinCos(pDirectionIndicator2 - stru_5C6E00->uIntegerHalfPi)) >> 16; + v124 = ((pIndoorCamera->uMapGridCellX << 16) + 3 * stru_5C6E00->Cos(stru_5C6E00->uDoublePiMask & (stru_5C6E00->uIntegerPi + pDirectionIndicator1))) >> 16; + v123 = ((pIndoorCamera->uMapGridCellZ << 16) + 3 * stru_5C6E00->Sin(pDirectionIndicator2)) >> 16; v120 = pOutdoorCamera->outdoor_grid_band_3 + v124;//+- range X v119 = pOutdoorCamera->outdoor_grid_band_3 + v123; v2 = pOutdoorCamera->uCameraFovInDegrees + 15; @@ -1047,10 +1040,10 @@ v3 = (v2 << 11) / 720; v4 = stru_5C6E00->uDoublePiMask & (pDirectionIndicator1 - v3); v5 = stru_5C6E00->uDoublePiMask & (v3 + pDirectionIndicator1); - v106 = stru_5C6E00->SinCos(v4); - uEndZ = stru_5C6E00->SinCos(v4 - stru_5C6E00->uIntegerHalfPi); - v111 = stru_5C6E00->SinCos(v5); - v6 = stru_5C6E00->SinCos(v5 - stru_5C6E00->uIntegerHalfPi); + v106 = stru_5C6E00->Cos(v4); + uEndZ = stru_5C6E00->Sin(v4); + v111 = stru_5C6E00->Cos(v5); + v6 = stru_5C6E00->Sin(v5); v7 = v4 & stru_5C6E00->uPiMask; if ( (v4 & stru_5C6E00->uPiMask) >= stru_5C6E00->uIntegerHalfPi ) @@ -3042,7 +3035,7 @@ billboard.pPalette = pPaletteManager->field_261600[*((short *)v1 - 7)]; if ( !(billboard.uFlags & 0x40) && billboard.uFlags & 0x80 ) { - v12 = stru_5C6E00->SinCos(i * 5 + GetTickCount()); + v12 = stru_5C6E00->Cos(i * 5 + GetTickCount()); v15 = abs(v12); v18 = (unsigned __int64)(15i64 * v15) >> 16; billboard.pPalette2 = PaletteManager::Get_Dark_or_Red_LUT(*((short *)v1 - 7), 15 - v18, 1); @@ -4437,7 +4430,7 @@ { if ( !v54 || byte_4D864C && pGame->uFlags & 2 ) { - ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP));// + ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP)); ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, D3DCULL_CW)); if (bUsingSpecular) { @@ -4479,6 +4472,18 @@ } while ( !v18 ); } + + if (a4->uAttributes & FACE_OUTLINED) + { + int color; + if (GetTickCount() % 300 >= 150) + color = 0xFFFF2020; + else color = 0xFF901010; + + for (uint i = 0; i < uNumVertices; ++i) + d3d_vertex_buffer[i].diffuse = color; + } + pRenderD3D->pDevice->SetTexture(0, pTexture); pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, @@ -8171,10 +8176,10 @@ v15 = v14; v16 = (double)(v9 - 12) - v12; v17 = (double)(v10 - 25) - v14; - v18 = stru_5C6E00->SinCos(angle); - v19 = stru_5C6E00->SinCos(angle - stru_5C6E00->uIntegerHalfPi); - v20 = stru_5C6E00->SinCos(angle - stru_5C6E00->uIntegerHalfPi); - v21 = stru_5C6E00->SinCos(angle); + v18 = stru_5C6E00->Cos(angle); + v19 = stru_5C6E00->Sin(angle); + v20 = stru_5C6E00->Sin(angle); + v21 = stru_5C6E00->Cos(angle); pBillboardRenderListD3D[v8].pQuards[0].pos.x = (((double)(unsigned __int16)v18 * 0.000015259022 + (double)(v18 >> 16)) * v16 @@ -8196,10 +8201,10 @@ pBillboardRenderListD3D[v8].pQuards[0].texcoord.y = 0.0; v31 = (double)(a2->uScreenSpaceX + 12) - v13; v32 = (double)a2->uScreenSpaceY - v15; - v25 = stru_5C6E00->SinCos(angle); - v26 = stru_5C6E00->SinCos(angle - stru_5C6E00->uIntegerHalfPi); - v27 = stru_5C6E00->SinCos(angle - stru_5C6E00->uIntegerHalfPi); - v28 = stru_5C6E00->SinCos(angle); + v25 = stru_5C6E00->Cos(angle); + v26 = stru_5C6E00->Sin(angle); + v27 = stru_5C6E00->Sin(angle); + v28 = stru_5C6E00->Cos(angle); pBillboardRenderListD3D[v8].pQuards[1].pos.x = (((double)(unsigned __int16)v25 * 0.000015259022 + (double)(v25 >> 16)) * v23 @@ -8222,10 +8227,10 @@ pBillboardRenderListD3D[v8].pQuards[1].texcoord.y = 1.0; v23 = (double)(a2->uScreenSpaceX - 12) - v13; v24 = (double)a2->uScreenSpaceY - v15; - v33 = stru_5C6E00->SinCos(angle); - v34 = stru_5C6E00->SinCos(angle - stru_5C6E00->uIntegerHalfPi); - v35 = stru_5C6E00->SinCos(angle - stru_5C6E00->uIntegerHalfPi); - v36 = stru_5C6E00->SinCos(angle); + v33 = stru_5C6E00->Cos(angle); + v34 = stru_5C6E00->Sin(angle); + v35 = stru_5C6E00->Sin(angle); + v36 = stru_5C6E00->Cos(angle); pBillboardRenderListD3D[v8].pQuards[2].pos.x = (((double)(unsigned __int16)v33 * 0.000015259022 + (double)(v33 >> 16)) * v31 @@ -8248,10 +8253,10 @@ pBillboardRenderListD3D[v8].pQuards[2].texcoord.y = 1.0; v39 = (double)(a2->uScreenSpaceX + 12) - v13; v40 = (double)(a2->uScreenSpaceY - 25) - v15; - v41 = stru_5C6E00->SinCos(angle); - v42 = stru_5C6E00->SinCos(angle - stru_5C6E00->uIntegerHalfPi); - v43 = stru_5C6E00->SinCos(angle - stru_5C6E00->uIntegerHalfPi); - v44 = stru_5C6E00->SinCos(angle); + v41 = stru_5C6E00->Cos(angle); + v42 = stru_5C6E00->Sin(angle); + v43 = stru_5C6E00->Sin(angle); + v44 = stru_5C6E00->Cos(angle); pBillboardRenderListD3D[v8].pQuards[3].pos.x = (((double)(unsigned __int16)v41 * 0.000015259022 + (double)(v41 >> 16)) * v39 @@ -8345,11 +8350,11 @@ v15 = v14; v16 = (double)(v9 - 12) - v12; v17 = (double)(v10 - 25) - v14; - v18 = stru_5C6E00->SinCos(angle); + v18 = stru_5C6E00->Cos(angle); v19 = angle - stru_5C6E00->uIntegerHalfPi; - v20 = stru_5C6E00->SinCos(angle - stru_5C6E00->uIntegerHalfPi); - v21 = stru_5C6E00->SinCos(v19); - v22 = stru_5C6E00->SinCos(angle); + v20 = stru_5C6E00->Sin(angle); + v21 = stru_5C6E00->Sin(angle); + v22 = stru_5C6E00->Cos(angle); pBillboardRenderListD3D[v8].pQuards[0].pos.x = (((double)(unsigned __int16)v18 * 0.000015259022 + (double)(v18 >> 16)) * v16 @@ -8373,10 +8378,10 @@ pBillboardRenderListD3D[v8].pQuards[0].texcoord.y = 0.0; v26 = (double)(a2->uScreenSpaceX - 12) - v13; v27 = (double)a2->uScreenSpaceY - v15; - v28 = stru_5C6E00->SinCos(angle); - v29 = stru_5C6E00->SinCos(v19); - v30 = stru_5C6E00->SinCos(v19); - v31 = stru_5C6E00->SinCos(angle); + v28 = stru_5C6E00->Cos(angle); + v29 = stru_5C6E00->Sin(v19 + stru_5C6E00->uIntegerHalfPi); + v30 = stru_5C6E00->Sin(v19 + stru_5C6E00->uIntegerHalfPi); + v31 = stru_5C6E00->Cos(angle); pBillboardRenderListD3D[v8].pQuards[1].pos.x = (((double)(unsigned __int16)v28 * 0.000015259022 + (double)(v28 >> 16)) * v26 @@ -8398,10 +8403,10 @@ pBillboardRenderListD3D[v8].pQuards[1].texcoord.y = 1.0; v33 = (double)(a2->uScreenSpaceX + 12) - v13; v34 = (double)a2->uScreenSpaceY - v15; - v35 = stru_5C6E00->SinCos(angle); - v36 = stru_5C6E00->SinCos(v19); - v37 = stru_5C6E00->SinCos(v19); - v38 = stru_5C6E00->SinCos(angle); + v35 = stru_5C6E00->Cos(angle); + v36 = stru_5C6E00->Sin(v19 + stru_5C6E00->uIntegerHalfPi); + v37 = stru_5C6E00->Sin(v19 + stru_5C6E00->uIntegerHalfPi); + v38 = stru_5C6E00->Cos(angle); pBillboardRenderListD3D[v8].pQuards[2].pos.x = (((double)(unsigned __int16)v35 * 0.000015259022 + (double)(v35 >> 16)) * v33 @@ -8423,10 +8428,10 @@ pBillboardRenderListD3D[v8].pQuards[2].texcoord.y = 1.0; v40 = (double)(a2->uScreenSpaceX + 12) - v13; v41 = (double)(a2->uScreenSpaceY - 25) - v15; - v42 = stru_5C6E00->SinCos(angle); - v43 = stru_5C6E00->SinCos(v19); - v44 = stru_5C6E00->SinCos(v19); - v45 = stru_5C6E00->SinCos(angle); + v42 = stru_5C6E00->Cos(angle); + v43 = stru_5C6E00->Sin(v19 + stru_5C6E00->uIntegerHalfPi); + v44 = stru_5C6E00->Sin(v19 + stru_5C6E00->uIntegerHalfPi); + v45 = stru_5C6E00->Cos(angle); pBillboardRenderListD3D[v8].pQuards[3].pos.x = (((double)(unsigned __int16)v42 * 0.000015259022 + (double)(v42 >> 16)) * v40 @@ -10135,7 +10140,7 @@ //----- (004A6776) -------------------------------------------------------- -void Render::_4A6776(unsigned int a2, unsigned int a3, Texture *a4) +void Render::DrawTransparentRedShade(unsigned int a2, unsigned int a3, Texture *a4) { Texture *v4; // edi@2 unsigned int v5; // ebx@4 diff -r e8fcde8ba3fc -r 405d0c4dd1b3 Render.h --- a/Render.h Wed Feb 20 20:50:22 2013 +0600 +++ b/Render.h Wed Feb 20 20:51:55 2013 +0600 @@ -348,7 +348,7 @@ void DrawTextureTransparent(unsigned int uX, unsigned int uY, Texture *pTexture); void _4A63E6(unsigned int a2, unsigned int a3, Texture *a4, Texture *a5, int a6, int a7, int a8); void _4A65CC(unsigned int x, unsigned int y, Texture *a4, Texture *a5, int a6, int a7, int a8); - void _4A6776(unsigned int a2, unsigned int a3, Texture *a4); + void DrawTransparentRedShade(unsigned int a2, unsigned int a3, Texture *a4); void DrawTransparentGreenShade(signed int a2, signed int a3, Texture *pTexture); void _4A6A68(unsigned int a2, unsigned int a3, Texture *a4, __int16 height); void DrawTextPalette(int x, int y, int a4, int a5, unsigned int uFontHeight, unsigned __int16 *pPalette, int a8); diff -r e8fcde8ba3fc -r 405d0c4dd1b3 SaveLoad.cpp --- a/SaveLoad.cpp Wed Feb 20 20:50:22 2013 +0600 +++ b/SaveLoad.cpp Wed Feb 20 20:51:55 2013 +0600 @@ -217,8 +217,8 @@ pSavegameThumbnails[i].Release(); pIcons_LOD->_4114F2(); - pAudioPlayer->SetMusicVolume(pSoundVolumeLevels[uMusicVolimeMultiplier] * 64.0); - pAudioPlayer->SetMasterVolume(pSoundVolumeLevels[uSoundVolumeMultiplier] * 128.0); + pAudioPlayer->SetMusicVolume(pSoundVolumeLevels[uMusicVolimeMultiplier] * 64.0f); + pAudioPlayer->SetMasterVolume(pSoundVolumeLevels[uSoundVolumeMultiplier] * 128.0f); if (uTurnSpeed) pParty->sRotationY = uTurnSpeed * pParty->sRotationY / (signed int)uTurnSpeed; MM7Initialization(); diff -r e8fcde8ba3fc -r 405d0c4dd1b3 StorylineTextTable.cpp --- a/StorylineTextTable.cpp Wed Feb 20 20:50:22 2013 +0600 +++ b/StorylineTextTable.cpp Wed Feb 20 20:51:55 2013 +0600 @@ -50,13 +50,13 @@ switch (decode_step) { case 1: - StoreLine[i+1].pText=RemoveQuotes(test_string); + StoreLine[i].pText=RemoveQuotes(test_string); break; case 2: - StoreLine[i+1].uTime=atoi(test_string); //strange but in text here string not digit + StoreLine[i].uTime=atoi(test_string); //strange but in text here string not digit break; case 3: - StoreLine[i+1].pPageTitle=RemoveQuotes(test_string); + StoreLine[i].pPageTitle=RemoveQuotes(test_string); break; } } diff -r e8fcde8ba3fc -r 405d0c4dd1b3 Texture.cpp --- a/Texture.cpp Wed Feb 20 20:50:22 2013 +0600 +++ b/Texture.cpp Wed Feb 20 20:51:55 2013 +0600 @@ -132,16 +132,16 @@ int uTextureID_50795C; // weak -unsigned int uTextureID_507970; +unsigned int uTextureID_Btn_GameSettings; -unsigned int uTextureID_507978; -unsigned int uTextureID_50797C; -unsigned int uTextureID_507980; -unsigned int uTextureID_507984; +unsigned int uTextureID_Btn_Rest; +unsigned int uTextureID_Btn_CastSpell; +unsigned int uTextureID_Btn_ZoomIn; +unsigned int uTextureID_Btn_ZoomOut; unsigned int uTextureID_FONTPAL; -unsigned int uTextureID_50798C; -unsigned int uTextureID_507990; +unsigned int uTextureID_Btn_NPCRight; +unsigned int uTextureID_Btn_NPCLeft; unsigned int pTextureIDs_pMapDirs[8]; diff -r e8fcde8ba3fc -r 405d0c4dd1b3 Texture.h --- a/Texture.h Wed Feb 20 20:50:22 2013 +0600 +++ b/Texture.h Wed Feb 20 20:51:55 2013 +0600 @@ -234,16 +234,16 @@ extern int uTextureID_50795C; // weak -extern unsigned int uTextureID_507970; +extern unsigned int uTextureID_Btn_GameSettings; -extern unsigned int uTextureID_507978; -extern unsigned int uTextureID_50797C; -extern unsigned int uTextureID_507980; -extern unsigned int uTextureID_507984; +extern unsigned int uTextureID_Btn_Rest; +extern unsigned int uTextureID_Btn_CastSpell; +extern unsigned int uTextureID_Btn_ZoomIn; +extern unsigned int uTextureID_Btn_ZoomOut; extern unsigned int uTextureID_FONTPAL; -extern unsigned int uTextureID_50798C; -extern unsigned int uTextureID_507990; +extern unsigned int uTextureID_Btn_NPCRight; +extern unsigned int uTextureID_Btn_NPCLeft; extern unsigned int pTextureIDs_pMapDirs[8]; diff -r e8fcde8ba3fc -r 405d0c4dd1b3 TurnEngine.h --- a/TurnEngine.h Wed Feb 20 20:50:22 2013 +0600 +++ b/TurnEngine.h Wed Feb 20 20:51:55 2013 +0600 @@ -27,8 +27,8 @@ int _4063A1(); int _406457(int a2); void _40652A(); - __int16 _4065B0(); - __int16 _406648(unsigned int a2); + void _4065B0(); + void _406648(unsigned int a2); __int16 _40680F(int a2); void _406A63(); void _406AFE(); diff -r e8fcde8ba3fc -r 405d0c4dd1b3 VideoPlayer.cpp --- a/VideoPlayer.cpp Wed Feb 20 20:50:22 2013 +0600 +++ b/VideoPlayer.cpp Wed Feb 20 20:51:55 2013 +0600 @@ -952,8 +952,7 @@ { Prepare(); v3->bLoopPlaying = a3_1; - __debugbreak(); // VideoPlayer is larger than this - if ( v3[1].pVideoFrame.pName[0] == 1 ) + if ( LOBYTE(v3->field_104) == 1 ) { v15 = "E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\Video.cpp:925"; v12 = "Unsupported Bink playback!"; diff -r e8fcde8ba3fc -r 405d0c4dd1b3 VideoPlayer.h --- a/VideoPlayer.h Wed Feb 20 20:50:22 2013 +0600 +++ b/VideoPlayer.h Wed Feb 20 20:51:55 2013 +0600 @@ -185,6 +185,7 @@ int dword_0000A0; char pCurrentMovieName[64]; char pVideoFrameTextureFilename[32]; + int field_104; }; #pragma pack(pop) diff -r e8fcde8ba3fc -r 405d0c4dd1b3 Vis.cpp --- a/Vis.cpp Wed Feb 20 20:50:22 2013 +0600 +++ b/Vis.cpp Wed Feb 20 20:51:55 2013 +0600 @@ -386,21 +386,20 @@ } //----- (004C17CF) -------------------------------------------------------- -void Vis::PickOutdoorFaces_Mouse(float fDepth, RenderVertexSoft *pRay, Vis_SelectionList *list, Vis_SelectionFilter *filter, bool one_sided) +void Vis::PickOutdoorFaces_Mouse(float fDepth, RenderVertexSoft *pRay, Vis_SelectionList *list, Vis_SelectionFilter *filter, bool only_reachable) { if (!pOutdoor) return; for (uint i = 0; i < pOutdoor->uNumBModels; ++i) { - int v24; - if (!IsBModelVisible(i, &v24)) + int reachable; + if (!IsBModelVisible(i, &reachable)) continue; - if (one_sided && !v24) + if (!reachable && only_reachable) continue; auto bmodel = &pOutdoor->pBModels[i]; - for (uint j = 0; j < bmodel->uNumFaces; ++j) { auto face = bmodel->pFaces + j; @@ -414,10 +413,15 @@ { pGame->pIndoorCameraD3D->ViewTransform(&intersection, 1u); int v13 = _48B561_mess_with_scaling_along_z(/*v12, */intersection.vWorldViewPosition.x); - LOWORD(v13) = (8 * (j | (i << 6)) | OBJECT_BModel) + v13; + v13 += (8 * (j | (i << 6)) | OBJECT_BModel); list->AddObject(face, VisObjectType_Face, v13); } + + if (blv_face.uAttributes & 0x80000000) + face->uAttributes |= FACE_OUTLINED; + else + face->uAttributes &= ~FACE_OUTLINED; } } } @@ -575,62 +579,118 @@ //----- (004C1C0C) -------------------------------------------------------- bool Vis::Intersect_Ray_Face(RenderVertexSoft *pRayStart, RenderVertexSoft *pRayEnd, float *pDepth, RenderVertexSoft *a4, BLVFace *a5, unsigned int a6) { - BLVFace *v7; // ebx@1 - bool result; // eax@1 + //BLVFace *v7; // ebx@1 + //bool result; // eax@1 double v9; // st7@3 - __int16 v10; // fps@3 - char v11; // c0@3 - char v12; // c2@3 - char v13; // c3@3 - __int16 v14; // fps@5 - char v15; // c0@5 - char v16; // c2@5 - char v17; // c3@5 + //__int16 v10; // fps@3 + //char v11; // c0@3 + //char v12; // c2@3 + //char v13; // c3@3 + //__int16 v14; // fps@5 + //char v15; // c0@5 + //char v16; // c2@5 + //char v17; // c3@5 double v18; // st5@6 - __int16 v19; // fps@6 - char v20; // c0@6 - char v21; // c2@6 - char v22; // c3@6 - unsigned __int8 v23; // c0@6 - char v24; // c2@6 - unsigned __int8 v25; // c3@6 - char v26; // zf@6 + //__int16 v19; // fps@6 + //char v20; // c0@6 + //char v21; // c2@6 + //char v22; // c3@6 + //unsigned __int8 v23; // c0@6 + //char v24; // c2@6 + //unsigned __int8 v25; // c3@6 + //char v26; // zf@6 double v27; // st6@10 - __int16 v28; // fps@10 - unsigned __int8 v29; // c0@10 - char v30; // c2@10 - unsigned __int8 v31; // c3@10 - double v32; // st7@11 + //__int16 v28; // fps@10 + //unsigned __int8 v29; // c0@10 + //char v30; // c2@10 + //unsigned __int8 v31; // c3@10 + //double v32; // st7@11 Vec2_short_ v33; // ST1E_4@11 Vec3_short_ v34; // ST04_6@11 - float a5a; // [sp+30h] [bp+18h]@10 - float a5b; // [sp+30h] [bp+18h]@13 + //float a5a; // [sp+30h] [bp+18h]@10 + //float a5b; // [sp+30h] [bp+18h]@13 + + if (a5->TwoSided() || a5->Invisible()) + return false; + + + int ray_dir_x = pRayEnd->vWorldPosition.x - pRayStart->vWorldPosition.x, + ray_dir_y = pRayEnd->vWorldPosition.y - pRayStart->vWorldPosition.y, + ray_dir_z = pRayEnd->vWorldPosition.z - pRayStart->vWorldPosition.z; + + v9 = ray_dir_z * a5->pFacePlane.vNormal.z + + ray_dir_y * a5->pFacePlane.vNormal.y + + ray_dir_x * a5->pFacePlane.vNormal.x; + if (v9 >= 0) // ray faces face's normal ( > 0) or parallel ( == 0) + return false; + +//ray = t dir + start +//plane = (p - vertex) normal = -d +// +// +//(t dir + start - vertex) normal = -d +// +// -d - (start - vertex) norm +//t = -------------------- +// dir norm + + + float dir_mag = sqrtf(ray_dir_x * ray_dir_x + ray_dir_y * ray_dir_y + ray_dir_z * ray_dir_z); + float ndir_x = ray_dir_x / dir_mag, + ndir_y = ray_dir_y / dir_mag, + ndir_z = ray_dir_z / dir_mag; + + int face_center_x = (a5->pBounding.x1 + a5->pBounding.x2) / 2, + face_center_y = (a5->pBounding.y1 + a5->pBounding.y2) / 2, + face_center_z = (a5->pBounding.z1 + a5->pBounding.z2) / 2; - v7 = a5; - result = a5->uAttributes; - if ( result & 1 - || BYTE1(result) & 0x20 - || (v9 = pRayEnd->vWorldPosition.z * a5->pFacePlane.vNormal.z - + a5->pFacePlane.vNormal.y * pRayEnd->vWorldPosition.y - + pRayEnd->vWorldPosition.x * a5->pFacePlane.vNormal.x, - //UNDEF(v10), - v11 = v9 < 0.0, - v12 = 0, - v13 = v9 == 0.0, - BYTE1(result) = HIBYTE(v10), - v9 == 0.0) - || (/*UNDEF(v14),*/ v15 = v9 < 0.0, v16 = 0, v17 = v9 == 0.0, BYTE1(result) = HIBYTE(v14), v9 > 0.0) )// ray's away (>) from face surface or parallel (==) - goto LABEL_12; - v18 = -(a5->pFacePlane.vNormal.y * pRayStart->vWorldPosition.y// ray-plane intersection + int to_plane_x = pRayStart->vWorldPosition.x - face_center_x, + to_plane_y = pRayStart->vWorldPosition.y - face_center_y, + to_plane_z = pRayStart->vWorldPosition.z - face_center_z; + + float t = /*-a5->pFacePlane.dist*/ - (to_plane_x * a5->pFacePlane.vNormal.x + to_plane_y * a5->pFacePlane.vNormal.y + to_plane_y * a5->pFacePlane.vNormal.z) / + (ndir_x * a5->pFacePlane.vNormal.x + ndir_y * a5->pFacePlane.vNormal.y + ndir_z * a5->pFacePlane.vNormal.z); + if (t <= *pDepth) + { + int intersection_x = pRayStart->vWorldPosition.x + ndir_x * t, + intersection_y = pRayStart->vWorldPosition.y + ndir_y * t, + intersection_z = pRayStart->vWorldPosition.z + ndir_z * t; + + if (intersection_x < a5->pBounding.x1 || intersection_x > a5->pBounding.x2 || + intersection_y < a5->pBounding.y1 || intersection_y > a5->pBounding.y2 || + intersection_z < a5->pBounding.z1 || intersection_z > a5->pBounding.z2) + return false; + + a5->uAttributes |= 0x80000000; + return true; + } + + + return false; + +// v7 = a5; + //result = a5->uAttributes; + v9 = pRayEnd->vWorldPosition.z * a5->pFacePlane.vNormal.z + + pRayEnd->vWorldPosition.y * a5->pFacePlane.vNormal.y + + pRayEnd->vWorldPosition.x * a5->pFacePlane.vNormal.x; + if (v9 >= 0) // ray faces face's normal ( > 0) or parallel ( == 0) + return false; + + a5->uAttributes |= 0x80000000; + return false; + + v18 = -(a5->pFacePlane.vNormal.y * pRayStart->vWorldPosition.y + pRayStart->vWorldPosition.x * a5->pFacePlane.vNormal.x + pRayStart->vWorldPosition.z * a5->pFacePlane.vNormal.z + a5->pFacePlane.dist); + if (v18 > 0) + return false; //UNDEF(v19); - v20 = v9 < 0.0; - v21 = 0; - v22 = v9 == 0.0; - BYTE1(result) = HIBYTE(v19); - v23 = v18 < 0.0; + //v20 = v9 < 0.0; + //v21 = 0; + //v22 = v9 == 0.0; + //BYTE1(result) = HIBYTE(v19); + /*v23 = v18 < 0.0; v24 = 0; v25 = v18 == 0.0; v26 = (BYTE1(result) & 0x41) == 0; @@ -648,32 +708,37 @@ LOBYTE(result) = 0; return result; } - } - a5a = v18; - v27 = a5a / v9; - HIWORD(result) = HIWORD(pDepth); + }*/ + + //a5a = v18; + v27 = v18 / v9; + //HIWORD(result) = HIWORD(pDepth); //UNDEF(v28); - v29 = v27 < *pDepth; - v30 = 0; - v31 = v27 == *pDepth; - BYTE1(result) = HIBYTE(v28); - if ( !(v29 | v31) - || (a4->vWorldPosition.x = v27 * pRayEnd->vWorldPosition.x + pRayStart->vWorldPosition.x, - a4->vWorldPosition.y = v27 * pRayEnd->vWorldPosition.y + pRayStart->vWorldPosition.y, - v32 = v27 * pRayEnd->vWorldPosition.z + pRayStart->vWorldPosition.z, - a4->vWorldPosition.z = v32, - v33.x = (signed __int64)a4->vWorldPosition.x, - v33.y = (signed __int64)a4->vWorldPosition.y, - *(int *)&v34.x = v33.x, - v34.z = (signed __int64)v32, - result = _4C1D2B(v7, v34, a6), - *(float *)&result == 0.0) ) - goto LABEL_12; - *(float *)&result = v27; - a5b = v27; - *(int *)pDepth = LODWORD(a5b); - LOBYTE(result) = 1; - return result; + //v29 = v27 < *pDepth; + //v30 = 0; + //v31 = v27 == *pDepth; + //BYTE1(result) = HIBYTE(v28); + + if (v27 > *pDepth) + return false; + + a5->uAttributes |= 0x80000000; + + a4->vWorldPosition.x = v27 * pRayEnd->vWorldPosition.x + pRayStart->vWorldPosition.x; + a4->vWorldPosition.y = v27 * pRayEnd->vWorldPosition.y + pRayStart->vWorldPosition.y; + a4->vWorldPosition.z = v27 * pRayEnd->vWorldPosition.z + pRayStart->vWorldPosition.z; + v33.x = (signed __int64)a4->vWorldPosition.x; + v33.y = (signed __int64)a4->vWorldPosition.y; + v34.x = v33.x; + v34.y = 0; + v34.z = (signed __int64)a4->vWorldPosition.z; + + if ( _4C1D2B(a5, v34, a6) == 0.0) + return false; + + //a5b = v27; + *pDepth = v27; + return true; } //----- (004C1D2B) -------------------------------------------------------- @@ -694,63 +759,54 @@ signed int v16; // [sp+18h] [bp-4h]@10 v4 = pFace; - if ( a2.z < pFace->pBounding.z1 - || a2.z > pFace->pBounding.z2 - || a2.x < pFace->pBounding.x1 - || a2.x > pFace->pBounding.x2 - || a2.y < pFace->pBounding.y1 - || a2.y > pFace->pBounding.y2 - || (uModelID != -1 ? _4C2186_BLV_IntersectBModel( - (int *)&pFace, - (int *)&uModelID, - &word_F8BC48_displaced_face_intersect_plane_coords_a, - &word_F8BD18_displaced_face_intersect_plane_coords_b, - &a2, - pFace, - uModelID) : _4C1EE5_BLV_IntersectBModel_2( - (int *)&pFace, - (int *)&uModelID, - &word_F8BC48_displaced_face_intersect_plane_coords_a, - &word_F8BD18_displaced_face_intersect_plane_coords_b, - &a2, - pFace), - v5 = 2 * v4->uNumVertices, - v16 = 0, - *(&word_F8BC48_displaced_face_intersect_plane_coords_a + v5) = word_F8BC48_displaced_face_intersect_plane_coords_a, - *(&word_F8BD18_displaced_face_intersect_plane_coords_b + v5) = word_F8BD18_displaced_face_intersect_plane_coords_b, - v15 = 0, - v6 = word_F8BD18_displaced_face_intersect_plane_coords_b >= (signed int)uModelID, - v5 <= 0) ) - goto LABEL_25; + if (a2.z < pFace->pBounding.z1 || a2.z > pFace->pBounding.z2 || + a2.x < pFace->pBounding.x1 || a2.x > pFace->pBounding.x2 || + a2.y < pFace->pBounding.y1 || a2.y > pFace->pBounding.y2) + return false; + + if (uModelID != -1) + _4C2186_BLV_IntersectBModel((int *)&pFace, (int *)&uModelID, + word_F8BC48_displaced_face_intersect_plane_coords_a, + word_F8BD18_displaced_face_intersect_plane_coords_b, + &a2, pFace, uModelID); + else + _4C1EE5_BLV_IntersectBModel_2((int *)&pFace, (int *)&uModelID, + word_F8BC48_displaced_face_intersect_plane_coords_a, + word_F8BD18_displaced_face_intersect_plane_coords_b, + &a2, pFace); + + v5 = 2 * v4->uNumVertices; + v16 = 0; + word_F8BC48_displaced_face_intersect_plane_coords_a[v5] = word_F8BC48_displaced_face_intersect_plane_coords_a[0]; + word_F8BD18_displaced_face_intersect_plane_coords_b[v5] = word_F8BD18_displaced_face_intersect_plane_coords_b[0]; + v15 = 0; + v6 = word_F8BD18_displaced_face_intersect_plane_coords_b[0] >= (signed int)uModelID; + if (v5 <= 0) + return false; + do { if ( v16 >= 2 ) break; v7 = 2 * v15; - v8 = *(&word_F8BD18_displaced_face_intersect_plane_coords_b + v15 + 1); + v8 = word_F8BD18_displaced_face_intersect_plane_coords_b[ + v15 + 1]; if ( v6 ^ v8 >= (signed int)uModelID ) { - v9 = *(__int16 *)((char *)&word_F8BC48_displaced_face_intersect_plane_coords_a + v7 + 2); + v9 = word_F8BC48_displaced_face_intersect_plane_coords_a[v7/2 + 1]; if ( v9 >= (signed int)pFace ) v10 = 0; else v10 = 2; - v11 = v10 | *(__int16 *)((char *)&word_F8BC48_displaced_face_intersect_plane_coords_a + v7) < (signed int)pFace; + v11 = v10 | word_F8BC48_displaced_face_intersect_plane_coords_a[v7/2] < (signed int)pFace; if ( v11 != 3 ) { if ( !v11 - || (v12 = v9 - *(__int16 *)((char *)&word_F8BC48_displaced_face_intersect_plane_coords_a + v7), + || (v12 = v9 - word_F8BC48_displaced_face_intersect_plane_coords_a[v7/2], LODWORD(v13) = v12 << 16, HIDWORD(v13) = v12 >> 16, - *(__int16 *)((char *)&word_F8BC48_displaced_face_intersect_plane_coords_a + v7) - + ((signed int)(((unsigned __int64)(v13 - / (v8 - - *(__int16 *)((char *)&word_F8BD18_displaced_face_intersect_plane_coords_b - + v7)) - * (signed int)((uModelID - - *(__int16 *)((char *)&word_F8BD18_displaced_face_intersect_plane_coords_b - + v7)) << 16)) >> 16) - + 32768) >> 16) >= (signed int)pFace) ) + word_F8BC48_displaced_face_intersect_plane_coords_a[v7/2] + + ((signed int)(((unsigned __int64)(v13 / (v8 - word_F8BD18_displaced_face_intersect_plane_coords_b[v7/2]) + * (signed int)((uModelID - word_F8BD18_displaced_face_intersect_plane_coords_b[v7/2]) << 16)) >> 16) + 32768) >> 16) >= (signed int)pFace) ) ++v16; } } @@ -1484,7 +1540,7 @@ PickOutdoorFaces_Mouse(fDepth, pMouseRay, &default_list, face_filter, false); else { - Log::Warning(L"Picking mouse in undefined level"); // picking in main menu is default (buggy) game behavious. should've returned false in Game::PickMouse + Log::Warning(L"Picking mouse in undefined level"); // picking in main menu is default (buggy) game behaviour. should've returned false in Game::PickMouse return false; } default_list.create_object_pointers(Vis_SelectionList::All); diff -r e8fcde8ba3fc -r 405d0c4dd1b3 Vis.h --- a/Vis.h Wed Feb 20 20:50:22 2013 +0600 +++ b/Vis.h Wed Feb 20 20:51:55 2013 +0600 @@ -96,7 +96,7 @@ bool PickMouse(float fDepth, float fMouseX, float fMouseY, Vis_SelectionFilter *sprite_filter, Vis_SelectionFilter *face_filter); void PickBillboards_Mouse(float fPickDepth, float fX, float fY, Vis_SelectionList *list, Vis_SelectionFilter *filter); void PickIndoorFaces_Mouse(float fDepth, struct RenderVertexSoft *pRay, Vis_SelectionList *list, Vis_SelectionFilter *filter); - void PickOutdoorFaces_Mouse(float fDepth, struct RenderVertexSoft *pRay, Vis_SelectionList *list, Vis_SelectionFilter *filter, bool one_sided); + void PickOutdoorFaces_Mouse(float fDepth, struct RenderVertexSoft *pRay, Vis_SelectionList *list, Vis_SelectionFilter *filter, bool only_reachable); bool is_part_of_selection(void *uD3DBillboardIdx_or_pBLVFace_or_pODMFace, Vis_SelectionFilter *filter); bool DoesRayIntersectBillboard(float fDepth, unsigned int uD3DBillboardIdx); diff -r e8fcde8ba3fc -r 405d0c4dd1b3 mm7_1.cpp --- a/mm7_1.cpp Wed Feb 20 20:50:22 2013 +0600 +++ b/mm7_1.cpp Wed Feb 20 20:51:55 2013 +0600 @@ -881,11 +881,10 @@ v17 = uCellX + ((v15 - v10) >> 1) + pSRZBufferLineOffsets[uCellY + ((((v14 - 14) & 0xFFFFFFE0) - v9 + 32) >> 1)]; if ( !(v16 & 0xF0) ) { - if ( v16 & 1 - || pCurrentScreen != SCREEN_HOUSE ) + if (pItem->Identified() || pCurrentScreen != SCREEN_HOUSE ) { - if ( v16 & 2 ) - pRenderer->_4A6776(uCellX, uCellY, v7); + if (pItem->Broken()) + pRenderer->DrawTransparentRedShade(uCellX, uCellY, v7); else pRenderer->DrawTextureTransparent(uCellX, uCellY, v7); } @@ -1625,23 +1624,23 @@ //----- (0041B690) -------------------------------------------------------- void __cdecl MainMenuUI_Create() { - unsigned int v0; // eax@1 - unsigned int v1; // eax@1 - unsigned int v2; // eax@1 - unsigned int v3; // eax@1 - unsigned int v4; // eax@1 - unsigned int v5; // eax@1 + //unsigned int v0; // eax@1 + //unsigned int v1; // eax@1 + //unsigned int v2; // eax@1 + //unsigned int v3; // eax@1 + //unsigned int v4; // eax@1 + //unsigned int v5; // eax@1 Texture *v6; // ST78_4@1 - const char *v7; // ST5C_4@1 + //const char *v7; // ST5C_4@1 unsigned __int8 v8; // al@1 //Texture *v9; // ST60_4@1 Texture *v10; // ST78_4@1 - const char *v11; // ST5C_4@1 + //const char *v11; // ST5C_4@1 unsigned __int8 v12; // al@1 //Texture *v13; // ST60_4@1 unsigned int v14; // eax@1 Texture *v15; // ST78_4@1 - const char *v16; // ST5C_4@1 + //const char *v16; // ST5C_4@1 unsigned __int8 v17; // al@1 //Texture *v18; // ST60_4@1 unsigned int uTextureID_ib_td4_A; // eax@1 @@ -1649,28 +1648,23 @@ unsigned __int8 v22; // al@1 //Texture *v23; // ST60_4@1 Texture *v24; // eax@1 - Texture *v25; // esi@1 - Texture *v26; // ST60_4@1 - const char *v27; // ST5C_4@1 + //Texture *v25; // esi@1 + //Texture *v26; // ST60_4@1 + //const char *v27; // ST5C_4@1 unsigned __int8 v28; // al@1 Texture *v29; // eax@1 - Texture *v30; // esi@1 - Texture *v31; // ST60_4@1 - const char *v32; // ST5C_4@1 + //Texture *v30; // esi@1 + //Texture *v31; // ST60_4@1 + //const char *v32; // ST5C_4@1 unsigned __int8 v33; // al@1 - v0 = pIconsFrameTable->FindIcon("wizeyeC"); - pIconsFrameTable->InitializeAnimation(v0); - v1 = pIconsFrameTable->FindIcon("wizeyeB"); - pIconsFrameTable->InitializeAnimation(v1); - v2 = pIconsFrameTable->FindIcon("wizeyeA"); - pIconsFrameTable->InitializeAnimation(v2); - v3 = pIconsFrameTable->FindIcon("torchC"); - pIconsFrameTable->InitializeAnimation(v3); - v4 = pIconsFrameTable->FindIcon("torchB"); - pIconsFrameTable->InitializeAnimation(v4); - v5 = pIconsFrameTable->FindIcon("torchA"); - pIconsFrameTable->InitializeAnimation(v5); + pIconsFrameTable->InitializeAnimation(pIconsFrameTable->FindIcon("wizeyeC")); + pIconsFrameTable->InitializeAnimation(pIconsFrameTable->FindIcon("wizeyeB")); + pIconsFrameTable->InitializeAnimation(pIconsFrameTable->FindIcon("wizeyeA")); + pIconsFrameTable->InitializeAnimation(pIconsFrameTable->FindIcon("torchC")); + pIconsFrameTable->InitializeAnimation(pIconsFrameTable->FindIcon("torchB")); + pIconsFrameTable->InitializeAnimation(pIconsFrameTable->FindIcon("torchA")); + pTextureIDs_pMapDirs[0] = pIcons_LOD->LoadTexture("MAPDIR8", TEXTURE_16BIT_PALETTE); pTextureIDs_pMapDirs[1] = pIcons_LOD->LoadTexture("MAPDIR1", TEXTURE_16BIT_PALETTE); pTextureIDs_pMapDirs[2] = pIcons_LOD->LoadTexture("MAPDIR2", TEXTURE_16BIT_PALETTE); @@ -1679,6 +1673,7 @@ pTextureIDs_pMapDirs[5] = pIcons_LOD->LoadTexture("MAPDIR5", TEXTURE_16BIT_PALETTE); pTextureIDs_pMapDirs[6] = pIcons_LOD->LoadTexture("MAPDIR6", TEXTURE_16BIT_PALETTE); pTextureIDs_pMapDirs[7] = pIcons_LOD->LoadTexture("MAPDIR7", TEXTURE_16BIT_PALETTE); + uTextureID_BarBlue = pIcons_LOD->LoadTexture("ib-statB", TEXTURE_16BIT_PALETTE); uTextureID_BarGreen = pIcons_LOD->LoadTexture("ib-statG", TEXTURE_16BIT_PALETTE); uTextureID_BarYellow = pIcons_LOD->LoadTexture("ib-statY", TEXTURE_16BIT_PALETTE); @@ -1712,154 +1707,142 @@ pPrimaryWindow->CreateButton(0xD4u, 0x194u, 5u, 0x31u, 1, 93, 0, 2u, 0, "", 0); pPrimaryWindow->CreateButton(0x148u, 0x194u, 5u, 0x31u, 1, 93, 0, 3u, 0, "", 0); pPrimaryWindow->CreateButton(0x1BBu, 0x194u, 5u, 0x31u, 1, 93, 0, 4u, 0, "", 0); + uTextureID_ib_td1_A = pIcons_LOD->LoadTexture("ib-td1-A", TEXTURE_16BIT_PALETTE); v6 = (Texture *)(uTextureID_ib_td1_A != -1 ? &pIcons_LOD->pTextures[uTextureID_ib_td1_A] : 0); - v7 = pGlobalTXT_LocalizationStrings[174];//Quests v8 = pKeyActionMap->GetActionVKey(INPUT_Quest); - pBtn_Quests = pPrimaryWindow->CreateButton(0x1EBu, 0x161u, v6->uTextureWidth, v6->uTextureHeight, 1, 0, 0xC8u, 0, v8, v7, v6, 0); + pBtn_Quests = pPrimaryWindow->CreateButton(0x1EBu, 0x161u, v6->uTextureWidth, v6->uTextureHeight, 1, 0, 0xC8u, 0, v8, pGlobalTXT_LocalizationStrings[174], v6, 0); //Quests + uTextureID_ib_td2_A = pIcons_LOD->LoadTexture("ib-td2-A", TEXTURE_16BIT_PALETTE); v10 = (Texture *)(uTextureID_ib_td2_A != -1 ? &pIcons_LOD->pTextures[uTextureID_ib_td2_A] : 0); - v11 = pGlobalTXT_LocalizationStrings[154];//Autonotes v12 = pKeyActionMap->GetActionVKey(INPUT_Autonotes); - pBtn_Autonotes = pPrimaryWindow->CreateButton(0x20Fu, 0x161u, v10->uTextureWidth, v10->uTextureHeight, 1, 0, 0xC9u, 0, v12, v11, v10, 0); + pBtn_Autonotes = pPrimaryWindow->CreateButton(0x20Fu, 0x161u, v10->uTextureWidth, v10->uTextureHeight, 1, 0, 0xC9u, 0, v12, pGlobalTXT_LocalizationStrings[154], v10, 0);//Autonotes + v14 = pIcons_LOD->LoadTexture("ib-td3-A", TEXTURE_16BIT_PALETTE); - v15 = (Texture *)(v14 != -1 ? (int)&pIcons_LOD->pTextures[v14] : 0); - v16 = pGlobalTXT_LocalizationStrings[139];//Maps + v15 = (Texture *)(v14 != -1 ? &pIcons_LOD->pTextures[v14] : 0); v17 = pKeyActionMap->GetActionVKey(INPUT_Mapbook); - pBtn_Maps = pPrimaryWindow->CreateButton(0x222u, 0x161u, v15->uTextureWidth, v15->uTextureHeight, 1, 0, 0xCAu, 0, v17, v16, v15, 0); + pBtn_Maps = pPrimaryWindow->CreateButton(0x222u, 0x161u, v15->uTextureWidth, v15->uTextureHeight, 1, 0, 0xCAu, 0, v17, pGlobalTXT_LocalizationStrings[139], v15, 0); //Maps + uTextureID_ib_td4_A = pIcons_LOD->LoadTexture("ib-td4-A", TEXTURE_16BIT_PALETTE); - v20 = (Texture *)(uTextureID_ib_td4_A != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_ib_td4_A] : 0); + v20 = (Texture *)(uTextureID_ib_td4_A != -1 ? &pIcons_LOD->pTextures[uTextureID_ib_td4_A] : 0); v22 = pKeyActionMap->GetActionVKey(INPUT_TimeCal); pBtn_Calendar = pPrimaryWindow->CreateButton(0x23Au, 0x161u, v20->uTextureWidth, v20->uTextureHeight, 1, 0, 0xCBu, 0, v22, pGlobalTXT_LocalizationStrings[78],//Calendar v20, 0); + uTextureID_ib_td5_A = pIcons_LOD->LoadTexture("ib-td5-A", TEXTURE_16BIT_PALETTE); pBtn_History = pPrimaryWindow->CreateButton(0x258u, 0x169u, (uTextureID_ib_td5_A != -1 ? pIcons_LOD->pTextures[uTextureID_ib_td5_A].uTextureWidth : 24), (uTextureID_ib_td5_A != -1 ? pIcons_LOD->pTextures[uTextureID_ib_td5_A].uTextureHeight : 26), 1, 0, 0xE0u, 0, 0x48u, pGlobalTXT_LocalizationStrings[602],//History (Texture *)(uTextureID_ib_td5_A != -1 ? &pIcons_LOD->pTextures[uTextureID_ib_td5_A] : 0), 0); - v24 = &pIcons_LOD->pTextures[uTextureID_507980]; - v25 = (Texture *)(uTextureID_507980 != -1 ? (int)v24 : 0); - bFlashHistoryBook = 0; - v26 = (Texture *)(uTextureID_507980 != -1 ? (int)v24 : 0); + bFlashAutonotesBook = 0; - v27 = pGlobalTXT_LocalizationStrings[252]; bFlashQuestBook = 0; + bFlashHistoryBook = 0; + + v24 = &pIcons_LOD->pTextures[uTextureID_Btn_ZoomIn]; v28 = pKeyActionMap->GetActionVKey(INPUT_ZoomIn); - dword_507A18 = pPrimaryWindow->CreateButton( + pBtn_ZoomIn = pPrimaryWindow->CreateButton( 0x23Eu, 0x88u, - v25->uTextureWidth, - v25->uTextureHeight, + v24->uTextureWidth, + v24->uTextureHeight, 2, 0, 0x170u, 0, v28, - v27, - v26, + pGlobalTXT_LocalizationStrings[252], // Zoom In + v24, 0); - v29 = &pIcons_LOD->pTextures[uTextureID_507984]; - v30 = (Texture *)(uTextureID_507984 != -1 ? (int)v29 : 0); - v31 = (Texture *)(uTextureID_507984 != -1 ? (int)v29 : 0); - v32 = pGlobalTXT_LocalizationStrings[251]; + + v29 = &pIcons_LOD->pTextures[uTextureID_Btn_ZoomOut]; v33 = pKeyActionMap->GetActionVKey(INPUT_ZoomOut); - dword_507A14 = pPrimaryWindow->CreateButton( + pBtn_ZoomOut = pPrimaryWindow->CreateButton( 0x207u, 0x88u, - v30->uTextureWidth, - v30->uTextureHeight, + v29->uTextureWidth, + v29->uTextureHeight, 2, 0, 0x16Fu, 0, v33, - v32, - v31, + pGlobalTXT_LocalizationStrings[251], // Zoom Out + v29, 0); + pPrimaryWindow->CreateButton(0x1E1u, 0, 0x99u, 0x43u, 1, 92, 0, 0, 0, "", 0); pPrimaryWindow->CreateButton(0x1EBu, 0x95u, 0x40u, 0x4Au, 1, 0, 0x86u, 0, 0x35u, "", 0); pPrimaryWindow->CreateButton(0x231u, 0x95u, 0x40u, 0x4Au, 1, 0, 0x87u, 0, 0x36u, "", 0); pPrimaryWindow->CreateButton(0x1DCu, 0x142u, 0x4Du, 0x11u, 1, 100, 0, 0, 0, "", 0); pPrimaryWindow->CreateButton(0x22Bu, 0x142u, 0x4Du, 0x11u, 1, 101, 0, 0, 0, "", 0); - pBtn_CastSpell = pPrimaryWindow->CreateButton( - 0x1DCu, - 0x1C2u, - (uTextureID_50797C != -1 ? pIcons_LOD->pTextures[uTextureID_50797C].uTextureWidth : 24), - (uTextureID_50797C != -1 ? pIcons_LOD->pTextures[uTextureID_50797C].uTextureHeight : 26), + pBtn_CastSpell = pPrimaryWindow->CreateButton(0x1DCu, 0x1C2u, + (uTextureID_Btn_CastSpell != -1 ? pIcons_LOD->pTextures[uTextureID_Btn_CastSpell].uTextureWidth : 24), + (uTextureID_Btn_CastSpell != -1 ? pIcons_LOD->pTextures[uTextureID_Btn_CastSpell].uTextureHeight : 26), 1, 0, 0x69u, 0, 0x43u, pGlobalTXT_LocalizationStrings[38], - (Texture *)(uTextureID_50797C != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_50797C] : 0), + (Texture *)(uTextureID_Btn_CastSpell != -1 ? &pIcons_LOD->pTextures[uTextureID_Btn_CastSpell] : 0), 0); - pBtn_Rest = pPrimaryWindow->CreateButton( - 0x206u, - 0x1C2u, - (uTextureID_507978 != -1 ? pIcons_LOD->pTextures[uTextureID_507978].uTextureWidth : 24), - (uTextureID_507978 != -1 ? pIcons_LOD->pTextures[uTextureID_507978].uTextureHeight : 26), + pBtn_Rest = pPrimaryWindow->CreateButton(0x206u, 0x1C2u, + (uTextureID_Btn_Rest != -1 ? pIcons_LOD->pTextures[uTextureID_Btn_Rest].uTextureWidth : 24), + (uTextureID_Btn_Rest != -1 ? pIcons_LOD->pTextures[uTextureID_Btn_Rest].uTextureHeight : 26), 1, 0, 0x68u, 0, 0x52u, pGlobalTXT_LocalizationStrings[182], - (Texture *)(uTextureID_507978 != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_507978] : 0), + (Texture *)(uTextureID_Btn_Rest != -1 ? &pIcons_LOD->pTextures[uTextureID_Btn_Rest] : 0), 0); - pBtn_QuickReference = pPrimaryWindow->CreateButton( - 0x230u, - 0x1C2u, - (dword_507974 != -1 ? pIcons_LOD->pTextures[dword_507974].uTextureWidth : 24), - (dword_507974 != -1 ? pIcons_LOD->pTextures[dword_507974].uTextureHeight : 26), + pBtn_QuickReference = pPrimaryWindow->CreateButton(0x230u, 0x1C2u, + (uTextureID_Btn_QuickReference != -1 ? pIcons_LOD->pTextures[uTextureID_Btn_QuickReference].uTextureWidth : 24), + (uTextureID_Btn_QuickReference != -1 ? pIcons_LOD->pTextures[uTextureID_Btn_QuickReference].uTextureHeight : 26), 1, 0, 0x6Au, 0, 0x5Au, pGlobalTXT_LocalizationStrings[173], - (Texture *)(dword_507974 != -1 ? &pIcons_LOD->pTextures[dword_507974] : 0), + (Texture *)(uTextureID_Btn_QuickReference != -1 ? &pIcons_LOD->pTextures[uTextureID_Btn_QuickReference] : 0), 0); - pBtn_GameSettings = pPrimaryWindow->CreateButton( - 0x25Au, - 0x1C2u, - (uTextureID_507970 != -1 ? pIcons_LOD->pTextures[uTextureID_507970].uTextureWidth : 24), - (uTextureID_507970 != -1 ? pIcons_LOD->pTextures[uTextureID_507970].uTextureHeight : 26), + pBtn_GameSettings = pPrimaryWindow->CreateButton(0x25Au, 0x1C2u, + (uTextureID_Btn_GameSettings != -1 ? pIcons_LOD->pTextures[uTextureID_Btn_GameSettings].uTextureWidth : 24), + (uTextureID_Btn_GameSettings != -1 ? pIcons_LOD->pTextures[uTextureID_Btn_GameSettings].uTextureHeight : 26), 1, 0, 0x6Bu, 0, 0, pGlobalTXT_LocalizationStrings[93], - (Texture *)(uTextureID_507970 != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_507970] : 0), + (Texture *)(uTextureID_Btn_GameSettings != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_Btn_GameSettings] : 0), 0); - pBtn_NPCLeft = pPrimaryWindow->CreateButton( - 0x1D5u, - 0xB2u, - (uTextureID_507990 != -1 ? pIcons_LOD->pTextures[uTextureID_507990].uTextureWidth : 24), - (uTextureID_507990 != -1 ? pIcons_LOD->pTextures[uTextureID_507990].uTextureHeight : 26), + pBtn_NPCLeft = pPrimaryWindow->CreateButton(0x1D5u, 0xB2u, + (uTextureID_Btn_NPCLeft != -1 ? pIcons_LOD->pTextures[uTextureID_Btn_NPCLeft].uTextureWidth : 24), + (uTextureID_Btn_NPCLeft != -1 ? pIcons_LOD->pTextures[uTextureID_Btn_NPCLeft].uTextureHeight : 26), 1, 0, 0xBCu, 0, 0, "", - (Texture *)(uTextureID_507990 != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_507990] : 0), + (Texture *)(uTextureID_Btn_NPCLeft != -1 ? &pIcons_LOD->pTextures[uTextureID_Btn_NPCLeft] : 0), 0); - pBtn_NPCRight = pPrimaryWindow->CreateButton( - 0x272u, - 0xB2u, - (uTextureID_50798C != -1 ? pIcons_LOD->pTextures[uTextureID_50798C].uTextureWidth : 24), - (uTextureID_50798C != -1 ? pIcons_LOD->pTextures[uTextureID_50798C].uTextureHeight : 26), + pBtn_NPCRight = pPrimaryWindow->CreateButton(0x272u, 0xB2u, + (uTextureID_Btn_NPCRight != -1 ? pIcons_LOD->pTextures[uTextureID_Btn_NPCRight].uTextureWidth : 24), + (uTextureID_Btn_NPCRight != -1 ? pIcons_LOD->pTextures[uTextureID_Btn_NPCRight].uTextureHeight : 26), 1, 0, 0xBCu, 1u, 0, "", - (Texture *)(uTextureID_50798C != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_50798C] : 0), + (Texture *)(uTextureID_Btn_NPCRight != -1 ? &pIcons_LOD->pTextures[uTextureID_Btn_NPCRight] : 0), 0); Load_isn_spells_21_27(); } @@ -2305,31 +2288,31 @@ //----- (0041D895) -------------------------------------------------------- -void __thiscall GameUI_DrawItemInfo(ItemGen *ecx0) +void GameUI_DrawItemInfo(ItemGen *ecx0) { ItemGen *v1; // esi@1 unsigned int v2; // eax@3 - char *v3; // edi@5 - unsigned int v4; // eax@5 - unsigned int v5; // esi@5 + //char *v3; // edi@5 + //unsigned int v4; // eax@5 + //unsigned int v5; // esi@5 signed int v6; // eax@5 int v7; // edx@5 ItemGen *v8; // ecx@10 - unsigned int v9; // eax@12 + //unsigned int v9; // eax@12 char v10; // zf@16 ItemGen *v11; // eax@16 ItemGen *v12; // eax@25 - unsigned int v13; // ecx@32 - unsigned int v14; // eax@32 - Render *v15; // edi@33 + //unsigned int v13; // ecx@32 + //unsigned int v14; // eax@32 + //Render *v15; // edi@33 const char *v16; // eax@34 int v17; // eax@36 int v18; // esi@37 unsigned __int16 v19; // ax@37 - char v20; // al@40 + //char v20; // al@40 char v21; // al@44 - char v22; // al@48 - char v23; // al@51 + //char v22; // al@48 + //char v23; // al@51 int v24; // eax@52 int v25; // eax@57 int v26; // eax@60 @@ -2349,28 +2332,28 @@ GUIFont *v40; // edx@113 signed int v41; // [sp-20h] [bp-298h]@113 int v42; // [sp-1Ch] [bp-294h]@113 - char *v43; // [sp-18h] [bp-290h]@46 + //char *v43; // [sp-18h] [bp-290h]@46 unsigned int v44; // [sp-18h] [bp-290h]@113 - int v45; // [sp-14h] [bp-28Ch]@46 + //int v45; // [sp-14h] [bp-28Ch]@46 const char *v46; // [sp-14h] [bp-28Ch]@58 char *v47; // [sp-14h] [bp-28Ch]@110 - char *v48; // [sp-10h] [bp-288h]@46 + //char *v48; // [sp-10h] [bp-288h]@46 const char *v49; // [sp-10h] [bp-288h]@56 char *v50; // [sp-10h] [bp-288h]@58 int v51; // [sp-10h] [bp-288h]@110 const char *v52; // [sp-Ch] [bp-284h]@36 - int v53; // [sp-Ch] [bp-284h]@46 + //int v53; // [sp-Ch] [bp-284h]@46 char *v54; // [sp-Ch] [bp-284h]@56 int v55; // [sp-Ch] [bp-284h]@58 int v56; // [sp-Ch] [bp-284h]@110 unsigned int v57; // [sp-8h] [bp-280h]@36 - int v58; // [sp-8h] [bp-280h]@46 + //int v58; // [sp-8h] [bp-280h]@46 int v59; // [sp-8h] [bp-280h]@56 int v60; // [sp-8h] [bp-280h]@58 unsigned int v61; // [sp-8h] [bp-280h]@110 - char a1[100]; // [sp+8h] [bp-270h]@40 - char Dest[100]; // [sp+6Ch] [bp-20Ch]@40 - char v64[100]; // [sp+D0h] [bp-1A8h]@40 + char a1[300]; // [sp+8h] [bp-270h]@40 + //char Dest[100]; // [sp+6Ch] [bp-20Ch]@40 + //char v64[100]; // [sp+D0h] [bp-1A8h]@40 char v65[120]; // [sp+134h] [bp-144h]@92 char Source[40]; // [sp+1ACh] [bp-CCh]@49 int v67; // [sp+1D4h] [bp-A4h]@91 @@ -2381,8 +2364,8 @@ int v72; // [sp+1ECh] [bp-8Ch]@91 int var88; // [sp+1F0h] [bp-88h]@1 Texture *v73; // [sp+1F4h] [bp-84h]@5 - unsigned int v75; // [sp+1F8h] [bp-80h]@5 - char *v76; // [sp+1FCh] [bp-7Ch]@5 + //unsigned int v75; // [sp+1F8h] [bp-80h]@5 + //char *v76; // [sp+1FCh] [bp-7Ch]@5 int v77; // [sp+200h] [bp-78h]@12 int v78; // [sp+204h] [bp-74h]@5 GUIWindow v79; // [sp+208h] [bp-70h]@2 @@ -2397,8 +2380,9 @@ _this = ecx0; var88 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0x9Bu); v82 = pFontComic; - if ( v1->uItemID ) - { + if (!v1->uItemID) + return; + v79.Hint = 0; v79.uFrameWidth = 384; v79.uFrameHeight = 180; @@ -2408,14 +2392,16 @@ else v2 = pMouse->GetCursorPos(&a2)->x - v79.uFrameWidth - 30; v79.uFrameX = v2; - v3 = (char *)&pItemsTable->pItems[_this->uItemID].pIconName; - v76 = v3; - v4 = pIcons_LOD->LoadTexture(*(const char **)v3, TEXTURE_16BIT_PALETTE); - v5 = v4; - v4 *= 72; - v75 = v4; - v73 = (struct Texture *)((char *)pIcons_LOD->pTextures + v4); - v6 = 100 - *(unsigned __int16 *)((char *)&pIcons_LOD->pTextures[0].uTextureWidth + v4); + auto item_desc = &pItemsTable->pItems[_this->uItemID]; + //v3 = (char *)&pItemsTable->pItems[_this->uItemID].pIconName; + //v76 = v3; + //v4 = pIcons_LOD->LoadTexture(pItemsTable->pItems[_this->uItemID].pIconName, TEXTURE_16BIT_PALETTE); + //v5 = v4; + //v4 *= 72; + //v75 = v4; + //v73 = &pIcons_LOD->pTextures[v4]; + v73 = pIcons_LOD->LoadTexturePtr(item_desc->pIconName, TEXTURE_16BIT_PALETTE); + v6 = 100 - v73->uTextureWidth; v7 = v73->uTextureHeight; v78 = v6; v81 = 144 - v7; @@ -2426,22 +2412,22 @@ else v81 >>= 1; v8 = _this; - if ( !v3[46] ) - _this->uAttributes |= 1u; - v9 = v8->uAttributes; + if ( !item_desc->uItemID_Rep_St ) + _this->SetIdentified(); + //v9 = v8->uAttributes; v77 = 0; - a2.y = v9 & 2; - if ( pItemsTable->pItems[v8->uItemID].uEquipType == 18 ) + //a2.y = v8->uAttributes & 2; + if (pItemsTable->pItems[v8->uItemID].uEquipType == EQUIP_GOLD) v77 = v8->uAdditionalValue; if ( uActiveCharacter ) { - if ( !(v9 & 1) ) + if (!v8->Identified()) { v10 = pPlayers[uActiveCharacter]->CanIdentify(_this) == 1; v11 = _this; if ( v10 ) - _this->uAttributes |= 1u; - v10 = (v11->uAttributes & 1) == 0; + _this->SetIdentified(); + v10 = !v11->Identified(); v83 = (char *)9; if ( v10 ) { @@ -2460,13 +2446,13 @@ } } _this->UpdateTempBonus(pParty->uTimePlayed); - if ( a2.y ) + if (v8->Broken()) { v10 = pPlayers[uActiveCharacter]->CanRepair(_this) == 1; v12 = _this; if ( v10 ) _this->uAttributes = _this->uAttributes & 0xFFFFFFFD | 1; - v10 = (v12->uAttributes & 2) == 0; + v10 = !v12->Broken(); v83 = (char *)SPEECH_11; if ( v10 ) v83 = (char *)SPEECH_10; @@ -2479,54 +2465,42 @@ } } } - v13 = _this->uAttributes; - v14 = _this->uAttributes & 1; - a2.y = _this->uAttributes & 1; - if ( v13 & 2 ) + //v13 = _this->uAttributes; + //v14 = _this->Identified(); + a2.y = _this->Identified(); + if (_this->Broken()) { v79.DrawMessageBox(0); //v15 = &; - pRenderer->Clip( - v79.uFrameX + 12, - v79.uFrameY + 12, - v79.uFrameX + v79.uFrameWidth - 12, - v79.uFrameY + v79.uFrameHeight - 12); + pRenderer->Clip(v79.uFrameX + 12, v79.uFrameY + 12, + v79.uFrameX + v79.uFrameWidth - 12, v79.uFrameY + v79.uFrameHeight - 12); v79.uFrameWidth -= 24; v79.uFrameHeight -= 12; v79.uFrameZ = v79.uFrameX + v79.uFrameWidth - 1; v79.uFrameW = v79.uFrameY + v79.uFrameHeight - 1; - pRenderer->_4A6776( - v79.uFrameX + v78, - v81 + v79.uFrameY + 30, - (Texture *)(v5 != -1 ? (int)((char *)pIcons_LOD->pTextures + v75) : 0)); + pRenderer->DrawTransparentRedShade(v79.uFrameX + v78, v81 + v79.uFrameY + 30, v73); if ( a2.y ) v16 = _this->GetIdentifiedName(); else - v16 = (const char *)*((int *)v76 + 2); + v16 = item_desc->pUnidentifiedName; v79.DrawTitleText(pFontArrus, 0, 0xCu, var88, v16, 3u); v17 = pFontArrus->CalcTextHeight(pGlobalTXT_LocalizationStrings[32], &v79, 0, 0); v57 = 3; v52 = pGlobalTXT_LocalizationStrings[32]; goto LABEL_37; } - if ( !v14 ) + if (!_this->Identified()) { v79.DrawMessageBox(0); - v15 = pRenderer; - pRenderer->Clip( - v79.uFrameX + 12, - v79.uFrameY + 12, - v79.uFrameX + v79.uFrameWidth - 12, - v79.uFrameY + v79.uFrameHeight - 12); + //v15 = pRenderer; + pRenderer->Clip(v79.uFrameX + 12, v79.uFrameY + 12, + v79.uFrameX + v79.uFrameWidth - 12, v79.uFrameY + v79.uFrameHeight - 12); v79.uFrameWidth -= 24; v79.uFrameHeight -= 12; v79.uFrameZ = v79.uFrameX + v79.uFrameWidth - 1; v79.uFrameW = v79.uFrameY + v79.uFrameHeight - 1; - pRenderer->DrawTextureTransparent( - v79.uFrameX + v78, - v81 + v79.uFrameY + 30, - (Texture *)(v5 != -1 ? (int)((char *)pIcons_LOD->pTextures + v75) : 0)); - v79.DrawTitleText(pFontArrus, 0, 0xCu, var88, *((const char **)v76 + 2), 3u); + pRenderer->DrawTextureTransparent(v79.uFrameX + v78, v81 + v79.uFrameY + 30, v73); + v79.DrawTitleText(pFontArrus, 0, 0xCu, var88, item_desc->pUnidentifiedName, 3u); v17 = pFontArrus->CalcTextHeight(pGlobalTXT_LocalizationStrings[232], &v79, 0, 0); v57 = 3; v52 = pGlobalTXT_LocalizationStrings[232]; @@ -2536,55 +2510,52 @@ v79.DrawTitleText(pFontArrus, 0x64u, ((signed int)v79.uFrameHeight >> 1) - v18, v19, v52, v57); goto LABEL_116; } - sprintf(a1, pGlobalTXT_LocalizationStrings[463], *((int *)v3 + 2)); - strcpy(Dest, ""); - strcpy(v64, ""); - v20 = v3[28]; - if ( (unsigned __int8)v20 <= 1u ) - { - v58 = (unsigned __int8)v3[31]; - v53 = (unsigned __int8)v3[30]; - v48 = pGlobalTXT_LocalizationStrings[53]; - v45 = (unsigned __int8)v3[32]; - v43 = pGlobalTXT_LocalizationStrings[18]; - } - else - { - if ( v20 != 2 ) - { - if ( (unsigned __int8)v20 > 2u ) + + sprintfex(a1, pGlobalTXT_LocalizationStrings[463], item_desc->pUnidentifiedName); + a1[100] = 0; + a1[200] = 0; + //v20 = item_desc->uEquipType; + switch (item_desc->uEquipType) + { + case EQUIP_ONE_OR_TWO_HANDS: + case EQUIP_TWO_HANDED: + sprintfex(a1 + 100, "%s: +%d %s: %dd%d", pGlobalTXT_LocalizationStrings[18], (int)item_desc->uDamageMod, pGlobalTXT_LocalizationStrings[53], (int)item_desc->uDamageDice, (int)item_desc->uDamageRoll); + if (item_desc->uDamageMod) { - if ( (unsigned __int8)v20 <= 0xBu ) - { - v21 = v3[30]; - if ( v21 ) - sprintf( - Dest, - "%s: +%d", - pGlobalTXT_LocalizationStrings[11], - (unsigned __int8)v21 + (unsigned __int8)v3[32]); - } + char mod[16]; + sprintf(mod, "+%d", (int)item_desc->uDamageMod); + strcat(a1 + 100, mod); + } + break; + + case EQUIP_BOW: + sprintfex(a1 + 100, "%s: +%d %s: %dd%d", pGlobalTXT_LocalizationStrings[203], (int)item_desc->uDamageMod, pGlobalTXT_LocalizationStrings[53], (int)item_desc->uDamageDice, (int)item_desc->uDamageRoll); + if (item_desc->uDamageMod) + { + char mod[16]; + sprintf(mod, "+%d", (int)item_desc->uDamageMod); + strcat(a1 + 100, mod); } - goto LABEL_50; - } - v58 = (unsigned __int8)v3[31]; - v53 = (unsigned __int8)v3[30]; - v48 = pGlobalTXT_LocalizationStrings[53]; - v45 = (unsigned __int8)v3[32]; - v43 = pGlobalTXT_LocalizationStrings[203]; - } - sprintf(Dest, "%s: +%d %s: %dd%d", v43, v45, v48, v53, v58); - v22 = v3[32]; - if ( v22 ) - { - sprintf(Source, " +%d", (unsigned __int8)v22); - strcat(Dest, Source); - } -LABEL_50: + break; + + case EQUIP_ARMOUR: + case EQUIP_SHIELD: + case EQUIP_HELMET: + case EQUIP_BELT: + case EQUIP_CLOAK: + case EQUIP_GAUNTLETS: + case EQUIP_BOOTS: + case EQUIP_RING: + case EQUIP_AMULET: + if (item_desc->uDamageDice) + sprintfex(a1 + 100, "%s: +%d", pGlobalTXT_LocalizationStrings[11], item_desc->uDamageDice + item_desc->uDamageMod); + break; + } + if ( v77 ) goto LABEL_65; - v23 = v3[28]; - if ( v23 == 14 ) + //v23 = item_desc->uEquipType; + if (item_desc->uEquipType == 14) { v24 = _this->_bonus_type; if ( v24 ) @@ -2607,7 +2578,7 @@ --a2.y; } while ( a2.y ); - v28 = (const char *)*((int *)v3 + 3); + v28 = item_desc->pDescription; if ( *v28 ) { v29 = pFontSmallnum->CalcTextHeight(v28, &v79, 100, 0); @@ -2633,12 +2604,9 @@ v79.uFrameW = v79.uFrameY + v79.uFrameHeight - 1; v79.uFrameZ = v79.uFrameX + v79.uFrameWidth - 1; v79.DrawMessageBox(0); - v15 = pRenderer; - pRenderer->Clip( - v79.uFrameX + 12, - v79.uFrameY + 12, - v79.uFrameX + v79.uFrameWidth - 12, - v79.uFrameY + v79.uFrameHeight - 12); + //v15 = pRenderer; + pRenderer->Clip(v79.uFrameX + 12, v79.uFrameY + 12, + v79.uFrameX + v79.uFrameWidth - 12, v79.uFrameY + v79.uFrameHeight - 12); v79.uFrameWidth -= 12; v32 = v73->uTextureHeight; v33 = v79.uFrameHeight; @@ -2648,7 +2616,7 @@ pRenderer->DrawTextureTransparent( v79.uFrameX + v78, v79.uFrameY + (signed int)(v33 - v32) / 2, - (Texture *)(v5 != -1 ? (int)((char *)pIcons_LOD->pTextures + v75) : 0)); + v73); a2.y = 3; v34 = (int)(v83 + 35); Str = a1; @@ -2663,7 +2631,7 @@ --a2.y; } while ( a2.y ); - v35 = (const char *)*((int *)v76 + 3); + v35 = item_desc->pDescription; if ( *v35 ) v79.DrawText(pFontSmallnum, 100, v34, 0, v35, 0, 0, 0); v79.uFrameX += 12; @@ -2744,7 +2712,7 @@ } return; } - if ( v23 == 13 ) + if (item_desc->uEquipType == 13) { v24 = pItemsTable->pItems[_this->uItemID].uDamageDice; LABEL_56: @@ -2752,7 +2720,7 @@ v54 = pGlobalTXT_LocalizationStrings[449]; v49 = "%s: %d"; LABEL_64: - sprintf(v64, v49, v54, v59); + sprintf(a1 + 200, v49, v54, v59); goto LABEL_65; } v25 = _this->_bonus_type; @@ -2782,9 +2750,8 @@ v50 = pGlobalTXT_LocalizationStrings[210]; v46 = "%s: %s"; } - sprintf(v64, v46, v50, v55, v60); + sprintf(a1 + 200, v46, v50, v55, v60); goto LABEL_65; - } } // 4E455C: using guessed type int dword_4E455C; // 506128: using guessed type int areWeLoadingTexture; @@ -2924,7 +2891,7 @@ else { memcpy(&pMonsterInfoUI_Doll, v3, sizeof(pMonsterInfoUI_Doll)); - pMonsterInfoUI_Doll.uCurrentActionAnimation = 7; + pMonsterInfoUI_Doll.uCurrentActionAnimation = ANIM_Bored; pMonsterInfoUI_Doll.uCurrentActionTime = 0; v8 = rand(); v3 = v121; @@ -2934,27 +2901,24 @@ if ( (signed int)pMonsterInfoUI_Doll.uCurrentActionTime > (signed __int16)v9 ) { pMonsterInfoUI_Doll.uCurrentActionTime = 0; - if ( pMonsterInfoUI_Doll.uCurrentActionAnimation == 7 || pMonsterInfoUI_Doll.uCurrentActionAnimation == 2 ) - { - pMonsterInfoUI_Doll.uCurrentActionAnimation = 0; + if ( pMonsterInfoUI_Doll.uCurrentActionAnimation == ANIM_Bored || pMonsterInfoUI_Doll.uCurrentActionAnimation == ANIM_AtkMelee) + { + pMonsterInfoUI_Doll.uCurrentActionAnimation = ANIM_Standing; pMonsterInfoUI_Doll.uCurrentActionLength = rand() % 128 + 128; } else { rand(); - pMonsterInfoUI_Doll.uCurrentActionAnimation = 7; + pMonsterInfoUI_Doll.uCurrentActionAnimation = ANIM_Bored; if ( (pMonsterInfoUI_Doll.pMonsterInfo.uID < 115 || pMonsterInfoUI_Doll.pMonsterInfo.uID > 186) && (pMonsterInfoUI_Doll.pMonsterInfo.uID < 232 || pMonsterInfoUI_Doll.pMonsterInfo.uID > 249) && rand() % 30 < 100 ) - pMonsterInfoUI_Doll.uCurrentActionAnimation = 2; - pMonsterInfoUI_Doll.uCurrentActionLength = 8 - * pSpriteFrameTable->pSpriteSFrames[v3->pSpriteIDs[(signed __int16)pMonsterInfoUI_Doll.uCurrentActionAnimation]].uAnimLength; - } - } - v10 = pSpriteFrameTable->GetFrame( - v3->pSpriteIDs[(signed __int16)pMonsterInfoUI_Doll.uCurrentActionAnimation], - pMonsterInfoUI_Doll.uCurrentActionTime); - v11 = pSprites_LOD[v10->pHwSpriteIDs[0]].pSpriteHeaders;//40 * v10->pHwSpriteIDs[0] + 7218180; + pMonsterInfoUI_Doll.uCurrentActionAnimation = ANIM_AtkMelee; + pMonsterInfoUI_Doll.uCurrentActionLength = 8 * pSpriteFrameTable->pSpriteSFrames[v3->pSpriteIDs[(signed __int16)pMonsterInfoUI_Doll.uCurrentActionAnimation]].uAnimLength; + } + } + v10 = pSpriteFrameTable->GetFrame( v3->pSpriteIDs[(signed __int16)pMonsterInfoUI_Doll.uCurrentActionAnimation], pMonsterInfoUI_Doll.uCurrentActionTime); + v11 = &pSprites_LOD->pSpriteHeaders[v10->pHwSpriteIDs[0]];//40 * v10->pHwSpriteIDs[0] + 7218180; v106.pTarget = pRenderer->pTargetSurface; v106.pTargetZ = pRenderer->pActiveZBuffer; v106.uTargetPitch = pRenderer->uTargetSurfacePitch; @@ -3095,7 +3059,7 @@ { v108 = (unsigned __int16 *)pDesc.lpSurface; a2 = (Player *)v124; - if ( v124 < v119 ) + if ( v124 < v119 ) { v109 = 2 * pRenderer->uTargetSurfacePitch; v29 = (int)a4; @@ -4282,7 +4246,7 @@ { Chest::PlaceItemAt((unsigned __int8)Dst[v6], v11, v10); if ( pChests[v3].uFlags & 4 ) - v12->uAttributes |= 1u; + v12->SetIdentified(); } } ++v11; @@ -4913,7 +4877,7 @@ pMouse->GetClickPos(&pX, &pY); if ( pX < 0 || (signed int)pX > 639 || pY < 0 || (signed int)pY > 479 )//( (pX & 0x80000000u) != 0 || (signed int)pX > 639 || (pY & 0x80000000u) != 0 || (signed int)pY > 479 ) return; - if ( !pCurrentScreen ) + if (pCurrentScreen == SCREEN_GAME) { if ( (signed int)pX > 467 || (signed int)pY > 351 ) goto _click_on_game_ui; @@ -6242,15 +6206,15 @@ pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[dword_5079D0], "IB-InitG-c", 2); pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[dword_5079C8], "IB-InitY-c", 2); pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[dword_5079CC], "IB-InitR-c", 2); - pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_507990], "IB-NPCLD-C", 2); - pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_50798C], "IB-NPCRD-C", 2); - pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_507980], "ib-autout-C", 2); - pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_507984], "ib-autin-C", 2); + pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_Btn_NPCLeft], "IB-NPCLD-C", 2); + pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_Btn_NPCRight], "IB-NPCRD-C", 2); + pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_Btn_ZoomIn], "ib-autout-C", 2); + pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_Btn_ZoomOut], "ib-autin-C", 2); pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[dword_50C98C], "IB-selec-C", 2); - pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_50797C], "ib-m1d-c", 2); - pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_507978], "ib-m2d-c", 2); - pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[dword_507974], "ib-m3d-c", 2); - pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_507970], "ib-m4d-c", 2); + pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_Btn_CastSpell], "ib-m1d-c", 2); + pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_Btn_Rest], "ib-m2d-c", 2); + pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_Btn_QuickReference], "ib-m3d-c", 2); + pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_Btn_GameSettings], "ib-m4d-c", 2); pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[dword_50796C], "isg-01-c", 2); pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[dword_507968], "isg-02-c", 2); pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[dword_507964], "isg-03-c", 2); @@ -6286,15 +6250,15 @@ dword_5079D0 = pIcons_LOD->LoadTexture("IB-InitG-c", TEXTURE_16BIT_PALETTE); dword_5079C8 = pIcons_LOD->LoadTexture("IB-InitY-c", TEXTURE_16BIT_PALETTE); dword_5079CC = pIcons_LOD->LoadTexture("IB-InitR-c", TEXTURE_16BIT_PALETTE); - uTextureID_507990 = pIcons_LOD->LoadTexture("IB-NPCLD-C", TEXTURE_16BIT_PALETTE); - uTextureID_50798C = pIcons_LOD->LoadTexture("IB-NPCRD-C", TEXTURE_16BIT_PALETTE); - uTextureID_507980 = pIcons_LOD->LoadTexture("ib-autout-C", TEXTURE_16BIT_PALETTE); - uTextureID_507984 = pIcons_LOD->LoadTexture("ib-autin-C", TEXTURE_16BIT_PALETTE); + uTextureID_Btn_NPCLeft = pIcons_LOD->LoadTexture("IB-NPCLD-C", TEXTURE_16BIT_PALETTE); + uTextureID_Btn_NPCRight = pIcons_LOD->LoadTexture("IB-NPCRD-C", TEXTURE_16BIT_PALETTE); + uTextureID_Btn_ZoomIn = pIcons_LOD->LoadTexture("ib-autout-C", TEXTURE_16BIT_PALETTE); + uTextureID_Btn_ZoomOut = pIcons_LOD->LoadTexture("ib-autin-C", TEXTURE_16BIT_PALETTE); dword_50C98C = pIcons_LOD->LoadTexture("IB-selec-C", TEXTURE_16BIT_PALETTE); - uTextureID_50797C = pIcons_LOD->LoadTexture("ib-m1d-c", TEXTURE_16BIT_PALETTE); - uTextureID_507978 = pIcons_LOD->LoadTexture("ib-m2d-c", TEXTURE_16BIT_PALETTE); - dword_507974 = pIcons_LOD->LoadTexture("ib-m3d-c", TEXTURE_16BIT_PALETTE); - uTextureID_507970 = pIcons_LOD->LoadTexture("ib-m4d-c", TEXTURE_16BIT_PALETTE); + uTextureID_Btn_CastSpell = pIcons_LOD->LoadTexture("ib-m1d-c", TEXTURE_16BIT_PALETTE); + uTextureID_Btn_Rest = pIcons_LOD->LoadTexture("ib-m2d-c", TEXTURE_16BIT_PALETTE); + uTextureID_Btn_QuickReference = pIcons_LOD->LoadTexture("ib-m3d-c", TEXTURE_16BIT_PALETTE); + uTextureID_Btn_GameSettings = pIcons_LOD->LoadTexture("ib-m4d-c", TEXTURE_16BIT_PALETTE); uTextureID_506438 = pIcons_LOD->LoadTexture("ib-bcu-c", TEXTURE_16BIT_PALETTE); dword_50796C = pIcons_LOD->LoadTexture("isg-01-c", TEXTURE_16BIT_PALETTE); dword_507968 = pIcons_LOD->LoadTexture("isg-02-c", TEXTURE_16BIT_PALETTE); @@ -6327,15 +6291,15 @@ pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[dword_5079D0], "IB-InitG-a", 2); pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[dword_5079C8], "IB-InitY-a", 2); pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[dword_5079CC], "IB-InitR-a", 2); - pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_507990], "IB-NPCLD-a", 2); - pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_50798C], "IB-NPCRD-a", 2); - pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_507980], "ib-autout-a", 2); - pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_507984], "ib-autin-a", 2); + pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_Btn_NPCLeft], "IB-NPCLD-a", 2); + pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_Btn_NPCRight], "IB-NPCRD-a", 2); + pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_Btn_ZoomIn], "ib-autout-a", 2); + pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_Btn_ZoomOut], "ib-autin-a", 2); pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[dword_50C98C], "IB-selec-a", 2); - pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_50797C], "ib-m1d-a", 2); - pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_507978], "ib-m2d-a", 2); - pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[dword_507974], "ib-m3d-a", 2); - pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_507970], "ib-m4d-a", 2); + pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_Btn_CastSpell], "ib-m1d-a", 2); + pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_Btn_Rest], "ib-m2d-a", 2); + pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_Btn_QuickReference], "ib-m3d-a", 2); + pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_Btn_GameSettings], "ib-m4d-a", 2); pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[dword_50796C], "isg-01-a", 2); pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[dword_507968], "isg-02-a", 2); pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[dword_507964], "isg-03-a", 2); @@ -6371,15 +6335,15 @@ dword_5079D0 = pIcons_LOD->LoadTexture("IB-InitG-a", TEXTURE_16BIT_PALETTE); dword_5079C8 = pIcons_LOD->LoadTexture("IB-InitY-a", TEXTURE_16BIT_PALETTE); dword_5079CC = pIcons_LOD->LoadTexture("IB-InitR-a", TEXTURE_16BIT_PALETTE); - uTextureID_507990 = pIcons_LOD->LoadTexture("IB-NPCLD-A", TEXTURE_16BIT_PALETTE); - uTextureID_50798C = pIcons_LOD->LoadTexture("IB-NPCRD-A", TEXTURE_16BIT_PALETTE); + uTextureID_Btn_NPCLeft = pIcons_LOD->LoadTexture("IB-NPCLD-A", TEXTURE_16BIT_PALETTE); + uTextureID_Btn_NPCRight = pIcons_LOD->LoadTexture("IB-NPCRD-A", TEXTURE_16BIT_PALETTE); dword_50C98C = pIcons_LOD->LoadTexture("IB-selec-A", TEXTURE_16BIT_PALETTE); - uTextureID_50797C = pIcons_LOD->LoadTexture("ib-m1d-a", TEXTURE_16BIT_PALETTE); - uTextureID_507978 = pIcons_LOD->LoadTexture("ib-m2d-a", TEXTURE_16BIT_PALETTE); - dword_507974 = pIcons_LOD->LoadTexture("ib-m3d-a", TEXTURE_16BIT_PALETTE); - uTextureID_507970 = pIcons_LOD->LoadTexture("ib-m4d-a", TEXTURE_16BIT_PALETTE); - uTextureID_507980 = pIcons_LOD->LoadTexture("ib-autout-a", TEXTURE_16BIT_PALETTE); - uTextureID_507984 = pIcons_LOD->LoadTexture("ib-autin-a", TEXTURE_16BIT_PALETTE); + uTextureID_Btn_CastSpell = pIcons_LOD->LoadTexture("ib-m1d-a", TEXTURE_16BIT_PALETTE); + uTextureID_Btn_Rest = pIcons_LOD->LoadTexture("ib-m2d-a", TEXTURE_16BIT_PALETTE); + uTextureID_Btn_QuickReference = pIcons_LOD->LoadTexture("ib-m3d-a", TEXTURE_16BIT_PALETTE); + uTextureID_Btn_GameSettings = pIcons_LOD->LoadTexture("ib-m4d-a", TEXTURE_16BIT_PALETTE); + uTextureID_Btn_ZoomIn = pIcons_LOD->LoadTexture("ib-autout-a", TEXTURE_16BIT_PALETTE); + uTextureID_Btn_ZoomOut = pIcons_LOD->LoadTexture("ib-autin-a", TEXTURE_16BIT_PALETTE); uTextureID_506438 = pIcons_LOD->LoadTexture("ib-bcu-a", TEXTURE_16BIT_PALETTE); dword_50796C = pIcons_LOD->LoadTexture("isg-01-a", TEXTURE_16BIT_PALETTE); dword_507968 = pIcons_LOD->LoadTexture("isg-02-a", TEXTURE_16BIT_PALETTE); @@ -6424,15 +6388,15 @@ pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[dword_5079D0], "IB-InitG-b", 2); pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[dword_5079C8], "IB-InitY-b", 2); pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[dword_5079CC], "IB-InitR-b", 2); - pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_507990], "IB-NPCLD-B", 2); - pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_50798C], "IB-NPCRD-B", 2); - pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_507980], "ib-autout-B", 2); - pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_507984], "ib-autin-B", 2); + pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_Btn_NPCLeft], "IB-NPCLD-B", 2); + pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_Btn_NPCRight], "IB-NPCRD-B", 2); + pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_Btn_ZoomIn], "ib-autout-B", 2); + pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_Btn_ZoomOut], "ib-autin-B", 2); pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[dword_50C98C], "IB-selec-B", 2); - pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_50797C], "ib-m1d-b", 2); - pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_507978], "ib-m2d-b", 2); - pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[dword_507974], "ib-m3d-b", 2); - pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_507970], "ib-m4d-b", 2); + pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_Btn_CastSpell], "ib-m1d-b", 2); + pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_Btn_Rest], "ib-m2d-b", 2); + pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_Btn_QuickReference], "ib-m3d-b", 2); + pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[uTextureID_Btn_GameSettings], "ib-m4d-b", 2); pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[dword_50796C], "isg-01-b", 2); pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[dword_507968], "isg-02-b", 2); pIcons_LOD->ReloadTexture(&pIcons_LOD->pTextures[dword_507964], "isg-03-b", 2); @@ -6652,7 +6616,7 @@ else { dword_50B700 = 0; - if ( !(v1->uAttributes & 1) ) + if ( !v1->TwoSided() ) return 0; } //v66 = v1->uNumVertices; diff -r e8fcde8ba3fc -r 405d0c4dd1b3 mm7_2.cpp --- a/mm7_2.cpp Wed Feb 20 20:50:22 2013 +0600 +++ b/mm7_2.cpp Wed Feb 20 20:51:55 2013 +0600 @@ -1446,7 +1446,7 @@ v85 = 0; v83 = 4; v4 = (ItemGen *)&_this->spellbook.pDarkSpellbook.bIsSpellAvailable[36 * (int)result + 5]; - if ( !(v4->uAttributes & 1) ) + if (!v4->Identified()) { v81 = ptr_507BC0->ptr_1C; v79 = v4; @@ -1845,7 +1845,7 @@ v93 = 0; v91 = 4; v37 = (ItemGen *)&_this->spellbook.pDarkSpellbook.bIsSpellAvailable[36 * (int)result + 5]; - if ( !(v37->uAttributes & 1) ) + if (!v37->Identified()) { v89 = ptr_507BC0->ptr_1C; v87 = v37; @@ -2894,7 +2894,7 @@ if ( v2 ) { v3 = (ItemGen *)&v0->pInventoryItems[v2-1]; - if ( v3->uAttributes & 1 ) + if (v3->Identified()) { v118 = ptr_507BC0->ptr_1C; v4 = uActiveCharacter - 1; @@ -4595,7 +4595,7 @@ if ( v25 ) { v26 = 1; - v20->uAttributes |= 1u; + v20->SetIdentified(); memcpy(&v0->pInventoryItems[v25-1], v20, 0x24u); goto LABEL_42; } @@ -4663,7 +4663,7 @@ v39 = v0->AddItem(0xFFFFFFFFu, v32->uItemID); if ( v39 ) { - v32->uAttributes |= 1u; + v32->SetIdentified(); v7 = v73 == 1; v40 = (int)((char *)v0 + 36 * v39); memcpy((void *)(v40 + 496), v32, 0x24u); @@ -7726,11 +7726,11 @@ pMonster->pMonsterInfo.uHostilityType = MonsterInfo::Hostility_Friendly; v32 = rand(); v33 = v32 % 2048; - v34 = stru_5C6E00->SinCos(v32 % 2048); + v34 = stru_5C6E00->Cos(v32 % 2048); a4 = v34; a3 = (unsigned __int64)(v34 * (signed __int64)v52) >> 16; pPosX = a3 + spawn->vPosition.x; - v35 = stru_5C6E00->SinCos(v33 - stru_5C6E00->uIntegerHalfPi); + v35 = stru_5C6E00->Sin(v33); a4 = v35; a3 = (unsigned __int64)(v35 * (signed __int64)v52) >> 16; a4 = a3 + spawn->vPosition.y; @@ -7844,8 +7844,8 @@ v6->pMonsterInfo.uExp = 0; v6->uMovementSpeed = v9; v10 = rand() % 2048; - v11 = ((unsigned __int64)(stru_5C6E00->SinCos(v10) * (signed __int64)v19) >> 16) + pParty->vPosition.x; - uFaceID = stru_5C6E00->SinCos(v10 - stru_5C6E00->uIntegerHalfPi); + v11 = ((unsigned __int64)(stru_5C6E00->Cos(v10) * (signed __int64)v19) >> 16) + pParty->vPosition.x; + uFaceID = stru_5C6E00->Sin(v10); v23 = (unsigned __int64)(uFaceID * (signed __int64)v19) >> 16; v12 = pParty->vPosition.y; v13 = (unsigned __int64)(uFaceID * (signed __int64)v19) >> 16; @@ -8003,7 +8003,7 @@ } v18 = v15; } - a1a.stru_24.uAttributes |= 1u; + a1a.stru_24.SetIdentified(); a1a.uObjectDescID = v18; a1a.stru_24.uAdditionalValue = v34; goto LABEL_35; @@ -8162,7 +8162,7 @@ } } LABEL_23: - v3->uAttributes |= 1u; + v3->SetIdentified(); v3->uAdditionalValue = v10; LABEL_25: v11 = v4 - 1; @@ -8375,10 +8375,10 @@ ++uFaceID; v6 = rand() % 1024 + 512; v7 = rand() % (signed int)stru_5C6E00->uIntegerDoublePi; - v20 = stru_5C6E00->SinCos(v7); + v20 = stru_5C6E00->Cos(v7); v23 = (unsigned __int64)(v20 * (signed __int64)v6) >> 16; v19.vPosition.x = pParty->vPosition.x + v23; - v20 = stru_5C6E00->SinCos(v7 - stru_5C6E00->uIntegerHalfPi); + v20 = stru_5C6E00->Sin(v7); v23 = (unsigned __int64)(v20 * (signed __int64)v6) >> 16; v8 = 0; v19.uIndex = v24; @@ -8401,7 +8401,7 @@ { v9 = abs(v19.vPosition.y - pOutdoor->pBModels[v8].vBoundingCenter.y); v10 = abs(v19.vPosition.x - pOutdoor->pBModels[v8].vBoundingCenter.x); - if ( sub_4621DA(v10, v9, 0) < pOutdoor->pBModels[v8].sBoundingRadius + 256 ) + if ( int_get_vector_length(v10, v9, 0) < pOutdoor->pBModels[v8].sBoundingRadius + 256 ) break; ++v23; ++v8; @@ -8431,11 +8431,11 @@ v12 = rand() % 512 + 256; v13 = rand(); v14 = v13 % (signed int)stru_5C6E00->uIntegerDoublePi; - v15 = stru_5C6E00->SinCos(v13 % (signed int)stru_5C6E00->uIntegerDoublePi); + v15 = stru_5C6E00->Cos(v13 % (signed int)stru_5C6E00->uIntegerDoublePi); v20 = v15; v23 = (unsigned __int64)(v15 * (signed __int64)v12) >> 16; v19.vPosition.x = pParty->vPosition.x + v23; - v16 = stru_5C6E00->SinCos(v14 - stru_5C6E00->uIntegerHalfPi); + v16 = stru_5C6E00->Sin(v13 % (signed int)stru_5C6E00->uIntegerDoublePi); v20 = v16; v23 = (unsigned __int64)(v16 * (signed __int64)v12) >> 16; v19.vPosition.y = v23 + pParty->vPosition.y; @@ -11466,7 +11466,7 @@ //----- (004621DA) -------------------------------------------------------- -int __fastcall sub_4621DA(signed int a1, signed int a2, signed int a3) +int __fastcall int_get_vector_length(signed int a1, signed int a2, signed int a3) { signed int v3; // eax@2 signed int v4; // eax@3 @@ -12916,7 +12916,6 @@ ReleaseDC(nullptr, hDesktopDC); - uint uTotalWinWidth = 2 * GetSystemMetrics(SM_CXFRAME) + 640; uint uTotalWinHeight = GetSystemMetrics(SM_CYCAPTION) + 2 * GetSystemMetrics(SM_CYFRAME) + 480; @@ -13570,7 +13569,7 @@ } if (!bNoSound && pAudioPlayer->hAILRedbook) { - pAudioPlayer->SetMusicVolume((pSoundVolumeLevels[uMusicVolimeMultiplier] * 64.0)); + pAudioPlayer->SetMusicVolume(pSoundVolumeLevels[uMusicVolimeMultiplier] * 64.0f); AIL_redbook_stop(pAudioPlayer->hAILRedbook); unsigned int end_ms; AIL_redbook_track_info(pAudioPlayer->hAILRedbook, 0xE, &startms, &end_ms); diff -r e8fcde8ba3fc -r 405d0c4dd1b3 mm7_3.cpp --- a/mm7_3.cpp Wed Feb 20 20:50:22 2013 +0600 +++ b/mm7_3.cpp Wed Feb 20 20:51:55 2013 +0600 @@ -138,7 +138,7 @@ { v11 = v9->pFloors[v10]; v12 = &pIndoor->pFaces[v11]; - if ( v12->uAttributes & 1 + if ( v12->TwoSided() || stru_721530.sMaxX > v12->pBounding.x2 || stru_721530.sMinX < v12->pBounding.x1 || stru_721530.sMaxY > v12->pBounding.y2 @@ -1017,7 +1017,7 @@ v0->uAIState = Removed; goto LABEL_121; } - if ( v0->uCurrentActionAnimation == 1 ) + if ( v0->uCurrentActionAnimation == ANIM_Walking ) { v8 = v0->uMovementSpeed; v9 = HIDWORD(v0->pActorBuffs[7].uExpireTime) == 0; @@ -1038,18 +1038,18 @@ v8 = (signed __int64)((double)v73 * flt_6BE3AC_debug_recmod1_x_1_6); if ( v8 > 1000 ) v8 = 1000; - v12 = stru_5C6E00->SinCos(v0->uYawAngle); + v12 = stru_5C6E00->Cos(v0->uYawAngle); v69 = v12; v13 = v12 * (signed __int64)v8; v73 = v13 >> 16; v0->vVelocity.x = WORD1(v13); - v69 = stru_5C6E00->SinCos(v0->uYawAngle - stru_5C6E00->uIntegerHalfPi); + v69 = stru_5C6E00->Sin(v0->uYawAngle); v73 = (unsigned __int64)((signed int)v69 * (signed __int64)v8) >> 16; v9 = v74 == 0; v0->vVelocity.y = v69 * v8 >> 16; if ( !v9 ) { - v14 = stru_5C6E00->SinCos(v0->uPitchAngle - stru_5C6E00->uIntegerHalfPi); + v14 = stru_5C6E00->Sin(v0->uPitchAngle); v69 = v14; v15 = v14 * (signed __int64)v8; v73 = v15 >> 16; @@ -1264,11 +1264,11 @@ v48 = stru_5C6E00->Atan2( v0->vPosition.x - pLevelDecorations[v39].vPosition.x, v0->vPosition.y - pLevelDecorations[v39].vPosition.y); - v71 = stru_5C6E00->SinCos(v48); + v71 = stru_5C6E00->Cos(v48); v70 = (unsigned __int64)(v71 * (signed __int64)v47) >> 16; - v49 = v48 - stru_5C6E00->uIntegerHalfPi; + v49 = v48; v0->vVelocity.x = (unsigned int)(v71 * v47) >> 16; - v50 = stru_5C6E00->SinCos(v49); + v50 = stru_5C6E00->Sin(v48); v71 = v50; v51 = v50 * (signed __int64)v47; v70 = v51 >> 16; @@ -1582,11 +1582,11 @@ v23 = stru_5C6E00->Atan2( v1->vPosition.x - pLevelDecorations[v15].vPosition.x, v1->vPosition.y - pLevelDecorations[v15].vPosition.y); - v42 = stru_5C6E00->SinCos(v23); + v42 = stru_5C6E00->Cos(v23); v41 = (unsigned __int64)(v42 * (signed __int64)v40) >> 16; - v24 = v23 - stru_5C6E00->uIntegerHalfPi; + v24 = v23; v1->vVelocity.x = (unsigned int)(v42 * v40) >> 16; - v25 = stru_5C6E00->SinCos(v24); + v25 = stru_5C6E00->Sin(v23); v42 = v25; v26 = v25 * (signed __int64)v40; v41 = v26 >> 16; @@ -2166,12 +2166,12 @@ v1->vPosition.x - pLevelDecorations[v30].vPosition.x, v1->vPosition.y - pLevelDecorations[v30].vPosition.y); v56 = v38; - v39 = stru_5C6E00->SinCos(v38); + v39 = stru_5C6E00->Cos(v38); v60 = (Actor *)v39; v40 = v39 * (signed __int64)v57; v58 = v40 >> 16; v1->vVelocity.x = WORD1(v40); - v41 = stru_5C6E00->SinCos(v56 - stru_5C6E00->uIntegerHalfPi); + v41 = stru_5C6E00->Sin(v56 - stru_5C6E00->uIntegerHalfPi); v60 = (Actor *)v41; v35 = (unsigned __int64)(v41 * (signed __int64)v57) >> 16; v58 = v35; @@ -2257,7 +2257,7 @@ goto LABEL_36; } v11 = v4->uLifetime; - if ( item->uAttributes & 2 ) + if (item->uAttributes & 2) v11 = *((short *)v2 + 1); if ( v8 < v11 ) { @@ -2603,45 +2603,45 @@ goto LABEL_87; case PARTY_StrafeLeft: __debugbreak(); - v17 = stru_5C6E00->SinCos(angle - stru_5C6E00->uIntegerHalfPi); + v17 = stru_5C6E00->Sin(angle); v18 = (double)v81; //v88 = v18; v78 = (unsigned __int64)(v17 * (signed __int64)((signed int)(signed __int64)(v18 * fWalkSpeedMultiplier) >> 1)) >> 16; v2 -= v78; - v19 = stru_5C6E00->SinCos(angle); + v19 = stru_5C6E00->Cos(angle); v78 = (unsigned __int64)(v19 * (signed __int64)((signed int)(signed __int64)(v18 * fWalkSpeedMultiplier) >> 1)) >> 16; goto LABEL_63; case PARTY_StrafeRight: __debugbreak(); - v20 = stru_5C6E00->SinCos(angle - stru_5C6E00->uIntegerHalfPi); + v20 = stru_5C6E00->Sin(angle); v21 = (double)v81; //v88 = v21; v78 = (unsigned __int64)(v20 * (signed __int64)((signed int)(signed __int64)(v21 * fWalkSpeedMultiplier) >> 1)) >> 16; v2 += v78; - v22 = stru_5C6E00->SinCos(angle); + v22 = stru_5C6E00->Cos(angle); v78 = (unsigned __int64)(v22 * (signed __int64)((signed int)(signed __int64)(v21 * fWalkSpeedMultiplier) >> 1)) >> 16; goto LABEL_68; case PARTY_WalkForward: __debugbreak(); - v23 = stru_5C6E00->SinCos(angle); + v23 = stru_5C6E00->Cos(angle); v24 = (double)v81; //v88 = v24; v78 = (unsigned __int64)(v23 * (signed __int64)(signed int)(signed __int64)(v24 * fWalkSpeedMultiplier)) >> 16; v2 += v78; - v25 = stru_5C6E00->SinCos(angle - stru_5C6E00->uIntegerHalfPi); + v25 = stru_5C6E00->Sin(angle); v78 = (unsigned __int64)(v25 * (signed __int64)(signed int)(signed __int64)(v24 * fWalkSpeedMultiplier)) >> 16; LABEL_63: v1 += v78; goto LABEL_64; case PARTY_WalkBackward: __debugbreak(); - v26 = stru_5C6E00->SinCos(angle); + v26 = stru_5C6E00->Cos(angle); v27 = (double)v81; //v88 = v27; v78 = (unsigned __int64)(v26 * (signed __int64)(signed int)(signed __int64)(v27 * fBackwardWalkSpeedMultiplier)) >> 16; v2 -= v78; - v28 = stru_5C6E00->SinCos(angle - stru_5C6E00->uIntegerHalfPi); + v28 = stru_5C6E00->Sin(angle); v78 = (unsigned __int64)(v28 * (signed __int64)(signed int)(signed __int64)(v27 * fBackwardWalkSpeedMultiplier)) >> 16; LABEL_68: @@ -2650,21 +2650,21 @@ v78 = 1; goto LABEL_87; case PARTY_RunForward: - //v29 = stru_5C6E00->SinCos(angle); + //v29 = stru_5C6E00->Cos(angle); //v30 = (double)v81; //v88 = (double)v81; - v2 += (unsigned __int64)(stru_5C6E00->SinCos(angle) * (signed __int64)(signed int)(2 * (unsigned __int64)(signed __int64)((double)v81 * fWalkSpeedMultiplier))) >> 16; + v2 += (unsigned __int64)(stru_5C6E00->Cos(angle) * (signed __int64)(signed int)(2 * (unsigned __int64)(signed __int64)((double)v81 * fWalkSpeedMultiplier))) >> 16; //v31 = stru_5C6E00->SinCos(angle - stru_5C6E00->uIntegerHalfPi); - v1 += (unsigned __int64)(stru_5C6E00->SinCos(angle - stru_5C6E00->uIntegerHalfPi) * (signed __int64)(signed int)(2 * (unsigned __int64)(signed __int64)((double)v81 * fWalkSpeedMultiplier))) >> 16; + v1 += (unsigned __int64)(stru_5C6E00->Sin(angle) * (signed __int64)(signed int)(2 * (unsigned __int64)(signed __int64)((double)v81 * fWalkSpeedMultiplier))) >> 16; v72 = 1; goto LABEL_87; case PARTY_RunBackward: //v32 = stru_5C6E00->SinCos(angle); //v33 = (double)v81; //v88 = (double)v81; - v2 -= (unsigned __int64)(stru_5C6E00->SinCos(angle) * (signed __int64)(signed int)(signed __int64)((double)v81 * fBackwardWalkSpeedMultiplier)) >> 16; + v2 -= (unsigned __int64)(stru_5C6E00->Cos(angle) * (signed __int64)(signed int)(signed __int64)((double)v81 * fBackwardWalkSpeedMultiplier)) >> 16; //v34 = stru_5C6E00->SinCos(angle - stru_5C6E00->uIntegerHalfPi); - v1 -= (unsigned __int64)(stru_5C6E00->SinCos(angle - stru_5C6E00->uIntegerHalfPi) * (signed __int64)(signed int)(signed __int64)((double)v81 * fBackwardWalkSpeedMultiplier)) >> 16; + v1 -= (unsigned __int64)(stru_5C6E00->Sin(angle) * (signed __int64)(signed int)(signed __int64)((double)v81 * fBackwardWalkSpeedMultiplier)) >> 16; //LABEL_70: v72 = 1; goto LABEL_87; @@ -2830,8 +2830,8 @@ v54 = stru_5C6E00->Atan2( new_party_x - pLevelDecorations[stru_721530.uFaceID >> 3].vPosition.x, new_party_y - pLevelDecorations[stru_721530.uFaceID >> 3].vPosition.y); - v2 = (unsigned __int64)(stru_5C6E00->SinCos(v54) * (signed __int64)v53) >> 16; - v55 = stru_5C6E00->SinCos(v54 - stru_5C6E00->uIntegerHalfPi); + v2 = (unsigned __int64)(stru_5C6E00->Cos(v54) * (signed __int64)v53) >> 16; + v55 = stru_5C6E00->Sin(v54); v1 = (unsigned __int64)(v55 * (signed __int64)v80) >> 16; } else @@ -3552,7 +3552,7 @@ { LABEL_130: v31 = GetTickCount(); - v126 = stru_5C6E00->SinCos(v31); + v126 = stru_5C6E00->Cos(v31); v129 = (unsigned __int64)(4i64 * v126) >> 16; v123 = v113 + v129; if ( v127 ) @@ -3762,12 +3762,12 @@ _angle_x - pLevelDecorations[(signed int)stru_721530.uFaceID >> 3].vPosition.x, _angle_y - pLevelDecorations[(signed int)stru_721530.uFaceID >> 3].vPosition.y); v129 = v57; - v58 = (BSPModel *)stru_5C6E00->SinCos(v57); + v58 = (BSPModel *)stru_5C6E00->Cos(v57); v127 = v58; v59 = (signed int)v58 * (signed __int64)v56; v122 = v59 >> 16; v2 = v59 >> 16; - v60 = (BSPModel *)stru_5C6E00->SinCos(v129 - stru_5C6E00->uIntegerHalfPi); + v60 = (BSPModel *)stru_5C6E00->Sin(v129); v127 = v60; v61 = (signed int)v60 * (signed __int64)v118; v122 = v61 >> 16; @@ -4596,7 +4596,7 @@ v6 = (unsigned __int64)(a2->z * (signed __int64)v4->pFacePlane_old.vNormal.z) >> 16, v7 = v5 + v6 + a4b, (v16 = v5 + v6 + a4b) == 0) - || v7 > 0 && !(v4->uAttributes & 1) ) + || v7 > 0 && !v4->TwoSided()) return 0; v8 = v4->pFacePlane_old.vNormal.z * a1->z; v9 = -(v4->pFacePlane_old.dist + v8 + a1->y * v4->pFacePlane_old.vNormal.y + a1->x * v4->pFacePlane_old.vNormal.x); @@ -4656,7 +4656,7 @@ v14 = v10 + v12 + v11, v22 = v10 + v12 + v11, v13) - || v14 > 0 && !(a2->uAttributes & 1) ) + || v14 > 0 && !a2->TwoSided()) return 0; v15 = a4 * a2->pFacePlane_old.vNormal.y; v16 = -(a2->pFacePlane_old.dist + v15 + a3 * a2->pFacePlane_old.vNormal.x + a5 * a2->pFacePlane_old.vNormal.z); @@ -5140,11 +5140,10 @@ v31 = 3; do { - v40 = (double)stru_5C6E00->SinCos(pIndoorCamera->sRotationX) * 0.0000152587890625; - v32 = (double)stru_5C6E00->SinCos(pIndoorCamera->sRotationX - stru_5C6E00->uIntegerHalfPi) - * 0.0000152587890625; - v34 = (double)stru_5C6E00->SinCos(pIndoorCamera->sRotationY) * 0.0000152587890625; - v16 = stru_5C6E00->SinCos(pIndoorCamera->sRotationY - stru_5C6E00->uIntegerHalfPi); + v40 = (double)stru_5C6E00->Cos(pIndoorCamera->sRotationX) * 0.0000152587890625; + v32 = (double)stru_5C6E00->Sin(pIndoorCamera->sRotationX) * 0.0000152587890625; + v34 = (double)stru_5C6E00->Cos(pIndoorCamera->sRotationY) * 0.0000152587890625; + v16 = stru_5C6E00->Sin(pIndoorCamera->sRotationY); LODWORD(v38) = *(int *)v15; v33 = (double)v16 * 0.0000152587890625; //UNDEF(v17); @@ -6190,7 +6189,7 @@ // 73C830: using guessed type char static_sub_004789DE_byte_73C830__init_flag; //----- (00479089) -------------------------------------------------------- -bool __fastcall IsBModelVisible(unsigned int uModelID, int *unused) +bool __fastcall IsBModelVisible(unsigned int uModelID, int *reachable) { BSPModel *v2; // eax@1 int v3; // edi@1 @@ -6200,30 +6199,30 @@ int v7; // ebx@3 int v8; // eax@3 int v9; // eax@3 - int v10; // ebx@3 + //int v10; // ebx@3 signed int v11; // esi@6 int v12; // esi@8 bool result; // eax@9 - unsigned int v14; // [sp+Ch] [bp-20h]@1 + //unsigned int v14; // [sp+Ch] [bp-20h]@1 int v15; // [sp+Ch] [bp-20h]@5 - int *v16; // [sp+10h] [bp-1Ch]@1 + //int *v16; // [sp+10h] [bp-1Ch]@1 int v17; // [sp+1Ch] [bp-10h]@1 int v18; // [sp+20h] [bp-Ch]@1 int v19; // [sp+20h] [bp-Ch]@3 int angle; // [sp+24h] [bp-8h]@1 int v21; // [sp+28h] [bp-4h]@1 - int v22; // [sp+28h] [bp-4h]@3 - - v16 = unused; + //int v22; // [sp+28h] [bp-4h]@3 + + //v16 = unused; angle = (signed int)(pOutdoorCamera->uCameraFovInDegrees << 11) / 360 >> 1; - v14 = uModelID; + //v14 = uModelID; v2 = &pOutdoor->pBModels[uModelID]; v3 = v2->vBoundingCenter.x - pIndoorCamera->pos.x; v4 = v2->vBoundingCenter.y - pIndoorCamera->pos.y; - v5 = stru_5C6E00->SinCos(pIndoorCamera->sRotationY); - v21 = stru_5C6E00->SinCos(pIndoorCamera->sRotationY - stru_5C6E00->uIntegerHalfPi); - v18 = stru_5C6E00->SinCos(pIndoorCamera->sRotationX); - stru_5C6E00->SinCos(pIndoorCamera->sRotationX - stru_5C6E00->uIntegerHalfPi); + v5 = stru_5C6E00->Cos(pIndoorCamera->sRotationY); + v21 = stru_5C6E00->Sin(pIndoorCamera->sRotationY); + v18 = stru_5C6E00->Cos(pIndoorCamera->sRotationX); + stru_5C6E00->Sin(pIndoorCamera->sRotationX); v6 = v5; v17 = v3 * v5 + v4 * v21; if ( pIndoorCamera->sRotationX ) @@ -6231,38 +6230,31 @@ v19 = v4 * v6 - v3 * v21; v7 = abs(v4); v8 = abs(v3); - v9 = sub_4621DA(v8, v7, 0); - v10 = v14 * 188; - v22 = v9; - *v16 = 0; - if ( v9 < pOutdoor->pBModels[v14].sBoundingRadius + 256 ) - *v16 = 1; - v15 = stru_5C6E00->SinCos(angle - stru_5C6E00->uIntegerHalfPi); + v9 = int_get_vector_length(v8, v7, 0); + //v10 = v14 * 188; + //v22 = v9; + *reachable = false; + if ( v9 < pOutdoor->pBModels[uModelID].sBoundingRadius + 256 ) + *reachable = true; + v15 = stru_5C6E00->Sin(angle); if ( v19 >= 0 ) - v11 = ((unsigned __int64)(v15 * (signed __int64)v17) >> 16) - - ((unsigned __int64)(stru_5C6E00->SinCos(angle) * (signed __int64)v19) >> 16); - else - v11 = ((unsigned __int64)(stru_5C6E00->SinCos(angle) * (signed __int64)v19) >> 16) - + ((unsigned __int64)(v15 * (signed __int64)v17) >> 16); + v11 = ((unsigned __int64)(v15 * (signed __int64)v17) >> 16) - ((unsigned __int64)(stru_5C6E00->Cos(angle) * (signed __int64)v19) >> 16); + else + v11 = ((unsigned __int64)(stru_5C6E00->Cos(angle) * (signed __int64)v19) >> 16) + ((unsigned __int64)(v15 * (signed __int64)v17) >> 16); v12 = v11 >> 16; - if ( v22 <= pOutdoorCamera->shading_dist_mist + 2048 ) + if ( v9 <= pOutdoorCamera->shading_dist_mist + 2048 ) { //if ( abs(v12) > *(int *)((char *)&pOutdoor->pBModels->sBoundingRadius + v10) + 512 ) - if ( abs(v12) > *(int *)((char *)&pOutdoor->pBModels[v14].sBoundingRadius) + 512 ) + if ( abs(v12) > pOutdoor->pBModels[uModelID].sBoundingRadius + 512 ) { result = v12 < 0; LOBYTE(result) = v12 >= 0; - } - else - { - result = 1; - } - } - else - { - result = 0; - } - return result; + return result; + } + else + return true; + } + return false; } @@ -6947,9 +6939,9 @@ _this.field_58 = 0; _this.uNumVertices = 4; - _this.v_18.x = -stru_5C6E00->SinCos(pIndoorCamera->sRotationX - stru_5C6E00->uIntegerHalfPi + 16); + _this.v_18.x = -stru_5C6E00->Sin(pIndoorCamera->sRotationX + 16); _this.v_18.y = 0; - _this.v_18.z = -stru_5C6E00->SinCos(pIndoorCamera->sRotationX + 16); + _this.v_18.z = -stru_5C6E00->Cos(pIndoorCamera->sRotationX + 16); _this.field_24 = 0x2000000; _this.sTextureDeltaU = 224 * pMiscTimer->uTotalGameTimeElapsed; @@ -7205,10 +7197,10 @@ v8 = pBLVRenderParams->sPartyRotX; v62.field_58 = 0; v62.uNumVertices = v3; - v9 = stru_5C6E00->SinCos(pBLVRenderParams->sPartyRotX - stru_5C6E00->uIntegerHalfPi + 16); + v9 = stru_5C6E00->Sin(pBLVRenderParams->sPartyRotX + 16); v62.v_18.y = 0; v62.v_18.x = -v9; - v62.v_18.z = -stru_5C6E00->SinCos(v8 + 16); + v62.v_18.z = -stru_5C6E00->Cos(v8 + 16); v10 = pBLVRenderParams->uViewportZ - pBLVRenderParams->uViewportX; memcpy(&array_507D30[v3], array_507D30, sizeof(array_507D30[v3])); LODWORD(v80) = v10; @@ -9795,8 +9787,8 @@ v79 = (signed int)(v63 + ((unsigned __int64)(v79 * (signed __int64)v39) >> 16) - v5->ptr_38->field_28) >> v76; a1.field_4 = (v43 - v30) >> 4; a1.field_0 = (v79 - v68) >> 4; - a1.field_30 = v30 + 4 * stru_5C6E00->SinCos(v81 + (v68 >> v66)); - v44 = stru_5C6E00->SinCos(v81 + (v30 >> v66) - stru_5C6E00->uIntegerHalfPi); + a1.field_30 = v30 + 4 * stru_5C6E00->Cos(v81 + (v68 >> v66)); + v44 = stru_5C6E00->Sin(v81 + (v30 >> v66)); a1.field_2C = v68 + 4 * v44; if ( byte_4D864C && BYTE1(pGame->uFlags) & 8 ) sr_sub_485975(&a1, (stru315 *)&a2); @@ -9815,8 +9807,8 @@ if ( !v72 ) return 1; v66 = 12 - v75; - a1.field_30 = v30 + 4 * stru_5C6E00->SinCos(v81 + (v31 >> (12 - v75))); - v46 = stru_5C6E00->SinCos(v81 + (v30 >> v66) - stru_5C6E00->uIntegerHalfPi); + a1.field_30 = v30 + 4 * stru_5C6E00->Cos(v81 + (v31 >> (12 - v75))); + v46 = stru_5C6E00->Sin(v81 + (v30 >> v66)); a1.field_2C = v68 + 4 * v46; v79 = v5->v_18.y; v80 = (unsigned __int64)(v79 * (signed __int64)v73) >> 16; @@ -9943,8 +9935,8 @@ v42 = v3->v_18.z; v44 = (unsigned __int64)(v42 * (signed __int64)v4) >> 16; v9 = v44 + v3->v_18.x; - v35 = stru_5C6E00->SinCos(pIndoorCamera->sRotationY - stru_5C6E00->uIntegerHalfPi); - v10 = stru_5C6E00->SinCos(pIndoorCamera->sRotationY); + v35 = stru_5C6E00->Sin(pIndoorCamera->sRotationY); + v10 = stru_5C6E00->Cos(pIndoorCamera->sRotationY); v11 = v2->field_8; v36 = v10; a1.field_28 = v2->field_C; @@ -10121,8 +10113,8 @@ v39 = v3->v_18.z; v40 = (unsigned __int64)(v39 * (signed __int64)v4) >> 16; v9 = v40 + v3->v_18.x; - v32 = stru_5C6E00->SinCos(pIndoorCamera->sRotationY - stru_5C6E00->uIntegerHalfPi); - v10 = stru_5C6E00->SinCos(pIndoorCamera->sRotationY); + v32 = stru_5C6E00->Sin(pIndoorCamera->sRotationY); + v10 = stru_5C6E00->Cos(pIndoorCamera->sRotationY); v11 = v2->field_8; v33 = v10; v35.field_28 = v2->field_C; @@ -10764,11 +10756,11 @@ a1a.field_C = v32 - 1; i = (unsigned __int64)(pOutdoorCamera->int_fov_rad_inv * (signed __int64)i) >> 16; v47 = (Span *)(i >> v44); - v35 = stru_5C6E00->SinCos(pIndoorCamera->sRotationY - stru_5C6E00->uIntegerHalfPi); + v35 = stru_5C6E00->Sin(pIndoorCamera->sRotationY); v36 = (signed int)v47 * (signed __int64)v35; i = v36 >> 16; a1a.field_4 = v36 >> 16; - v37 = stru_5C6E00->SinCos(pIndoorCamera->sRotationY); + v37 = stru_5C6E00->Cos(pIndoorCamera->sRotationY); v38 = (signed int)v47 * (signed __int64)v37; i = v38 >> 16; a1a.field_0 = v38 >> 16; @@ -10778,8 +10770,8 @@ v39 = 12 - v49; for ( i = 12 - v49; ; v39 = i ) { - a1a.field_30 = v30 + 4 * stru_5C6E00->SinCos(X + (v31 >> v39)); - a1a.field_2C = v31 + 4 * stru_5C6E00->SinCos(X + (v30 >> i) - stru_5C6E00->uIntegerHalfPi); + a1a.field_30 = v30 + 4 * stru_5C6E00->Cos(X + (v31 >> v39)); + a1a.field_2C = v31 + 4 * stru_5C6E00->Sin(X + (v30 >> i)); if ( byte_4D864C && BYTE1(pGame->uFlags) & 8 ) sr_sub_485975(&a1a, (stru315 *)&a2); else @@ -10795,8 +10787,8 @@ if ( v48 ) { i = 12 - v49; - a1a.field_30 = v30 + 4 * stru_5C6E00->SinCos(X + (v31 >> (12 - v49))); - a1a.field_2C = v31 + 4 * stru_5C6E00->SinCos(X + (v30 >> i) - stru_5C6E00->uIntegerHalfPi); + a1a.field_30 = v30 + 4 * stru_5C6E00->Cos(X + (v31 >> (12 - v49))); + a1a.field_2C = v31 + 4 * stru_5C6E00->Sin(X + (v30 >> i)); a1a.field_28 = v48; if ( byte_4D864C && BYTE1(pGame->uFlags) & 8 ) sr_sub_485975(&a1a, (stru315 *)&a2); @@ -11388,10 +11380,10 @@ //----- (0048600E) -------------------------------------------------------- void OutdoorCamera::RotationToInts() { - camera_rotation_y_int_sine = stru_5C6E00->SinCos(pIndoorCamera->sRotationY - stru_5C6E00->uIntegerHalfPi); - camera_rotation_y_int_cosine = stru_5C6E00->SinCos(pIndoorCamera->sRotationY); - camera_rotation_x_int_sine = stru_5C6E00->SinCos(pIndoorCamera->sRotationX - stru_5C6E00->uIntegerHalfPi); - camera_rotation_x_int_cosine = stru_5C6E00->SinCos(pIndoorCamera->sRotationX); + camera_rotation_y_int_sine = stru_5C6E00->Sin(pIndoorCamera->sRotationY); + camera_rotation_y_int_cosine = stru_5C6E00->Cos(pIndoorCamera->sRotationY); + camera_rotation_x_int_sine = stru_5C6E00->Sin(pIndoorCamera->sRotationX); + camera_rotation_x_int_cosine = stru_5C6E00->Cos(pIndoorCamera->sRotationX); } @@ -11589,10 +11581,10 @@ int v31; // [sp+3Ch] [bp+14h]@10 v7 = this; - v8 = stru_5C6E00->SinCos(pBLVRenderParams->sPartyRotY); - v29 = stru_5C6E00->SinCos(pBLVRenderParams->sPartyRotY - stru_5C6E00->uIntegerHalfPi); - v28 = stru_5C6E00->SinCos(pBLVRenderParams->sPartyRotX); - v9 = stru_5C6E00->SinCos(pBLVRenderParams->sPartyRotX - stru_5C6E00->uIntegerHalfPi); + v8 = stru_5C6E00->Cos(pBLVRenderParams->sPartyRotY); + v29 = stru_5C6E00->Sin(pBLVRenderParams->sPartyRotY); + v28 = stru_5C6E00->Cos(pBLVRenderParams->sPartyRotX); + v9 = stru_5C6E00->Sin(pBLVRenderParams->sPartyRotX); v11 = -pBLVRenderParams->vPartyPos.y; v26 = -pBLVRenderParams->vPartyPos.x; v27 = v9; @@ -12384,7 +12376,7 @@ + pBLVRenderParams->vPartyPos.x * v4->pFacePlane_old.vNormal.x + pBLVRenderParams->vPartyPos.y * v4->pFacePlane_old.vNormal.y + pBLVRenderParams->vPartyPos.z * v4->pFacePlane_old.vNormal.z; - if ( v4->uAttributes & 1 && v4->uSectorID != v12->uSectorID ) + if (v4->TwoSided() && v4->uSectorID != v12->uSectorID ) v5 = -v5; v11 = v5 > 0; if ( v5 <= 0 ) @@ -13599,10 +13591,7 @@ else v50 = 1; } - pRenderer->_4A6776( - v47, - v49, - (Texture *)(pTextureIDs_pMapDirs[v50] != -1 ? (int)&pIcons_LOD->pTextures[pTextureIDs_pMapDirs[v50]] : 0)); + pRenderer->DrawTransparentRedShade(v47, v49, (Texture *)(pTextureIDs_pMapDirs[v50] != -1 ? (int)&pIcons_LOD->pTextures[pTextureIDs_pMapDirs[v50]] : 0)); } result = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0xFFu); v95 = 0; @@ -14163,62 +14152,6 @@ } -//----- (00443CE1) -------------------------------------------------------- -unsigned int LoadEventsToBuffer(const char *pContainerName, char *pBuffer, unsigned int uBufferSize) -{ - FILE *pLodFile; // eax@1 - unsigned int uTextureSize; // esi@3 - char Args[60]; // [sp+8h] [bp-B4h]@6 - void *ptr; // [sp+B8h] [bp-4h]@1 - Texture DstBuf; // [sp+6Ch] [bp-50h]@1 - - ptr = pEvents_LOD->LoadRaw(pContainerName, 0); - pLodFile = pEvents_LOD->FindContainer(pContainerName, 0); - if ( !pLodFile ) - Abortf("Unable to load %s", pContainerName); - fread(&DstBuf, 1, 48, pLodFile); - uTextureSize = DstBuf.uDecompressedSize; - if ( !DstBuf.uDecompressedSize ) - uTextureSize = DstBuf.uTextureSize; - memset(&DstBuf, 0, 72); - if ( uTextureSize >= (signed int)uBufferSize ) - { - sprintf(Args, "File %s Size %lu - Buffer size %lu", pContainerName, uTextureSize, uBufferSize); - Abortf(Args); - } - memcpy(pBuffer, ptr, uTextureSize); - pAllocator->FreeChunk(ptr); - return uTextureSize; -} - -//----- (00443DA1) -------------------------------------------------------- -void __cdecl Initialize_GlobalEVT() -{ - signed int v0; // esi@1 - unsigned int v1; // ecx@2 - char *v2; // eax@2 - - v0 = 0; - uGlobalEVT_Size = LoadEventsToBuffer("global.evt", pGlobalEVT, 0xB400u); - if ( uGlobalEVT_Size ) - { - uGlobalEVT_NumEvents = 0; - memset(pGlobalEVT_Events, 128, 0xCE40u); - v1 = uGlobalEVT_NumEvents; - v2 = (char *)&pGlobalEVT_Events[uGlobalEVT_NumEvents].field_4; - do - { - ++v1; - *((int *)v2 - 1) = (unsigned __int8)pGlobalEVT[v0 + 1] + ((unsigned __int8)pGlobalEVT[v0 + 2] << 8); - *(int *)v2 = (unsigned __int8)pGlobalEVT[v0 + 3]; - *((int *)v2 + 1) = v0; - v2 += 12; - v0 += (unsigned __int8)pGlobalEVT[v0] + 1; - } - while ( v0 < (signed int)uGlobalEVT_Size ); - uGlobalEVT_NumEvents = v1; - } -} //----- (00443E31) -------------------------------------------------------- void __cdecl LoadLevel_InitializeLevelStr() @@ -14279,28 +14212,6 @@ } } -//----- (00443EF8) -------------------------------------------------------- -void __cdecl LoadLevel_InitializeLevelEvt() -{ - if (!uLevelEVT_Size) - return; - - memset(array_5B5928, 0, 0xC80u); - memset(pLevelEVT_Events, 128, 0xCE40u); - - uLevelEVT_NumEvents = 0; - dword_5B65C8 = 0; - - for (uint i = 0, j = 0; j < uLevelEVT_Size; ++i) - { - pLevelEVT_Events[i].uEventID = pLevelEVT[j + 1] + ((unsigned short)pLevelEVT[j + 2] << 8); - pLevelEVT_Events[i].field_4 = pLevelEVT[j + 3]; - pLevelEVT_Events[i].uEventOffsetInEVT = j; - j += pLevelEVT[j] + 1; - - uLevelEVT_NumEvents++; - } -} //----- (00443F95) -------------------------------------------------------- void __cdecl OnMapLeave() @@ -14312,7 +14223,7 @@ v0 = 0; if ( (signed int)uLevelEVT_NumEvents > 0 ) { - v1 = (char *)&pLevelEVT_Events[0].field_4; + v1 = (char *)&pLevelEVT_Index[0].event_sequence_num; do { if ( pLevelEVT[*((short *)v1 + 2) + 4] == 53 ) @@ -14346,15 +14257,15 @@ signed __int64 v14; // qax@26 int v15; // ST58_4@26 signed __int64 v16; // qax@26 - int v17; // ebx@26 + int hours; // ebx@26 unsigned __int64 v18; // [sp+Ch] [bp-44h]@12 - signed __int64 v19; // [sp+14h] [bp-3Ch]@26 + signed __int64 seconds; // [sp+14h] [bp-3Ch]@26 unsigned __int64 v20; // [sp+1Ch] [bp-34h]@7 - int v22; // [sp+2Ch] [bp-24h]@26 - int v24; // [sp+34h] [bp-1Ch]@26 - int v25; // [sp+38h] [bp-18h]@26 + int minutes; // [sp+2Ch] [bp-24h]@26 + int month; // [sp+34h] [bp-1Ch]@26 + int weeks; // [sp+38h] [bp-18h]@26 int v26; // [sp+3Ch] [bp-14h]@15 - int v27; // [sp+3Ch] [bp-14h]@26 + int days; // [sp+3Ch] [bp-14h]@26 int v28; // [sp+40h] [bp-10h]@26 __int16 v29; // [sp+46h] [bp-Ah]@9 __int16 v30; // [sp+48h] [bp-8h]@9 @@ -14364,34 +14275,34 @@ for (uint i = 0; i < uLevelEVT_NumEvents; ++i) { - auto pEvent = pLevelEVT_Events + i; - - auto _evt = (_evt_raw *)(pLevelEVT + pEvent->uEventOffsetInEVT); - - if (_evt->v4 == 3) + auto pEvent = pLevelEVT_Index[i]; + + auto _evt = (_evt_raw *)(pLevelEVT + pEvent.uEventOffsetInEVT); + + if (_evt->_e_type == EVENT_PlaySound) { pSoundList->LoadSound( _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((unsigned int)_evt->v8 << 8)) << 8)) << 8), 0); } - else if (_evt->v4 == 37) - { - dword_597F18 = pEvent->field_4; - EventProcessor(pEvent->uEventID, 0, 0); + else if (_evt->_e_type == EVENT_OnMapReload) + { + dword_597F18 = pEvent.event_sequence_num; + EventProcessor(pEvent.uEventID, 0, 0); dword_597F18 = 0; } - else if (_evt->v4 == 31 || _evt->v4 == 38) + else if (_evt->_e_type == EVENT_OnTimer || _evt->_e_type == EVENT_OnLongTimer) { v3 = &array_5B5928[dword_5B65C8]; v20 = pOutdoor->uLastVisitDay; if (uCurrentlyLoadedLevelType == LEVEL_Indoor) v20 = pIndoor->stru1.uLastVisitDay; - v4 = _evt->v4; + v4 = _evt->_e_type; v3->field_1C = v4; - v3->field_8 = pEvent->uEventID; - v3->field_A = pEvent->field_4; + v3->field_8 = pEvent.uEventID; + v3->field_A = pEvent.event_sequence_num; v33 = _evt->v6; v3->field_12 = v33; v32 = _evt->v7; @@ -14420,9 +14331,8 @@ { if ( v5 ) { - v3->field_4 = 0; ++dword_5B65C8; - v3->field_0 = 0; + v3->field_0_time = 0; continue; } } @@ -14430,9 +14340,8 @@ v26 / 7 != 0 && v32 != 0 || v26 != 0 || !v20) { - v3->field_4 = 0; ++dword_5B65C8; - v3->field_0 = 0; + v3->field_0_time = 0; continue; } } @@ -14440,30 +14349,30 @@ v8 = (signed __int64)((double)(signed __int64)pParty->uTimePlayed * 0.234375); v9 = v8; v10 = (signed int)v8 / 60; - v22 = v10 % 60; + minutes = v10 % 60; v11 = (signed int)(v10 / 60); v12 = v11 % 24; v13 = (signed int)(v11 / 24); - v27 = v13 % 7; + days = v13 % 7; v14 = (signed int)(v13 / 7); v15 = v14 % 4; v16 = (signed int)(v14 / 4); - v24 = v16 / 12; + month = v16 / 12; auto _1 = (unsigned __int64)((double)pParty->uTimePlayed * 0.234375) >> 32; auto _2 = ((__int64)v9 << 32) | _1; - v19 = _2 % 60; + seconds = _2 % 60; //v19 = (signed __int64)__PAIR__((unsigned __int64)(signed __int64)((double)(signed __int64)pParty->uTimePlayed * 0.234375) >> 32, // v9) // % 60; - v17 = v12; - v25 = v15; + hours = v12; + weeks = v15; v28 = v16 % 12; if ( v5 ) { - ++v24; + ++month; } else { @@ -14475,28 +14384,26 @@ { if ( v32 ) { - ++v25; + ++weeks; } else { - ++v27; - v22 = v30; - v17 = v31; - v19 = v29; - } - } - } - auto v0 = (signed __int64)((double)((v19 - + 0x3C * v22 - + 0xE10 * v17 - + 0x93A80 * v25 - + 0x15180 * v27 - + 0x24EA00 * (v28 + 12i64 * v24)) << 7) + ++days; + minutes = v30; + hours = v31; + seconds = v29; + } + } + } + v3->field_0_time = (signed __int64)((double)((seconds + + 60 * minutes + + 3600 * hours + + 0x93A80 * weeks + + 0x15180 * days + + 0x24EA00 * (v28 + 12i64 * month)) << 7) * 0.033333335); - v3->field_4 = HIDWORD(v0); ++dword_5B65C8; - v3->field_0 = v0; } } } @@ -14575,7 +14482,7 @@ pY = pOutdoor->pBModels[v4].vBoundingCenter.y - v20; v5 = abs((signed)pY); v6 = abs((signed)pX); - v7 = sub_4621DA(v6, v5, v2); + v7 = int_get_vector_length(v6, v5, v2); v8 = &pOutdoor->pBModels[0]; if ( v7 < 2 * pOutdoor->pBModels[v4].sBoundingRadius ) { @@ -14676,7 +14583,7 @@ pY = *(int *)((char *)&pOutdoor->pBModels[v4].vBoundingCenter.y) - LODWORD(v19); v5 = abs((signed)pY); v6 = abs((signed)pX); - v7 = sub_4621DA(v6, v5, 0); + v7 = int_get_vector_length(v6, v5, 0); v8 = &pOutdoor->pBModels; if ( v7 < *(int *)((char *)&pOutdoor->pBModels[v4].sBoundingRadius) ) { @@ -15817,7 +15724,7 @@ v3 = dword_597F18; pSomeOtherEVT = pGlobalEVT; uSomeOtherEVT_NumEvents = uGlobalEVT_NumEvents; - memcpy(pSomeOtherEVT_Events, pGlobalEVT_Events, 0xCE40u); + memcpy(pSomeOtherEVT_Events, pGlobalEVT_Index, 0xCE40u); v4 = 1; v12 = 1; v11 = 0; @@ -15826,7 +15733,7 @@ do { v5 = v1; - if ( (void *)pSomeOtherEVT_Events[v1].uEventID == v13 && pSomeOtherEVT_Events[v5].field_4 == v3 ) + if ( (void *)pSomeOtherEVT_Events[v1].uEventID == v13 && pSomeOtherEVT_Events[v5].event_sequence_num == v3 ) { v6 = pSomeOtherEVT_Events[v5].uEventOffsetInEVT; v7 = &pSomeOtherEVT[v6]; @@ -15887,1527 +15794,6 @@ } -//----- (0044684A) -------------------------------------------------------- -void __fastcall EventProcessor(int uEventID, int a2, int a3) -{ - 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 - int v19; // ebp@36 - signed int v20; // ecx@40 - int v21; // eax@40 - 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 v30; // eax@58 - int v31; // ecx@58 - int v32; // esi@58 - NPCData *v33; // ecx@58 - int v34; // esi@59 - int v35; // esi@60 - int v36; // esi@61 - 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 - GUIButton *v49; // esi@94 - char v50; // al@100 - Player *v51; // esi@103 - Player *v52; // ecx@106 - int v53; // ecx@107 - char v54; // al@111 - Player *v55; // esi@114 - Player *v56; // ecx@117 - int v57; // ecx@118 - signed int v58; // ebp@124 - Player *v59; // esi@125 - int v60; // eax@126 - int v61; // edx@133 - int v62; // eax@139 - void *v63; // ebp@145 - signed int v64; // edi@146 - unsigned int v65; // edx@148 - Player *v66; // ecx@148 - int v67; // esi@148 - signed int v68; // eax@151 - int v69; // esi@151 - Player *v70; // ecx@158 - unsigned int v71; // eax@159 - int v72; // esi@159 - signed int v73; // eax@162 - int v74; // esi@162 - int v75; // edx@172 - Player *v76; // esi@173 - 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 - char *v93; // eax@252 - int v94; // ecx@262 - int v95; // ebp@262 - int v96; // edx@262 - int v97; // eax@262 - 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 v122; // [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 v127; // [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 - int v135; // [sp+3Ch] [bp-46Ch]@262 - int v136; // [sp+40h] [bp-468h]@40 - int v137; // [sp+44h] [bp-464h]@40 - int v138; // [sp+48h] [bp-460h]@40 - int v139; // [sp+4Ch] [bp-45Ch]@40 - ItemGen item; // [sp+50h] [bp-458h]@15 - char Source[120]; // [sp+74h] [bp-434h]@15 - char Str[120]; // [sp+ECh] [bp-3BCh]@21 - Actor Dst; // [sp+164h] [bp-344h]@53 - - //v131 = uEventID; - v133 = 0; - dword_5B5920 = a2; - dword_5B65C4 = 0; - if ( !a1 ) - { - if ( !GameUI_StatusBar_TimedStringTimeLeft ) - ShowStatusBarString(pGlobalTXT_LocalizationStrings[521], 2u);// Nothing here - return; - } - v127 = 2 * (uActiveCharacter == 0) + 4; - v122 = dword_597F18; - if ( _5C3420_pDecoration ) - { - v3 = uGlobalEVT_NumEvents; - pSomeEVT = pGlobalEVT; - v112 = pGlobalEVT_Events; - } - else - { - v3 = uLevelEVT_NumEvents; - pSomeEVT = pLevelEVT; - v112 = pLevelEVT_Events; - } - uSomeEVT_NumEvents = v3; - memcpy(pSomeEVT_Events, v112, 0xCE40u); - //v4 = 0; - //v124 = 0; - for (uint i = 0; i < uSomeEVT_NumEvents; ++i) - { - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - //while ( 1 ) - //{ - if ( dword_5B65C4 ) - goto LABEL_301; - //v8 = v4; - if ( pSomeEVT_Events[i/*v4*/].uEventID == uEventID && pSomeEVT_Events[i/*v4*/].field_4 == v122 ) - { - //v9 = pSomeEVT_Events[v8].uEventOffsetInEVT; - //v10 = (ByteArray *)&v5[v9]; - auto _evt = (_evt_raw *)(pSomeEVT + pSomeEVT_Events[i/*v4*/].uEventOffsetInEVT); - - switch (_evt->v4) - { - case EVENT_CheckSeason: - if ( !sub_4465DF_check_season(_evt->v5) ) - { - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - } - v11 = _evt->v6; - goto LABEL_130; - case EVENT_ShowMovie: - strcpy(Source, (char *)&_evt->v7); - v12 = (char *)&item.uExpireTime + strlen(Source) + 7; - if ( *v12 == 32 ) - *v12 = 0; - if ( pVideoPlayer->field_54 ) - pVideoPlayer->Unload(); - pVideoPlayer->bStopBeforeSchedule = 0; - pVideoPlayer->pResetflag = 0; - if (pAsyncMouse) - pAsyncMouse->Suspend(); - 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); - VideoPlayer::MovieLoop(v16, 0, v14, 1); - if ( !_strcmpi(v16, "arbiter good") ) - { - pParty->uAlignment = 0; - v18 = 0; - LOBYTE(v17) = 1; - SetUserInterface(v18, v17); - if ( !v15 || v128 == 3 ) - { - pCurrentScreen = v128; - if ( v128 == 3 ) - pGameLoadingUI_ProgressBar->uType = GUIProgressBar::TYPE_Fullscreen; - if ( v128 == 13 ) - pVideoPlayer->_4BF28F(pAnimatedRooms[uCurrentHouse_Animation].field_0, 1u); - } - if (pAsyncMouse) - pAsyncMouse->Resume(); - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - } - if ( !_strcmpi(v16, "arbiter evil") ) - { - v18 = 2; - pParty->uAlignment = 2; - LOBYTE(v17) = 1; - SetUserInterface(v18, v17); - if ( !v15 || v128 == 3 ) - { - pCurrentScreen = v128; - if ( v128 == 3 ) - pGameLoadingUI_ProgressBar->uType = GUIProgressBar::TYPE_Fullscreen; - if ( v128 == 13 ) - pVideoPlayer->_4BF28F(pAnimatedRooms[uCurrentHouse_Animation].field_0, 1u); - } - if (pAsyncMouse) - pAsyncMouse->Resume(); - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - } - if ( !_strcmpi(v16, "pcout01") ) // moving to harmondale from emerald isle - { - Rest(0x2760u); - pParty->RestAndHeal(); - pParty->field_764 = 0; - } - if ( !v15 || v128 == 3 ) - { - pCurrentScreen = v128; - if ( v128 == 3 ) - pGameLoadingUI_ProgressBar->uType = GUIProgressBar::TYPE_Fullscreen; - if ( v128 == 13 ) - pVideoPlayer->_4BF28F(pAnimatedRooms[uCurrentHouse_Animation].field_0, 1u); - } - if (pAsyncMouse) - pAsyncMouse->Resume(); - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - case EVENT_CheckSkill: - v19 = _evt->v7 + ((_evt->v8 + ((_evt->v9 + ((unsigned int)_evt->v10 << 8)) << 8)) << 8); - if ( v127 < 0 ) - goto LABEL_47; - if ( v127 <= 3 ) - { - v24 = pParty->pPlayers[0].pActiveSkills[3486 * v127 + _evt->v5]; - } - else - { - if ( v127 == 4 ) - { - v24 = pPlayers[uActiveCharacter]->pActiveSkills[_evt->v5]; - } - else - { - if ( v127 == 5 ) - { - v20 = 0; - v21 = 3486 * v130 + _evt->v5; - v136 = 1; - LOWORD(v21) = pParty->pPlayers[0].pActiveSkills[v21]; - v137 = v21 & 0x40; - v138 = v21 & 0x80; - v22 = v21 & 0x100; - v23 = v21 & 0x3F; - v139 = v22; - while ( v23 < v19 || !*(&v136 + _evt->v6) ) - { - ++v20; - if ( v20 >= 4 ) - { - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - } - } - v11 = _evt->v11; - goto LABEL_130; - } -LABEL_47: - //v10 = (ByteArray *)&v5[v9]; - v24 = pParty->pPlayers[0].pActiveSkills[_evt->v5 + 3486 * rand() % 4]; - } - } - v136 = 1; - v137 = v24 & 0x40; - v138 = v24 & 0x80; - v139 = v24 & 0x100; - if ( (v24 & 0x3F) >= v19 && *(&v136 + _evt->v6) ) - { - v11 = _evt->v11; - goto LABEL_130; - } - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - case EVENT_SpeakNPC: - if ( a3 ) - { - //Actor::Actor(&Dst); - memset(&Dst, 0, 0x344u); - dword_5B65D0_dialogue_actor_npc_id = _evt->v5 - + ((_evt->v6 - + ((_evt->v7 - + ((unsigned int)_evt->v8 << 8)) << 8)) << 8); - Dst.uNPC_ID = dword_5B65D0_dialogue_actor_npc_id; - Dst.InitializeDialogue(0); - } - else - { - bDialogueUI_InitializeActor_NPC_ID = _evt->v5 - + ((_evt->v6 + ((_evt->v7 + ((unsigned int)_evt->v8 << 8)) << 8)) << 8); - } - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - case EVENT_ChangeEvent: - v25 = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((unsigned int)_evt->v8 << 8)) << 8)) << 8); - if ( v25 ) - { - stru_5E4C90._decor_events[_5C3420_pDecoration->_idx_in_stru123 - 75] = _evt->v5 - 124; - } - else - { - v26 = _5C3420_pDecoration; - stru_5E4C90._decor_events[_5C3420_pDecoration->_idx_in_stru123 - 75] = 0; - LOBYTE(v26->field_2) |= 0x20u; - } - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - case EVENT_SetNPCGreeting: - v27 = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8); - v28 = _evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8); - pNPCStats->pNewNPCData[v27].uFlags &= 0xFFFFFFFCu; - pNPCStats->pNewNPCData[v27].greet = v28; - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - case EVENT_SetNPCTopic: - v29 = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8); - v30 = _evt->v10 + ((_evt->v11 + ((_evt->v12 + ((uint)_evt->v13 << 8)) << 8)) << 8); - v31 = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8); - v32 = _evt->v9; - v33 = &pNPCStats->pNewNPCData[v31]; - if ( v32 ) - { - v34 = v32 - 1; - if ( v34 ) - { - v35 = v34 - 1; - if ( v35 ) - { - v36 = v35 - 1; - if ( v36 ) - { - v37 = v36 - 1; - if ( v37 ) - { - if ( v37 == 1 ) - v33->evt_F = v30; - } - else - { - v33->evt_E = v30; - } - } - else - { - v33->evt_D = v30; - } - } - else - { - v33->evt_C = v30; - } - } - else - { - v33->evt_B = v30; - } - } - else - { - v33->evt_A = v30; - } - if ( v29 == 8 ) - { - if ( v30 == 78 ) - { - sub_4BD8B5(); - ptr_507BC0->Release(); - pParty->uFlags &= 0xFFFFFFFDu; - if ( EnterHouse((enum HOUSE_TYPE)170) ) - { - pAudioPlayer->StopChannels(-1, -1); - ptr_507BC0 = GUIWindow::Create(0, 0, 640, 480, WINDOW_HouseInterior, 170, 0); - ptr_507BC0->CreateButton(0x3Du, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 1u, 0x31u, "", 0); - ptr_507BC0->CreateButton(0xB1u, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 2u, 0x32u, "", 0); - ptr_507BC0->CreateButton(0x124u, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 3u, 0x33u, "", 0); - ptr_507BC0->CreateButton(0x197u, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 4u, 0x34u, "", 0); - ptr_507BC0->CreateButton(0, 0, 0, 0, 1, 0, 0xB0u, 0, 9u, "", 0); - ptr_F8B1E8 = pNPCTopics[90].pText; - } - } - } - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - case EVENT_NPCSetItem: - sub_448518_npc_set_item(_evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8), - _evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8), _evt->v13); - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - case EVENT_SetActorItem: - Actor::GiveItem(_evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8), - _evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8), _evt->v13); - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - 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); - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - 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); - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - 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;//[0].uGroup; - do - { - if ( v41->uGroup == v38 ) - v41->uGroup = v39; - ++v41; - --v40; - } - while ( v40 ); - } - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //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;//[0].uAlly; - do - { - if ( v45->uGroup == v42 ) - v45->uAlly = v43; - ++v45; - --v44; - } - while ( v44 ); - } - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - case EVENT_MoveNPC: - pNPCStats->pNewNPCData[_evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8)].Location2D = _evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8); - if ( ptr_507BC0 ) - { - v46 = ptr_507BC0->ptr_1C; - if ( v46 == (void *)165 ) - { - sub_4BD8B5(); - pVideoPlayer->Unload(); - ptr_507BC0->Release(); - pParty->uFlags &= 0xFFFFFFFDu; - _5C3420_pDecoration = (LevelDecoration *)1; - if ( EnterHouse((enum HOUSE_TYPE)165) ) - { - pAudioPlayer->PlaySound((SoundID)0, 0, 0, -1, 0, 0, 0, 0); - v47 = GUIWindow::Create(0, 0, 640, 480, WINDOW_HouseInterior, 165, 0); - ptr_507BC0 = v47; - v48 = v47->pControlsHead; - if ( v48 ) - { - do - { - v49 = v48->pNext; - pAllocator->FreeChunk(v48); - v48 = v49; - } - while ( v49 ); - v47 = ptr_507BC0; - } - v47->pControlsHead = 0; - ptr_507BC0->pControlsTail = 0; - ptr_507BC0->uNumControls = 0; - } - } - else - { - if ( v46 == (void *)553 ) - pVideoPlayer->bLoopPlaying = 0; - } - } - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - case EVENT_Jmp: - //v124 = -1; - v122 = _evt->v5 - 1; - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - case EVENT_ShowFace: - v50 = _evt->v5; - if ( (unsigned __int8)v50 <= 3u ) - { - v117 = 0; - v113 = _evt->v6; - v53 = (unsigned __int8)v50; - v52 = &pParty->pPlayers[v53]; - v52->PlayEmotion((CHARACTER_EXPRESSION_ID)v113, v117); - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - } - if ( v50 == 4 ) - { - v117 = 0; - v113 = _evt->v6; - v52 = pPlayers[uActiveCharacter]; - v52->PlayEmotion((CHARACTER_EXPRESSION_ID)v113, v117); - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - } - if ( v50 != 5 ) - { - v117 = 0; - v113 = _evt->v6; - v53 = rand() % 4; - v52 = &pParty->pPlayers[v53]; - v52->PlayEmotion((CHARACTER_EXPRESSION_ID)v113, v117); - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - } - v51 = pParty->pPlayers; - do - { - v51->PlayEmotion((CHARACTER_EXPRESSION_ID)_evt->v6, 0); - ++v51; - } - while ( (signed int)v51 < (signed int)pParty->pHirelings ); -//LABEL_291: - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - case EVENT_CharacterAnimation: - v54 = _evt->v5; - if ( (unsigned __int8)v54 <= 3u ) - { - v118 = 0; - v114 = _evt->v6; - v57 = (unsigned __int8)v54; - goto LABEL_119; - } - if ( v54 == 4 ) - { - v118 = 0; - v114 = _evt->v6; - v56 = pPlayers[uActiveCharacter]; - goto LABEL_120; - } - if ( v54 != 5 ) - { - v118 = 0; - v114 = _evt->v6; - v57 = rand() % 4; -LABEL_119: - v56 = &pParty->pPlayers[v57]; -LABEL_120: - v56->PlaySound((PlayerSpeech)v114, v118); - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - } - v55 = pParty->pPlayers; - for (int iii = 0; iii < 4; ++iii) - { - v55->PlaySound((PlayerSpeech)_evt->v6, 0); - ++v55; - } - //while ( (signed int)v55 < (signed int)pParty->pHirelings ); - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - case EVENT_ForPartyMember: - v127 = _evt->v5; - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - case EVENT_SummonItem: - sub_42F7EB_DropItemAt(_evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8), - _evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8), - _evt->v13 + ((_evt->v14 + ((_evt->v15 + ((uint)_evt->v16 << 8)) << 8)) << 8), - _evt->v17 + ((_evt->v18 + ((_evt->v19 + ((uint)_evt->v20 << 8)) << 8)) << 8), - _evt->v21 + ((_evt->v22 + ((_evt->v23 + ((uint)_evt->v24 << 8)) << 8)) << 8), - _evt->v25, _evt->v26, 0, 0); - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - case EVENT_Compare: - v58 = _evt->v7 + ((_evt->v8 + ((_evt->v9 + ((uint)_evt->v10 << 8)) << 8)) << 8); - if ( v127 == 5 ) - { - v130 = 0; - v59 = pParty->pPlayers; - while ( 1 ) - { - LOBYTE(v60) = v59->CompareVariable((enum VariableType)(_evt->v5 + ((uint)_evt->v6 << 8)), v58); - if ( v60 ) - break; - ++v130; - ++v59; - if ( (signed int)v59 >= (signed int)pParty->pHirelings ) - { - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - } - } -LABEL_129: - v11 = _evt->v11; - goto LABEL_130; - } - if ( v127 < 0 ) - goto LABEL_139; - v61 = v127; - if ( v127 <= 3 ) - goto LABEL_137; - if ( v127 == 4 ) - { - if ( uActiveCharacter ) - { - v6 = pPlayers[uActiveCharacter]; - goto LABEL_138; - } - } - else - { - if ( v127 != 6 ) - goto LABEL_139; - } - v61 = rand() % 4; - //v5 = pSomeEVT; -LABEL_137: - v6 = &pParty->pPlayers[v61]; -LABEL_138: - //v123 = v6; -LABEL_139: - LOBYTE(v62) = ((Player *)v6)->CompareVariable( - (enum VariableType)(_evt->v5 + ((uint)_evt->v6 << 8)), - v58); -LABEL_140: - if ( v62 ) - goto LABEL_129; - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - case EVENT_IsActorAlive: - v62 = IsActorAlive( - _evt->v5, - _evt->v6 + ((_evt->v7 + ((_evt->v8 + ((uint)_evt->v9 << 8)) << 8)) << 8), - _evt->v10); - goto LABEL_140; - case EVENT_Substract: - v63 = (void *)(_evt->v7 + ((_evt->v8 + ((_evt->v9 + ((uint)_evt->v10 << 8)) << 8)) << 8)); - if ( _evt->v5 + ((uint)_evt->v6 << 8) == VAR_PlayerItemInHands ) - { - v64 = 0; - if ( (void *)pParty->pPickedItem.uItemID == v63 ) - { - pMouse->RemoveHoldingItem(); - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - } - v65 = 0; - v66 = pPlayers[uActiveCharacter]; - v67 = (int)v66->pInventoryIndices; - do - { - if ( *(void **)&v66->spellbook.pDarkSpellbook.bIsSpellAvailable[36 * *(int *)v67 + 5] == v63 ) - { - v66->RemoveItemAtInventoryIndex(v65); - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - } - ++v65; - v67 += 4; - } - while ( (signed int)v65 < 126 ); - v68 = 0; - v69 = (int)&v66->pEquipment; - do - { - if ( *(int *)v69 && *(void **)&v66->spellbook.pDarkSpellbook.bIsSpellAvailable[36 * *(int *)v69 + 5] == v63 ) - { - *(&v66->pEquipment.uOffHand + v68) = 0; - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - } - ++v68; - v69 += 4; - } - while ( v68 < 16 ); - v125 = (signed int)&pPlayers[1]; - while ( 1 ) - { - v70 = *(Player **)v125; - if ( !v64 ) - { - v71 = 0; - v72 = (int)v70->pInventoryIndices; - do - { - if ( *(void **)&v70->spellbook.pDarkSpellbook.bIsSpellAvailable[36 * *(int *)v72 + 5] == v63 ) - { - v70->RemoveItemAtInventoryIndex(v71); - goto LABEL_169; - } - ++v71; - v72 += 4; - } - while ( (signed int)v71 < 126 ); - v73 = 0; - v74 = (int)&v70->pEquipment; - while ( !*(int *)v74 - || *(void **)&v70->spellbook.pDarkSpellbook.bIsSpellAvailable[36 * *(int *)v74 + 5] != v63 ) - { - ++v73; - v74 += 4; - if ( v73 >= 16 ) - goto LABEL_170; - } - *(&v70->pEquipment.uOffHand + v73) = 0; -LABEL_169: - v64 = 1; - } -LABEL_170: - v125 += 4; - if ( v125 > (signed int)&pPlayers[4] ) - { - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - } - } - } - v75 = v127; - if ( v127 != 5 ) - { - if ( v127 < 0 ) - goto LABEL_183; - if ( v127 > 3 ) - { - if ( v127 != 4 ) - { - if ( v127 == 6 ) - goto LABEL_180; -LABEL_183: - ((Player *)v6)->SubtractVariable((enum VariableType)(_evt->v5 + ((uint)_evt->v6 << 8)), v63); - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - } - if ( uActiveCharacter ) - { - v6 = pPlayers[uActiveCharacter]; - goto LABEL_182; - } -LABEL_180: - v75 = rand() % 4; - //v5 = pSomeEVT; - } - v6 = &pParty->pPlayers[v75]; -LABEL_182: - //v123 = v6; - goto LABEL_183; - } - v76 = pParty->pPlayers; - v130 = 4; - do - { - v76->SubtractVariable( - (enum VariableType)(_evt->v5 + ((uint)_evt->v6 << 8)), - v63); - ++v76; - } - while ( (signed int)v76 < (signed int)pParty->pHirelings ); - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - case EVENT_Set: - v77 = _evt->v7 + ((_evt->v8 + ((_evt->v9 + ((uint)_evt->v10 << 8)) << 8)) << 8); - v78 = v127; - if ( v127 != 5 ) - { - if ( v127 < 0 ) - goto LABEL_197; - if ( v127 > 3 ) - { - if ( v127 != 4 ) - { - if ( v127 == 6 ) - goto LABEL_194; -LABEL_197: - ((Player *)v6)->SetVariable((enum VariableType)(_evt->v5 + ((uint)_evt->v6 << 8)), v77); - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - } - if ( uActiveCharacter ) - { - v6 = pPlayers[uActiveCharacter]; - goto LABEL_196; - } -LABEL_194: - v78 = rand() % 4; - //v5 = pSomeEVT; - } - v6 = &pParty->pPlayers[v78]; -LABEL_196: - //v123 = v6; - goto LABEL_197; - } - v79 = pParty->pPlayers; - v130 = 4; - do - { - v79->SetVariable( - (enum VariableType)(_evt->v5 + ((uint)_evt->v6 << 8)), - v77); - ++v79; - } - while ( (signed int)v79 < (signed int)pParty->pHirelings ); - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - case EVENT_Add: - v80 = _evt->v7 + ((_evt->v8 + ((_evt->v9 + ((uint)_evt->v10 << 8)) << 8)) << 8); - v81 = v127; - if ( v127 != 5 ) - { - if ( v127 < 0 ) - goto LABEL_211; - if ( v127 > 3 ) - { - if ( v127 != 4 ) - { - if ( v127 == 6 ) - goto LABEL_208; -LABEL_211: - ((Player *)v6)->AddVariable( - (enum VariableType)(_evt->v5 + ((uint)_evt->v6 << 8)), - v80); - goto LABEL_212; - } - if ( uActiveCharacter ) - { - v6 = pPlayers[uActiveCharacter]; - goto LABEL_210; - } -LABEL_208: - v81 = rand() % 4; - //v5 = pSomeEVT; - } - v6 = &pParty->pPlayers[v81]; -LABEL_210: - //v123 = v6; - goto LABEL_211; - } - v82 = pParty->pPlayers; - v130 = 4; - do - { - v82->AddVariable( - (enum VariableType)(_evt->v5 + ((uint)_evt->v6 << 8)), - v80); - ++v82; - } - while ( (signed int)v82 < (signed int)pParty->pHirelings ); -LABEL_212: - v83 = _evt->v5 + ((uint)_evt->v6 << 8); - if ( v83 == 21 || v83 == 22 || v83 == 23 || v83 == 24 ) - viewparams->bRedrawGameUI = 1; - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - case EVENT_InputString: - if ( !dword_597F18 ) - { - strcpy( - GameUI_StatusBar_TimedString, - &pLevelStr[pLevelStrOffsets[_evt->v5 - + ((_evt->v6 - + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8)]]); - v105 = v122; - v121 = 26; -LABEL_295: - sub_4451A8_press_any_key(uEventID, v105, v121); -LABEL_301: - if ( v133 == 1 ) -LABEL_302: - OnMapLeave(); - return; - } - v84 = _evt->v13 + ((_evt->v14 + ((_evt->v15 + ((uint)_evt->v16 << 8)) << 8)) << 8); - if ( !_strcmpi( - GameUI_StatusBar_TimedString, - &pLevelStr[pLevelStrOffsets[_evt->v9 - + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8)]]) - || !_strcmpi(GameUI_StatusBar_TimedString, &pLevelStr[pLevelStrOffsets[v84]]) ) - { - v11 = _evt->v17; -LABEL_130: - //v124 = -1; -LABEL_131: - v122 = v11 - 1; - } - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - case EVENT_RandomGoTo: - //v124 = -1; - v11 = (unsigned __int8)*(&_evt->v5 + rand() % ((_evt->v5 != 0) + (_evt->v6 != 0) + (_evt->v7 != 0) + (_evt->v8 != 0) + (_evt->v9 != 0) - + (_evt->v10 != 0))); - goto LABEL_131; - case EVENT_ReceiveDamage: - v85 = _evt->v7 + ((_evt->v8 + ((_evt->v9 + ((uint)_evt->v10 << 8)) << 8)) << 8); - v86 = _evt->v5; - if ( (unsigned __int8)v86 <= 3u ) - { - v119 = _evt->v6; - v115 = _evt->v7 + ((_evt->v8 + ((_evt->v9 + ((uint)_evt->v10 << 8)) << 8)) << 8); - v89 = (unsigned __int8)v86; - goto LABEL_233; - } - if ( v86 == 4 ) - { - if ( !uActiveCharacter ) - { - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - } - v119 = _evt->v6; - v88 = pPlayers[uActiveCharacter]; - v115 = _evt->v7 + ((_evt->v8 + ((_evt->v9 + ((uint)_evt->v10 << 8)) << 8)) << 8); - goto LABEL_234; - } - if ( v86 != 5 ) - { - v119 = _evt->v6; - v115 = _evt->v7 + ((_evt->v8 + ((_evt->v9 + ((uint)_evt->v1 << 8)) << 8)) << 8); - v89 = rand() % 4; -LABEL_233: - v88 = &pParty->pPlayers[v89]; -LABEL_234: - v88->ReceiveDamage(v115, v119); - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - } - v87 = pParty->pPlayers; - do - { - v87->ReceiveDamage(v85, _evt->v6); - ++v87; - } - while ( (signed int)v87 < (signed int)pParty->pHirelings ); - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - case EVENT_ToggleIndoorLight: - pIndoor->ToggleLight(_evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8), _evt->v9); - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - case EVENT_SetFacesBit: - sub_44892E_set_faces_bit(_evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8), - _evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8), _evt->v13); - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - case EVENT_ToggleChestFlag: - Chest::ToggleFlag(_evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8), - _evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8), _evt->v13); - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - case EVENT_ToggleActorFlag: - Actor::ToggleFlag(_evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8), - _evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8), _evt->v13); - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - case EVENT_ToggleActorGroupFlag: - ToggleActorGroupFlag( - _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8), - _evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8), - _evt->v13); - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - case EVENT_SetSnow: - if ( !_evt->v5 ) - pWeather->bRenderSnow = _evt->v6 != 0; - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - case EVENT_StatusText: - v90 = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8); - if ( _5C3420_pDecoration ) - { - if ( _5C3420_pDecoration == (LevelDecoration *)1 ) - { - ptr_F8B1E8 = pNPCTopics[v90-1].pText;//(&dword_721664)[8 * v90]; - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - } - if ( a3 == 1 ) - { - v91 = pNPCTopics[v90-1].pText;//(&dword_721664)[8 * v90]; -//LABEL_248: - ShowStatusBarString(v91, 2u); - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - } - } - else - { - if ( a3 == 1 ) - { - v91 = &pLevelStr[pLevelStrOffsets[v90]]; - ShowStatusBarString(v91, 2u); - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - } - } - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - case EVENT_ShowMessage: - v92 = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8); - if ( _5C3420_pDecoration ) - { - v93 = (char *)pNPCTopics[v92-1].pText;//(&dword_721664)[8 * v92]; - byte_5B0938[0] = 0; - ptr_F8B1E8 = v93; - } - else - { - strcpy(byte_5B0938, &pLevelStr[pLevelStrOffsets[v92]]); - } - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - case EVENT_CastSpell: - sub_448DF8_cast_spell(_evt->v5, _evt->v6, _evt->v7, _evt->v8 + ((_evt->v9 + ((_evt->v10 + ((uint)_evt->v11 << 8)) << 8)) << 8), - _evt->v12 + ((_evt->v13 + ((_evt->v14 + ((uint)_evt->v15 << 8)) << 8)) << 8), - _evt->v16 + ((_evt->v17 + ((_evt->v18 + ((uint)_evt->v19 << 8)) << 8)) << 8), - _evt->v20 + ((_evt->v21 + ((_evt->v22 + ((uint)_evt->v23 << 8)) << 8)) << 8), - _evt->v24 + ((_evt->v25 + ((_evt->v26 + ((uint)_evt->v27 << 8)) << 8)) << 8), - _evt->v28 + ((_evt->v29 + ((_evt->v30 + ((uint)_evt->v31 << 8)) << 8)) << 8)); - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - case EVENT_SetTexture: - sub_44861E_set_texture(_evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8), (char *)&_evt->v9); - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - case EVENT_SetSprite: - SetDecorationSprite(_evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8), _evt->v9, (char *)&_evt->v10); - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - case EVENT_SummonMonsters: - sub_448CF4_spawn_monsters(_evt->v5, _evt->v6, _evt->v7, - _evt->v8 + ((_evt->v9 + ((_evt->v10 + ((uint)_evt->v11 << 8)) << 8)) << 8), - _evt->v12 + ((_evt->v13 + ((_evt->v14 + ((uint)_evt->v15 << 8)) << 8)) << 8), - _evt->v16 + ((_evt->v17 + ((_evt->v18 + ((uint)_evt->v19 << 8)) << 8)) << 8), - _evt->v20 + ((_evt->v21 + ((_evt->v22 + ((uint)_evt->v23 << 8)) << 8)) << 8), - _evt->v24 + ((_evt->v25 + ((_evt->v26 + ((uint)_evt->v27 << 8)) << 8)) << 8)); - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - case EVENT_MouseOver: - case EVENT_LocationName: - --v122; - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - case EVENT_ChangeDoorState: - sub_449A49_door_switch_animation(_evt->v5, _evt->v6); - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - case EVENT_OpenChest: - if ( !Chest::Open(_evt->v5) ) - goto LABEL_301; - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - case EVENT_MoveToMap: - v94 = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8); - v135 = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8); - v132 = _evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8); - v126 = _evt->v13 + ((_evt->v14 + ((_evt->v15 + ((uint)_evt->v16 << 8)) << 8)) << 8); - v129 = _evt->v17 + ((_evt->v18 + ((_evt->v19 + ((uint)_evt->v20 << 8)) << 8)) << 8); - v95 = _evt->v21 + ((_evt->v22 + ((_evt->v23 + ((uint)_evt->v24 << 8)) << 8)) << 8); - v96 = _evt->v25; - v97 = v96 + ((_evt->v26 + ((_evt->v27 + ((uint)_evt->v28 << 8)) << 8)) << 8); - v134 = v96 + ((_evt->v26 + ((_evt->v27 + ((uint)_evt->v28 << 8)) << 8)) << 8); - if ( _evt->v29 || _evt->v30 ) - { - if ( pRenderer->pRenderD3D && !pRenderer->bWindowMode ) - pRenderer->_49FD3A(); - sub_444839_move_map(_evt->v29, _evt->v30, v135, v132, v126, v129, v95, v134, (char *)&_evt->v31); - dword_5C3418 = uEventID; - dword_5C341C = v122 + 1; - goto LABEL_301; - } - _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; - v100 = v94 | v132 | v126 | v95 | v97 | v98; - dword_5B65C0 = v100; - if ( *v99 == 48 ) - { - if ( v100 ) - { - pParty->vPosition.x = v135; - pParty->vPosition.y = v132; - pParty->vPosition.z = v126; - pParty->uFallStartY = v126; - 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; - dword_5B65BC = 0; - _5B65B8_npcdata_hiword_house_or_other = 0; - _5B65B0_npcdata_rep_or_other = 0; - _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); - } - } - else - { - pGameLoadingUI_ProgressBar->uType = (GUIProgressBar::Type)((_5C3420_pDecoration == 0) + 1); - sub_44987B(v99, 0); - v133 = 1; - if ( pCurrentScreen == SCREEN_HOUSE ) - { - if ( uGameState == 2 ) - { - pAudioPlayer->StopChannels(-1, -1); - dword_F8B19C = 0; - while ( sub_4BD8B5() ) - ; - pVideoPlayer->Unload(); - ptr_507BC0->Release(); - ptr_507BC0 = 0; - if ( pMessageQueue_50CBD0->uNumMessages ) - pMessageQueue_50CBD0->uNumMessages = pMessageQueue_50CBD0->pMessages[0].field_8 != 0; - pCurrentScreen = SCREEN_GAME; - viewparams->bRedrawGameUI = 1; - array_5913D8[6] = 0; - pDialogueWindow->Release(); - dword_F8B19C = 0; - pDialogueWindow = 0; - pIcons_LOD->_40F9C5(); - } - goto LABEL_302; - } - } - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //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; - case EVENT_GiveItem: - item.Reset(); - //v101 = &pSomeEVT[v9]; - 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); - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - case EVENT_SpeakInHouse: - v103 = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8); - if ( EnterHouse((enum HOUSE_TYPE)(_evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8))) ) - { - if ( pRenderer->pRenderD3D && !pRenderer->bWindowMode ) - pRenderer->_49FD3A(); - pAudioPlayer->PlaySound((SoundID)0, 0, 0, -1, 0, 0, 0, 0); - pAudioPlayer->PlaySound(SOUND_EnteringAHouse, 814, 0, -1, 0, 0, 0, 0); - v104 = 187; - if ( uCurrentHouse_Animation != 167 ) - v104 = v103; - ptr_507BC0 = GUIWindow::Create(0, 0, 640, 480, WINDOW_HouseInterior, v104, 0); - ptr_507BC0->CreateButton(0x3Du, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 1u, 0x31u, "", 0); - ptr_507BC0->CreateButton(0xB1u, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 2u, 0x32u, "", 0); - ptr_507BC0->CreateButton(0x124u, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 3u, 0x33u, "", 0); - ptr_507BC0->CreateButton(0x197u, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 4u, 0x34u, "", 0); - ptr_507BC0->CreateButton(0, 0, 0, 0, 1, 0, 0xB0u, 0, 9u, "", 0); - } - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - case EVENT_PressAnyKey: - v121 = 33; - v105 = v122 + 1; - goto LABEL_295; - case EVENT_Exit: - goto LABEL_301; - default: - ++v122; - //v4 = v124; - //v5 = pSomeEVT; - //v6 = v123; - //v7 = ""; - break; - } - } - //++v4; - //v124 = v4; - //if ( v4 >= (signed int)uSomeEVT_NumEvents ) - //goto LABEL_301; - //} - } -} - - //----- (0044861E) -------------------------------------------------------- void __fastcall sub_44861E_set_texture(unsigned int uFaceCog, const char *pFilename) @@ -20042,7 +18428,7 @@ //----- (00402CAE) -------------------------------------------------------- -int stru193_math::SinCos(int angle) +int stru193_math::Cos(int angle) { int v2; // eax@1 diff -r e8fcde8ba3fc -r 405d0c4dd1b3 mm7_4.cpp --- a/mm7_4.cpp Wed Feb 20 20:50:22 2013 +0600 +++ b/mm7_4.cpp Wed Feb 20 20:51:55 2013 +0600 @@ -5178,7 +5178,7 @@ v35 = *v26; v36 = a3->GetValue(); v29 = pPlayer->_4B8102(v36, v35); - if ( a3->uAttributes & 2 ) + if (a3->Broken()) v29 = 1; goto _continue_sprintf; } @@ -5197,7 +5197,7 @@ v30 = *v26; v31 = a3->GetValue(); v29 = pPlayer->_4B8102(v31, v30) / 2; - if ( a3->uAttributes & 2 ) + if (a3->Broken()) v29 = 1; if (!v29) v29 = 1; @@ -5720,7 +5720,7 @@ if ( pMessageQueue_50CBD0->uNumMessages ) pMessageQueue_50CBD0->uNumMessages = pMessageQueue_50CBD0->pMessages[0].field_8 != 0; - pAudioPlayer->SetMusicVolume((pSoundVolumeLevels[uMusicVolimeMultiplier] * 64.0)); + pAudioPlayer->SetMusicVolume(pSoundVolumeLevels[uMusicVolimeMultiplier] * 64.0f); ++pIcons_LOD->uTexturePacksCount; if ( !pIcons_LOD->uNumPrevLoadedFiles ) pIcons_LOD->uNumPrevLoadedFiles = pIcons_LOD->uNumLoadedFiles; @@ -5740,16 +5740,13 @@ pTexture_IC_KNIGHT[8] = pIcons_LOD->LoadTexturePtr("IC_SORC", TEXTURE_16BIT_PALETTE); pTexture_MAKETOP = pIcons_LOD->LoadTexturePtr("MAKETOP", TEXTURE_16BIT_PALETTE); pTexture_MAKESKY = pIcons_LOD->LoadTexturePtr("MAKESKY", TEXTURE_16BIT_PALETTE); - uX = 0; - do // load PlayerPortraits texture + for(uX=0;uX < 22;++uX ) // load PlayerPortraits texture { sprintf(pTmpBuf, "%s01", pPlayerPortraitsNames[uX]); v1 = pIcons_LOD->LoadTexture(pTmpBuf, TEXTURE_16BIT_PALETTE); - v2 = uX * 4; - ++uX; - *(Texture **)((char *)pPlayerPortraits + v2) = &pIcons_LOD->pTextures[v1]; - } - while ( uX < 22 ); + pPlayerPortraits[uX] = &pIcons_LOD->pTextures[v1]; + + } pTexture_PlayerFaceMask = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture("FACEMASK", TEXTURE_16BIT_PALETTE)]; pTexture_buttminu = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture("buttminu", TEXTURE_16BIT_PALETTE)]; pTexture_buttplus = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture("buttplus", TEXTURE_16BIT_PALETTE)]; @@ -5875,7 +5872,7 @@ int v9; // edx@31 char *v10; // ebx@37 Player *v11; // esi@38 - signed int uSpellBookPageCount; // ecx@40 + //signed int uSpellBookPageCount; // ecx@40 int v13; // eax@40 //signed int uSkillIdx; // eax@45 int v15; // eax@70 @@ -6013,13 +6010,14 @@ player->sResMagicBase = 10; //*((short *)v10 + 400) = 0; player->pPlayerBuffs[22].uExpireTime = 0; - uSpellBookPageCount = 0; for (uint j = 0; j < 9; j++) { if (player->pActiveSkills[PLAYER_SKILL_FIRE + j]) - ++uSpellBookPageCount; - } - player->lastOpenedSpellbookPage = uSpellBookPageCount; + { + player->lastOpenedSpellbookPage = j; + break; + } + } pItemsTable->GenerateItem(2, 40, &item); player->AddItem2(-1, &item); //uSkillIdx = 0; @@ -6097,7 +6095,7 @@ for (uint k = 0; k < 138; k++) { if (&player->pInventoryItems[k]) - player->pInventoryItems[k].uAttributes |= 1; + player->pInventoryItems[k].SetIdentified(); } } } @@ -7462,8 +7460,8 @@ v21 = stru_F81018.field_0.field_8 >> i >> (11 - v18); v22 = stru_5C6E00; v122 = (unsigned __int16 *)v20; - v121 = (stru_F81018.field_0.field_4 >> i) + 4 * stru_5C6E00->SinCos(v104 + v21); - v23 = stru_5C6E00->SinCos(v104 + (v19 >> (char)v122) - stru_5C6E00->uIntegerHalfPi); + v121 = (stru_F81018.field_0.field_4 >> i) + 4 * stru_5C6E00->Cos(v104 + v21); + v23 = stru_5C6E00->Sin(v104 + (v19 >> (char)v122)); v120 = v116 + 4 * v23; if ( v123 < v117 ) { @@ -7491,8 +7489,8 @@ v102 = v4->uHeightMinus1 >> v27 << (v27 + 16); v31 = *v114 >> i; v122 = (unsigned __int16 *)(11 - v27); - v116 = v30 + 4 * stru_5C6E00->SinCos(v104 + (v31 >> (11 - v27))); - v90 = v31 + 4 * stru_5C6E00->SinCos(v104 + (v30 >> (char)v122) - stru_5C6E00->uIntegerHalfPi); + v116 = v30 + 4 * stru_5C6E00->Cos(v104 + (v31 >> (11 - v27))); + v90 = v31 + 4 * stru_5C6E00->Sin(v104 + (v30 >> (char)v122)); v108 = (signed int)(v116 - v121) >> 4; v103 = (v90 - v120) >> 4; v32 = v123 + 32; @@ -12815,8 +12813,7 @@ v4 = a1->uItemID; v5 = pItemsTable->pItems[v4].uEquipType; if ( (v2 != 4 || (signed int)v3 < 740 || (signed int)v3 > 771) - && ((signed int)v3 >= 600 || (signed int)v3 >= 529 && (signed int)v3 <= 599) - || BYTE1(a1->uAttributes) & 1 ) + && ((signed int)v3 >= 600 || (signed int)v3 >= 529 && (signed int)v3 <= 599) || a1->Stolen()) return 0; v6 = v2 - 1; if ( !v6 ) @@ -14723,7 +14720,7 @@ } else { - v2 = (char *)&pLevelEVT_Events[0].uEventOffsetInEVT; + v2 = (char *)&pLevelEVT_Index[0].uEventOffsetInEVT; while ( 1 ) { if ( *((int *)v2 - 2) == uEventID ) @@ -14749,7 +14746,7 @@ } else { - for ( i = (char *)pLevelEVT_Events + 4 * (3 * v1 + 3); *(int *)i == uEventID; i += 12 ) + for ( i = (char *)pLevelEVT_Index + 4 * (3 * v1 + 3); *(int *)i == uEventID; i += 12 ) { v8 = *((int *)i + 2); if ( pLevelEVT[v8 + 4] == 2 ) diff -r e8fcde8ba3fc -r 405d0c4dd1b3 mm7_5.cpp --- a/mm7_5.cpp Wed Feb 20 20:50:22 2013 +0600 +++ b/mm7_5.cpp Wed Feb 20 20:51:55 2013 +0600 @@ -931,9 +931,8 @@ GUIWindow::Create(v23, 0xD8u, 0, 0, (enum WindowType)90, v153, v167); //goto LABEL_143; if ( uMusicVolimeMultiplier ) - pAudioPlayer->PlaySound(SOUND_Bell, -1, 0, -1, 0, 0, - (signed __int64)(pSoundVolumeLevels[(char)uMusicVolimeMultiplier] * 64.0), 0); - pAudioPlayer->SetMusicVolume((signed __int64)(pSoundVolumeLevels[(char)uMusicVolimeMultiplier] * 64.0)); + pAudioPlayer->PlaySound(SOUND_Bell, -1, 0, -1, 0, 0, pSoundVolumeLevels[(char)uMusicVolimeMultiplier] * 64.0f, 0); + pAudioPlayer->SetMusicVolume(pSoundVolumeLevels[(char)uMusicVolimeMultiplier] * 64.0f); continue; } if ( uMessageParam == 5 ) @@ -948,9 +947,8 @@ GUIWindow::Create(v23, 0xD8u, 0, 0, (enum WindowType)90, v153, v167); //goto LABEL_143; if ( uMusicVolimeMultiplier ) - pAudioPlayer->PlaySound(SOUND_Bell, -1, 0, -1, 0, 0, - (signed __int64)(pSoundVolumeLevels[(char)uMusicVolimeMultiplier] * 64.0), 0); - pAudioPlayer->SetMusicVolume((signed __int64)(pSoundVolumeLevels[(char)uMusicVolimeMultiplier] * 64.0)); + pAudioPlayer->PlaySound(SOUND_Bell, -1, 0, -1, 0, 0, pSoundVolumeLevels[(char)uMusicVolimeMultiplier] * 64.0f, 0); + pAudioPlayer->SetMusicVolume(pSoundVolumeLevels[(char)uMusicVolimeMultiplier] * 64.0f); continue; } uMusicVolimeMultiplier = (pMouse->GetCursorPos(&v202)->x - 263) / 17; @@ -958,34 +956,21 @@ uMusicVolimeMultiplier = 9; //LABEL_143: if ( uMusicVolimeMultiplier ) - pAudioPlayer->PlaySound(SOUND_Bell, -1, 0, -1, 0, 0, - (signed __int64)(pSoundVolumeLevels[(char)uMusicVolimeMultiplier] * 64.0), 0); - pAudioPlayer->SetMusicVolume((signed __int64)(pSoundVolumeLevels[(char)uMusicVolimeMultiplier] * 64.0)); + pAudioPlayer->PlaySound(SOUND_Bell, -1, 0, -1, 0, 0, pSoundVolumeLevels[uMusicVolimeMultiplier] * 64.0f, 0); + pAudioPlayer->SetMusicVolume(pSoundVolumeLevels[uMusicVolimeMultiplier] * 64.0f); continue; case UIMSG_ChangeSoundVolume: - if ( uMessageParam == 4 ) + if ( uMessageParam == 4 )//reduce sound level { --uSoundVolumeMultiplier; if ( (char)uSoundVolumeMultiplier < 1 ) uSoundVolumeMultiplier = 0; - v168 = v0; - v24 = 243; - v154 = (int)pBtn_SliderLeft; -//LABEL_150: - GUIWindow::Create(v24, 0xA2u, 0, 0, (enum WindowType)90, v154, v168); - //goto LABEL_157; - pAudioPlayer->SetMasterVolume((signed __int64)(pSoundVolumeLevels[(char)uSoundVolumeMultiplier] * 128.0)); - v165 = 0; - v151 = 0; - v144 = 0; - v139 = 0; - v135 = -1; - v132 = 0; - v130 = -1; - v127 = 218; - goto _play_sound_and_continue; - } - if ( uMessageParam == 5 ) + GUIWindow::Create(243, 162, 0, 0, (enum WindowType)90, (int)pBtn_SliderLeft, v0); + pAudioPlayer->SetMasterVolume(pSoundVolumeLevels[uSoundVolumeMultiplier] * 128.0f); + pAudioPlayer->PlaySound((SoundID)218, -1, 0, -1, 0, 0, 0, 0); + continue; + } + if ( uMessageParam == 5 )//Increase sound level { ++uSoundVolumeMultiplier; if ( (char)uSoundVolumeMultiplier > 8 ) @@ -996,7 +981,7 @@ //goto LABEL_150; GUIWindow::Create(v24, 0xA2u, 0, 0, (enum WindowType)90, v154, v168); //goto LABEL_157; - pAudioPlayer->SetMasterVolume((signed __int64)(pSoundVolumeLevels[(char)uSoundVolumeMultiplier] * 128.0)); + pAudioPlayer->SetMasterVolume(pSoundVolumeLevels[uSoundVolumeMultiplier] * 128.0f); v165 = 0; v151 = 0; v144 = 0; @@ -1011,7 +996,7 @@ if ( (char)uSoundVolumeMultiplier > 8 ) uSoundVolumeMultiplier = 9; //LABEL_157: - pAudioPlayer->SetMasterVolume((signed __int64)(pSoundVolumeLevels[(char)uSoundVolumeMultiplier] * 128.0)); + pAudioPlayer->SetMasterVolume(pSoundVolumeLevels[uSoundVolumeMultiplier] * 128.0f); v165 = 0; v151 = 0; v144 = 0; @@ -1048,7 +1033,7 @@ if ( !uVoicesVolumeMultiplier ) continue; v165 = 0; - v151 = (signed __int64)(pSoundVolumeLevels[(char)uVoicesVolumeMultiplier] * 128.0); + v151 = pSoundVolumeLevels[uVoicesVolumeMultiplier] * 128.0f; v144 = 0; v139 = 0; v135 = -1; @@ -1071,7 +1056,7 @@ if ( !uVoicesVolumeMultiplier ) continue; v165 = 0; - v151 = (signed __int64)(pSoundVolumeLevels[(char)uVoicesVolumeMultiplier] * 128.0); + v151 = pSoundVolumeLevels[uVoicesVolumeMultiplier] * 128.0f; v144 = 0; v139 = 0; v135 = -1; @@ -1087,7 +1072,7 @@ if ( !uVoicesVolumeMultiplier ) continue; v165 = 0; - v151 = (signed __int64)(pSoundVolumeLevels[(char)uVoicesVolumeMultiplier] * 128.0); + v151 = pSoundVolumeLevels[uVoicesVolumeMultiplier] * 128.0f; v144 = 0; v139 = 0; v135 = -1; @@ -2280,7 +2265,7 @@ } if ( (signed int)pMessageQueue_50CBD0->uNumMessages < 40 ) { - pMessageQueue_50CBD0->pMessages[pMessageQueue_50CBD0->uNumMessages].eType = (UIMessageType)113; + pMessageQueue_50CBD0->pMessages[pMessageQueue_50CBD0->uNumMessages].eType = UIMSG_Escape; pMessageQueue_50CBD0->pMessages[pMessageQueue_50CBD0->uNumMessages].param = v0; *(&pMessageQueue_50CBD0->uNumMessages + 3 * pMessageQueue_50CBD0->uNumMessages + 3) = 0; ++pMessageQueue_50CBD0->uNumMessages; @@ -3503,9 +3488,9 @@ sub_41C0B8_set_status_string(pTmpBuf); continue; case UIMSG_ShowStatus_Food: - v173 = (char *)pParty->uNumFoodRations; - v157 = pGlobalTXT_LocalizationStrings[501];// You have %lu food" - goto _sprintex_2args_draw_status_and_continue; + sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[501], pParty->uNumFoodRations); // "You have %lu food" + sub_41C0B8_set_status_string(pTmpBuf); + continue; case UIMSG_ShowStatus_Player: pPlayer5 = pPlayers[uMessageParam]; sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[429], pPlayer5->pName, pClassNames[pPlayer5->classType]);// "%s the %s" @@ -3637,7 +3622,7 @@ if ( pCurrentScreen ) continue; pParty->uFlags |= 2u; - GUIWindow::Create(0x207u, 0x88u, 0, 0, (enum WindowType)90, (int)dword_507A14, 0); + GUIWindow::Create(0x207u, 0x88u, 0, 0, (enum WindowType)90, (int)pBtn_ZoomOut, 0); uNumSeconds = 131072; v118 = 2 * viewparams->uMinimapZoom; ++viewparams->field_28; @@ -3660,7 +3645,7 @@ if ( pCurrentScreen ) continue; pParty->uFlags |= 2u; - GUIWindow::Create(0x23Eu, 0x88u, 0, 0, (enum WindowType)90, (int)dword_507A18, 0); + GUIWindow::Create(0x23Eu, 0x88u, 0, 0, (enum WindowType)90, (int)pBtn_ZoomIn, 0); uNumSeconds = 32768; v118 = (unsigned __int64)((signed __int64)(signed int)viewparams->uMinimapZoom << 15) >> 16; --viewparams->field_28; @@ -5492,7 +5477,7 @@ if ( pMonster->sCurrentHP > 0 ) { Actor::_4030AD(uActorID_Monster_, a1, 0); - Actor::_43AC45(uActorID_Monster_, 1); + Actor::AggroSurroundingPeasants(uActorID_Monster_, 1); if ( bShowDamage ) { v50 = uDamageAmount; @@ -5537,8 +5522,8 @@ } } Actor::Die(uActorID_Monster_); - Actor::_438CF3(uActorID_Monster_); - Actor::_43AC45(uActorID_Monster_, 1); + Actor::ApplyFineForKillingPeasant(uActorID_Monster_); + Actor::AggroSurroundingPeasants(uActorID_Monster_, 1); if ( pMonster->pMonsterInfo.uExp ) sub_4269A2_GivePartyExp(pMonsterStats->pInfos[pMonster->pMonsterInfo.uID].uExp); v40 = SPEECH_51; @@ -5827,8 +5812,8 @@ { if ( v7->sCurrentHP >= 1 ) { - Actor::_4030AD(uActorID, 8 * a4 | 4, 0); - Actor::_43AC45(uActorID, 1); + Actor::_4030AD(uActorID, 8 * a4 | OBJECT_Player, 0); + Actor::AggroSurroundingPeasants(uActorID, 1); } else { @@ -5854,8 +5839,8 @@ } } Actor::Die(uActorID); - Actor::_438CF3(uActorID); - Actor::_43AC45(uActorID, 1); + Actor::ApplyFineForKillingPeasant(uActorID); + Actor::AggroSurroundingPeasants(uActorID, 1); if ( v7->pMonsterInfo.uExp ) sub_4269A2_GivePartyExp(pMonsterStats->pInfos[v7->pMonsterInfo.uID].uExp); v34 = SPEECH_51; @@ -6013,8 +5998,8 @@ { if ( v44->sCurrentHP >= 1 ) { - Actor::_4030AD(uActorID, 8 * a4 | 4, 0); - Actor::_43AC45(uActorID, 1); + Actor::_4030AD(uActorID, 8 * a4 | OBJECT_Player, 0); + Actor::AggroSurroundingPeasants(uActorID, 1); } else { @@ -6040,8 +6025,8 @@ } } Actor::Die(uActorID); - Actor::_438CF3(uActorID); - Actor::_43AC45(uActorID, 1); + Actor::ApplyFineForKillingPeasant(uActorID); + Actor::AggroSurroundingPeasants(uActorID, 1); if ( v44->pMonsterInfo.uExp ) sub_4269A2_GivePartyExp(pMonsterStats->pInfos[v44->pMonsterInfo.uID].uExp); v64 = SPEECH_51; @@ -6348,7 +6333,7 @@ } //----- (0043B1B0) -------------------------------------------------------- -__int16 __fastcall sub_43B1B0(signed int a1, unsigned int a2, Vec3_int_ *pVelocity, signed int a4) +void sub_43B1B0(signed int a1, unsigned int a2, Vec3_int_ *pVelocity, signed int a4) { int v4; // ebx@1 LayingItem *v5; // eax@2 @@ -6432,7 +6417,7 @@ Actor::_4030AD(uActorID, v17, 0); else Actor::Die(uActorID); - Actor::_43AC45(uActorID, 0); + Actor::AggroSurroundingPeasants(uActorID, 0); v18 = 20 * v14 / (signed int)v7->pMonsterInfo.uHP; if ( 20 * v14 / (signed int)v7->pMonsterInfo.uHP > 10 ) v18 = 10; @@ -6445,13 +6430,13 @@ v7->vVelocity.y = 50 * LOWORD(pVelocity->y); v7->vVelocity.z = 50 * LOWORD(pVelocity->z); } - LOWORD(v6) = Actor::AddBloodsplatOnDamageOverlay(uActorID, 1, v14); + Actor::AddBloodsplatOnDamageOverlay(uActorID, 1, v14); } else { - LOWORD(v6) = Actor::_4030AD(uActorID, v17, 0); + Actor::_4030AD(uActorID, v17, 0); } - return v6; + return; } v13 = v7->pMonsterInfo.uSpell2ID; } @@ -6463,7 +6448,6 @@ } } } - return v6; } //----- (0043BCA7) -------------------------------------------------------- @@ -7021,7 +7005,11 @@ //----- (0043CC7C) -------------------------------------------------------- void __fastcall CharacterUI_DrawPaperdoll(unsigned int uPlayerID) { + Player **ppPlayer; // esi@1 Player *pPlayer; // ebx@1 + enum CHARACTER_RACE pRace; // edi@1 + signed int pSex; // eax@1 + int v5; // edi@4 unsigned int v6; // ecx@9 int v7; // ecx@10 unsigned int v8; // eax@14 @@ -7037,22 +7025,22 @@ int v18; // edi@30 char *v19; // eax@30 Texture *v20; // edi@31 - int pBowNum; // eax@37 + unsigned int v21; // eax@37 int v22; // edi@38 int v23; // eax@38 - int pX; // ebx@38 + int v24; // ebx@38 int v25; // eax@38 LODFile_IconsBitmaps *v26; // ecx@42 Texture *v27; // edi@51 double v28; // st7@51 char v29; // zf@54 char *v30; // eax@54 - int pCloakNum; // eax@59 + unsigned int v31; // eax@59 int v32; // edx@60 int v33; // eax@65 int v34; // eax@74 int v35; // ebx@74 - int pY2; // ecx@74 + unsigned int v36; // ecx@74 int v37; // eax@74 LODFile_IconsBitmaps *v38; // ecx@78 Texture *v39; // edi@85 @@ -7211,7 +7199,8 @@ signed int v192; // [sp-4h] [bp-50h]@304 unsigned int a3; // [sp+10h] [bp-3Ch]@7 int a3a; // [sp+10h] [bp-3Ch]@15 - int pY; // [sp+10h] [bp-3Ch]@38 + int a3b; // [sp+10h] [bp-3Ch]@38 + unsigned int a3c; // [sp+10h] [bp-3Ch]@74 unsigned int a3d; // [sp+10h] [bp-3Ch]@106 int a3e; // [sp+10h] [bp-3Ch]@129 int a3f; // [sp+10h] [bp-3Ch]@168 @@ -7223,7 +7212,7 @@ signed int a2; // [sp+14h] [bp-38h]@7 unsigned int a2a; // [sp+14h] [bp-38h]@15 Texture *a2b; // [sp+14h] [bp-38h]@49 - int pX2; // [sp+14h] [bp-38h]@74 + int a2c; // [sp+14h] [bp-38h]@74 int a2d; // [sp+14h] [bp-38h]@106 int a2e; // [sp+14h] [bp-38h]@129 int a2f; // [sp+14h] [bp-38h]@168 @@ -7232,7 +7221,9 @@ Texture *a2i; // [sp+14h] [bp-38h]@284 int a2j; // [sp+14h] [bp-38h]@312 int a2k; // [sp+14h] [bp-38h]@336 + Player *v217; // [sp+18h] [bp-34h]@1 int v218; // [sp+1Ch] [bp-30h]@15 + int v219; // [sp+1Ch] [bp-30h]@60 int v220; // [sp+1Ch] [bp-30h]@94 int v221; // [sp+1Ch] [bp-30h]@128 int v222; // [sp+1Ch] [bp-30h]@161 @@ -7243,6 +7234,8 @@ int v227; // [sp+1Ch] [bp-30h]@336 int v228; // [sp+1Ch] [bp-30h]@359 int v229; // [sp+20h] [bp-2Ch]@15 + int v230; // [sp+20h] [bp-2Ch]@38 + int v231; // [sp+20h] [bp-2Ch]@60 int v232; // [sp+20h] [bp-2Ch]@94 int v233; // [sp+20h] [bp-2Ch]@128 int v234; // [sp+20h] [bp-2Ch]@161 @@ -7255,43 +7248,54 @@ unsigned int v241; // [sp+2Ch] [bp-20h]@38 int v242; // [sp+2Ch] [bp-20h]@197 unsigned int v243; // [sp+2Ch] [bp-20h]@370 - int pFaceNum; // [sp+34h] [bp-18h]@6 + int v244; // [sp+34h] [bp-18h]@6 signed int v245; // [sp+34h] [bp-18h]@361 + unsigned int uPlayerID_; // [sp+38h] [bp-14h]@1 int uPlayerID_a; // [sp+38h] [bp-14h]@9 signed int IsDwarf; // [sp+40h] [bp-Ch]@4 int v249; // [sp+40h] [bp-Ch]@358 - - pPlayer = pPlayers[uPlayerID]; + signed int v250; // [sp+44h] [bp-8h]@1 + + ppPlayer = &pPlayers[uPlayerID]; + pPlayer = *ppPlayer; + uPlayerID_ = uPlayerID; + v217 = *ppPlayer; pIcons_LOD->LoadTexture("sptext01", TEXTURE_16BIT_PALETTE); - if ( pPlayer->GetRace() && pPlayer->GetRace() != 1 && pPlayer->GetRace() != 2 ) + pRace = pPlayer->GetRace(); + pSex = pPlayer->GetSexByVoice(); + v250 = pSex; + if ( pRace && pRace != 1 && pRace != 2 ) { IsDwarf = 1; - pBodyComplection = (pPlayer->GetSexByVoice() != 0) + 2; + v5 = (pSex != 0) + 2; } else { IsDwarf = 0; - pBodyComplection = pPlayer->GetSexByVoice() != 0; - } - pFaceNum = pPlayer->uFace; + v5 = pSex != 0; + } + pBodyComplection = v5; + v244 = (*ppPlayer)->uFace; pRenderer->ResetClip(); pRenderer->DrawTextureIndexed(0x1D3u, 0, (Texture *)(uTextureID_BACKDOLL != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_BACKDOLL] : 0));// - if ( !IsPlayerWearingWatersuit[uPlayerID] )// - { - pBowNum = pPlayer->pEquipment.uBow; // - if ( !pBowNum ) + if ( !IsPlayerWearingWatersuit[uPlayerID_] ) + { + v21 = pPlayer->pEquipment.uBow; // + if ( !v21 ) goto LABEL_59; - v22 = (int)&pPlayer->pInventoryItems[pBowNum-1]; + v230 = pPlayer->pEquipment.uBow; + v22 = (int)&v217->pInventoryItems[v21-1]; v23 = *(int *)v22; - pX = pPaperdoll_BodyX + paperdoll_Weapon[pBodyComplection][2][0] - pItemsTable->pItems[v23].uEquipX; - pY = pPaperdoll_BodyY + paperdoll_Weapon[pBodyComplection][2][1] - pItemsTable->pItems[v23].uEquipY; + v24 = pPaperdoll_BodyX + paperdoll_Weapon[pBodyComplection][2][0] - pItemsTable->pItems[v23].uEquipX; + a3b = pPaperdoll_BodyY + paperdoll_Weapon[pBodyComplection][2][1] - pItemsTable->pItems[v23].uEquipY; v241 = pIcons_LOD->LoadTexture(pItemsTable->pItems[v23].pIconName, TEXTURE_16BIT_PALETTE); v25 = *(int *)(v22 + 20); if ( !(*(int *)(v22 + 20) & 0xF0) ) { if ( v25 & 2 ) { - pRenderer->_4A6776(pX, pY, (Texture *)(v241 != -1 ? (int)&pIcons_LOD->pTextures[v241] : 0)); + v27 = (Texture *)(v241 != -1 ? (int)&pIcons_LOD->pTextures[v241] : 0); + pRenderer->DrawTransparentRedShade(v24, a3b, v27); } else { @@ -7300,22 +7304,24 @@ if ( v29 ) { v27 = (Texture *)(v241 != -1 ? (int)v30 : 0); - pRenderer->DrawTransparentGreenShade(pX, pY, (Texture *)(v241 != -1 ? (int)v30 : 0)); + pRenderer->DrawTransparentGreenShade(v24, a3b, (Texture *)(v241 != -1 ? (int)v30 : 0)); } else { v27 = (Texture *)(v241 != -1 ? (int)v30 : 0); - pRenderer->DrawTextureTransparent(pX, pY, (Texture *)(v241 != -1 ? (int)v30 : 0)); + pRenderer->DrawTextureTransparent(v24, a3b, (Texture *)(v241 != -1 ? (int)v30 : 0)); } } LABEL_57: if ( !bRingsShownInCharScreen ) - pRenderer->_4A612A(pX, pY, v27, pBowNum); + pRenderer->_4A612A(v24, a3b, v27, v230); LABEL_59: - pCloakNum = pPlayer->pEquipment.uCloak;// - if ( !pCloakNum ) + v31 = v217->pEquipment.uCloak;// + if ( !v31 ) goto LABEL_93; - v32 = (int)&pPlayer->pInventoryItems[pCloakNum-1]; + v231 = v217->pEquipment.uCloak; + v32 = (int)&v217->pInventoryItems[v31-1]; + v219 = v32; if ( *(int *)v32 != 525 ) { switch ( *(int *)v32 ) @@ -7339,33 +7345,34 @@ LABEL_74: v34 = v33 + 10 * pBodyComplection; v35 = paperdoll_array_511828[0][v34];//Texture_Cloak - pX2 = pPaperdoll_BodyX + paperdoll_Cloak[0][v34][0]; - pY2 = pPaperdoll_BodyY + paperdoll_Cloak[0][v34][1]; + a2c = pPaperdoll_BodyX + paperdoll_Cloak[0][v34][0]; + v36 = pPaperdoll_BodyY + paperdoll_Cloak[0][v34][1]; v37 = *(int *)(v32 + 20); + a3c = v36; if ( !(v37 & 0xF0) ) { v41 = v35 + 1; if ( v37 & 2 ) { v42 = (Texture *)(v41 != 0 ? (int)&pIcons_LOD->pTextures[v35] : 0); - pRenderer->_4A6776(pX2, pY2, v42); + pRenderer->DrawTransparentRedShade(a2c, v36, v42); } else { v42 = (Texture *)(v41 != 0 ? (int)&pIcons_LOD->pTextures[v35] : 0); - pRenderer->DrawTextureTransparent(pX2, pY2, v42); + pRenderer->DrawTextureTransparent(a2c, v36, v42); } if ( !bRingsShownInCharScreen ) - pRenderer->_4A612A(pX2, pY2, v42, pCloakNum); + pRenderer->_4A612A(a2c, a3c, v42, v231); LABEL_93: - v240 = 4 * uPlayerID - 4; + v240 = 4 * uPlayerID_ - 4; pRenderer->DrawTextureTransparent(pPaperdoll_BodyX, pPaperdoll_BodyY, (Texture *)(*(unsigned int *)((char *)papredoll_dbods + v240) != -1 ? (int)&pIcons_LOD->pTextures[*(unsigned int *)((char *)papredoll_dbods + v240)] : 0)); - v43 = pPlayer->pEquipment.uBody;// + v43 = v217->pEquipment.uBody;// if ( !v43 ) goto LABEL_127; - v232 = pPlayer->pEquipment.uBody; - v44 = (int)&pPlayer->pInventoryItems[v43-1]; + v232 = v217->pEquipment.uBody; + v44 = (int)&v217->pInventoryItems[v43-1]; v220 = v44; if ( *(int *)v44 != 504 ) { @@ -7400,7 +7407,7 @@ if ( v49 & 2 ) { v54 = (Texture *)(v53 != 0 ? (int)&pIcons_LOD->pTextures[v48] : 0); - pRenderer->_4A6776(a2d, v47, v54); + pRenderer->DrawTransparentRedShade(a2d, v47, v54); } else { @@ -7420,18 +7427,18 @@ if ( !bRingsShownInCharScreen ) pRenderer->_4A612A(a2d, a3d, v54, v232); LABEL_127: - v56 = pPlayer->pEquipment.field_20; + v56 = v217->pEquipment.field_20; if ( !v56 ) goto LABEL_155; - v233 = pPlayer->pEquipment.field_20; - v57 = (int)&pPlayer->pInventoryItems[v56-1]; + v233 = v217->pEquipment.field_20; + v57 = (int)&v217->pInventoryItems[v56-1]; v221 = v57; v58 = *(int *)v57; if ( *(int *)v57 == 529 ) { a3e = pPaperdoll_BodyY + paperdoll_Boot[pBodyComplection][5][1]; a2e = pPaperdoll_BodyX + paperdoll_Boot[pBodyComplection][5][0]; - v59 = papredoll_flying_feet[pFaceNum]; + v59 = papredoll_flying_feet[v244]; } else { @@ -7467,7 +7474,7 @@ if ( v62 & 2 ) { v67 = (Texture *)(v65 != 0 ? (int)v66 : 0); - pRenderer->_4A6776(a2e, a3e, v67); + pRenderer->DrawTransparentRedShade(a2e, a3e, v67); } else { @@ -7485,19 +7492,19 @@ if ( !bRingsShownInCharScreen ) pRenderer->_4A612A(a2e, a3e, v67, v233); LABEL_155: - v68 = pPlayer; - v69 = pPlayer->pEquipment.uMainHand; + v68 = v217; + v69 = v217->pEquipment.uMainHand; uPlayerID_a = 2 * pBodyComplection; - if ( !v69 || (v70 = *(int *)&pPlayer->pInventoryItems[v69-1], pItemsTable->pItems[v70].uEquipType != 1) - && (pItemsTable->pItems[v70].uSkillType != 4 || pPlayer->pEquipment.uOffHand) ) + if ( !v69 || (v70 = *(int *)&v217->pInventoryItems[v69-1], pItemsTable->pItems[v70].uEquipType != 1) + && (pItemsTable->pItems[v70].uSkillType != 4 || v217->pEquipment.uOffHand) ) pRenderer->DrawTextureTransparent(pPaperdoll_BodyX + pPaperdoll_LeftHand[pBodyComplection][0], pPaperdoll_BodyY + pPaperdoll_LeftHand[pBodyComplection][1], (Texture *)(*(unsigned int *)((char *)papredoll_dlads + v240) != -1 ? (int)&pIcons_LOD->pTextures[*(unsigned int *)((char *)papredoll_dlads + v240)] : 0)); - v71 = pPlayer->pEquipment.uBelt; + v71 = v217->pEquipment.uBelt; if ( v71 ) { - v234 = pPlayer->pEquipment.uBelt; - v72 = (int)&pPlayer->pInventoryItems[v71-1]; + v234 = v217->pEquipment.uBelt; + v72 = (int)&v217->pInventoryItems[v71-1]; v222 = v72; if ( *(int *)v72 == 524 ) { @@ -7522,15 +7529,15 @@ v75 = stru_511718.texids[v74]; else v75 = stru_511718.texids[v73 + 7 * (pBodyComplection - 2)]; - v76 = *(int *)&pPlayer->field_1F5[36 * v71 + 15]; - if ( !(*(int *)&pPlayer->field_1F5[36 * v71 + 15] & 0xF0) ) + v76 = *(int *)&v217->field_1F5[36 * v71 + 15]; + if ( !(*(int *)&v217->field_1F5[36 * v71 + 15] & 0xF0) ) { v79 = v75 + 1; v80 = (char *)&pIcons_LOD->pTextures[v75]; if ( v76 & 2 ) { v81 = (Texture *)(v79 != 0 ? (int)v80 : 0); - pRenderer->_4A6776(a2f, a3f, v81); + pRenderer->DrawTransparentRedShade(a2f, a3f, v81); } else { @@ -7547,12 +7554,12 @@ } if ( !bRingsShownInCharScreen ) pRenderer->_4A612A(a2f, a3f, v81, v234); - v68 = pPlayer; + v68 = v217; goto LABEL_192; } - if ( (*(int *)&pPlayer->field_1F5[36 * v71 + 15] & 0xF0) != 16 ) + if ( (*(int *)&v217->field_1F5[36 * v71 + 15] & 0xF0) != 16 ) { - if ( (*(int *)&pPlayer->field_1F5[36 * v71 + 15] & 0xF0) == 32 ) + if ( (*(int *)&v217->field_1F5[36 * v71 + 15] & 0xF0) == 32 ) { v172 = "sp28a"; v77 = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture(v172, TEXTURE_16BIT_PALETTE)]; @@ -7565,10 +7572,10 @@ } v78 = (double)GetTickCount() * 0.1; pRenderer->_4A63E6(a2f, a3f, (Texture *)(v75 != -1 ? (int)&pIcons_LOD->pTextures[v75] : 0), v77, (signed __int64)v78, 0, 255); - v68 = pPlayer; + v68 = v217; goto LABEL_192; } - if ( (*(int *)&pPlayer->field_1F5[36 * v71 + 15] & 0xF0) == 64 ) + if ( (*(int *)&v217->field_1F5[36 * v71 + 15] & 0xF0) == 64 ) { v172 = "sp30a"; v77 = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture(v172, TEXTURE_16BIT_PALETTE)]; @@ -7581,10 +7588,10 @@ } v78 = (double)GetTickCount() * 0.1; pRenderer->_4A63E6(a2f, a3f, (Texture *)(v75 != -1 ? (int)&pIcons_LOD->pTextures[v75] : 0), v77, (signed __int64)v78, 0, 255); - v68 = pPlayer; + v68 = v217; goto LABEL_192; } - if ( (*(int *)&pPlayer->field_1F5[36 * v71 + 15] & 0xF0) == 128 ) + if ( (*(int *)&v217->field_1F5[36 * v71 + 15] & 0xF0) == 128 ) { v172 = "sp91a"; v77 = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture(v172, TEXTURE_16BIT_PALETTE)]; @@ -7597,7 +7604,7 @@ } v78 = (double)GetTickCount() * 0.1; pRenderer->_4A63E6(a2f, a3f, (Texture *)(v75 != -1 ? (int)&pIcons_LOD->pTextures[v75] : 0), v77, (signed __int64)v78, 0, 255); - v68 = pPlayer; + v68 = v217; goto LABEL_192; } } @@ -7612,7 +7619,7 @@ } v78 = (double)GetTickCount() * 0.1; pRenderer->_4A63E6(a2f, a3f, (Texture *)(v75 != -1 ? (int)&pIcons_LOD->pTextures[v75] : 0), v77, (signed __int64)v78, 0, 255); - v68 = pPlayer; + v68 = v217; goto LABEL_192; } } @@ -7685,21 +7692,21 @@ if ( v116 == pIcons_LOD->FindTextureByName("pending") ) { LABEL_292: - v68 = pPlayer; + v68 = v217; LABEL_293: - if ( pFaceNum == 12 || pFaceNum == 13 ) + if ( v244 == 12 || v244 == 13 ) { - v122 = papredoll_dbrds[pFaceNum]; + v122 = papredoll_dbrds[v244]; if ( v122 != pIcons_LOD->FindTextureByName("Pending") ) - pRenderer->DrawTextureTransparent(pPaperdoll_BodyX + pPaperdoll_Beards[2 * pFaceNum - 24], - pPaperdoll_BodyY + pPaperdoll_Beards[2 * pFaceNum - 23], + pRenderer->DrawTextureTransparent(pPaperdoll_BodyX + pPaperdoll_Beards[2 * v244 - 24], + pPaperdoll_BodyY + pPaperdoll_Beards[2 * v244 - 23], (Texture *)(v122 != -1 ? (int)&pIcons_LOD->pTextures[v122] : 0)); } v123 = v68->pEquipment.uHelm; if ( !v123 ) goto LABEL_335; v237 = v123; - v124 = (int)&pPlayer->pInventoryItems[v123-1]; + v124 = (int)&v217->pInventoryItems[v123-1]; v226 = v124; if ( *(int *)v124 != 521 ) { @@ -7731,7 +7738,7 @@ a2j = pPaperdoll_BodyX + dword_4E58D0[v126]; a3i = pPaperdoll_BodyY + dword_4E58D4[v126]; if ( IsDwarf != 1 || *(int *)v124 != 92 ) - v127 = stru_511698.texids[v125 + 16 * pPlayer->GetSexByVoice()]; + v127 = stru_511698.texids[v125 + 16 * v250]; else v127 = papredoll_dbrds[11]; v128 = *(int *)(v124 + 20); @@ -7807,7 +7814,7 @@ if ( v128 & 2 ) { v133 = (Texture *)(v131 != 0 ? (int)v132 : 0); - pRenderer->_4A6776(a2j, a3i, v133); + pRenderer->DrawTransparentRedShade(a2j, a3i, v133); } else { @@ -7825,11 +7832,11 @@ if ( !bRingsShownInCharScreen ) pRenderer->_4A612A(a2j, a3i, v133, v237); LABEL_335: - v134 = pPlayer->pEquipment.uMainHand; + v134 = v217->pEquipment.uMainHand; if ( !v134 ) goto LABEL_358; - v238 = pPlayer->pEquipment.uMainHand; - v135 = (int)&pPlayer->pInventoryItems[v134-1]; + v238 = v217->pEquipment.uMainHand; + v135 = (int)&v217->pInventoryItems[v134-1]; v227 = v135; v136 = *(int *)v135; v137 = *(int *)v135; @@ -7848,7 +7855,7 @@ if ( v139 & 2 ) { v144 = (Texture *)(v142 != 0 ? (int)v143 : 0); - pRenderer->_4A6776(a2k, a3j, v144); + pRenderer->DrawTransparentRedShade(a2k, a3j, v144); } else { @@ -7866,11 +7873,11 @@ if ( !bRingsShownInCharScreen ) pRenderer->_4A612A(a2k, a3j, v144, v238); LABEL_358: - v145 = pPlayer->pEquipment.uOffHand; - v249 = pPlayer->pEquipment.uOffHand; + v145 = v217->pEquipment.uOffHand; + v249 = v217->pEquipment.uOffHand; if ( !v145 ) goto LABEL_393; - v146 = (int)&pPlayer->pInventoryItems[v145-1]; + v146 = (int)&v217->pInventoryItems[v145-1]; v228 = v146; v147 = *(int *)v146; v148 = *(int *)v146; @@ -7907,7 +7914,7 @@ if ( v155 & 2 ) { v159 = (Texture *)(v243 != -1 ? (int)&pIcons_LOD->pTextures[v243] : 0); - pRenderer->_4A6776(v150, a3k, v159); + pRenderer->DrawTransparentRedShade(v150, a3k, v159); } else { @@ -8111,7 +8118,7 @@ if ( *(int *)(v225 + 20) & 2 ) { v121 = (Texture *)(v119 != 0 ? (int)v120 : 0); - pRenderer->_4A6776(a2h, a3h, v121); + pRenderer->DrawTransparentRedShade(a2h, a3h, v121); } else { @@ -8221,7 +8228,7 @@ a3g = pPaperdoll_BodyY + v95; if ( v94 == pIcons_LOD->FindTextureByName("pending") ) { - v68 = pPlayer; + v68 = v217; goto LABEL_259; } if ( *(int *)(v242 + 516) & 0xF0 ) @@ -8244,7 +8251,7 @@ v97 = (double)GetTickCount(); pRenderer->_4A63E6(a2g, a3g, (Texture *)(v94 != -1 ? (int)&pIcons_LOD->pTextures[v94] : 0), (Texture *)v96, (signed __int64)(v97 * 0.1), v174, v187); - v68 = pPlayer; + v68 = v217; goto LABEL_259; } if ( (*(int *)(v242 + 516) & 0xF0) == 64 ) @@ -8263,7 +8270,7 @@ v97 = (double)GetTickCount(); pRenderer->_4A63E6(a2g, a3g, (Texture *)(v94 != -1 ? (int)&pIcons_LOD->pTextures[v94] : 0), (Texture *)v96, (signed __int64)(v97 * 0.1), v174, v187); - v68 = pPlayer; + v68 = v217; goto LABEL_259; } if ( (*(int *)(v242 + 516) & 0xF0) == 128 ) @@ -8282,7 +8289,7 @@ v97 = (double)GetTickCount(); pRenderer->_4A63E6(a2g, a3g, (Texture *)(v94 != -1 ? (int)&pIcons_LOD->pTextures[v94] : 0), (Texture *)v96, (signed __int64)(v97 * 0.1), v174, v187); - v68 = pPlayer; + v68 = v217; goto LABEL_259; } } @@ -8300,7 +8307,7 @@ v97 = (double)GetTickCount(); pRenderer->_4A63E6(a2g, a3g, (Texture *)(v94 != -1 ? (int)&pIcons_LOD->pTextures[v94] : 0), (Texture *)v96, (signed __int64)(v97 * 0.1), v174, v187); - v68 = pPlayer; + v68 = v217; goto LABEL_259; } v98 = v94 + 1; @@ -8312,10 +8319,10 @@ v188 = v101; v175 = a3g; v163 = a2g; - v100->_4A6776(v163, v175, v188); + v100->DrawTransparentRedShade(v163, v175, v188); if ( !bRingsShownInCharScreen ) pRenderer->_4A612A(a2g, a3g, v101, v235); - v68 = pPlayer; + v68 = v217; goto LABEL_259; } if ( *(char *)(v242 + 516) & 1 ) @@ -8327,7 +8334,7 @@ pRenderer->DrawTextureTransparent(v164, v176, v189); if ( !bRingsShownInCharScreen ) pRenderer->_4A612A(a2g, a3g, v101, v235); - v68 = pPlayer; + v68 = v217; goto LABEL_259; } v101 = (Texture *)(v98 != 0 ? (int)v99 : 0); @@ -8337,14 +8344,14 @@ pRenderer->DrawTransparentGreenShade(v165, v177, v190); if ( !bRingsShownInCharScreen ) pRenderer->_4A612A(a2g, a3g, v101, v235); - v68 = pPlayer; + v68 = v217; goto LABEL_259; } v102 = 17 * pBodyComplection + v90; v94 = paperdoll_array_511290[0][v102][1]; if ( v94 == pIcons_LOD->FindTextureByName("pending") ) { - v68 = pPlayer; + v68 = v217; goto LABEL_259; } v103 = pPaperdoll_BodyX + paperdoll_shoulder[0][v102][0]; @@ -8364,10 +8371,10 @@ v175 = v104; v163 = v103; v100 = pRenderer; - v100->_4A6776(v163, v175, v188); + v100->DrawTransparentRedShade(v163, v175, v188); if ( !bRingsShownInCharScreen ) pRenderer->_4A612A(a2g, a3g, v101, v235); - v68 = pPlayer; + v68 = v217; goto LABEL_259; } if ( v224 & 1 ) @@ -8380,7 +8387,7 @@ pRenderer->DrawTextureTransparent(v164, v176, v189); if ( !bRingsShownInCharScreen ) pRenderer->_4A612A(a2g, a3g, v101, v235); - v68 = pPlayer; + v68 = v217; goto LABEL_259; } v101 = (Texture *)(v109 != 0 ? (int)v110 : 0); @@ -8391,7 +8398,7 @@ pRenderer->DrawTransparentGreenShade(v165, v177, v190); if ( !bRingsShownInCharScreen ) pRenderer->_4A612A(a2g, a3g, v101, v235); - v68 = pPlayer; + v68 = v217; goto LABEL_259; } v106 = v105 - 16; @@ -8414,7 +8421,7 @@ v97 = (double)GetTickCount(); pRenderer->_4A63E6(a2g, a3g, (Texture *)(v94 != -1 ? (int)&pIcons_LOD->pTextures[v94] : 0), (Texture *)v96, (signed __int64)(v97 * 0.1), v174, v187); - v68 = pPlayer; + v68 = v217; goto LABEL_259; } v108 = v107 - 32; @@ -8434,7 +8441,7 @@ v97 = (double)GetTickCount(); pRenderer->_4A63E6(a2g, a3g, (Texture *)(v94 != -1 ? (int)&pIcons_LOD->pTextures[v94] : 0), (Texture *)v96, (signed __int64)(v97 * 0.1), v174, v187); - v68 = pPlayer; + v68 = v217; goto LABEL_259; } if ( v108 == 64 ) @@ -8453,7 +8460,7 @@ v97 = (double)GetTickCount(); pRenderer->_4A63E6(a2g, a3g, (Texture *)(v94 != -1 ? (int)&pIcons_LOD->pTextures[v94] : 0), (Texture *)v96, (signed __int64)(v97 * 0.1), v174, v187); - v68 = pPlayer; + v68 = v217; goto LABEL_259; } } @@ -8471,7 +8478,7 @@ v97 = (double)GetTickCount(); pRenderer->_4A63E6(a2g, a3g, (Texture *)(v94 != -1 ? (int)&pIcons_LOD->pTextures[v94] : 0), (Texture *)v96, (signed __int64)(v97 * 0.1), v174, v187); - v68 = pPlayer; + v68 = v217; goto LABEL_259; } v186 = 16; @@ -8656,11 +8663,11 @@ if ( dword_50C9A8 <= 0 ) { dword_50C9A8 = 0; - *(char *)(v32 + 20) &= 0xFu; + *(char *)(v219 + 20) &= 0xFu; ptr_50C9A4 = 0; } v40 = (double)GetTickCount() * 0.1; - pRenderer->_4A63E6(pX2, pY2, (Texture *)(v35 != -1 ? (int)&pIcons_LOD->pTextures[v35] : 0), v39, + pRenderer->_4A63E6(a2c, a3c, (Texture *)(v35 != -1 ? (int)&pIcons_LOD->pTextures[v35] : 0), v39, (signed __int64)v40, 0, 255); goto LABEL_93; } @@ -8670,11 +8677,11 @@ if ( dword_50C9A8 <= 0 ) { dword_50C9A8 = 0; - *(char *)(v32 + 20) &= 0xFu; + *(char *)(v219 + 20) &= 0xFu; ptr_50C9A4 = 0; } v40 = (double)GetTickCount() * 0.1; - pRenderer->_4A63E6(pX2, pY2, (Texture *)(v35 != -1 ? (int)&pIcons_LOD->pTextures[v35] : 0), v39, + pRenderer->_4A63E6(a2c, a3c, (Texture *)(v35 != -1 ? (int)&pIcons_LOD->pTextures[v35] : 0), v39, (signed __int64)v40, 0, 255); goto LABEL_93; } @@ -8686,11 +8693,11 @@ if ( dword_50C9A8 <= 0 ) { dword_50C9A8 = 0; - *(char *)(v32 + 20) &= 0xFu; + *(char *)(v219 + 20) &= 0xFu; ptr_50C9A4 = 0; } v40 = (double)GetTickCount() * 0.1; - pRenderer->_4A63E6(pX2, pY2, (Texture *)(v35 != -1 ? (int)&pIcons_LOD->pTextures[v35] : 0), v39, + pRenderer->_4A63E6(a2c, a3c, (Texture *)(v35 != -1 ? (int)&pIcons_LOD->pTextures[v35] : 0), v39, (signed __int64)v40, 0, 255); goto LABEL_93; } @@ -8701,11 +8708,11 @@ if ( dword_50C9A8 <= 0 ) { dword_50C9A8 = 0; - *(char *)(v32 + 20) &= 0xFu; + *(char *)(v219 + 20) &= 0xFu; ptr_50C9A4 = 0; } v40 = (double)GetTickCount() * 0.1; - pRenderer->_4A63E6(pX2, pY2, (Texture *)(v35 != -1 ? (int)&pIcons_LOD->pTextures[v35] : 0), v39, + pRenderer->_4A63E6(a2c, a3c, (Texture *)(v35 != -1 ? (int)&pIcons_LOD->pTextures[v35] : 0), v39, (signed __int64)v40, 0, 255); goto LABEL_93; } @@ -8742,7 +8749,7 @@ } v27 = (Texture *)(v241 != -1 ? (int)&pIcons_LOD->pTextures[v241] : 0); v28 = (double)GetTickCount() * 0.1; - pRenderer->_4A63E6(pX, pY, v27, a2b, (signed __int64)v28, 0, 255); + pRenderer->_4A63E6(v24, a3b, v27, a2b, (signed __int64)v28, 0, 255); goto LABEL_57; } v168 = "sptext01"; @@ -8756,7 +8763,7 @@ } v27 = (Texture *)(v241 != -1 ? (int)&pIcons_LOD->pTextures[v241] : 0); v28 = (double)GetTickCount() * 0.1; - pRenderer->_4A63E6(pX, pY, v27, a2b, (signed __int64)v28, 0, 255); + pRenderer->_4A63E6(v24, a3b, v27, a2b, (signed __int64)v28, 0, 255); goto LABEL_57; } v168 = "sp30a"; @@ -8772,7 +8779,7 @@ } v27 = (Texture *)(v241 != -1 ? (int)&pIcons_LOD->pTextures[v241] : 0); v28 = (double)GetTickCount() * 0.1; - pRenderer->_4A63E6(pX, pY, v27, a2b, (signed __int64)v28, 0, 255); + pRenderer->_4A63E6(v24, a3b, v27, a2b, (signed __int64)v28, 0, 255); goto LABEL_57; } v26 = pIcons_LOD; @@ -8787,35 +8794,35 @@ } v27 = (Texture *)(v241 != -1 ? (int)&pIcons_LOD->pTextures[v241] : 0); v28 = (double)GetTickCount() * 0.1; - pRenderer->_4A63E6(pX, pY, v27, a2b, (signed __int64)v28, 0, 255); + pRenderer->_4A63E6(v24, a3b, v27, a2b, (signed __int64)v28, 0, 255); goto LABEL_57;; } a3 = pPaperdoll_BodyY; a2 = pPaperdoll_BodyX; - v240 = 4 * uPlayerID - 4; + v240 = 4 * uPlayerID_ - 4; pRenderer->DrawTextureTransparent(pPaperdoll_BodyX, pPaperdoll_BodyY, (Texture *)(*(unsigned int *)((char *)papredoll_dbods + v240) != -1 ? (int)&pIcons_LOD->pTextures[*(unsigned int *)((char *)papredoll_dbods + v240)] : 0)); if ( !bRingsShownInCharScreen ) pRenderer->_4A612A(a2, a3, (Texture *)(*(unsigned int *)((char *)papredoll_dbods + v240) != -1 ? (int)&pIcons_LOD->pTextures[*(unsigned int *)((char *)papredoll_dbods + v240)] : 0), pPlayer->pEquipment.uBody); - uPlayerID_a = 2 * pBodyComplection; + uPlayerID_a = 2 * v5; v6 = pPlayer->pEquipment.uMainHand; if ( !v6 || (v7 = *(int *)&pPlayer->pInventoryItems[v6-1], pItemsTable->pItems[v7].uEquipType != 1) && (pItemsTable->pItems[v7].uSkillType != 4 || pPlayer->pEquipment.uOffHand) ) - pRenderer->DrawTextureTransparent(pPaperdoll_BodyX + pPaperdoll_LeftHand[pBodyComplection][0], pPaperdoll_BodyY + pPaperdoll_LeftHand[pBodyComplection][1], + pRenderer->DrawTextureTransparent(pPaperdoll_BodyX + pPaperdoll_LeftHand[v5][0], pPaperdoll_BodyY + pPaperdoll_LeftHand[v5][1], (Texture *)(*(unsigned int *)((char *)papredoll_dlads + v240) != -1 ? (int)&pIcons_LOD->pTextures[*(unsigned int *)((char *)papredoll_dlads + v240)] : 0)); v8 = pPlayer->pEquipment.uMainHand; if ( v8 ) { v229 = pPlayer->pEquipment.uMainHand; - v9 = (int)&pPlayer->pInventoryItems[v8-1]; - v10 = pBodyComplection << 7; + v9 = (int)&v217->pInventoryItems[v8-1]; + v10 = v5 << 7; v218 = v9; v11 = *(int *)v9; v12 = *(int *)v9; - v13 = pPaperdoll_BodyX + paperdoll_Weapon[pBodyComplection][1][0] - pItemsTable->pItems[v12].uEquipX; + v13 = pPaperdoll_BodyX + paperdoll_Weapon[v5][1][0] - pItemsTable->pItems[v12].uEquipX; a2a = v13; a3a = pPaperdoll_BodyY + *(int *)((char *)&paperdoll_Weapon[0][1][1] + v10) - pItemsTable->pItems[v12].uEquipY; if ( v11 == 64 ) @@ -8896,7 +8903,7 @@ if ( v15 & 2 ) { v20 = (Texture *)(v18 != 0 ? (int)v19 : 0); - pRenderer->_4A6776(a2a, a3a, v20); + pRenderer->DrawTransparentRedShade(a2a, a3a, v20); } else { @@ -8918,11 +8925,11 @@ pRenderer->DrawTextureTransparent(pPaperdoll_BodyX + pPaperdoll_RightHand[uPlayerID_a], pPaperdoll_BodyY + pPaperdoll_RightHand[uPlayerID_a + 1], (Texture *)(*(unsigned int *)((char *)papredoll_drhs + v240) != -1 ? (int)&pIcons_LOD->pTextures[*(unsigned int *)((char *)papredoll_drhs + v240)] : 0)); - v161 = pPlayer->pEquipment.uMainHand; + v161 = v217->pEquipment.uMainHand; if ( v161 ) { - v162 = *(int *)&pPlayer->pInventoryItems[v161-1]; - if ( pItemsTable->pItems[v162].uEquipType == 1 || pItemsTable->pItems[v162].uSkillType == 4 && !pPlayer->pEquipment.uOffHand ) + v162 = *(int *)&v217->pInventoryItems[v161-1]; + if ( pItemsTable->pItems[v162].uEquipType == 1 || pItemsTable->pItems[v162].uSkillType == 4 && !v217->pEquipment.uOffHand ) pRenderer->DrawTextureTransparent(pPaperdoll_BodyX + pPaperdoll_SecondLeftHand[0][uPlayerID_a], pPaperdoll_BodyY + pPaperdoll_SecondLeftHand[0][uPlayerID_a + 1], (Texture *)(*(unsigned int *)((char *)papredoll_dlhus + v240) != -1 ? (int)&pIcons_LOD->pTextures[*(unsigned int *)((char *)papredoll_dlhus + v240)] : 0)); @@ -9056,7 +9063,7 @@ if ( v6 & 2 ) { v10 = (Texture *)(v9 != 0 ? (int)&pIcons_LOD->pTextures[v5] : 0); - pRenderer->_4A6776(a2, a3, v10); + pRenderer->DrawTransparentRedShade(a2, a3, v10); } else { @@ -9100,7 +9107,7 @@ v21 = 9 * v16; v22 = 493; v23 = (Texture *)(v20 != 0 ? (int)&pIcons_LOD->pTextures[8 * v21 / 0x48u] : 0); - pRenderer->_4A6776(0x1EDu, 0x5Bu, v23); + pRenderer->DrawTransparentRedShade(0x1EDu, 0x5Bu, v23); } else { @@ -9180,7 +9187,7 @@ if ( v29 & 2 ) { v34 = v33 != 0 ? (int)&pIcons_LOD->pTextures[v28] : 0; - pRenderer->_4A6776(0x24Au, 0x58u, (Texture *)v34); + pRenderer->DrawTransparentRedShade(0x24Au, 0x58u, (Texture *)v34); } else { @@ -10214,7 +10221,7 @@ } //----- (004065B0) -------------------------------------------------------- -__int16 stru262_TurnBased::_4065B0() +void stru262_TurnBased::_4065B0() { stru262_TurnBased *v1; // esi@1 signed int v2; // eax@1 @@ -10254,14 +10261,13 @@ if ( v1->uActorQueueSize > 0 ) { do - LOWORD(v2) = v1->_406648(v5++); + v1->_406648(v5++); while ( (signed int)v5 < v1->uActorQueueSize ); } - return v2; } //----- (00406648) -------------------------------------------------------- -__int16 stru262_TurnBased::_406648(unsigned int a2) +void stru262_TurnBased::_406648(unsigned int a2) { TurnBased_QueueElem *v1; // ecx@1 int v3; // eax@1 @@ -10352,19 +10358,20 @@ v16 = a2a; if ( !(v14 % 2) ) { - LOWORD(v3) = Actor::_402F87(v4, a2a, &a4); - return v3; + Actor::_402F87(v4, a2a, &a4); + return; } v21 = 64; LABEL_26: - LOWORD(v3) = Actor::_403EB6(v15, v16, v21, v23); - return v3; + Actor::_403EB6(v15, v16, v21, v23); + return; } LABEL_21: v5->uCurrentActionTime = 0; v5->uCurrentActionLength = 0; v5->uAIState = Dead; - return pActors[v4].UpdateAnimation(); + pActors[v4].UpdateAnimation(); + return; } v24 = v5->pMonsterInfo.uSpellSkillAndMastery2; v22 = 3; @@ -10399,7 +10406,6 @@ } } } - return v3; } // 50FE08: using guessed type stru298 stru_50FE08; @@ -11834,7 +11840,7 @@ ++sDepthb ) { v62 = &pIndoor->pFaces[(*(unsigned __int16 **)((char *)&v60->pWalls + v61))[sDepthb]]; - if ( v62->uAttributes & 1 + if ( v62->TwoSided() || v119 > v62->pBounding.x2 || v123 < v62->pBounding.x1 || v127 > v62->pBounding.y2 @@ -12000,7 +12006,7 @@ while ( 1 ) { v90 = &pIndoor->pFaces[(*(unsigned __int16 **)((char *)&v88->pWalls + v89))[v162]]; - if ( v90->uAttributes & 1 + if ( v90->TwoSided() || v120 > v90->pBounding.x2 || v124 < v90->pBounding.x1 || v128 > v90->pBounding.y2 @@ -12369,7 +12375,7 @@ if (!v8 || v7) if (!v6 || v5) - if (actor->_438B9B()) + if (actor->IsPeasant()) BYTE2(actor->uAttributes) &= 0xF7u; BYTE2(actor->uAttributes) &= 0x7Fu; @@ -13515,11 +13521,12 @@ else dword_50654C = 0; - char *v11 = &pPlayer->field_152[11 * school + 63]; + //char *v11 = &pPlayer->field_152[11 * school + 63]; for (uint i = 1; i < 12; ++i) { - if (v11[i]) + //if (v11[i]) + if (pPlayer->spellbook.pChapters[school].bIsSpellAvailable[i - 1]) { sprintf(pContainer, "SB%sS%02d", spellbook_texture_filename_suffices[school], pSpellbookSpellIndices[school][i]); dword_506408[i] = pIcons_LOD->LoadTexturePtr(pContainer, TEXTURE_16BIT_PALETTE); @@ -15555,7 +15562,7 @@ { if ( v26 < 800 ) { - pItemGen.uAttributes |= 1u; + pItemGen.SetIdentified(); pItemGen.uItemID = v26; if ( pItemsTable->pItems[v26].uEquipType == 12 ) { diff -r e8fcde8ba3fc -r 405d0c4dd1b3 mm7_6.cpp --- a/mm7_6.cpp Wed Feb 20 20:50:22 2013 +0600 +++ b/mm7_6.cpp Wed Feb 20 20:51:55 2013 +0600 @@ -2170,7 +2170,7 @@ } //----- (0042777D) -------------------------------------------------------- -bool __fastcall _42777D_CastSpell_UseWand_ShootArrow(int a1, unsigned int uPlayerID, unsigned int a4, __int16 a5, int a6) +void _42777D_CastSpell_UseWand_ShootArrow(int a1, unsigned int uPlayerID, unsigned int a4, __int16 a5, int a6) { bool result; // eax@2 __int16 v6; // bx@4 @@ -2355,18 +2355,19 @@ if ( v6 & 2 ) { if ( pGUIWindow_Settings ) - return result; + return; pGUIWindow_Settings = GUIWindow::Create(0, 0, 640, 480, (WindowType)(WINDOW_HouseInterior|0x2), (int)&pStru277[result], 0); pGUIWindow_Settings->CreateButton(0x34u, 0x1A6u, 0x23u, 0, 2, 0, 0x45u, 0, 0x31u, "", 0); pGUIWindow_Settings->CreateButton(0xA5u, 0x1A6u, 0x23u, 0, 2, 0, 0x45u, 1u, 0x32u, "", 0); pGUIWindow_Settings->CreateButton(0x118u, 0x1A6u, 0x23u, 0, 2, 0, 0x45u, 2u, 0x33u, "", 0); pGUIWindow_Settings->CreateButton(0x186u, 0x1A6u, 0x23u, 0, 2, 0, 0x45u, 3u, 0x34u, "", 0); - return sub_421B2C_PlaceInInventory_or_DropPickedItem(); + sub_421B2C_PlaceInInventory_or_DropPickedItem(); + return; } if ( v6 & 8 ) { if ( pGUIWindow_Settings ) - return result; + return; v17 = GUIWindow::Create(0, 0, 640, 480, (WindowType)(WINDOW_HouseInterior|0x2), (int)&pStru277[result], 0); v29 = 0; v28 = ""; @@ -2384,12 +2385,13 @@ v18 = v17; LABEL_56: v18->CreateButton(v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29); - return sub_421B2C_PlaceInInventory_or_DropPickedItem(); + sub_421B2C_PlaceInInventory_or_DropPickedItem(); + return; } if ( v6 & 0x40 ) { if ( pGUIWindow_Settings ) - return result; + return; v17 = GUIWindow::Create(0, 0, 640, 480, (WindowType)(WINDOW_HouseInterior|0x2), (int)&pStru277[result], 0); v29 = 0; v28 = ""; @@ -2401,20 +2403,21 @@ if ( (char)v6 < 0 ) { if ( pGUIWindow_Settings ) - return result; + return; ++pIcons_LOD->uTexturePacksCount; if ( !pIcons_LOD->uNumPrevLoadedFiles ) pIcons_LOD->uNumPrevLoadedFiles = pIcons_LOD->uNumLoadedFiles; pGUIWindow_Settings = pStru277[result].sub_4219BE(); unk_50C9A0 = 1; some_active_character = uActiveCharacter; - return sub_421B2C_PlaceInInventory_or_DropPickedItem(); + sub_421B2C_PlaceInInventory_or_DropPickedItem(); + return; } if ( HIBYTE(v6) & 1 ) { if ( pGUIWindow_Settings ) - return result; - pGUIWindow_Settings = GUIWindow::Create(0, 0, 640, 480, (WindowType)(WINDOW_HouseInterior|0x2), 20 * result + 5292232, 0); + return; + pGUIWindow_Settings = GUIWindow::Create(0, 0, 640, 480, (WindowType)(WINDOW_HouseInterior|0x2), (int)&pStru277[result], 0); pGUIWindow_Settings->CreateButton(0x34u, 0x1A6u, 0x23u, 0, 2, 0, 0x8Du, 0, 0x31u, "", 0); pGUIWindow_Settings->CreateButton(0xA5u, 0x1A6u, 0x23u, 0, 2, 0, 0x8Du, 1u, 0x32u, "", 0); pGUIWindow_Settings->CreateButton(0x118u, 0x1A6u, 0x23u, 0, 2, 0, 0x8Du, 2u, 0x33u, "", 0); @@ -2435,50 +2438,38 @@ } if ( HIBYTE(v6) & 2 && !pGUIWindow_Settings ) { - pGUIWindow_Settings = GUIWindow::Create(0, 0, 640, 480, (WindowType)(WINDOW_HouseInterior|0x2), 20 * result + 5292232, 0); + pGUIWindow_Settings = GUIWindow::Create(0, 0, 640, 480, (WindowType)(WINDOW_HouseInterior|0x2), (int)&pStru277[result], 0); pBtn_NPCLeft = pGUIWindow_Settings->CreateButton( 0x1D5u, 0xB2u, - (uTextureID_507990 != -1 ? pIcons_LOD->pTextures[uTextureID_507990].uTextureWidth : 24), - (uTextureID_507990 != -1 ? pIcons_LOD->pTextures[uTextureID_507990].uTextureHeight : 26), + (uTextureID_Btn_NPCLeft != -1 ? pIcons_LOD->pTextures[uTextureID_Btn_NPCLeft].uTextureWidth : 24), + (uTextureID_Btn_NPCLeft != -1 ? pIcons_LOD->pTextures[uTextureID_Btn_NPCLeft].uTextureHeight : 26), 1, 0, 0xBCu, 0, 0, "", - (Texture *)(uTextureID_507990 != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_507990] : 0), + (Texture *)(uTextureID_Btn_NPCLeft != -1 ? &pIcons_LOD->pTextures[uTextureID_Btn_NPCLeft] : 0), 0); pBtn_NPCRight = pGUIWindow_Settings->CreateButton( 0x272u, 0xB2u, - (uTextureID_50798C != -1 ? pIcons_LOD->pTextures[uTextureID_50798C].uTextureWidth : 24), - (uTextureID_50798C != -1 ? pIcons_LOD->pTextures[uTextureID_50798C].uTextureHeight : 26), + (uTextureID_Btn_NPCRight != -1 ? pIcons_LOD->pTextures[uTextureID_Btn_NPCRight].uTextureWidth : 24), + (uTextureID_Btn_NPCRight != -1 ? pIcons_LOD->pTextures[uTextureID_Btn_NPCRight].uTextureHeight : 26), 1, 0, 0xBCu, 1u, 0, "", - (Texture *)(uTextureID_50798C != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_50798C] : 0), + (Texture *)(uTextureID_Btn_NPCRight != -1 ? &pIcons_LOD->pTextures[uTextureID_Btn_NPCRight] : 0), 0); pGUIWindow_Settings->CreateButton(0x1EBu, 0x95u, 0x40u, 0x4Au, 1, 0, 0x8Fu, 4u, 0x35u, "", 0); - result = (bool)pGUIWindow_Settings->CreateButton( - 0x231u, - 0x95u, - 0x40u, - 0x4Au, - 1, - 0, - 0x8Fu, - 5u, - 0x36u, - "", - 0); + pGUIWindow_Settings->CreateButton(0x231u, 0x95u, 0x40u, 0x4Au, 1, 0, 0x8Fu, 5u, 0x36u, "", 0); } } } - return result; } @@ -4011,7 +4002,7 @@ v730c->UpdateTempBonus(pParty->uTimePlayed); if ( v730c->uItemID < 64 || v730c->uItemID > 65 ) { - if ( !(v730c->uAttributes & 2) ) + if (!v730c->Broken()) { if ( v730c->uAdditionalValue == v1 ) { @@ -4522,9 +4513,9 @@ } else { - v155 = stru_5C6E00->SinCos(pParty->sRotationY); + v155 = stru_5C6E00->Cos(pParty->sRotationY); uRequiredMana = pParty->vPosition.x + sub_42EBBE(2048, v155); - v156 = stru_5C6E00->_42EBDB(pParty->sRotationY); + v156 = stru_5C6E00->Sin(pParty->sRotationY); LODWORD(v727) = pParty->vPosition.y + sub_42EBBE(2048, v156); v154 = pParty->vPosition.z; } @@ -4926,9 +4917,9 @@ } else { - v212 = stru_5C6E00->SinCos(pParty->sRotationY); + v212 = stru_5C6E00->Cos(pParty->sRotationY); LODWORD(v718) = pParty->vPosition.x + sub_42EBBE(2048, v212); - v213 = stru_5C6E00->_42EBDB(pParty->sRotationY); + v213 = stru_5C6E00->Sin(pParty->sRotationY); v214 = sub_42EBBE(2048, v213); v211 = pParty->vPosition.z; v713 = pParty->vPosition.y + v214; @@ -5425,7 +5416,7 @@ || v726->pInventoryItems[a2].uAdditionalValue != v1 || v726->pInventoryItems[a2]._bonus_type != v1 || v726->pInventoryItems[a2]._bonus_strength != v1 - || (_this = (ItemGen *)((char *)&v726->pInventoryItems[a2] + 20), v726->pInventoryItems[a2].uAttributes & 2) ) + || (_this = (ItemGen *)((char *)&v726->pInventoryItems[a2] + 20), v726->pInventoryItems[a2].Broken()) ) goto LABEL_616; v247 = (char *)&pItemsTable->pItems[v246].pIconName; LODWORD(v725) = (int)v247; @@ -5533,7 +5524,7 @@ || (v291 = pItemsTable->pItems[v290].uEquipType) == 0 || v291 == 1 || v291 == 2 - || _this->uAttributes & 2 ) + || _this->Broken()) goto LABEL_616; if ( _this->GetValue() < 0x1C2 ) uRequiredMana = 1; @@ -7826,9 +7817,9 @@ // 42EBBE: using guessed type int __fastcall sub_42EBBE(int, int); //----- (0042EBDB) -------------------------------------------------------- -int stru193_math::_42EBDB(int angle) +int stru193_math::Sin(int angle) { - return SinCos(angle - this->uIntegerHalfPi); + return Cos(angle - this->uIntegerHalfPi); } //----- (0042ECB5) -------------------------------------------------------- @@ -7970,7 +7961,7 @@ Vec3_int_::Normalize(&a3.x, &a3.y, &a3.z); DamageMonsterFromParty((8 * (uActiveCharacter - 1)) | OBJECT_Player, target_id, &a3); - if (player->WearsItem(506, 1) || player->WearsItem(506, 0)) + if (player->WearsItem(ITEM_ARTIFACT_SPLITTER, 1) || player->WearsItem(ITEM_ARTIFACT_SPLITTER, 0)) _42FA66_do_explosive_impact( actor->vPosition.x, actor->vPosition.y, @@ -8409,11 +8400,11 @@ v12 = 0; if ( a4 ) { - a4a = stru_5C6E00->SinCos(angle); - v13 = (unsigned __int64)(a4a * (signed __int64)stru_5C6E00->SinCos(pitch)) >> 16; - a4b = stru_5C6E00->SinCos(angle - stru_5C6E00->uIntegerHalfPi); - a5a = (unsigned __int64)(a4b * (signed __int64)stru_5C6E00->SinCos(pitch)) >> 16; - v14 = stru_5C6E00->SinCos(pitch - stru_5C6E00->uIntegerHalfPi); + a4a = stru_5C6E00->Cos(angle); + v13 = (unsigned __int64)(a4a * (signed __int64)stru_5C6E00->Cos(pitch)) >> 16; + a4b = stru_5C6E00->Sin(angle); + a5a = (unsigned __int64)(a4b * (signed __int64)stru_5C6E00->Cos(pitch)) >> 16; + v14 = stru_5C6E00->Sin(pitch); v9->vVelocity.x = (unsigned int)(v13 * v11) >> 16; v9->vVelocity.y = (unsigned int)(a5a * v11) >> 16; v12 = (unsigned int)(v14 * v11) >> 16; diff -r e8fcde8ba3fc -r 405d0c4dd1b3 mm7_data.cpp --- a/mm7_data.cpp Wed Feb 20 20:50:22 2013 +0600 +++ b/mm7_data.cpp Wed Feb 20 20:51:55 2013 +0600 @@ -67,7 +67,71 @@ Award pAwards[104]; #include "stru159.h" -stru159 pAnimatedRooms[196]; +stru159 pAnimatedRooms[196] = +{ + "", 0x00000004, 0x000001F4, 0x00000000, + "Human Armor01", 0x00000020, 0x000002C0, 0x00003A02, + "Necromancer Armor01", 0x00000020, 0x000002D7, 0x00004602, + "Dwarven Armor01", 0x00000020, 0x000002EE, 0x00000502, + "Wizard Armor", 0x00000020, 0x000003BD, 0x00001302, + "Warlock Armor", 0x00000020, 0x000002D6, 0x00002302, + "Elf Armor", 0x00000020, 0x000002BC, 0x00004F02, + "Human Alchemisht01", 0x0000000E, 0x000002BE, 0x00005F04, + "Necromancer Alchemist01", 0x0000000E, 0x000002D6, 0x00004504, + "Dwarven Achemist01", 0x0000000E, 0x00000387, 0x00000404, + "Wizard Alchemist", 0x0000000E, 0x00000232, 0x00001904, + "Warlock Alchemist", 0x0000000E, 0x000002BE, 0x00002A04, + "Elf Alchemist", 0x0000000E, 0x0000038A, 0x00005404, + "Human Bank01", 0x00000006, 0x00000384, 0x00003416, + "Necromancer Bank01", 0x00000006, 0x000002D8, 0x00004716, + "Dwarven Bank", 0x00000006, 0x000002F3, 0x00000616, + "Wizard Bank", 0x00000006, 0x000003BA, 0x00001416, + "Warlock Bank", 0x00000006, 0x0000039F, 0x00002416, + "Elf Bank", 0x00000006, 0x000002BC, 0x00004716, + "Boat01", 0x0000000F, 0x0000004C, 0x0003351C, + "Boat01d", 0x0000000F, 0x0000004C, 0x0003351C, + "Human Magic Shop01", 0x0000000A, 0x000002C8, 0x00003603, + "Necromancer Magic Shop01", 0x0000000E, 0x000002DC, 0x00004203, + "Dwarven Magic Shop01", 0x0000002A, 0x000002EF, 0x00005B03, + "Wizard Magic Shop", 0x0000001E, 0x000002DF, 0x00000F03, + "Warlock Magic Shop", 0x00000007, 0x000003B9, 0x00001F03, + "Elf Magic Shop", 0x00000024, 0x000002CC, 0x00005203, + "Human Stables01", 0x00000021, 0x00000031, 0x0003301B, + "Necromancer Stables", 0x00000021, 0x000002DD, 0x0003431B, + "", 0x00000021, 0x000002F0, 0x00035B1B, + "Wizard Stables", 0x00000021, 0x000003BA, 0x0003101B, + "Warlock Stables", 0x00000021, 0x00000181, 0x0003201B, + "Elf Stables", 0x00000021, 0x00000195, 0x00034D1B, + "Human Tavern01", 0x0000000D, 0x000002C2, 0x00003115, + "Necromancer Tavern 01", 0x0000000D, 0x000003B0, 0x00003915, + "Dwarven Tavern01", 0x0000000D, 0x000002FE, 0x00005E15, + "Wizard Tavern", 0x0000000D, 0x000003BB, 0x00001115, + "Warlock Tavern", 0x0000000D, 0x000003A8, 0x00002115, + "Elf Tavern", 0x0000000D, 0x000002CD, 0x00004E15, + "Human Temple01", 0x00000024, 0x000002DB, 0x00033217, + "Necromancer Temple", 0x00000024, 0x000002DF, 0x00033C17, + "Dwarven Temple01", 0x00000024, 0x000002F1, 0x00035617, + "Wizard Temple", 0x00000024, 0x000002E0, 0x00030A17, + "Warlock Temple", 0x00000024, 0x000003A4, 0x00031B17, + "Elf Temple", 0x00000024, 0x000002CE, 0x00034817, + "Human Town Hall", 0x00000010, 0x0000039C, 0x00000E11, + "Necromancer Town Hall01", 0x00000010, 0x000003A4, 0x00003D11, + "Dwarven Town Hall", 0x00000010, 0x000002DB, 0x00005811, + "Wizard Town Hall", 0x00000010, 0x000003BD, 0x00000B11, + "Warlock Town Hall", 0x00000010, 0x000002DB, 0x00001C11, + "Elf Town Hall", 0x00000010, 0x0000027A, 0x00004911, + "Human Training Ground01", 0x00000018, 0x000002C7, 0x00002C1E, + "Necromancer Training Ground", 0x00000018, 0x000003AD, 0x00003E1E, + "Dwarven Training Ground", 0x00000018, 0x000002F2, 0x0000591E, + "Wizard Training Ground", 0x00000018, 0x000003A3, 0x00000C1E, + "Warlock Training Ground", 0x00000018, 0x000003A6, 0x00001D1E, + "Elf Training Ground", 0x00000018, 0x0000019F, 0x00004A1E, + "Human Weapon Smith01", 0x00000016, 0x000002C1, 0x00042D01, + "Necromancer Weapon Smith01", 0x00000016, 0x000002D9, 0x00043F01, + "Dwarven Weapon Smith01", 0x00000016, 0x000002EE, 0x00045201, + "Wizard Weapon Smith", 0x00000016, 0x000002D5, 0x00040D01, + "Warlock Weapon Smith", 0x00000016, 0x000002D7, 0x00041701 +}; #include "stru160.h" stru160 array_4EB8B8[66] = @@ -376,7 +440,7 @@ char aPending[777]; // idb char aCanTFindS[777]; // idb char pDayMoonPhase[28]; -char *spellbook_texture_filename_suffices[8]; // weak +char *spellbook_texture_filename_suffices[8] = {"f", "a", "w", "e", "s", "m", "b", "l"}; // weak __int16 word_4E1D3A[777]; // weak __int16 pTownPortalBook_xs[6]; __int16 pTownPortalBook_ys[6]; @@ -480,8 +544,8 @@ char byte_4E28FC; // weak unsigned int uGammaPos; int dword_4E2910[777]; // weak -__int16 RightClickPortraitXmin[4]; -__int16 RightClickPortraitXmax[4]; +__int16 RightClickPortraitXmin[4]={0x14, 0x83, 0xF2, 0x165}; +__int16 RightClickPortraitXmax[4]={0x53, 0xC6, 0x138, 0x1A7}; void *off_4E2A12; // weak int pArmorSkills[5]={ 9, 10, 11, 8, 30}; int pWeaponSkills[9]={3, 5, 2, 6, 4, 0, 1, 31, 7}; @@ -1589,14 +1653,14 @@ int dword_507964; // weak int dword_507968; // weak int dword_50796C; // weak -int dword_507974; // weak +int uTextureID_Btn_QuickReference; // weak int dword_5079B4; // weak int dword_5079C8; // weak int dword_5079CC; // weak int dword_5079D0; // weak int dword_5079D8; // weak -struct GUIButton *dword_507A14; // idb -struct GUIButton *dword_507A18; // idb +struct GUIButton *pBtn_ZoomOut; // idb +struct GUIButton *pBtn_ZoomIn; // idb unsigned int uGameUIFontShadow; unsigned int uGameUIFontMain; int dword_507B00_spell_info_to_draw_in_popup; // weak @@ -2092,8 +2156,8 @@ //_UNKNOWN unk_F8BA50; // weak char byte_F8BC0C; // weak int bGameoverLoop = 0; // weak -__int16 word_F8BC48_displaced_face_intersect_plane_coords_a; // idb -__int16 word_F8BD18_displaced_face_intersect_plane_coords_b; // idb +__int16 word_F8BC48_displaced_face_intersect_plane_coords_a[104]; // idb +__int16 word_F8BD18_displaced_face_intersect_plane_coords_b[104]; // idb int dword_F93F20; // weak int dword_F93F70; // weak diff -r e8fcde8ba3fc -r 405d0c4dd1b3 mm7_data.h --- a/mm7_data.h Wed Feb 20 20:50:22 2013 +0600 +++ b/mm7_data.h Wed Feb 20 20:51:55 2013 +0600 @@ -366,7 +366,7 @@ extern char aPending[]; // idb extern char aCanTFindS[]; // idb extern char pDayMoonPhase[28]; -extern char *spellbook_texture_filename_suffices[8]; // weak +extern char *spellbook_texture_filename_suffices[]; // weak extern __int16 word_4E1D3A[]; // weak extern __int16 pTownPortalBook_xs[6]; extern __int16 pTownPortalBook_ys[6]; @@ -1198,14 +1198,14 @@ extern int dword_507964; // weak extern int dword_507968; // weak extern int dword_50796C; // weak -extern int dword_507974; // weak +extern int uTextureID_Btn_QuickReference; // weak extern int dword_5079B4; // weak extern int dword_5079C8; // weak extern int dword_5079CC; // weak extern int dword_5079D0; // weak extern int dword_5079D8; // weak -extern struct GUIButton *dword_507A14; // idb -extern struct GUIButton *dword_507A18; // idb +extern struct GUIButton *pBtn_ZoomOut; // idb +extern struct GUIButton *pBtn_ZoomIn; // idb extern unsigned int uGameUIFontShadow; extern unsigned int uGameUIFontMain; extern int dword_507B00_spell_info_to_draw_in_popup; // weak @@ -1712,8 +1712,8 @@ //extern _UNKNOWN unk_F8BA50; // weak extern char byte_F8BC0C; // weak extern int bGameoverLoop; // weak -extern __int16 word_F8BC48_displaced_face_intersect_plane_coords_a; // idb -extern __int16 word_F8BD18_displaced_face_intersect_plane_coords_b; // idb +extern __int16 word_F8BC48_displaced_face_intersect_plane_coords_a[]; // idb +extern __int16 word_F8BD18_displaced_face_intersect_plane_coords_b[]; // idb //extern _UNKNOWN unk_F8EA04; // weak //extern _UNKNOWN unk_F8F8F8; // weak extern int dword_F93F20; // weak @@ -1893,7 +1893,7 @@ void __cdecl GameUI_DrawStatusBar(); bool __thiscall sub_41CD4F(unsigned int _this); char __fastcall sub_41D20D_buff_remaining_time_string(int ecx0, struct GUIWindow *edx0, __int64 a3, struct GUIFont *a2); -void __thiscall GameUI_DrawItemInfo(struct ItemGen *_this); // idb +void GameUI_DrawItemInfo(struct ItemGen *_this); // idb char *__fastcall MonsterPopup_Draw(unsigned int uActorID, struct GUIWindow *edx0); void __cdecl nullsub_3(); // idb void __cdecl LoadActualSkyFrame(); @@ -1930,7 +1930,7 @@ void __cdecl sub_426947(); int __fastcall sub_4269A2_GivePartyExp(unsigned int a1); bool __fastcall sub_427769_spell(unsigned int uSpellID); -bool __fastcall _42777D_CastSpell_UseWand_ShootArrow(int a1, unsigned int uPlayerID, unsigned int a4, __int16 a5, int a6); +void _42777D_CastSpell_UseWand_ShootArrow(int a1, unsigned int uPlayerID, unsigned int a4, __int16 a5, int a6); int __fastcall sub_42EBBE(int, int); // weak void _42ECB5_PlayerAttacksActor(); void __thiscall InitializeTurnBasedAnimations(void *); @@ -1963,7 +1963,7 @@ double __fastcall sub_43AE12(signed int a1); int __fastcall _43AFE3_calc_spell_damage(int a1, int a2, signed int a3, int a4); void __fastcall sub_43B057(unsigned int uObjID, unsigned int uActorID, struct Vec3_int_ *pVelocity); -__int16 __fastcall sub_43B1B0(signed int a1, unsigned int a2, struct Vec3_int_ *pVelocity, signed int a4); +void sub_43B1B0(signed int a1, unsigned int a2, struct Vec3_int_ *pVelocity, signed int a4); int __stdcall DirectInputKeyboard_enumerator_43B9B9(int, int); // weak void Software_ResetNewEdges(); // int __cdecl crt_deconstruct_43B9E3(); @@ -2000,10 +2000,9 @@ void GameUI_DrawMinimap(unsigned int uX, unsigned int uY, unsigned int uZ, unsigned int uW, unsigned int uZoom, unsigned int bRedrawOdmMinimap); int __fastcall DrawBook_Map_sub(unsigned int x, unsigned int y, unsigned int a4, int a5, int _48074); // idb void Initialize2DA(); -unsigned int LoadEventsToBuffer(const char *pContainerName, char *pBuffer, unsigned int uBufferSize); -void __cdecl Initialize_GlobalEVT(); + void __cdecl LoadLevel_InitializeLevelStr(); -void __cdecl LoadLevel_InitializeLevelEvt(); + void __cdecl OnMapLeave(); void /*__usercall*/ OnMapLoad(); void __thiscall Level_LoadEvtAndStr(const char *pLevelName); @@ -2030,7 +2029,7 @@ int __fastcall IsActorAlive(unsigned int uType, unsigned int uParam, unsigned int uNumAlive); // idb // void __cdecl crt_construct_5773C4(); bool __thiscall sub_4466C4(void *_this); -void __fastcall EventProcessor(int a1, int a2, int a3); + void __fastcall sub_448518_npc_set_item(int npc, unsigned int item, int a3); void __fastcall sub_44861E_set_texture(unsigned int uFaceCog, const char *pFilename); void __fastcall SetDecorationSprite(unsigned int uCog, int a2, const char *pFileName); // idb @@ -2099,7 +2098,7 @@ void __fastcall PrepareToLoadODM(unsigned int bLoading, struct OutdoorCamera *a2); void __cdecl sub_461103(); int __cdecl sub_4613C4(); -int __fastcall sub_4621DA(signed int a1, signed int a2, signed int a3); +int __fastcall int_get_vector_length(signed int a1, signed int a2, signed int a3); int __cdecl sub_46224A(); int __cdecl crt_init_globals_462620(); void __cdecl crt_init_globals_462659(); diff -r e8fcde8ba3fc -r 405d0c4dd1b3 stru176.h --- a/stru176.h Wed Feb 20 20:50:22 2013 +0600 +++ b/stru176.h Wed Feb 20 20:51:55 2013 +0600 @@ -5,8 +5,7 @@ #pragma pack(push, 1) struct stru176 { - int field_0; - int field_4; + signed __int64 field_0_time; __int16 field_8; __int16 field_A; __int16 field_C;