# HG changeset patch
# User Ritor1
# Date 1351481288 -21600
# Node ID c0cf9393af64dfac4ffc43b780d562256f97cf26
# Parent c83d06692295305891b073a8f12c543ef67eae52# Parent b39bdc150e90ca64325a134d9a3a798f2dc040b6
Слияние
diff -r c83d06692295 -r c0cf9393af64 Actor.cpp
--- a/Actor.cpp Mon Oct 22 09:20:49 2012 +0600
+++ b/Actor.cpp Mon Oct 29 09:28:08 2012 +0600
@@ -180,7 +180,7 @@
if ( (v6 & 3) != 2 )
v5->uFlags = v6 + 1;
v7 = const_2();
- sprintfex(pContainer, "evt%02d", v7);
+ sprintf(pContainer, "evt%02d", v7);
if ( !pParty->uAlignment )
{
v14 = "-b";
@@ -198,7 +198,7 @@
array_5913D8[6] = 0;
uNumDialogueNPCPortraits = 1;
pTexture_Dialogue_Background = &pIcons_LOD->pTextures[v8];
- sprintfex(pContainer, "npc%03u", v5->uPortraitID);
+ sprintf(pContainer, "npc%03u", v5->uPortraitID);
v9 = 0;
pDialogueNPCPortraits[0] = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE)];
dword_591084 = areWeLoadingTexture;
@@ -258,17 +258,17 @@
0x88u,
9u,
0,
- nullstring,
+ "",
0);
pDialogueWindow->_41D08F(4, 1, 0, 1);
}
}
}
}
- pDialogueWindow->CreateButton(61u, 424u, 0x1Fu, 0x28u, 2, 94, 0x6Eu, 1u, 0x31u, nullstring, 0);
- pDialogueWindow->CreateButton(177u, 424u, 0x1Fu, 0x28u, 2, 94, 0x6Eu, 2u, 0x32u, nullstring, 0);
- pDialogueWindow->CreateButton(292u, 424u, 0x1Fu, 0x28u, 2, 94, 0x6Eu, 3u, 0x33u, nullstring, 0);
- pDialogueWindow->CreateButton(407u, 424u, 0x1Fu, 0x28u, 2, 94, 0x6Eu, 4u, 0x34u, nullstring, 0);
+ pDialogueWindow->CreateButton(61u, 424u, 0x1Fu, 0x28u, 2, 94, 0x6Eu, 1u, 0x31u, "", 0);
+ pDialogueWindow->CreateButton(177u, 424u, 0x1Fu, 0x28u, 2, 94, 0x6Eu, 2u, 0x32u, "", 0);
+ pDialogueWindow->CreateButton(292u, 424u, 0x1Fu, 0x28u, 2, 94, 0x6Eu, 3u, 0x33u, "", 0);
+ pDialogueWindow->CreateButton(407u, 424u, 0x1Fu, 0x28u, 2, 94, 0x6Eu, 4u, 0x34u, "", 0);
if ( v17 && uActiveCharacter && !(v5->uFlags & 0x80) )
{
if ( pParty->uCurrentHour < 5 || pParty->uCurrentHour > 0x15 )
@@ -729,10 +729,10 @@
}
if ( uCurrentlyLoadedLevelType == LEVEL_Indoor )
return;
- v118 = pParty->vPosition.y;
+ v118 = pParty->vPosition.z;
v111 = pParty->vPosition.x;
- v114 = pParty->vPosition.y + 2500;
- v113 = pParty->vPosition.z;
+ v114 = pParty->vPosition.z + 2500;
+ v113 = pParty->vPosition.y;
v23 = 8;
if ( uSkillLevel & 0x0100 )
{
@@ -1786,8 +1786,8 @@
if ( !v4 )
{
outx = pParty->vPosition.x;
- outy = pParty->vPosition.z;
- v14 = pParty->vPosition.y + (signed int)pParty->uPartyHeight / 3;
+ outy = pParty->vPosition.y;
+ v14 = pParty->vPosition.z + (signed int)pParty->uPartyHeight / 3;
LABEL_27:
outz = v14;
goto LABEL_28;
@@ -1807,21 +1807,21 @@
v39 = &outy;
v38 = &outx;
v18 = pParty->sRotationY - stru_5C6E00->uIntegerHalfPi;
- v37.z = pParty->vPosition.y + (signed int)pParty->uPartyHeight / 3;
+ v37.z = pParty->vPosition.z + (signed int)pParty->uPartyHeight / 3;
goto LABEL_20;
}
v40 = &outz;
v39 = &outy;
v38 = &outx;
v18 = pParty->sRotationY - stru_5C6E00->uIntegerHalfPi;
- v37.z = pParty->vPosition.y + (signed int)pParty->uPartyHeight / 3;
+ v37.z = pParty->vPosition.z + (signed int)pParty->uPartyHeight / 3;
}
else
{
v40 = &outz;
v39 = &outy;
v38 = &outx;
- v37.z = pParty->vPosition.y + (signed int)pParty->uPartyHeight / 3;
+ v37.z = pParty->vPosition.z + (signed int)pParty->uPartyHeight / 3;
v18 = stru_5C6E00->uIntegerHalfPi + pParty->sRotationY;
}
*(_QWORD *)&v37.x = *(_QWORD *)&pParty->vPosition.x;
@@ -1834,7 +1834,7 @@
v40 = &outz;
v39 = &outy;
v38 = &outx;
- v37.z = pParty->vPosition.y + (signed int)pParty->uPartyHeight / 3;
+ v37.z = pParty->vPosition.z + (signed int)pParty->uPartyHeight / 3;
v18 = stru_5C6E00->uIntegerHalfPi + pParty->sRotationY;
LABEL_20:
*(_QWORD *)&v37 = *(_QWORD *)&pParty->vPosition.x;
@@ -1891,11 +1891,11 @@
if ( v21 == 4 )
{
LODWORD(v45) = pParty->vPosition.x;
- LODWORD(v44) = pParty->vPosition.z;
+ LODWORD(v44) = pParty->vPosition.y;
v29 = a4;
if ( !a4 )
v29 = pParty->sEyelevel;
- v28 = pParty->vPosition.y + v29;
+ v28 = pParty->vPosition.z + v29;
goto LABEL_44;
}
if ( v21 == 5 )
@@ -2046,7 +2046,7 @@
else
v8->uCurrentActionLength = uActionLength;
v8->uCurrentActionTime = v7;
- v8->uAIState = v7;
+ v8->uAIState = Standing;
v8->vVelocity.z = v7;
v8->vVelocity.y = v7;
v8->vVelocity.x = v7;
@@ -2083,7 +2083,7 @@
else
v6->uCurrentActionLength = uActionLength;
v6->uCurrentActionTime = v5;
- v6->uAIState = v5;
+ v6->uAIState = Standing;
v6->vVelocity.z = v5;
v6->vVelocity.y = v5;
v6->vVelocity.x = v5;
@@ -2099,7 +2099,7 @@
v1 = &pActors[uActorID];
v1->uCurrentActionLength = rand() % 128 + 128;
v1->uCurrentActionTime = 0;
- v1->uAIState = 0;
+ v1->uAIState = Standing;
v1->vVelocity.z = 0;
v1->vVelocity.y = 0;
v1->vVelocity.x = 0;
@@ -2155,8 +2155,8 @@
if ( (edx0 & 7) == 4 )
{
v6 = (AIDirection *)pParty->vPosition.x;
- v7 = (AIDirection *)pParty->vPosition.z;
- v23 = pParty->vPosition.y + pParty->sEyelevel;
+ v7 = (AIDirection *)pParty->vPosition.y;
+ v23 = pParty->vPosition.z + pParty->sEyelevel;
}
else
{
@@ -2187,7 +2187,7 @@
v17 = v24;
v3->uCurrentActionLength = 8 * v16;
v3->uCurrentActionTime = v13;
- v3->uAIState = 2;
+ v3->uAIState = AttackingMelee;
Actor::PlaySound(v17, 0);
LODWORD(v18) = pMonsterStats->pInfos[v3->pMonsterInfo.uID].uRecoveryTime;
v25 = pMonsterStats->pInfos[v3->pMonsterInfo.uID].uRecoveryTime;
@@ -2554,8 +2554,8 @@
if ( (edx0 & 7) == 4 )
{
v4 = (AIDirection *)pParty->vPosition.x;
- v5 = (AIDirection *)pParty->vPosition.z;
- v21 = pParty->vPosition.y + pParty->sEyelevel;
+ v5 = (AIDirection *)pParty->vPosition.y;
+ v21 = pParty->vPosition.z + pParty->sEyelevel;
}
else
{
@@ -2584,7 +2584,7 @@
v14 = v22;
v3->uCurrentActionLength = 8 * v13;
v3->uCurrentActionTime = v10;
- v3->uAIState = 18;
+ v3->uAIState = AttackingRanged4;
Actor::PlaySound(v14, 0);
v15 = pMonsterStats->pInfos[v3->pMonsterInfo.uID].uRecoveryTime;
pDira = pMonsterStats->pInfos[v3->pMonsterInfo.uID].uRecoveryTime;
@@ -2609,9 +2609,9 @@
{
v3->uCurrentActionLength = 64;
v3->uCurrentActionTime = v10;
- v3->uAIState = 9;
+ v3->uAIState = Fidgeting;
result = v3->UpdateAnimation();
- v3->uAIState = 18;
+ v3->uAIState = AttackingRanged4;
}
else
{
@@ -2666,8 +2666,8 @@
if ( (edx0 & 7) == 4 )
{
v4 = (AIDirection *)pParty->vPosition.x;
- v5 = (AIDirection *)pParty->vPosition.z;
- v21 = pParty->vPosition.y + pParty->sEyelevel;
+ v5 = (AIDirection *)pParty->vPosition.y;
+ v21 = pParty->vPosition.z + pParty->sEyelevel;
}
else
{
@@ -2696,7 +2696,7 @@
v14 = v22;
v3->uCurrentActionLength = 8 * v13;
v3->uCurrentActionTime = v10;
- v3->uAIState = 13;
+ v3->uAIState = AttackingRanged3;
Actor::PlaySound(v14, 0);
v15 = pMonsterStats->pInfos[v3->pMonsterInfo.uID].uRecoveryTime;
pDira = pMonsterStats->pInfos[v3->pMonsterInfo.uID].uRecoveryTime;
@@ -2721,9 +2721,9 @@
{
v3->uCurrentActionLength = 64;
v3->uCurrentActionTime = v10;
- v3->uAIState = 9;
+ v3->uAIState = Fidgeting;
result = v3->UpdateAnimation();
- v3->uAIState = 13;
+ v3->uAIState = AttackingRanged3;
}
else
{
@@ -2777,8 +2777,8 @@
if ( (edx0 & 7) == 4 )
{
v4 = (AIDirection *)pParty->vPosition.x;
- v5 = (AIDirection *)pParty->vPosition.z;
- v20 = pParty->vPosition.y + pParty->sEyelevel;
+ v5 = (AIDirection *)pParty->vPosition.y;
+ v20 = pParty->vPosition.z + pParty->sEyelevel;
}
else
{
@@ -2807,7 +2807,7 @@
v14 = v21;
v3->uCurrentActionLength = 8 * v13;
v3->uCurrentActionTime = v10;
- v3->uAIState = 12;
+ v3->uAIState = AttackingRanged2;
Actor::PlaySound(v14, 0);
LODWORD(v15) = pMonsterStats->pInfos[v3->pMonsterInfo.uID].uRecoveryTime;
pDira = pMonsterStats->pInfos[v3->pMonsterInfo.uID].uRecoveryTime;
@@ -2873,8 +2873,8 @@
if ( (edx0 & 7) == 4 )
{
v4 = pParty->vPosition.x;
- v5 = pParty->vPosition.z;
- v22 = pParty->vPosition.y + pParty->sEyelevel;
+ v5 = pParty->vPosition.y;
+ v22 = pParty->vPosition.z + pParty->sEyelevel;
}
else
{
@@ -2911,7 +2911,7 @@
v15 = v21;
v3->uCurrentActionLength = 8 * v14;
v3->uCurrentActionTime = v11;
- v3->uAIState = 3;
+ v3->uAIState = AttackingRanged1;
Actor::PlaySound(v15, 0);
v16 = pMonsterStats->pInfos[v3->pMonsterInfo.uID].uRecoveryTime;
pDira = pMonsterStats->pInfos[v3->pMonsterInfo.uID].uRecoveryTime;
@@ -3010,7 +3010,7 @@
else
v5->uCurrentActionLength = 0;
v5->uCurrentActionTime = 0;
- v5->uAIState = 1;
+ v5->uAIState = Tethered;
if ( rand() % 100 < 2 )
Actor::PlaySound(uActorID, 3u);
v5->UpdateAnimation();
@@ -3119,7 +3119,7 @@
v7 = v6[v4->pSpriteIDs[4]].uAnimLength;
v8 = v11;
v4->uCurrentActionTime = 0;
- v4->uAIState = 8;
+ v4->uAIState = Stunned;
v4->uCurrentActionLength = 8 * v7;
Actor::PlaySound(v8, 2u);
result = v4->UpdateAnimation();
@@ -3220,7 +3220,7 @@
v2 = pSpriteFrameTable->pSpriteSFrames;
v3 = 60 * v1->pSpriteIDs[5];
v1->uCurrentActionTime = 0;
- v1->uAIState = 4;
+ v1->uAIState = Dying;
v1->uCurrentActionAnimation = 5;
LOWORD(v3) = *(__int16 *)((char *)&v2->uAnimLength + v3);
v1->sCurrentHP = 0;
@@ -3436,7 +3436,7 @@
v19 = stru_5C6E00->SinCos(v18 + v13 - stru_5C6E00->uIntegerHalfPi);
v7->uYawAngle = stru_5C6E00->Atan2(
v17 - v7->vPosition.x,
- pParty->vPosition.z
+ pParty->vPosition.y
+ ((unsigned __int64)(v19 * (signed __int64)v10->uDistanceXZ) >> 16)
- v7->vPosition.y);
if ( uActionLength )
@@ -3444,7 +3444,7 @@
else
v7->uCurrentActionLength = 128;
v7->uPitchAngle = LOWORD(v10->uPitchAngle);
- v7->uAIState = 6;
+ v7->uAIState = Pursuing;
return v7->UpdateAnimation();
}
@@ -3503,7 +3503,7 @@
v9 = LOWORD(a4->uPitchAngle);
v5->uCurrentActionTime = 0;
v5->uPitchAngle = v9;
- v5->uAIState = 7;
+ v5->uAIState = Fleeing;
result = v5->UpdateAnimation();
}
}
@@ -3588,7 +3588,7 @@
v14 = LOWORD(v10->uPitchAngle);
v7->uCurrentActionTime = 0;
v7->uPitchAngle = v14;
- v7->uAIState = 6;
+ v7->uAIState = Pursuing;
return v7->UpdateAnimation();
}
@@ -3679,7 +3679,7 @@
v16 = LOWORD(v9->uPitchAngle);
v6->uCurrentActionTime = 0;
v6->uPitchAngle = v16;
- v6->uAIState = 6;
+ v6->uAIState = Pursuing;
if ( rand() % 100 < 2 )
Actor::PlaySound(v4, 2u);
return v6->UpdateAnimation();
@@ -3800,8 +3800,8 @@
if ( !v3->pMonsterInfo.uHostilityType )
v15 = dword_4DF380[v14];
v16 = abs(v3->vPosition.x - pParty->vPosition.x);
- v28 = abs(v3->vPosition.y - pParty->vPosition.z);
- v17 = abs(v3->vPosition.z - pParty->vPosition.y);
+ v28 = abs(v3->vPosition.y - pParty->vPosition.y);
+ v17 = abs(v3->vPosition.z - pParty->vPosition.z);
if ( v16 <= v15 && v28 <= v15 && v17 <= v15 )
{
if ( v16 * v16 + v28 * v28 + v17 * v17 < (unsigned int)v25 )
@@ -3949,7 +3949,7 @@
//----- (0045976D) --------------------------------------------------------
unsigned int Actor::UpdateAnimation()
{
- enum AIState state; // edx@1
+ AIState state; // edx@1
unsigned int result; // eax@1
state = (AIState)this->uAIState;
@@ -4030,7 +4030,7 @@
this->uTetherDistance = 256;
this->uActorRadius = 32;
this->uActorHeight = 128;
- this->uAIState = 0;
+ this->uAIState = Standing;
this->uCurrentActionAnimation = 0;
this->uMovementSpeed = 200;
this->uCarriedItemID = 0;
@@ -4129,7 +4129,7 @@
int result; // eax@13
Actor *v23; // eax@16
int v24; // [sp+Ch] [bp-1Ch]@1
- int v25; // [sp+10h] [bp-18h]@8
+ unsigned int uFaceID; // [sp+10h] [bp-18h]@8
int v26; // [sp+14h] [bp-14h]@10
int v27; // [sp+18h] [bp-10h]@10
int v28; // [sp+1Ch] [bp-Ch]@8
@@ -4158,7 +4158,7 @@
}
v6 = v2->vPosition.z;
v28 = 0;
- v25 = v6;
+ uFaceID = v6;
if ( uCurrentlyLoadedLevelType == LEVEL_Indoor )
v28 = pIndoor->GetSector(v2->vPosition.x, v2->vPosition.y, v6);
v7 = v4 - 1;
@@ -4187,9 +4187,9 @@
v16 = stru_5C6E00->SinCos(v13 - stru_5C6E00->uIntegerHalfPi);
v26 = v16;
v29 = (unsigned __int64)(v16 * (signed __int64)v27) >> 16;
- LOWORD(v16) = v25;
+ LOWORD(v16) = uFaceID;
v17 = v29 + v30->vPosition.y;
- v8->vInitialPosition.z = v25;
+ v8->vInitialPosition.z = uFaceID;
v8->vPosition.z = v16;
LOWORD(v16) = v28;
v8->vInitialPosition.x = v15;
@@ -4204,15 +4204,15 @@
LODWORD(v19) = v18->uAlly;
if ( !(uint)v19 )
{
- v25 = v18->pMonsterInfo.uID - 1;
- v19 = (signed __int64)((double)v25 * 0.33333334);
+ uFaceID = v18->pMonsterInfo.uID - 1;
+ v19 = (signed __int64)((double)uFaceID * 0.33333334);
v18 = v30;
}
v8->uAlly = v19;
v20 = v18->uGroup;
v8->uCurrentActionTime = 0;
v8->uGroup = v20;
- v8->uAIState = 17;
+ v8->uAIState = Summoned;
v8->uCurrentActionLength = 256;
v8->UpdateAnimation();
if ( uCurrentlyLoadedLevelType == LEVEL_Outdoor
@@ -4220,7 +4220,7 @@
v27 = v30->vPosition.z,
result = pIndoor->GetSector(v15, v17, v21),
result == v28)
- && (result = _46CEC3_get_floor_level(v15, v17, v27, result, &v25), result != -30000)
+ && (result = _46CEC3_get_floor_level(v15, v17, v27, result, &uFaceID), result != -30000)
&& (result = abs(result - v27), result <= 1024) )
{
v23 = v30;
diff -r c83d06692295 -r c0cf9393af64 Actor.h
--- a/Actor.h Mon Oct 22 09:20:49 2012 +0600
+++ b/Actor.h Mon Oct 29 09:28:08 2012 +0600
@@ -76,7 +76,7 @@
};
/* 264 */
-enum AIState : __int32
+enum AIState : unsigned __int16
{
Standing = 0x0,
Tethered = 0x1,
@@ -256,7 +256,7 @@
struct Vec3_short_ vInitialPosition;
struct Vec3_short_ vGuardingPosition;
unsigned __int16 uTetherDistance;
- unsigned __int16 uAIState;
+ AIState uAIState;
unsigned __int16 uCurrentActionAnimation;
unsigned __int16 uCarriedItemID;
char field_B6;
diff -r c83d06692295 -r c0cf9393af64 Allocator.cpp
--- a/Allocator.cpp Mon Oct 22 09:20:49 2012 +0600
+++ b/Allocator.cpp Mon Oct 29 09:28:08 2012 +0600
@@ -231,7 +231,7 @@
v2 = this;
v3 = this->uDumpsCount;
this->uDumpsCount = v3 + 1;
- sprintfex(Filename, "Mem%03i.txt", v3);
+ sprintf(Filename, "Mem%03i.txt", v3);
v4 = fopen(Filename, "w");
v5 = v4;
if ( v4 )
diff -r c83d06692295 -r c0cf9393af64 AudioPlayer.cpp
--- a/AudioPlayer.cpp Mon Oct 22 09:20:49 2012 +0600
+++ b/AudioPlayer.cpp Mon Oct 29 09:28:08 2012 +0600
@@ -468,7 +468,7 @@
memcpy(&v19, texture_frame_table_txt_parser(&Buf, &v18), sizeof(v19));
if ( v19.field_0 && *v19.pProperties[0] != 47 )
{
- sprintfex(v2->pSounds[v2->uNumSounds].pSoundName, "%s", v19.pProperties[0]);
+ sprintf(v2->pSounds[v2->uNumSounds].pSoundName, "%s", v19.pProperties[0]);
v9 = atoi(v19.pProperties[1]);
v10 = v19.pProperties[2];
v2->pSounds[v2->uNumSounds].uSoundID = v9;
@@ -825,12 +825,12 @@
if ( !a5 )
v75 = pParty->vPosition.x;
if ( !a6 )
- a6 = pParty->vPosition.z;
+ a6 = pParty->vPosition.y;
if ( uNumRepeats )
AIL_set_sample_loop_count(v73->hSample, uNumRepeats - 1);
v83 = sub_4AB66C(v75, a6);
AIL_set_sample_pan(v73->hSample, v83);
- v84 = GetSoundStrengthByDistanceFromParty(v75, a6, pParty->vPosition.y);
+ v84 = GetSoundStrengthByDistanceFromParty(v75, a6, pParty->vPosition.z);
AIL_set_sample_volume(v73->hSample, v84);
v76 = a3;
goto LABEL_184;
@@ -1049,8 +1049,8 @@
v12 = 10;
LABEL_46:
a1.vWorldPosition.x = (double)pParty->vPosition.x;
- a1.vWorldPosition.y = (double)pParty->vPosition.z;
- v21 = (double)pParty->sEyelevel + (double)pParty->vPosition.y;
+ a1.vWorldPosition.y = (double)pParty->vPosition.y;
+ v21 = (double)pParty->sEyelevel + (double)pParty->vPosition.z;
goto LABEL_47;
}
v12 = 10 * v13 / 16;
@@ -1259,10 +1259,10 @@
if ( (a3 & 7) != 5 )
{
a1.vWorldPosition.x = (double)pParty->vPosition.x;
- v43 = (double)pParty->vPosition.z;
+ v43 = (double)pParty->vPosition.y;
LABEL_100:
a1.vWorldPosition.y = v43;
- v47 = (double)pParty->sEyelevel + (double)pParty->vPosition.y;
+ v47 = (double)pParty->sEyelevel + (double)pParty->vPosition.z;
goto LABEL_101;
}
v44 = (LayingItem *)&pLevelDecorations[a3 >> 3];
@@ -1427,8 +1427,8 @@
if ( v10 != 2 )
{
a1.vWorldPosition.x = (double)pParty->vPosition.x;
- a1.vWorldPosition.y = (double)pParty->vPosition.z;
- v11 = (double)pParty->sEyelevel + (double)pParty->vPosition.y;
+ a1.vWorldPosition.y = (double)pParty->vPosition.y;
+ v11 = (double)pParty->sEyelevel + (double)pParty->vPosition.z;
goto LABEL_21;
}
v12 = (LayingItem *)&pLevelDecorations[v6->field_4 >> 3];
@@ -1451,8 +1451,8 @@
if ( pBLVRenderParams->sPartyRotX )
{
v58 = a1.vWorldPosition.x - (double)pParty->vPosition.x;
- *(float *)&uNumRepeats = a1.vWorldPosition.y - (double)pParty->vPosition.z;
- v18 = a1.vWorldPosition.z - (double)pParty->vPosition.y;
+ *(float *)&uNumRepeats = a1.vWorldPosition.y - (double)pParty->vPosition.y;
+ v18 = a1.vWorldPosition.z - (double)pParty->vPosition.z;
if ( pRenderer->pRenderD3D )
{
v19 = *(float *)&uNumRepeats * v56 + v58 * v55;
@@ -1470,7 +1470,7 @@
else
{
v58 = a1.vWorldPosition.x - (double)pParty->vPosition.x;
- *(float *)&uNumRepeats = a1.vWorldPosition.y - (double)pParty->vPosition.z;
+ *(float *)&uNumRepeats = a1.vWorldPosition.y - (double)pParty->vPosition.y;
if ( pRenderer->pRenderD3D )
{
a1.vWorldViewPosition.x = *(float *)&uNumRepeats * v56 + v58 * v55;
@@ -1482,7 +1482,7 @@
v21 = v58 * v56 + *(float *)&uNumRepeats * v55;
}
a1.vWorldViewPosition.y = v21;
- a1.vWorldViewPosition.z = a1.vWorldPosition.z - (double)pParty->vPosition.y;
+ a1.vWorldViewPosition.z = a1.vWorldPosition.z - (double)pParty->vPosition.z;
}
}
else
@@ -1608,7 +1608,7 @@
}
}
}
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions != v2 )
+ if ( pCurrentScreen != v2 )
{
v42 = &v1->pMixerChannels[4];
if ( AIL_sample_status(v42->hSample) == 4 )
@@ -1623,8 +1623,8 @@
LODWORD(v56) = 1;
v43 = 4 * v59 + 6817720;
v44 = &pLevelDecorations[_6807B8_level_decorations_ids[v59]];
- v45 = abs(v44->vPosition.z - pParty->vPosition.y);
- v46 = abs(v44->vPosition.y - pParty->vPosition.z);
+ 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 )
break;
@@ -1692,7 +1692,7 @@
{
signed int v2; // eax@1
- v2 = stru_5C6E00->uDoublePiMask & (stru_5C6E00->Atan2(a1 - pParty->vPosition.x, a2 - pParty->vPosition.z)
+ v2 = stru_5C6E00->uDoublePiMask & (stru_5C6E00->Atan2(a1 - pParty->vPosition.x, a2 - pParty->vPosition.y)
- stru_5C6E00->uIntegerHalfPi
- pParty->sRotationY);
if ( v2 > (signed int)stru_5C6E00->uIntegerPi )
@@ -1714,8 +1714,8 @@
v3 = a2;
v4 = a1;
- v5 = abs(a3 - pParty->vPosition.y);
- v6 = abs(v3 - pParty->vPosition.z);
+ v5 = abs(a3 - pParty->vPosition.z);
+ v6 = abs(v3 - pParty->vPosition.y);
v7 = abs(v4 - pParty->vPosition.x);
v9 = sub_4621DA(v7, v6, v5);
if ( v9 <= 8192 )
@@ -2201,8 +2201,8 @@
if ( pBLVRenderParams->sPartyRotX )
{
v13 = a1->vWorldPosition.x - (double)pParty->vPosition.x;
- v11 = a1->vWorldPosition.y - (double)pParty->vPosition.z;
- v4 = a1->vWorldPosition.z - (double)pParty->vPosition.y;
+ v11 = a1->vWorldPosition.y - (double)pParty->vPosition.y;
+ v4 = a1->vWorldPosition.z - (double)pParty->vPosition.z;
if ( pRenderer->pRenderD3D )
{
v5 = v11 * pBLVRenderParams->fSineY + v13 * pBLVRenderParams->fCosineY;
@@ -2220,8 +2220,8 @@
else
{
v14 = a1->vWorldPosition.x - (double)pParty->vPosition.x;
- v12 = a1->vWorldPosition.y - (double)pParty->vPosition.z;
- v7 = a1->vWorldPosition.z - (double)pParty->vPosition.y;
+ v12 = a1->vWorldPosition.y - (double)pParty->vPosition.y;
+ v7 = a1->vWorldPosition.z - (double)pParty->vPosition.z;
if ( pRenderer->pRenderD3D )
{
a1->vWorldViewPosition.x = v12 * pBLVRenderParams->fSineY + v14 * pBLVRenderParams->fCosineY;
diff -r c83d06692295 -r c0cf9393af64 Bink_Smacker.cpp
--- a/Bink_Smacker.cpp Mon Oct 22 09:20:49 2012 +0600
+++ b/Bink_Smacker.cpp Mon Oct 29 09:28:08 2012 +0600
@@ -22,6 +22,7 @@
void (__stdcall *smackw32_SmackBufferClose)(HSMACKBUF) = 0;
void (__stdcall *smackw32_SmackBlitClose)(HSMACKBLIT) = 0;
int (__stdcall *smackw32_SmackBlitClear)(HSMACKBLIT, unsigned short *, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, int) = 0;
+int (__stdcall *smackw32_SmackGoto)(_SMACK *, long) = 0;
void SMACKW32_DLL_Initialize()
{
HMODULE pDll = LoadLibraryW(L"SmackW32.dll");
@@ -42,6 +43,7 @@
smackw32_SmackBufferClose = (void (__stdcall *)(HSMACKBUF))GetProcAddress(pDll, "_SmackBufferClose@4");
smackw32_SmackBlitClose = (void (__stdcall *)(HSMACKBLIT))GetProcAddress(pDll, "_SmackBlitClose@4");
smackw32_SmackBlitClear = (int (__stdcall *)(HSMACKBLIT, unsigned short *, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, int))GetProcAddress(pDll, "_SmackBlitClear@32");
+ smackw32_SmackGoto = (int (__stdcall *)(_SMACK *, long))GetProcAddress(pDll, "_SmackGoto@8");
}
@@ -129,6 +131,10 @@
return (smackw32_SmackBlitClear)(a1, pFrameData, uTargetSurfacePitch, uOutX, uOutY, uOutZ, uOutW, a8);
}
+int __stdcall SmackGoto(_SMACK *a1, long a2)
+{
+ return (smackw32_SmackGoto)(a1, a2);
+}
int __stdcall SmackBufferOpen(HWND a1, long a2, long a3, long a4, long a5, long a6)
@@ -144,12 +150,6 @@
}
-int __stdcall SmackGoto(_SMACK *a1, long a2)
-{
- __asm int 3
- return 0;
-}
-
// sub_4D83D0: using guessed type int __stdcall SmackBufferNewPalette(_DWORD, _DWORD, _DWORD);
int __stdcall SmackBufferNewPalette(long a1, long a2, long a3)
{
diff -r c83d06692295 -r c0cf9393af64 DecalBuilder.cpp
--- a/DecalBuilder.cpp Mon Oct 22 09:20:49 2012 +0600
+++ b/DecalBuilder.cpp Mon Oct 29 09:28:08 2012 +0600
@@ -3,9 +3,9 @@
#include "Time.h"
#include "stru314.h"
#include "Outdoor.h"
+#include "Log.h"
#include "mm7_data.h"
-//#include "MM7.h"
@@ -16,16 +16,14 @@
//----- (0043B570) --------------------------------------------------------
-double DecalBuilder_stru0::_43B570()
+double DecalBuilder_stru0::_43B570_get_color_mult_by_time()
{
- DecalBuilder_stru0 *v1; // esi@1
double result; // st7@3
-
- v1 = this;
- if ( this->field_1C_flags & 1 )
+
+ if (field_1C_flags & 1)
{
- if ( (double)(signed __int64)(this->field_20_time - pEventTimer->Time() + 384) * 0.0026041667 >= 0.0 )
- result = (double)(signed __int64)(v1->field_20_time - pEventTimer->Time() + 384) * 0.0026041667;
+ if ((field_20_time - pEventTimer->Time() + 384) / 384.0 >= 0.0)
+ result = (field_20_time - pEventTimer->Time() + 384) / 384.0;
else
result = 0.0;
}
@@ -109,7 +107,7 @@
}
//----- (0049B540) --------------------------------------------------------
-char DecalBuilder::ApplyDecals(int a2, char a3, stru154 *a4, int a5, RenderVertexSoft *a6, int a7, char a8, int a9)
+char DecalBuilder::ApplyDecals(int a2, char a3, stru154 *a4, int a5, RenderVertexSoft *a6, IndoorCameraD3D_Vec4 *a7, char a8, unsigned int uSectorID)
{
char *v9; // eax@3
signed int v10; // ecx@3
@@ -148,6 +146,10 @@
DecalBuilder *thisa; // [sp+40h] [bp-8h]@1
RenderVertexSoft *a11; // [sp+44h] [bp-4h]@8
+ __debugbreak();
+
+ auto a9 = uSectorID;
+
thisa = this;
if ( !a5 )
return 0;
@@ -202,24 +204,24 @@
{
v16 = a4;
}
- v18 = v16->vNormal.z;
- v19 = v16->vNormal.y;
- v20 = v16->vNormal.x;
- v37 = (int)&stru_AE4F7C;
- stru_AE4F64.y = v19;
- stru_AE4F64.x = v20;
- LODWORD(v36) = (DWORD)&stru_AE4F70;
- stru_AE4F64.z = v18;
- dword_AE4F88 = LODWORD(v16->field_10);
+ v18 = v16->face_plane.vNormal.z;
+ v19 = v16->face_plane.vNormal.y;
+ v20 = v16->face_plane.vNormal.x;
+ v37 = (int)&static_AE4F60.field_1C;
+ static_AE4F60.field_4.y = v19;
+ static_AE4F60.field_4.x = v20;
+ LODWORD(v36) = (DWORD)&static_AE4F60.field_10;
+ static_AE4F60.field_4.z = v18;
+ static_AE4F60.dist = v16->face_plane.dist;
if ( !pGame->pIndoorCameraD3D->GetFacetOrientation(
- v16->field_14,
- &stru_AE4F64,
- &stru_AE4F70,
- &stru_AE4F7C) )
+ v16->polygonType,
+ &static_AE4F60.field_4,
+ &static_AE4F60.field_10,
+ &static_AE4F60.field_1C) )
{
MessageBoxW(nullptr, L"Error: Failed to get the facet orientation", L"E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\PolyProjector.cpp:101", 0);
}
- a7 = 0;
+ int _a7 = 0;
if ( thisa->uNumDecals > 0 )
{
a6 = (RenderVertexSoft *)thisa->std__vector_30B00C;
@@ -229,7 +231,7 @@
*(float *)&v37 = v21->z;
v36 = v21->y;
v35 = v21->x;
- v22 = sub_43F5C8(a2, a9, v35, v36, *(float *)&v37);
+ v22 = _43F5C8_get_point_light_level_with_respect_to_lights(a2, a9, v35, v36, *(float *)&v37);
v23 = v21->b;
v24 = v21->x;
v42 = v22;
@@ -242,7 +244,7 @@
v27 = (signed __int64)v21->y;
v37 = a8;
v40 = (signed __int64)v26;
- v28 = *(float *)&v21->field_14;
+ v28 = v21->dot_dist;
LODWORD(v36) = (uint32)a11;
a5a = v25;
v39 = v27;
@@ -268,18 +270,16 @@
{
MessageBoxW(nullptr, L"Error: Failed to build decal geometry", L"E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\PolyProjector.cpp:114", 0);
}
- ++a7;
+ ++_a7;
a6 = (RenderVertexSoft *)((char *)a6 + 4);
}
- while ( a7 < v31->uNumDecals );
+ while ( _a7 < v31->uNumDecals );
}
return 1;
}
-// AE4F88: using guessed type int dword_AE4F88;
-// AE5B90: using guessed type char static_init_flag__AE4F90_bit1__AE4F60_bit2;
//----- (0049B790) --------------------------------------------------------
-char DecalBuilder::_49B790_build_decal_geometry(int a2, char a3, int a4, int a5, int a6, int a7, RenderVertexSoft *a8, stru314 *a9, signed int a10, RenderVertexSoft *a11, char uClipFlags)
+char DecalBuilder::_49B790_build_decal_geometry(int a2, char a3, int a4, int a5, int a6, unsigned int uColorMultiplier, RenderVertexSoft *a8, stru314 *a9, signed int a10, RenderVertexSoft *a11, char uClipFlags)
{
DecalBuilder *v12; // esi@1
Decal *v13; // edi@2
@@ -376,7 +376,7 @@
v28 = v18->field_4.y * *(float *)v25
+ *((float *)v25 - 1) * v18->field_4.x
+ *((float *)v25 + 1) * v18->field_4.z
- + *(float *)&v18->field_28;
+ + v18->dist;
*((float *)v25 - 1) = *((float *)v25 - 1) - v28 * v18->field_4.x;
*(float *)v25 = *(float *)v25 - v28 * v18->field_4.y;
v25 += 48;
@@ -384,7 +384,7 @@
*((float *)v25 - 11) = *((float *)v25 - 11) - v28 * v18->field_4.z;
}
while ( v26 );
- v13->field_C10 = a7;
+ v13->uColorMultiplier = uColorMultiplier;
v40 = (unsigned int *)&v13->uNumVertices;
v39 = v13->pVertices;
v13->uNumVertices = 4;
@@ -403,7 +403,7 @@
v39 = a8;
pGame->pIndoorCameraD3D->ViewTransform(a8, (unsigned int)v40);
v40 = 0;
- pGame->pIndoorCameraD3D->_436BB7_project_and_stuff(v32, *v31, 0);
+ pGame->pIndoorCameraD3D->Project(v32, *v31, 0);
if ( !(uClipFlags & 1) )
{
LABEL_19:
@@ -422,7 +422,7 @@
{
v40 = (unsigned int *)&a8;
v39 = v12->pVertices;
- pGame->pIndoorCameraD3D->_436CDC(v32, *v31, v12->pVertices, (unsigned int *)&a8);
+ pGame->pIndoorCameraD3D->_436CDC_mess_with_lightmap__clipflag_2(v32, *v31, v12->pVertices, (unsigned int *)&a8);
LABEL_14:
v40 = v31;
v39 = v12->pVertices;
@@ -433,7 +433,7 @@
{
v40 = (unsigned int *)&a8;
v39 = v12->pVertices;
- pGame->pIndoorCameraD3D->_436F09(v32, *v31, v12->pVertices, (unsigned int *)&a8);
+ pGame->pIndoorCameraD3D->_436F09_mess_with_lightmap__clipflag_4(v32, *v31, v12->pVertices, (unsigned int *)&a8);
goto LABEL_14;
}
v39 = (RenderVertexSoft *)"E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\PolyProjector.cpp:258";
@@ -455,64 +455,43 @@
}
//----- (0049BBBD) --------------------------------------------------------
-char DecalBuilder::ApplyBloodsplatDecals_IndoorFace(unsigned int uFaceID)
+bool DecalBuilder::ApplyBloodsplatDecals_IndoorFace(unsigned int uFaceID)
{
- int v2; // edi@1
- unsigned int v3; // ebx@1
- BLVFace *v4; // esi@2
- unsigned int v5; // eax@2
- char *v6; // edx@5
double v7; // st7@12
- v2 = 0;
- this->uNumDecals = 0;
- v3 = pBloodsplatContainer->std__vector_pBloodsplats_size;
- if ( pBloodsplatContainer->std__vector_pBloodsplats_size )
+ if (!pBloodsplatContainer->std__vector_pBloodsplats_size)
+ return true;
+
+ auto pFace = &pIndoor->pFaces[uFaceID];
+
+ if (pFace->uAttributes & 0x400000)
+ return true;
+ if (pFace->Animated())
+ return true;
+
+ for (uint i = 0; i < pBloodsplatContainer->std__vector_pBloodsplats_size; ++i)
{
- v4 = &pIndoor->pFaces[uFaceID];
- v5 = v4->uAttributes;
- if ( !(v5 & 0x400000) )
+ auto pBloodsplat = pBloodsplatContainer->std__vector_pBloodsplats + i;
+ if (pFace->pBounding.x1 - pBloodsplat->radius < pBloodsplat->x &&
+ pFace->pBounding.x2 + pBloodsplat->radius > pBloodsplat->x &&
+ pFace->pBounding.y1 - pBloodsplat->radius < pBloodsplat->y &&
+ pFace->pBounding.y2 + pBloodsplat->radius > pBloodsplat->y &&
+ pFace->pBounding.z1 - pBloodsplat->radius < pBloodsplat->z &&
+ pFace->pBounding.z2 + pBloodsplat->radius > pBloodsplat->z)
{
- if ( !(v5 & 0x10) && (signed int)pBloodsplatContainer->std__vector_pBloodsplats_size > 0 )
+ v7 = pFace->pFacePlane.vNormal.z * pBloodsplat->z +
+ pFace->pFacePlane.vNormal.y * pBloodsplat->y +
+ pFace->pFacePlane.vNormal.x * pBloodsplat->x +
+ pFace->pFacePlane.dist;
+ if (v7 <= pBloodsplat->radius)
{
- v6 = (char *)&pBloodsplatContainer->std__vector_pBloodsplats[0].y;
- do
- {
- if ( (double)v4->pBounding.x1 - *((float *)v6 + 2) < *((float *)v6 - 1) )
- {
- if ( (double)v4->pBounding.x2 + *((float *)v6 + 2) > *((float *)v6 - 1) )
- {
- if ( (double)v4->pBounding.y1 - *((float *)v6 + 2) < *(float *)v6 )
- {
- if ( (double)v4->pBounding.y2 + *((float *)v6 + 2) > *(float *)v6 )
- {
- if ( (double)v4->pBounding.z1 - *((float *)v6 + 2) < *((float *)v6 + 1) )
- {
- if ( (double)v4->pBounding.z2 + *((float *)v6 + 2) > *((float *)v6 + 1) )
- {
- v7 = v4->pFacePlane.vNormal.z * *((float *)v6 + 1)
- + v4->pFacePlane.vNormal.y * *(float *)v6
- + v4->pFacePlane.vNormal.x * *((float *)v6 - 1)
- + v4->pFacePlane.dist;
- if ( v7 <= *((float *)v6 + 2) )
- {
- *((float *)v6 + 3) = v7;
- this->std__vector_30B00C[this->uNumDecals++] = v2;
- }
- }
- }
- }
- }
- }
- }
- ++v2;
- v6 += 40;
- }
- while ( v2 < (signed int)v3 );
+ pBloodsplat->dot_dist = v7;
+ std__vector_30B00C[uNumDecals++] = i;
}
}
}
- return 1;
+
+ return true;
}
//----- (0049BCEB) --------------------------------------------------------
@@ -532,7 +511,7 @@
v10 = pBloodsplatContainer->std__vector_pBloodsplats_size;
if ( pBloodsplatContainer->std__vector_pBloodsplats_size )
{
- v3 = pFace->uFaceAttributes;
+ v3 = pFace->uAttributes;
if ( !(v3 & 0x400000) )
{
if ( !(v3 & 0x10) && (signed int)pBloodsplatContainer->std__vector_pBloodsplats_size > 0 )
@@ -714,214 +693,109 @@
}
//----- (0049C095) --------------------------------------------------------
-void DecalBuilder::DrawDecal(Decal *pDecal, float a2)
+void DecalBuilder::DrawDecal(Decal *pDecal, float z_bias)
{
- Decal *v3; // edi@1
- double v4; // st7@3
- double v5; // st7@5
- int v6; // eax@5
- unsigned __int8 v7; // zf@5
- unsigned __int8 v8; // sf@5
- char *v9; // esi@6
- int v10; // ebx@6
- int v11; // eax@8
- int v12; // edx@8
- int v13; // eax@8
- int v14; // ecx@8
- double v15; // st7@9
- int v16; // eax@12
- double v17; // st7@12
- int v18; // eax@12
- unsigned __int8 v19; // of@12
- HRESULT v20; // eax@17
signed int v21; // [sp+Ch] [bp-864h]@15
- const char *v22; // [sp+10h] [bp-860h]@15
- int v23; // [sp+14h] [bp-85Ch]@15
- unsigned int v24; // [sp+18h] [bp-858h]@14
- RenderVertexD3D3 hr[64]; // [sp+20h] [bp-850h]@6
- double v26; // [sp+820h] [bp-50h]@8
- double v27; // [sp+828h] [bp-48h]@8
- double v28; // [sp+830h] [bp-40h]@8
- int v29; // [sp+838h] [bp-38h]@8
- int v30; // [sp+83Ch] [bp-34h]@8
- __int64 v31; // [sp+840h] [bp-30h]@8
- __int64 v32; // [sp+848h] [bp-28h]@8
- __int64 v33; // [sp+850h] [bp-20h]@8
- int v34; // [sp+858h] [bp-18h]@8
- unsigned __int64 v35; // [sp+85Ch] [bp-14h]@8
- float v36; // [sp+864h] [bp-Ch]@6
- int v37; // [sp+868h] [bp-8h]@5
- float v38; // [sp+86Ch] [bp-4h]@8
- float thisa; // [sp+878h] [bp+8h]@5
+ RenderVertexD3D3 pVerticesD3D[64]; // [sp+20h] [bp-850h]@6
+
+ if (pDecal->uNumVertices < 3)
+ {
+ Log::Warning(L"Decal has < 3 vertices");
+ return;
+ }
- v3 = pDecal;
- if ( pDecal->uNumVertices >= 3 )
+ float color_mult;
+ if ( pDecal->field_C1C & 1 )
+ color_mult = 1.0;
+ else
+ color_mult = pDecal->field_C18->_43B570_get_color_mult_by_time();
+
+ for (uint i = 0; i < pDecal->uNumVertices; ++i)
{
- if ( pDecal->field_C1C & 1 )
- v4 = 1.0;
- else
- v4 = pDecal->field_C18->_43B570();
- thisa = v4;
- v5 = get_shading_dist_mist();
- v6 = 0;
- v7 = v3->uNumVertices == 0;
- v8 = v3->uNumVertices < 0;
- v37 = 0;
- if ( !(v8 | v7) )
- {
- v9 = (char *)&hr[0].pos.y;
- v10 = (int)&v3->pVertices[0].vWorldViewPosition;
- v36 = 1.0 / v5;
- while ( 1 )
- {
- v11 = pRenderer->GetActorTintColor(*(float *)v10, v3->field_C14, v6, v6, (RenderBillboard *)v6);
- LOBYTE(v12) = v11;
- v33 = ((unsigned int)v11 >> 16) & 0xFFi64;
- LOBYTE(v38) = BYTE2(v3->field_C10);
- v38 = (double)v33 * 0.0039215689 * thisa * (double)LOBYTE(v38);
- v28 = v38 + 6.7553994e15;
- v31 = (unsigned __int16)v11 >> 8;
- LODWORD(v38) = BYTE1(v3->field_C10);
- v38 = (double)v31 * 0.0039215689 * thisa * (double)SLODWORD(v38);
- v26 = v38 + 6.7553994e15;
- v35 = __PAIR__(LODWORD(v28), LODWORD(v26));
- v13 = v3->field_C10;
- v32 = v12 & 0xFFi64;
- v29 = (unsigned __int8)v13;
- v30 = 0;
- v38 = (double)v32 * 0.0039215689 * thisa * (double)(unsigned __int8)v13;
- v27 = v38 + 6.7553994e15;
- v34 = LODWORD(v27);
- v14 = LODWORD(v27) | ((LODWORD(v26) | (LODWORD(v28) << 8)) << 8);
- if ( a2 == 0.0 )
- {
- v15 = 1.0 - 1.0 / (v36 * *(float *)v10 * 1000.0);
- }
- else
- {
- v15 = 1.0 - 1.0 / (v36 * *(float *)v10 * 1000.0) - a2;
- if ( v15 < 0.000099999997 )
- v15 = 0.000099999997;
- }
- *((float *)v9 + 1) = v15;
- v16 = *(int *)(v10 + 12);
- ++v37;
- v17 = 1.0 / *(float *)v10;
- *((int *)v9 - 1) = v16;
- *(int *)v9 = *(int *)(v10 + 16);
- *((int *)v9 + 5) = *(int *)(v10 + 24);
- *((int *)v9 + 6) = *(int *)(v10 + 28);
- v18 = v37;
- *((int *)v9 + 3) = v14;
- *((int *)v9 + 4) = 0;
- v10 += 48;
- v9 += 32;
- v19 = __OFSUB__(v18, v3->uNumVertices);
- v8 = v18 - v3->uNumVertices < 0;
- *((float *)v9 - 6) = v17;
- if ( !(v8 ^ v19) )
- break;
- v6 = 0;
- }
- v6 = 0;
- }
- v24 = v6;
- if ( uCurrentlyLoadedLevelType == LEVEL_Indoor )
- {
- v21 = 28;
- }
- else
- {
- v21 = 16;
- }
- ErrD3D(pRenderer->pRenderD3D->pDevice->DrawPrimitive(
- D3DPT_TRIANGLEFAN,
- 452,
- hr,
- v3->uNumVertices,
+ uint uTint = pRenderer->GetActorTintColor(pDecal->pVertices[i].vWorldViewPosition.x, pDecal->field_C14, 0, 0, nullptr);
+
+ uint uTintR = (uTint >> 16) & 0xFF,
+ uTintG = (uTint >> 8) & 0xFF,
+ uTintB = uTint & 0xFF;
+
+ uint uDecalColorMultR = (pDecal->uColorMultiplier >> 16) & 0xFF,
+ uDecalColorMultG = (pDecal->uColorMultiplier >> 8) & 0xFF,
+ uDecalColorMultB = pDecal->uColorMultiplier & 0xFF;
+
+ uint uFinalR = floorf(uTintR / 255.0 * color_mult * uDecalColorMultR + 0.0f),
+ uFinalG = floorf(uTintG / 255.0 * color_mult * uDecalColorMultG + 0.0f),
+ uFinalB = floorf(uTintB / 255.0 * color_mult * uDecalColorMultB + 0.0f);
+
+
+ float v15;
+ if (fabs(z_bias) < 1e-5)
+ v15 = 1.0 - 1.0 / ((1.0f / get_shading_dist_mist()) * pDecal->pVertices[i].vWorldViewPosition.x * 1000.0);
+ else
+ {
+ v15 = 1.0 - 1.0 / ((1.0f / get_shading_dist_mist()) * pDecal->pVertices[i].vWorldViewPosition.x * 1000.0) - z_bias;
+ if (v15 < 0.000099999997)
+ v15 = 0.000099999997;
+ }
+
+ pVerticesD3D[i].pos.z = v15;
+
+ pVerticesD3D[i].pos.x = pDecal->pVertices[i].vWorldViewProjX;
+ pVerticesD3D[i].pos.y = pDecal->pVertices[i].vWorldViewProjY;
+ pVerticesD3D[i].texcoord.x = pDecal->pVertices[i].u;
+ pVerticesD3D[i].texcoord.y = pDecal->pVertices[i].v;
+ pVerticesD3D[i].diffuse = (uFinalR << 16) | (uFinalG << 8) | uFinalB;
+ pVerticesD3D[i].specular = 0;
+ pVerticesD3D[i].rhw = 1.0 / pDecal->pVertices[i].vWorldViewPosition.x;
+ }
+
+ if (uCurrentlyLoadedLevelType == LEVEL_Indoor)
+ v21 = D3DDP_DONOTLIGHT | D3DDP_DONOTCLIP | D3DDP_DONOTUPDATEEXTENTS;
+ else
+ v21 = D3DDP_DONOTLIGHT;
+
+ ErrD3D(pRenderer->pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN,
+ D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1,
+ pVerticesD3D,
+ pDecal->uNumVertices,
v21));
- }
}
//----- (0049C2CD) --------------------------------------------------------
-void DecalBuilder::DrawDecals(float a2)
+void DecalBuilder::DrawDecals(float z_bias)
{
- DecalBuilder *v2; // esi@1
- signed int v3; // edi@1
- Decal *v4; // ebx@2
-
- v2 = this;
- v3 = 0;
- if ( (signed int)this->std__vector_pDecals_size > 0 )
- {
- v4 = this->std__vector_pDecals;
- do
- {
- DrawDecal(v4, a2);
- ++v3;
- ++v4;
- }
- while ( v3 < (signed int)v2->std__vector_pDecals_size );
- }
+ for (uint i = 0; i < std__vector_pDecals_size; ++i)
+ DrawDecal(std__vector_pDecals + i, z_bias);
}
//----- (0049C304) --------------------------------------------------------
void DecalBuilder::DrawBloodsplats()
{
- unsigned int v1; // ebx@0
- int v2; // esi@0
- char v3; // zf@1
- HRESULT v4; // eax@4
- HRESULT v5; // eax@4
- HRESULT v6; // eax@4
- HRESULT v7; // eax@4
- HRESULT v8; // eax@4
- HRESULT v9; // eax@4
- HRESULT v10; // eax@4
- char *v11; // eax@4
- //IDirect3DDevice3Vtbl *v12; // ebx@6
- int v13; // ST6C_4@6
- HRESULT v14; // eax@6
- HRESULT v15; // eax@6
- HRESULT v16; // eax@6
- HRESULT v17; // eax@6
- HRESULT v18; // eax@6
- HRESULT v19; // eax@6
- char thisa; // [sp+80h] [bp-8h]@4
- DecalBuilder *v21; // [sp+84h] [bp-4h]@1
+ if (!std__vector_pDecals_size)
+ return;
+
+ if (pRenderer->bUsingSpecular)
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, 0));
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, 3));
- v3 = this->std__vector_pDecals_size == 0;
- v21 = this;
- if ( !v3 )
- {
- if ( pRenderer->bUsingSpecular )
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, 0));
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, 3));
-
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 1));
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, 0));
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, 1u));
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 2u));
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 2u));
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DITHERENABLE, 0));
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 1));
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, 0));
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, 1u));
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 2u));
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 2u));
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DITHERENABLE, 0));
- v11 = (char *)std__string_AE5B94.c_str();
- if ( !std__string_AE5B94.size() )
- v11 = (char *)&dword_4D86F0;
- //v12 = pRenderer->pRenderD3D->pDevice->lpVtbl;
- v13 = (int)pGame->pIndoorCameraD3D->LoadTextureAndGetHardwarePtr(v11);
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetTexture(0, (IDirect3DTexture2 *)v13));
+ auto pTex = pGame->pIndoorCameraD3D->LoadTextureAndGetHardwarePtr("hwsplat04");
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetTexture(0, pTex));
+
+ DrawDecals(0.00039999999);
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, 2u));
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, 1u));
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 0));
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 2u));
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 1u));
- v21->DrawDecals(0.00039999999);
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, 2u));
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, 1u));
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 0));
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 2u));
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 1u));
-
- if ( pRenderer->bUsingSpecular )
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, 1u));
- }
+ if (pRenderer->bUsingSpecular)
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, 1u));
}
//----- (0049C550) --------------------------------------------------------
diff -r c83d06692295 -r c0cf9393af64 DecalBuilder.h
--- a/DecalBuilder.h Mon Oct 22 09:20:49 2012 +0600
+++ b/DecalBuilder.h Mon Oct 29 09:28:08 2012 +0600
@@ -5,7 +5,7 @@
#pragma pack(push, 1)
struct DecalBuilder_stru0
{
- double _43B570();
+ double _43B570_get_color_mult_by_time();
int field_0;
int field_4;
@@ -47,7 +47,7 @@
__int16 field_C0A;
__int16 field_C0C;
__int16 field_C0E;
- int field_C10;
+ uint uColorMultiplier;
int field_C14;
DecalBuilder_stru0 *field_C18;
int field_C1C;
@@ -91,13 +91,13 @@
bool AddBloodsplat(float x, float y, float z, float r, float g, float b, float radius, int a8, int a9);
void Reset(unsigned int bPreserveBloodsplats);
- char ApplyDecals(int a2, char a3, struct stru154 *a4, int a5, struct RenderVertexSoft *a6, int a7, char a8, int a9);
- char _49B790_build_decal_geometry(int a2, char a3, int a4, int a5, int a6, int a7, struct RenderVertexSoft *a8, struct stru314 *a9, signed int a10, struct RenderVertexSoft *a11, char uClipFlags);
- char ApplyBloodsplatDecals_IndoorFace(unsigned int uFaceID);
+ char ApplyDecals(int a2, char a3, struct stru154 *a4, int a5, struct RenderVertexSoft *a6, struct IndoorCameraD3D_Vec4 *a7, char a8, unsigned int uSectorID);
+ char _49B790_build_decal_geometry(int a2, char a3, int a4, int a5, int a6, unsigned int uColorMultiplier, struct RenderVertexSoft *a8, struct stru314 *a9, signed int a10, struct RenderVertexSoft *a11, char uClipFlags);
+ bool ApplyBloodsplatDecals_IndoorFace(unsigned int uFaceID);
char ApplyDecals_OutdoorFace(ODMFace *pFace);
bool _49BE8A(struct stru148 *a2, float a3, int a4, struct RenderVertexSoft *a5, unsigned int uStripType, char a7);
- void DrawDecal(Decal *pDecal, float a2);
- void DrawDecals(float a2);
+ void DrawDecal(Decal *pDecal, float z_bias);
+ void DrawDecals(float z_bias);
void DrawBloodsplats();
void DrawDecalDebugOutlines();
@@ -155,7 +155,7 @@
float y;
float z;
float radius;
- int field_14;
+ float dot_dist;
char r;
char g;
char b;
diff -r c83d06692295 -r c0cf9393af64 GUIProgressBar.cpp
--- a/GUIProgressBar.cpp Mon Oct 22 09:20:49 2012 +0600
+++ b/GUIProgressBar.cpp Mon Oct 29 09:28:08 2012 +0600
@@ -179,13 +179,12 @@
v3 = pIconsFrameTable->GetFrame(uIconID_TurnHour, 0);
pRenderer->DrawTextureTransparent(0x64u, 0x92u, &pIcons_LOD->pTextures[v3->uTextureID]);
v4 = (double)(113 * uProgressCurrent) / (double)uProgressMax;
- pRenderer->FillRect2(
- 0,
+ pRenderer->FillRectFast(
174,
164,
- COERCE_UNSIGNED_INT64(v4 + 6.7553994e15),
+ floorf(v4 + 0.5f),//COERCE_UNSIGNED_INT64(v4 + 6.7553994e15),
16,
- LOWORD(pRenderer->uTargetRMask));
+ pRenderer->uTargetRMask);
goto LABEL_11;
}
LABEL_6:
diff -r c83d06692295 -r c0cf9393af64 GUIWindow.cpp
--- a/GUIWindow.cpp Mon Oct 22 09:20:49 2012 +0600
+++ b/GUIWindow.cpp Mon Oct 29 09:28:08 2012 +0600
@@ -108,7 +108,7 @@
v7 = v2->uFrameHeight;
v2->uFrameZ = v6 + v2->uFrameX - 1;
v2->uFrameW = v2->uFrameY + v7 - 1;
- v2->_415551(0);
+ v2->DrawMessageBox(0);
v2->DrawText2(pFontArrus, 0, 0xCu, 0, pGlobalTXT_LocalizationStrings[451], 3u);
if ( !v19 )
v2->DrawText2(v1, 0, 0x28u, 0, pGlobalTXT_LocalizationStrings[153], 3u);
@@ -145,13 +145,9 @@
//----- (0041D3B7) --------------------------------------------------------
-char GUIWindow::_41D3B7()
+char GUIWindow::DrawQuickCharRecord()
{
- GUIWindow *v1; // edi@1
Player *pPlayer; // esi@1
- int v3; // ecx@1
- SpellBuff *v4; // eax@1
- signed int v5; // ebx@1
int v6; // eax@5
int v7; // ebx@5
unsigned int v8; // ecx@5
@@ -163,76 +159,44 @@
unsigned int v14; // eax@12
PlayerFrame *v15; // eax@12
unsigned int v16; // eax@15
- signed int v17; // ST28_4@15
- int v18; // ST24_4@15
- signed int v19; // eax@15
unsigned int v20; // eax@15
- int v21; // ST28_4@15
- int v22; // ST24_4@15
- int v23; // eax@15
unsigned int v24; // eax@15
unsigned int v25; // eax@15
- char *v26; // ST28_4@15
- signed int v27; // eax@15
unsigned __int8 v28; // al@15
char *v29; // eax@16
- unsigned int v30; // esi@18
- SpellBuff *v31; // edx@18
- char *v32; // edi@18
- signed int v33; // ecx@19
- unsigned int v34; // eax@19
__int64 v35; // ST38_8@22
int v36; // esi@22
- const char *v37; // ST1C_4@22
unsigned int v38; // eax@22
char *v39; // eax@24
- SpellBuff *v41; // [sp+14h] [bp-14h]@1
- GUIFont *a2; // [sp+18h] [bp-10h]@1
- GUIWindow *a1; // [sp+1Ch] [bp-Ch]@1
signed int uFramesetID; // [sp+20h] [bp-8h]@9
int uFramesetIDa; // [sp+20h] [bp-8h]@18
- const char **v46; // [sp+24h] [bp-4h]@18
+
+ pPlayer = &pParty->pPlayers[(unsigned int)ptr_1C];
+
+ uint numActivePlayerBuffs = 0;
+
+ for (uint i = 0; i < 24; ++i)
+ if (pPlayer->pPlayerBuffs[i].uExpireTime > 0)
+ ++numActivePlayerBuffs;
- v1 = this;
- a2 = pFontComic;
- pPlayer = &pParty->pPlayers[(unsigned int)this->ptr_1C];
- a1 = this;
- v3 = 0;
- v4 = pPlayer->pPlayerBuffs;
- v5 = 24;
- v41 = pPlayer->pPlayerBuffs;
- do
- {
- if ( (signed __int64)v4->uExpireTime > 0 )
- ++v3;
- ++v4;
- --v5;
- }
- while ( v5 );
- v6 = LOBYTE(pFontArrus->uFontHeight) + 162;
- v1->uFrameHeight = v6;
- v7 = (v3 - 1) * LOBYTE(pFontArrus->uFontHeight);
- v8 = v1->uFrameX;
+ v6 = pFontArrus->uFontHeight + 162;
+ uFrameHeight = v6;
+ v7 = (numActivePlayerBuffs - 1) * pFontArrus->uFontHeight;
+ v8 = uFrameX;
v9 = v6 + v7;
- v10 = v1->uFrameWidth;
- v1->uFrameHeight = v9;
+ v10 = uFrameWidth;
+ uFrameHeight = v9;
v11 = v10 + v8 - 1;
- v12 = v1->uFrameY;
- v1->uFrameZ = v11;
- v1->uFrameW = v9 + v12 - 1;
- v1->_415551(0);
- if ( pPlayer->pConditions[16] )
- {
+ v12 = uFrameY;
+ uFrameZ = v11;
+ uFrameW = v9 + v12 - 1;
+ DrawMessageBox(0);
+ if (pPlayer->Eradicated())
v13 = pTexture_PlayerFaceEradicated;
- }
+ else if (pPlayer->Dead())
+ v13 = pTexture_PlayerFaceDead;
else
{
- if ( pPlayer->pConditions[14] )
- {
- v13 = pTexture_PlayerFaceDead;
- }
- else
- {
uFramesetID = pPlayerFrameTable->GetFrameIdBy_field0(pPlayer->uExpressionID);
if ( !uFramesetID )
uFramesetID = 1;
@@ -249,74 +213,58 @@
v15 = pPlayerFrameTable->GetFrameBy_x(uFramesetID, v14);
}
pPlayer->field_1AA2 = v15->uTextureID - 1;
- v13 = (Texture *)A74CEC_player_faces_minus1_indexing[v15->uTextureID + 56 * (unsigned int)v1->ptr_1C];
- }
+ v13 = pTextures_PlayerFaces[(unsigned int)ptr_1C][v15->uTextureID];
}
- pRenderer->DrawTextureTransparent(v1->uFrameX + 24, v1->uFrameY + 24, v13);
+
+ pRenderer->DrawTextureTransparent(uFrameX + 24, uFrameY + 24, v13);
v16 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0x9Bu);
- sprintfex(pTmpBuf, format_4E2DC8, v16);
- sprintfex(pTmpBuf2, pGlobalTXT_LocalizationStrings[429], pPlayer->pName, pClassNames[pPlayer->uClass]);
+ sprintf(pTmpBuf, "\xC%05d", v16);
+ sprintf(pTmpBuf2, pGlobalTXT_LocalizationStrings[429], pPlayer->pName, pClassNames[pPlayer->uClass]);
strcat(pTmpBuf, pTmpBuf2);
- strcat(pTmpBuf, string_4E3294);
- v17 = pPlayer->GetMaxHealth();
- v18 = pPlayer->sHealth;
- v19 = pPlayer->GetMaxHealth();
- v20 = sub_4178FE(pPlayer->sHealth, v19);
- sprintfex(pTmpBuf2, "%s : ", pGlobalTXT_LocalizationStrings[108], v20, v18, v17);
+ strcat(pTmpBuf, "\xC" "00000\n");
+ v20 = UI_GetHealthManaStringColor(pPlayer->sHealth, pPlayer->GetMaxHealth());
+ sprintf(pTmpBuf2, "%s : \x0C" "%05u%d\x0C" "00000 / %d\n", pGlobalTXT_LocalizationStrings[108],
+ v20, pPlayer->sHealth, pPlayer->GetMaxHealth());
strcat(pTmpBuf, pTmpBuf2);
- v21 = pPlayer->GetMaxMana();
- v22 = pPlayer->sMana;
- v23 = pPlayer->GetMaxMana();
- v24 = sub_4178FE(pPlayer->sMana, v23);
- sprintfex(pTmpBuf2, "%s : ", pGlobalTXT_LocalizationStrings[212], v24, v22, v21);
+ v24 = UI_GetHealthManaStringColor(pPlayer->sMana, pPlayer->GetMaxMana());
+ sprintf(pTmpBuf2, "%s : \x0C" "%05u%d\x0C" "00000 / %d\n", pGlobalTXT_LocalizationStrings[212],
+ v24, pPlayer->sMana, pPlayer->GetMaxMana());
strcat(pTmpBuf, pTmpBuf2);
v25 = pPlayer->GetMajorConditionIdx();
- v26 = aCharacterConditionNames[v25];
- v27 = GetConditionDrawColor(v25);
- sprintfex(pTmpBuf2, "%s: ", pGlobalTXT_LocalizationStrings[47], v27, v26);
+ sprintf(pTmpBuf2, "%s: \x0C" "%05d%s\x0C" "00000\n", pGlobalTXT_LocalizationStrings[47],
+ GetConditionDrawColor(v25), aCharacterConditionNames[v25]);
strcat(pTmpBuf, pTmpBuf2);
v28 = pPlayer->uQuickSpell;
if ( v28 )
v29 = pSpellStats->pInfos[v28].pShortName;
else
v29 = pGlobalTXT_LocalizationStrings[153];
- sprintfex(pTmpBuf2, "%s: %s", pGlobalTXT_LocalizationStrings[172], v29);
+ sprintf(pTmpBuf2, "%s: %s", pGlobalTXT_LocalizationStrings[172], v29);
strcat(pTmpBuf, pTmpBuf2);
- v30 = 0;
- a1->DrawText(pFontArrus, 120, 22, 0, pTmpBuf, 0, 0, 0);
- v31 = v41;
+ DrawText(pFontArrus, 120, 22, 0, pTmpBuf, 0, 0, 0);
+
uFramesetIDa = 0;
- v32 = &_4E2AD8_ui_colors[1];
- v46 = (const char **)&aSpellNames[20];
- do
+ for (uint i = 0; i < 24; ++i)
{
- v33 = HIDWORD(v31->uExpireTime);
- v34 = LODWORD(v31->uExpireTime);
- if ( v33 >= (signed int)v30 && (v33 > (signed int)v30 || v34 > v30) )
+ auto buff = pPlayer->pPlayerBuffs + i;
+ if (buff->uExpireTime > 0)
{
- v35 = __PAIR__(v33, v34) - pParty->uTimePlayed;
- v36 = uFramesetIDa++ * LOBYTE(a2->uFontHeight) + 134;
- v37 = *v46;
+ v35 = buff->uExpireTime - pParty->uTimePlayed;
+ v36 = uFramesetIDa++ * pFontComic->uFontHeight + 134;
v38 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(
- (unsigned __int8)*(v32 - 1),
- (unsigned __int8)*v32,
- (unsigned __int8)v32[1]);
- a1->DrawText(a2, 52, v36, v38, v37, 0, 0, 0);
- sub_41D20D_buff_remaining_time_string(v36, a1, v35, a2);
- v31 = v41;
- v30 = 0;
+ _4E2AD8_ui_colors[i * 3],
+ _4E2AD8_ui_colors[i * 3 + 1],
+ _4E2AD8_ui_colors[i * 3 + 2]);
+ DrawText(pFontComic, 52, v36, v38, aSpellNames[20 + i], 0, 0, 0);
+ sub_41D20D_buff_remaining_time_string(v36, this, v35, pFontComic);
}
- ++v46;
- ++v31;
- v32 += 3;
- v41 = v31;
}
- while ( (signed int)v46 < (signed int)&dword_506978 );
- v39 = nullstring;
- if ( uFramesetIDa == v30 )
+
+ v39 = "";
+ if ( uFramesetIDa == 0 )
v39 = pGlobalTXT_LocalizationStrings[153];
- sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[450], v39);
- return a1->DrawText(pFontArrus, 14, 114, v30, pTmpBuf, v30, v30, v30);
+ sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[450], v39);
+ return DrawText(pFontArrus, 14, 114, 0, pTmpBuf, 0, 0, 0);
}
//----- (0041D08F) --------------------------------------------------------
@@ -324,20 +272,20 @@
{
if ( a2 )
{
- this->field_28 = a2;
+ this->pNumPresenceButton = a2;
this->field_30 = a3;
this->field_34 = a4;
- this->field_2C_focus_id = a5;
- this->field_38 = a5;
+ this->pCurrentPosActiveItem = a5;
+ this->pStartingPosActiveItem = a5;
this->field_44 = 1;
}
else
{
- this->field_28 = 0;
+ this->pNumPresenceButton = 0;
this->field_30 = a3;
this->field_34 = a4;
- this->field_2C_focus_id = 0;
- this->field_38 = 0;
+ this->pCurrentPosActiveItem = 0;
+ this->pStartingPosActiveItem = 0;
this->field_44 = 0;
}
}
@@ -369,7 +317,7 @@
if ( !v5 )
{
pIcons_LOD->_40F9C5();
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = dword_506978;
+ pCurrentScreen = dword_506978;
pKeyActionMap->_459ED1(3);
goto LABEL_26;
}
@@ -431,7 +379,7 @@
pTexture_Dialogue_Background->Release();
pIcons_LOD->_40F9C5();
LABEL_19:
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = dword_506978;
+ pCurrentScreen = dword_506978;
goto LABEL_26;
}
OnCloseSpellook();
@@ -459,7 +407,7 @@
{
v12 = pVisibleWindowsIdxs[v10 + 1];
pVisibleWindowsIdxs[v10] = v12;
- --*((int *)&stru_506F20.field_18 + 21 * v12);
+ --*((int *)&pTexture_PCX.field_18 + 21 * v12);
++v10;
}
pVisibleWindowsIdxs[v11] = 0;
@@ -525,7 +473,7 @@
pAudioPlayer->StopChannels(-1, -1);
InitializeBookFonts();
v1->CreateButton(0x1DBu, 0x1BDu, 0x9Eu, 0x22u, 1, 0, 0x71u, 0, 0, pGlobalTXT_LocalizationStrings[79], 0);
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 3;
+ pCurrentScreen = 3;
dword_506524 = 0;
dword_506528 = 0;
dword_50651C = 0;
@@ -589,7 +537,7 @@
0xB3u,
v19,
0,
- nullstring,
+ "",
0);
++v19;
}
@@ -632,7 +580,7 @@
0xB7u,
v16,
0,
- nullstring,
+ "",
0);
++v16;
}
@@ -887,7 +835,7 @@
2u,
0,
pGlobalTXT_LocalizationStrings[192],// Scroll Up
- (Texture *)nullstring,
+ (Texture *)"",
0);
pBtn_Book_4 = v1->CreateButton(
pViewport->uViewportX + 397,
@@ -900,7 +848,7 @@
3u,
0,
pGlobalTXT_LocalizationStrings[193],// Scroll Down
- (Texture *)nullstring,
+ (Texture *)"",
0);
pBtn_Book_5 = v1->CreateButton(
pViewport->uViewportX + 397,
@@ -913,7 +861,7 @@
4u,
0,
pGlobalTXT_LocalizationStrings[573],// "Scroll Right"
- (Texture *)nullstring,
+ (Texture *)"",
0);
pBtn_Book_6 = v1->CreateButton(
pViewport->uViewportX + 397,
@@ -926,7 +874,7 @@
5u,
0,
pGlobalTXT_LocalizationStrings[572],// "Scroll Left"
- (Texture *)nullstring,
+ (Texture *)"",
0);
return;
}
@@ -1033,7 +981,7 @@
//----- (00415551) --------------------------------------------------------
-void GUIWindow::_415551(int arg0)
+void GUIWindow::DrawMessageBox(int arg0)
{
unsigned int v2; // edi@1
GUIWindow *v3; // ebx@1
@@ -1120,7 +1068,7 @@
v19.uFrameZ = v19.uFrameWidth + v19.uFrameX - 1;
v23 = v12;
v19.uFrameW = v19.uFrameHeight + v19.uFrameY - 1;
- v14 = v3->str_48;
+ v14 = v3->Hint;
if ( v14 )
{
v15 = pFontLucida->CalcTextHeight(v14, &v19, 0, 0);
@@ -1136,7 +1084,7 @@
if ( (signed int)(v16 + v12) > 479 )
v16 = 479 - v12;
DrawPopupWindow(a2.y, v12, v21, v16);
- v17 = v3->str_48;
+ v17 = v3->Hint;
if ( v17 )
{
v18 = pFontLucida->CalcTextHeight(v17, &v19, 0, 0);
@@ -1148,8 +1096,8 @@
//----- (0041192C) --------------------------------------------------------
void __cdecl InitializeBookTextures()
{
- signed int v0; // ebp@3
- Texture **v1; // ebx@3
+ //signed int v0; // ebp@3
+ //Texture **v1; // ebx@3
pAudioPlayer->StopChannels(-1, -1);
++pIcons_LOD->uTexturePacksCount;
@@ -1161,21 +1109,24 @@
pTexture_506448 = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture("ib-m5-u", TEXTURE_16BIT_PALETTE)];
ptr_506440 = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture("ib-m5-d", TEXTURE_16BIT_PALETTE)];
pTexture_50643C = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture("ib-m6-u",TEXTURE_16BIT_PALETTE)];
- v0 = 1;
- v1 = (Texture **)&pTextures_tabs[0][0].pName[4];
- pTexture_506444 = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture("ib-m6-d",TEXTURE_16BIT_PALETTE)];
- do
+ //v0 = 1;
+
+ static const char *texNames[9] =
{
- *(&pTexture_pagemask + v0) = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture(
- (const char *)pLloydsBeacons_SomeYs[v0 + 4],
- TEXTURE_16BIT_PALETTE)];
- sprintfex(pTmpBuf, "tab%da", v0);
- *(v1 - 1) = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture(pTmpBuf, TEXTURE_16BIT_PALETTE)];
- sprintfex(pTmpBuf, "tab%db", v0++);
- *v1 = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture(pTmpBuf, TEXTURE_16BIT_PALETTE)];
- v1 += 2;
+ "SBFB00", "SBAB00", "SBWB00", "SBEB00",
+ "SBSB00", "SBMB00", "SBBB00", "SBLB00",
+ };
+
+ pTexture_506444 = pIcons_LOD->LoadTexturePtr("ib-m6-d",TEXTURE_16BIT_PALETTE);
+ for (uint i = 0; i < 8; ++i)
+ {
+ pTextures_5064A0[i] = pIcons_LOD->LoadTexturePtr(texNames[i], TEXTURE_16BIT_PALETTE);
+
+ sprintf(pTmpBuf, "tab%da", i);
+ pTextures_tabs[i][0] = pIcons_LOD->LoadTexturePtr(pTmpBuf, TEXTURE_16BIT_PALETTE);
+ sprintf(pTmpBuf, "tab%db", i);
+ pTextures_tabs[i][1] = pIcons_LOD->LoadTexturePtr(pTmpBuf, TEXTURE_16BIT_PALETTE);
}
- while ( (signed int)v1 <= (signed int)&unk_506494 );
}
//----- (00411AAA) --------------------------------------------------------
@@ -1206,7 +1157,7 @@
v2 = uSlot;
v7 = uPlayer;
v3 = uSlot + 1;
- sprintfex(pContainerName, "data\\lloyd%d%d.pcx", uPlayer, uSlot + 1);
+ sprintf(pContainerName, "data\\lloyd%d%d.pcx", uPlayer, uSlot + 1);
v4 = fopen(pContainerName, "rb");
if ( v4 )
{
@@ -1215,7 +1166,7 @@
}
else
{
- sprintfex(pContainerName, "lloyd%d%d.pcx", v7, v3);
+ sprintf(pContainerName, "lloyd%d%d.pcx", v7, v3);
v5 = pNew_LOD->FindContainer(pContainerName, 1);
if ( v5 )
pSavegameThumbnails[v2].LoadFromFILE(v5, 0, 0);
@@ -1236,17 +1187,19 @@
int a2; // [sp+10h] [bp-8h]@1
int v7; // [sp+14h] [bp-4h]@1
+ __debugbreak();
+
v1 = pPlayers[uActiveCharacter];
v2 = this;
- LoadSpellbook(v1->field_1A4E);
+ LoadSpellbook(v1->pNumSpellBookPage);
v3 = 0;
a2 = 0;
- v7 = (int)(&v1->spellbook.pFireSpellbook + v1->field_1A4E);
+ v7 = (int)(&v1->spellbook.pFireSpellbook + v1->pNumSpellBookPage);
do
{
if ( *(char *)(v7 + v3) )
{
- v4 = 2 * (12 * v1->field_1A4E + (unsigned __int8)*(&byte_4E2431[12 * v1->field_1A4E] + v3));
+ v4 = 2 * (12 * v1->pNumSpellBookPage + (unsigned __int8)*(&byte_4E2431[12 * v1->pNumSpellBookPage] + v3));
v2->CreateButton(
pViewport->uViewportX + dword_4E20D0[v4],
pViewport->uViewportY + dword_4E20D0[v4 + 1],
@@ -1257,14 +1210,14 @@
0x56u,
v3,
0,
- nullstring,
+ "",
0);
++a2;
}
++v3;
}
while ( (signed int)v3 < 11 );
- v2->CreateButton(0, 0, 0, 0, 1, 0, 0x33u, 0, 9u, nullstring, 0);
+ v2->CreateButton(0, 0, 0, 0, 1, 0, 0x33u, 0, 9u, "", 0);
if ( a2 )
v2->_41D08F(a2, 0, 0, 0);
if ( v1->pActiveSkills[12] )
@@ -1295,7 +1248,7 @@
0x58u,
0,
0,
- nullstring,
+ "",
0);
ptr_5064F8 = v2->CreateButton(
0x1DCu,
@@ -1307,7 +1260,7 @@
0x58u,
0,
0,
- nullstring,
+ "",
pTexture_506444,
0);
v2->CreateButton(
@@ -1477,7 +1430,7 @@
_4E5EE0_transui_y - 4,
(Texture *)(uTextureID_50795C != -1 ? &pIcons_LOD->pTextures[uTextureID_50795C] : 0));
pRenderer->DrawTextureIndexed(_4E5E50_transui_x, _4E5EE0_transui_y, pDialogueNPCPortraits[(signed int)v4]);
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 14 )
+ if ( pCurrentScreen == 14 )
{
CharacterUI_InventoryTab_Draw(uActiveCharacter, 1);
goto LABEL_58;
@@ -1488,7 +1441,7 @@
}
else
{
- sprintfex(
+ sprintf(
pTmpBuf,
pGlobalTXT_LocalizationStrings[429],
//p2DEvents_minus1_::08[13 * (unsigned int)ptr_507BC0->ptr_1C],
@@ -1620,7 +1573,7 @@
v8 = pGlobalTXT_LocalizationStrings[57];
if ( v18 <= 1 )
v8 = pGlobalTXT_LocalizationStrings[56];
- sprintfex(pTmpBuf2, "%d %s ", v18, v8);
+ sprintf(pTmpBuf2, "%d %s ", v18, v8);
strcat(pTmpBuf, pTmpBuf2);
}
if ( v7 )
@@ -1629,7 +1582,7 @@
v9 = pGlobalTXT_LocalizationStrings[109];
else
v9 = pGlobalTXT_LocalizationStrings[110];
- sprintfex(pTmpBuf2, "%d %s ", v7, v9);
+ sprintf(pTmpBuf2, "%d %s ", v7, v9);
strcat(pTmpBuf, pTmpBuf2);
}
if ( v16 && !v18 )
@@ -1638,7 +1591,7 @@
v10 = pGlobalTXT_LocalizationStrings[437];
else
v10 = pGlobalTXT_LocalizationStrings[436];
- sprintfex(pTmpBuf2, "%d %s ", v16, v10);
+ sprintf(pTmpBuf2, "%d %s ", v16, v10);
strcat(pTmpBuf, pTmpBuf2);
}
if ( v17 && !v7 )
@@ -1647,7 +1600,7 @@
v11 = pGlobalTXT_LocalizationStrings[439];
else
v11 = pGlobalTXT_LocalizationStrings[438];
- sprintfex(pTmpBuf2, "%d %s ", v17, v11);
+ sprintf(pTmpBuf2, "%d %s ", v17, v11);
strcat(pTmpBuf, pTmpBuf2);
}
v12 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0x9Bu);
@@ -2164,7 +2117,7 @@
pWindow->uFrameZ = uX + uWidth - 1;
pWindow->uFrameW = uY + uHeight - 1;
pWindow->ptr_1C = (void *)a4;
- pWindow->str_48 = (char *)a5;
+ pWindow->Hint = (char *)a5;
v10 = uNumVisibleWindows;
pWindow->uFrameX = uX;
++v10;
@@ -2185,8 +2138,8 @@
pWindow->InitializeBookView();
break;
case WINDOW_A:
- dword_506978 = uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions;
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 4;
+ dword_506978 = pCurrentScreen;
+ pCurrentScreen = 4;
ptr_5076F4 = pWindow->CreateButton(
0x1D7u,
0x1BDu,
@@ -2229,7 +2182,7 @@
0x88u,
0x13u,
0,
- nullstring,
+ "",
0);
}
}
@@ -2250,7 +2203,7 @@
0x88u,
0x14u,
0,
- nullstring,
+ "",
0);
}
}
@@ -2271,7 +2224,7 @@
0x88u,
0x15u,
0,
- nullstring,
+ "",
0);
}
}
@@ -2292,7 +2245,7 @@
0x88u,
0x16u,
0,
- nullstring,
+ "",
0);
}
}
@@ -2313,7 +2266,7 @@
0x88u,
0x17u,
0,
- nullstring,
+ "",
0);
}
}
@@ -2334,7 +2287,7 @@
0x88u,
0x18u,
0,
- nullstring,
+ "",
0);
}
}
@@ -2357,7 +2310,7 @@
0);
if ( v12->uFlags & 0x80 )
{
- sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[408], v12->pName);
+ sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[408], v12->pName);
pWindow->CreateButton(0x1E0u, v11 + 130, 0x8Cu, v11, 1, 0, 0x88u, 0x4Cu, 0, pTmpBuf, 0);
}
else
@@ -2382,8 +2335,8 @@
}
break;
case WINDOW_11:
- dword_506978 = uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions;
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 17;
+ dword_506978 = pCurrentScreen;
+ pCurrentScreen = 17;
ptr_5076F4 = pWindow->CreateButton(
0x236u,
0x1BDu,
@@ -2407,7 +2360,7 @@
0x5Au,
0,
0x59u,
- pWindow->str_48,
+ pWindow->Hint,
(Texture *)(uTextureID_BUTTYES2 != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_BUTTYES2] : 0),
0);
pWindow->CreateButton(
@@ -2420,35 +2373,35 @@
0x5Au,
1u,
0x20u,
- pWindow->str_48,
+ pWindow->Hint,
0,
0,
0);
- pWindow->CreateButton(8u, 8u, 0x1CCu, 0x158u, 1, 0, 0x5Au, 1u, 0, pWindow->str_48, 0);
+ pWindow->CreateButton(8u, 8u, 0x1CCu, 0x158u, 1, 0, 0x5Au, 1u, 0, pWindow->Hint, 0);
break;
case WINDOW_12:
InitializeBookTextures();
pWindow->_411621();
break;
case WINDOW_13:
- dword_506978 = uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions;
+ dword_506978 = pCurrentScreen;
pKeyActionMap->_459E5A(0, 15, pWindow);
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 19;
+ pCurrentScreen = 19;
break;
}
return pWindow;
}
LABEL_62:
- pWindow->CreateButton(0x3Du, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 1u, 0x31u, nullstring, 0);
- pWindow->CreateButton(0xB1u, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 2u, 0x32u, nullstring, 0);
- pWindow->CreateButton(0x124u, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 3u, 0x33u, nullstring, 0);
- pWindow->CreateButton(0x197u, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 4u, 0x34u, nullstring, 0);
- pWindow->CreateButton(0, 0, 0, 0, 1, 0, 0xB0u, 0, 9u, nullstring, 0);
+ pWindow->CreateButton(0x3Du, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 1u, 0x31u, "", 0);
+ pWindow->CreateButton(0xB1u, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 2u, 0x32u, "", 0);
+ pWindow->CreateButton(0x124u, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 3u, 0x33u, "", 0);
+ pWindow->CreateButton(0x197u, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 4u, 0x34u, "", 0);
+ pWindow->CreateButton(0, 0, 0, 0, 1, 0, 0xB0u, 0, 9u, "", 0);
return pWindow;
}
if (eWindowType == WINDOW_HouseInterior)
{
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 13;
+ pCurrentScreen = 13;
ptr_5076F4 = pWindow->CreateButton(
0x1D7u,
0x1BDu,
@@ -2484,7 +2437,7 @@
v30 = v27;
v29 = pGlobalTXT_LocalizationStrings[435];
}
- sprintfex(&byte_591180[100 * v26], v29, v30);
+ sprintf(&byte_591180[100 * v26], v29, v30);
array_5913D8[v26 + 7] = (NPCData *)pWindow->CreateButton(
*(&_4E5E50_transui_x + v26 + 6 * uNumDialogueNPCPortraits - 6),
*(&_4E5EE0_transui_y + v26 + 6 * uNumDialogueNPCPortraits - 6),
@@ -2514,8 +2467,8 @@
{
if (eWindowType == WINDOW_1A)
{
- dword_506978 = uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions;
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 18;
+ dword_506978 = pCurrentScreen;
+ pCurrentScreen = 18;
ptr_5076F4 = pWindow->CreateButton(
0x236u,
0x1BDu,
@@ -2539,7 +2492,7 @@
0x19Bu,
0,
0x59u,
- pWindow->str_48,
+ pWindow->Hint,
(Texture *)(uTextureID_BUTTYES2 != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_BUTTYES2] : 0),
0);
pWindow->CreateButton(
@@ -2552,9 +2505,9 @@
0x19Bu,
1u,
0x20u,
- pWindow->str_48,
+ pWindow->Hint,
0);
- pWindow->CreateButton(8u, 8u, 0x1CCu, 0x158u, 1, 0, 0x19Bu, 1u, 0, pWindow->str_48, 0);
+ pWindow->CreateButton(8u, 8u, 0x1CCu, 0x158u, 1, 0, 0x19Bu, 1u, 0, pWindow->Hint, 0);
return pWindow;
}
if (eWindowType == WINDOW_1B)
@@ -2586,7 +2539,7 @@
ShowStatusBarString(pGlobalTXT_LocalizationStrings[39], 2u);
++pIcons_LOD->uTexturePacksCount;
pWindowList_at_506F50_minus1_indexing_buttons____and_an_int_[0] = 103;
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 23;
+ pCurrentScreen = 23;
if ( !pIcons_LOD->uNumPrevLoadedFiles )
pIcons_LOD->uNumPrevLoadedFiles = pIcons_LOD->uNumLoadedFiles;
}
diff -r c83d06692295 -r c0cf9393af64 GUIWindow.h
--- a/GUIWindow.h Mon Oct 22 09:20:49 2012 +0600
+++ b/GUIWindow.h Mon Oct 29 09:28:08 2012 +0600
@@ -68,11 +68,11 @@
void _4B3157();
GUIButton *_411621();
void InitializeBookView();
- void _415551(int arg0);
+ void DrawMessageBox(int arg0);
GUIButton *GetControl(unsigned int uID);
void Release();
void _41D08F(int a2, int a3, int a4, int a5);
- char _41D3B7();
+ char DrawQuickCharRecord();
char _41D73D_draw_buff_tooltip();
static GUIWindow *Create(unsigned int uX, unsigned int uY, unsigned int uWidth, unsigned int uHeight, enum WindowType eType, int a4, int a5);
@@ -87,15 +87,15 @@
void *ptr_1C;
unsigned int uNumControls;
int field_24;
- int field_28;
- int field_2C_focus_id;
+ int pNumPresenceButton;
+ int pCurrentPosActiveItem;
int field_30;
int field_34;
- int field_38;
+ int pStartingPosActiveItem;
int field_3C;
int field_40;
int field_44;
- char *str_48;
+ char *Hint;
GUIButton *pControlsHead;
GUIButton *pControlsTail;
};
@@ -116,6 +116,16 @@
UIMSG_MainMenu_ShowLoadWindow = 0x37,
UIMSG_ShowCredits = 0x38,
UIMSG_ExitToWindows = 0x39,
+ UIMSG_3C = 0x3C,
+ UIMSG_PlayerCreationClickPlus = 0x3E,
+ UIMSG_PlayerCreationClickMinus = 0x3F,
+ UIMSG_PlayerCreationSelectActiveSkill = 0x40,
+ UIMSG_PlayerCreationSelectClass = 0x41,
+ UIMSG_PlayerCreationClickOK = 0x42,
+ UIMSG_PlayerCreationClickReset = 0x43,
+ UIMSG_PlayerCreationRemoveUpSkill = 0x4A,
+ UIMSG_PlayerCreationRemoveDownSkill = 0x4B,
+ UIMSG_4B = 0x4B,
UIMSG_LoadGame = 0x52,
UIMSG_SaveGame = 0x53,
UIMSG_ShowStatus_DateTime = 0x5C,
@@ -123,16 +133,20 @@
UIMSG_ShowStatus_Player = 0x5E,
UIMSG_ShowStatus_Food = 0x64,
UIMSG_ShowStatus_Funds = 0x65,
+ UIMSG_6B = 0x6B,
UIMSG_SelectCharacter = 0x6E,
UIMSG_ChangeSoundVolume = 0x6F,
UIMSG_ChangeMusicVolume = 0x70,
UIMSG_CloseBook = 0x71,
+ UIMSG_PlayerCreationSelectQuality = 0x76,
UIMSG_SkillUp = 0x79,
UIMSG_StartNewGame = 0x7C,
UIMSG_Game_OpenLoadGameDialog = 0x7D,
UIMSG_Game_OpenOptionsDialog = 0x7F,
UIMSG_SetGraphicsMode = 0x83,
UIMSG_Quit = 0x84,
+ UIMSG_PlayerCreationVoiceBack = 0x90,
+ UIMSG_PlayerCreationVoiceForward = 0x91,
UIMSG_StartNPCDialogue = 0xA1,
UIMSG_A2 = 0xA2,
UIMSG_A3 = 0xA3,
@@ -143,8 +157,8 @@
UIMSG_A8 = 0xA8,
UIMSG_A9 = 0xA9,
UIMSG_AA = 0xAA,
- UIMSG_AB = 0xAB,
- UIMSG_AC = 0xAC,
+ UIMSG_SelectFacePlayerBack = 0xAB,
+ UIMSG_SelectFacePlayerForward = 0xAC,
UIMSG_AD = 0xAD,
UIMSG_AE = 0xAE,
UIMSG_AF = 0xAF,
diff -r c83d06692295 -r c0cf9393af64 Game.cpp
--- a/Game.cpp Mon Oct 22 09:20:49 2012 +0600
+++ b/Game.cpp Mon Oct 29 09:28:08 2012 +0600
@@ -48,8 +48,6 @@
//----- (0044103C) --------------------------------------------------------
void Game::Draw()
{
- Render *v0; // esi@3
- int _null; // ebx@6
float v2; // ST24_4@11
//double v3; // ST28_8@11
int v4; // edi@26
@@ -63,38 +61,37 @@
pIndoorCamera->pos.x = pParty->vPosition.x
- ((unsigned __int64)(stru_5C6E00->SinCos(pParty->sRotationY)
* (signed __int64)pParty->field_18) >> 16);
- pIndoorCamera->pos.y = pParty->vPosition.z
+ pIndoorCamera->pos.y = pParty->vPosition.y
- ((unsigned __int64)(stru_5C6E00->SinCos(
pParty->sRotationY - stru_5C6E00->uIntegerHalfPi)
* (signed __int64)pParty->field_18) >> 16);
- pIndoorCamera->pos.z = pParty->vPosition.y + pParty->sEyelevel;
+ pIndoorCamera->pos.z = pParty->vPosition.z + pParty->sEyelevel;
pIndoorCamera->Initialize2();
pIndoorCameraD3D->CreateWorldMatrixAndSomeStuff();
pIndoorCameraD3D->_4374E8_ProllyBuildFrustrum();
- //v0 = &pRenderer;
+
if ( pVideoPlayer->AnyMovieLoaded() )
{
- _null = 0;
if ( pRenderer->pRenderD3D )
goto LABEL_22;
- pRenderer->SetGameRenderStates();
- pMouse->_469E3B();
+ pRenderer->BeginSceneD3D();
+ pMouse->DrawCursorToTarget();
}
else
{
- if ( pParty->vPosition.x != pParty->vPrevPosition.x | pParty->sRotationY != pParty->sPrevRotationY | pParty->vPosition.z != pParty->vPrevPosition.z | pParty->sRotationX != pParty->sPrevRotationX | pParty->vPosition.y != pParty->vPrevPosition.y | pParty->sEyelevel != pParty->sPrevEyelevel )
+ if ( pParty->vPosition.x != pParty->vPrevPosition.x | pParty->sRotationY != pParty->sPrevRotationY | pParty->vPosition.y != pParty->vPrevPosition.z | pParty->sRotationX != pParty->sPrevRotationX | pParty->vPosition.z != pParty->vPrevPosition.y | pParty->sEyelevel != pParty->sPrevEyelevel )
pParty->uFlags |= 2u;
pParty->vPrevPosition.x = pParty->vPosition.x;
- pParty->vPrevPosition.y = pParty->vPosition.y;
+ pParty->vPrevPosition.y = pParty->vPosition.z;
//v0 = &pRenderer;
pParty->sPrevRotationY = pParty->sRotationY;
- pParty->vPrevPosition.z = pParty->vPosition.z;
+ pParty->vPrevPosition.z = pParty->vPosition.y;
pParty->sPrevRotationX = pParty->sRotationX;
pParty->sPrevEyelevel = pParty->sEyelevel;
- pRenderer->SetGameRenderStates();
- _null = 0;
+ pRenderer->BeginSceneD3D();
+
if ( !pRenderer->pRenderD3D )
- pMouse->_469E3B();
+ pMouse->DrawCursorToTarget();
if ( !sub_4226C2() || viewparams->field_48 == 1 )
{
if ( pRenderer->pRenderD3D )
@@ -105,15 +102,15 @@
pRenderer->field_1036A8_bitmapid = floorf(v2 + 0.5f);
}
- if ( uCurrentlyLoadedLevelType == LEVEL_Indoor)
+ if (uCurrentlyLoadedLevelType == LEVEL_Indoor)
pIndoor->Draw();
- else if ( uCurrentlyLoadedLevelType == LEVEL_Outdoor)
- pOutdoor->Draw();
+ else if (uCurrentlyLoadedLevelType == LEVEL_Outdoor)
+ pOutdoor->Draw();
- if ( pRenderer->pRenderD3D )
+ if (pRenderer->pRenderD3D)
{
pDecalBuilder->DrawBloodsplats();
- if ( pRenderer->pRenderD3D )
+ if (pRenderer->pRenderD3D)
pGame->pLightmapBuilder->DrawLightmaps(2);
}
}
@@ -121,44 +118,42 @@
pRenderer->DrawBillboards_And_MaybeRenderSpecialEffects_And_EndScene();
LABEL_22:
pRenderer->BeginScene();
- if ( pRenderer->pRenderD3D != (RenderD3D *)_null )
- pMouse->_469E3B();
- if ( pOtherOverlayList->field_3EC != _null )
+ if (pRenderer->pRenderD3D)
+ pMouse->DrawCursorToTarget();
+ if (pOtherOverlayList->field_3EC)
viewparams->bRedrawGameUI = 1;
v4 = viewparams->bRedrawGameUI;
GameUI_DrawStatusBar();
- if ( viewparams->bRedrawGameUI == _null )
+ if (!viewparams->bRedrawGameUI)
{
- //nullsub_1();
GameUI_DrawRightPanelItems();
}
else
{
GameUI_DrawRightPanelFrames();
GameUI_DrawStatusBar_2();
- viewparams->bRedrawGameUI = _null;
+ viewparams->bRedrawGameUI = false;
}
- if ( pVideoPlayer->pSmackerMovie == (_SMACK *)_null )
+ if (!pVideoPlayer->pSmackerMovie)
{
- GameUI_DrawMinimap(0x1E8u, 0x10u, 0x271u, 0x85u, viewparams->uMinimapZoom, pParty->uFlags & 2);
- if ( v4 != _null )
+ GameUI_DrawMinimap(488, 16, 625, 133, viewparams->uMinimapZoom, pParty->uFlags & 2);
+ if (v4)
{
- if ( !sub_4226C2() && pRenderer->pRenderD3D != (RenderD3D *)_null )
- pRenderer->FillRect2(
- _null,
+ if ( !sub_4226C2() && pRenderer->pRenderD3D)
+ pRenderer->FillRectFast(
pViewport->uViewportX,
pViewport->uViewportY,
pViewport->uViewportZ - pViewport->uViewportX,
pViewport->uViewportW - pViewport->uViewportY + 1,
- LOWORD(pRenderer->uTargetGMask) | LOWORD(pRenderer->uTargetBMask));
- viewparams->field_48 = _null;
+ pRenderer->uTargetGMask | pRenderer->uTargetBMask);
+ viewparams->field_48 = 0;
}
}
v5 = pOtherOverlayList->field_3EC;
- pOtherOverlayList->field_3EC = _null;
+ pOtherOverlayList->field_3EC = 0;
viewparams->bRedrawGameUI = v5;
GameUI_DrawPartySpells();
- if ( v4 != _null || pParty->pHirelings[0].evtc != _null || pParty->pHirelings[1].evtc != _null )
+ if (v4 || pParty->pHirelings[0].evtc || pParty->pHirelings[1].evtc )
DrawHiredNPCs();
GameUI_DrawPortraits(v4);
GameUI_DrawLifeManaBars();
@@ -174,8 +169,8 @@
GUI_UpdateWindows();
pParty->_4909F4();
++stru_51076C.field_8;
- dword_5B5924 = _null;
- if ( v4 != _null )
+ dword_5B5924 = 0;
+ if (v4)
pMouse->field_14 = 1;
pMouse->_469EA4();
pMouse->DrawCursor();
@@ -184,7 +179,6 @@
pRenderer->Present();
pParty->uFlags &= 0xFFFFFFFDu;
}
-// 5B5924: using guessed type int dword_5B5924;
//----- (0047A815) --------------------------------------------------------
@@ -254,7 +248,8 @@
pEventTimer->Resume();
dword_6BE364_game_settings_1 |= 0x80;
dword_6BE340 = 2;
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 0;
+ // uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 0;
+ pCurrentScreen = 0;
if (pAsyncMouse)
pAsyncMouse->Resume();
if (pGame->pKeyboardInstance->bUsingAsynKeyboard && pAsyncKeyboard )
@@ -292,7 +287,7 @@
if ( pVideoPlayer->pSmackerMovie && !SmackWait(pVideoPlayer->pSmackerMovie) )
{
pRenderer->BeginScene();
- pMouse->_469E3B();
+ pMouse->DrawCursorToTarget();
pVideoPlayer->SmackUpdatePalette(pVideoPlayer->hWindow);
pMouse->_469EA4();
pRenderer->EndScene();
@@ -300,7 +295,7 @@
if ( pVideoPlayer->pBinkMovie && !BinkWait(pVideoPlayer->pBinkMovie) )
{
pRenderer->BeginScene();
- pMouse->_469E3B();
+ pMouse->DrawCursorToTarget();
pVideoPlayer->BinkUpdatePalette(pVideoPlayer->hWindow);
pMouse->_469EA4();
pRenderer->EndScene();
@@ -424,21 +419,21 @@
if ( (unsigned __int16)_449B57_test_bit(pParty->_award_bits, 136) )
{
pParty->vPosition.x = -17331; // respawn in harmondale
- pParty->vPosition.z = 12547;
- pParty->vPosition.y = 465;
+ pParty->vPosition.y = 12547;
+ pParty->vPosition.z = 465;
pParty->sRotationY = 0;
v13 = "out02.odm";
}
else
{
pParty->vPosition.x = 12552; // respawn on emerald isle
- pParty->vPosition.z = 1816;
- pParty->vPosition.y = 0;
+ pParty->vPosition.y = 1816;
+ pParty->vPosition.z = 0;
pParty->sRotationY = 512;
v13 = "out01.odm";
}
strcpy(Source, v13);
- pParty->uFallStartY = pParty->vPosition.y;
+ pParty->uFallStartY = pParty->vPosition.z;
pParty->sRotationX = 0;
pParty->uFallSpeed = 0;
pParty->field_6E4 = 0;
@@ -447,8 +442,8 @@
{
strcpy(pCurrentMapName, Source);
_5B65A8_npcdata_uflags_or_other = pParty->vPosition.x;
- _5B65AC_npcdata_fame_or_other = pParty->vPosition.z;
- _5B65B0_npcdata_rep_or_other = pParty->vPosition.y;
+ _5B65AC_npcdata_fame_or_other = pParty->vPosition.y;
+ _5B65B0_npcdata_rep_or_other = pParty->vPosition.z;
_5B65B4_npcdata_loword_house_or_other = pParty->sRotationY;
_5B65B8_npcdata_hiword_house_or_other = pParty->sRotationX;
dword_5B65C0 = 1;
@@ -486,7 +481,7 @@
}
break;
}
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 16;
+ pCurrentScreen = 16;
sub_491E3A();
}
@@ -494,33 +489,19 @@
//----- (0044F192) --------------------------------------------------------
-void Game::PushStru165s()
+void Game::PrepareBloodsplats()
{
- Game *v1; // edi@1
- int v2; // ebx@1
- float *v3; // esi@2
-
- auto a1 = this;
- v1 = a1;
- v2 = 0;
- if ( a1->array_708_size > 0 )
+ for (uint i = 0; i < uNumBloodsplats; ++i)
{
- v3 = &a1->array_708[0].flt_10;
- do
- {
- pBloodsplatContainer->AddBloodsplat(
- *(v3 - 4),
- *(v3 - 3),
- *(v3 - 2),
- v3[2],
- (signed __int64)*(v3 - 1),
- (signed __int64)*v3,
- (signed __int64)v3[1]);
- ++v2;
- v3 += 7;
- }
- while ( v2 < v1->array_708_size );
- }
+ pBloodsplatContainer->AddBloodsplat(
+ pBloodsplats[i].x,
+ pBloodsplats[i].y,
+ pBloodsplats[i].z,
+ pBloodsplats[i].radius,
+ pBloodsplats[i].r,
+ pBloodsplats[i].g,
+ pBloodsplats[i].b);
+ }
}
@@ -561,7 +542,7 @@
if ( !(uFlags & 0x40) )
{
- array_708_size = 0;
+ uNumBloodsplats = 0;
field_E0C = 0;
}
}
@@ -592,7 +573,7 @@
//----- (0044EEA7) --------------------------------------------------------
bool Game::_44EEA7()
{
- Game *v1; // esi@1
+ //Game *v1; // esi@1
double v2; // st7@2
float depth; // ST00_4@9
bool result; // eax@9
@@ -605,7 +586,7 @@
stru157 *v11; // [sp+14h] [bp-14h]@2
POINT a2; // [sp+20h] [bp-8h]@1
- v1 = this;
+ //v1 = this;
++qword_5C6DF0;
pParticleEngine->UpdateParticles();
pMouseInstance->GetCursorPos(&a2);
@@ -620,7 +601,7 @@
}
else
{
- if ( v1->uFlags2 & 0x10 )
+ if ( uFlags2 & 0x10 )
{
v11 = &a5;
v10 = &stru_F93E1C;
@@ -649,8 +630,8 @@
depth = v2;
PickMouse(depth, y, x, v9, v10, v11);
- v1->pLightmapBuilder->std__vector_000004_size = 0;
- v1->pLightmapBuilder->std__vector_183808_size = 0;
+ pLightmapBuilder->std__vector_000004_size = 0;
+ pLightmapBuilder->std__vector_183808_size = 0;
pDecalBuilder->std__vector_pDecals_size = 0;
pDecalBuilder->field_308008 = 0;
result = _44F07B();
@@ -661,59 +642,48 @@
if ( pRenderer->pRenderD3D && uCurrentlyLoadedLevelType == LEVEL_Outdoor)
{
v5 = GetLevelFogColor();
- LODWORD(pRenderer->uFogColor) = v5 & 0xFFFFFF;
+ pRenderer->uFogColor = v5 & 0xFFFFFF;
}
if (uFlags & 0x0400)
uFlags2 |= 0x01;
- if ( !pRenderer->pRenderD3D && uCurrentlyLoadedLevelType == LEVEL_Outdoor && uNumMobileLightsApplied )
+ if ( !pRenderer->pRenderD3D && uCurrentlyLoadedLevelType == LEVEL_Outdoor && pMobileLightsStack->uNumLightsActive )
{
uFlags2 |= 0x01;
field_E10 = qword_5C6DF0;
}
- v6 = qword_5C6DF0 - v1->field_E10;
- if ( qword_5C6DF0 - v1->field_E10 == 1 )
- v1->uFlags2 |= v6;
- if ( v1->uNumStationaryLights_in_pStationaryLightsStack != uNumStationaryLightsApplied )
+ v6 = qword_5C6DF0 - field_E10;
+ if ( qword_5C6DF0 - field_E10 == 1 )
+ uFlags2 |= v6;
+ if (uNumStationaryLights_in_pStationaryLightsStack != pStationaryLightsStack->uNumLightsActive )
{
- v1->uFlags2 |= 1u;
- v1->uNumStationaryLights_in_pStationaryLightsStack = uNumStationaryLightsApplied;
+ uFlags2 |= 1u;
+ uNumStationaryLights_in_pStationaryLightsStack = pStationaryLightsStack->uNumLightsActive;
}
_44E904();
LOBYTE(result) = 1;
}
return result;
}
-// 519AB4: using guessed type int uNumStationaryLightsApplied;
-// 5C6DEC: using guessed type char static_sub_44EEA7_byte_5C6DEC__init_flag;
-// 5C6DF0: using guessed type __int64 qword_5C6DF0;
-// F93E1C: using guessed type stru157 stru_F93E1C;
-// F93E30: using guessed type stru157 stru_F93E30;
+
//----- (0044EDE4) --------------------------------------------------------
-bool Game::_44EDE4(BLVFace *pFace, int *a3)
+bool Game::AlterGamma(BLVFace *pFace, unsigned int *pColor)
{
- bool result; // eax@1
-
- result = (bool)pGame;
- if ( pGame->uFlags2 & 2 && (result = (bool)pFace, pFace->uAttributes & 2) )
+ if (pGame->uFlags2 & 2 && pFace->uAttributes & 2)
{
- result = sub_48A959(*a3, 1.0, this->_E28_timed_gamma_strength, -1.0);
- *a3 = result;
- LOBYTE(result) = 1;
+ *pColor = ReplaceHSV(*pColor, 1.0, fSaturation, -1.0);
+ return true;
}
else
- {
- LOBYTE(result) = 0;
- }
- return result;
+ return false;
}
//----- (0044EE30) --------------------------------------------------------
bool Game::_44EE30(ODMFace *a2, int a3)
{
- if (uFlags2 & 0x2 && a2->uFaceAttributes & 0x02)
+ if (uFlags2 & 0x2 && a2->uAttributes & 0x02)
{
- *(int *)a3 = sub_48A959(*(int *)a3, 1.0, _E28_timed_gamma_strength, -1.0);
+ *(int *)a3 = ReplaceHSV(*(int *)a3, 1.0, fSaturation, -1.0);
return true;
}
else
@@ -781,17 +751,17 @@
float a4a; // [sp+1Ch] [bp+10h]@9
float a4b; // [sp+1Ch] [bp+10h]@11
- if ( this->uFlags2 & 2 && a2->field_59 == 5 && a2->pODMFace->uFaceAttributes & 2 )
+ if ( this->uFlags2 & 2 && a2->field_59 == 5 && a2->pODMFace->uAttributes & 2 )
{
v4 = (double)a4;
a2a = v4;
*a3 |= 2u;
- a3a = (1.0 - this->_E28_timed_gamma_strength) * v4;
+ a3a = (1.0 - this->fSaturation) * v4;
//v5 = a3a + 6.7553994e15;
//if ( SLODWORD(v5) >= 0 )
if (floorf(a3a + 0.5f) >= 0 )
{
- a3b = (1.0 - this->_E28_timed_gamma_strength) * a2a;
+ a3b = (1.0 - this->fSaturation) * a2a;
//v7 = a3b + 6.7553994e15;
//v6 = LODWORD(v7);
v6 = floorf(a3b + 0.5f);
@@ -802,12 +772,12 @@
}
if ( a4 >= v6 )
{
- a4a = (1.0 - _E28_timed_gamma_strength) * a2a;
+ a4a = (1.0 - fSaturation) * a2a;
//v9 = a4a + 6.7553994e15;
//if ( SLODWORD(v9) >= 0 )
if (floorf(a4a + 0.5f) >= 0)
{
- a4b = (1.0 - _E28_timed_gamma_strength) * a2a;
+ a4b = (1.0 - fSaturation) * a2a;
//v10 = a4b + 6.7553994e15;
//result = LODWORD(v10);
result = floorf(a4b + 0.5f);
@@ -849,11 +819,11 @@
signed int Game::_44ED0A(BLVFace *a2, int *a3, signed int a4)
{
double v4; // st7@3
- double v5; // ST00_8@3
+ //double v5; // ST00_8@3
signed int v6; // eax@4
//double v7; // ST00_8@5
signed int result; // eax@7
- double v9; // ST00_8@8
+ //double v9; // ST00_8@8
//double v10; // ST00_8@10
float v11; // [sp+14h] [bp+8h]@3
float v12; // [sp+18h] [bp+Ch]@3
@@ -866,11 +836,11 @@
v4 = (double)a4;
v11 = v4;
*a3 |= 2u;
- v12 = (1.0 - this->_E28_timed_gamma_strength) * v4;
- v5 = v12 + 6.7553994e15;
- if ( SLODWORD(v5) >= 0 )
+ v12 = (1.0 - this->fSaturation) * v4;
+ //v5 = v12 + 6.7553994e15;
+ if (floorf(v12 + 0.5f)/* SLODWORD(v5)*/ >= 0 )
{
- v13 = (1.0 - this->_E28_timed_gamma_strength) * v11;
+ v13 = (1.0 - this->fSaturation) * v11;
//v7 = v13 + 6.7553994e15;
//v6 = LODWORD(v7);
v6 = floorf(v13 + 0.5f);
@@ -881,11 +851,11 @@
}
if ( a4 >= v6 )
{
- v14 = (1.0 - _E28_timed_gamma_strength) * v11;
- v9 = v14 + 6.7553994e15;
- if ( SLODWORD(v9) >= 0 )
+ v14 = (1.0 - fSaturation) * v11;
+ //v9 = v14 + 6.7553994e15;
+ if (floorf(v14 + 0.5f)/* SLODWORD(v9)*/ >= 0 )
{
- v15 = (1.0 - _E28_timed_gamma_strength) * v11;
+ v15 = (1.0 - fSaturation) * v11;
//v10 = v15 + 6.7553994e15;
//result = LODWORD(v10);
result = floorf(v15 + 0.5f);
@@ -912,7 +882,7 @@
Game::Game()
{
uNumStationaryLights = 0;
- array_708_size = 0;
+ uNumBloodsplats = 0;
field_E0C = 0;
field_E10 = 0;
uNumStationaryLights_in_pStationaryLightsStack = 0;
@@ -924,7 +894,7 @@
pThreadWardInstance = new ThreadWard;
pParticleEngine = new ParticleEngine;
- pMouseInstance = new Mouse(pThreadWardInstance);
+ pMouse = pMouseInstance = new Mouse(pThreadWardInstance);
pLightmapBuilder = new LightmapBuilder;
pVisInstance = new Vis;
pStru6Instance = new stru6;
@@ -984,7 +954,7 @@
//----- (0044E904) --------------------------------------------------------
void Game::_44E904()
{
- Game *v1; // esi@1
+ //Game *v1; // esi@1
unsigned __int64 v2; // qax@1
unsigned int v3; // ecx@1
int v4; // edi@1
@@ -993,13 +963,13 @@
double v7; // st7@15
signed __int64 v8; // [sp+Ch] [bp-8h]@1
- v1 = this;
+ //v1 = this;
v2 = pEventTimer->Time();
- v4 = (v2 - v1->uSomeGammaStartTime) >> 32;
- v3 = v2 - LODWORD(v1->uSomeGammaStartTime);
- v8 = v2 - v1->uSomeGammaStartTime;
+ v4 = (v2 - uSomeGammaStartTime) >> 32;
+ v3 = v2 - LODWORD(uSomeGammaStartTime);
+ v8 = v2 - uSomeGammaStartTime;
if ( v4 < 0
- || SHIDWORD(v2) < ((unsigned int)v2 < LODWORD(v1->uSomeGammaStartTime)) + HIDWORD(v1->uSomeGammaStartTime) | v4 == 0
+ || SHIDWORD(v2) < ((unsigned int)v2 < LODWORD(uSomeGammaStartTime)) + HIDWORD(uSomeGammaStartTime) | v4 == 0
&& v3 <= 0x80 )
{
if ( v4 > 0 || v4 >= 0 )
@@ -1009,25 +979,25 @@
}
else
{
- if ( v1->uSomeGammaDeltaTime )
+ if ( uSomeGammaDeltaTime )
{
- LODWORD(v1->uSomeGammaDeltaTime) = 0;
- HIDWORD(v1->uSomeGammaDeltaTime) = 0;
+ LODWORD(uSomeGammaDeltaTime) = 0;
+ HIDWORD(uSomeGammaDeltaTime) = 0;
}
else
{
- LODWORD(v1->uSomeGammaDeltaTime) = v3;
- HIDWORD(v1->uSomeGammaDeltaTime) = v4;
+ LODWORD(uSomeGammaDeltaTime) = v3;
+ HIDWORD(uSomeGammaDeltaTime) = v4;
}
v5 = __CFADD__(v3, -128);
v3 -= 128;
v4 = v5 + v4 - 1;
}
- v1->uSomeGammaStartTime = v2;
+ uSomeGammaStartTime = v2;
v8 = __PAIR__(v4, v3);
LABEL_12:
- if ( v1->uSomeGammaDeltaTime )
- v6 = (double)(signed __int64)(v1->uSomeGammaDeltaTime - __PAIR__(v4, v3));
+ if ( uSomeGammaDeltaTime )
+ v6 = (double)(signed __int64)(uSomeGammaDeltaTime - __PAIR__(v4, v3));
else
v6 = (double)v8;
v7 = v6 * 0.0078125;
@@ -1041,9 +1011,9 @@
v7 = 1.0;
}
if ( pRenderer->pRenderD3D )
- v1->_E28_timed_gamma_strength = v7;
+ fSaturation = v7;
else
- v1->_E28_timed_gamma_strength = (1.0 - 0.5) * v7 + 0.5;
+ fSaturation = (1.0 - 0.5) * v7 + 0.5;
}
//----- (0044EA17) --------------------------------------------------------
@@ -1071,8 +1041,7 @@
int a3; // [sp+1Fh] [bp-1h]@5
auto v7 = this;
- if (!uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions
- && pRenderer->pRenderD3D)
+ if (!pCurrentScreen && pRenderer->pRenderD3D)
{
if (!pVisInstance)
{
@@ -1097,14 +1066,12 @@
}
return false;
}
-// 4E28F8: using guessed type int uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions;
+// 4E28F8: using guessed type int pCurrentScreen;
//----- (0044EB12) --------------------------------------------------------
bool Game::_44EB12(bool bOutline, stru157 *a3, stru157 *a4)
{
- if ( !uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions
- && pVisInstance
- && pRenderer->pRenderD3D )
+ if ( !pCurrentScreen && pVisInstance && pRenderer->pRenderD3D )
{
bool r = pVisInstance->_4C05CC(&pVisInstance->stru1, a3, a4);
@@ -1114,7 +1081,7 @@
}
return false;
}
-// 4E28F8: using guessed type int uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions;
+// 4E28F8: using guessed type int pCurrentScreen;
//----- (0044EB5A) --------------------------------------------------------
void Game::OutlineSelection()
diff -r c83d06692295 -r c0cf9393af64 Game.h
--- a/Game.h Mon Oct 22 09:20:49 2012 +0600
+++ b/Game.h Mon Oct 29 09:28:08 2012 +0600
@@ -61,15 +61,16 @@
/* 279 */
#pragma pack(push, 1)
-struct Game_stru1
+//Game_stru1
+struct Game_Bloodsplat
{
- float flt_0;
- float flt_4;
- float flt_8;
- float flt_C;
- float flt_10;
- float flt_14;
- float flt_18;
+ float x;
+ float y;
+ float z;
+ float r;
+ float g;
+ float b;
+ float radius;
};
#pragma pack(pop)
@@ -91,7 +92,7 @@
void OutlineSelection();
signed int _44EC23(struct stru148 *a2, int *a3, signed int a4);
signed int _44ED0A(struct BLVFace *a2, int *a3, signed int a4);
- bool _44EDE4(struct BLVFace *pFace, int *a3);
+ bool AlterGamma(struct BLVFace *pFace, unsigned int *pColor);
bool _44EE30(struct ODMFace *a2, int a3);
bool draw_debug_outlines();
bool _44EEA7();
@@ -100,7 +101,7 @@
void ToggleFlags2(unsigned int uFlag);
void _44F0FD();
void PushStationaryLights(int a2);
- void PushStru165s();
+ void PrepareBloodsplats();
void Deinitialize();
void Loop();
void DrawParticles();
@@ -116,7 +117,7 @@
Game__StationaryLight pStationaryLights[25];
char field_2C0[1092];
unsigned int uNumStationaryLights;
- Game_stru1 array_708[20];
+ Game_Bloodsplat pBloodsplats[20];
int field_938;
int field_93C;
int field_940;
@@ -136,14 +137,14 @@
int field_978;
Game_stru0 stru_97C;
char field_98C[1148];
- int array_708_size;
+ int uNumBloodsplats;
int field_E0C;
__int64 field_E10;
int uNumStationaryLights_in_pStationaryLightsStack;
unsigned int bGammaControlInitialized;
unsigned int uFlags;
unsigned int uFlags2;
- float _E28_timed_gamma_strength;
+ float fSaturation;
unsigned __int64 uSomeGammaStartTime;
__int64 uSomeGammaDeltaTime;
ThreadWard *pThreadWardInstance;
diff -r c83d06692295 -r c0cf9393af64 GameUIs.cpp
--- a/GameUIs.cpp Mon Oct 22 09:20:49 2012 +0600
+++ b/GameUIs.cpp Mon Oct 29 09:28:08 2012 +0600
@@ -52,7 +52,7 @@
8u,
8u,
(Texture *)(uTextureID_loadsave != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_loadsave] : 0));
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 11 )
+ if ( pCurrentScreen == 11 )
{
v1 = uTextureID_save_up;
v2 = uTextureID_LS_saveU;
@@ -71,7 +71,7 @@
}
else
{
- pRenderer->DrawTextureRGB(0, 0, &stru_506F20);
+ pRenderer->DrawTextureRGB(0, 0, &pTexture_PCX);
}
pGUIWindow_CurrentMenu = GUIWindow::Create(
saveload_dlg_xs[uDialogueType_],
@@ -110,7 +110,7 @@
v5 = v15.FindContainer("image.pcx", true);
if ( !v5 )
{
- v9 = nullstring;
+ v9 = "";
LABEL_22:
pSavegameUsedSlots[v3] = 0;
strcpy(Dest->pName, v9);
@@ -132,7 +132,7 @@
}
LABEL_24:
v15.FreeSubIndexAndIO();
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 11 )
+ if ( pCurrentScreen == 11 )
{
v6 = pIcons_LOD->LoadTexture("x_d", TEXTURE_16BIT_PALETTE);
v10 = (TEXTURE_TYPE)2;
@@ -148,13 +148,13 @@
uTextureID_LS_ = pIcons_LOD->LoadTexture(v8, v10);
uTextureID_AR_UP_DN = pIcons_LOD->LoadTexture("AR_UP_DN", TEXTURE_16BIT_PALETTE);
uTextureID_AR_DN_DN = pIcons_LOD->LoadTexture("AR_DN_DN", TEXTURE_16BIT_PALETTE);
- pGUIWindow_CurrentMenu->CreateButton(21u, 198u, 191u, 18u, 1, 0, 0xA5u, 0, 0, nullstring, 0);
- pGUIWindow_CurrentMenu->CreateButton(21u, 219u, 191u, 18u, 1, 0, 0xA5u, 1u, 0, nullstring, 0);
- pGUIWindow_CurrentMenu->CreateButton(21u, 240u, 191u, 18u, 1, 0, 0xA5u, 2u, 0, nullstring, 0);
- pGUIWindow_CurrentMenu->CreateButton(21u, 261u, 191u, 18u, 1, 0, 0xA5u, 3u, 0, nullstring, 0);
- pGUIWindow_CurrentMenu->CreateButton(21u, 282u, 191u, 18u, 1, 0, 0xA5u, 4u, 0, nullstring, 0);
- pGUIWindow_CurrentMenu->CreateButton(21u, 303u, 191u, 18u, 1, 0, 0xA5u, 5u, 0, nullstring, 0);
- pGUIWindow_CurrentMenu->CreateButton(21u, 324u, 191u, 18u, 1, 0, 0xA5u, 6u, 0, nullstring, 0);
+ pGUIWindow_CurrentMenu->CreateButton(21u, 198u, 191u, 18u, 1, 0, 0xA5u, 0, 0, "", 0);
+ pGUIWindow_CurrentMenu->CreateButton(21u, 219u, 191u, 18u, 1, 0, 0xA5u, 1u, 0, "", 0);
+ pGUIWindow_CurrentMenu->CreateButton(21u, 240u, 191u, 18u, 1, 0, 0xA5u, 2u, 0, "", 0);
+ pGUIWindow_CurrentMenu->CreateButton(21u, 261u, 191u, 18u, 1, 0, 0xA5u, 3u, 0, "", 0);
+ pGUIWindow_CurrentMenu->CreateButton(21u, 282u, 191u, 18u, 1, 0, 0xA5u, 4u, 0, "", 0);
+ pGUIWindow_CurrentMenu->CreateButton(21u, 303u, 191u, 18u, 1, 0, 0xA5u, 5u, 0, "", 0);
+ pGUIWindow_CurrentMenu->CreateButton(21u, 324u, 191u, 18u, 1, 0, 0xA5u, 6u, 0, "", 0);
ptr_69BD64 = pGUIWindow_CurrentMenu->CreateButton(
241u,
302u,
@@ -165,7 +165,7 @@
0xA4u,
0,
0,
- nullstring,
+ "",
(Texture *)(uTextureID_LS_ != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_LS_] : 0),
0);
ptr_69BD60 = pGUIWindow_CurrentMenu->CreateButton(
@@ -178,7 +178,7 @@
0xA6u,
0,
0,
- nullstring,
+ "",
(Texture *)(uTextureID_x_d != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_x_d] : 0),
0);
ptr_69BD5C = pGUIWindow_CurrentMenu->CreateButton(
@@ -191,7 +191,7 @@
0xA2u,
0,
0,
- nullstring,
+ "",
(Texture *)(uTextureID_AR_UP_DN != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_AR_UP_DN] : 0),
0);
v7 = pGUIWindow_CurrentMenu->CreateButton(
@@ -204,7 +204,7 @@
0xA3u,
uNumSavegameFiles,
0,
- nullstring,
+ "",
(Texture *)(uTextureID_AR_DN_DN != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_AR_DN_DN] : 0),
0);
v16 = -1;
@@ -244,7 +244,7 @@
8u,
8u,
(Texture *)(uTextureID_loadsave != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_loadsave] : 0));
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 11 )
+ if ( pCurrentScreen == 11 )
{
v0 = uTextureID_save_up;
v1 = uTextureID_LS_saveU;
@@ -273,7 +273,7 @@
v3 = v8;
if ( !*v8 )
v3 = "1.mm7";
- sprintfex(pTmpBuf, "saves\\%s", v3);
+ sprintf(pTmpBuf, "saves\\%s", v3);
if ( _access(pTmpBuf, 0) || _access(pTmpBuf, 6) )
{
v6 = pGlobalTXT_LocalizationStrings[72];
@@ -309,13 +309,13 @@
uTextureID_AR_UP_DN = pIcons_LOD->LoadTexture("AR_UP_DN", TEXTURE_16BIT_PALETTE);
uTextureID_AR_DN_DN = pIcons_LOD->LoadTexture("AR_DN_DN", TEXTURE_16BIT_PALETTE);
pGUIWindow_CurrentMenu = GUIWindow::Create(0, 0, 640, 480, (WindowType)(WINDOW_Chest|WINDOW_MainMenu|0x2), 0, 0);
- pGUIWindow_CurrentMenu->CreateButton(21u, 198u, 0xBFu, 0x12u, 1, 0, 0xA5u, 0, 0, nullstring, 0);
- pGUIWindow_CurrentMenu->CreateButton(21u, 218u, 0xBFu, 0x12u, 1, 0, 0xA5u, 1u, 0, nullstring, 0);
- pGUIWindow_CurrentMenu->CreateButton(21u, 238u, 0xBFu, 0x12u, 1, 0, 0xA5u, 2u, 0, nullstring, 0);
- pGUIWindow_CurrentMenu->CreateButton(21u, 258u, 0xBFu, 0x12u, 1, 0, 0xA5u, 3u, 0, nullstring, 0);
- pGUIWindow_CurrentMenu->CreateButton(21u, 278u, 0xBFu, 0x12u, 1, 0, 0xA5u, 4u, 0, nullstring, 0);
- pGUIWindow_CurrentMenu->CreateButton(21u, 298u, 0xBFu, 0x12u, 1, 0, 0xA5u, 5u, 0, nullstring, 0);
- pGUIWindow_CurrentMenu->CreateButton(21u, 318u, 0xBFu, 0x12u, 1, 0, 0xA5u, 6u, 0, nullstring, 0);
+ pGUIWindow_CurrentMenu->CreateButton(21u, 198u, 0xBFu, 0x12u, 1, 0, 0xA5u, 0, 0, "", 0);
+ pGUIWindow_CurrentMenu->CreateButton(21u, 218u, 0xBFu, 0x12u, 1, 0, 0xA5u, 1u, 0, "", 0);
+ pGUIWindow_CurrentMenu->CreateButton(21u, 238u, 0xBFu, 0x12u, 1, 0, 0xA5u, 2u, 0, "", 0);
+ pGUIWindow_CurrentMenu->CreateButton(21u, 258u, 0xBFu, 0x12u, 1, 0, 0xA5u, 3u, 0, "", 0);
+ pGUIWindow_CurrentMenu->CreateButton(21u, 278u, 0xBFu, 0x12u, 1, 0, 0xA5u, 4u, 0, "", 0);
+ pGUIWindow_CurrentMenu->CreateButton(21u, 298u, 0xBFu, 0x12u, 1, 0, 0xA5u, 5u, 0, "", 0);
+ pGUIWindow_CurrentMenu->CreateButton(21u, 318u, 0xBFu, 0x12u, 1, 0, 0xA5u, 6u, 0, "", 0);
ptr_69BD64 = pGUIWindow_CurrentMenu->CreateButton(
0xF1u,
0x12Eu,
@@ -326,7 +326,7 @@
0xA4u,
0,
0,
- nullstring,
+ "",
(Texture *)(uTextureID_LS_ != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_LS_] : 0),
0);
ptr_69BD60 = pGUIWindow_CurrentMenu->CreateButton(
@@ -339,7 +339,7 @@
0xA6u,
0,
0,
- nullstring,
+ "",
(Texture *)(uTextureID_x_d != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_x_d] : 0),
0);
ptr_69BD5C = pGUIWindow_CurrentMenu->CreateButton(
@@ -352,7 +352,7 @@
0xA2u,
0,
0,
- nullstring,
+ "",
(Texture *)(uTextureID_AR_UP_DN != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_AR_UP_DN] : 0),
0);
v7 = pGUIWindow_CurrentMenu->CreateButton(
@@ -365,7 +365,7 @@
0xA3u,
0x22u,
0,
- nullstring,
+ "",
(Texture *)(uTextureID_AR_DN_DN != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_AR_DN_DN] : 0),
0);
v12 = -1;
diff -r c83d06692295 -r c0cf9393af64 Indoor.cpp
--- a/Indoor.cpp Mon Oct 22 09:20:49 2012 +0600
+++ b/Indoor.cpp Mon Oct 29 09:28:08 2012 +0600
@@ -48,7 +48,7 @@
stru337 stru_F81018;
stru167_wrap array_5118E8;
stru170_stru2 stru_F8A590;
-stru170 *pStru170; // idb
+stru170 *pStru170 = new stru170; // idb
stru141 stru_721530;
stru352 stru_F83B80[480];
@@ -69,7 +69,7 @@
//----- (0043F39E) --------------------------------------------------------
void __fastcall sub_43F39E(IndoorLocation_drawstru *_this)
{
- int *v1; // ecx@1
+ //int *v1; // ecx@1
//double v2; // ST30_8@3
//double v3; // ST30_8@6
//double v4; // ST28_8@6
@@ -82,13 +82,14 @@
//unsigned __int8 v11; // [sp+1Ch] [bp-4h]@3
signed int v12; // [sp+1Ch] [bp-4h]@8
- pBLVRenderParams->Set(_this);
- uNumMobileLightsApplied = 0;
+ pBLVRenderParams->Reset(_this);
+ pMobileLightsStack->uNumLightsActive = 0;
+ //uNumMobileLightsApplied = 0;
uNumDecorationsDrawnThisFrame = 0;
_unused000 = 0;
uNumSpritesDrawnThisFrame = 0;
uNumBillboardsToDraw = 0;
- if ( !byte_4D864C || !(BYTE1(pGame->uFlags) & 0x10) )
+ if ( !byte_4D864C || !(pGame->uFlags & 0x1000) )
{
//v2 = pParty->flt_TorchlightColorB + 6.7553994e15;
//v11 = LOBYTE(v2);
@@ -96,46 +97,46 @@
v5 = 800;
else
v5 = 800 * pParty->pPartyBuffs[16].uPower;
- LOBYTE(v1) = byte_4E94D0;
+ //LOBYTE(v1) = byte_4E94D0;
//v4 = pParty->flt_TorchlightColorR + 6.7553994e15;
//v3 = pParty->flt_TorchlightColorG + 6.7553994e15;
pMobileLightsStack->AddLight(
- SLOWORD(pBLVRenderParams->vPartyPos.x),
- SLOWORD(pBLVRenderParams->vPartyPos.y),
- SLOWORD(pBLVRenderParams->vPartyPos.z),
- SLOWORD(pBLVRenderParams->uRadius),
+ pBLVRenderParams->vPartyPos.x,
+ pBLVRenderParams->vPartyPos.y,
+ pBLVRenderParams->vPartyPos.z,
+ pBLVRenderParams->uPartySectorID,
v5,
floorf(pParty->flt_TorchlightColorR + 0.5f),
floorf(pParty->flt_TorchlightColorG + 0.5f),
floorf(pParty->flt_TorchlightColorB + 0.5f),
- v1);
+ byte_4E94D0);
}
PrepareWallsRenderList_BLV();
PrepareItemsRenderList_BLV();
PrepareActorRenderList_BLV();
v6 = 0;
- for ( i = 0; i < pStru170->field_53730; ++i )
+ for ( i = 0; i < pStru170->uNumVisibleNotEmptySectors; ++i )
{
- v7 = pStru170->pSectorIDs_toDrawDecorationsFrom[v6];
+ v7 = pStru170->pVisibleSectorIDs_toDrawDecorsActorsEtcFrom[v6];
v12 = 0;
- v8 = &pIndoor->pSectors[pStru170->pSectorIDs_toDrawDecorationsFrom[v6]];
+ v8 = &pIndoor->pSectors[pStru170->pVisibleSectorIDs_toDrawDecorsActorsEtcFrom[v6]];
v9 = v8->pDecorationIDs;
if ( v8->uNumDecorations > 0 )
{
do
- PrepareDecorationsRenderList_BLV((signed __int16)v9[v12++], v7);
+ PrepareDecorationsRenderList_BLV(v9[v12++], v7);
while ( v12 < v8->uNumDecorations );
}
v6 = i + 1;
}
MessWithBillboards_BLV();
- pGame->PushStru165s();
+ pGame->PrepareBloodsplats();
}
//----- (004407D9) --------------------------------------------------------
-int BLVRenderParams::Set(IndoorLocation_drawstru *a2)
+int BLVRenderParams::Reset(IndoorLocation_drawstru *a2)
{
IndoorLocation_drawstru *v2; // ebx@1
BLVRenderParams *v3; // esi@1
@@ -179,15 +180,15 @@
v6 = this->vPartyPos.x;
this->sPartyRotX = a2->sRotationX;
v7 = pIndoor->GetSector(v6, v5, v4);
- v3->uRadius = v7;
+ v3->uPartySectorID = v7;
if ( !v7 )
{
v8 = v3->vPartyPos.z;
v3->vPartyPos.x = pParty->vPosition.x;
- v9 = pParty->vPosition.z;
+ v9 = pParty->vPosition.y;
v10 = v3->vPartyPos.x;
- v3->vPartyPos.y = pParty->vPosition.z;
- v3->uRadius = pIndoor->GetSector(v10, v9, v8);
+ v3->vPartyPos.y = pParty->vPosition.y;
+ v3->uPartySectorID = pIndoor->GetSector(v10, v9, v8);
}
if ( pRenderer->pRenderD3D )
{
@@ -253,7 +254,7 @@
result = 0;
v3->field_8C = 0;
v3->field_84 = 0;
- v3->field_80 = 0;
+ v3->uNumFacesRenderedThisFrame = 0;
v3->field_88 = 0;
pBLVRenderParams->field_90 = 64;
pBLVRenderParams->field_94 = 6;
@@ -261,19 +262,17 @@
}
//----- (00440B44) --------------------------------------------------------
-void IndoorLocation::ExecDraw(char a1)
+void IndoorLocation::ExecDraw(bool bD3D)
{
- signed int i; // esi@2
int v2; // eax@3
IndoorCameraD3D_Vec4 *v3; // edx@4
- signed int j; // esi@8
unsigned int v5; // ecx@9
RenderVertexSoft *v6; // [sp-4h] [bp-8h]@4
- if ( a1 )
+ if (bD3D)
{
- pIndoor->GetSector(pParty->vPosition.x, pParty->vPosition.z, pParty->vPosition.y);
- for ( i = 0; i < (signed int)pStru170->uNumFaceIDs; ++i )
+ pIndoor->GetSector(pParty->vPosition.x, pParty->vPosition.y, pParty->vPosition.z);
+ for (uint i = 0; i < pStru170->uNumFaceIDs; ++i)
{
v2 = pStru170->pFaceIDs[2 * i + 1];
if ( pStru170->field_FA8[v2].std__vector_0007A8 == -1 )
@@ -286,16 +285,16 @@
v3 = pStru170->field_FA8[v2].std__vector_0007AC;
v6 = pStru170->field_FA8[v2].pVertices;
}
- IndoorLocation::ExecDraw_sub0(pStru170->pFaceIDs[2 * i], v3, 4u, v6);
+ IndoorLocation::ExecDraw_d3d(pStru170->pFaceIDs[2 * i], v3, 4, v6);
}
}
else
{
- for ( j = 0; j < (signed int)pStru170->uNumFaceIDs; ++j )
+ for (uint j = 0; j < pStru170->uNumFaceIDs; ++j )
{
v5 = pStru170->pFaceIDs[2 * j];
pBLVRenderParams->field_7C = &pStru170->field_FA8[pStru170->pFaceIDs[2 * j + 1]].field_C;
- IndoorLocation::ExecDraw_sub1(v5);
+ IndoorLocation::ExecDraw_sw(v5);
}
}
}
@@ -312,7 +311,7 @@
int v7; // [sp+Ch] [bp-4h]@8
sub_43F39E(_this);
- if ( pBLVRenderParams->uRadius )
+ if (pBLVRenderParams->uPartySectorID)
IndoorLocation::ExecDraw(pRenderer->pRenderD3D != 0);
pRenderer->DrawBillboardList_BLV();
if ( !pRenderer->pRenderD3D )
@@ -364,7 +363,7 @@
int v0; // eax@1
IndoorLocation_drawstru _this; // [sp+0h] [bp-4Ch]@5
int v2; // [sp+44h] [bp-8h]@5
- float v3; // [sp+48h] [bp-4h]@5
+ int v3; // [sp+48h] [bp-4h]@5
v0 = 0;
if ( viewparams->field_50_draw_debug_outlines )
@@ -377,9 +376,9 @@
- ((unsigned __int64)(stru_5C6E00->SinCos(pParty->sRotationY)
* (signed __int64)pParty->field_18) >> 16);
v2 = stru_5C6E00->SinCos(pParty->sRotationY - stru_5C6E00->uIntegerHalfPi);
- LODWORD(v3) = (unsigned __int64)(v2 * (signed __int64)pParty->field_18) >> 16;
+ v3 = (unsigned __int64)(v2 * (signed __int64)pParty->field_18) >> 16;
_this.field_1C_mb_fov = 65;
- _this.vPosition.y = pParty->vPosition.z - LODWORD(v3);
+ _this.vPosition.y = pParty->vPosition.y - v3;
_this.sRotationY = pParty->sRotationY;
_this.sRotationX = pParty->sRotationX;
_this.pRenderTarget = pRenderer->pTargetSurface;
@@ -388,7 +387,7 @@
_this.uViewportZ = pViewport->uScreenZ;
_this.uViewportW = pViewport->uScreenW;
_this.field_3C = pViewport->field_30;
- _this.vPosition.z = pParty->vPosition.y + pParty->sEyelevel;
+ _this.vPosition.z = pParty->vPosition.z + pParty->sEyelevel;
_this.uTargetWidth = 640;
_this.uTargetHeight = 480;
_this.pTargetZ = pRenderer->pActiveZBuffer;
@@ -412,7 +411,7 @@
this->pFacePlane.vNormal.z = (double)(a2->pFacePlane.vNormal.z & 0xFFFF) * 0.000015259022
+ (double)(a2->pFacePlane.vNormal.z >> 16);
this->pFacePlane.dist = (double)(a2->pFacePlane.dist & 0xFFFF) * 0.000015259022 + (double)(a2->pFacePlane.dist >> 16);
- this->uAttributes = a2->uFaceAttributes;
+ this->uAttributes = a2->uAttributes;
this->pBounding.x1 = a2->pBoundingBox.x1;
this->pBounding.y1 = a2->pBoundingBox.y1;
this->pBounding.z1 = a2->pBoundingBox.z1;
@@ -432,221 +431,175 @@
}
//----- (004B0A25) --------------------------------------------------------
-void IndoorLocation::ExecDraw_sub0(unsigned int uFaceID, IndoorCameraD3D_Vec4 *pVertices, unsigned int uNumVertices, RenderVertexSoft *a4)
+void IndoorLocation::ExecDraw_d3d(unsigned int uFaceID, IndoorCameraD3D_Vec4 *pVertices, unsigned int uNumVertices, RenderVertexSoft *a4)
{
- unsigned int v4; // esi@1
+ //unsigned int v4; // esi@1
char *v5; // eax@4
signed int v6; // ecx@4
char *v7; // eax@8
signed int v8; // ecx@8
- BLVFace *v9; // esi@13
- IndoorCameraD3D *v10; // edi@16
- int v11; // ebx@17
- Vec3_short_ *v12; // ecx@18
- char *v13; // edx@18
- int v14; // eax@19
- unsigned __int8 v15; // sf@19
- unsigned __int8 v16; // of@19
+ //BLVFace *v9; // esi@13
+ //IndoorCameraD3D *v10; // edi@16
+ //int v11; // ebx@17
+ //Vec3_short_ *v12; // ecx@18
+ //char *v13; // edx@18
+ //int v14; // eax@19
+ //unsigned __int8 v15; // sf@19
+ //unsigned __int8 v16; // of@19
int v17; // ebx@25
- double v18; // st7@27
- double v19; // st6@27
- double v20; // st5@27
- char v21; // dl@27
- unsigned int v22; // eax@44
+ //double v18; // st7@27
+ //double v19; // st6@27
+ //double v20; // st5@27
+ //char v21; // dl@27
+ //unsigned int v22; // eax@44
unsigned int v23; // eax@35
DWORD v24; // eax@37
int v25; // eax@38
- char *v26; // edi@38
+ //char *v26; // edi@38
IDirect3DTexture2 *v27; // eax@42
Texture *v28; // [sp+Ch] [bp-1Ch]@15
- int i; // [sp+10h] [bp-18h]@38
- LightmapBuilder *pStru4; // [sp+14h] [bp-14h]@16
- IndoorCameraD3D *v31; // [sp+18h] [bp-10h]@16
- IndoorCameraD3D_Vec4 *a7; // [sp+1Ch] [bp-Ch]@1
- unsigned int uFaceID_; // [sp+20h] [bp-8h]@1
+ //int i; // [sp+10h] [bp-18h]@38
+ //LightmapBuilder *pStru4; // [sp+14h] [bp-14h]@16
+ //IndoorCameraD3D *v31; // [sp+18h] [bp-10h]@16
+ //IndoorCameraD3D_Vec4 *a7; // [sp+1Ch] [bp-Ch]@1
+ //unsigned int uFaceID_; // [sp+20h] [bp-8h]@1
unsigned int uNumVerticesa; // [sp+24h] [bp-4h]@17
int a4a; // [sp+34h] [bp+Ch]@25
- unsigned int a4b; // [sp+34h] [bp+Ch]@38
-
- v4 = uFaceID;
- a7 = pVertices;
- uFaceID_ = uFaceID;
- if ( (uFaceID & 0x80000000u) == 0 && (signed int)uFaceID < (signed int)pIndoor->uNumFaces )
+ //unsigned int a4b; // [sp+34h] [bp+Ch]@38
+
+ //v4 = uFaceID;
+ //a7 = pVertices;
+ //uFaceID_ = uFaceID;
+ if (uFaceID >= pIndoor->uNumFaces)
+ return;
+
+ static RenderVertexSoft static_vertices_F7C228[64];
+ static RenderVertexSoft static_vertices_F7B628[64];
+ static stru154 stru_F7B60C; // idb
+
+ //v9 = &pIndoor->pFaces[uFaceID];
+ auto pFace = &pIndoor->pFaces[uFaceID];
+ if (pFace->uNumVertices < 3)
+ return;
+
+
+ if (pFace->Invisible())
+ return;
+
+ ++pBLVRenderParams->uNumFacesRenderedThisFrame;
+ pFace->uAttributes |= 0x80u;
+
+ if (!pFace->GetTexture())
+ return;
+
+ v28 = pFace->GetTexture();
+
+ if (!pGame->pIndoorCameraD3D->IsCulled(pFace))
{
-
- static RenderVertexSoft static_vertices_F7C228[64];
- static bool __init_flag1 = false;
- if (!__init_flag1)
- {
- __init_flag1 = true;
-
- for (uint i = 0; i < 64; ++i)
- static_vertices_F7C228[i].flt_2C = 0.0f;
- }
-
- static RenderVertexSoft static_vertices_F7B628[64];
- static bool __init_flag2 = false;
- if (!__init_flag2)
- {
- __init_flag2 = true;
-
- for (uint i = 0; i < 64; ++i)
- static_vertices_F7B628[i].flt_2C = 0.0f;
- }
-
- static stru154 stru_F7B60C; // idb
- /*static bool __init_flag3 = false;
- if (!__init_flag3)
+ uNumVerticesa = pFace->uNumVertices;
+ for (uint i = 0; i < pFace->uNumVertices; ++i)
{
- __init_flag3 = true;
-
- stru154::stru154(&stru_F7B60C);
- }*/
-
- v9 = &pIndoor->pFaces[v4];
- if ( v9->uNumVertices >= 3u )
+ static_vertices_F7C228[i].vWorldPosition.x = pIndoor->pVertices[pFace->pVertexIDs[i]].x;
+ static_vertices_F7C228[i].vWorldPosition.y = pIndoor->pVertices[pFace->pVertexIDs[i]].y;
+ static_vertices_F7C228[i].vWorldPosition.z = pIndoor->pVertices[pFace->pVertexIDs[i]].z;
+ static_vertices_F7C228[i].u = (signed short)pFace->pVertexUIDs[i];
+ static_vertices_F7C228[i].v = (signed short)pFace->pVertexUIDs[i];
+ }
+
+ if (!pVertices ||
+ (pGame->pStru9Instance->_498377(a4, 4u, pVertices, static_vertices_F7C228, &uNumVerticesa), uNumVerticesa) )
{
- if ( !(BYTE1(v9->uAttributes) & 0x20) )
- {
- ++pBLVRenderParams->field_80;
- LOBYTE(v9->uAttributes) |= 0x80u;
- v28 = v9->GetTexture();
- if ( v28 )
- {
- v10 = pGame->pIndoorCameraD3D;
- v31 = pGame->pIndoorCameraD3D;
- pStru4 = pGame->pLightmapBuilder;
- if ( !pGame->pIndoorCameraD3D->IsFaceFacedTowardsCamera(v9) )
- {
- v11 = 0;
- uNumVerticesa = v9->uNumVertices;
- if ( (signed int)uNumVerticesa > 0 )
- {
- v12 = pIndoor->pVertices;
- v13 = (char *)&static_vertices_F7C228[0].vWorldPosition.z;
- do
- {
- v14 = v11++;
- *((float *)v13 - 2) = (double)v12[v9->pVertexIDs[v14]].x;
- *((float *)v13 - 1) = (double)v12[v9->pVertexIDs[v14]].y;
- *(float *)v13 = (double)v12[v9->pVertexIDs[v14]].z;
- v13 += 48;
- v16 = __OFSUB__(v11, uNumVerticesa);
- v15 = ((v11 - uNumVerticesa) & 0x80000000u) != 0;
- *((float *)v13 - 5) = (double)v9->pVertexUIDs[v14];
- *((float *)v13 - 4) = (double)v9->pVertexVIDs[v14];
- }
- while ( v15 ^ v16 );
- v10 = v31;
- }
- if ( !a7
- || (pGame->pStru9Instance->_498377(a4, 4u, a7, static_vertices_F7C228, &uNumVerticesa), uNumVerticesa) )
- {
- if ( v10->_437285_prolly_colide_vertices_against_frustrum(
+ if (pGame->pIndoorCameraD3D->_437285_prolly_colide_vertices_against_frustrum(
static_vertices_F7C228,
&uNumVerticesa,
static_vertices_F7B628,
- v10->std__vector_000034_prolly_frustrum,
+ pGame->pIndoorCameraD3D->std__vector_000034_prolly_frustrum,
4,
- 0,
+ false,
0) != 1
|| uNumVerticesa )
- {
- a4a = SHIWORD(stru_F8AD28.field_2C);
- v17 = (248 - 8 * SHIWORD(stru_F8AD28.field_2C)) | (((248 - 8 * SHIWORD(stru_F8AD28.field_2C)) | ((248 - 8 * SHIWORD(stru_F8AD28.field_2C)) << 8)) << 8);
- sub_4B0E07(uFaceID_);
- pStru4->ApplyLights_IndoorFace(uFaceID_);
- pDecalBuilder->ApplyBloodsplatDecals_IndoorFace(uFaceID_);
- v31->_4364C5(static_vertices_F7B628, uNumVerticesa, array_507D30, &stru_F8AD28);
- v31->_436BB7_project_and_stuff(array_507D30, uNumVerticesa, 0);
- pStru4->std__vector_000004_size = 0;
- if ( stru_F8AD28.field_AC > 0 || pDecalBuilder->uNumDecals > 0 )
- {
- v18 = v9->pFacePlane.dist;
- v19 = v9->pFacePlane.vNormal.z;
- v20 = v9->pFacePlane.vNormal.y;
- v21 = v9->uPolygonType;
- stru_F7B60C.vNormal.x = v9->pFacePlane.vNormal.x;
- stru_F7B60C.field_14 = v21;
- stru_F7B60C.vNormal.y = v20;
- stru_F7B60C.vNormal.z = v19;
- stru_F7B60C.field_10 = v18;
- }
- if ( stru_F8AD28.field_AC > 0 && !(BYTE2(v9->uAttributes) & 0x40) )
- pStru4->ApplyLights(
+ {
+ a4a = SHIWORD(stru_F8AD28.uCurrentAmbientLightLevel);
+ v17 = (248 - 8 * SHIWORD(stru_F8AD28.uCurrentAmbientLightLevel)) | (((248 - 8 * SHIWORD(stru_F8AD28.uCurrentAmbientLightLevel)) | ((248 - 8 * SHIWORD(stru_F8AD28.uCurrentAmbientLightLevel)) << 8)) << 8);
+ sub_4B0E07(uFaceID);
+ pGame->pLightmapBuilder->ApplyLights_IndoorFace(uFaceID);
+ pDecalBuilder->ApplyBloodsplatDecals_IndoorFace(uFaceID);
+ pGame->pIndoorCameraD3D->ViewTransfrom_OffsetUV(static_vertices_F7B628, uNumVerticesa, array_507D30, &stru_F8AD28);
+ pGame->pIndoorCameraD3D->Project(array_507D30, uNumVerticesa, 0);
+ pGame->pLightmapBuilder->std__vector_000004_size = 0;
+ if (stru_F8AD28.uNumLightsApplied > 0 ||
+ pDecalBuilder->uNumDecals > 0)
+ {
+ stru_F7B60C.face_plane.vNormal.x = pFace->pFacePlane.vNormal.x;
+ stru_F7B60C.polygonType = pFace->uPolygonType;
+ stru_F7B60C.face_plane.vNormal.y = pFace->pFacePlane.vNormal.y;
+ stru_F7B60C.face_plane.vNormal.z = pFace->pFacePlane.vNormal.z;
+ stru_F7B60C.face_plane.dist = pFace->pFacePlane.dist;
+ }
+
+ if (stru_F8AD28.uNumLightsApplied > 0 &&
+ !(pFace->uAttributes & 0x400000))
+ pGame->pLightmapBuilder->ApplyLights(
&stru_F8AD28,
&stru_F7B60C,
uNumVerticesa,
array_507D30,
- *(float *)&a7,
+ pVertices,
0);
- if ( pDecalBuilder->uNumDecals > 0 )
- pDecalBuilder->ApplyDecals(
+
+ if (pDecalBuilder->uNumDecals > 0)
+ pDecalBuilder->ApplyDecals(
a4a,
1,
&stru_F7B60C,
uNumVerticesa,
array_507D30,
- (int)a7,
+ pVertices,
0,
- v9->uSectorID);
- if ( v9->uAttributes & 0x10 && v9->uBitmapID == pRenderer->field_1036AC_bitmapid )
- {
- v23 = pRenderer->pHDWaterBitmapIDs[pRenderer->field_1036A8_bitmapid];
- goto LABEL_42;
- }
- if ( v9->uAttributes & 0x10 )
- {
- v24 = GetTickCount() >> 2;
- if ( (signed int)uNumVerticesa > 0 )
- {
- v25 = v24 - stru_5C6E00->uIntegerHalfPi;
- v26 = (char *)&array_507D30[0].v;
- a4b = uNumVerticesa;
- for ( i = v25; ; v25 = i )
- {
- *(float *)v26 = (double)(pBitmaps_LOD->pTextures[v9->uBitmapID].uHeightMinus1 & (unsigned int)(stru_5C6E00->SinCos(v25) >> 8))
- + *(float *)v26;
- v26 += 48;
- --a4b;
- if ( !a4b )
- break;
- }
- }
- }
- else
- {
- v22 = v9->uAttributes;
- if ( BYTE1(v22) & 0x40 )
- {
- v23 = pTextureFrameTable->GetFrameTexture(
- v9->uBitmapID,
+ pFace->uSectorID);
+
+ if (pFace->Animated() &&
+ pFace->uBitmapID == pRenderer->field_1036AC_bitmapid )
+ {
+ __debugbreak();
+ v23 = pRenderer->pHDWaterBitmapIDs[pRenderer->field_1036A8_bitmapid];
+ goto LABEL_42;
+ }
+
+ if (pFace->Animated())
+ {
+ v24 = GetTickCount() / 4;
+ v25 = v24 - stru_5C6E00->uIntegerHalfPi;
+
+ for (uint i = 0; i < uNumVerticesa; ++i)
+ array_507D30[i].v += (double)(pBitmaps_LOD->pTextures[pFace->uBitmapID].uHeightMinus1 & (unsigned int)(stru_5C6E00->SinCos(v25) >> 8));
+
+ v23 = pFace->uBitmapID;
+ goto LABEL_42;
+ }
+ else
+ {
+ if (pFace->uAttributes & 0x4000)
+ {
+ v23 = pTextureFrameTable->GetFrameTexture(
+ pFace->uBitmapID,
pBLVRenderParams->field_0_timer_);
LABEL_42:
v27 = pBitmaps_LOD->pHardwareTextures[v23];
- if ( BYTE2(v9->uAttributes) & 0x40 )
- sub_479A53(uNumVerticesa, uFaceID_);
+ if (pFace->uAttributes & 0x400000)
+ _479A53_draw_some_blv_poly(uNumVerticesa, uFaceID);
else
- pRenderer->DrawIndoorPolygon(uNumVerticesa, v9, v27, v28, 8 * uFaceID_ | 6, v17, 0);
+ pRenderer->DrawIndoorPolygon(uNumVerticesa, pFace, v27, v28, 8 * uFaceID | 6, v17, 0);
return;
- }
- }
- v23 = v9->uBitmapID;
- goto LABEL_42;
- }
- }
}
}
}
}
}
}
-// F7CE28: using guessed type char static_init_flag__F7C228_bit1__F7B628_bit2__F7B60C_bit3;
-
-
//----- (004AFF79) --------------------------------------------------------
-void IndoorLocation::ExecDraw_sub1(unsigned int uFaceID)
+void IndoorLocation::ExecDraw_sw(unsigned int uFaceID)
{
unsigned int v1; // ebx@1
BLVFace *v2; // esi@3
@@ -803,7 +756,7 @@
if ( !(v3 & 0x10) || (sub_4AD504(uFaceID), pRenderer->pRenderD3D) )
{
v4 = v2->GetTexture();
- ++pBLVRenderParams->field_80;
+ ++pBLVRenderParams->uNumFacesRenderedThisFrame;
v5 = v4;
v108 = v4;
if ( v4 )
@@ -822,7 +775,7 @@
{
if ( v2->uPolygonType == 1 )
{
- for ( i = 0; i < stru_F8AD28.field_AC; stru_F8AD28._blv_lights_ys[v18] = v20 )
+ for ( i = 0; i < stru_F8AD28.uNumLightsApplied; stru_F8AD28._blv_lights_ys[v18] = v20 )
{
v18 = i;
v120 = stru_F8AD28._blv_lights_xs[i];
@@ -846,7 +799,7 @@
{
LABEL_16:
a2 = 0;
- if ( stru_F8AD28.field_AC > 0 )
+ if ( stru_F8AD28.uNumLightsApplied > 0 )
{
do
{
@@ -883,7 +836,7 @@
stru_F8AD28._blv_lights_ys[v8] += v128;
++a2;
}
- while ( a2 < stru_F8AD28.field_AC );
+ while ( a2 < stru_F8AD28.uNumLightsApplied );
v2 = v103;
}
goto LABEL_24;
@@ -895,7 +848,7 @@
goto LABEL_16;
}
}
- for ( j = 0; j < stru_F8AD28.field_AC; *(int *)v15 = v16 )
+ for ( j = 0; j < stru_F8AD28.uNumLightsApplied; *(int *)v15 = v16 )
{
v14 = v128;
stru_F8AD28._blv_lights_xs[j] += v126;
@@ -1306,12 +1259,12 @@
//----- (004B0EA8) --------------------------------------------------------
-void stru170::_4B0EA8(signed int a2, unsigned int uFaceID)
+void stru170::PrepareFaceRenderList_d3d(int a2, unsigned int uFaceID)
{
- unsigned int v3; // edx@1
- stru170 *v4; // ebx@1
- BLVFace *v5; // eax@1
- int v6; // ecx@2
+ //unsigned int v3; // edx@1
+ //stru170 *v4; // ebx@1
+ //BLVFace *v5; // eax@1
+ //int v6; // ecx@2
unsigned __int16 v7; // ax@11
Vec3_short_ *v8; // esi@15
int v9; // edx@15
@@ -1321,79 +1274,83 @@
signed int v13; // esi@19
signed int v14; // edx@20
int v15; // edx@24
- int v16; // esi@29
- BLVFace *v17; // edi@34
+ //int v16; // esi@29
+ //BLVFace *v17; // edi@34
unsigned __int16 v18; // ax@34
char *v19; // eax@38
signed int v20; // ecx@38
char *v21; // eax@42
signed int v22; // ecx@42
- signed int v23; // edx@45
- char *v24; // ecx@46
- int v25; // eax@47
- Vec3_short_ *v26; // eax@47
- double v27; // st7@47
- signed int v28; // ST28_4@47
+ //signed int v23; // edx@45
+ //char *v24; // ecx@46
+ //int v25; // eax@47
+ //Vec3_short_ *v26; // eax@47
+ //double v27; // st7@47
+ //signed int v28; // ST28_4@47
char v29; // al@48
signed int v30; // eax@51
int v31; // eax@52
- unsigned int v32; // eax@55
- __int16 v33; // cx@56
+ //unsigned int v32; // eax@55
+ //__int16 v33; // cx@56
signed int v34; // [sp+Ch] [bp-14h]@18
- int a0; // [sp+14h] [bp-Ch]@2
- IndoorCameraD3D *a0a; // [sp+14h] [bp-Ch]@36
+ //int a0; // [sp+14h] [bp-Ch]@2
+ //IndoorCameraD3D *a0a; // [sp+14h] [bp-Ch]@36
signed int v37; // [sp+18h] [bp-8h]@19
- stru10 *v38; // [sp+18h] [bp-8h]@36
- BLVFace *v39; // [sp+1Ch] [bp-4h]@1
-
- v3 = uFaceID;
- v4 = this;
- v5 = &pIndoor->pFaces[uFaceID];
- this->field_FA8[this->std__vector_000FA8].std__vector_0007A8 = -1;
- v39 = v5;
- if ( v5->uAttributes & 1 )
+ //stru10 *v38; // [sp+18h] [bp-8h]@36
+ //BLVFace *v39; // [sp+1Ch] [bp-4h]@1
+
+ //v3 = uFaceID;
+ //v4 = this;
+ //v5 = &pIndoor->pFaces[uFaceID];
+ field_FA8[std__vector_000FA8].std__vector_0007A8 = -1;
+ //v39 = &pIndoor->pFaces[uFaceID];
+
+ auto pFace = &pIndoor->pFaces[uFaceID];
+
+ if (pFace->uAttributes & 1)
{
- v6 = (int)((char *)this + 2252 * a2);
- a0 = v6;
- if ( v3 == *(short *)(v6 + 5964) ) // stru170_stru0[a2]::uFaceID
+ auto p = &field_FA8[a2];
+ //v6 = (int)((char *)this + 2252 * a2);
+ //a0 = v6;
+ if (p->uFaceID == uFaceID)
return;
- if ( !a2
- && pBLVRenderParams->vPartyPos.x >= v5->pBounding.x1 - 16
- && pBLVRenderParams->vPartyPos.x <= v5->pBounding.x2 + 16
- && pBLVRenderParams->vPartyPos.y >= v5->pBounding.y1 - 16
- && pBLVRenderParams->vPartyPos.y <= v5->pBounding.y2 + 16
- && pBLVRenderParams->vPartyPos.z >= v5->pBounding.z1 - 16
- && pBLVRenderParams->vPartyPos.z <= v5->pBounding.z2 + 16 )
+ if (!a2 &&
+ pBLVRenderParams->vPartyPos.x >= pFace->pBounding.x1 - 16 &&
+ pBLVRenderParams->vPartyPos.x <= pFace->pBounding.x2 + 16 &&
+ pBLVRenderParams->vPartyPos.y >= pFace->pBounding.y1 - 16 &&
+ pBLVRenderParams->vPartyPos.y <= pFace->pBounding.y2 + 16 &&
+ pBLVRenderParams->vPartyPos.z >= pFace->pBounding.z1 - 16 &&
+ pBLVRenderParams->vPartyPos.z <= pFace->pBounding.z2 + 16 )
{
- if ( abs(v5->pFacePlane_old.dist + pBLVRenderParams->vPartyPos.x * v5->pFacePlane_old.vNormal.x
- + pBLVRenderParams->vPartyPos.y * v5->pFacePlane_old.vNormal.y
- + pBLVRenderParams->vPartyPos.z * v5->pFacePlane_old.vNormal.z) <= 589824 )
+ if ( abs(pFace->pFacePlane_old.dist + pBLVRenderParams->vPartyPos.x * pFace->pFacePlane_old.vNormal.x
+ + pBLVRenderParams->vPartyPos.y * pFace->pFacePlane_old.vNormal.y
+ + pBLVRenderParams->vPartyPos.z * pFace->pFacePlane_old.vNormal.z) <= 589824 )
{
- v7 = v39->uSectorID;
- if ( v4->field_FA8[0].uSectorID == v7 )
- v7 = v39->uBackSectorID;
- v4->field_FA8[v4->std__vector_000FA8].uSectorID = v7;
- v4->field_FA8[v4->std__vector_000FA8].uFaceID = uFaceID;
- v4->field_FA8[v4->std__vector_000FA8].uViewportX = LOWORD(pBLVRenderParams->uViewportX);
- v4->field_FA8[v4->std__vector_000FA8].uViewportZ = LOWORD(pBLVRenderParams->uViewportZ);
- v4->field_FA8[v4->std__vector_000FA8].uViewportY = LOWORD(pBLVRenderParams->uViewportY);
- v4->field_FA8[v4->std__vector_000FA8].uViewportW = LOWORD(pBLVRenderParams->uViewportW);
- v4->field_FA8[v4->std__vector_000FA8++].field_C._43F9E1(
- SLOWORD(pBLVRenderParams->uViewportX),
+ v7 = pFace->uSectorID;
+ if ( field_FA8[0].uSectorID == v7 )
+ v7 = pFace->uBackSectorID;
+ field_FA8[std__vector_000FA8].uSectorID = v7;
+ field_FA8[std__vector_000FA8].uFaceID = uFaceID;
+ field_FA8[std__vector_000FA8].uViewportX = pBLVRenderParams->uViewportX;
+ field_FA8[std__vector_000FA8].uViewportZ = pBLVRenderParams->uViewportZ;
+ field_FA8[std__vector_000FA8].uViewportY = pBLVRenderParams->uViewportY;
+ field_FA8[std__vector_000FA8].uViewportW = pBLVRenderParams->uViewportW;
+ field_FA8[std__vector_000FA8++].field_C._43F9E1(
+ pBLVRenderParams->uViewportX,
pBLVRenderParams->uViewportY,
- SLOWORD(pBLVRenderParams->uViewportZ),
+ pBLVRenderParams->uViewportZ,
pBLVRenderParams->uViewportW);
- sub_440639(v4->std__vector_000FA8 - 1);
+ sub_440639(std__vector_000FA8 - 1);
return;
}
- v5 = v39;
- v6 = a0;
+ //v5 = v39;
+ //v6 = a0;
}
- v8 = &pIndoor->pVertices[*v5->pVertexIDs];
- v9 = v5->pFacePlane_old.vNormal.x * ((signed __int16)*(int *)&v8->x - pBLVRenderParams->vPartyPos.x)
- + v5->pFacePlane_old.vNormal.y * ((signed __int16)(*(int *)&v8->x >> 16) - pBLVRenderParams->vPartyPos.y)
- + v5->pFacePlane_old.vNormal.z * (v8->z - pBLVRenderParams->vPartyPos.z);
- if ( *(short *)(v6 + 4008) != v5->uSectorID )// stru170_stru0[a2]::uSectorID
+ v8 = &pIndoor->pVertices[pFace->pVertexIDs[0]];
+ v9 = pFace->pFacePlane_old.vNormal.x * (v8->x - pBLVRenderParams->vPartyPos.x)
+ + pFace->pFacePlane_old.vNormal.y * (v8->y - pBLVRenderParams->vPartyPos.y)
+ + pFace->pFacePlane_old.vNormal.z * (v8->z - pBLVRenderParams->vPartyPos.z);
+ if (p->uSectorID != pFace->uSectorID)
v9 = -v9;
if ( v9 < 0 )
{
@@ -1425,122 +1382,102 @@
}
while ( v13 < v34 );
}
- v16 = a0;
- if ( v11 >= *(short *)(a0 + 4010) // stru170_stru0[a2]::uViewportX
- && a2 <= *(short *)(a0 + 4014) // stru170_stru0[a2]::uViewportZ
- && v12 >= *(short *)(a0 + 4012) // stru170_stru0[a2]::uViewportY
- && v37 <= *(short *)(a0 + 4016) // stru170_stru0[a2]::uViewportW
- && sub_424829(v10, &v4->field_FA8[v4->std__vector_000FA8].field_C, (stru170_stru2 *)(a0 + 4020), uFaceID) )
+ //v16 = a0;
+ if (v11 >= p->uViewportX &&
+ a2 <= p->uViewportZ &&
+ v12 >= p->uViewportY &&
+ v37 <= p->uViewportW &&
+ sub_424829(v10, &field_FA8[std__vector_000FA8].field_C, &p->field_C, uFaceID))
{
- v17 = v39;
- v18 = v39->uSectorID;
- if ( *(short *)(a0 + 4008) == v18 )
- v18 = v39->uBackSectorID;
- v4->field_FA8[v4->std__vector_000FA8].uSectorID = v18;
- v4->field_FA8[v4->std__vector_000FA8].uFaceID = uFaceID;
- v4->field_FA8[v4->std__vector_000FA8].uViewportX = LOWORD(pBLVRenderParams->uViewportX);
- v4->field_FA8[v4->std__vector_000FA8].uViewportZ = LOWORD(pBLVRenderParams->uViewportZ);
- v4->field_FA8[v4->std__vector_000FA8].uViewportY = LOWORD(pBLVRenderParams->uViewportY);
- v4->field_FA8[v4->std__vector_000FA8].uViewportW = LOWORD(pBLVRenderParams->uViewportW);
- v38 = pGame->pStru10Instance;
- a0a = pGame->pIndoorCameraD3D;
- if ( *(int *)(v16 + 5968) == -1 ) // [a2]::std__vector_0007A8
+ //v17 = v39;
+ v18 = pFace->uSectorID;
+ if (p->uSectorID == v18 )
+ v18 = pFace->uBackSectorID;
+ field_FA8[std__vector_000FA8].uSectorID = v18;
+ field_FA8[std__vector_000FA8].uFaceID = uFaceID;
+ field_FA8[std__vector_000FA8].uViewportX = pBLVRenderParams->uViewportX;
+ field_FA8[std__vector_000FA8].uViewportZ = pBLVRenderParams->uViewportZ;
+ field_FA8[std__vector_000FA8].uViewportY = pBLVRenderParams->uViewportY;
+ field_FA8[std__vector_000FA8].uViewportW = pBLVRenderParams->uViewportW;
+ //v38 = pGame->pStru10Instance;
+ //a0a = pGame->pIndoorCameraD3D;
+ if (p->std__vector_0007A8 == -1 )
{
- v29 = pGame->pStru10Instance->_49C681(
- v39,
- v4->field_FA8[v4->std__vector_000FA8].std__vector_0007AC,
- v4->field_FA8[v4->std__vector_000FA8].pVertices);
+ v29 = pGame->pStru10Instance->_49C681_DrawDebugStuff(
+ pFace,
+ field_FA8[std__vector_000FA8].std__vector_0007AC,
+ field_FA8[std__vector_000FA8].pVertices);
}
else
{
-
- static RenderVertexSoft static_sub_4B0EA8_stru_F7AA08[64];
- static bool __init_flag1 = false;
- if (!__init_flag1)
+ static RenderVertexSoft static_subPrepareFaceRenderList_d3d_stru_F7AA08[64];
+ static RenderVertexSoft static_subPrepareFaceRenderList_d3d_stru_F79E08[64];
+
+ //v23 = 0;
+ a2 = pFace->uNumVertices;
+ for (uint k = 0; k < pFace->uNumVertices; ++k)
{
- __init_flag1 = true;
-
- for (uint i = 0; i < 64; ++i)
- static_sub_4B0EA8_stru_F7AA08[i].flt_2C = 0.0f;
- }
-
- static RenderVertexSoft static_sub_4B0EA8_stru_F79E08[64];
- static bool __init_flag2 = false;
- if (!__init_flag2)
- {
- __init_flag2 = true;
-
- for (uint i = 0; i < 64; ++i)
- static_sub_4B0EA8_stru_F79E08[i].flt_2C = 0.0f;
+ //v24 = (char *)&static_subPrepareFaceRenderList_d3d_stru_F7AA08[0].vWorldPosition.z;
+ //do
+ //{
+ //v25 = pFace->pVertexIDs[k];
+ //v26 = &pIndoor->pVertices[pFace->pVertexIDs[k]];
+ auto pVertex = &pIndoor->pVertices[pFace->pVertexIDs[k]];
+ //v27 = (double)v26->z;
+ //v28 = v26->y;
+ //v17 = v39;
+ static_subPrepareFaceRenderList_d3d_stru_F7AA08[k].vWorldPosition.x = pVertex->x;
+ static_subPrepareFaceRenderList_d3d_stru_F7AA08[k].vWorldPosition.y = pVertex->y;
+ static_subPrepareFaceRenderList_d3d_stru_F7AA08[k].vWorldPosition.z = pVertex->z;
+ //v24 += 48;
+ //}
+ //while ( v23 < a2 );
}
-
- v23 = 0;
- a2 = v39->uNumVertices;
- if ( a2 > 0 )
- {
- v24 = (char *)&static_sub_4B0EA8_stru_F7AA08[0].vWorldPosition.z;
- do
- {
- v25 = v17->pVertexIDs[v23++];
- v26 = &pIndoor->pVertices[v25];
- v27 = (double)v26->z;
- v28 = v26->y;
- v17 = v39;
- *((float *)v24 - 2) = (double)v26->x;
- *((float *)v24 - 1) = (double)v28;
- *(float *)v24 = v27;
- v24 += 48;
- }
- while ( v23 < a2 );
- }
- a0a->_437285_prolly_colide_vertices_against_frustrum(
- static_sub_4B0EA8_stru_F7AA08,
+ pGame->pIndoorCameraD3D->_437285_prolly_colide_vertices_against_frustrum(
+ static_subPrepareFaceRenderList_d3d_stru_F7AA08,
(unsigned int *)&a2,
- static_sub_4B0EA8_stru_F79E08,
- (IndoorCameraD3D_Vec4 *)(v16 + 5972),
+ static_subPrepareFaceRenderList_d3d_stru_F79E08,
+ p->std__vector_0007AC,
4,
0,
0);
- v29 = v38->_49C5DA(
- v17,
- static_sub_4B0EA8_stru_F79E08,
+ v29 = pGame->pStru10Instance->_49C5DA(
+ pFace,
+ static_subPrepareFaceRenderList_d3d_stru_F79E08,
&a2,
- v4->field_FA8[v4->std__vector_000FA8].std__vector_0007AC,
- v4->field_FA8[v4->std__vector_000FA8].pVertices);
+ field_FA8[std__vector_000FA8].std__vector_0007AC,
+ field_FA8[std__vector_000FA8].pVertices);
}
if ( v29 )
{
- v4->field_FA8[v4->std__vector_000FA8].std__vector_0007A8 = uFaceID;
- v30 = v4->std__vector_000FA8;
+ field_FA8[std__vector_000FA8].std__vector_0007A8 = uFaceID;
+ v30 = std__vector_000FA8;
if ( v30 < 150 )
{
v31 = v30 + 1;
- v4->std__vector_000FA8 = v31;
+ std__vector_000FA8 = v31;
sub_440639(v31 - 1);
}
}
if ( pBLVRenderParams->uFlags & 1 )
- a0a->PrepareAndDrawDebugOutline(v17, 0x1E1EFFu);
+ pGame->pIndoorCameraD3D->PrepareAndDrawDebugOutline(pFace, 0x1E1EFF);
}
}
}
}
else
{
- v32 = this->uNumFaceIDs;
- if ( (signed int)this->uNumFaceIDs < 1000 )
+ if (uNumFaceIDs < 1000 )
{
- v33 = a2;
- v4->pFaceIDs[2 * v32] = v3;
- v4->pFaceIDs[2 * v4->uNumFaceIDs++ + 1] = v33;
+ pFaceIDs[2 * uNumFaceIDs] = uFaceID;
+ pFaceIDs[2 * uNumFaceIDs++ + 1] = a2;
}
}
}
-// F7B608: using guessed type char static_sub_4B0EA8_byte_F7B608_init_flags;
//----- (004AFB86) --------------------------------------------------------
-void stru170::_4AFB86(int a2, unsigned int uFaceID)
+void stru170::PrepareFaceRenderList_sw(int a2, unsigned int uFaceID)
{
stru170 *v3; // ebx@1
BLVFace *v4; // eax@1
@@ -1775,7 +1712,7 @@
pAllocator->FreeChunk(v1->pLights);
pAllocator->FreeChunk(v1->pDoors);
pAllocator->FreeChunk(v1->pNodes);
- pAllocator->FreeChunk(v1->pMapVertices);
+ pAllocator->FreeChunk(v1->pMapOutlines);
v1->pVertices = 0;
v1->pFaces = 0;
v1->pFaceExtras = 0;
@@ -1783,7 +1720,7 @@
v1->pLights = 0;
v1->pDoors = 0;
v1->pNodes = 0;
- v1->pMapVertices = 0;
+ v1->pMapOutlines = 0;
v1->bLoaded = 0;
}
@@ -1829,11 +1766,11 @@
v13 = v1->pNodes;
v1->pDoors = (BLVDoor *)v12;
v14 = pAllocator->AllocNamedChunk(v13, 0x9C40u, "L.BSP");
- v15 = v1->pMapVertices;
+ v15 = v1->pMapOutlines;
v1->pNodes = (BSPNode *)v14;
v16 = pAllocator->AllocNamedChunk(v15, 0x14824u, "L.Map");
v17 = v1->pVertices;
- v1->pMapVertices = (BLVMapVertices *)v16;
+ v1->pMapOutlines = (BLVMapOutlines *)v16;
if ( v17 && v1->pFaces && v1->pFaceExtras && v1->pSectors && v1->pLights && v1->pDoors && v1->pNodes && v16 )
{
memset(v17, 90000, 0);
@@ -1843,7 +1780,7 @@
memset(v1->pLights, 6400, 0);
memset(v1->pDoors, 16000, 0);
memset(v1->pNodes, 40000, 0);
- memset(v1->pMapVertices, 84004, 0);
+ memset(v1->pMapOutlines, 84004, 0);
result = 1;
}
else
@@ -2503,7 +2440,7 @@
fseek(v7, v234, 0);
fread(&uLastVisitDay, 1u, 0x38u, v7);
fseek(v7, v223, 0);
- v80 = (void **)&pMapVertices;
+ v80 = (void **)&pMapOutlines;
fread(*v80, 4u, 1u, v7);
fread((char *)*v80 + 4, 0xCu, *(int *)*v80, v7);
fclose(v7);
@@ -2592,6 +2529,7 @@
assert(sizeof(LayingItem) == 112);
assert(sizeof(Chest) == 5324);
assert(sizeof(stru123) == 0xC8);
+ assert(sizeof(BLVMapOutline) == 12);
bLoaded = true;
@@ -2630,10 +2568,10 @@
pFace->pZInterceptDisplacements = ptr_2AC + j;
j += pFace->uNumVertices + 1;
- pFace->pVertexUIDs = ptr_2AC + j;
+ pFace->pVertexUIDs = (__int16 *)(ptr_2AC + j);
j += pFace->uNumVertices + 1;
- pFace->pVertexVIDs = ptr_2AC + j;
+ pFace->pVertexVIDs = (__int16 *)(ptr_2AC + j);
j += pFace->uNumVertices + 1;
/*v93 = &pFaces[v92];
@@ -2747,7 +2685,7 @@
auto pSector = pSectors + i;
pSector->pFloors = ptr_0002B0_sector_rdata + j;
- j += pSector->field_4;
+ j += pSector->uNumFloors;
pSector->pWalls = ptr_0002B0_sector_rdata + j;
j += pSector->field_C;
@@ -2829,7 +2767,7 @@
for (uint i = 0, j = 0; i < uNumSectors; ++i)
{
- pSectors->pLights = (BLVLightMM7 *)(ptr_0002B8_sector_lrdata + j);
+ pSectors->pLights = (unsigned __int16 *)(ptr_0002B8_sector_lrdata + j);
j += pSectors->uNumLights;
}
@@ -2877,10 +2815,10 @@
pGameLoadingUI_ProgressBar->Progress();
//v201 = (const char *)v148;
- //v200 = (size_t)pMapVertices;
- memcpy(&pMapVertices->uNumVertices, pData, 4);
- memcpy(pMapVertices->pVertices, pData + 4, pMapVertices->uNumVertices * sizeof(Vec3_int_));
- //v149 = pMapVertices;
+ //v200 = (size_t)pMapOutlines;
+ memcpy(&pMapOutlines->uNumOutlines, pData, 4);
+ memcpy(pMapOutlines->pOutlines, pData + 4, pMapOutlines->uNumOutlines * sizeof(BLVMapOutline));
+ //v149 = pMapOutlines;
//v199 = 12 * *v149;
//memcpy(v149 + 1, (const void *)(v148 + 4), v199);
free(pRawBLV);
@@ -3001,9 +2939,9 @@
if ( *(int *)pDest )
memcpy(_visible_outlines, v203, 875);
- for (uint i = 0; i < pMapVertices->uNumVertices; ++i)
+ for (uint i = 0; i < pMapOutlines->uNumOutlines; ++i)
{
- auto pVertex = pMapVertices->pVertices + i;
+ auto pVertex = pMapOutlines->pOutlines + i;
if ((unsigned __int8)(1 << (7 - i % 8)) & _visible_outlines[i / 8])
pVertex->uFlags |= 1;
}
@@ -3218,36 +3156,36 @@
int IndoorLocation::GetSector(int sX, int sY, int sZ)
{
int v4; // esi@1
- unsigned __int8 v5; // zf@1
- unsigned __int8 v6; // sf@1
- unsigned __int8 v7; // of@1
- BLVSector *v8; // eax@3
- int v9; // edi@9
- int v10; // eax@9
- int v11; // edx@9
- int v12; // eax@10
- unsigned __int16 v13; // ax@12
- int v14; // edi@14
- BLVFace *v15; // eax@14
- BLVFace *v16; // edi@14
- PolygonType v17; // al@14
- unsigned __int16 *pVertexIDs; // esi@16
- Vec3_short_ *v19; // eax@16
- int v20; // edx@16
- unsigned __int16 *v21; // esi@17
- int v22; // edi@19
- int v23; // edi@20
- Vec3_short_ *v24; // edx@20
+ //unsigned __int8 v5; // zf@1
+ //unsigned __int8 v6; // sf@1
+ //unsigned __int8 v7; // of@1
+ //BLVSector *v8; // eax@3
+ //int v9; // edi@9
+ //int v10; // eax@9
+ //int v11; // edx@9
+ //int v12; // eax@10
+ //unsigned __int16 v13; // ax@12
+ //int v14; // edi@14
+ //BLVFace *v15; // eax@14
+ //BLVFace *v16; // edi@14
+ //PolygonType v17; // al@14
+ //unsigned __int16 *pVertexIDs; // esi@16
+ //Vec3_short_ *v19; // eax@16
+ //int v20; // edx@16
+ //unsigned __int16 *v21; // esi@17
+ //int v22; // edi@19
+ //int v23; // edi@20
+ //Vec3_short_ *v24; // edx@20
signed int v25; // edx@21
int v26; // ebx@23
- int v27; // edx@26
- signed __int64 v28; // qtt@26
- Vec3_short_ *v29; // eax@26
- Vec3_short_ *v30; // edx@26
- int v31; // edx@26
+ //int v27; // edx@26
+ //signed __int64 v28; // qtt@26
+ ///Vec3_short_ *v29; // eax@26
+ //Vec3_short_ *v30; // edx@26
+ //int v31; // edx@26
signed int v32; // edi@27
signed __int64 v33; // qtt@27
- Vec3_short_ *v34; // edx@27
+ //Vec3_short_ *v34; // edx@27
int v35; // edx@32
int v37; // edi@38
int v38; // ebx@40
@@ -3256,162 +3194,157 @@
PolygonType v41; // dl@42
int v42; // edx@43
int v43[50]; // [sp+Ch] [bp-108h]@1
- int v44; // [sp+D4h] [bp-40h]@9
- int v45; // [sp+D8h] [bp-3Ch]@14
- int v46; // [sp+DCh] [bp-38h]@14
- int v47; // [sp+E0h] [bp-34h]@19
- int v48; // [sp+E4h] [bp-30h]@9
- Vec3_short_ *v49; // [sp+E8h] [bp-2Ch]@19
+ //int v44; // [sp+D4h] [bp-40h]@9
+ //int v45; // [sp+D8h] [bp-3Ch]@14
+ //int v46; // [sp+DCh] [bp-38h]@14
+ //int v47; // [sp+E0h] [bp-34h]@19
+ //int v48; // [sp+E4h] [bp-30h]@9
+ //Vec3_short_ *v49; // [sp+E8h] [bp-2Ch]@19
bool v50; // [sp+ECh] [bp-28h]@19
int v51; // [sp+F0h] [bp-24h]@9
- unsigned int v52; // [sp+F4h] [bp-20h]@2
+ //unsigned int v52; // [sp+F4h] [bp-20h]@2
int v53; // [sp+F8h] [bp-1Ch]@10
int v54; // [sp+FCh] [bp-18h]@16
int v55; // [sp+100h] [bp-14h]@1
int v56; // [sp+104h] [bp-10h]@1
int v57; // [sp+108h] [bp-Ch]@16
- Vec3_short_ *v58; // [sp+10Ch] [bp-8h]@20
+ //Vec3_short_ *v58; // [sp+10Ch] [bp-8h]@20
int v59; // [sp+110h] [bp-4h]@16
v4 = 0;
- v7 = __OFSUB__(this->uNumSectors, 1);
- v5 = this->uNumSectors == 1;
- v6 = this->uNumSectors - 1 < 0;
+ //v7 = __OFSUB__(this->uNumSectors, 1);
+ //v5 = this->uNumSectors == 1;
+ //v6 = this->uNumSectors - 1 < 0;
v55 = 0;
v43[0] = 0;
- v56 = 1;
- if ( (unsigned __int8)(v6 ^ v7) | v5 )
+ //v56 = 1;
+ if (uNumSectors < 2)
return 0;
- v52 = 116;
- do
+
+ for (uint i = 1; i < uNumSectors; ++i)
{
- v8 = &this->pSectors[v52 / 0x74];
- if ( v8->pBounding.x1 <= sX )
- {
- if ( v8->pBounding.x2 >= sX )
- {
- if ( v8->pBounding.y1 <= sY )
+ auto pSector = pSectors + i;
+
+ if (pSector->pBounding.x1 <= sX && pSector->pBounding.x2 >= sX)
+ if (pSector->pBounding.y1 <= sY && pSector->pBounding.y2 >= sY)
+ if (pSector->pBounding.z1 - 64 <= sZ && pSector->pBounding.z2 + 64 >= sZ)
{
- if ( v8->pBounding.y2 >= sY )
- {
- if ( v8->pBounding.z1 - 64 <= sZ )
- {
- if ( v8->pBounding.z2 + 64 >= sZ )
- {
- v9 = v8->field_4;
- v10 = v9 + v8->uNumPortals;
- v11 = 0;
- v44 = v9;
- v51 = v10;
- v48 = 0;
- if ( v10 > 0 )
- {
- v12 = -2 * v9;
- v53 = -2 * v9;
- do
- {
- if ( v11 < v44 )
- v13 = this->pSectors[v52 / 0x74].pFloors[v11];
+ Log::Warning(L"Sector[%u]", i);
+ v51 = pSector->uNumFloors + pSector->uNumPortals;
+ if (!v51)
+ continue;
+
+ //v9 = pSector->uNumFloors;
+ //v10 = v9 + pSector->uNumPortals;
+ //v11 = 0;
+ //v44 = v9;
+ //v48 = 0;
+
+ //v12 = -2 * v9;
+ //v53 = -2 * v9;
+ for (uint j = 0; j < v51; ++j)
+ {
+ unsigned int uFaceID;
+ if (j < pSector->uNumFloors)
+ uFaceID = pSector->pFloors[j];
+ else
+ uFaceID = pSector->pPortals[j - pSector->uNumFloors];
+
+ auto pFace = pFaces + uFaceID;
+ //v14 = (signed __int16)v13;
+ //v15 = this->pFaces;
+ //v46 = v13;
+ //v14 *= 96;
+ //v45 = v13 * sizeof(BLVFace);
+ //v16 = pFaces + uFaceID;
+ //v17 = v16->uPolygonType;
+ if (pFace->uPolygonType == POLYGON_Floor ||
+ pFace->uPolygonType == POLYGON_InBetweenFloorAndWall)
+ {
+ //pVertexIDs = pFace->pVertexIDs;
+ //v19 = this->pVertices;
+ //v20 = pVertices[pFace->pVertexIDs[0]].y;
+ v54 = 0;
+ //v57 = 0;
+ //v5 = v16->uNumVertices == 0;
+ v59 = pVertices[pFace->pVertexIDs[0]].y >= sY;
+
+ //v21 = pFace->pVertexIDs + 1;
+ for (uint k = 1; k < pFace->uNumVertices; ++k)
+ {
+ if (v54 >= 2)
+ break;
+
+ //v49 = &pVertices[pFace->pVertexIDs[k]];
+ auto v2 = &pVertices[pFace->pVertexIDs[k]];
+ //v22 = pVertex->y;
+ //v47 = pVertex->y;
+ v50 = v2->y >= sY;
+ if ( v59 ^ v50 )
+ {
+ //v58 = &pVertices[pFace->pVertexIDs[k - 1]];
+ auto v1 = &pVertices[pFace->pVertexIDs[k - 1]];
+ //v23 = v58->x;
+ //HIWORD(v24) = HIWORD(v49);
+ //LOWORD(v24) = v49->x;
+ //v49 = v24;
+ //v59 = v49->x;
+ v25 = v1->x >= sX ? 0 : 2; // BUG TODO TROLOLO
+ v26 = v25 | v2->x < sX; // SWAP v1 and v2 till the result's correct
+ if ( v26 != 3 )
+ {
+ if (!v26)
+ ++v54;
else
- v13 = *(unsigned __int16 *)((char *)this->pSectors[v52 / 0x74].pPortals + v12);
- v14 = (signed __int16)v13;
- v15 = this->pFaces;
- v46 = v14;
- v14 *= 96;
- v45 = v14;
- v16 = (BLVFace *)((char *)v15 + v14);
- v17 = v16->uPolygonType;
- if ( v17 == 3 || v17 == 4 )
{
- pVertexIDs = v16->pVertexIDs;
- v19 = this->pVertices;
- v20 = v19[*pVertexIDs].y;
- v54 = 0;
- v57 = 0;
- v5 = v16->uNumVertices == 0;
- v59 = v20 >= sY;
- if ( !v5 )
+ if (v1->x >= v2->x)
{
- v21 = pVertexIDs + 1;
- do
- {
- if ( v54 >= 2 )
- break;
- v49 = &v19[*v21];
- v22 = v49->y;
- v47 = v49->y;
- v50 = v22 >= sY;
- if ( v59 ^ v50 )
- {
- v58 = &v19[*(v21 - 1)];
- v23 = v58->x;
- HIWORD(v24) = HIWORD(v49);
- LOWORD(v24) = v49->x;
- v49 = v24;
- v59 = (signed __int16)v24;
- v25 = (signed __int16)v24 >= sX ? 0 : 2;
- v26 = v25 | v23 < sX;
- if ( v26 != 3 )
- {
- if ( !v26
- || (v58->x >= (signed __int16)v49 ? (v32 = v23 - v59,
- v58 = (Vec3_short_ *)(v58->y - v47),
- LODWORD(v33) = v32 << 16,
- HIDWORD(v33) = v32 >> 16,
- v59 = v33 / (signed int)v58,
- v34 = this->pVertices,
- v58 = (Vec3_short_ *)(v33 / (signed int)v58),
- v59 = sY - v34[*v21].y,
- v59 = (unsigned __int64)((signed int)v58
- * (signed __int64)v59) >> 16,
- v31 = *v21) : (v27 = v58->y,
- v59 -= v23,
- v58 = (Vec3_short_ *)(v47 - v27),
- LODWORD(v28) = v59 << 16,
- HIDWORD(v28) = v59 >> 16,
- v59 = v28 / (v47 - v27),
- v29 = (Vec3_short_ *)(v28 / (v47 - v27)),
- v30 = this->pVertices,
- v58 = v29,
- v59 = sY - v30[*(v21 - 1)].y,
- v59 = (unsigned __int64)((signed int)v29 * (signed __int64)v59) >> 16,
- v31 = *(v21 - 1)),
- v19 = this->pVertices,
- v59 + v19[v31].x > sX) )
- ++v54;
- }
- }
- ++v57;
- v59 = v50;
- ++v21;
- }
- while ( v57 < *(&this->pFaces->uNumVertices + v45) );
- if ( v54 == 1 )
- {
- v35 = v55++;
- v43[v35] = v46;
- }
+ int _a58;
+ int _a59;
+
+ v32 = v1->x - v2->x;
+ LODWORD(v33) = v32 << 16;
+ HIDWORD(v33) = v32 >> 16;
+ _a58 = v33 / (v1->y - v2->y);
+ _a59 = (unsigned __int64)(_a58 * (__int64)(sY - v2->y)) >> 16;
+
+ if (v59 + pVertices[k].x > sX)
+ ++v54;
+ }
+ else
+ {
+ int _a58;
+ int _a59;
+ v32 = v2->x - v1->x;
+ LODWORD(v33) = v32 << 16;
+ HIDWORD(v33) = v32 >> 16;
+ _a58 = v33 / (v2->y - v1->y);
+ _a59 = (unsigned __int64)(_a58 * (signed __int64)(sY - v1->y)) >> 16;
+
+ if (_a59 + pVertices[k - 1].x > sX)
+ ++v54;
}
}
- v11 = v48 + 1;
- v12 = v53 + 2;
- v7 = __OFSUB__(v48 + 1, v51);
- v6 = v48++ + 1 - v51 < 0;
- v53 += 2;
- }
- while ( v6 ^ v7 );
- v4 = v43[0];
- }
- }
+ }
+ }
+
+ v59 = v50;
+ }
+
+ if (pFace->uNumVertices)
+ {
+ if (v54 == 1)
+ {
+ v35 = v55++;
+ v43[v35] = uFaceID;
+ }
+ }
+ }
}
+ v4 = v43[0];
}
- }
- }
- }
- ++v56;
- v52 += 116;
}
- while ( v56 < this->uNumSectors );
+
if ( v55 == 1 )
return this->pFaces[v4].uSectorID;
v37 = 0;
@@ -3610,7 +3543,7 @@
int v44; // ecx@36
int v45; // edi@36
int v46; // ecx@36
- unsigned __int16 *v47; // edx@44
+ __int16 *v47; // edx@44
int v48; // ecx@44
unsigned int v49; // ecx@46
unsigned __int16 v50; // ax@48
@@ -4034,12 +3967,12 @@
AIDirection v52; // [sp+0h] [bp-60h]@75
AIDirection v53; // [sp+1Ch] [bp-44h]@116
int v54; // [sp+38h] [bp-28h]@53
- int v55; // [sp+3Ch] [bp-24h]@6
+ unsigned int uSectorID; // [sp+3Ch] [bp-24h]@6
int v56; // [sp+40h] [bp-20h]@6
unsigned int _this; // [sp+44h] [bp-1Ch]@51
int v58; // [sp+48h] [bp-18h]@51
int v59; // [sp+4Ch] [bp-14h]@8
- int v60; // [sp+50h] [bp-10h]@6
+ unsigned int uFaceID; // [sp+50h] [bp-10h]@6
int v61; // [sp+54h] [bp-Ch]@14
int v62; // [sp+58h] [bp-8h]@6
unsigned int v63; // [sp+5Ch] [bp-4h]@1
@@ -4053,9 +3986,9 @@
v1 = v0->uAIState;
if ( v1 == 11 || v1 == 19 || v1 == 17 || !v0->uMovementSpeed )
goto LABEL_123;
- v55 = v0->uSectorID;
- v2 = _46ED1B_collide_against_floor(v0->vPosition.x, v0->vPosition.y, v0->vPosition.z, (unsigned int *)&v55, &v60);
- v0->uSectorID = v55;
+ uSectorID = v0->uSectorID;
+ v2 = _46ED1B_collide_against_floor(v0->vPosition.x, v0->vPosition.y, v0->vPosition.z, &uSectorID, &uFaceID);
+ v0->uSectorID = uSectorID;
v3 = v0->pMonsterInfo.uFlying;
v56 = v2;
v62 = v3;
@@ -4070,7 +4003,7 @@
v5 = pIndoor->GetSector(v0->vPosition.x, v0->vPosition.y, v4);
v0->uSectorID = v5;
if ( !v5
- || (v56 = _46CEC3_get_floor_level(v0->vPosition.x, v0->vPosition.y, v0->vPosition.z, v5, &v60), v56 == -30000) )
+ || (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 )
@@ -4100,18 +4033,18 @@
if ( v6 > 1000 )
v6 = 1000;
v12 = stru_5C6E00->SinCos(v0->uYawAngle);
- v55 = v12;
+ uSectorID = v12;
v13 = v12 * (signed __int64)v6;
v61 = v13 >> 16;
v0->vVelocity.x = WORD1(v13);
- v55 = stru_5C6E00->SinCos(v0->uYawAngle - stru_5C6E00->uIntegerHalfPi);
- v61 = (unsigned __int64)(v55 * (signed __int64)v6) >> 16;
+ uSectorID = stru_5C6E00->SinCos(v0->uYawAngle - stru_5C6E00->uIntegerHalfPi);
+ v61 = (unsigned __int64)(uSectorID * (signed __int64)v6) >> 16;
v7 = v62 == 0;
- v0->vVelocity.y = (unsigned int)(v55 * v6) >> 16;
+ v0->vVelocity.y = (unsigned int)(uSectorID * v6) >> 16;
if ( !v7 )
{
v14 = stru_5C6E00->SinCos(v0->uPitchAngle - stru_5C6E00->uIntegerHalfPi);
- v55 = v14;
+ uSectorID = v14;
v15 = v14 * (signed __int64)v6;
v61 = v15 >> 16;
v0->vVelocity.z = WORD1(v15);
@@ -4120,16 +4053,16 @@
else
{
v61 = v0->vVelocity.x;
- v55 = 55000;
+ uSectorID = 55000;
v61 = (unsigned __int64)(55000i64 * v61) >> 16;
v0->vVelocity.x = v61;
v61 = v0->vVelocity.y;
- v61 = (unsigned __int64)(v55 * (signed __int64)v61) >> 16;
+ v61 = (unsigned __int64)(uSectorID * (signed __int64)v61) >> 16;
v7 = v62 == 0;
v0->vVelocity.y = v61;
if ( !v7 )
{
- v55 = 55000;
+ uSectorID = 55000;
v61 = v0->vVelocity.z;
v61 = (unsigned __int64)(55000i64 * v61) >> 16;
v0->vVelocity.z = v61;
@@ -4139,7 +4072,7 @@
v17 = pIndoor->pFaces;
v51 = __OFSUB__(v16, v56);
v8 = v16 - v56 < 0;
- v18 = v60;
+ v18 = uFaceID;
if ( v8 ^ v51 )
{
v0->vPosition.z = v56 + 1;
@@ -4167,8 +4100,8 @@
v0->vVelocity.x = 0;
if ( BYTE2(v17[v18].uAttributes) & 0x40 )
{
- if ( v0->uAIState == 5 )
- v0->uAIState = 11;
+ if (v0->uAIState == Dead)
+ v0->uAIState = Removed;
}
LABEL_123:
++v63;
@@ -4179,7 +4112,7 @@
v21 = v0->uActorHeight;
stru_721530.field_84 = -1;
stru_721530.field_70 = 0;
- v55 = 0;
+ uSectorID = 0;
stru_721530.field_0 = 1;
stru_721530.field_8 = v20;
stru_721530.prolly_normal_d = v20;
@@ -4256,12 +4189,12 @@
v58 = (unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.field_58.z) >> 16;
v32 = v58 + v0->vPosition.z;
}
- v33 = _46ED1B_collide_against_floor(v30, v31, v32, &stru_721530.uSectorID, &v60);
- v34 = pIndoor->pFaces[v60].uAttributes;
+ v33 = _46ED1B_collide_against_floor(v30, v31, v32, &stru_721530.uSectorID, &uFaceID);
+ v34 = pIndoor->pFaces[uFaceID].uAttributes;
v35 = v34 & 0x400000;
- if ( v35 && v0->uAIState == 5 )
+ if (v35 && v0->uAIState == Dead)
{
- v0->uAIState = 11;
+ v0->uAIState = Removed;
goto LABEL_120;
}
if ( v59 != v22 || v62 != v22 || v35 == v22 )
@@ -4436,8 +4369,8 @@
}
}
LABEL_120:
- ++v55;
- if ( v55 >= 100 )
+ ++uSectorID;
+ if ( uSectorID >= 100 )
goto LABEL_123;
v20 = stru_721530.prolly_normal_d;
}
@@ -4535,7 +4468,7 @@
ptr_6A0D08 = 0;
_6A0D0C_txt_lod_loading = 0;
TryLoadLevelFromLOD();
- uNumStationaryLightsApplied = 0;
+ pStationaryLightsStack->uNumLightsActive = 0;
v4 = pIndoor->Load(
pCurrentMapName,
(unsigned int)(signed __int64)((double)pParty->uTimePlayed * 0.234375) / 60 / 60 / 24 + 1,
@@ -4800,8 +4733,8 @@
{
pParty->sRotationX = 0;
pParty->sRotationY = 0;
+ pParty->vPosition.z = 0;
pParty->vPosition.y = 0;
- pParty->vPosition.z = 0;
pParty->vPosition.x = 0;
pParty->uFallStartY = 0;
pParty->uFallSpeed = 0;
diff -r c83d06692295 -r c0cf9393af64 Indoor.h
--- a/Indoor.h Mon Oct 22 09:20:49 2012 +0600
+++ b/Indoor.h Mon Oct 29 09:28:08 2012 +0600
@@ -185,7 +185,7 @@
char uGreen;
char uBlue;
char uType;
- __int16 uAtributes;
+ __int16 uAtributes; // & 0x08 doesn't light faces
__int16 uBrightness;
};
#pragma pack(pop)
@@ -238,7 +238,7 @@
/* 101 */
#pragma pack(push, 1)
-struct BLVMapVertex
+struct BLVMapOutline
{
unsigned __int16 uVertex1ID;
unsigned __int16 uVertex2ID;
@@ -250,6 +250,15 @@
#pragma pack(pop)
+#define FACE_TWO_SIDED 0x00000001 // portal/two-sided
+// 0x02 color is saturated against lights
+#define FACE_TEXTURE_ANIMATED 0x00000010 // like wavy water
+#define FACE_INVISIBLE 0x00002000
+#define FACE_TEXTURE_FRAME 0x00004000 // Texture ID is a frameset from TextureFrameTable, otherwise BitmapID
+#define FACE_TEXTURE_FLOW 0x00040000 // The texture moves slowly. For horizontal facets only.
+#define FACE_CLICKABLE 0x02000000 // Event can be triggered by clicking on the facet.
+#define FACE_PRESSURE_PLATE 0x04000000 // Event can be triggered by stepping on the facet.
+#define FACE_ETHEREAL 0x20000000 // Untouchable. You can pass through it.
/* 93 */
#pragma pack(push, 1)
@@ -271,6 +280,12 @@
struct Texture *GetTexture();
void FromODM(struct ODMFace *a2);
+ inline bool Invisible() const {return uAttributes & FACE_INVISIBLE;}
+ inline bool Visible() const {return !Invisible();}
+ inline bool TwoSided() const {return uAttributes & FACE_TWO_SIDED;}
+ inline bool Animated() const {return uAttributes & FACE_TEXTURE_ANIMATED;}
+ inline bool Clickable() const {return uAttributes & FACE_CLICKABLE;}
+
struct Plane_float_ pFacePlane;
struct Plane_int_ pFacePlane_old;
@@ -282,11 +297,11 @@
unsigned __int16 *pXInterceptDisplacements;
unsigned __int16 *pYInterceptDisplacements;
unsigned __int16 *pZInterceptDisplacements;
- unsigned __int16 *pVertexUIDs;
- unsigned __int16 *pVertexVIDs;
- unsigned __int16 uFaceExtraID;
- unsigned __int16 uBitmapID;
- unsigned __int16 uSectorID;
+ signed __int16 *pVertexUIDs;
+ signed __int16 *pVertexVIDs;
+ unsigned __int16 uFaceExtraID;
+ unsigned __int16 uBitmapID;
+ unsigned __int16 uSectorID;
__int16 uBackSectorID;
struct BBox_short_ pBounding;
PolygonType uPolygonType;
@@ -328,7 +343,7 @@
struct BLVSector
{
int field_0;
- __int16 field_4;
+ unsigned __int16 uNumFloors;
__int16 field_6;
unsigned __int16 *pFloors;
__int16 field_C;
@@ -360,7 +375,7 @@
unsigned __int16 *pMarkers;
__int16 uNumLights;
__int16 field_56;
- BLVLightMM7 *pLights;
+ unsigned __int16 *pLights;
__int16 uWaterLevel;
__int16 uMistLevel;
__int16 uLightDistanceMultiplier;
@@ -373,10 +388,10 @@
#pragma pack(push, 1)
-struct BLVMapVertices
+struct BLVMapOutlines
{
- uint uNumVertices;
- BLVMapVertex pVertices[1];
+ uint uNumOutlines;
+ BLVMapOutline pOutlines[1];
};
#pragma pack(pop)
@@ -411,7 +426,7 @@
pLights = 0;
pDoors = 0;
pNodes = 0;
- pMapVertices = 0;
+ pMapOutlines = 0;
uNumSpawnPoints = 0;
pSpawnPoints = 0;
}
@@ -424,9 +439,9 @@
void ToggleLight(unsigned int uLightID, unsigned int bToggle);
static unsigned int GetLocationIndex(const char *Str1);
- static void ExecDraw(char a1);
- static void ExecDraw_sub1(unsigned int uFaceID);
- static void ExecDraw_sub0(unsigned int uFaceID, struct IndoorCameraD3D_Vec4 *pVertices, unsigned int uNumVertices, struct RenderVertexSoft *a4);
+ static void ExecDraw(bool bD3D);
+ static void ExecDraw_sw(unsigned int uFaceID);
+ static void ExecDraw_d3d(unsigned int uFaceID, struct IndoorCameraD3D_Vec4 *pVertices, unsigned int uNumVertices, struct RenderVertexSoft *a4);
char pFilename[32];
char field_20[48];
@@ -447,7 +462,7 @@
struct BLVDoor *pDoors;
unsigned int uNumNodes;
struct BSPNode *pNodes;
- BLVMapVertices *pMapVertices;
+ BLVMapOutlines *pMapOutlines;
unsigned __int16 *ptr_2AC;
unsigned __int16 *ptr_0002B0_sector_rdata;
unsigned __int16 *ptr_0002B4_doors_ddata;
@@ -510,14 +525,14 @@
#pragma pack(push, 1)
struct BLVRenderParams
{
- int Set(struct IndoorLocation_drawstru *a2);
+ int Reset(struct IndoorLocation_drawstru *a2);
int field_0_timer_;
int uFlags;
Vec3_int_ vPartyPos;
int sPartyRotY;
int sPartyRotX;
- int uRadius;
+ int uPartySectorID;
int sCosineY;
int sSineY;
int sCosineNegX;
@@ -542,7 +557,7 @@
int uViewportCenterX;
int uViewportCenterY;
struct stru170_stru2 *field_7C;
- int field_80;
+ unsigned int uNumFacesRenderedThisFrame;
int field_84;
int field_88;
int field_8C;
diff -r c83d06692295 -r c0cf9393af64 IndoorCamera.cpp
--- a/IndoorCamera.cpp Mon Oct 22 09:20:49 2012 +0600
+++ b/IndoorCamera.cpp Mon Oct 29 09:28:08 2012 +0600
@@ -41,14 +41,14 @@
v5 = vCamToVertexY * fRotationYSine + fRotationYCosine * vCamToVertexX;
if ( sRotationX )
{
- v6 = v5;
+ v6 = vCamToVertexY * fRotationYSine + fRotationYCosine * vCamToVertexX;
a1->vWorldViewPosition.x = v5 * fRotationXCosine + fRotationXSine * vCamToVertexZ;
a1->vWorldViewPosition.y = v3 * vCamToVertexY - v4 * vCamToVertexX;
a1->vWorldViewPosition.z = v8 * vCamToVertexZ - v6 * v7;
}
else
{
- a1->vWorldViewPosition.x = v5;
+ a1->vWorldViewPosition.x = vCamToVertexY * fRotationYSine + fRotationYCosine * vCamToVertexX;
a1->vWorldViewPosition.y = v3 * vCamToVertexY - v4 * vCamToVertexX;
a1->vWorldViewPosition.z = vCamToVertexZ;
}
@@ -75,38 +75,38 @@
//----- (004239A7) --------------------------------------------------------
void IndoorCamera::Initialize2()
{
- IndoorCamera *v1; // esi@1
+ //IndoorCamera *v1; // esi@1
double v2; // st7@4
- double v3; // st7@6
- int v4; // eax@6
- int v5; // eax@6
- int v6; // ST04_4@6
- int v7; // eax@6
- int v8; // ST04_4@6
+ //double v3; // st7@6
+ //int v4; // eax@6
+ //int v5; // eax@6
+ //int v6; // ST04_4@6
+ //int v7; // eax@6
+ //int v8; // ST04_4@6
- v1 = this;
- this->fRotationYSine = sin((3.141592653589793 + 3.141592653589793) * (double)this->sRotationY * 0.00048828125);
- v1->fRotationYCosine = cos((3.141592653589793 + 3.141592653589793) * (double)v1->sRotationY * 0.00048828125);
+ //v1 = this;
+ fRotationYSine = sin((3.141592653589793 + 3.141592653589793) * (double)sRotationY * 0.00048828125);
+ fRotationYCosine = cos((3.141592653589793 + 3.141592653589793) * (double)sRotationY * 0.00048828125);
if ( byte_4D864C && pGame->uFlags & 0x80 || uCurrentlyLoadedLevelType == LEVEL_Indoor)
{
- v1->fRotationXSine = sin((3.141592653589793 + 3.141592653589793) * (double)-v1->sRotationX * 0.00048828125);
- v2 = (3.141592653589793 + 3.141592653589793) * (double)-v1->sRotationX;
+ fRotationXSine = sin((3.141592653589793 + 3.141592653589793) * (double)-sRotationX * 0.00048828125);
+ v2 = (3.141592653589793 + 3.141592653589793) * (double)-sRotationX;
}
else
{
- v1->fRotationXSine = sin((3.141592653589793 + 3.141592653589793) * (double)v1->sRotationX * 0.00048828125);
- v2 = (3.141592653589793 + 3.141592653589793) * (double)v1->sRotationX;
+ fRotationXSine = sin((3.141592653589793 + 3.141592653589793) * (double)sRotationX * 0.00048828125);
+ v2 = (3.141592653589793 + 3.141592653589793) * (double)sRotationX;
}
- v3 = cos(v2 * 0.00048828125);
- v4 = v1->sRotationY;
- v1->fRotationXCosine = v3;
- v5 = stru_5C6E00->SinCos(v4 - stru_5C6E00->uIntegerHalfPi);
- v6 = v1->sRotationY;
- v1->_int_sine = v5;
- v1->_int_cosine = stru_5C6E00->SinCos(v6);
- v7 = stru_5C6E00->SinCos(v1->sRotationX - stru_5C6E00->uIntegerHalfPi);
- v8 = v1->sRotationX;
- v1->_int_sine_2 = v7;
- v1->_int_cosine_2 = stru_5C6E00->SinCos(v8);
+ //v3 = cos(v2 * 0.00048828125);
+ //v4 = sRotationY;
+ 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);
+ //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);
}
// 4D864C: using guessed type char byte_4D864C;
\ No newline at end of file
diff -r c83d06692295 -r c0cf9393af64 IndoorCameraD3D.cpp
--- a/IndoorCameraD3D.cpp Mon Oct 22 09:20:49 2012 +0600
+++ b/IndoorCameraD3D.cpp Mon Oct 29 09:28:08 2012 +0600
@@ -13,31 +13,18 @@
//----- (004364C5) --------------------------------------------------------
-void IndoorCameraD3D::_4364C5(RenderVertexSoft *pVertices, unsigned int uNumVertices, RenderVertexSoft *a1, stru320 *a5)
+void IndoorCameraD3D::ViewTransfrom_OffsetUV(RenderVertexSoft *pVertices, unsigned int uNumVertices, RenderVertexSoft *pOutVertices, stru320 *a5)
{
- unsigned int v5; // ebx@1
- char *v6; // edx@2
- char *v7; // eax@2
-
- v5 = uNumVertices;
- if ( (signed int)uNumVertices > 0 )
+ for (uint i = 0; i < uNumVertices; ++i)
{
- v6 = (char *)&a1->vWorldPosition.z;
- v7 = (char *)&pVertices->vWorldPosition.z;
- do
- {
- *((int *)v6 - 2) = *((int *)v7 - 2);
- *((int *)v6 - 1) = *((int *)v7 - 1);
- *(int *)v6 = *(int *)v7;
- v7 += 48;
- v6 += 48;
- --v5;
- *((float *)v6 - 5) = (double)a5->pDeltaUV[0] + *((float *)v7 - 5);
- *((float *)v6 - 4) = (double)a5->pDeltaUV[1] + *((float *)v7 - 4);
- }
- while ( v5 );
+ pOutVertices[i].vWorldPosition.x = pVertices[i].vWorldPosition.x;
+ pOutVertices[i].vWorldPosition.y = pVertices[i].vWorldPosition.y;
+ pOutVertices[i].vWorldPosition.z = pVertices[i].vWorldPosition.z;
+
+ pOutVertices[i].u = pVertices[i].u + a5->pDeltaUV[0];
+ pOutVertices[i].v = pVertices[i].v + a5->pDeltaUV[1];
}
- ViewTransform(a1, uNumVertices);
+ ViewTransform(pOutVertices, uNumVertices);
}
//----- (0043669D) --------------------------------------------------------
@@ -108,153 +95,216 @@
//----- (00436455) --------------------------------------------------------
-bool IndoorCameraD3D::IsFaceFacedTowardsCamera(BLVFace *pFace)
+bool IndoorCameraD3D::IsCulled(BLVFace *pFace)
{
- IndoorCameraD3D *v2; // edi@1
- bool result; // eax@1
RenderVertexSoft v; // [sp+8h] [bp-30h]@1
- v2 = this;
Vec3_short__to_RenderVertexSoft(&v, &pIndoor->pVertices[*pFace->pVertexIDs]);
- LOBYTE(result) = is_vertex_with_normal_from_face_towards_camera(pFace, &v);
- return result;
+ return is_face_faced_to_camera(pFace, &v);
}
//----- (00436523) --------------------------------------------------------
void IndoorCameraD3D::ViewTransform(RenderVertexSoft *a1a, unsigned int uNumVertices)
{
- __debugbreak();
- /*
- unsigned int v3; // esi@4
- unsigned int v4; // ecx@7
- float v7; // [sp+4h] [bp-4h]@7
-
- auto a1 = this;
- if ( byte_4D864C && pGame->uFlags & 0x80 || uCurrentlyLoadedLevelType == LEVEL_Indoor)
+ if (byte_4D864C && pGame->uFlags & 0x80 ||
+ uCurrentlyLoadedLevelType == LEVEL_Indoor)
{
- __asm
- {
- fld pIndoorCamera->fRotationYCosine
- fld pIndoorCamera->fRotationYSine
- fld pIndoorCamera->fRotationXCosine
- }
- v4 = uNumVertices;
- v7 = pIndoorCamera->fRotationXSine;
+ float sin_x = pIndoorCamera->fRotationXSine,
+ cos_x = pIndoorCamera->fRotationXCosine;
+ float sin_y = pIndoorCamera->fRotationYSine,
+ cos_y = pIndoorCamera->fRotationYCosine;
+
+ //v4 = uNumVertices;
+ //v7 = pIndoorCamera->fRotationXSine;
if ( pIndoorCamera->sRotationX )
{
- if ( (signed int)uNumVertices > 0 )
- {
- _EAX = a1a;
- do
- {
- __asm
- {
- fild pIndoorCamera->pos.x
- fsubr dword ptr [eax]
- fstp [ebp+a1]
- fild pIndoorCamera->pos.y
- fsubr dword ptr [eax+4]
- fstp [ebp+uNumVertices]
- fild pIndoorCamera->pos.z
- fsubr dword ptr [eax+8]
- }
+
+ //_EAX = a1a;
+ for (uint i = 0; i < uNumVertices; ++i)
+ {
+ float st0, st1, st2;
if ( pRenderer->pRenderD3D )
{
- __asm
+ /*__asm
{
- fld [ebp+uNumVertices]
- fmul st, st(3)
- fld [ebp+a1]
- fmul st, st(5)
- faddp st(1), st
- fld [ebp+a1]
- fmul st, st(4)
- fld [ebp+uNumVertices]
- fmul st, st(6)
- fsubp st(1), st
- }
+ fld [ebp+uNumVertices] // [(a1a[i].y - pIndoorCamera->pos.y)] [(a1a[i].z - pIndoorCamera->pos.z)] [pIndoorCamera->fRotationXCosine] [pIndoorCamera->fRotationYSine] [pIndoorCamera->fRotationYCosine]
+ fmul st, st(3) // [pIndoorCamera->fRotationYSine * (a1a[i].y - pIndoorCamera->pos.y)] [(a1a[i].z - pIndoorCamera->pos.z)] [pIndoorCamera->fRotationXCosine] [pIndoorCamera->fRotationYSine] [pIndoorCamera->fRotationYCosine]
+ fld [ebp+a1] // [(a1a[i].x - pIndoorCamera->pos.x)] [pIndoorCamera->fRotationYSine * (a1a[i].y - pIndoorCamera->pos.y)] [(a1a[i].z - pIndoorCamera->pos.z)] [pIndoorCamera->fRotationXCosine] [pIndoorCamera->fRotationYSine] [pIndoorCamera->fRotationYCosine]
+ fmul st, st(5) // 0[pIndoorCamera->fRotationYCosine * (a1a[i].x - pIndoorCamera->pos.x)]
+ // 1[pIndoorCamera->fRotationYSine * (a1a[i].y - pIndoorCamera->pos.y)]
+ // 2[(a1a[i].z - pIndoorCamera->pos.z)]
+ // 3[pIndoorCamera->fRotationXCosine]
+ // 4[pIndoorCamera->fRotationYSine]
+ // 5[pIndoorCamera->fRotationYCosine]
+ faddp st(1), st // [pIndoorCamera->fRotationYCosine * (a1a[i].x - pIndoorCamera->pos.x) + pIndoorCamera->fRotationYSine * (a1a[i].y - pIndoorCamera->pos.y)] [(a1a[i].z - pIndoorCamera->pos.z)] [pIndoorCamera->fRotationXCosine] [pIndoorCamera->fRotationYSine] [pIndoorCamera->fRotationYCosine]
+ fld [ebp+a1] // [(a1a[i].x - pIndoorCamera->pos.x)] [pIndoorCamera->fRotationYCosine * (a1a[i].x - pIndoorCamera->pos.x) + pIndoorCamera->fRotationYSine * (a1a[i].y - pIndoorCamera->pos.y)] [(a1a[i].z - pIndoorCamera->pos.z)] [pIndoorCamera->fRotationXCosine] [pIndoorCamera->fRotationYSine] [pIndoorCamera->fRotationYCosine]
+ fmul st, st(4) // [pIndoorCamera->fRotationYSine * (a1a[i].x - pIndoorCamera->pos.x)] [pIndoorCamera->fRotationYCosine * (a1a[i].x - pIndoorCamera->pos.x) + pIndoorCamera->fRotationYSine * (a1a[i].y - pIndoorCamera->pos.y)] [(a1a[i].z - pIndoorCamera->pos.z)] [pIndoorCamera->fRotationXCosine] [pIndoorCamera->fRotationYSine] [pIndoorCamera->fRotationYCosine]
+
+ fld [ebp+uNumVertices] // 0[a1a[i].y - pIndoorCamera->pos.y]
+ // 1[pIndoorCamera->fRotationYSine * (a1a[i].x - pIndoorCamera->pos.x)]
+ // 2[pIndoorCamera->fRotationYCosine * (a1a[i].x - pIndoorCamera->pos.x) + pIndoorCamera->fRotationYSine * (a1a[i].y - pIndoorCamera->pos.y)]
+ // 3[(a1a[i].z - pIndoorCamera->pos.z)]
+ // 4[pIndoorCamera->fRotationXCosine]
+ // 5[pIndoorCamera->fRotationYSine]
+ // 6[pIndoorCamera->fRotationYCosine]
+
+ fmul st, st(6) // 0[pIndoorCamera->fRotationYCosine * (a1a[i].y - pIndoorCamera->pos.y)]
+ // 1[pIndoorCamera->fRotationYSine * (a1a[i].x - pIndoorCamera->pos.x)]
+ // 2[pIndoorCamera->fRotationYCosine * (a1a[i].x - pIndoorCamera->pos.x) + pIndoorCamera->fRotationYSine * (a1a[i].y - pIndoorCamera->pos.y)]
+ // 3[(a1a[i].z - pIndoorCamera->pos.z)]
+ // 4[pIndoorCamera->fRotationXCosine]
+ // 5[pIndoorCamera->fRotationYSine]
+ // 6[pIndoorCamera->fRotationYCosine]
+
+ fsubp st(1), st // 0[pIndoorCamera->fRotationYSine * (a1a[i].x - pIndoorCamera->pos.x) - pIndoorCamera->fRotationYCosine * (a1a[i].y - pIndoorCamera->pos.y)]
+ // 1[pIndoorCamera->fRotationYCosine * (a1a[i].x - pIndoorCamera->pos.x) + pIndoorCamera->fRotationYSine * (a1a[i].y - pIndoorCamera->pos.y)]
+ // 2[(a1a[i].z - pIndoorCamera->pos.z)]
+ // 3[pIndoorCamera->fRotationXCosine]
+ // 4[pIndoorCamera->fRotationYSine]
+ // 5[pIndoorCamera->fRotationYCosine]
+ }*/
+ st0 = sin_y * (a1a[i].vWorldPosition.x - pIndoorCamera->pos.x) - cos_y * (a1a[i].vWorldPosition.y - pIndoorCamera->pos.y);
+ st1 = cos_y * (a1a[i].vWorldPosition.x - pIndoorCamera->pos.x) + sin_y * (a1a[i].vWorldPosition.y - pIndoorCamera->pos.y);
+ st2 = (a1a[i].vWorldPosition.z - pIndoorCamera->pos.z);
}
else
{
- __asm
+ /*__asm
{
- fld [ebp+a1]
- fmul st, st(4)
- fld [ebp+uNumVertices]
- fmul st, st(4)
- fsubp st(1), st
- fld [ebp+a1]
- fmul st, st(4)
- fld [ebp+uNumVertices]
- fmul st, st(6)
- faddp st(1), st
- }
+ fld [ebp+a1] // 0[(a1a[i].x - pIndoorCamera->pos.x)]
+ // 1[(a1a[i].z - pIndoorCamera->pos.z)]
+ // 2[pIndoorCamera->fRotationXCosine]
+ // 3[pIndoorCamera->fRotationYSine]
+ // 4[pIndoorCamera->fRotationYCosine]
+ fmul st, st(4) // 0[pIndoorCamera->fRotationYCosine * (a1a[i].x - pIndoorCamera->pos.x)]
+ // 1[(a1a[i].z - pIndoorCamera->pos.z)]
+ // 2[pIndoorCamera->fRotationXCosine]
+ // 3[pIndoorCamera->fRotationYSine]
+ // 4[pIndoorCamera->fRotationYCosine]
+ fld [ebp+uNumVertices] // 0[(a1a[i].y - pIndoorCamera->pos.y)]
+ // 1[pIndoorCamera->fRotationYCosine * (a1a[i].x - pIndoorCamera->pos.x)]
+ // 2[(a1a[i].z - pIndoorCamera->pos.z)]
+ // 3[pIndoorCamera->fRotationXCosine]
+ // 4[pIndoorCamera->fRotationYSine]
+ // 5[pIndoorCamera->fRotationYCosine]
+ fmul st, st(4) // 0[pIndoorCamera->fRotationYSine * (a1a[i].y - pIndoorCamera->pos.y)]
+ // 1[pIndoorCamera->fRotationYCosine * (a1a[i].x - pIndoorCamera->pos.x)]
+ // 2[(a1a[i].z - pIndoorCamera->pos.z)]
+ // 3[pIndoorCamera->fRotationXCosine]
+ // 4[pIndoorCamera->fRotationYSine]
+ // 5[pIndoorCamera->fRotationYCosine]
+ fsubp st(1), st // 0[pIndoorCamera->fRotationYCosine * (a1a[i].x - pIndoorCamera->pos.x) - pIndoorCamera->fRotationYSine * (a1a[i].y - pIndoorCamera->pos.y)]
+ // 1[(a1a[i].z - pIndoorCamera->pos.z)]
+ // 2[pIndoorCamera->fRotationXCosine]
+ // 3[pIndoorCamera->fRotationYSine]
+ // 4[pIndoorCamera->fRotationYCosine]
+ fld [ebp+a1] // 0[(a1a[i].x - pIndoorCamera->pos.x)]
+ // 1[pIndoorCamera->fRotationYCosine * (a1a[i].x - pIndoorCamera->pos.x) - pIndoorCamera->fRotationYSine * (a1a[i].y - pIndoorCamera->pos.y)]
+ // 2[(a1a[i].z - pIndoorCamera->pos.z)]
+ // 3[pIndoorCamera->fRotationXCosine]
+ // 4[pIndoorCamera->fRotationYSine]
+ // 5[pIndoorCamera->fRotationYCosine]
+ fmul st, st(4) // 0[pIndoorCamera->fRotationYSine * (a1a[i].x - pIndoorCamera->pos.x)]
+ // 1[pIndoorCamera->fRotationYCosine * (a1a[i].x - pIndoorCamera->pos.x) - pIndoorCamera->fRotationYSine * (a1a[i].y - pIndoorCamera->pos.y)]
+ // 2[(a1a[i].z - pIndoorCamera->pos.z)]
+ // 3[pIndoorCamera->fRotationXCosine]
+ // 4[pIndoorCamera->fRotationYSine]
+ // 5[pIndoorCamera->fRotationYCosine]
+ fld [ebp+uNumVertices] // 0[(a1a[i].y - pIndoorCamera->pos.y)]
+ // 1[pIndoorCamera->fRotationYSine * (a1a[i].x - pIndoorCamera->pos.x)]
+ // 2[pIndoorCamera->fRotationYCosine * (a1a[i].x - pIndoorCamera->pos.x) - pIndoorCamera->fRotationYSine * (a1a[i].y - pIndoorCamera->pos.y)]
+ // 3[(a1a[i].z - pIndoorCamera->pos.z)]
+ // 4[pIndoorCamera->fRotationXCosine]
+ // 5[pIndoorCamera->fRotationYSine]
+ // 6[pIndoorCamera->fRotationYCosine]
+ fmul st, st(6) // 0[pIndoorCamera->fRotationYCosine * (a1a[i].y - pIndoorCamera->pos.y)]
+ // 1[pIndoorCamera->fRotationYSine * (a1a[i].x - pIndoorCamera->pos.x)]
+ // 2[pIndoorCamera->fRotationYCosine * (a1a[i].x - pIndoorCamera->pos.x) - pIndoorCamera->fRotationYSine * (a1a[i].y - pIndoorCamera->pos.y)]
+ // 3[(a1a[i].z - pIndoorCamera->pos.z)]
+ // 4[pIndoorCamera->fRotationXCosine]
+ // 5[pIndoorCamera->fRotationYSine]
+ // 6[pIndoorCamera->fRotationYCosine]
+ faddp st(1), st // 0[pIndoorCamera->fRotationYCosine * (a1a[i].y - pIndoorCamera->pos.y) + pIndoorCamera->fRotationYSine * (a1a[i].x - pIndoorCamera->pos.x)]
+ // 1[pIndoorCamera->fRotationYCosine * (a1a[i].x - pIndoorCamera->pos.x) - pIndoorCamera->fRotationYSine * (a1a[i].y - pIndoorCamera->pos.y)]
+ // 2[(a1a[i].z - pIndoorCamera->pos.z)]
+ // 3[pIndoorCamera->fRotationXCosine]
+ // 4[pIndoorCamera->fRotationYSine]
+ // 5[pIndoorCamera->fRotationYCosine]
+ }*/
+ st0 = cos_y * (a1a[i].vWorldPosition.y - pIndoorCamera->pos.y) + sin_y * (a1a[i].vWorldPosition.x - pIndoorCamera->pos.x);
+ st1 = cos_y * (a1a[i].vWorldPosition.x - pIndoorCamera->pos.x) - sin_y * (a1a[i].vWorldPosition.y - pIndoorCamera->pos.y);
+ st2 = (a1a[i].vWorldPosition.z - pIndoorCamera->pos.z);
}
- __asm
- {
- fld st(1)
- fmul st, st(4)
- fld st(3)
- fmul [ebp+var_4]
- }
- ++_EAX;
- --v4;
- __asm
- {
- fsubp st(1), st
- fstp dword ptr [eax-24h]
- fstp dword ptr [eax-20h]
- fmul [ebp+var_4]
- fld st(1)
- fmul st, st(3)
- faddp st(1), st
- fstp dword ptr [eax-1Ch]
- fstp st
- }
- }
- while ( v4 );
+
+ a1a[i].vWorldViewPosition.x = st1*cos_x - st2*sin_x;
+ a1a[i].vWorldViewPosition.y = st0;
+ a1a[i].vWorldViewPosition.z = st2*cos_x + st1*sin_x;
}
- __asm { fstp st }
}
else
{
- __asm { fstp st }
- if ( (signed int)uNumVertices > 0 )
+ for (uint i = 0; i < uNumVertices; ++i)
{
- _EAX = a1a;
- do
- {
- __asm
- {
- fild pIndoorCamera->pos.x
- fsubr dword ptr [eax]
- fstp [ebp+a1]
- fild pIndoorCamera->pos.y
- fsubr dword ptr [eax+4]
- fstp [ebp+uNumVertices]
- fild pIndoorCamera->pos.z
- fsubr dword ptr [eax+8]
- }
if ( pRenderer->pRenderD3D )
{
- __asm
+ /*__asm
{
- fld [ebp+uNumVertices]
- fmul st, st(2)
- fld [ebp+a1]
- fmul st, st(4)
- faddp st(1), st
+ fld [ebp+uNumVertices] // 0[(a1a[i].y - pIndoorCamera->pos.y)]
+ // 1[(a1a[i].z - pIndoorCamera->pos.z)]
+ // 2[sin_y]
+ // 3[cos_y]
+ fmul st, st(2) // 0[sin_y * (a1a[i].y - pIndoorCamera->pos.y)]
+ // 1[(a1a[i].z - pIndoorCamera->pos.z)]
+ // 2[sin_y]
+ // 3[cos_y]
+ fld [ebp+a1] // 0[(a1a[i].x - pIndoorCamera->pos.x)]
+ // 1[sin_y * (a1a[i].y - pIndoorCamera->pos.y)]
+ // 2[(a1a[i].z - pIndoorCamera->pos.z)]
+ // 3[sin_y]
+ // 4[cos_y]
+ fmul st, st(4) // 0[cos_y * (a1a[i].x - pIndoorCamera->pos.x)]
+ // 1[sin_y * (a1a[i].y - pIndoorCamera->pos.y)]
+ // 2[(a1a[i].z - pIndoorCamera->pos.z)]
+ // 3[sin_y]
+ // 4[cos_y]
+ faddp st(1), st // 0[cos_y * (a1a[i].x - pIndoorCamera->pos.x) + sin_y * (a1a[i].y - pIndoorCamera->pos.y)]
+ // 1[(a1a[i].z - pIndoorCamera->pos.z)]
+ // 2[sin_y]
+ // 3[cos_y]
fstp dword ptr [eax+0Ch]
- fld [ebp+a1]
- fmul st, st(2)
- fld [ebp+uNumVertices]
- fmul st, st(4)
- fsubp st(1), st
- }
+ fld [ebp+a1] // 0[(a1a[i].x - pIndoorCamera->pos.x)]
+ // 1[(a1a[i].z - pIndoorCamera->pos.z)]
+ // 2[sin_y]
+ // 3[cos_y]
+ fmul st, st(2) // 0[sin_y * (a1a[i].x - pIndoorCamera->pos.x)]
+ // 1[(a1a[i].z - pIndoorCamera->pos.z)]
+ // 2[sin_y]
+ // 3[cos_y]
+ fld [ebp+uNumVertices] // 0[(a1a[i].y - pIndoorCamera->pos.y)]
+ // 1[sin_y * (a1a[i].x - pIndoorCamera->pos.x)]
+ // 2[(a1a[i].z - pIndoorCamera->pos.z)]
+ // 3[sin_y]
+ // 4[cos_y]
+ fmul st, st(4) // 0[cos_y * (a1a[i].y - pIndoorCamera->pos.y)]
+ // 1[sin_y * (a1a[i].x - pIndoorCamera->pos.x)]
+ // 2[(a1a[i].z - pIndoorCamera->pos.z)]
+ // 3[sin_y]
+ // 4[cos_y]
+ fsubp st(1), st // 0[sin_y * (a1a[i].x - pIndoorCamera->pos.x) - cos_y * (a1a[i].y - pIndoorCamera->pos.y)]
+ // 1[(a1a[i].z - pIndoorCamera->pos.z)]
+ // 2[sin_y]
+ // 3[cos_y]
+ fstp dword ptr [eax+10h]
+ fstp dword ptr [eax+14h]
+ }*/
+ a1a[i].vWorldViewPosition.x = cos_y * (a1a[i].vWorldPosition.x - pIndoorCamera->pos.x) + sin_y * (a1a[i].vWorldPosition.y - pIndoorCamera->pos.y);
+ a1a[i].vWorldViewPosition.y = sin_y * (a1a[i].vWorldPosition.x - pIndoorCamera->pos.x) - cos_y * (a1a[i].vWorldPosition.y - pIndoorCamera->pos.y);
+ a1a[i].vWorldViewPosition.z = (a1a[i].vWorldPosition.z - pIndoorCamera->pos.z);
}
else
{
- __asm
+ __debugbreak();
+ /*__asm
{
fld [ebp+a1]
fmul st, st(3)
@@ -267,101 +317,95 @@
fld [ebp+uNumVertices]
fmul st, st(4)
faddp st(1), st
- }
+
+ fstp dword ptr [eax+10h]
+ fstp dword ptr [eax+14h]
+ }*/
}
- __asm
- {
- fstp dword ptr [eax+10h]
- fstp dword ptr [eax+14h]
- }
- ++_EAX;
- --v4;
- }
- while ( v4 );
}
}
- __asm
- {
- fstp st
- fstp st
- }
}
- else
- {
- v3 = uNumVertices;
- if ( (signed int)uNumVertices > 0 )
- {
- do
- {
- :ViewTransform(a1a);
- ++a1a;
- --v3;
- }
- while ( v3 );
- }
- }*/
+ else for (uint i = 0; i < uNumVertices; ++i)
+ pIndoorCamera->ViewTransform(a1a + i);
}
//----- (00436932) --------------------------------------------------------
-char IndoorCameraD3D::GetFacetOrientation(char a1, Vec3_float_ *a2, Vec3_float_ *a3, Vec3_float_ *a4)
+bool IndoorCameraD3D::GetFacetOrientation(char polyType, Vec3_float_ *a2, Vec3_float_ *a3, Vec3_float_ *a4)
{
- Vec3_float_ *v5; // eax@9
- double v6; // st7@9
-
- if ( a1 == 1 )
+ switch ((PolygonType)polyType)
{
- a4->x = -a2->y;
- a4->y = a2->x;
- a4->z = 0.0;
-LABEL_9:
- v5 = a3;
- a3->x = 0.0;
- a3->y = 0.0;
- v6 = 1.0;
-LABEL_11:
- v5->z = v6;
- return 1;
- }
- if ( a1 == 3 || a1 == 5 )
- {
-LABEL_10:
- a4->x = 1.0;
- a4->y = 0.0;
- a4->z = 0.0;
- v5 = a3;
- a3->x = 0.0;
- a3->y = 1.0;
- v6 = 0.0;
- goto LABEL_11;
- }
- if ( a1 == 4 || a1 == 6 )
- {
- if ( fabs(a2->z) < 0.70811361 )
+ case POLYGON_VerticalWall:
{
a4->x = -a2->y;
a4->y = a2->x;
a4->z = 0.0;
- a4->Normalize();
- goto LABEL_9;
+
+ a3->x = 0.0;
+ a3->y = 0.0;
+ a3->z = 1.0f;
+ }
+ return true;
+
+ case POLYGON_Floor:
+ case POLYGON_Ceiling:
+ {
+ a4->x = 1.0;
+ a4->y = 0.0;
+ a4->z = 0.0;
+
+ a3->x = 0.0;
+ a3->y = 1.0;
+ a3->z = 0.0;
}
- goto LABEL_10;
+ return true;
+
+ case POLYGON_InBetweenFloorAndWall:
+ case POLYGON_InBetweenCeilingAndWall:
+ {
+ if (fabs(a2->z) < 0.70811361)
+ {
+ a4->x = -a2->y;
+ a4->y = a2->x;
+ a4->z = 0.0;
+ a4->Normalize();
+
+ a3->x = 0.0;
+ a3->y = 0.0;
+ a3->z = 1.0;
+ }
+ else
+ {
+ a4->x = 1.0;
+ a4->y = 0.0;
+ a4->z = 0.0;
+
+ a3->x = 0.0;
+ a3->y = 1.0;
+ a3->z = 0.0;
+ }
+ }
+ return true;
+
+ default:
+ return false;
}
- return 1;
}
//----- (00438258) --------------------------------------------------------
-bool IndoorCameraD3D::is_vertex_with_normal_from_face_towards_camera(BLVFace *pFace, RenderVertexSoft *a2)
+bool IndoorCameraD3D::is_face_faced_to_camera(BLVFace *pFace, RenderVertexSoft *a2)
{
- char result; // al@2
+ if (pFace->TwoSided())
+ return false;
+ //really strange cull; dot(to_cam, normal) < 0 means we see the BACK face, not font %_%
if ( (a2->vWorldPosition.z - (double)pIndoorCamera->pos.z) * (double)pFace->pFacePlane_old.vNormal.z
+ (a2->vWorldPosition.y - (double)pIndoorCamera->pos.y) * (double)pFace->pFacePlane_old.vNormal.y
- + (a2->vWorldPosition.x - (double)pIndoorCamera->pos.x) * (double)pFace->pFacePlane_old.vNormal.x < 0.0
- || (result = 1, pFace->uAttributes & 1) )
- result = 0;
- return result;
+ + (a2->vWorldPosition.x - (double)pIndoorCamera->pos.x) * (double)pFace->pFacePlane_old.vNormal.x < 0.0)
+ return false;
+
+ return true;
}
//----- (00438250) --------------------------------------------------------
@@ -562,7 +606,7 @@
while ( v10 < 1 );
if ( v10 < 1 )
{
- _436BB7_project_and_stuff(vert, 1u, 0);
+ Project(vert, 1u, 0);
LABEL_15:
pD3DVertices[0].pos.x = vert[0].vWorldViewProjX;
pD3DVertices[0].pos.y = vert[0].vWorldViewProjY;
@@ -623,7 +667,7 @@
//v19 = pRenderer->pRenderD3D->pDevice;
ErrD3D(pRenderer->pRenderD3D->pDevice->SetTexture(0, nullptr));
ErrD3D(pRenderer->pRenderD3D->pDevice->DrawPrimitive(D3DPT_POINTLIST,
- 452,
+ D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1,
pD3DVertices,
uNumD3DVertices,
16));
@@ -776,7 +820,7 @@
ErrD3D(pRenderer->pRenderD3D->pDevice->SetTexture(0, nullptr));
ErrD3D(pRenderer->pRenderD3D->pDevice->DrawPrimitive(
D3DPT_LINELIST,
- 452,
+ D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1,
v24,
2,
16));
@@ -815,7 +859,7 @@
|| (signed int)uOutNumVertices >= 2 )
{
ViewTransform(pVertices, 2u);
- _436BB7_project_and_stuff(pVertices, 2u, 0);
+ Project(pVertices, 2u, 0);
goto LABEL_11;
}
}
@@ -930,7 +974,7 @@
//----- (004378BA) --------------------------------------------------------
-void IndoorCameraD3D::MatrixMultiply(Matrix3x3_float_ *a1, Matrix3x3_float_ *a2, Matrix3x3_float_ *a3)
+void IndoorCameraD3D::MatrixMultiply(Matrix3x3_float_ *a1, Matrix3x3_float_ *a2, Matrix3x3_float_ *out)
{
float *v4; // ecx@1
float *v5; // eax@1
@@ -941,7 +985,7 @@
double v10; // st7@3
double v11; // st6@3
- v4 = (float *)a3;
+ v4 = (float *)out;
v5 = &a1->_12;
v6 = 3;
do
@@ -970,162 +1014,125 @@
//----- (004376E7) --------------------------------------------------------
void IndoorCameraD3D::CreateWorldMatrixAndSomeStuff()
{
- IndoorCameraD3D *v1; // esi@1
+ //IndoorCameraD3D *v1; // esi@1
double v2; // st7@1
- signed int v3; // edi@1
- int v4; // eax@1
- double v5; // st7@2
- double v6; // st7@3
- Matrix3x3_float_ a3; // [sp+10h] [bp-B8h]@1
- Matrix3x3_float_ v8; // [sp+34h] [bp-94h]@1
- Matrix3x3_float_ a2; // [sp+58h] [bp-70h]@1
- Matrix3x3_float_ v10; // [sp+7Ch] [bp-4Ch]@1
- Matrix3x3_float_ a1; // [sp+A0h] [bp-28h]@1
+ //signed int v3; // edi@1
+ //int v4; // eax@1
+ //double v5; // st7@2
+ //double v6; // st7@3
+ Matrix3x3_float_ m1; // [sp+10h] [bp-B8h]@1
+ Matrix3x3_float_ m2; // [sp+34h] [bp-94h]@1
+ Matrix3x3_float_ m3; // [sp+58h] [bp-70h]@1
+ Matrix3x3_float_ m4; // [sp+7Ch] [bp-4Ch]@1
+ Matrix3x3_float_ m5; // [sp+A0h] [bp-28h]@1
float v12; // [sp+C4h] [bp-4h]@1
- v1 = this;
- a1._13 = 0.0;
- a1._23 = 0.0;
- a1._31 = 0.0;
- a1._32 = 0.0;
- a1._33 = 1.0;
- v10._11 = 1.0;
- v10._12 = 0.0;
- v10._13 = 0.0;
- v10._21 = 0.0;
- v10._31 = 0.0;
- a2._12 = 0.0;
- a2._21 = 0.0;
- a2._22 = 1.0;
- a2._23 = 0.0;
- a2._32 = 0.0;
- v12 = cos(0.0);
- v2 = sin(0.0);
- a1._11 = v12;
- a1._12 = v2;
- a1._21 = -v2;
- a1._22 = v12;
- v10._22 = pIndoorCamera->fRotationXCosine;
- v10._32 = -pIndoorCamera->fRotationXSine;
- v10._23 = pIndoorCamera->fRotationXSine;
- v10._33 = pIndoorCamera->fRotationXCosine;
- a2._11 = pIndoorCamera->fRotationYCosine;
- a2._13 = -pIndoorCamera->fRotationYSine;
- a2._31 = pIndoorCamera->fRotationYSine;
- a2._33 = pIndoorCamera->fRotationYCosine;
- MatrixMultiply(&a1, &a2, &a3);
- MatrixMultiply(&v10, &a3, &v8);
- v3 = 0;
- v4 = (int)&v1->field_4.x;
- do
+ //RotationZ(0)
+ m5._11 = cosf(0); m5._12 = sinf(0); m5._13 = 0;
+ m5._21 = -sinf(0); m5._22 = cosf(0); m5._23 = 0;
+ m5._31 = 0; m5._32 = 0; m5._33 = 1;
+
+ float cos_x1 = pIndoorCamera->fRotationXCosine,
+ sin_x1 = pIndoorCamera->fRotationXSine;
+ //RotationX(x)
+ m4._11 = 1; m4._12 = 0; m4._13 = 0;
+ m4._21 = 0; m4._22 = cos_x1; m4._23 = sin_x1;
+ m4._31 = 0; m4._32 = -sin_x1; m4._33 = cos_x1;
+
+ float cos_y1 = pIndoorCamera->fRotationYCosine,
+ sin_y1 = pIndoorCamera->fRotationYSine;
+ //RotationY(some_angle)
+ m3._11 = cos_y1; m3._12 = 0; m3._13 = -sin_y1;
+ m3._21 = 0; m3._22 = 1; m3._23 = 0;
+ m3._31 = sin_y1; m3._32 = 0; m3._33 = cos_y1;
+
+ MatrixMultiply(&m5, &m3, &m1);
+ MatrixMultiply(&m4, &m1, &m2);
+
+ for (uint i = 0; i < 3; ++i)
{
- v5 = *(&v8._11 + v3++);
- *(float *)(v4 + 16) = v5;
- *(float *)v4 = *(float *)((char *)&v8._12 - (char *)v1 + v4);
- *(float *)(v4 + 32) = *(float *)((char *)&v8._22 - (char *)v1 + v4);
- v4 += 4;
+ field_4[0].v[i] = m2.v[1][i];
+ field_4[1].v[i] = m2.v[0][i];
+ field_4[2].v[i] = m2.v[2][i];
}
- while ( v3 < 3 );
- LODWORD(v1->field_D8) = 0x3F91361Du;
- v1->flt_D0 = (double)pViewport->uScreenWidth * 0.8814736;
- v6 = 0.8814736 * (double)pViewport->uScreenHeight;
- v1->flt_D4 = v6;
- if ( v1->flt_D0 > v6 )
- v6 = v1->flt_D0;
- v1->flt_fov = v6;
- v1->field_C8 = (double)pViewport->uScreenCenterX;
- v1->field_CC = (double)(pViewport->uScreenCenterY - pViewport->uScreenY);
+
+ inv_fov = 1.1344639;
+ fov_x = (double)pViewport->uScreenWidth * 0.8814736;
+
+ fov_y = 0.8814736 * (double)pViewport->uScreenHeight;
+ fov = fov_y;
+ if ( fov_x > fov )
+ fov = fov_x;
+ screenCenterX = (double)pViewport->uScreenCenterX;
+ screenCenterY = (double)(pViewport->uScreenCenterY - pViewport->uScreenY);
}
//----- (00437691) --------------------------------------------------------
-IndoorCameraD3D_Vec3 *IndoorCameraD3D::Vec3Transform(const IndoorCameraD3D_Vec3 *pVector, IndoorCameraD3D_Vec3 *pOut)
+void IndoorCameraD3D::Vec3Transform(const IndoorCameraD3D_Vec3 *pVector, IndoorCameraD3D_Vec3 *pOut)
{
- IndoorCameraD3D_Vec3 *result; // eax@1
-
- result = (IndoorCameraD3D_Vec3 *)pVector;
- pOut->y = this->field_14.x * pVector->x + this->field_4.x * pVector->y + this->field_24.x * pVector->z;
- pOut->z = this->field_14.y * result->x + this->field_4.y * result->y + this->field_24.y * result->z;
- pOut->x = this->field_14.z * result->x + this->field_4.z * result->y + this->field_24.z * pVector->z;
- return result;
+ pOut->y = field_4[1].x * pVector->x + field_4[0].x * pVector->y + field_4[2].x * pVector->z;
+ pOut->z = field_4[1].y * pVector->x + field_4[0].y * pVector->y + field_4[2].y * pVector->z;
+ pOut->x = field_4[1].z * pVector->x + field_4[0].z * pVector->y + field_4[2].z * pVector->z;
}
//----- (00437607) --------------------------------------------------------
void IndoorCameraD3D::_437607(IndoorCameraD3D_Vec3 *a1, IndoorCameraD3D_Vec4 *a2)
{
- IndoorCameraD3D *v3; // edi@1
double v4; // st7@1
- signed int v5; // ecx@1
- char *v6; // eax@1
- double v7; // st6@2
IndoorCameraD3D_Vec3 v8; // [sp+8h] [bp-1Ch]@1
- Vec3_float_ v9; // [sp+Ch] [bp-18h]@1
- int v10; // [sp+20h] [bp-4h]@1
- v3 = this;
- //IndoorCameraD3D_Vec3::IndoorCameraD3D_Vec3(&v8);
- v10 = 0;
- v9.x = (double)pIndoorCamera->pos.x;
- v9.y = (double)pIndoorCamera->pos.y;
- v9.z = (double)pIndoorCamera->pos.z;
+ v8.x = (double)pIndoorCamera->pos.x;
+ v8.y = (double)pIndoorCamera->pos.y;
+ v8.z = (double)pIndoorCamera->pos.z;
Vec3Transform(a1, a2);
- v4 = 0.0;
- v5 = 0;
- v6 = (char *)&a2->x;
- do
- {
- v7 = *(&v9.x + v5++) * *(float *)v6;
- v6 += 4;
- v4 = v4 + v7;
- }
- while ( v5 < 3 );
- v10 = -1;
+
+ v4 = v8.x * a2->x + v8.y * a2->y + v8.z * a2->z;
a2->dot = v4 + 0.000099999997;
- //IndoorCameraD3D_Vec3::dtor(&v8);
}
//----- (004374E8) --------------------------------------------------------
void IndoorCameraD3D::_4374E8_ProllyBuildFrustrum()
{
- IndoorCameraD3D *v1; // esi@1
- double v2; // st7@1
+ //IndoorCameraD3D *v1; // esi@1
+ //double v2; // st7@1
double v3; // st7@1
- double v4; // st7@1
+ //double v4; // st7@1
double v5; // st7@1
- double v6; // st7@1
+ //double v6; // st7@1
IndoorCameraD3D_Vec3 v7; // [sp+Ch] [bp-24h]@1
- float v8; // [sp+10h] [bp-20h]@1
- float v9; // [sp+14h] [bp-1Ch]@1
- float v10; // [sp+18h] [bp-18h]@1
- float v11; // [sp+1Ch] [bp-14h]@1
- float v12; // [sp+20h] [bp-10h]@1
- int v13; // [sp+2Ch] [bp-4h]@1
+ //float v8; // [sp+10h] [bp-20h]@1
+ //float v9; // [sp+14h] [bp-1Ch]@1
+ //float v10; // [sp+18h] [bp-18h]@1
+ //float v11; // [sp+1Ch] [bp-14h]@1
+ //float v12; // [sp+20h] [bp-10h]@1
+ //int v13; // [sp+2Ch] [bp-4h]@1
- v1 = this;
+ //v1 = this;
//IndoorCameraD3D_Vec3::IndoorCameraD3D_Vec3(&v7);
- v2 = 2.0 / v1->field_D8;
- v13 = 0;
- v3 = atan(v2 * v1->flt_fov / v1->flt_D0);
- v12 = v3;
- v11 = sin(v3);
- v4 = cos(v12);
- v8 = -v11;
- v9 = 0.0;
- v10 = v4;
- _437607(&v7, v1->std__vector_000034_prolly_frustrum);
- v8 = v11;
- _437607(&v7, &v1->std__vector_000034_prolly_frustrum[1]);
- v5 = atan(2.0 / v1->field_D8 * v1->flt_fov / (v1->flt_D4 + 0.5));
- v12 = v5;
- v11 = sin(v5);
- v6 = cos(v12);
- v9 = v11;
- v8 = 0.0;
- v10 = v6;
- _437607(&v7, &v1->std__vector_000034_prolly_frustrum[2]);
- v9 = -v11;
- _437607(&v7, &v1->std__vector_000034_prolly_frustrum[3]);
- v13 = -1;
+ //v2 = 2.0 / inv_fov;
+ //v13 = 0;
+ v3 = atan(2.0 / inv_fov * fov / fov_x);
+ //v12 = v3;
+ //v11 = sin(v3);
+ //v4 = cos(v3);
+ v7.x = -sin(v3);
+ v7.y = 0.0;
+ v7.z = cos(v3);
+ _437607(&v7, std__vector_000034_prolly_frustrum);
+ v7.x = sin(v3);
+ _437607(&v7, &std__vector_000034_prolly_frustrum[1]);
+ v5 = atan(2.0 / inv_fov * fov / (fov_y + 0.5));
+ //v12 = v5;
+ //v11 = sin(v5);
+ //v6 = cos(v5);
+ v7.y = sin(v5);
+ v7.x = 0.0;
+ v7.z = cos(v5);
+ _437607(&v7, &std__vector_000034_prolly_frustrum[2]);
+ v7.y = -sin(v5);
+ _437607(&v7, &std__vector_000034_prolly_frustrum[3]);
+ //v13 = -1;
//IndoorCameraD3D_Vec3::dtor(&v7);
}
@@ -1155,9 +1162,9 @@
if ( (signed int)*pOutNumVertices <= 3
|| ((v5 = a2,
memcpy(&v18, a2, sizeof(v18)),
- (v18.vWorldPosition.z - (double)pBLVRenderParams->vPartyPos.z) * thisa->vNormal.z
- + (v18.vWorldPosition.y - (double)pBLVRenderParams->vPartyPos.y) * thisa->vNormal.y
- + (v18.vWorldPosition.x - (double)pBLVRenderParams->vPartyPos.x) * thisa->vNormal.x < 0.0) ? (v6 = 1.0) : (v6 = -1.0),
+ (v18.vWorldPosition.z - (double)pBLVRenderParams->vPartyPos.z) * thisa->face_plane.vNormal.z
+ + (v18.vWorldPosition.y - (double)pBLVRenderParams->vPartyPos.y) * thisa->face_plane.vNormal.y
+ + (v18.vWorldPosition.x - (double)pBLVRenderParams->vPartyPos.x) * thisa->face_plane.vNormal.x < 0.0) ? (v6 = 1.0) : (v6 = -1.0),
a2_3 = 0,
memcpy(&v5[v4], v5, sizeof(v5[v4])),
memcpy(&v5[*pOutNumVertices + 1], &v5[1], sizeof(v5[*pOutNumVertices + 1])),
@@ -1225,50 +1232,39 @@
{
char *v8; // eax@2
signed int v9; // ecx@2
- bool result; // eax@5
+ //bool result; // eax@5
int v11; // ecx@5
- signed int v12; // ecx@6
- char *v13; // esi@6
+ //signed int v12; // ecx@6
+ //char *v13; // esi@6
RenderVertexSoft *v14; // eax@8
RenderVertexSoft *v15; // edx@8
Vec3_float_ a5; // [sp+18h] [bp-3Ch]@12
float v17; // [sp+44h] [bp-10h]@1
int v18; // [sp+48h] [bp-Ch]@5
- stru9 *thisa; // [sp+4Ch] [bp-8h]@1
+ //stru9 *thisa; // [sp+4Ch] [bp-8h]@1
int a7a; // [sp+53h] [bp-1h]@5
- bool a6a; // [sp+70h] [bp+1Ch]@5
+ //bool a6a; // [sp+70h] [bp+1Ch]@5
v17 = 0.0;
- thisa = pGame->pStru9Instance;
+ //thisa = pGame->pStru9Instance;
static RenderVertexSoft sr_vertices_50D9D8[64];
- static bool __init_flag1 = false;
- if (!__init_flag1)
- {
- __init_flag1 = true;
- for (uint i = 0; i < 64; ++i)
- sr_vertices_50D9D8[i].flt_2C = 0.0f;
- }
-
- result = 0;
- LOBYTE(a7a) = 0;
+ //result = 0;
+ a7a = 0;
v11 = 2 * (a6 == 0) + 1;
- a6a = 0;
+ //a6a = 0;
v18 = v11;
- if ( uNumVertices <= 0 )
- {
-LABEL_14:
- LOBYTE(result) = a7a;
- }
- else
- {
- v12 = *pOutNumVertices;
- v13 = (char *)&a4->y;
+ if (uNumVertices <= 0)
+ return false;
+
+ //v12 = *pOutNumVertices;
+ //v13 = (char *)&a4->y;
+ uint i = 0;
while ( 1 )
{
- if ( result % 2 )
+ if (i % 2)
{
v14 = a1;
v15 = sr_vertices_50D9D8;
@@ -1278,27 +1274,23 @@
v15 = a1;
v14 = sr_vertices_50D9D8;
}
- ++a6a;
- if ( a6a == uNumVertices )
+ if (i == uNumVertices - 1)
v14 = pVertices;
- a5.x = *((float *)v13 - 1);
- a5.y = *(float *)v13;
- a5.z = *((float *)v13 + 1);
- result = thisa->_4985FB(v15, v12, v14, pOutNumVertices, &a5, *((float *)v13 + 2), (char *)&a7a, _unused);
- v12 = *pOutNumVertices;
- if ( (signed int)*pOutNumVertices < v18 )
+ a5.x = a4[i].x;
+ a5.y = a4[i].y;
+ a5.z = a4[i].z;
+ pGame->pStru9Instance->_4985FB(v15, *pOutNumVertices, v14, pOutNumVertices, &a5, a4[i].dot, (char *)&a7a, _unused);
+ //v12 = *pOutNumVertices;
+ if (*pOutNumVertices < v18)
break;
- result = a6a;
- v13 += 24;
- if ( a6a >= uNumVertices )
- goto LABEL_14;
+ //result = a6a;
+ //v13 += 24;
+ if (++i >= uNumVertices)
+ return a7a;
}
*pOutNumVertices = 0;
- LOBYTE(result) = 1;
- }
- return result;
+ return true;
}
-// 50E5D8: using guessed type char static_50D9D8_init_flag_bit1;
//----- (004371C3) --------------------------------------------------------
bool IndoorCameraD3D::_4371C3(RenderVertexSoft *pVertices, unsigned int *pOutNumVertices, int _unused)
@@ -1399,7 +1391,7 @@
return result;
}
//----- (00436F09) --------------------------------------------------------
-void IndoorCameraD3D::_436F09(RenderVertexSoft *pInVertices, int uNumInVertices, RenderVertexSoft *pOutVertices, unsigned int *pOutNumVertices)
+void IndoorCameraD3D::_436F09_mess_with_lightmap__clipflag_4(RenderVertexSoft *pInVertices, int uNumInVertices, RenderVertexSoft *pOutVertices, unsigned int *pOutNumVertices)
{
unsigned int *pOutNumVertices_; // ebx@1
double v6; // st7@2
@@ -1502,7 +1494,7 @@
//----- (00436CDC) --------------------------------------------------------
-void IndoorCameraD3D::_436CDC(RenderVertexSoft *pInVertices, int uNumInVertices, RenderVertexSoft *pOutVertices, unsigned int *pOutNumVertices)
+void IndoorCameraD3D::_436CDC_mess_with_lightmap__clipflag_2(RenderVertexSoft *pInVertices, int uNumInVertices, RenderVertexSoft *pOutVertices, unsigned int *pOutNumVertices)
{
signed int v5; // esi@2
char *v6; // edx@5
@@ -1598,11 +1590,8 @@
//----- (00436BB7) --------------------------------------------------------
-void IndoorCameraD3D::_436BB7_project_and_stuff(RenderVertexSoft *pVertices, unsigned int uNumVertices, char a4)
+void IndoorCameraD3D::Project(RenderVertexSoft *pVertices, unsigned int uNumVertices, char a4)
{
- unsigned int v4; // ebx@1
- IndoorCameraD3D *v5; // edi@1
- float *v6; // esi@2
double v7; // st7@7
double v8; // st7@9
double v9; // st6@10
@@ -1613,65 +1602,59 @@
float uNumVerticesa; // [sp+14h] [bp+Ch]@13
float uNumVerticesb; // [sp+14h] [bp+Ch]@20
- v4 = uNumVertices;
- v5 = this;
- if ( (signed int)uNumVertices > 0 )
+ for (uint i = 0; i < uNumVertices; ++i)
{
- v6 = &pVertices->vWorldViewProjX;
- do
+ if (byte_4D864C && pGame->uFlags & 0x80 || uCurrentlyLoadedLevelType == LEVEL_Indoor)
{
- if ( byte_4D864C && pGame->uFlags & 0x80 || uCurrentlyLoadedLevelType == LEVEL_Indoor)
- {
- v7 = 1.0 / *(v6 - 3);
- *v6 = *(v6 - 2) * v5->flt_fov * v7 + v5->field_C8;
- v6[1] = (double)(signed int)pViewport->uViewportW - (*(v6 - 1) * v5->flt_fov * v7 + v5->field_CC);
- }
- else
- {
- extern void _outdoor_project(RenderVertexSoft *v);
- _outdoor_project((RenderVertexSoft *)(v6 - 6));
- }
+ v7 = 1.0 / pVertices[i].vWorldViewPosition.x;
+
+ pVertices[i].vWorldViewProjX = pVertices[i].vWorldViewPosition.y * fov * v7 + screenCenterX;
+ pVertices[i].vWorldViewProjY = (signed int)pViewport->uViewportW - (pVertices[i].vWorldViewPosition.z * fov * v7 + screenCenterY);
+ }
+ else
+ {
+ extern void _outdoor_project(RenderVertexSoft *v);
+ _outdoor_project(pVertices + i);
+ }
+
if ( a4 )
{
+ __debugbreak();
v8 = (double)(signed int)pViewport->uViewportZ;
- if ( v8 >= *v6 )
- v9 = *v6;
+ if ( v8 >= pVertices[i].vWorldViewProjX )
+ v9 = pVertices[i].vWorldViewProjX;
else
v9 = v8;
v10 = (double)(signed int)pViewport->uViewportX;
if ( v10 <= v9 )
{
- if ( v8 >= *v6 )
- v8 = *v6;
+ if ( v8 >= pVertices[i].vWorldViewProjX)
+ v8 = pVertices[i].vWorldViewProjX;
}
else
{
uNumVerticesa = v10;
v8 = uNumVerticesa;
}
- *v6 = v8;
+ pVertices[i].vWorldViewProjX = v8;
v11 = (double)(signed int)pViewport->uViewportW;
- if ( v11 >= v6[1] )
- v12 = v6[1];
+ if ( v11 >= pVertices[i].vWorldViewProjY)
+ v12 = pVertices[i].vWorldViewProjY;
else
v12 = v11;
v13 = (double)(signed int)pViewport->uViewportY;
if ( v13 <= v12 )
{
- if ( v11 >= v6[1] )
- v11 = v6[1];
+ if ( v11 >= pVertices[i].vWorldViewProjY)
+ v11 = pVertices[i].vWorldViewProjY;
}
else
{
uNumVerticesb = v13;
v11 = uNumVerticesb;
}
- v6[1] = v11;
+ pVertices[i].vWorldViewProjY = v11;
}
- v6 += 12;
- --v4;
- }
- while ( v4 );
}
}
@@ -1680,8 +1663,8 @@
void IndoorCameraD3D::Project(signed int x, signed int y, signed int z, int *a5, int *a6)
{
double v6; // ST00_8@2
- double v7; // ST08_8@2
- double v8; // ST00_8@2
+ //double v7; // ST08_8@2
+ //double v8; // ST00_8@2
signed __int64 v9; // qtt@3
int v10; // ST04_4@3
float a2a; // [sp+18h] [bp+8h]@2
@@ -1690,12 +1673,12 @@
if ( pRenderer->pRenderD3D )
{
v6 = 1.0 / (double)x;
- a2a = (double)y * this->flt_fov * v6 + this->field_C8;
- v7 = a2a + 6.7553994e15;
- *a5 = LODWORD(v7);
- a2b = (double)z * this->flt_fov * v6 + this->field_CC;
- v8 = a2b + 6.7553994e15;
- *a6 = pViewport->uViewportW - LODWORD(v8);
+ a2a = (double)y * fov * v6 + screenCenterX;
+ //v7 = a2a + 6.7553994e15;
+ *a5 = floorf(a2a + 0.5f);
+ a2b = (double)z * fov * v6 + screenCenterY;
+ //v8 = a2b + 6.7553994e15;
+ *a6 = pViewport->uViewportW - floorf(a2b + 0.5f);
}
else
{
diff -r c83d06692295 -r c0cf9393af64 IndoorCameraD3D.h
--- a/IndoorCameraD3D.h Mon Oct 22 09:20:49 2012 +0600
+++ b/IndoorCameraD3D.h Mon Oct 29 09:28:08 2012 +0600
@@ -15,9 +15,17 @@
//void ~IndoorCameraD3D_Vec3() {}
void (__thiscall ***vdestructor_ptr)(IndoorCameraD3D_Vec3 *, bool);
- float x;
- float y;
- float z;
+
+ union
+ {
+ struct
+ {
+ float x;
+ float y;
+ float z;
+ };
+ float v[3];
+ };
};
#pragma pack(pop)
@@ -121,16 +129,16 @@
double GetPolygonMinZ(struct RenderVertexSoft *pVertices, unsigned int uStripType);
struct IDirect3DTexture2 *LoadTextureAndGetHardwarePtr(char *Str1);
void Project(signed int x, signed int y, signed int z, int *a5, int *a6);
- void _436BB7_project_and_stuff(struct RenderVertexSoft *pVertices, unsigned int uNumVertices, char a4);
- void _436CDC(struct RenderVertexSoft *pInVertices, int uNumInVertices, struct RenderVertexSoft *pOutVertices, unsigned int *pOutNumVertices);
- void _436F09(struct RenderVertexSoft *pInVertices, int uNumInVertices, struct RenderVertexSoft *pOutVertices, unsigned int *pOutNumVertices);
+ void Project(struct RenderVertexSoft *pVertices, unsigned int uNumVertices, char a4);
+ void _436CDC_mess_with_lightmap__clipflag_2(struct RenderVertexSoft *pInVertices, int uNumInVertices, struct RenderVertexSoft *pOutVertices, unsigned int *pOutNumVertices);
+ void _436F09_mess_with_lightmap__clipflag_4(struct RenderVertexSoft *pInVertices, int uNumInVertices, struct RenderVertexSoft *pOutVertices, unsigned int *pOutNumVertices);
int _437143(unsigned int uNumInVertices, struct RenderVertexSoft *pOutVertices, struct RenderVertexSoft *pInVertices, unsigned int *pOutNumVertices);
bool _4371C3(struct RenderVertexSoft *pVertices, unsigned int *pOutNumVertices, int _unused);
bool _437285_prolly_colide_vertices_against_frustrum(struct RenderVertexSoft *a1, unsigned int *pOutNumVertices, struct RenderVertexSoft *pVertices, IndoorCameraD3D_Vec4 *a4, signed int uNumVertices, char a6, int _unused);
char _437376(struct stru154 *thisa, struct RenderVertexSoft *a2, unsigned int *pOutNumVertices);
void _4374E8_ProllyBuildFrustrum();
void _437607(IndoorCameraD3D_Vec3 *a1, IndoorCameraD3D_Vec4 *a2);
- IndoorCameraD3D_Vec3 *Vec3Transform(const IndoorCameraD3D_Vec3 *pVector, IndoorCameraD3D_Vec3 *pOut);
+ void Vec3Transform(const IndoorCameraD3D_Vec3 *pVector, IndoorCameraD3D_Vec3 *pOut);
void CreateWorldMatrixAndSomeStuff();
void MatrixMultiply(struct Matrix3x3_float_ *a1, struct Matrix3x3_float_ *a2, struct Matrix3x3_float_ *a3);
void PrepareAndDrawDebugOutline(struct BLVFace *pFace, unsigned int uDiffuse);
@@ -142,24 +150,24 @@
void _438141_draw_list_0037C();
void _438240_draw_lits();
void Reset_list_0037C();
- bool is_vertex_with_normal_from_face_towards_camera(struct BLVFace *pFace, struct RenderVertexSoft *a2);
- char GetFacetOrientation(char a1, struct Vec3_float_ *a2, struct Vec3_float_ *a3, struct Vec3_float_ *a4);
+ bool is_face_faced_to_camera(struct BLVFace *pFace, struct RenderVertexSoft *a2);
+ bool GetFacetOrientation(char polyType, struct Vec3_float_ *a2, struct Vec3_float_ *a3, struct Vec3_float_ *a4);
void ViewTransform(struct RenderVertexSoft *a1a, unsigned int uNumVertices);
- bool IsFaceFacedTowardsCamera(struct BLVFace *pFace);
- void _4364C5(struct RenderVertexSoft *pVertices, unsigned int uNumVertices, struct RenderVertexSoft *a1, struct stru320 *a5);
+ bool IsCulled(struct BLVFace *pFace);
+ void ViewTransfrom_OffsetUV(struct RenderVertexSoft *pVertices, unsigned int uNumVertices, struct RenderVertexSoft *pOutVertices, struct stru320 *a5);
char ApplyViewTransform_TrueIfStillVisible(int x, int y, int z, signed int *pOutX, int *pOutZ, int *pOutY, char bDoNotShow);
void (__thiscall ***vdestructor_ptr)(IndoorCameraD3D *, bool);
- IndoorCameraD3D_Vec3 field_4;
- IndoorCameraD3D_Vec3 field_14;
- IndoorCameraD3D_Vec3 field_24;
+ IndoorCameraD3D_Vec3 field_4[3];
+ //IndoorCameraD3D_Vec3 field_14;
+ //IndoorCameraD3D_Vec3 field_24;
IndoorCameraD3D_Vec4 std__vector_000034_prolly_frustrum[6];
- float flt_fov;
- float field_C8;
- float field_CC;
- float flt_D0;
- float flt_D4;
- float field_D8;
+ float fov;
+ float screenCenterX;
+ float screenCenterY;
+ float fov_x;
+ float fov_y;
+ float inv_fov;
float field_DC;
float field_E0;
float field_E4;
diff -r c83d06692295 -r c0cf9393af64 Indoor_stuff.h
--- a/Indoor_stuff.h Mon Oct 22 09:20:49 2012 +0600
+++ b/Indoor_stuff.h Mon Oct 29 09:28:08 2012 +0600
@@ -74,19 +74,22 @@
// _eh_vector_constructor_iterator_(field_FA8, 2252, 150,
// (void (__thiscall *)(void *))stru170_stru0::stru170_stru0,
// (void (__thiscall *)(void *))stru170_stru0::dtor);
+ uNumFaceIDs = 0;
+ std__vector_000FA8 = 0;
+ uNumVisibleNotEmptySectors = 0;
}
- void _4AFB86(int a2, unsigned int uFaceID);
- void _4B0EA8(signed int a2, unsigned int uFaceID);
- int RenderWalls();
+ void PrepareFaceRenderList_sw(int a2, unsigned int uFaceID);
+ void PrepareFaceRenderList_d3d(signed int a2, unsigned int uFaceID);
+ void MakeVisibleSectorList();
unsigned int uNumFaceIDs;
__int16 pFaceIDs[150];
char field_130[3700];
unsigned int std__vector_000FA8;
stru170_stru0 field_FA8[150];
- int field_53730;
- unsigned __int16 pSectorIDs_toDrawDecorationsFrom[6];
+ unsigned int uNumVisibleNotEmptySectors;
+ unsigned __int16 pVisibleSectorIDs_toDrawDecorsActorsEtcFrom[6];
};
#pragma pack(pop)
@@ -108,11 +111,11 @@
char field_3;
char field_4;
char field_5;
- __int16 field_6;
- __int16 field_8;
- __int16 field_A;
- __int16 field_C;
- __int16 field_E;
+ __int16 field_6_rnd_value;
+ __int16 field_8_rnd_value;
+ __int16 field_A_rnd_value;
+ __int16 field_C_time_left;
+ __int16 field_E_time_to_live;
char field_10;
char field_11;
char field_12;
@@ -158,7 +161,7 @@
Plane_int_ plane_4;
Vec3_int_ vec_14;
Vec3_int_ vec_20;
- int field_2C;
+ unsigned int uCurrentAmbientLightLevel;
int field_30;
int field_34;
int field_38;
@@ -176,7 +179,7 @@
int field_98;
Vec3_int_ vec_9C;
int field_A8;
- int field_AC;
+ unsigned int uNumLightsApplied;
int _blv_lights_radii[20];
int _blv_lights_inv_radii[20];
int _blv_lights_xs[20];
@@ -206,13 +209,13 @@
float _blv_lights_rs[20];
float _blv_lights_gs[20];
float _blv_lights_bs[20];
- char _blv_lights_smthngs[20];
+ char _blv_lights_types[20];
int field_3E4;
int field_3E8;
int field_3EC;
int field_3F0;
int field_3F4;
- int field_3F8;
+ unsigned int uDefaultAmbientLightLevel;
};
#pragma pack(pop)
@@ -372,14 +375,13 @@
{}
int _49B04D(struct ODMFace *a2, struct BSPVertexBuffer *a3);
- int _49B0C9(struct Vec3_float_ *pNormal, float a3);
+ int _49B0C9(struct Vec3_float_ *pNormal, float dist);
int _49B13D(struct ODMFace *pFace, struct BSPVertexBuffer *pVertices, struct Vec3_float_ *a3, float *a4);
void (__thiscall ***vdestructor_ptr)(stru154 *, bool);
- Vec3_float_ vNormal;
- float field_10;
- char field_14;
+ Plane_float_ face_plane;
+ PolygonType polygonType;
char field_15;
char field_16;
char field_17;
diff -r c83d06692295 -r c0cf9393af64 Items.cpp
--- a/Items.cpp Mon Oct 22 09:20:49 2012 +0600
+++ b/Items.cpp Mon Oct 29 09:28:08 2012 +0600
@@ -1752,11 +1752,11 @@
v4 = item__getname_buffer;
v10 = "%s";
LABEL_10:
- sprintfex(v4, v10, v11);
+ sprintf(v4, v10, v11);
return v4;
}
v4 = item__getname_buffer;
- sprintfex(item__getname_buffer, "%s", pItemsTable->pItems[v2].pName);
+ sprintf(item__getname_buffer, "%s", pItemsTable->pItems[v2].pName);
if ( v1->uItemID == 601 )
{
v5 = v1->field_1A;
@@ -1802,7 +1802,7 @@
|| v7 == 67
|| v7 == 68 )
{
- sprintfex(
+ sprintf(
item__getname_buffer,
"%s %s",
*(unsigned int *)&pItemsTable->pEnchantments[22].field_8[28 * v7 + 8],
@@ -1868,7 +1868,7 @@
unsigned int v48; // ecx@123
int v49; // eax@123
int v50; // eax@123
- unsigned int Dst; // [sp+Ch] [bp-C88h]@33
+ unsigned char Dst[0xC80]; // [sp+Ch] [bp-C88h]@33
int v52; // [sp+C8Ch] [bp-8h]@33
int v53; // [sp+C90h] [bp-4h]@1
int v54; // [sp+C9Ch] [bp+8h]@3
@@ -2021,13 +2021,13 @@
v10 = 0;
if ( v52 )
v10 = rand() % v52;
- v4->uItemID = Dst;
+ v4->uItemID = *(uint *)Dst;
if ( !Dst )
v4->uItemID = 1;
v11 = *(&v5->pItems[v4->uItemID].field_2C + v54);
if ( v11 < v10 )
{
- v12 = &Dst;
+ v12 = (uint *)Dst;
do
{
++v12;
@@ -2226,9 +2226,9 @@
while ( a2b < v5->field_11798 );
}
v45 = rand();
- v4->uAdditionalValue = Dst;
+ v4->uAdditionalValue = *(uint *)Dst;
v46 = v45 % v39 + 1;
- a2c = *((unsigned char *)&v5->pItems[0].uItemID + 28 * (Dst + 1389) + v5->pItems[v4->uItemID].uEquipType);
+ a2c = *((unsigned char *)&v5->pItems[0].uItemID + 28 * (*(uint *)Dst + 1389) + v5->pItems[v4->uItemID].uEquipType);
if ( a2c < v46 )
{
for ( j = (int *)&Dst; ; j = (int *)v59 )
diff -r c83d06692295 -r c0cf9393af64 Keyboard.cpp
--- a/Keyboard.cpp Mon Oct 22 09:20:49 2012 +0600
+++ b/Keyboard.cpp Mon Oct 29 09:28:08 2012 +0600
@@ -716,9 +716,9 @@
return VK_UP;
if ( !strcmp(Str, "DOWN") )
return VK_DOWN;
- if ( !strcmp(Str, ascii_4E2D48) )
+ if (!strcmp(Str, "") || !strcmp(Str, "LEFT"))
return VK_LEFT;
- if ( !strcmp(Str, ascii_4E2D40) )
+ if (!strcmp(Str, "") || !strcmp(Str, "RIGHT"))
return VK_RIGHT;
if ( !strcmp(Str, "RETURN") )
return VK_RETURN;
diff -r c83d06692295 -r c0cf9393af64 LOD.cpp
--- a/LOD.cpp Mon Oct 22 09:20:49 2012 +0600
+++ b/LOD.cpp Mon Oct 29 09:28:08 2012 +0600
@@ -585,13 +585,13 @@
v49 = v7;
v69 = v3->uTargetPitch;
pTarget = v3->pTarget;
- v57 = v3->field_28;
+ v57 = v3->sZValue;
v61 = v3->pPalette;
v9 = (v6 * this->uWidth + 32768) >> 16;
- v72 = v3->field_C;
+ v72 = v3->uScreenSpaceY;
result = (v5 * v7 + 32768) >> 16;
v10 = (int *)(v72 - result + 1);
- v11 = v3->field_8 - (v9 >> 1) + 1;
+ v11 = v3->uScreenSpaceX - (v9 >> 1) + 1;
v65 = v72 - result + 1;
v59 = v11 + v9 - 1;
if ( BYTE1(v3->uFlags) & 8 )
@@ -602,7 +602,7 @@
}
v12 = v72;
pTargetZ = v10;
- v75 = v3->field_8 - (v9 >> 1) + 1;
+ v75 = v3->uScreenSpaceX - (v9 >> 1) + 1;
v79 = v11 + v9 - 1;
if ( !(v3->uFlags & 8) )
{
@@ -881,7 +881,7 @@
v16 = a2->pTarget;
v15 = a2->pPalette;
v5 = this->uHeight - 1;
- for ( i = v4 * a2->field_C - (this->uWidth >> 1) + a2->field_8 + 1; v5 >= 0; --v5 )
+ for ( i = v4 * a2->uScreenSpaceY - (this->uWidth >> 1) + a2->uScreenSpaceX + 1; v5 >= 0; --v5 )
{
v6 = &this->pSpriteLines[v5];
v7 = LOWORD(v6->dword_0);
@@ -2416,7 +2416,7 @@
File = FindContainer("pending", 0);
if ( !File )
{
- sprintfex(Args, "Can't find %s!", pContainer);
+ sprintf(Args, "Can't find %s!", pContainer);
Abortf(Args);
}
}
diff -r c83d06692295 -r c0cf9393af64 LayingItem.cpp
--- a/LayingItem.cpp Mon Oct 22 09:20:49 2012 +0600
+++ b/LayingItem.cpp Mon Oct 29 09:28:08 2012 +0600
@@ -36,8 +36,8 @@
v1 = this;
pMapInfo = &pMapStats->pInfos[pMapStats->GetMapInfo(pCurrentMapName)];
v3 = abs(pParty->vPosition.x - v1->vPosition.x);
- v15 = abs(pParty->vPosition.z - v1->vPosition.y);
- v16 = abs(pParty->vPosition.y + pParty->sEyelevel - v1->vPosition.z);
+ v15 = abs(pParty->vPosition.y - v1->vPosition.y);
+ v16 = abs(pParty->vPosition.z + pParty->sEyelevel - v1->vPosition.z);
v4 = v3;
v5 = v15;
v6 = v16;
diff -r c83d06692295 -r c0cf9393af64 LightmapBuilder.cpp
--- a/LightmapBuilder.cpp Mon Oct 22 09:20:49 2012 +0600
+++ b/LightmapBuilder.cpp Mon Oct 29 09:28:08 2012 +0600
@@ -2,6 +2,7 @@
#include "Game.h"
#include "stru314.h"
#include "Outdoor.h"
+#include "Log.h"
#include "mm7_data.h"
@@ -12,11 +13,11 @@
LightsStack_StationaryLight_ *pStationaryLightsStack = new LightsStack_StationaryLight_;
-StationaryLight pStationaryLights[400];
-int uNumStationaryLightsApplied; // weak
+//StationaryLight pStationaryLights[400];
+//int uNumStationaryLightsApplied; // weak
LightsStack_MobileLight_ *pMobileLightsStack = new LightsStack_MobileLight_;
-MobileLight pMobileLights[400];
-int uNumMobileLightsApplied;
+//MobileLight pMobileLights[400];
+//int uNumMobileLightsApplied;
@@ -35,11 +36,6 @@
//----- (0045BB06) --------------------------------------------------------
LightmapBuilder::LightmapBuilder()
{
- //std__vector_000004.reserve(512);
- //std__vector_183808.reserve(768);
-
- for (uint i = 0; i < 256; ++i)
- field_3C8C34[i].flt_2C = 0.0f;
}
@@ -47,185 +43,85 @@
//----- (0045BC07) --------------------------------------------------------
-char LightmapBuilder::ApplyLights(stru320 *a2, stru154 *a3, unsigned int uNumVertices, RenderVertexSoft *a5, float a6, char a7)
+bool LightmapBuilder::ApplyLights(stru320 *a2, stru154 *a3, unsigned int uNumVertices, RenderVertexSoft *a5, IndoorCameraD3D_Vec4 *a6, char uClipFlag)
{
- char *v7; // eax@3
- signed int v8; // ecx@3
- RenderVertexSoft *v9; // eax@10
- unsigned int v10; // edx@10
- const void *v11; // esi@11
- void *v12; // edi@11
- char v13; // zf@11
- stru154 *v14; // esi@12
- double v16; // st7@17
- double v17; // st6@17
- float v18; // eax@17
- int *v19; // esi@20
- double v20; // st7@21
- int v21; // eax@21
- unsigned int v22; // eax@21
- int v23; // ecx@23
- float v24; // ST04_4@23
- float v25; // [sp+8h] [bp-64h]@18
- Vec3_float_ *v26; // [sp+18h] [bp-54h]@17
- int v27; // [sp+1Ch] [bp-50h]@17
- int arg0; // [sp+2Ch] [bp-40h]@21
- int v29; // [sp+30h] [bp-3Ch]@21
- int v30; // [sp+34h] [bp-38h]@21
- //double v31; // [sp+38h] [bp-34h]@21
- //double v32; // [sp+40h] [bp-2Ch]@21
- //double v33; // [sp+48h] [bp-24h]@21
- int v34; // [sp+50h] [bp-1Ch]@24
- LightmapBuilder *thisa; // [sp+54h] [bp-18h]@1
- int v36; // [sp+58h] [bp-14h]@21
- int v37; // [sp+5Ch] [bp-10h]@21
- unsigned __int64 v38; // [sp+60h] [bp-Ch]@21
- int a9; // [sp+68h] [bp-4h]@8
+ Vec3_int_ pos; // [sp+2Ch] [bp-40h]@21
+ RenderVertexSoft *a9; // [sp+68h] [bp-4h]@8
+
+ if (!uNumVertices)
+ return false;
+
+ static RenderVertexSoft static_69B140[64];
- thisa = this;
- if ( !uNumVertices )
- return 0;
+ a9 = a5;
+ if (a6)
+ {
+ for (uint i = 0; i < uNumVertices; ++i)
+ memcpy(static_69B140 + i, a5 + i, sizeof(RenderVertexSoft));
- static bool _static_initialized = false;
- static RenderVertexSoft LightmapBuilder_static_sub_45BC07_stru_69B140[64];
- if (!_static_initialized)
- {
- for (uint i = 0; i < 64; ++i)
- LightmapBuilder_static_sub_45BC07_stru_69B140[i].flt_2C = 0.0f;
- _static_initialized = true;
+ __debugbreak();
+ if (pGame->pIndoorCameraD3D->_437376(
+ a3,
+ static_69B140,
+ &uNumVertices) == 1)
+ {
+ if ( !uNumVertices )
+ return false;
+ a9 = static_69B140;
+ }
}
- a9 = (int)a5;
- if ( a6 == 0.0 )
- {
- v14 = a3;
- }
- else
- {
- if ( (signed int)uNumVertices > 0 )
- {
- v9 = LightmapBuilder_static_sub_45BC07_stru_69B140;
- v10 = (char *)a5 - (char *)LightmapBuilder_static_sub_45BC07_stru_69B140;
- a5 = (RenderVertexSoft *)uNumVertices;
- do
- {
- v11 = (char *)v9 + v10;
- v12 = v9;
- ++v9;
- v13 = a5 == (RenderVertexSoft *)1;
- a5 = (RenderVertexSoft *)((char *)a5 - 1);
- memcpy(v12, v11, 0x30u);
- }
- while ( !v13 );
- }
- v14 = a3;
- if ( pGame->pIndoorCameraD3D->_437376(
- a3,
- LightmapBuilder_static_sub_45BC07_stru_69B140,
- &uNumVertices) == 1 )
- {
- if ( !uNumVertices )
- return 0;
- a9 = (int)LightmapBuilder_static_sub_45BC07_stru_69B140;
- }
- }
- v16 = v14->vNormal.z;
- v17 = v14->vNormal.y;
- v18 = v14->vNormal.x;
-
- static stru314 LightmapBuilder_static_sub_45BC07_stru_69B110;
- v27 = (int)&LightmapBuilder_static_sub_45BC07_stru_69B110.field_1C;
- LightmapBuilder_static_sub_45BC07_stru_69B110.field_4.y = v17;
- LightmapBuilder_static_sub_45BC07_stru_69B110.field_4.x = v18;
- v26 = &LightmapBuilder_static_sub_45BC07_stru_69B110.field_10;
- LightmapBuilder_static_sub_45BC07_stru_69B110.field_4.z = v16;
- dword_69B138 = LODWORD(v14->field_10);
- if ( !pGame->pIndoorCameraD3D->GetFacetOrientation(
- v14->field_14,
- &LightmapBuilder_static_sub_45BC07_stru_69B110.field_4,
- &LightmapBuilder_static_sub_45BC07_stru_69B110.field_10,
- &LightmapBuilder_static_sub_45BC07_stru_69B110.field_1C) )
+ static stru314 static_69B110;
+ static_69B110.field_4.x = a3->face_plane.vNormal.x;
+ static_69B110.field_4.y = a3->face_plane.vNormal.y;
+ static_69B110.field_4.z = a3->face_plane.vNormal.z;
+ static_69B110.dist = a3->face_plane.dist;
+ if (!pGame->pIndoorCameraD3D->GetFacetOrientation(
+ a3->polygonType,
+ &static_69B110.field_4,
+ &static_69B110.field_10,
+ &static_69B110.field_1C))
{
MessageBoxW(nullptr, L"Error: Failed to get the facet orientation", L"E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\Light.cpp:119", 0);
ExitProcess(0);
}
- a5 = 0;
- if ( a2->field_AC > 0 )
+
+ for (uint i = 0; i < a2->uNumLightsApplied; ++i)
{
- v19 = a2->_blv_lights_ys;
- do
+ pos.x = a2->_blv_lights_xs[i];
+ pos.y = a2->_blv_lights_ys[i];
+ pos.z = a2->_blv_lights_zs[i];
+
+ uint uColorR = (uint)floorf(a2->_blv_lights_rs[i] * 255.0 + 0.5f) & 0xFF,
+ uColorG = (uint)floorf(a2->_blv_lights_gs[i] * 255.0 + 0.5f) & 0xFF,
+ uColorB = (uint)floorf(a2->_blv_lights_bs[i] * 255.0 + 0.5f) & 0xFF;
+ uint uColor = (uColorR << 16) | (uColorG << 8) | uColorB;
+ if (!uColor)
+ uColor = 0x00FFFFF;
+
+ if (!_45BE86_build_light_polygon(
+ &pos,
+ a2->_blv_lights_radii[i],
+ uColor,
+ a2->_blv_lights_light_dot_faces[i],
+ a2->_blv_lights_types[i],
+ &static_69B110,
+ uNumVertices,
+ a9,
+ uClipFlag) )
{
- v20 = *((float *)v19 + 80) * 255.0;
- arg0 = *(v19 - 20);
- v29 = *v19;
- v30 = v19[60];
- v21 = *(v19 - 60);
- a6 = v20;
- v36 = v21;
- v37 = v19[20];
- //v33 = a6 + 6.7553994e15;
- a6 = *((float *)v19 + 100) * 255.0;
- //v32 = a6 + 6.7553994e15;
- a6 = *((float *)v19 + 120) * 255.0;
- //v31 = a6 + 6.7553994e15;
- //v38 = __PAIR__(LODWORD(v32), LODWORD(v31));
- v38 = __PAIR__((int)floorf(a6 + 0.5f), (int)floorf(a6 + 0.5f));
- //v22 = LODWORD(v31) | ((LODWORD(v32) | (LODWORD(v33) << 8)) << 8);
- v22 = (int)floorf(a6 + 0.5f) | (((int)floorf(a6 + 0.5f) | ((int)floorf(a6 + 0.5f) << 8)) << 8);
- if (!v22)
- v22 = 0x00FFFFFF;
- v27 = a7;
- v23 = (int)a5;
- v26 = (Vec3_float_ *)a9;
- LOBYTE(v23) = *((unsigned char *)&a5[20].vWorldViewPosition.y + (unsigned int)a2);
- v25 = (double)v37;
- v24 = (double)v36;
- if ( !_45BE86_build_light_polygon(
- (int)&arg0,
- v24,
- v22,
- v25,
- v23,
- &LightmapBuilder_static_sub_45BC07_stru_69B110,
- uNumVertices,
- (RenderVertexSoft *)a9,
- a7) )
- {
- MessageBoxW(nullptr, L"Error: Failed to build light polygon", L"E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\Light.cpp:138", 0);
- v34 = 5080748;
- }
- a5 = (RenderVertexSoft *)((char *)a5 + 1);
- ++v19;
+ MessageBoxW(nullptr, L"Error: Failed to build light polygon", L"E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\Light.cpp:138", 0);
}
- while ( (signed int)a5 < a2->field_AC );
}
- return 1;
+ return true;
}
//----- (0045BE86) --------------------------------------------------------
-char LightmapBuilder::_45BE86_build_light_polygon(int arg0, float a4, int arg8, float a5, int uLightType, stru314 *a7, signed int a2, RenderVertexSoft *a9, char uClipFlag)
+bool LightmapBuilder::_45BE86_build_light_polygon(Vec3_int_ *pos, float radius, unsigned int uColorMask, float dot_dist, int uLightType, stru314 *a7, unsigned int uNumVertices, RenderVertexSoft *a9, char uClipFlag)
{
- LightmapBuilder *v10; // esi@1
Lightmap *v11; // edi@3
- double v12; // st7@5
- double v13; // st7@5
- stru314 *v14; // ebx@5
- double v15; // st7@5
- RenderVertexSoft *pLightmapVertices; // edx@5
double v17; // st7@5
- double v18; // st7@5
- char *v19; // eax@5
- double v20; // st6@5
- double v21; // st5@5
- signed int v22; // ecx@5
- double v23; // st5@5
double v24; // st7@6
- int v25; // ebx@8
- double v26; // st7@8
- int v27; // eax@8
- double v28; // st6@8
- double v29; // st6@8
- double v30; // st5@8
int v31; // eax@8
int v32; // ebx@8
unsigned int v33; // ecx@8
@@ -236,156 +132,103 @@
double v38; // st7@14
double v39; // st7@16
double v40; // st7@16
- double v41; // st7@22
- stru9 *v42; // ecx@22
- char result; // al@22
- unsigned int *v44; // ebx@23
int v45; // eax@24
- RenderVertexSoft *v46; // edi@27
- std::string *v47; // ecx@34
- char *v48; // esi@39
- int v49; // eax@39
- unsigned __int8 v50; // sf@39
- unsigned __int8 v51; // of@39
- const char *v52; // [sp-Ch] [bp-58h]@34
int v53; // [sp-8h] [bp-54h]@34
- std::string v54; // [sp-4h] [bp-50h]@19
- float v55; // [sp+0h] [bp-4Ch]@22
- float v56; // [sp+4h] [bp-48h]@22
- int v57; // [sp+8h] [bp-44h]@22
- unsigned int v58; // [sp+Ch] [bp-40h]@16
- void *v59; // [sp+10h] [bp-3Ch]@16
- float v60; // [sp+20h] [bp-2Ch]@8
- float v61; // [sp+24h] [bp-28h]@8
- float v62; // [sp+28h] [bp-24h]@8
- Vec3_float_ a1; // [sp+2Ch] [bp-20h]@8
- //double v64; // [sp+38h] [bp-14h]@8
- int pLightmapVertices_; // [sp+40h] [bp-Ch]@5
- float v66; // [sp+44h] [bp-8h]@5
- char v67; // [sp+4Bh] [bp-1h]@2
- float arg0b; // [sp+54h] [bp+8h]@8
- int arg0c; // [sp+54h] [bp+8h]@8
- int arg0a; // [sp+54h] [bp+8h]@8
- v10 = this;
- if ( a4 == 0.0 )
- return 1;
- v67 = uLightType & 1;
+ if (fabsf(radius) < 1e-6f)
+ return true;
+
v11 = uLightType & 1 ? &std__vector_000004[std__vector_000004_size] :
&std__vector_183808[std__vector_183808_size];
- v12 = a4 - a5;
- this->flt_3C8C24 = v12;
- v13 = sqrt((a4 + a4 - v12) * v12);
- v10->flt_3C8C28 = v13;
- v14 = a7;
- v66 = 1.0 / a4;
- v10->flt_3C8C2C = 1.0 - (a4 - v13) * v66;
- v11->field_C08 = (signed __int64)((double)*(signed int *)arg0 - a5 * v14->field_4.x);
- v11->field_C0A = (signed __int64)((double)*(signed int *)(arg0 + 4) - a5 * v14->field_4.y);
- v15 = a4;
- v11->field_C0C = (signed __int64)((double)*(signed int *)(arg0 + 8) - a5 * v14->field_4.z);
- pLightmapVertices = v11->pVertices;
- v17 = v15 * v10->flt_3C8C2C;
- pLightmapVertices_ = (int)v11->pVertices;
- v10->flt_3C8C30 = v17;
- v10->flt_3C8C0C = v17 * v14->field_10.x;
- v10->flt_3C8C10 = v17 * v14->field_10.y;
- v10->flt_3C8C14 = v17 * v14->field_10.z;
- v10->flt_3C8C18 = v17 * v14->field_1C.x;
- v10->flt_3C8C1C = v17 * v14->field_1C.y;
- v10->flt_3C8C20 = v17 * v14->field_1C.z;
- LODWORD(a5) = v11->field_C08;
- v18 = (double)SLODWORD(a5);
- v11->pVertices[0].vWorldPosition.x = v18 - v10->flt_3C8C18 + v10->flt_3C8C0C;
- LODWORD(a5) = v11->field_C0A;
- v19 = (char *)&v11->pVertices[0].vWorldPosition.y;
- v20 = (double)SLODWORD(a5);
- v21 = v20 - v10->flt_3C8C1C;
- LODWORD(a5) = v11->field_C0C;
- v22 = 4;
- v11->pVertices[0].vWorldPosition.y = v21 + v10->flt_3C8C10;
- v23 = (double)SLODWORD(a5);
- a5 = v23;
- v11->pVertices[0].vWorldPosition.z = v23 - v10->flt_3C8C20 + v10->flt_3C8C14;
+ flt_3C8C24 = radius - dot_dist;
+ flt_3C8C28 = sqrt((radius + dot_dist) * (radius - dot_dist));
+ flt_3C8C2C_lightmaps_brightness = 1.0 - (radius - flt_3C8C28) / radius;
+ v11->field_C08 = (double)pos->x - dot_dist * a7->field_4.x;
+ v11->field_C0A = (double)pos->y - dot_dist * a7->field_4.y;
+ v11->field_C0C = (double)pos->z - dot_dist * a7->field_4.z;
+
+ v17 = radius * flt_3C8C2C_lightmaps_brightness;
+ flt_3C8C30 = v17;
+ flt_3C8C0C = v17 * a7->field_10.x;
+ flt_3C8C10 = v17 * a7->field_10.y;
+ flt_3C8C14 = v17 * a7->field_10.z;
+ flt_3C8C18 = v17 * a7->field_1C.x;
+ flt_3C8C1C = v17 * a7->field_1C.y;
+ flt_3C8C20 = v17 * a7->field_1C.z;
+
+ /*
+ v11->pVertices[0].vWorldPosition.x = v11->field_C08 - flt_3C8C18 + flt_3C8C0C;
+ v11->pVertices[0].vWorldPosition.y = v11->field_C0A - flt_3C8C1C + flt_3C8C10;
+ v11->pVertices[0].vWorldPosition.z = v11->field_C0C - flt_3C8C20 + flt_3C8C14;
v11->pVertices[0].u = 0.0;
v11->pVertices[0].v = 0.0;
- v11->pVertices[1].vWorldPosition.x = v18 - v10->flt_3C8C18 - v10->flt_3C8C0C;
- v11->pVertices[1].vWorldPosition.y = v20 - v10->flt_3C8C1C - v10->flt_3C8C10;
- v11->pVertices[1].vWorldPosition.z = v23 - v10->flt_3C8C20 - v10->flt_3C8C14;
+
+ v11->pVertices[1].vWorldPosition.x = v11->field_C08 - flt_3C8C18 - flt_3C8C0C;
+ v11->pVertices[1].vWorldPosition.y = v11->field_C0A - flt_3C8C1C - flt_3C8C10;
+ v11->pVertices[1].vWorldPosition.z = v11->field_C0C - flt_3C8C20 - flt_3C8C14;
v11->pVertices[1].u = 0.0;
v11->pVertices[1].v = 1.0;
- v11->pVertices[2].vWorldPosition.x = v18 + v10->flt_3C8C18 - v10->flt_3C8C0C;
- v11->pVertices[2].vWorldPosition.y = v20 + v10->flt_3C8C1C - v10->flt_3C8C10;
- v11->pVertices[2].vWorldPosition.z = v23 + v10->flt_3C8C20 - v10->flt_3C8C14;
+
+ v11->pVertices[2].vWorldPosition.x = v11->field_C08 + flt_3C8C18 - flt_3C8C0C;
+ v11->pVertices[2].vWorldPosition.y = v11->field_C0A + flt_3C8C1C - flt_3C8C10;
+ v11->pVertices[2].vWorldPosition.z = v11->field_C0C + flt_3C8C20 - flt_3C8C14;
v11->pVertices[2].u = 1.0;
v11->pVertices[2].v = 1.0;
- v11->pVertices[3].vWorldPosition.x = v18 + v10->flt_3C8C18 + v10->flt_3C8C0C;
- v11->pVertices[3].vWorldPosition.y = v20 + v10->flt_3C8C1C + v10->flt_3C8C10;
- v11->pVertices[3].vWorldPosition.z = a5 + v10->flt_3C8C20 + v10->flt_3C8C14;
+
+ v11->pVertices[3].vWorldPosition.x = v11->field_C08 + flt_3C8C18 + flt_3C8C0C;
+ v11->pVertices[3].vWorldPosition.y = v11->field_C0A + flt_3C8C1C + flt_3C8C10;
+ v11->pVertices[3].vWorldPosition.z = v11->field_C0C + flt_3C8C20 + flt_3C8C14;
v11->pVertices[3].u = 1.0;
v11->pVertices[3].v = 0.0;
- do
- {
- v24 = v14->field_4.y * *(float *)v19
- + *((float *)v19 + 1) * v14->field_4.z
- + v14->field_4.x * *((float *)v19 - 1)
- + *(float *)&v14->field_28;
- *((float *)v19 - 1) = *((float *)v19 - 1) - v24 * v14->field_4.x;
- *(float *)v19 = *(float *)v19 - v24 * v14->field_4.y;
- v19 += 48;
- --v22;
- *((float *)v19 - 11) = *((float *)v19 - 11) - v24 * v14->field_4.z;
- }
- while ( v22 );
- v11->field_C10 = arg8;
- v11->uNumVertices = 4;
- if ( pGame->uFlags2 & 4 )
+ */
+
+ for (uint i = 0; i < 4; ++i)
{
- LODWORD(a5) = v11->field_C0C;
- v25 = arg0;
- v26 = (double)SLODWORD(a5);
- LODWORD(a5) = v11->field_C0A;
- v27 = v11->field_C08;
- a5 = (double)SLODWORD(a5);
- arg8 = v27;
- v28 = (double)v27;
- v61 = a5;
- v60 = v28;
- v62 = v26;
- *(float *)&arg8 = (double)*(signed int *)(arg0 + 8);
- arg0b = (double)*(signed int *)(arg0 + 4);
- v29 = (double)*(signed int *)v25 - v28;
- v30 = arg0b - a5;
- a5 = *(float *)&arg8 - v26;
- a1.x = v29;
- a1.z = a5;
- a1.y = v30;
+ v11->pVertices[i].vWorldPosition.x = v11->field_C08 - flt_3C8C18 + flt_3C8C0C;
+ v11->pVertices[i].vWorldPosition.y = v11->field_C0A - flt_3C8C1C + flt_3C8C10;
+ v11->pVertices[i].vWorldPosition.z = v11->field_C0C - flt_3C8C20 + flt_3C8C14;
+ v11->pVertices[i].u = 0.0;
+ v11->pVertices[i].v = 0.0;
+
+ v24 = a7->field_4.y * v11->pVertices[i].vWorldPosition.y
+ + a7->field_4.z * v11->pVertices[i].vWorldPosition.z
+ + a7->field_4.x * v11->pVertices[i].vWorldPosition.x
+ + a7->dist;
+
+ v11->pVertices[i].vWorldPosition.x -= v24 * a7->field_4.x;
+ v11->pVertices[i].vWorldPosition.y -= v24 * a7->field_4.y;
+ v11->pVertices[i].vWorldPosition.z -= v24 * a7->field_4.z;
+ }
+
+ v11->uColorMask = uColorMask;
+ v11->uNumVertices = 4;
+
+ if (~pGame->uFlags2 & 4)
+ v11->fBrightness = flt_3C8C2C_lightmaps_brightness;
+ else
+ {
+ Vec3_float_ a1; // [sp+2Ch] [bp-20h]@8
+ a1.x = (double)pos->x - v11->field_C08;
+ a1.y = (double)pos->y - v11->field_C0A;
+ a1.z = (double)pos->z - v11->field_C0C;
a1.Normalize();
- //v64 = v62 + 6.7553994e15;
- //LODWORD(a5) = LODWORD(v64);
- LODWORD(a5) = floorf(v62 + 0.5f);
- //v64 = v61 + 6.7553994e15;
- //arg0c = LODWORD(v64);
- arg0c = floorf(v61 + 0.5f);
- //v64 = v60 + 6.7553994e15;
- //arg8 = LODWORD(v64);
- arg8 = floorf(v60 + 0.5f);
- auto v64 /*HIDWORD(v64)*/ = abs(*(int *)(v25 + 8) - (signed)LODWORD(a5));
- arg0a = abs(*(int *)(v25 + 4) - arg0c);
- v31 = abs(*(int *)v25 - arg8);
- LODWORD(a5) = v31;
- v32 = arg0a;
- v33 = v64;//HIDWORD(v64);
- if ( v31 < arg0a )
+
+ auto dist_x = abs(pos->x - v11->field_C08), //v31
+ dist_y = abs(pos->y - v11->field_C0A), //v32 arg0a
+ dist_z = abs(pos->z - v11->field_C0C); //v33 _v64
+ v31 = dist_x;
+ v32 = dist_y;
+ v33 = dist_z;
+ if (v31 < dist_y)
{
v34 = v31;
- v31 = arg0a;
+ v31 = dist_y;
v32 = v34;
}
- if ( v31 < v64)//SHIDWORD(v64) )
+ if (v31 < dist_z)//SHIDWORD(v64) )
{
v35 = v31;
- v31 = v64;//HIDWORD(v64);
+ v31 = dist_z;//HIDWORD(v64);
v33 = v35;
}
if ( v32 < (signed int)v33 )
@@ -395,118 +238,112 @@
v32 = v36;
}
v37 = v33 >> 2;
- LODWORD(a5) = ((unsigned int)(11 * v32) >> 5) + v37 + v31;
- v38 = (double)SLODWORD(a5);
- if ( v38 > a4 )
- return 1;
- a4 = v66 * v38;
+ //LODWORD(a5) = ((unsigned int)(11 * v32) >> 5) + v37 + v31;
+ v38 = (double)(signed)(((unsigned int)(11 * v32) >> 5) + v37 + v31);
+ if (v38 > radius)
+ return true;
+ //radius = (1 / radius) * v38;
if ( uLightType & 4 )
{
- v59 = (void *)v37;
- uLightType = dword_4D86CC;
- v58 = v37;
+ //v59 = (void *)v37;
+ //uLightType = flt_4D86CC;
+ //v58 = v37;
v39 = fabs(a1.x * a7->field_4.x + a1.z * a7->field_4.z + a1.y * a7->field_4.y);
- v40 = v39 * 1.0 * *(float *)&uLightType;
+ v40 = v39 * 1.0 * flt_4D86CC;
+
+ v11->fBrightness = v40 - (1 / radius) * v38 * v40;
+ }
+ else if ( uLightType & 8 )
+ {
+ v40 = 1.0 * 1.0;
+ v11->fBrightness = v40 - (1 / radius) * v38;
}
else
{
- if ( uLightType & 8 )
- {
- v40 = 1.0 * 1.0;
- }
- else
- {
MessageBoxW(nullptr, L"Invalid light type!", L"E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\Light.cpp:277", 0);
- v40 = *(float *)&uLightType;
- }
}
- v14 = a7;
- pLightmapVertices = (RenderVertexSoft *)pLightmapVertices_;
- v11->flt_C14 = v40 - a4 * v40;
- }
- else
- {
- v11->flt_C14 = v10->flt_3C8C2C;
}
- v41 = v14->field_4.z;
- v42 = pGame->pStru9Instance;
- v59 = &v11->uNumVertices;
- v58 = (unsigned int)pLightmapVertices;
- *(float *)&v57 = v41;
- v56 = v14->field_4.y;
- v55 = v14->field_4.x;
- result = v42->_4980B9(a9, a2, v55, v56, *(float *)&v57, pLightmapVertices, &v11->uNumVertices);
- if ( !result )
- return result;
- v44 = &v11->uNumVertices;
- if ( !v11->uNumVertices )
- return 1;
- v45 = v10->_45C6D6(a2, a9, v11);
- if ( v45 != a2 && v45 > 0 )
- v10->_45C4B9(a2, a9, v11);
- v59 = (void *)*v44;
- v46 = (RenderVertexSoft *)pLightmapVertices_;
- pGame->pIndoorCameraD3D->ViewTransform((RenderVertexSoft *)pLightmapVertices_, (unsigned int)v59);
- v59 = 0;
- v58 = *v44;
- pGame->pIndoorCameraD3D->_436BB7_project_and_stuff(v46, v58, 0);
+
+ if (!pGame->pStru9Instance->_4980B9(a9, uNumVertices,
+ a7->field_4.x, a7->field_4.y, a7->field_4.z,
+ v11->pVertices, &v11->uNumVertices))
+ return false;
+
+ //v44 = &v11->uNumVertices;
+ if (!v11->uNumVertices)
+ return true;
+
+ v45 = _45C6D6(uNumVertices, a9, v11);
+ if ( v45 != uNumVertices && v45 > 0 )
+ _45C4B9(uNumVertices, a9, v11);
+ //v59 = v11->uNumVertices;
+ //v46 = (RenderVertexSoft *)pLightmapVertices_;
+ pGame->pIndoorCameraD3D->ViewTransform(v11->pVertices, v11->uNumVertices);
+ //v59 = 0;
+ //v58 = v11->uNumVertices;
+ pGame->pIndoorCameraD3D->Project(v11->pVertices, v11->uNumVertices, 0);
+
+ unsigned int _a4 = 0;
if ( !(uClipFlag & 1) )
- goto LABEL_38;
- if ( uCurrentlyLoadedLevelType == LEVEL_Outdoor)
+ _a4 = 1;
+ else if ( uCurrentlyLoadedLevelType == LEVEL_Outdoor)
{
if ( uClipFlag & 2 )
{
- v59 = &a4;
- v58 = (unsigned int)v10->field_3C8C34;
- v57 = *v44;
- pGame->pIndoorCameraD3D->_436CDC(v46, v57, v10->field_3C8C34, (unsigned int *)&a4);
-LABEL_33:
- v59 = v44;
- v58 = (unsigned int)v10->field_3C8C34;
- v57 = (int)v46;
- v56 = a4;
- pGame->pIndoorCameraD3D->_437143(LODWORD(a4), v46, v10->field_3C8C34, v44);
- goto LABEL_37;
+ //v59 = &a4;
+ //v58 = (unsigned int)field_3C8C34;
+ //v57 = *v44;
+ pGame->pIndoorCameraD3D->_436CDC_mess_with_lightmap__clipflag_2(v11->pVertices, v11->uNumVertices, field_3C8C34, &_a4);
+
+ //v59 = v44;
+ //v58 = (unsigned int)field_3C8C34;
+ //v57 = (int)v46;
+ //v56 = a4;
+ pGame->pIndoorCameraD3D->_437143(_a4, v11->pVertices, field_3C8C34, &v11->uNumVertices);
}
- if ( uClipFlag & 4 )
+ else if ( uClipFlag & 4 )
{
- v59 = &a4;
- v58 = (unsigned int)v10->field_3C8C34;
- v57 = *v44;
- pGame->pIndoorCameraD3D->_436F09(v46, v57, v10->field_3C8C34, (unsigned int *)&a4);
- goto LABEL_33;
+ //v59 = &a4;
+ //v58 = (unsigned int)field_3C8C34;
+ //v57 = *v44;
+ pGame->pIndoorCameraD3D->_436F09_mess_with_lightmap__clipflag_4(v11->pVertices, v11->uNumVertices, field_3C8C34, &_a4);
+
+ //v59 = v44;
+ //v58 = (unsigned int)field_3C8C34;
+ //v57 = (int)v46;
+ //v56 = a4;
+ pGame->pIndoorCameraD3D->_437143(_a4, v11->pVertices, field_3C8C34, &v11->uNumVertices);
}
- v58 = (unsigned int)"E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\Light.cpp:330";
- v52 = "Undefined clip flag specified";
+ else
+ MessageBoxW(nullptr, L"Undefined clip flag specified", L"E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\Light.cpp:330", 0);
}
else
- {
- v58 = (unsigned int)"E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\Light.cpp:335";
- v52 = "Lightpoly builder native indoor clipping not implemented";
- }
- MessageBoxA(nullptr, v52, (const char *)v58, 0);
-LABEL_37:
- if ( a4 != 0.0 )
+ MessageBoxW(nullptr, L"Lightpoly builder native indoor clipping not implemented", L"E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\Light.cpp:335", 0);
+
+ if (_a4)
{
-LABEL_38:
- if ( v67 )
+ if (uLightType & 1)
{
- v48 = (char *)&v10->std__vector_000004_size;
- v49 = *(unsigned int *)v48;
- v51 = __OFSUB__(*(unsigned int *)v48, 511);
- v50 = *(unsigned int *)v48 - 511 < 0;
+ //v48 = (char *)&std__vector_000004_size;
+ //v49 = std__vector_000004_size;
+ //v51 = __OFSUB__(std__vector_000004_size, 511);
+ //v50 = std__vector_000004_size - 511 < 0;
+ if (std__vector_000004_size < 512 - 1)
+ ++std__vector_000004_size;
}
else
{
- v48 = (char *)&v10->std__vector_183808_size;
- v49 = *(unsigned int *)v48;
- v51 = __OFSUB__(*(unsigned int *)v48, 767);
- v50 = *(unsigned int *)v48 - 767 < 0;
+ //v48 = (char *)&std__vector_183808_size;
+ //v49 = std__vector_183808_size;
+ //v51 = __OFSUB__(std__vector_183808_size, 767);
+ //v50 = std__vector_183808_size - 767 < 0;
+ if (std__vector_183808_size < 768 - 1)
+ ++std__vector_183808_size;
}
- if ( v50 ^ v51 )
- *(unsigned int *)v48 = v49 + 1;
+ //if ( v50 ^ v51 )
+ // *(unsigned int *)v48 = v49 + 1;
}
- return 1;
+ return true;
}
//----- (0045C4B9) --------------------------------------------------------
@@ -724,139 +561,82 @@
//----- (0045C7F6) --------------------------------------------------------
bool LightmapBuilder::ApplyLights_IndoorFace(unsigned int uFaceID)
{
- BLVFace *pFace; // esi@1
- int v3; // ebx@1
- int uSectorID; // edi@1
- int v5; // ecx@5
- BLVLightMM7 *v6; // eax@7
- int v7; // edi@10
- bool result; // eax@14
- LightmapBuilder *thisa; // [sp+Ch] [bp-Ch]@1
- MobileLight *pMobileLight; // [sp+10h] [bp-8h]@2
- int uSectLights; // [sp+10h] [bp-8h]@5
- StationaryLight *pStationaryLight; // [sp+10h] [bp-8h]@11
- int v13; // [sp+14h] [bp-4h]@1
- int i; // [sp+14h] [bp-4h]@5
+ auto pFace = &pIndoor->pFaces[uFaceID];
+ auto pSector = pIndoor->pSectors + pFace->uSectorID;
+
+ stru_F8AD28.uCurrentAmbientLightLevel = (stru_F8AD28.uDefaultAmbientLightLevel + pSector->uMinAmbientLightLevel) << 16;
- pFace = &pIndoor->pFaces[uFaceID];
- v3 = uNumMobileLightsApplied;
- v13 = 0;
- thisa = this;
- uSectorID = pFace->uSectorID;
- uFaceID = 0;
- stru_F8AD28.field_2C = (stru_F8AD28.field_3F8 + pIndoor->pSectors[uSectorID].uMinAmbientLightLevel) << 16;
- if ( uNumMobileLightsApplied > 0 )
+ uint uNumLightsApplied = 0;
+ for (uint i = 0; i < pMobileLightsStack->uNumLightsActive; ++i)
+ {
+ if (uNumLightsApplied >= 20)
+ break;
+
+ ApplyLight_BLV((StationaryLight *)(pMobileLightsStack->pLights + i), pFace, &uNumLightsApplied, true, 0);
+ }
+
+ for (uint i = 0; i < pSector->uNumLights; ++i)
{
- pMobileLight = pMobileLights;
- do
- {
- if ( (signed int)uFaceID >= 20 )
- break;
- ApplyLight_BLV((StationaryLight *)pMobileLight, pFace, &uFaceID, 1, 0);
- ++v13;
- ++pMobileLight;
- }
- while ( v13 < v3 );
- }
- v5 = 0;
- i = 0;
- for ( uSectLights = pIndoor->pSectors[uSectorID].uNumLights; i < uSectLights; v5 = i++ + 1 )
- {
- if ( (signed int)uFaceID >= 20 )
+ if (uNumLightsApplied >= 20 )
break;
- v6 = &pIndoor->pLights[*(&pIndoor->pSectors[uSectorID].pLights->vPosition.x + v5)];
- if ( !(v6->uAtributes & 8) )
- ApplyLight_BLV((StationaryLight *)v6, pFace, &uFaceID, 0, (int)&byte_4E94D0);
+
+ auto pLight = &pIndoor->pLights[pSector->pLights[i]];
+ if (~pLight->uAtributes & 0x08)
+ ApplyLight_BLV((StationaryLight *)pLight, pFace, &uFaceID, false, &byte_4E94D0);
}
- v7 = 0;
- if ( uNumStationaryLightsApplied > 0 )
+
+ for (uint i = 0; i < pStationaryLightsStack->uNumLightsActive; ++i)
{
- pStationaryLight = pStationaryLights;
- do
- {
- if ( (signed int)uFaceID >= 20 )
- break;
- ApplyLight_BLV(pStationaryLight, pFace, &uFaceID, 0, (int)&byte_4E94D0);
- ++pStationaryLight;
- ++v7;
- }
- while ( v7 < uNumStationaryLightsApplied );
+ if (uNumLightsApplied >= 20)
+ break;
+
+ ApplyLight_BLV(pStationaryLightsStack->pLights + i, pFace, &uNumLightsApplied, false, &byte_4E94D0);
}
- result = uFaceID;
- stru_F8AD28.field_AC = uFaceID;
- LOBYTE(result) = 1;
- return result;
+
+ stru_F8AD28.uNumLightsApplied = uNumLightsApplied;
+ return true;
}
-// 4E94D0: using guessed type char byte_4E94D0;
-// 519AB4: using guessed type int uNumStationaryLightsApplied;
//----- (0045C911) --------------------------------------------------------
-bool LightmapBuilder::ApplyLight_BLV(StationaryLight *pLight, BLVFace *a2, unsigned int *pSlot, char X, int a5)
+bool LightmapBuilder::ApplyLight_BLV(StationaryLight *pLight, BLVFace *a2, unsigned int *pSlot, bool bLightBackfaces, char *a5)
{
- BLVFace *result; // eax@0
- StationaryLight *v7; // edi@1
- signed int v8; // ecx@1
- int v9; // edx@2
- int v10; // edx@4
- int v11; // esi@4
- int v12; // edx@6
double v13; // st7@8
- __int16 v14; // fps@8
- char v15; // c0@9
- char v16; // c2@9
- char v17; // c3@9
- double v18; // st6@12
- __int16 v19; // fps@12
- char v20; // c0@12
- char v21; // c2@12
- char v22; // c3@12
- signed int v23; // [sp+10h] [bp-4h]@2
- //float pLighta; // [sp+1Ch] [bp+8h]@13
- signed int a2a; // [sp+20h] [bp+Ch]@4
+
+ if (!pLight->uRadius)
+ return false;
- v7 = pLight;
- v8 = pLight->uRadius;
- if ( v8 > 0
- && (result = a2, v9 = pLight->vPosition.x, v23 = v9, v9 > a2->pBounding.x1 - v8)
- && v9 < v8 + a2->pBounding.x2
- && (v10 = pLight->vPosition.y, v11 = a2->pBounding.y1 - v8, a2a = v10, v10 > v11)
- && v10 < v8 + result->pBounding.y2
- && (v12 = pLight->vPosition.z, v12 > result->pBounding.z1 - v8)
- && v12 < v8 + result->pBounding.z2
- && ((v13 = (double)v12 * result->pFacePlane.vNormal.z
- + (double)a2a * result->pFacePlane.vNormal.y
- + (double)v23 * result->pFacePlane.vNormal.x
- + result->pFacePlane.dist,
- //UNDEF(v14),
- X)
- || (v15 = v13 < 0.0, v16 = 0, v17 = v13 == 0.0, BYTE1(result) = HIBYTE(v14), v13 >= 0.0))
- && (v18 = (double)pLight->uRadius,
- //UNDEF(v19),
- v20 = v13 < v18,
- v21 = 0,
- v22 = v13 == v18,
- BYTE1(result) = HIBYTE(v19),
- v13 <= v18) )
+ if (pLight->vPosition.x > a2->pBounding.x1 - pLight->uRadius &&
+ pLight->vPosition.x < a2->pBounding.x2 + pLight->uRadius &&
+ pLight->vPosition.y > a2->pBounding.y1 - pLight->uRadius &&
+ pLight->vPosition.y < a2->pBounding.y2 + pLight->uRadius &&
+ pLight->vPosition.z > a2->pBounding.z1 - pLight->uRadius &&
+ pLight->vPosition.z < a2->pBounding.z2 + pLight->uRadius)
{
- stru_F8AD28._blv_lights_radii[*pSlot] = v8;
- stru_F8AD28._blv_lights_inv_radii[*pSlot] = 65536 / v8;
- stru_F8AD28._blv_lights_xs[*pSlot] = pLight->vPosition.x;
- stru_F8AD28._blv_lights_ys[*pSlot] = pLight->vPosition.y;
- stru_F8AD28._blv_lights_zs[*pSlot] = pLight->vPosition.z;
- stru_F8AD28._blv_lights_rs[*pSlot] = (double)pLight->uLightColorR * 0.0039215689;
- stru_F8AD28._blv_lights_gs[*pSlot] = (double)pLight->uLightColorG * 0.0039215689;
- stru_F8AD28._blv_lights_bs[*pSlot] = (double)pLight->uLightColorB * 0.0039215689;
- //pLighta = v13;
- stru_F8AD28._blv_lights_light_dot_faces[*pSlot] = abs((int)floorf(v13 + 0.5f));//COERCE_UNSIGNED_INT64(pLighta + 6.7553994e15));
- result = (BLVFace *)*pSlot;
- stru_F8AD28._blv_lights_smthngs[(*pSlot)++] = v7->field_B;
- LOBYTE(result) = 1;
+ v13 = (double)pLight->vPosition.z * a2->pFacePlane.vNormal.z +
+ (double)pLight->vPosition.y * a2->pFacePlane.vNormal.y +
+ (double)pLight->vPosition.x * a2->pFacePlane.vNormal.x +
+ a2->pFacePlane.dist;
+ if ((bLightBackfaces || v13 >= 0.0f) && fabsf(v13) <= pLight->uRadius)
+ {
+ auto slot = *pSlot;
+
+ stru_F8AD28._blv_lights_radii[slot] = pLight->uRadius;
+ stru_F8AD28._blv_lights_inv_radii[slot] = 65536 / pLight->uRadius;
+ stru_F8AD28._blv_lights_xs[slot] = pLight->vPosition.x;
+ stru_F8AD28._blv_lights_ys[slot] = pLight->vPosition.y;
+ stru_F8AD28._blv_lights_zs[slot] = pLight->vPosition.z;
+ stru_F8AD28._blv_lights_rs[slot] = (double)pLight->uLightColorR / 255.0f;
+ stru_F8AD28._blv_lights_gs[slot] = (double)pLight->uLightColorG / 255.0f;
+ stru_F8AD28._blv_lights_bs[slot] = (double)pLight->uLightColorB / 255.0f;
+ stru_F8AD28._blv_lights_light_dot_faces[slot] = abs((int)floorf(v13 + 0.5f));
+ stru_F8AD28._blv_lights_types[slot] = pLight->uLightType;
+
+ *pSlot += 1;
+ return true;
+ }
}
- else
- {
- LOBYTE(result) = 0;
- }
- return (bool)result;
+
+ return false;
}
//----- (0045CA88) --------------------------------------------------------
@@ -900,7 +680,7 @@
v19 = v9;
v20 = v8;
v7->flt_2C = 0.0;
- if ( a2->field_AC > 0 )
+ if ( a2->uNumLightsApplied > 0 )
{
v10 = (char *)a2->_blv_lights_ys;
for ( j = a2->_blv_lights_ys; ; v10 = (char *)j )
@@ -910,7 +690,7 @@
HIDWORD(v12) = *(unsigned int *)v10;
LODWORD(v13) = *((unsigned int *)v10 + 60);
v14 = a3a;
- LOBYTE(v14) = v6->_blv_lights_smthngs[a3a];
+ LOBYTE(v14) = v6->_blv_lights_types[a3a];
v15 = v11;
*(_QWORD *)&v16.x = v12;
v16.z = v13;
@@ -919,7 +699,7 @@
++a3a;
++j;
v7->flt_2C = v17;
- if ( a3a >= a2->field_AC )
+ if ( a3a >= a2->uNumLightsApplied )
break;
v6 = a2;
}
@@ -1135,12 +915,12 @@
v2 = 0;
thisa = this;
- v3 = stru_F8AD28.field_3F8 + pFace->uShadeType;
+ v3 = stru_F8AD28.uDefaultAmbientLightLevel + pFace->uShadeType;
pSlot = 0;
- stru_F8AD28.field_2C = v3 << 16;
- if ( uNumMobileLightsApplied > 0 )
+ stru_F8AD28.uCurrentAmbientLightLevel = v3 << 16;
+ if ( pMobileLightsStack->uNumLightsActive > 0 )
{
- pMobileLight = pMobileLights;
+ pMobileLight = pMobileLightsStack->pLights;
do
{
if ( pSlot >= 20 )
@@ -1149,12 +929,12 @@
++v2;
++pMobileLight;
}
- while ( v2 < uNumMobileLightsApplied );
+ while ( v2 < pMobileLightsStack->uNumLightsActive );
}
v5 = 0;
- if ( uNumStationaryLightsApplied > 0 )
+ if ( pStationaryLightsStack->uNumLightsActive > 0 )
{
- pStationaryLight = pStationaryLights;
+ pStationaryLight = pStationaryLightsStack->pLights;
do
{
if ( pSlot >= 20 )
@@ -1163,14 +943,12 @@
++v5;
++pStationaryLight;
}
- while ( v5 < uNumStationaryLightsApplied );
+ while ( v5 < pStationaryLightsStack->uNumLightsActive );
}
result = pSlot;
- stru_F8AD28.field_AC = pSlot;
- LOBYTE(result) = 1;
- return result;
+ stru_F8AD28.uNumLightsApplied = pSlot;
+ return true;
}
-// 519AB4: using guessed type int uNumStationaryLightsApplied;
//----- (0045CE50) --------------------------------------------------------
bool LightmapBuilder::ApplyLight_ODM(StationaryLight *pLight, ODMFace *pFace, unsigned int *pSlot, char a4)
@@ -1186,6 +964,8 @@
RenderD3D *v13; // ecx@11
char v14; // dl@11
+ __debugbreak();
+
v6 = pLight->uRadius;
if ( v6 > 0
&& (result = (int)pFace, v7 = pLight->vPosition.x, v7 > pFace->pBoundingBox.x1 - v6)
@@ -1213,16 +993,16 @@
v11 = abs(v10);
v12 = pRenderer->bUsingSpecular;
stru_F8AD28._blv_lights_light_dot_faces[*pSlot] = v11;
- stru_F8AD28._blv_lights_smthngs[*pSlot] = pLight->field_B;
+ stru_F8AD28._blv_lights_types[*pSlot] = pLight->uLightType;
v13 = pRenderer->pRenderD3D;
- v14 = stru_F8AD28._blv_lights_smthngs[*pSlot];
+ v14 = stru_F8AD28._blv_lights_types[*pSlot];
if ( pRenderer->pRenderD3D && v12 && v14 & 4 )
- v14 = byte_4E94D2;
- stru_F8AD28._blv_lights_smthngs[*pSlot] = v14;
+ v14 = _4E94D2_light_type;
+ stru_F8AD28._blv_lights_types[*pSlot] = v14;
result = 4 * *pSlot;
if ( v13 && v12 )
{
- if ( stru_F8AD28._blv_lights_smthngs[*pSlot] & 4 )
+ if ( stru_F8AD28._blv_lights_types[*pSlot] & 4 )
{
*(float *)((char *)stru_F8AD28._blv_lights_rs + result) = *(float *)((char *)stru_F8AD28._blv_lights_rs + result)
* 0.33000001;
@@ -1241,54 +1021,53 @@
}
return result;
}
-// 4E94D2: using guessed type char byte_4E94D2;
+// 4E94D2: using guessed type char _4E94D2_light_type;
//----- (0045D036) --------------------------------------------------------
-bool LightmapBuilder::StackLights_TerrainFace(Vec3_float_ *pNormal, float *a3, RenderVertexSoft *a1, unsigned int uStripType, int X)
+bool LightmapBuilder::StackLights_TerrainFace(Vec3_float_ *pNormal, float *a3, RenderVertexSoft *a1, unsigned int uStripType, bool bLightBackfaces)
{
int v6; // esi@1
- LightmapBuilder *v7; // edi@1
+ //LightmapBuilder *v7; // edi@1
MobileLight *v8; // ebx@2
int v9; // esi@5
StationaryLight *v10; // ebx@6
- bool result; // eax@9
+ //bool result; // eax@9
unsigned int a7; // [sp+Ch] [bp-4h]@1
v6 = 0;
- v7 = this;
+ //v7 = this;
a7 = 0;
- stru_F8AD28.field_2C = pOutdoor->field_CBC_terrain_triangles_shade_type;
- if ( uNumMobileLightsApplied > 0 )
+ stru_F8AD28.uCurrentAmbientLightLevel = pOutdoor->field_CBC_terrain_triangles_shade_type;
+ if ( pMobileLightsStack->uNumLightsActive > 0 )
{
- v8 = pMobileLights;
+ v8 = pMobileLightsStack->pLights;
do
{
if ( (signed int)a7 >= 20 )
break;
- StackLight_TerrainFace((StationaryLight *)v8, pNormal, a3, a1, uStripType, X, &a7);
+ StackLight_TerrainFace((StationaryLight *)v8, pNormal, a3, a1, uStripType, bLightBackfaces, &a7);
++v6;
++v8;
}
- while ( v6 < uNumMobileLightsApplied );
+ while ( v6 < pMobileLightsStack->uNumLightsActive );
}
v9 = 0;
- if ( uNumStationaryLightsApplied > 0 )
+ if ( pStationaryLightsStack->uNumLightsActive > 0 )
{
- v10 = pStationaryLights;
+ v10 = pStationaryLightsStack->pLights;
do
{
if ( (signed int)a7 >= 20 )
break;
- StackLight_TerrainFace(v10, pNormal, a3, a1, uStripType, X, &a7);
+ StackLight_TerrainFace(v10, pNormal, a3, a1, uStripType, bLightBackfaces, &a7);
++v9;
++v10;
}
- while ( v9 < uNumStationaryLightsApplied );
+ while ( v9 < pStationaryLightsStack->uNumLightsActive );
}
- result = a7;
- stru_F8AD28.field_AC = a7;
- LOBYTE(result) = 1;
- return result;
+
+ stru_F8AD28.uNumLightsApplied = a7;
+ return true;
}
// 519AB4: using guessed type int uNumStationaryLightsApplied;
@@ -1481,16 +1260,16 @@
v54 = abs(v60);
v55 = pRenderer->bUsingSpecular;
stru_F8AD28._blv_lights_light_dot_faces[*v53] = v54;
- stru_F8AD28._blv_lights_smthngs[*v53] = v8->field_B;
+ stru_F8AD28._blv_lights_types[*v53] = v8->uLightType;
v56 = pRenderer->pRenderD3D;
- v57 = stru_F8AD28._blv_lights_smthngs[*v53];
+ v57 = stru_F8AD28._blv_lights_types[*v53];
if ( pRenderer->pRenderD3D && v55 && v57 & 4 )
- v57 = byte_4E94D2;
- stru_F8AD28._blv_lights_smthngs[*v53] = v57;
+ v57 = _4E94D2_light_type;
+ stru_F8AD28._blv_lights_types[*v53] = v57;
result = 4 * *v53;
if ( v56 && v55 )
{
- if ( stru_F8AD28._blv_lights_smthngs[*v53] & 4 )
+ if ( stru_F8AD28._blv_lights_types[*v53] & 4 )
{
*(float *)((char *)stru_F8AD28._blv_lights_rs + result) = *(float *)((char *)stru_F8AD28._blv_lights_rs + result)
* 0.33000001;
@@ -1504,7 +1283,7 @@
LOBYTE(result) = 1;
return result;
}
-// 4E94D2: using guessed type char byte_4E94D2;
+// 4E94D2: using guessed type char _4E94D2_light_type;
//----- (0045D3C7) --------------------------------------------------------
bool LightmapBuilder::_45D3C7(stru148 *a1)
@@ -1783,7 +1562,7 @@
char v3; // zf@1
IDirect3DDevice3 *v4; // eax@2
HRESULT v5; // eax@2
- char *v6; // eax@2
+ //char *v6; // eax@2
struct IDirect3DTexture2 *v7; // edi@4
HRESULT v8; // eax@8
HRESULT v9; // eax@8
@@ -1800,13 +1579,13 @@
HRESULT v20; // eax@21
IDirect3DDevice3 *v21; // eax@21
HRESULT v22; // eax@21
- IDirect3DDevice3 *v23; // eax@23
+ //IDirect3DDevice3 *v23; // eax@23
std::string v25; // [sp+44h] [bp-44h]@12
signed int v26; // [sp+48h] [bp-40h]@21
signed int v27; // [sp+4Ch] [bp-3Ch]@21
Lightmap *v28; // [sp+50h] [bp-38h]@2
int v29; // [sp+54h] [bp-34h]@2
- float v30; // [sp+58h] [bp-30h]@2
+ //float v30; // [sp+58h] [bp-30h]@2
int arg4; // [sp+68h] [bp-20h]@8
float v32; // [sp+6Ch] [bp-1Ch]@8
float v33; // [sp+70h] [bp-18h]@8
@@ -1820,13 +1599,13 @@
LODWORD(v38) = (int)this;
if ( !v3 )
{
- v30 = 0.0;
+ //v30 = 0.0;
//v4 = pRenderer->pRenderD3D->pDevice;
ErrD3D(v4->SetTextureStageState(0, D3DTSS_ADDRESS, 3u));
- v6 = (char *)stru_69BD44.c_str();
- if ( !stru_69BD44.c_str() )
- v6 = (char *)&dword_4D86F0;
- v7 = pGame->pIndoorCameraD3D->LoadTextureAndGetHardwarePtr(v6);
+ //v6 = (char *)stru_69BD44.c_str();
+ //if ( !stru_69BD44.c_str() )
+ // v6 = (char *)&dword_4D86F0;
+ v7 = pGame->pIndoorCameraD3D->LoadTextureAndGetHardwarePtr("effpar03");
if ( pRenderer->bUsingSpecular )
pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, 0);
if ( !byte_4D864C || !(pGame->uFlags & 1) )
@@ -1892,253 +1671,134 @@
//LODWORD(v30) = 1;
//v29 = 28;
//v28 = (Lightmap *)pRenderer->pRenderD3D->pDevice;
- pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, 1);
- v30 = pRenderer->uFogColor;
- v23 = pRenderer->pRenderD3D->pDevice;
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, 1));
+ //v30 = pRenderer->uFogColor;
+ //v23 = pRenderer->pRenderD3D->pDevice;
//v29 = 34;
//v28 = (Lightmap *)v23;
- v23->SetRenderState(D3DRENDERSTATE_FOGCOLOR, LODWORD(pRenderer->uFogColor));
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGCOLOR, pRenderer->uFogColor));
//v28 = (Lightmap *)pRenderer->pRenderD3D->pDevice;
- pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGTABLEMODE, false);
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGTABLEMODE, false));
}
}
return 1;
}
-// 4D864C: using guessed type char byte_4D864C;
-// 4D86F0: using guessed type int dword_4D86F0;
+
//----- (0045DA56) --------------------------------------------------------
-bool LightmapBuilder::DrawLightmaps2(float a2)
+bool LightmapBuilder::DrawLightmaps2(float z_bias)
{
- LightmapBuilder *v2; // esi@1
- bool result; // eax@1
- signed int v4; // edi@2
- std::string v5; // [sp-14h] [bp-3Ch]@5
- const char *v6; // [sp-4h] [bp-2Ch]@5
- int v7; // [sp+0h] [bp-28h]@5
Vec3_float_ v; // [sp+Ch] [bp-1Ch]@2
- std::string *v9; // [sp+18h] [bp-10h]@5
- unsigned int v10; // [sp+1Ch] [bp-Ch]@5
- Lightmap *a1; // [sp+20h] [bp-8h]@3
- int a3; // [sp+27h] [bp-1h]@5
+ v.z = 1.0;
+ v.y = 1.0;
+ v.x = 1.0;
+
+ for (uint i = 0; i < std__vector_183808_size; ++i)
+ if (!DrawLightmap(std__vector_183808 + i, &v, z_bias))
+ MessageBoxW(nullptr, L"Invalid lightmap detected!", L"E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\Light.cpp:1288", 0);
- v2 = this;
- result = this->std__vector_183808_size;
- if ( result )
- {
- v4 = 0;
- v.z = 1.0;
- v.y = 1.0;
- v.x = 1.0;
- if ( result > 0 )
- {
- a1 = this->std__vector_183808;
- do
- {
- result = DrawLightmap(a1, &v, a2);
- if ( !result )
- {
- MessageBoxW(nullptr, L"Invalid lightmap detected!", L"E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\Light.cpp:1288", 0);
- v10 = 0x4D86ECu;
- }
- ++a1;
- ++v4;
- }
- while ( v4 < (signed int)v2->std__vector_183808_size);
- }
- }
- LOBYTE(result) = 1;
- return result;
+ return true;
}
//----- (0045DAE8) --------------------------------------------------------
-bool LightmapBuilder::DrawLightmap(Lightmap *a1, Vec3_float_ *arg4, float thisa)
+bool LightmapBuilder::DrawLightmap(Lightmap *pLightmap, Vec3_float_ *pColorMult, float z_bias)
{
- Lightmap *v4; // edx@1
- bool result; // eax@2
- double v6; // st7@3
- Vec3_float_ *v7; // ecx@3
- LEVEL_TYPE v8; // edi@3
- int v9; // esi@3
double v10; // st7@4
- unsigned int v11; // ebx@6
- char *v12; // ecx@7
- int v13; // edx@7
double v14; // st7@7
__int16 v15; // fps@8
- unsigned __int8 v16; // c2@8
- unsigned __int8 v17; // c3@8
double v18; // st3@8
- int v19; // eax@11
- double v20; // st3@11
- int v21; // eax@11
- char v22; // zf@11
- HRESULT v23; // eax@15
signed int v24; // [sp-1Ch] [bp-670h]@13
const char *v25; // [sp-18h] [bp-66Ch]@13
int v26; // [sp-14h] [bp-668h]@13
- HRESULT a2; // [sp+0h] [bp-654h]@15
- char v28; // [sp+4h] [bp-650h]@7
- double v29; // [sp+640h] [bp-14h]@3
- __int64 v30; // [sp+648h] [bp-Ch]@3
- float v31; // [sp+650h] [bp-4h]@3
- signed int a1b; // [sp+65Ch] [bp+8h]@3
- float a1c; // [sp+65Ch] [bp+8h]@3
- float a1d; // [sp+65Ch] [bp+8h]@3
- float a1e; // [sp+65Ch] [bp+8h]@3
- unsigned int a1a; // [sp+65Ch] [bp+8h]@7
- int arg4a; // [sp+660h] [bp+Ch]@3
+ RenderVertexD3D3 a2[32]; // [sp+0h] [bp-654h]@7
- v4 = a1;
- if ( (signed int)a1->uNumVertices >= 3 )
+
+ if (pLightmap->uNumVertices < 3)
{
- v6 = (double)BYTE1(a1->field_C10) * a1->flt_C14;
- v30 = a1->field_C10 & 0xFFi64;
- a1b = BYTE2(a1->field_C10);
- v7 = arg4;
- //v31 = v6;
- *((float *)&v30 + 1) = (double)v30 * v4->flt_C14;
- a1c = (double)a1b * v4->flt_C14 * arg4->x;
- //v29 = a1c + 6.7553994e15;
- //arg4a = LODWORD(v29);
- arg4a = floorf(a1c + 0.5f);
+ Log::Warning(L"Lightmap uNumVertices < 3");
+ return false;
+ }
- a1d = v6 * v7->y;
- v29 = a1d + 6.7553994e15;
- LODWORD(v31) = LODWORD(v29);
-
- a1e = *((float *)&v30 + 1) * v7->z;
-
- v29 = a1e + 6.7553994e15;
- HIDWORD(v30) = LODWORD(v29);
+ uint uLightmapColorMaskR = (pLightmap->uColorMask >> 16) & 0xFF;
+ uint uLightmapColorR = floorf(uLightmapColorMaskR * pLightmap->fBrightness * pColorMult->x + 0.5f);
+
+ uint uLightmapColorMaskG = (pLightmap->uColorMask >> 8) & 0xFF;
+ uint uLightmapColorG = floorf(uLightmapColorMaskG * pLightmap->fBrightness * pColorMult->y + 0.5f);
+
+ uint uLightmapColorMaskB = pLightmap->uColorMask & 0xFF;
+ uint uLightmapColorB = floorf(uLightmapColorMaskB * pLightmap->fBrightness * pColorMult->z + 0.5f);
+
+ uint uLightmapColor = uLightmapColorB | (uLightmapColorMaskG << 8) | (uLightmapColorMaskR << 16);
- v8 = uCurrentlyLoadedLevelType;
- v9 = LODWORD(v29) | ((LODWORD(v31) | (arg4a << 8)) << 8);
- if ( uCurrentlyLoadedLevelType == LEVEL_Outdoor)
- v10 = (double)pOutdoorCamera->shading_dist_mist;
- else
- v10 = 16192.0;
- v11 = v4->uNumVertices;
- if ( (signed int)v11 > 0 )
+ if (uCurrentlyLoadedLevelType == LEVEL_Outdoor)
+ v10 = (double)pOutdoorCamera->shading_dist_mist;
+ else
+ v10 = 16192.0;
+ v14 = 1.0 / v10;
+
+ for (uint i = 0; i < pLightmap->uNumVertices; ++i)
+ {
+ v18 = 1.0 - 1.0 / (v14 * pLightmap->pVertices[i].vWorldViewPosition.x * 1000.0);
+ if (fabsf(z_bias) < 1e-5f)
{
- v12 = &v28;
- v13 = (int)&v4->pVertices[0].vWorldViewPosition;
- v14 = 1.0 / v10;
- a1a = v11;
- do
- {
- //UNDEF(v15);
- v18 = 1.0 - 1.0 / (v14 * *(float *)v13 * 1000.0);
- if ( !(v17 | v16) )
- {
- v18 = v18 - thisa;
- if ( v18 < 0.000099999997 )
- v18 = 0.000099999997;
- }
- *((float *)v12 + 1) = v18;
- v19 = *(unsigned int *)(v13 + 12);
- *((unsigned int *)v12 + 4) = 0;
- v20 = 1.0 / *(float *)v13;
- *((unsigned int *)v12 - 1) = v19;
- *(unsigned int *)v12 = *(unsigned int *)(v13 + 16);
- *((unsigned int *)v12 + 5) = *(unsigned int *)(v13 + 24);
- v21 = *(unsigned int *)(v13 + 28);
- *((unsigned int *)v12 + 3) = v9;
- *((unsigned int *)v12 + 6) = v21;
- v13 += 48;
- v12 += 32;
- v22 = a1a-- == 1;
- *((float *)v12 - 6) = v20;
- }
- while ( !v22 );
+ v18 = v18 - z_bias;
+ if (v18 < 0.000099999997)
+ v18 = 0.000099999997;
}
- if ( v8 == 1 )
- {
- v26 = 1346;
- v25 = "E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\Light.cpp";
- v24 = 28;
- }
- else
- {
- v26 = 1354;
- v25 = "E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\Light.cpp";
- v24 = 16;
- }
- v23 = pRenderer->pRenderD3D->pDevice->DrawPrimitive(
- D3DPT_TRIANGLEFAN,
- 452,
- &a2,
- v11,
- v24);
- //CheckHRESULT((CheckHRESULT_stru0 *)&thisa, v23, v25, v26, 0);
- LOBYTE(result) = 1;
+
+ a2[i].pos.x = pLightmap->pVertices[i].vWorldViewProjX;
+ a2[i].pos.z = v18;
+ a2[i].pos.y = pLightmap->pVertices[i].vWorldViewProjY;
+ a2[i].rhw = 1.0 / pLightmap->pVertices[i].vWorldViewPosition.x;
+ a2[i].diffuse = uLightmapColor;
+ a2[i].specular = 0;
+ a2[i].texcoord.x = pLightmap->pVertices[i].u;
+ a2[i].texcoord.y = pLightmap->pVertices[i].v;
}
- else
- {
- LOBYTE(result) = 0;
- }
- return result;
+
+ if (uCurrentlyLoadedLevelType == LEVEL_Indoor)
+ v24 = D3DDP_DONOTLIGHT | D3DDP_DONOTCLIP | D3DDP_DONOTUPDATEEXTENTS;
+ else
+ v24 = D3DDP_DONOTLIGHT;
+
+ ErrD3D(pRenderer->pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN,
+ D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1,
+ a2,
+ pLightmap->uNumVertices,
+ v24));
+
+ return true;
}
//----- (0045DCA9) --------------------------------------------------------
void LightmapBuilder::DoDrawLightmaps()
{
- const char *v1; // ebx@0
- int v2; // ebp@0
- int v3; // edi@0
- int v4; // esi@0
- HRESULT v5; // eax@4
- HRESULT v6; // eax@4
- HRESULT v7; // eax@4
- char *v8; // eax@4
- //IDirect3DDevice3Vtbl *v9; // ebp@6
- struct IDirect3DTexture2 *v10; // ST90_4@6
- //IDirect3DDevice3 *v11; // ST88_4@6
- HRESULT v12; // eax@6
- HRESULT v13; // eax@6
- HRESULT v14; // eax@6
- HRESULT v15; // eax@6
- HRESULT v16; // eax@6
- HRESULT v17; // eax@6
- HRESULT v18; // eax@6
- HRESULT v19; // eax@6
- LightmapBuilder *v20; // [sp+98h] [bp-8h]@1
- LightmapBuilder *v21; // [sp+9Ch] [bp-4h]@1
- LightmapBuilder *thisa; // [sp+A4h] [bp+4h]@0
- //CheckHRESULT_stru0 a8; // [sp+A8h] [bp+8h]@0
- //CheckHRESULT_stru0 thisaa; // [sp+B4h] [bp+14h]@0
+ if (!std__vector_183808_size)
+ return;
+
+ if (pRenderer->bUsingSpecular)
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, 0));
+
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, 1));
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, 0));
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 1u));
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DITHERENABLE, 0));
+
+ auto pTex = pGame->pIndoorCameraD3D->LoadTextureAndGetHardwarePtr("effpar03");
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetTexture(0, pTex));
- v21 = this;
- v20 = this;
- if ( this->std__vector_183808_size )
- {
- if ( pRenderer->bUsingSpecular )
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, 0));
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 2u));
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 2u));
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, 1));
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, 0));
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 1u));
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DITHERENABLE, 0));
+ DrawLightmaps2(0.00050000002);
- v8 = (char *)stru_69BD44.c_str();
- if ( !stru_69BD44.size() )
- v8 = (char *)&dword_4D86F0;
- //v9 = pRenderer->pRenderD3D->pDevice->lpVtbl;
- v10 = pGame->pIndoorCameraD3D->LoadTextureAndGetHardwarePtr(v8);
- //v11 = pRenderer->pRenderD3D->pDevice;
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetTexture(0, v10));
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 2u));
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 2u));
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 2u));
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 1u));
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 0));
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DITHERENABLE, 1u));
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, 1u));
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, 2));
- DrawLightmaps2(0.00050000002);
-
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 2u));
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 1u));
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 0));
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DITHERENABLE, 1u));
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, 1u));
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, 2));
- if ( pRenderer->bUsingSpecular )
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, 1u));
- }
+ if (pRenderer->bUsingSpecular)
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, 1u));
}
\ No newline at end of file
diff -r c83d06692295 -r c0cf9393af64 LightmapBuilder.h
--- a/LightmapBuilder.h Mon Oct 22 09:20:49 2012 +0600
+++ b/LightmapBuilder.h Mon Oct 29 09:28:08 2012 +0600
@@ -17,8 +17,8 @@
__int16 field_C0A;
__int16 field_C0C;
__int16 field_C0E;
- int field_C10;
- float flt_C14;
+ unsigned int uColorMask;
+ float fBrightness;
int field_C18;
};
#pragma pack(pop)
@@ -28,12 +28,12 @@
#pragma pack(push, 1)
struct LightmapBuilder
{
- LightmapBuilder();
- inline ~LightmapBuilder() //----- (0045BBAA)
- {}
+ LightmapBuilder();
+ inline ~LightmapBuilder() //----- (0045BBAA)
+ {}
void DoDrawLightmaps();
- bool DrawLightmap(Lightmap *a1, Vec3_float_ *arg4, float thisa);
+ bool DrawLightmap(Lightmap *a1, Vec3_float_ *pColorMult, float z_bias);
bool DrawLightmaps2(float a2);
char _45D74F_MessWithLight(int a2, int *a3);
void DrawLightmaps(int a2);
@@ -42,19 +42,19 @@
int _45D426(struct Span *a1, struct Edge **a2, unsigned int a3, struct Edge *a4, int a5);
bool _45D3C7(struct stru148 *a1);
bool StackLight_TerrainFace(struct StationaryLight *pLight, struct Vec3_float_ *pNormal, float *a3, struct RenderVertexSoft *a1, unsigned int uStripType, int X, unsigned int *pSlot);
- bool StackLights_TerrainFace(struct Vec3_float_ *pNormal, float *a3, struct RenderVertexSoft *a1, unsigned int uStripType, int X);
+ bool StackLights_TerrainFace(struct Vec3_float_ *pNormal, float *a3, struct RenderVertexSoft *a1, unsigned int uStripType, bool bLightBackfaces);
bool ApplyLight_ODM(struct StationaryLight *pLight, struct ODMFace *pFace, unsigned int *pSlot, char a4);
bool ApplyLights_OutdoorFace(struct ODMFace *pFace);
double _45CC0C_light(struct Vec3_float_ a1, float a2, float a3, struct Vec3_float_ *pNormal, float a5, int uLightType);
int _45CBD4(struct RenderVertexSoft *a2, int a3, int *a4, int *a5);
int _45CB89(struct RenderVertexSoft *a1, int a2);
int _45CA88(struct stru320 *a2, struct RenderVertexSoft *a3, int a4, struct Vec3_float_ *pNormal);
- bool ApplyLight_BLV(struct StationaryLight *pLight, struct BLVFace *a2, unsigned int *pSlot, char X, int a5);
+ bool ApplyLight_BLV(struct StationaryLight *pLight, struct BLVFace *a2, unsigned int *pSlot, bool bLightBackfaces, char *a5);
bool ApplyLights_IndoorFace(unsigned int uFaceID);
int _45C6D6(int a2, struct RenderVertexSoft *a3, Lightmap *pLightmap);
int _45C4B9(int a2, struct RenderVertexSoft *a3, Lightmap *pLightmap);
- char _45BE86_build_light_polygon(int arg0, float a4, int arg8, float a5, int uLightType, struct stru314 *a7, signed int a2, RenderVertexSoft *a9, char uClipFlag);
- char ApplyLights(struct stru320 *a2, struct stru154 *a3, unsigned int uNumVertices, struct RenderVertexSoft *a5, float a6, char a7);
+ bool _45BE86_build_light_polygon(Vec3_int_ *pos, float radius, unsigned int uColorMask, float dot_dist, int uLightType, struct stru314 *a7, unsigned int uNumVertices, RenderVertexSoft *a9, char uClipFlag);
+ bool ApplyLights(struct stru320 *a2, struct stru154 *a3, unsigned int uNumVertices, struct RenderVertexSoft *a5, struct IndoorCameraD3D_Vec4 *, char uClipFlag);
void (__thiscall ***vdestructor_ptr)(LightmapBuilder *, bool);
@@ -72,7 +72,7 @@
float flt_3C8C20;
float flt_3C8C24;
float flt_3C8C28;
- float flt_3C8C2C;
+ float flt_3C8C2C_lightmaps_brightness;
float flt_3C8C30;
RenderVertexSoft field_3C8C34[256];
int uFlags;
@@ -83,8 +83,8 @@
extern LightsStack_StationaryLight_ *pStationaryLightsStack;
-extern StationaryLight pStationaryLights[400];
-extern int uNumStationaryLightsApplied; // weak
+//extern StationaryLight pStationaryLights[400];
+//extern int uNumStationaryLightsApplied; // weak
extern LightsStack_MobileLight_ *pMobileLightsStack;
-extern MobileLight pMobileLights[400];
-extern int uNumMobileLightsApplied;
\ No newline at end of file
+//extern MobileLight pMobileLights[400];
+//extern int uNumMobileLightsApplied;
\ No newline at end of file
diff -r c83d06692295 -r c0cf9393af64 Lights.h
--- a/Lights.h Mon Oct 22 09:20:49 2012 +0600
+++ b/Lights.h Mon Oct 29 09:28:08 2012 +0600
@@ -13,7 +13,7 @@
unsigned __int8 uLightColorR;
unsigned __int8 uLightColorG;
unsigned __int8 uLightColorB;
- char field_B;
+ char uLightType;
};
#pragma pack(pop)
@@ -28,7 +28,7 @@
unsigned __int8 uLightColorR;
unsigned __int8 uLightColorG;
unsigned __int8 uLightColorB;
- char field_B;
+ char uLightType;
__int16 field_C;
__int16 uSectorID;
__int16 field_10;
@@ -72,7 +72,7 @@
}
//----- (004AD3C8) --------------------------------------------------------
- inline bool AddLight(__int16 x, __int16 y, __int16 z, __int16 a5, unsigned char r, unsigned char g, unsigned char b, char a9)
+ inline bool AddLight(__int16 x, __int16 y, __int16 z, __int16 a5, unsigned char r, unsigned char g, unsigned char b, char uLightType)
{
unsigned int v9; // eax@1
std::string v11; // [sp-18h] [bp-18h]@3
@@ -92,7 +92,7 @@
pLight->uLightColorR = (unsigned __int8)r;
pLight->uLightColorG = g;
pLight->uLightColorB = b;
- pLight->field_B = a9;
+ pLight->uLightType = uLightType;
return true;
}
@@ -123,7 +123,7 @@
this->uNumLightsActive = 0;
}
- bool AddLight(__int16 x, __int16 y, __int16 z, __int16 uSectorID, int uRadius, unsigned __int8 r, unsigned __int8 g, unsigned __int8 b, int *a10);
+ bool AddLight(__int16 x, __int16 y, __int16 z, __int16 uSectorID, int uRadius, unsigned __int8 r, unsigned __int8 g, unsigned __int8 b, char a10);
diff -r c83d06692295 -r c0cf9393af64 LightsStack.cpp
--- a/LightsStack.cpp Mon Oct 22 09:20:49 2012 +0600
+++ b/LightsStack.cpp Mon Oct 29 09:28:08 2012 +0600
@@ -4,38 +4,25 @@
#include "mm7_data.h"
//----- (00467D88) --------------------------------------------------------
-bool LightsStack_MobileLight_::AddLight(__int16 x, __int16 y, __int16 z, __int16 uSectorID, int uRadius, unsigned __int8 r, unsigned __int8 g, unsigned __int8 b, int *a10)
+bool LightsStack_MobileLight_::AddLight(__int16 x, __int16 y, __int16 z, __int16 uSectorID, int uRadius, unsigned __int8 r, unsigned __int8 g, unsigned __int8 b, char uLightType)
{
- unsigned int v10; // eax@1
- int v11; // esi@2
- MobileLight *result; // eax@2
- std::string v13; // [sp-18h] [bp-1Ch]@3
- const char *v14; // [sp-8h] [bp-Ch]@3
- int v15; // [sp-4h] [bp-8h]@3
-
- v10 = this->uNumLightsActive;
- if ( (signed int)v10 >= 400 )
+ if (uNumLightsActive >= 400)
{
MessageBoxW(nullptr, L"Too many mobile lights!", L"E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\MobileLightStack.cpp:51", 0);
- result = 0;
+ return false;
}
- else
- {
- v11 = uRadius;
- result = &this->pLights[v10];
- result->vPosition.x = x;
- result->vPosition.y = y;
- result->vPosition.z = z;
- result->uRadius = v11;
- result->field_C = (((v11 < 0) - 1) & 0x3E) - 31;
- result->uSectorID = uSectorID;
- result->field_10 = v11 * v11 >> 5;
- result->uLightColorR = r;
- result->uLightColorG = g;
- result->uLightColorB = b;
- result->field_B = (char)a10;
- ++this->uNumLightsActive;
- LOBYTE(result) = 1;
- }
- return (bool)result;
+
+ pLights[uNumLightsActive].vPosition.x = x;
+ pLights[uNumLightsActive].vPosition.y = y;
+ pLights[uNumLightsActive].vPosition.z = z;
+ pLights[uNumLightsActive].uRadius = uRadius;
+ pLights[uNumLightsActive].field_C = (((uRadius < 0) - 1) & 0x3E) - 31;
+ pLights[uNumLightsActive].uSectorID = uSectorID;
+ pLights[uNumLightsActive].field_10 = uRadius * uRadius >> 5;
+ pLights[uNumLightsActive].uLightColorR = r;
+ pLights[uNumLightsActive].uLightColorG = g;
+ pLights[uNumLightsActive].uLightColorB = b;
+ pLights[uNumLightsActive++].uLightType = uLightType;
+
+ return true;
}
diff -r c83d06692295 -r c0cf9393af64 Might and Magic Trilogy.vcxproj.filters
--- a/Might and Magic Trilogy.vcxproj.filters Mon Oct 22 09:20:49 2012 +0600
+++ b/Might and Magic Trilogy.vcxproj.filters Mon Oct 29 09:28:08 2012 +0600
@@ -147,7 +147,6 @@
-
@@ -200,7 +199,6 @@
-
@@ -317,7 +315,4 @@
-
-
-
\ No newline at end of file
diff -r c83d06692295 -r c0cf9393af64 Monsters.h
--- a/Monsters.h Mon Oct 22 09:20:49 2012 +0600
+++ b/Monsters.h Mon Oct 29 09:28:08 2012 +0600
@@ -177,7 +177,7 @@
unsigned __int16 uMonsterRadius;
unsigned __int16 uMovementSpeed;
__int16 uToHitRadius;
- int uTintColor;
+ unsigned int uTintColor;
unsigned __int16 pSoundSampleIDs[4];
char pMonsterName[32];
char pSpriteNames[10][10];
diff -r c83d06692295 -r c0cf9393af64 Mouse.cpp
--- a/Mouse.cpp Mon Oct 22 09:20:49 2012 +0600
+++ b/Mouse.cpp Mon Oct 29 09:28:08 2012 +0600
@@ -390,53 +390,15 @@
}
//----- (00469E3B) --------------------------------------------------------
-unsigned __int16 *Mouse::_469E3B()
+void Mouse::DrawCursorToTarget()
{
- unsigned __int16 *result; // eax@1
- int v2; // esi@3
- unsigned int v3; // edx@3
- int v4; // edi@4
- unsigned __int16 *v5; // ebx@5
- unsigned __int16 *v6; // esi@6
- unsigned int v7; // [sp+4h] [bp-Ch]@2
- unsigned __int16 *v8; // [sp+8h] [bp-8h]@2
- unsigned __int16 *v9; // [sp+Ch] [bp-4h]@2
+ if (!pCursorBitmap3_sysmembits_16bit)
+ return;
- result = this->pCursorBitmap3_sysmembits_16bit;
- if ( result )
- {
- v9 = this->pCursorBitmap3_sysmembits_16bit;
- v7 = pRenderer->uTargetSurfacePitch;
- v8 = pRenderer->pTargetSurface;
- result = (unsigned __int16 *)this->field_44;
- if ( (signed int)result < this->field_4C )
- {
- v2 = this->field_48;
- v3 = pRenderer->uTargetSurfacePitch * (int)result;
- do
- {
- v4 = this->field_40;
- if ( v4 < v2 )
- {
- v5 = &v8[v3 + v4];
- do
- {
- v6 = v9;
- ++v9;
- ++v4;
- *v5 = *v6;
- v2 = this->field_48;
- ++v5;
- }
- while ( v4 < v2 );
- }
- v3 += v7;
- result = (unsigned __int16 *)((char *)result + 1);
- }
- while ( (signed int)result < this->field_4C );
- }
- }
- return result;
+ auto pSrc = pCursorBitmap3_sysmembits_16bit;
+ for (uint y = field_44; y < field_4C; ++y)
+ for (uint x = field_40; x < field_48; ++x)
+ pRenderer->pTargetSurface[y * pRenderer->uTargetSurfacePitch + x] = *pSrc++;
}
//----- (00469EA4) --------------------------------------------------------
@@ -780,8 +742,8 @@
int v2; // eax@2
int v3; // esi@4
char result; // al@5
- const char *v5; // eax@6
- std::string v6; // [sp-18h] [bp-12Ch]@9
+ //const char *v5; // eax@6
+ //std::string v6; // [sp-18h] [bp-12Ch]@9
const char *v7; // [sp-8h] [bp-11Ch]@9
int v8; // [sp-4h] [bp-118h]@9
DDSURFACEDESC2 Dst; // [sp+Ch] [bp-108h]@1
@@ -828,10 +790,7 @@
}
else
{
- v5 = std__string_720990.c_str();
- if ( !std__string_720990.size() )
- v5 = (const char *)&dword_4D86F0;
- if ( !LoadCursor(v5) )
+ if ( !LoadCursor("micon1") )
{
MessageBoxW(nullptr, L"Could not load async mouse cursor image", L"E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\MouseAsync.cpp:182", 0);
}
diff -r c83d06692295 -r c0cf9393af64 Mouse.h
--- a/Mouse.h Mon Oct 22 09:20:49 2012 +0600
+++ b/Mouse.h Mon Oct 29 09:28:08 2012 +0600
@@ -72,7 +72,7 @@
void DrawCursor();
void _469E1C();
void _469E24();
- unsigned __int16 *_469E3B();
+ void DrawCursorToTarget();
void _469EA4();
void Activate(int bActive);
void SetMouseClick(int x, int y);
diff -r c83d06692295 -r c0cf9393af64 OSAPI.cpp
--- a/OSAPI.cpp Mon Oct 22 09:20:49 2012 +0600
+++ b/OSAPI.cpp Mon Oct 29 09:28:08 2012 +0600
@@ -9,8 +9,9 @@
int __stdcall wWinMain(HINSTANCE hInstance, HINSTANCE, wchar_t *lpCmdLine, int nShowCmd)
{
Log::Initialize();
-
- if (HWND hMM7Window = FindWindowW(L"MM7", 0))
+
+ //if (HWND hMM7Window = FindWindowW(L"MM7", 0))
+ if (HWND hMM7Window = FindWindowW(L"M&MTrilogy", 0))
{
if (IsIconic(hMM7Window))
ShowWindow(hMM7Window, SW_RESTORE);
diff -r c83d06692295 -r c0cf9393af64 Outdoor.cpp
--- a/Outdoor.cpp Mon Oct 22 09:20:49 2012 +0600
+++ b/Outdoor.cpp Mon Oct 29 09:28:08 2012 +0600
@@ -61,8 +61,8 @@
* (signed __int64)pParty->field_18) >> 16);
v3 = stru_5C6E00->SinCos(pParty->sRotationY - stru_5C6E00->uIntegerHalfPi);
pIndoorCamera->field_4C = v1;
- pIndoorCamera->pos.y = pParty->vPosition.z - ((unsigned __int64)(v3 * (signed __int64)pParty->field_18) >> 16);
- pIndoorCamera->pos.z = pParty->vPosition.y + pParty->sEyelevel;
+ pIndoorCamera->pos.y = pParty->vPosition.y - ((unsigned __int64)(v3 * (signed __int64)pParty->field_18) >> 16);
+ pIndoorCamera->pos.z = pParty->vPosition.z + pParty->sEyelevel;
if ( v2 || pRenderer->pRenderD3D )
{
ResetStru148s();
@@ -70,7 +70,7 @@
sub_481ED9_MessWithOutdoorCamera();
}
pIndoorCamera->uMapGridCellX = WorldPosToGridCellX(pParty->vPosition.x);
- pIndoorCamera->uMapGridCellZ = WorldPosToGridCellZ(pParty->vPosition.z);
+ pIndoorCamera->uMapGridCellZ = WorldPosToGridCellZ(pParty->vPosition.y);
if ( v2 )
{
Software_ResetNewEdges();
@@ -104,18 +104,18 @@
sr_sub_486F92_MessWithEdgesAndSpans();
pOutdoorCamera->_487355();
LABEL_16:
- uNumMobileLightsApplied = 0;
- uNumStationaryLightsApplied = 0;
+ pMobileLightsStack->uNumLightsActive = 0;
+ pStationaryLightsStack->uNumLightsActive = 0;
if ( !pRenderer->pRenderD3D )
{
pRenderer->ExecOutdoorDrawSW();
pGame->pIndoorCameraD3D->_438240_draw_lits();
}
pGame->PushStationaryLights(-1);
- pGame->PushStru165s();
+ pGame->PrepareBloodsplats();
if ( v2 )
{
- v4 = WorldPosToGridCellZ(pParty->vPosition.z);
+ v4 = WorldPosToGridCellZ(pParty->vPosition.y);
v5 = WorldPosToGridCellX(pParty->vPosition.x);
pOutdoor->_47EF60(v5, v4, 1);
}
@@ -500,7 +500,7 @@
|| v15 )
return 2;
v5 = WorldPosToGridCellX(pParty->vPosition.x);
- v6 = WorldPosToGridCellZ(pParty->vPosition.z);
+ v6 = WorldPosToGridCellZ(pParty->vPosition.y);
v7 = _47ED83(v5, v6 - 1);
v8 = pTileTable->pTiles[_47ECC1(v7)].uTerrainType;
if ( v8 )
@@ -1805,7 +1805,7 @@
{
v62 = pBitmaps_LOD->LoadTexture(Str2);
v63 = (ODMFace *)pFilename;
- BYTE1(v63->uFaceAttributes) &= 0xBFu;
+ BYTE1(v63->uAttributes) &= 0xBFu;
LABEL_68:
v63->uTextureID = v62;
v145 = (signed __int16)v62 != -1 ? (int)&pBitmaps_LOD->pTextures[(signed __int16)v62] : 0;
@@ -2048,7 +2048,7 @@
File = 0;
do
{
- v106 = (char *)&File->uFaceAttributes + *(int *)(v87 + 84);
+ v106 = (char *)&File->uAttributes + *(int *)(v87 + 84);
memcpy(v106, v85, 4u);
v88 = v5->pBModels;
++File;
@@ -2070,9 +2070,9 @@
if ( v90->sCogTriggeredID )
{
if ( v90->HasEventHint() )
- BYTE2(File->uFaceAttributes) |= 0x10u;
+ BYTE2(File->uAttributes) |= 0x10u;
else
- BYTE2(File->uFaceAttributes) &= 0xEFu;
+ BYTE2(File->uAttributes) &= 0xEFu;
}
++thisa;
v89 = v5->pBModels;
@@ -2778,7 +2778,7 @@
__int16 v13; // cx@21
SpriteFrame *v14; // eax@24
SpriteFrame *v15; // ebx@25
- int *v16; // eax@25
+ //int *v16; // eax@25
int v17; // eax@35
int v18; // ST78_4@36
int v19; // eax@36
@@ -2911,19 +2911,19 @@
LABEL_25:
v62 = 0;
v15 = v14;
- v16 = (int *)v14->uFlags;
- if ( (unsigned __int8)v16 & 2 )
+ //v16 = (int *)v14->uFlags;
+ if (v14->uFlags & 2)
v62 = 2;
- if ( (unsigned int)v16 & 0x40000 )
+ if (v14->uFlags & 0x40000)
v62 |= 0x40u;
- if ( (unsigned int)v16 & 0x20000 )
+ if (v14->uFlags & 0x20000)
LOBYTE(v62) = v62 | 0x80;
- if ( (256 << v41) & (unsigned int)v16 )
+ if ((256 << v41) & v14->uFlags)
v62 |= 4u;
if ( v15->uGlowRadius )
{
- LOBYTE(v16) = byte_4E94D3;
- pMobileLightsStack->AddLight(x, y, v3, 0, v15->uGlowRadius, 0xFFu, 0xFFu, 0xFFu, v16);
+ //LOBYTE(v16) = byte_4E94D3;
+ pMobileLightsStack->AddLight(x, y, v3, 0, v15->uGlowRadius, 0xFFu, 0xFFu, 0xFFu, byte_4E94D3);
}
v17 = (x - pIndoorCamera->pos.x) << 16;
if ( pIndoorCamera->sRotationX )
@@ -3012,14 +3012,14 @@
goto LABEL_53;
}
}
- v28->field_26 = v27;
- v28->field_20 = x;
- v28->field_28 = v46;
- v28->field_22 = y;
- v28->field_24 = v61;
+ v28->uScreenSpaceX = v27;
+ v28->some_x = x;
+ v28->uScreenSpaceY = v46;
+ v28->some_y = y;
+ v28->some_z = v61;
HIWORD(v34) = HIWORD(X);
LOWORD(v34) = 0;
- v28->field_2A = 0;
+ v28->uPaletteSubindex = 0;
v28->sZValue = v34 + (8 * v59 | 3);
v28->field_14 = v59;
v35 = pMonsterList->pMonsters;
@@ -3028,7 +3028,7 @@
v38 = *(int *)(v1 + 150) < 0;
v28->field_1E = v62 | 0x200;
v28->pSpriteFrame = v15;
- v28->field_2C_prolly_tint = *((int *)&v35[v36] - 36);
+ v28->uTintColor = *((int *)&v35[v36] - 36);
if ( !v38 && (!(v38 | v37) || *(int *)(v1 + 146)) )
v28->field_1E = v62 | 0x200;
}
diff -r c83d06692295 -r c0cf9393af64 Outdoor.h
--- a/Outdoor.h Mon Oct 22 09:20:49 2012 +0600
+++ b/Outdoor.h Mon Oct 29 09:28:08 2012 +0600
@@ -74,13 +74,16 @@
static bool IsBackfaceCulled(struct ODMFace *a1, struct RenderVertexSoft *a2, struct stru148 *a3);
-
+
+ inline bool Invisible() const {return uAttributes & FACE_INVISIBLE;}
+ inline bool Visible() const {return !Invisible();}
+ inline bool TwoSided() const {return uAttributes & FACE_TWO_SIDED;}
struct Plane_int_ pFacePlane;
int zCalc1;
int zCalc2;
int zCalc3;
- unsigned int uFaceAttributes;
+ unsigned int uAttributes;
unsigned __int16 pVertexIDs[20];
unsigned __int16 pTextureUIDs[20];
unsigned __int16 pTextureVIDs[20];
diff -r c83d06692295 -r c0cf9393af64 OutdoorCamera.h
--- a/OutdoorCamera.h Mon Oct 22 09:20:49 2012 +0600
+++ b/OutdoorCamera.h Mon Oct 29 09:28:08 2012 +0600
@@ -47,7 +47,7 @@
unsigned int uNumEdges;
unsigned int uNumSurfs;
unsigned int uNumSpans;
- int field_3C;
+ unsigned int uNumBillboards;
float field_40;
int field_44;
int outdoor_grid_band_3;
diff -r c83d06692295 -r c0cf9393af64 Overlays.cpp
--- a/Overlays.cpp Mon Oct 22 09:20:49 2012 +0600
+++ b/Overlays.cpp Mon Oct 29 09:28:08 2012 +0600
@@ -96,8 +96,8 @@
int v6; // [sp-4h] [bp-8h]@4
Texture *v7; // [sp-4h] [bp-8h]@14
- result = uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions;
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions
+ result = pCurrentScreen;
+ if ( pCurrentScreen
|| pParty->bTurnBasedModeOn != 1 )
return result;
if ( pTurnEngine->field_4 == 3 )
@@ -144,7 +144,7 @@
}
return result;
}
-// 4E28F8: using guessed type int uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions;
+// 4E28F8: using guessed type int pCurrentScreen;
// 50C994: using guessed type int dword_50C994;
// 50C998: using guessed type int dword_50C998_turnbased_icon_1A;
diff -r c83d06692295 -r c0cf9393af64 ParticleEngine.cpp
--- a/ParticleEngine.cpp Mon Oct 22 09:20:49 2012 +0600
+++ b/ParticleEngine.cpp Mon Oct 29 09:28:08 2012 +0600
@@ -7,7 +7,6 @@
#include "IndoorCamera.h"
#include "Math.h"
#include "LOD.h"
-#include "stru346.h"
#include "mm7_data.h"
@@ -44,7 +43,7 @@
v3 = (Particle *)this;
do
{
- if ( !v3->bFree )
+ if ( !v3->uType )
break;
++v2;
++v3;
@@ -57,7 +56,7 @@
if ( v2 > this->uEndParticle )
this->uEndParticle = v2;
v4 = &this->pParticles[v2];
- v4->bFree = a2->bFree;
+ v4->uType = a2->bFree;
v4->x = a2->x;
v4->y = a2->y;
v4->z = a2->z;
@@ -70,8 +69,8 @@
v5 = a2->uDiffuse;
v4->uParticleColor = v5;
v4->uLightColor = v5;
- v6 = (v4->bFree & 4) == 0;
- v4->field_20 = a2->field_20;
+ v6 = (v4->uType & 4) == 0;
+ v4->timeToLive = a2->timeToLive;
v4->uTextureID = a2->uTextureID;
v4->flt_28 = a2->flt_28;
if ( v6 )
@@ -91,128 +90,100 @@
//----- (0048ABF3) --------------------------------------------------------
void ParticleEngine::Draw()
{
- ParticleEngine *v1; // esi@1
+ uTimeElapsed += pEventTimer->uTimeElapsed;
+ pLines.uNumLines = 0;
- v1 = this;
- v1->uTimeElapsed += pEventTimer->uTimeElapsed;
- this->pLines.uNumLines = 0;
- if ( uCurrentlyLoadedLevelType == LEVEL_Indoor )
+ if (uCurrentlyLoadedLevelType == LEVEL_Indoor)
DrawParticles_BLV();
else
DrawParticles_ODM();
- if ( pRenderer->pRenderD3D )
+
+ if (pRenderer->pRenderD3D)
{
- if ( v1->pLines.uNumLines )
+ if (pLines.uNumLines)
{
pRenderer->pRenderD3D->pDevice->SetTexture(0, 0);
pRenderer->pRenderD3D->pDevice->DrawPrimitive(
D3DPT_LINELIST,
- 452,
- v1->pLines.pLineVertices,
- v1->pLines.uNumLines,
- 16);
+ D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1,
+ pLines.pLineVertices,
+ pLines.uNumLines,
+ D3DDP_DONOTLIGHT);
}
}
}
//----- (0048AC65) --------------------------------------------------------
-int ParticleEngine::UpdateParticles()
+void ParticleEngine::UpdateParticles()
{
- ParticleEngine *v1; // ebx@1
unsigned int time; // edi@1
- int v3; // eax@1
- int v4; // esi@2
int v5; // eax@3
char v6; // sf@4
float v7; // ST4C_4@11
double v8; // st7@12
int v9; // eax@12
double v10; // st7@14
- float v11; // ST4C_4@14
- float v12; // ST3C_4@14
- double v13; // ST20_8@14
- float v14; // ST3C_4@14
- double v15; // ST18_8@14
- float v16; // ST3C_4@14
- double v17; // ST10_8@14
- signed int result; // eax@19
signed int v19; // [sp+38h] [bp-14h]@1
int v20; // [sp+3Ch] [bp-10h]@1
unsigned int time_; // [sp+40h] [bp-Ch]@1
int v22; // [sp+44h] [bp-8h]@12
- int v23; // [sp+48h] [bp-4h]@1
v20 = 0;
- v1 = this;
time = pMiscTimer->bPaused == 0 ? pEventTimer->uTimeElapsed : 0;
- v3 = this->uStartParticle;
v19 = 500;
time_ = pMiscTimer->bPaused == 0 ? pEventTimer->uTimeElapsed : 0;
- v23 = this->uStartParticle;
- if ( v3 <= this->uEndParticle )
+
+ for (uint i = uStartParticle; i < uEndParticle; ++i)
{
- v4 = (int)((char *)&this->pParticles[v3].uParticleColor + 1);
- do
- {
- v5 = *(int *)(v4 - 0x1D);
- if ( v5 )
- {
- v6 = ((*(int *)(v4 + 3) - time) & 0x80000000u) != 0;
- *(int *)(v4 + 3) -= time;
- if ( v6 )
- {
- *(int *)(v4 - 0x1D) = 0;
- }
+ auto p = pParticles + i;
+
+ v5 = p->uType;
+ if (!p->uType)
+ continue;
+
+ v6 = (p->timeToLive - time) < 0;
+ p->timeToLive -= time;
+ if (v6)
+ p->uType = 0;
else
{
if ( BYTE1(v5) & 2 )
{
- *(int *)(v4 + 15) = *(int *)(v4 - 25);
- *(int *)(v4 + 19) = *(int *)(v4 - 21);
- *(int *)(v4 + 23) = *(int *)(v4 - 17);
+ p->_x = p->x;
+ p->_y = p->y;
+ p->_z = p->z;
}
if ( v5 & 1 )
- *(float *)(v4 - 5) = *(float *)(v4 - 5) - (double)(signed int)time_ * 5.0;
+ p->flt_18 = p->flt_18 - (double)(signed int)time_ * 5.0;
if ( v5 & 8 )
{
v7 = (double)(signed int)time_;
- *(float *)(v4 - 25) = (double)(rand() % 5 - 2) * v7 * 0.0625 + *(float *)(v4 - 25);
- *(float *)(v4 - 21) = (double)(rand() % 5 - 2) * v7 * 0.0625 + *(float *)(v4 - 21);
- *(float *)(v4 - 17) = (double)(rand() % 5 + 4) * v7 * 0.0625 + *(float *)(v4 - 17);
+ *(float *)&p->x += (double)(rand() % 5 - 2) * v7 / 16.0f;
+ *(float *)&p->y += (double)(rand() % 5 - 2) * v7 / 16.0f;
+ *(float *)&p->z += (double)(rand() % 5 + 4) * v7 / 16.0f;
}
- v8 = (double)(signed int)time_ * 0.0078125;
- v9 = (signed int)(time * *(int *)(v4 + 27)) / 16;
- *(float *)(v4 - 25) = v8 * *(float *)(v4 - 13) + *(float *)(v4 - 25);
- *(float *)(v4 - 21) = v8 * *(float *)(v4 - 9) + *(float *)(v4 - 21);
- *(float *)(v4 - 17) = v8 * *(float *)(v4 - 5) + *(float *)(v4 - 17);
- *(int *)(v4 + 31) += v9;
- v22 = 2 * *(int *)(v4 + 3);
- if ( 2 * *(int *)(v4 + 3) >= 255 )
+ v8 = (double)(signed int)time_ / 128.0f;
+ v9 = (signed int)(time * p->field_38) / 16;
+ *(float *)&p->x += v8 * p->flt_10;
+ *(float *)&p->y += v8 * p->flt_14;
+ *(float *)&p->z += v8 * p->flt_18;
+ p->_rotation += v9;
+ v22 = 2 * p->timeToLive;
+ if ( 2 * p->timeToLive >= 255 )
v22 = 255;
v10 = (double)v22 * 0.0039215689;
- v11 = v10;
- v12 = (double)*(char *)(v4 + 1) * v10;
- v13 = v12 + 6.7553994e15;
- v14 = (double)*(char *)v4 * v11;
- v15 = v14 + 6.7553994e15;
- v16 = (double)(*(int *)(v4 - 1) & 0xFF) * v11;
- v17 = v16 + 6.7553994e15;
- *(int *)(v4 + 71) = LODWORD(v17) | ((LODWORD(v15) | (LODWORD(v13) << 8)) << 8);
- if ( v23 < v19 )
- v19 = v23;
- if ( v23 > v20 )
- v20 = v23;
+ p->uLightColor = (uint)floorf(p->b + 0.5) |
+ ((uint)floorf(p->g + 0.5) << 8) |
+ ((uint)floorf(p->r + 0.5) << 16);
+ if ( i < v19 )
+ v19 = i;
+ if ( i > v20 )
+ v20 = i;
}
- }
- ++v23;
- v4 += 104;
- }
- while ( v23 <= v1->uEndParticle );
}
- v1->uEndParticle = v20;
- result = v19;
- v1->uStartParticle = v19;
- return result;
+
+ uEndParticle = v20;
+ uStartParticle = v19;
}
//----- (0048AE74) --------------------------------------------------------
@@ -275,7 +246,7 @@
int y; // [sp+4Ch] [bp-4h]@3
pParticle = &this->pParticles[uParticleID];
- if ( !pParticle->bFree )
+ if ( !pParticle->uType )
return 0;
uParticleID = LODWORD(pParticle->x);
v56 = *(float *)&uParticleID + 6.7553994e15;
@@ -288,7 +259,7 @@
{
if ( pBLVRenderParams->sPartyRotX )
{
- if ( BYTE1(pParticle->bFree) & 2 )
+ if ( BYTE1(pParticle->uType) & 2 )
{
v11 = pParticle->_x + 6.7553994e15;
uParticleID = (LODWORD(v11) - pBLVRenderParams->vPartyPos.x) << 16;
@@ -314,12 +285,12 @@
LODWORD(v18) = pBLVRenderParams->uViewportCenterX
- ((signed int)((unsigned __int64)(v16 * (signed __int64)(a6 + v17)) >> 16) >> 16);
v19 = pParticle->field_58;
- pParticle->field_48 = v18;
+ pParticle->uScreenSpaceZ = v18;
uParticleID = (unsigned __int64)(v19 * (signed __int64)(HIDWORD(v13) + HIDWORD(a5))) >> 16;
v20 = pBLVRenderParams->uViewportCenterY
- ((signed int)((unsigned __int64)(v19 * (signed __int64)(HIDWORD(v13) + HIDWORD(a5))) >> 16) >> 16);
- pParticle->field_54 = v14;
- pParticle->field_4C = v20;
+ pParticle->sZValue2 = v14;
+ pParticle->uScreenSpaceW = v20;
}
uParticleID = (x_int - pBLVRenderParams->vPartyPos.x) << 16;
y = (LODWORD(y_int_) - pBLVRenderParams->vPartyPos.y) << 16;
@@ -340,7 +311,7 @@
}
else
{
- if ( BYTE1(pParticle->bFree) & 2 )
+ if ( BYTE1(pParticle->uType) & 2 )
{
v25 = pParticle->_x + 6.7553994e15;
uParticleID = (LODWORD(v25) - pBLVRenderParams->vPartyPos.x) << 16;
@@ -363,11 +334,11 @@
LODWORD(v33) = pBLVRenderParams->uViewportCenterX
- ((signed int)((unsigned __int64)(v31 * (signed __int64)(v28 + v32)) >> 16) >> 16);
v34 = pParticle->field_58;
- pParticle->field_48 = v33;
+ pParticle->uScreenSpaceZ = v33;
v35 = pBLVRenderParams->uViewportCenterY
- ((signed int)((unsigned __int64)(v34 * (signed __int64)v29) >> 16) >> 16);
- pParticle->field_54 = v27;
- pParticle->field_4C = v35;
+ pParticle->sZValue2 = v27;
+ pParticle->uScreenSpaceW = v35;
}
uParticleID = (x_int - pBLVRenderParams->vPartyPos.x) << 16;
y = (LODWORD(y_int_) - pBLVRenderParams->vPartyPos.y) << 16;
@@ -419,9 +390,9 @@
1) )
return 0;
pGame->pIndoorCameraD3D->Project(uParticleID, y, z, (int *)&a5 + 1, &a6);
- pParticle->flt_5C = pGame->pIndoorCameraD3D->flt_D0;
+ pParticle->flt_5C = pGame->pIndoorCameraD3D->fov_x;
v4 = pParticle->flt_5C;
- pParticle->flt_60 = pGame->pIndoorCameraD3D->flt_D4;
+ pParticle->flt_60 = pGame->pIndoorCameraD3D->fov_y;
v5 = v4 + 6.7553994e15;
LODWORD(v6) = 0;
HIDWORD(v6) = SLOWORD(v5);
@@ -433,7 +404,7 @@
pParticle->field_58 = (unsigned __int64)(_48B561_mess_with_scaling_along_z(/*v9, */v8) * (signed __int64)pParticle->field_58) >> 16;
v10 = uParticleID;
LABEL_19:
- pParticle->field_50 = v10;
+ pParticle->sZValue = v10;
return 1;
}
@@ -502,7 +473,7 @@
v4 = stru_5C6E00->SinCos(pIndoorCamera->sRotationY);
v5 = stru_5C6E00->SinCos(pIndoorCamera->sRotationY - stru_5C6E00->uIntegerHalfPi);
v6 = &v2->pParticles[uID];
- if ( v6->bFree )
+ if ( v6->uType )
{
v7 = v6->x + 6.7553994e15;
v41 = LODWORD(v7);
@@ -510,7 +481,7 @@
v42 = v6->z + 6.7553994e15;
if ( v3 )
{
- if ( BYTE1(v6->bFree) & 2 )
+ if ( BYTE1(v6->uType) & 2 )
{
v8 = v6->_x + 6.7553994e15;
uIDc = (LODWORD(v8) - pIndoorCamera->pos.x) << 16;
@@ -536,7 +507,7 @@
- ((signed int)((unsigned __int64)(v15
* (signed __int64)(signed int)(((unsigned __int64)(uIDd * (signed __int64)v3) >> 16)
- ((unsigned __int64)(v11 * (signed __int64)v44) >> 16))) >> 16) >> 16);
- v6->field_50 = HIDWORD(v12);
+ v6->sZValue = HIDWORD(v12);
}
uIDe = (v41 - pIndoorCamera->pos.x) << 16;
v47 = (LODWORD(v39) - pIndoorCamera->pos.y) << 16;
@@ -553,7 +524,7 @@
}
else
{
- if ( BYTE1(v6->bFree) & 2 )
+ if ( BYTE1(v6->uType) & 2 )
{
v18 = v6->_x + 6.7553994e15;
uIDf = (LODWORD(v18) - pIndoorCamera->pos.x) << 16;
@@ -573,7 +544,7 @@
- ((unsigned __int64)(uIDf * (signed __int64)v5) >> 16))) >> 16) >> 16);
v25 = pViewport->uScreenCenterY
- ((signed int)((unsigned __int64)(v24 * (signed __int64)SLODWORD(v21)) >> 16) >> 16);
- v6->field_50 = ((unsigned __int64)(v20 * (signed __int64)v5) >> 16)
+ v6->sZValue = ((unsigned __int64)(v20 * (signed __int64)v5) >> 16)
+ ((unsigned __int64)(uIDf * (signed __int64)v4) >> 16);
v6->uScreenSpaceY = v25;
}
@@ -604,7 +575,7 @@
v6->uScreenSpaceY = pViewport->uScreenCenterY - v33;
v35 = v32;
v6->field_58 = (unsigned __int64)(_48B561_mess_with_scaling_along_z(/*v34, */v35) * (signed __int64)v6->field_58) >> 16;
- v6->field_50 = X_4;
+ v6->sZValue = X_4;
v36 = v6->uScreenSpaceX;
if ( v36 >= (signed int)pViewport->uViewportX )
{
@@ -626,152 +597,110 @@
//----- (0048BBA6) --------------------------------------------------------
void ParticleEngine::DrawParticles_BLV()
{
- ParticleEngine *v1; // esi@1
- int v2; // eax@1
- unsigned __int8 v3; // zf@1
- char v4; // sf@1
- unsigned __int8 v5; // of@1
- Render *v6; // ebx@2
- char *v7; // edi@2
- signed int v8; // ecx@7
- int v9; // eax@10
- signed int v10; // eax@12
int v11; // eax@18
int v12; // ecx@20
int v13; // edx@20
Particle *v14; // eax@28
RenderBillboardTransform_local0 v15; // [sp+Ch] [bp-58h]@1
- int v16; // [sp+5Ch] [bp-8h]@5
- int v17; // [sp+60h] [bp-4h]@1
v15.uParentBillboardID = -1;
- v1 = this;
- v2 = this->uStartParticle;
- v5 = __OFSUB__(v2, this->uEndParticle);
- v3 = v2 == this->uEndParticle;
- v4 = v2 - this->uEndParticle < 0;
- v17 = this->uStartParticle;
- if ( (unsigned __int8)(v4 ^ v5) | v3 )
+
+ for (uint i = uStartParticle; i < uEndParticle; ++i)
{
- v6 = pRenderer;
- v7 = (char *)&this->pParticles[v2].field_54 + 2;
- do
+ auto p = pParticles + i;
+
+ if (!p->uType)
+ continue;
+
+ if (!ViewProject_TrueIfStillVisible(i))
+ continue;
+
+ if (p->uScreenSpaceX >= pBLVRenderParams->uViewportX &&
+ p->uScreenSpaceX < pBLVRenderParams->uViewportZ &&
+ p->uScreenSpaceY >= pBLVRenderParams->uViewportY &&
+ p->uScreenSpaceY < pBLVRenderParams->uViewportW)
{
- if ( *(int *)(v7 - 86) )
+ if (pRenderer->pRenderD3D)
{
- if ( v1->ViewProject_TrueIfStillVisible(v2) )
+ if (p->uType & 0x0100)
{
- v16 = *(int *)(v7 - 22);
- if ( v16 >= (signed int)pBLVRenderParams->uViewportX )
+ v14 = &pParticles[i];
+ v15.field_10 = v14->field_58 / 4;
+ v15.field_14 = v14->field_58 / 4;
+ v15.uScreenSpaceX = v14->uScreenSpaceX;
+ v15.uScreenSpaceY = v14->uScreenSpaceY;
+ v15.sZValue = v14->sZValue;
+ pRenderer->MakeParticleBillboardAndPush_BLV(&v15, 0, v14->uLightColor, v14->_rotation);
+ return;
+ }
+ if (p->uType & 0x0200)
+ {
+ if (pLines.uNumLines < 100)
{
- if ( v16 < (signed int)pBLVRenderParams->uViewportZ )
- {
- v8 = *(int *)(v7 - 18);
- if ( v8 >= (signed int)pBLVRenderParams->uViewportY )
- {
- if ( v8 < (signed int)pBLVRenderParams->uViewportW )
- {
- if ( pRenderer->pRenderD3D )
- {
- v9 = *(int *)(v7 - 86);
- if ( BYTE1(v9) & 1 )
- {
- v14 = &v1->pParticles[v17];
- v15.field_10 = v14->field_58 >> 2;
- v15.field_14 = v14->field_58 >> 2;
- v15.field_8 = v14->uScreenSpaceX;
- v15.field_C = v14->uScreenSpaceY;
- v15.field_28 = v14->field_50;
- pRenderer->MakeParticleBillboardAndPush_BLV(&v15, 0, v14->uLightColor, v14->_rotation);
- return;
- }
- if ( BYTE1(v9) & 2 )
- {
- v10 = v1->pLines.uNumLines;
- if ( v10 < 100 )
- {
- v1->pLines.pLineVertices[2 * v10].pos.x = (double)v16;
- v1->pLines.pLineVertices[2 * v1->pLines.uNumLines].pos.y = (double)*(signed int *)(v7 - 18);
- v16 = *((short *)v7 - 2);
- v1->pLines.pLineVertices[2 * v1->pLines.uNumLines].pos.z = 1.0
- - 1.0 / ((double)v16 * 0.061758894);
- v1->pLines.pLineVertices[2 * v1->pLines.uNumLines].rhw = 1.0;
- v1->pLines.pLineVertices[2 * v1->pLines.uNumLines].diffuse = *(int *)(v7 + 14);
- v1->pLines.pLineVertices[2 * v1->pLines.uNumLines].specular = 0;
- v1->pLines.pLineVertices[2 * v1->pLines.uNumLines].texcoord.x = 0.0;
- *((float *)&v1->pParticles[0].bFree + 16 * (v1->pLines.uNumLines + 813)) = 0.0;
- v1->pLines.pLineVertices[2 * v1->pLines.uNumLines + 1].pos.x = (double)*(signed int *)(v7 - 14);
- v1->pLines.pLineVertices[2 * v1->pLines.uNumLines + 1].pos.y = (double)*(signed int *)(v7 - 10);
- v16 = *(short *)v7;
- v1->pLines.pLineVertices[2 * v1->pLines.uNumLines + 1].pos.z = 1.0
- - 1.0 / ((double)v16 * 0.061758894);
- v1->pLines.pLineVertices[2 * v1->pLines.uNumLines + 1].rhw = 1.0;
- v1->pLines.pLineVertices[2 * v1->pLines.uNumLines + 1].diffuse = *(int *)(v7 + 14);
- v1->pLines.pLineVertices[2 * v1->pLines.uNumLines + 1].specular = 0;
- v1->pLines.pLineVertices[2 * v1->pLines.uNumLines + 1].texcoord.x = 0.0;
- v1->pLines.pLineVertices[2 * v1->pLines.uNumLines++ + 1].texcoord.y = 0.0;
- }
- }
- if ( *(v7 - 85) & 4 )
- {
- v15.field_10 = *(int *)(v7 + 2);
- v15.field_14 = *(int *)(v7 + 2);
- v15.field_8 = *(int *)(v7 - 22);
- v15.field_C = *(int *)(v7 - 18);
- v15.field_28 = *(int *)(v7 - 6);
- pRenderer->MakeParticleBillboardAndPush_BLV(
- &v15,
- pBitmaps_LOD->pHardwareTextures[*(int *)(v7 - 50)],
- *(int *)(v7 + 14),
- *(int *)(v7 - 26));
- }
- if ( *(v7 - 85) & 8 )
- {
- v15.field_10 = *(int *)(v7 + 2);
- v15.field_14 = *(int *)(v7 + 2);
- v15.field_8 = *(int *)(v7 - 22);
- v15.field_C = *(int *)(v7 - 18);
- v15.field_28 = *(int *)(v7 - 6);
- pRenderer->MakeParticleBillboardAndPush_BLV(
- &v15,
- pSprites_LOD->pHardwareSprites[*(int *)(v7 - 50)].pTexture,
- *(int *)(v7 + 14),
- *(int *)(v7 - 26));
- }
- }
- else
- {
- v11 = 13 * *(int *)(v7 + 2) >> 16;
- if ( v11 > 30 )
- v11 = 30;
- v12 = v8 - v11;
- v13 = v16 - (v11 >> 1);
- if ( v13 + v11 < (signed int)pViewport->uViewportX
- || v13 >= (signed int)pViewport->uViewportZ
- || v12 + v11 < (signed int)pViewport->uViewportY
- || v12 >= (signed int)pViewport->uViewportW )
- {
- v6 = pRenderer;
- }
- else
- {
- v6 = pRenderer;
- pRenderer->_4A48E4(v13, v12, *(int *)(v7 - 6), *(int *)(v7 + 14), v11);
- }
- }
- }
- }
- }
+ pLines.pLineVertices[2 * pLines.uNumLines].pos.x = p->uScreenSpaceX;
+ pLines.pLineVertices[2 * pLines.uNumLines].pos.y = p->uScreenSpaceY;
+ pLines.pLineVertices[2 * pLines.uNumLines].pos.z = 1.0 - 1.0 / ((short)p->sZValue * 0.061758894);
+ pLines.pLineVertices[2 * pLines.uNumLines].rhw = 1.0;
+ pLines.pLineVertices[2 * pLines.uNumLines].diffuse = p->uLightColor;
+ pLines.pLineVertices[2 * pLines.uNumLines].specular = 0;
+ pLines.pLineVertices[2 * pLines.uNumLines].texcoord.x = 0.0;
+ pLines.pLineVertices[2 * pLines.uNumLines].texcoord.y = 0.0;
+
+ pLines.pLineVertices[2 * pLines.uNumLines + 1].pos.x = p->uScreenSpaceZ;
+ pLines.pLineVertices[2 * pLines.uNumLines + 1].pos.y = p->uScreenSpaceW;
+ pLines.pLineVertices[2 * pLines.uNumLines + 1].pos.z = 1.0 - 1.0 / ((short)p->sZValue2 * 0.061758894);
+ pLines.pLineVertices[2 * pLines.uNumLines + 1].rhw = 1.0;
+ pLines.pLineVertices[2 * pLines.uNumLines + 1].diffuse = p->uLightColor;
+ pLines.pLineVertices[2 * pLines.uNumLines + 1].specular = 0;
+ pLines.pLineVertices[2 * pLines.uNumLines + 1].texcoord.x = 0.0;
+ pLines.pLineVertices[2 * pLines.uNumLines++ + 1].texcoord.y = 0.0;
}
}
+ if (p->uType & 0x0400)
+ {
+ v15.field_10 = p->field_58;
+ v15.field_14 = p->field_58;
+ v15.uScreenSpaceX = p->uScreenSpaceX;
+ v15.uScreenSpaceY = p->uScreenSpaceY;
+ v15.sZValue = p->sZValue;
+ pRenderer->MakeParticleBillboardAndPush_BLV(&v15,
+ pBitmaps_LOD->pHardwareTextures[p->uTextureID],
+ v14->uLightColor,
+ p->_rotation);
+ }
+ if (p->uType & 0x0800)
+ {
+ v15.field_10 = p->field_58;
+ v15.field_14 = p->field_58;
+ v15.uScreenSpaceX = p->uScreenSpaceX;
+ v15.uScreenSpaceY = p->uScreenSpaceY;
+ v15.sZValue = p->sZValue;
+ pRenderer->MakeParticleBillboardAndPush_BLV(&v15,
+ pSprites_LOD->pHardwareSprites[p->uTextureID].pTexture,
+ v14->uLightColor,
+ p->_rotation);
+ }
}
- v7 += 104;
- v2 = v17 + 1;
- v5 = __OFSUB__(v17 + 1, v1->uEndParticle);
- v3 = v17 + 1 == v1->uEndParticle;
- v4 = v17++ + 1 - v1->uEndParticle < 0;
+ else
+ {
+ v11 = 13 * p->field_58 >> 16;
+ if ( v11 > 30 )
+ v11 = 30;
+ v12 = p->uScreenSpaceY - v11;
+ v13 = p->uScreenSpaceX - (v11 >> 1);
+ if ( v13 + v11 < (signed int)pViewport->uViewportX
+ || v13 >= (signed int)pViewport->uViewportZ
+ || v12 + v11 < (signed int)pViewport->uViewportY
+ || v12 >= (signed int)pViewport->uViewportW )
+ {
+ ;
+ }
+ else
+ {
+ pRenderer->MakeParticleBillboardAndPush_BLV_Software(v13, v12, p->sZValue, p->uLightColor, v11);
+ }
+ }
}
- while ( (unsigned __int8)(v4 ^ v5) | v3 );
}
}
@@ -783,7 +712,6 @@
unsigned __int8 v3; // zf@1
char v4; // sf@1
unsigned __int8 v5; // of@1
- Render *pRender; // ebx@2
char *v7; // edi@2
int v8; // eax@6
signed int v9; // eax@8
@@ -791,7 +719,7 @@
int v11; // ecx@16
int v12; // edx@16
Particle *v13; // eax@24
- stru346 v14; // [sp+Ch] [bp-58h]@1
+ RenderBillboardTransform_local0 v14; // [sp+Ch] [bp-58h]@1
int v15; // [sp+5Ch] [bp-8h]@9
int v16; // [sp+60h] [bp-4h]@1
@@ -804,8 +732,7 @@
v16 = this->uStartParticle;
if ( (unsigned __int8)(v4 ^ v5) | v3 )
{
- pRender = pRenderer;
- v7 = (char *)&this->pParticles[v2].field_50 + 2;
+ v7 = (char *)&this->pParticles[v2].sZValue + 2;
do
{
if ( *(int *)(v7 - 82) && v1->_48B5B3(v2) )
@@ -818,11 +745,11 @@
v13 = &v1->pParticles[v16];
v14.field_10 = v13->field_58 >> 2;
v14.field_14 = v13->field_58 >> 2;
- v14.field_8 = v13->uScreenSpaceX;
- v14.field_C = v13->uScreenSpaceY;
- v14.field_28 = v13->field_50;
+ v14.uScreenSpaceX = v13->uScreenSpaceX;
+ v14.uScreenSpaceY = v13->uScreenSpaceY;
+ v14.sZValue = v13->sZValue;
pRenderer->MakeParticleBillboardAndPush_ODM(
- (RenderBillboardTransform_local0 *)&v14,
+ &v14,
0,
v13->uLightColor,
v13->_rotation);
@@ -845,7 +772,7 @@
v1->pLines.pLineVertices[2 * v1->pLines.uNumLines].diffuse = *(int *)(v7 + 18);
v1->pLines.pLineVertices[2 * v1->pLines.uNumLines].specular = 0;
v1->pLines.pLineVertices[2 * v1->pLines.uNumLines].texcoord.x = 0.0;
- *((float *)&v1->pParticles[0].bFree + 16 * (v1->pLines.uNumLines + 813)) = 0.0;
+ *((float *)&v1->pParticles[0].uType + 16 * (v1->pLines.uNumLines + 813)) = 0.0;
v1->pLines.pLineVertices[2 * v1->pLines.uNumLines + 1].pos.x = (double)*(signed int *)(v7 - 10);
v1->pLines.pLineVertices[2 * v1->pLines.uNumLines + 1].pos.y = (double)*(signed int *)(v7 - 6);
v15 = *(short *)v7;
@@ -865,11 +792,11 @@
{
v14.field_10 = *(int *)(v7 + 6);
v14.field_14 = *(int *)(v7 + 6);
- v14.field_8 = *(int *)(v7 - 18);
- v14.field_C = *(int *)(v7 - 14);
- v14.field_28 = *(int *)(v7 - 2);
+ v14.uScreenSpaceX = *(int *)(v7 - 18);
+ v14.uScreenSpaceY = *(int *)(v7 - 14);
+ v14.sZValue = *(int *)(v7 - 2);
pRenderer->MakeParticleBillboardAndPush_ODM(
- (RenderBillboardTransform_local0 *)&v14,
+ &v14,
pBitmaps_LOD->pHardwareTextures[*(int *)(v7 - 46)],
*(int *)(v7 + 18),
*(int *)(v7 - 22));
@@ -878,11 +805,11 @@
{
v14.field_10 = *(int *)(v7 + 6);
v14.field_14 = *(int *)(v7 + 6);
- v14.field_8 = *(int *)(v7 - 18);
- v14.field_C = *(int *)(v7 - 14);
- v14.field_28 = *(int *)(v7 - 2);
+ v14.uScreenSpaceX = *(int *)(v7 - 18);
+ v14.uScreenSpaceY = *(int *)(v7 - 14);
+ v14.sZValue = *(int *)(v7 - 2);
pRenderer->MakeParticleBillboardAndPush_ODM(
- (RenderBillboardTransform_local0 *)&v14,
+ &v14,
pSprites_LOD->pHardwareSprites[*(int *)(v7 - 46)].pTexture,
*(int *)(v7 + 18),
*(int *)(v7 - 22));
@@ -900,12 +827,11 @@
|| *(int *)(v7 - 14) < (signed int)pViewport->uViewportY
|| v12 >= (signed int)pViewport->uViewportW )
{
- pRender = pRenderer;
+ ;
}
else
{
- pRender = pRenderer;
- pRenderer->_4A48E4(v11, v12, *(int *)(v7 - 2), *(int *)(v7 + 18), v10);
+ pRenderer->MakeParticleBillboardAndPush_BLV_Software(v11, v12, *(int *)(v7 - 2), *(int *)(v7 + 18), v10);
}
}
}
diff -r c83d06692295 -r c0cf9393af64 ParticleEngine.h
--- a/ParticleEngine.h Mon Oct 22 09:20:49 2012 +0600
+++ b/ParticleEngine.h Mon Oct 29 09:28:08 2012 +0600
@@ -15,7 +15,7 @@
float flt_14;
float flt_18;
unsigned int uDiffuse;
- int field_20;
+ int timeToLive;
unsigned int uTextureID;
float flt_28;
int field_2C;
@@ -30,15 +30,26 @@
#pragma pack(push, 1)
struct Particle
{
- int bFree;
+ int uType; // 0x0000: empty
+ // 0x0100: color plane
+ // 0x0200: line
+ // 0x0400: bitmap plane
+ // 0x0800: sprite plane
float x;
float y;
float z;
float flt_10;
float flt_14;
float flt_18;
- int uParticleColor;
- int field_20;
+ union
+ {
+ struct
+ {
+ unsigned char r, g, b, a;
+ };
+ unsigned int uParticleColor;
+ };
+ int timeToLive;
unsigned int uTextureID;
float flt_28;
float _x;
@@ -48,10 +59,10 @@
int _rotation;
int uScreenSpaceX;
int uScreenSpaceY;
- float field_48;
- int field_4C;
- int field_50;
- int field_54;
+ int uScreenSpaceZ; // line end x
+ int uScreenSpaceW; // line end y
+ int sZValue;
+ int sZValue2; // line end z
int field_58;
float flt_5C;
float flt_60;
@@ -84,7 +95,7 @@
void ResetParticles();
void AddParticle(Particle_ *a2);
void Draw();
- int UpdateParticles();
+ void UpdateParticles();
bool ViewProject_TrueIfStillVisible(unsigned int uParticleID);
bool _48B5B3(unsigned int uID);
void DrawParticles_BLV();
diff -r c83d06692295 -r c0cf9393af64 Party.cpp
--- a/Party.cpp Mon Oct 22 09:20:49 2012 +0600
+++ b/Party.cpp Mon Oct 29 09:28:08 2012 +0600
@@ -280,11 +280,11 @@
//----- (0049137D) --------------------------------------------------------
void Party::CreateDefaultParty(char bGiveItems)
{
- Party *v2; // esi@1
+ Party *pParty; // esi@1
signed __int16 v3; // ax@1
- int v4; // ecx@1
- Player *v5; // esi@3
- signed int v6; // edx@5
+ int pResMagicBase; // ecx@1
+ Player *pCharacter; // esi@3
+ signed int uSpellBookPageCount; // edx@5
int v7; // eax@5
int uSkillIdx; // eax@11
unsigned __int8 v9; // zf@37
@@ -292,110 +292,109 @@
unsigned __int8 v11; // of@37
char *v12; // eax@38
signed int v13; // ecx@38
- int v14; // eax@42
+ int uMaxSP; // eax@42
unsigned int v15; // [sp-4h] [bp-44h]@14
unsigned int v16; // [sp-4h] [bp-44h]@26
int v17; // [sp+10h] [bp-30h]@1
int v18; // [sp+14h] [bp-2Ch]@11
- signed int v19; // [sp+18h] [bp-28h]@1
+ signed int uNumPlayers; // [sp+18h] [bp-28h]@1
ItemGen Dst; // [sp+1Ch] [bp-24h]@10
- v2 = this;
- strcpy(this->pPlayers[0].pName, pGlobalTXT_LocalizationStrings[509]);
- v2->pPlayers[0].field_1928 = 17;
- v2->pPlayers[0].uFace = 17;
- v2->pPlayers[0].field_1924 = 17;
- v2->pPlayers[0].uVoiceID = 17;
- v2->pPlayers[0].uMight = 30;
- v2->pPlayers[0].uIntelligence = 5;
- v2->pPlayers[0].uWillpower = 5;
- v2->pPlayers[0].uEndurance = 13;
- v2->pPlayers[0].uAccuracy = 13;
- v2->pPlayers[0].uSpeed = 14;
- v2->pPlayers[0].uLuck = 7;
- v2->pPlayers[0].pActiveSkills[9] = 1; // leather
- v2->pPlayers[0].pActiveSkills[33] = 1; // armsmaster
- v2->pPlayers[0].pActiveSkills[5] = 1; // bow
- v2->pPlayers[0].pActiveSkills[1] = 1; // sword
- v2->pPlayers[1].field_1928 = 3;
- v2->pPlayers[1].uFace = 3;
- v2->pPlayers[1].field_1924 = 3;
- v2->pPlayers[1].uVoiceID = 3;
- strcpy(v2->pPlayers[1].pName, pGlobalTXT_LocalizationStrings[506]);
- v2->pPlayers[1].uMight = 13;
- v2->pPlayers[1].uIntelligence = 9;
- v2->pPlayers[1].uWillpower = 9;
- v2->pPlayers[1].uEndurance = 13;
- v2->pPlayers[1].uAccuracy = 13;
- v2->pPlayers[1].uSpeed = 13;
- v2->pPlayers[1].uLuck = 13;
- v2->pPlayers[1].pActiveSkills[9] = 1; // leather
- v2->pPlayers[1].pActiveSkills[34] = 1; // stealing
- v2->pPlayers[1].pActiveSkills[2] = 1; // dagger
- v2->pPlayers[1].pActiveSkills[29] = 1; // disarm trap
- v2->pPlayers[2].field_1928 = 14;
- v2->pPlayers[2].uFace = 14;
- v2->pPlayers[2].field_1924 = 14;
- v2->pPlayers[2].uVoiceID = 14;
- strcpy(v2->pPlayers[2].pName, pGlobalTXT_LocalizationStrings[508]);
- v2->pPlayers[2].uMight = 12;
- v2->pPlayers[2].uIntelligence = 9;
- v2->pPlayers[2].uWillpower = 20;
- v2->pPlayers[2].uEndurance = 22;
- v2->pPlayers[2].uAccuracy = 7;
- v2->pPlayers[2].uSpeed = 13;
- v2->pPlayers[2].uLuck = 7;
- v2->pPlayers[2].pActiveSkills[35] = 1; // alchemy
- v2->pPlayers[2].pActiveSkills[9] = 1; // leather
- v2->pPlayers[2].pActiveSkills[18] = 1; // body
- v2->pPlayers[2].pActiveSkills[6] = 1; // mace
- strcpy(v2->pPlayers[3].pName, pGlobalTXT_LocalizationStrings[507]);
+ pParty = this;
+ strcpy(this->pPlayers[0].pName, pGlobalTXT_LocalizationStrings[509]); //Zoltan
+ pParty->pPlayers[0].field_1928 = 17;
+ pParty->pPlayers[0].uFace = 17;
+ pParty->pPlayers[0].field_1924 = 17;
+ pParty->pPlayers[0].uVoiceID = 17;
+ pParty->pPlayers[0].uMight = 30;
+ pParty->pPlayers[0].uIntelligence = 5;
+ pParty->pPlayers[0].uWillpower = 5;
+ pParty->pPlayers[0].uEndurance = 13;
+ pParty->pPlayers[0].uAccuracy = 13;
+ pParty->pPlayers[0].uSpeed = 14;
+ pParty->pPlayers[0].uLuck = 7;
+ pParty->pPlayers[0].pActiveSkills[9] = 1; // leather
+ pParty->pPlayers[0].pActiveSkills[33] = 1; // armsmaster
+ pParty->pPlayers[0].pActiveSkills[5] = 1; // bow
+ pParty->pPlayers[0].pActiveSkills[1] = 1; // sword
+ pParty->pPlayers[1].field_1928 = 3;
+ pParty->pPlayers[1].uFace = 3;
+ pParty->pPlayers[1].field_1924 = 3;
+ pParty->pPlayers[1].uVoiceID = 3;
+ strcpy(pParty->pPlayers[1].pName, pGlobalTXT_LocalizationStrings[506]); //Roderic
+ pParty->pPlayers[1].uMight = 13;
+ pParty->pPlayers[1].uIntelligence = 9;
+ pParty->pPlayers[1].uWillpower = 9;
+ pParty->pPlayers[1].uEndurance = 13;
+ pParty->pPlayers[1].uAccuracy = 13;
+ pParty->pPlayers[1].uSpeed = 13;
+ pParty->pPlayers[1].uLuck = 13;
+ pParty->pPlayers[1].pActiveSkills[9] = 1; // leather
+ pParty->pPlayers[1].pActiveSkills[34] = 1; // stealing
+ pParty->pPlayers[1].pActiveSkills[2] = 1; // dagger
+ pParty->pPlayers[1].pActiveSkills[29] = 1; // disarm trap
+ pParty->pPlayers[2].field_1928 = 14;
+ pParty->pPlayers[2].uFace = 14;
+ pParty->pPlayers[2].field_1924 = 14;
+ pParty->pPlayers[2].uVoiceID = 14;
+ strcpy(pParty->pPlayers[2].pName, pGlobalTXT_LocalizationStrings[508]); // Serena
+ pParty->pPlayers[2].uMight = 12;
+ pParty->pPlayers[2].uIntelligence = 9;
+ pParty->pPlayers[2].uWillpower = 20;
+ pParty->pPlayers[2].uEndurance = 22;
+ pParty->pPlayers[2].uAccuracy = 7;
+ pParty->pPlayers[2].uSpeed = 13;
+ pParty->pPlayers[2].uLuck = 7;
+ pParty->pPlayers[2].pActiveSkills[35] = 1; // alchemy
+ pParty->pPlayers[2].pActiveSkills[9] = 1; // leather
+ pParty->pPlayers[2].pActiveSkills[18] = 1; // body
+ pParty->pPlayers[2].pActiveSkills[6] = 1; // mace
+ strcpy(pParty->pPlayers[3].pName, pGlobalTXT_LocalizationStrings[507]); // Alexis
v3 = 10;
- v2->pPlayers[3].field_1928 = 10;
- v2->pPlayers[3].uFace = 10;
- v4 = (int)&v2->pPlayers[0].sResMagicBase;
- v2->pPlayers[3].uEndurance = 13;
- v2->pPlayers[3].uAccuracy = 13;
- v2->pPlayers[3].uSpeed = 13;
- v2->pPlayers[3].field_1924 = 10;
- v2->pPlayers[3].uVoiceID = 10;
- v2->pPlayers[3].uMight = 5;
- v2->pPlayers[3].uIntelligence = 30;
- v2->pPlayers[3].uWillpower = 9;
- v2->pPlayers[3].uLuck = 7;
- v2->pPlayers[3].pActiveSkills[9] = 1; // leather
- v2->pPlayers[3].pActiveSkills[13] = 1; // air
- v2->pPlayers[3].pActiveSkills[12] = 1; // fire
- v2->pPlayers[3].pActiveSkills[0] = 1; // staff
- v17 = (int)&v2->pPlayers[0].sResMagicBase;
- v19 = 4;
+ pParty->pPlayers[3].field_1928 = 10;
+ pParty->pPlayers[3].uFace = 10;
+ pResMagicBase = (int)&pParty->pPlayers[0].sResMagicBase;
+ pParty->pPlayers[3].uEndurance = 13;
+ pParty->pPlayers[3].uAccuracy = 13;
+ pParty->pPlayers[3].uSpeed = 13;
+ pParty->pPlayers[3].field_1924 = 10;
+ pParty->pPlayers[3].uVoiceID = 10;
+ pParty->pPlayers[3].uMight = 5;
+ pParty->pPlayers[3].uIntelligence = 30;
+ pParty->pPlayers[3].uWillpower = 9;
+ pParty->pPlayers[3].uLuck = 7;
+ pParty->pPlayers[3].pActiveSkills[9] = 1; // leather
+ pParty->pPlayers[3].pActiveSkills[13] = 1; // air
+ pParty->pPlayers[3].pActiveSkills[12] = 1; // fire
+ pParty->pPlayers[3].pActiveSkills[0] = 1; // staff
+ pCharacter = &pParty->pPlayers[0];
+ uNumPlayers = 4;
while ( 1 )
{
- v5 = (Player *)(v4 - 6014);
- if ( !*(char *)(v4 - 5829) )
- *(short *)v4 = v3;
- v6 = 0;
- v7 = v4 - 5726;
+ if ( !pCharacter->uClass )
+ *(short *)pResMagicBase = v3;
+ uSpellBookPageCount = 0;
+ v7 = pResMagicBase - 5726;// Skills
while ( !*(short *)v7 )
{
- ++v6;
+ ++uSpellBookPageCount;
v7 += 2;
- if ( v6 >= 9 )
+ if ( uSpellBookPageCount >= 9 )
goto LABEL_10;
}
- v5->field_1A4E = v6;
+ pCharacter->pNumSpellBookPage = uSpellBookPageCount;
LABEL_10:
- v5->uExpressionTimePassed = 0;
+ pCharacter->uExpressionTimePassed = 0;
Dst.Reset();
if ( bGiveItems )
{
pItemsTable->GenerateItem(2, 40, &Dst);
- v5->AddItem2(0xFFFFFFFFu, &Dst);
+ pCharacter->AddItem2(-1, &Dst);
uSkillIdx = 0;
v18 = 0;
do
{
- if ( v5->pActiveSkills[uSkillIdx] )
+ if ( pCharacter->pActiveSkills[uSkillIdx] )
{
switch ( uSkillIdx )
{
@@ -432,7 +431,7 @@
case PLAYER_SKILL_PLATE:
v15 = ITEM_PLATE_1;
wear_item:
- v5->WearItem(v15);
+ pCharacter->WearItem(v15);
break;
case PLAYER_SKILL_FIRE:
v16 = ITEM_SPELLBOOK_FIRE_STRIKE;
@@ -462,7 +461,7 @@
case PLAYER_SKILL_DIPLOMACY:
case PLAYER_SKILL_TRAP_DISARM:
case PLAYER_SKILL_LEARNING:
- v5->AddItem(0xFFFFFFFFu, ITEM_POTION_BOTTLE);
+ pCharacter->AddItem(-1, ITEM_POTION_BOTTLE);
v16 = 5 * (rand() % 3 + 40); // simple reagent
goto add_item;
case PLAYER_SKILL_DODGE:
@@ -471,7 +470,7 @@
case PLAYER_SKILL_UNARMED:
v16 = ITEM_GAUNTLETS_1;
add_item:
- v5->AddItem(0xFFFFFFFFu, v16);
+ pCharacter->AddItem(-1, v16);
break;
default:
break;
@@ -483,7 +482,7 @@
v10 = v18++ - 35 < 0;
}
while ( (unsigned __int8)(v10 ^ v11) | v9 );
- v12 = (char *)&v5->pInventoryItems[0].uAttributes;
+ v12 = (char *)&pCharacter->pInventoryItems[0].uAttributes;
v13 = 138;
do
{
@@ -494,14 +493,13 @@
}
while ( v13 );
}
- v5->sHealth = v5->GetMaxHealth();
- v14 = v5->GetMaxMana();
- v17 += 6972;
- v9 = v19-- == 1;
- v5->sMana = v14;
+ pCharacter->sHealth = pCharacter->GetMaxHealth();
+ pCharacter->sMana = pCharacter->GetMaxMana();
+ pCharacter++;
+ v9 = uNumPlayers-- == 1;
if ( v9 )
break;
- v4 = v17;
+ pResMagicBase = (int)pCharacter;
v3 = 10;
}
}
@@ -777,8 +775,8 @@
if ( ((Actor *)((char *)v0 - 59))->Actor::CanAct() && *((char *)v0 + 2) != 4 && *(char *)v0 != 5 )
{
v1 = abs(*(short *)((char *)v0 + 83) - pParty->vPosition.x);
- v2 = abs(*(short *)((char *)v0 + 85) - pParty->vPosition.z);
- v3 = abs(*(short *)((char *)v0 + 87) - pParty->vPosition.y);
+ v2 = abs(*(short *)((char *)v0 + 85) - pParty->vPosition.y);
+ v3 = abs(*(short *)((char *)v0 + 87) - pParty->vPosition.z);
if ( (double)sub_4621DA(v1, v2, v3) < 512.0 )
Actor::_402968(v4, 4, 0, 0);
}
diff -r c83d06692295 -r c0cf9393af64 Party.h
--- a/Party.h Mon Oct 22 09:20:49 2012 +0600
+++ b/Party.h Mon Oct 29 09:28:08 2012 +0600
@@ -148,6 +148,14 @@
static void TakeFood(unsigned int uNumFood);
static __int16 GiveFood(unsigned int _this);
+ inline bool WizardEyeActive() {return pPartyBuffs[PARTY_BUFF_WIZARD_EYE].uExpireTime > 0;}
+ inline int WizardEyeSkillLevel() {return pPartyBuffs[PARTY_BUFF_WIZARD_EYE].uSkill;}
+ inline bool FlyActive() {return pPartyBuffs[PARTY_BUFF_FLY].uExpireTime > 0;}
+ inline bool WaterWalkActive() {return pPartyBuffs[PARTY_BUFF_WATER_WALK].uExpireTime > 0;}
+ inline bool ImmolationActive() {return pPartyBuffs[PARTY_BUFF_IMMOLATION].uExpireTime > 0;}
+ inline bool ImmolationSkillLevel() {return pPartyBuffs[PARTY_BUFF_IMMOLATION].uSkill;}
+ inline bool FeatherFallActive() {return pPartyBuffs[PARTY_BUFF_FEATHER_FALL].uExpireTime > 0;}
+
int field_0;
unsigned int uPartyHeight;
diff -r c83d06692295 -r c0cf9393af64 Player.cpp
--- a/Player.cpp Mon Oct 22 09:20:49 2012 +0600
+++ b/Player.cpp Mon Oct 29 09:28:08 2012 +0600
@@ -7,7 +7,7 @@
#include "Party.h"
#include "GUIButton.h"
#include "LOD.h"
-#include "Monsters.h"
+#include "Monsters.h"
#include "GUIWindow.h"
#include "Viewport.h"
#include "Actor.h"
@@ -4143,7 +4143,7 @@
LOBYTE(v7) = GetActualSkillLevel(PLAYER_SKILL_UNARMED);
if ( v7 )
{
- v6 = (unsigned __int16)word_4EDEDC;
+ v6 = (unsigned __int16)word_4EDED8[1];
LABEL_4:
v47 = v6;
goto LABEL_17;
@@ -4656,7 +4656,7 @@
{
if ( !HasItemEquipped((ITEM_EQUIP_TYPE)v3) )
goto LABEL_11;
- v5 = *(int *)v4 - 1; // BUG
+ v5 = pEquipment.uOffHand - 1; // BUG
// v5 = _this->cEquippedItems.uOffHand - 1;
if ( a2 != 17 )
break;
@@ -7746,7 +7746,7 @@
v21 = v67;
goto LABEL_83;
}
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 23 )
+ if ( pCurrentScreen == 23 )
return;
if ( !((Player *)&stru_AA1058[3].pSounds[6972 * a2 + 40552])->CanAct() )
goto LABEL_89;
@@ -7762,7 +7762,7 @@
pMouse->RemoveHoldingItem();
pGUIWindow_CurrentMenu->Release();
pIcons_LOD->_4114F2();
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 0;
+ pCurrentScreen = 0;
viewparams->bRedrawGameUI = 1;
_42777D_CastSpell_UseWand_ShootArrow(v24, a2 - 1, 0x85u, 1, 0);
}
@@ -7777,7 +7777,7 @@
*(&dword_50C9E8 + 3 * dword_50C9E8 + 3) = a2 - 1;
++dword_50C9E8;
}
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions
+ if ( pCurrentScreen
&& pGUIWindow_CurrentMenu
&& pGUIWindow_CurrentMenu->eWindowType != WINDOW_null
&& (signed int)pMessageQueue_50CBD0->uNumMessages < 40 )
@@ -7789,7 +7789,7 @@
}
}
}
-// 4E28F8: using guessed type int uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions;
+// 4E28F8: using guessed type int pCurrentScreen;
// 50C9AC: using guessed type int dword_50C9AC;
// 50C9EC: using guessed type int dword_50C9EC[];
// 6BE3C4: using guessed type char bUnderwater;
diff -r c83d06692295 -r c0cf9393af64 Player.h
--- a/Player.h Mon Oct 22 09:20:49 2012 +0600
+++ b/Player.h Mon Oct 29 09:28:08 2012 +0600
@@ -93,8 +93,16 @@
{
PLAYER_CLASS_KNIGHT = 0x0,
PLAYER_CLASS_THEIF = 0x4,
+ PLAYER_CLASS_BOUNTY_HUNTER = 0x7,
+ PLAYER_CLASS_MONK = 0x8,
+ PLAYER_CLASS_PALADIN = 0xC,
+ PLAYER_CLASS_SHOOTER = 0x10,
+ PLAYER_CLASS_RANGER = 0x14,
PLAYER_CLASS_CLERIC = 0x18,
+ PLAYER_CLASS_PRIEST_OF_MOON = 0x1B,
+ PLAYER_CLASS_DRUID = 0x1C,
PLAYER_CLASS_SORCERER = 0x20,
+ PLAYER_CLASS_LICH = 0x23,
};
@@ -193,6 +201,29 @@
#pragma pack(push, 1)
struct Player
{
+ enum Condition: unsigned __int32
+ {
+ Condition_Cursed = 0,
+ Condition_Weak = 1,
+ Condition_Sleep = 2,
+ Condition_Fear = 3,
+ Condition_Drunk = 4,
+ Condition_Insane = 5,
+ Condition_Poison1 = 6,
+ Condition_Disease1 = 7,
+ Condition_Posion2 = 8,
+ Condition_Disease2 = 9,
+ Condition_Poison3 = 10,
+ Condition_Disease3 = 11,
+ Condition_Paralyzed = 12,
+ Condition_Unconcious = 13,
+ Condition_Dead = 14,
+ Condition_Pertified = 15,
+ Condition_Eradicated = 16,
+ Condition_Zombie = 17,
+ Condition_Good = 18
+ };
+
Player();
void SetVariable(enum VariableType var, signed int a3);
@@ -315,6 +346,9 @@
bool Recover(signed int a2);
bool CanCastSpell(unsigned int uRequiredMana);
+ inline bool Dead() {return pConditions[Condition::Condition_Dead] != 0;}
+ inline bool Eradicated() {return pConditions[Condition::Condition_Eradicated] != 0;}
+
__int64 pConditions[20];
@@ -398,7 +432,7 @@
int field_1988[49];
char field_1A4C;
char field_1A4D;
- char field_1A4E;
+ char pNumSpellBookPage;
unsigned __int8 uQuickSpell;
char field_1A50[64];
char _some_attack_bonus;
diff -r c83d06692295 -r c0cf9393af64 Render.cpp
--- a/Render.cpp Mon Oct 22 09:20:49 2012 +0600
+++ b/Render.cpp Mon Oct 29 09:28:08 2012 +0600
@@ -63,6 +63,7 @@
+void SetBillboardBlendOptions(RenderBillboardD3D::OpacityType a1);
/* 384 */
@@ -173,11 +174,7 @@
//----- (00440CB8) --------------------------------------------------------
void Render::DrawBillboardList_BLV()
{
- int v0; // ebx@1
- char *v1; // esi@2
__int16 v2; // ax@3
- unsigned __int16 *v3; // eax@6
- char v4; // zf@6
int v5; // eax@11
RenderBillboardTransform_local0 soft_billboard; // [sp+4h] [bp-50h]@1
@@ -189,46 +186,38 @@
soft_billboard.uViewportY = pBLVRenderParams->uViewportY;
soft_billboard.uViewportZ = pBLVRenderParams->uViewportZ - 1;
soft_billboard.uViewportW = pBLVRenderParams->uViewportW;
- v0 = 0;
- pOutdoorCamera->field_3C = uNumBillboardsToDraw;
- if ( (signed int)uNumBillboardsToDraw > 0 )
- {
- v1 = (char *)&pBillboardRenderList[0].field_28;
- do
- {
- soft_billboard.field_8 = *((short *)v1 - 1);
- soft_billboard.uParentBillboardID = v0;
- soft_billboard.field_C = *(short *)v1;
- soft_billboard.field_10 = *((int *)v1 - 10);
- soft_billboard.field_14 = *((int *)v1 - 9);
- soft_billboard.field_28 = *((int *)v1 - 6);
- soft_billboard.uFlags = *((short *)v1 - 5);
- soft_billboard.uTintColor = *((int *)v1 + 1);
- v2 = *((short *)v1 - 8);
+
+ pOutdoorCamera->uNumBillboards = uNumBillboardsToDraw;
+
+ for (uint i = 0; i < uNumBillboardsToDraw; ++i)
+ {
+ auto p = pBillboardRenderList + i;
+
+ soft_billboard.uScreenSpaceX = p->uScreenSpaceX;
+ soft_billboard.uParentBillboardID = i;
+ soft_billboard.uScreenSpaceY = p->uScreenSpaceY;
+ soft_billboard.field_10 = p->field_0;
+ soft_billboard.field_14 = p->field_4;
+ soft_billboard.sZValue = p->sZValue;
+ soft_billboard.uFlags = p->field_1E;
+ soft_billboard.uTintColor = p->uTintColor;
+ v2 = p->uHwSpriteID;
if ( v2 != -1 )
{
if ( pRenderer->pRenderD3D )
- {
- pRenderer->_4A43B1(&soft_billboard, &pSprites_LOD->pHardwareSprites[v2], *((short *)v1 + 1));
- }
+ pRenderer->DrawBillboard_Indoor(&soft_billboard, &pSprites_LOD->pHardwareSprites[v2], p->uPaletteSubindex);
else
{
- v3 = PaletteManager::Get_Dark_or_Red_LUT(*((short *)v1 - 7), *((short *)v1 + 1), 1);
- v4 = (*(v1 - 9) & 1) == 0;
- soft_billboard.pPalette = v3;
- if ( !v4 )
- soft_billboard.pPalette = pPaletteManager->field_261600[*((short *)v1 - 7)];
+ soft_billboard.pPalette = PaletteManager::Get_Dark_or_Red_LUT(p->uPalette, p->uPaletteSubindex, 1);
+ if (p->field_1E & 0x0100)
+ soft_billboard.pPalette = pPaletteManager->field_261600[p->uPalette];
if ( !(soft_billboard.uFlags & 0x40) && soft_billboard.uFlags & 0x80 )
- soft_billboard.pPalette2 = PaletteManager::Get_Dark_or_Red_LUT(*((short *)v1 - 7), 0, 1);
- v5 = *((short *)v1 - 8);
+ soft_billboard.pPalette2 = PaletteManager::Get_Dark_or_Red_LUT(p->uPalette, 0, 1);
+ v5 = p->uHwSpriteID;
if ( v5 >= 0 )
pSprites_LOD->pSpriteHeaders[v5]._4ACC38(&soft_billboard, 1);
}
}
- ++v0;
- v1 += 52;
- }
- while ( v0 < (signed int)uNumBillboardsToDraw );
}
}
@@ -1645,8 +1634,8 @@
{
a1->ViewTransform(&ptr_801A08[_ESI], 1u);
a1->ViewTransform(&ptr_801A04[_ESI], 1u);
- a1->_436BB7_project_and_stuff(&ptr_801A08[_ESI], 1u, 0);
- a1->_436BB7_project_and_stuff(&ptr_801A04[_ESI], 1u, 0);
+ a1->Project(&ptr_801A08[_ESI], 1u, 0);
+ a1->Project(&ptr_801A04[_ESI], 1u, 0);
}
v79 += 512;
++_ESI;
@@ -1734,8 +1723,8 @@
{
a1->ViewTransform(&ptr_801A08[_ESI], 1u);
a1->ViewTransform(&ptr_801A04[_ESI], 1u);
- a1->_436BB7_project_and_stuff(&ptr_801A08[_ESI], 1u, 0);
- a1->_436BB7_project_and_stuff(&ptr_801A04[_ESI], 1u, 0);
+ a1->Project(&ptr_801A08[_ESI], 1u, 0);
+ a1->Project(&ptr_801A04[_ESI], 1u, 0);
}
v92 -= 512;
++_ESI;
@@ -1999,7 +1988,7 @@
if ( pGame->pIndoorCameraD3D->_4371C3(array_50AC10, &a5, 0) == 1 && !a5 )
goto LABEL_162;
thisa->ViewTransform(array_50AC10, a5);
- thisa->_436BB7_project_and_stuff(array_50AC10, a5, 0);
+ thisa->Project(array_50AC10, a5, 0);
}
this_3 = a2->vWorldViewPosition.x < 8.0
|| a8->vWorldViewPosition.x < 8.0
@@ -2012,7 +2001,7 @@
|| v32 < pVertices->vWorldViewPosition.x;
LOBYTE(v33) = 0;
pGame->pLightmapBuilder->std__vector_000004_size = 0;
- if ( stru_F8AD28.field_AC > 0 || pDecalBuilder->uNumDecals > 0 )
+ if ( stru_F8AD28.uNumLightsApplied > 0 || pDecalBuilder->uNumDecals > 0 )
{
if ( this_3 )
LOBYTE(v33) = 3;
@@ -2030,8 +2019,8 @@
v33,
-1);
}
- if ( stru_F8AD28.field_AC > 0 )
- pGame->pLightmapBuilder->ApplyLights(&stru_F8AD28, &static_sub_0048034E_stru_154, a5, array_50AC10, 0.0, v33);
+ if ( stru_F8AD28.uNumLightsApplied > 0 )
+ pGame->pLightmapBuilder->ApplyLights(&stru_F8AD28, &static_sub_0048034E_stru_154, a5, array_50AC10, 0, v33);
v34 = a5;
v35 = byte_4D864C == 0;
v16->uNumVertices = a5;
@@ -2153,14 +2142,14 @@
goto LABEL_112;
}
thisb->ViewTransform(array_50AC10, uNumVertices);
- thisb->_436BB7_project_and_stuff(array_50AC10, uNumVertices, 0);
+ thisb->Project(array_50AC10, uNumVertices, 0);
}
this_3a = a2->vWorldViewPosition.x < 8.0 || a8->vWorldViewPosition.x < 8.0 || pVertices->vWorldViewPosition.x < 8.0;
v54 = (double)pOutdoorCamera->shading_dist_mist;
v108 = v54 < a2->vWorldViewPosition.x || v54 < a8->vWorldViewPosition.x || v54 < pVertices->vWorldViewPosition.x;
a8 = 0;
v96->std__vector_000004_size = 0;
- if ( stru_F8AD28.field_AC > 0 || pDecalBuilder->uNumDecals > 0 )
+ if ( stru_F8AD28.uNumLightsApplied > 0 || pDecalBuilder->uNumDecals > 0 )
{
a8 = (RenderVertexSoft *)(this_3a ? 3 : v108 != 0 ? 5 : 0);
static_sub_0048034E_stru_76D590._49B0C9(v99, *(float *)&a4);
@@ -2175,13 +2164,13 @@
(char)a8,
-1);
}
- if ( stru_F8AD28.field_AC > 0 )
+ if ( stru_F8AD28.uNumLightsApplied > 0 )
v96->ApplyLights(
&stru_F8AD28,
&static_sub_0048034E_stru_76D590,
uNumVertices,
array_50AC10,
- 0.0,
+ 0,
(char)a8);
v55 = uNumVertices;
v35 = byte_4D864C == 0;
@@ -2290,7 +2279,7 @@
if ( pGame->pIndoorCameraD3D->_4371C3(array_50AC10, (unsigned int *)&v100, 0) == 1 && !v100 )
goto LABEL_126;
thisc->ViewTransform(array_50AC10, v100);
- thisc->_436BB7_project_and_stuff(array_50AC10, v100, 0);
+ thisc->Project(array_50AC10, v100, 0);
}
this_3b = a2->vWorldViewPosition.x < 8.0
|| pVertices->vWorldViewPosition.x < 8.0
@@ -2299,7 +2288,7 @@
v108 = v69 < a2->vWorldViewPosition.x || v69 < pVertices->vWorldViewPosition.x || v69 < _ECX->vWorldViewPosition.x;
LOBYTE(v70) = 0;
v96->std__vector_000004_size = 0;
- if ( stru_F8AD28.field_AC > 0 || pDecalBuilder->uNumDecals > 0 )
+ if ( stru_F8AD28.uNumLightsApplied > 0 || pDecalBuilder->uNumDecals > 0 )
{
if ( this_3b )
LOBYTE(v70) = 3;
@@ -2317,8 +2306,8 @@
v70,
-1);
}
- if ( stru_F8AD28.field_AC > 0 )
- v96->ApplyLights(&stru_F8AD28, &static_sub_0048034E_stru_76D578, v100, array_50AC10, 0.0, v70);
+ if ( stru_F8AD28.uNumLightsApplied > 0 )
+ v96->ApplyLights(&stru_F8AD28, &static_sub_0048034E_stru_76D578, v100, array_50AC10, 0, v70);
v71 = a8;
v72 = v100;
v35 = byte_4D864C == 0;
@@ -2595,7 +2584,7 @@
array_50AC10[3].u = 1.0;
array_50AC10[3].v = 0.0;
pGame->pLightmapBuilder->StackLights_TerrainFace(pNormal, &a3a, array_50AC10, 4u, 1);
- if ( stru_F8AD28.field_AC <= 0 )
+ if ( stru_F8AD28.uNumLightsApplied <= 0 )
{
v17->field_108 = 0;
}
@@ -2711,7 +2700,7 @@
array_50AC10[2].u = 1.0;
array_50AC10[2].v = 1.0;
pGame->pLightmapBuilder->StackLights_TerrainFace(pNormala, &v78, array_50AC10, 3u, 0);
- if ( stru_F8AD28.field_AC <= 0 )
+ if ( stru_F8AD28.uNumLightsApplied <= 0 )
{
v38->field_108 = 0;
}
@@ -2805,7 +2794,7 @@
array_50AC10[2].u = 1.0;
array_50AC10[2].v = 0.0;
pGame->pLightmapBuilder->StackLights_TerrainFace(pNormalb, &v70, array_50AC10, 3u, 1);
- if ( stru_F8AD28.field_AC <= 0 )
+ if ( stru_F8AD28.uNumLightsApplied <= 0 )
{
v17->field_108 = 0;
}
@@ -2904,17 +2893,17 @@
billboard.uViewportZ = pViewport->uViewportZ - 1;
billboard.uViewportW = pViewport->uViewportW;
v0 = 0;
- pOutdoorCamera->field_3C = uNumBillboardsToDraw;
+ pOutdoorCamera->uNumBillboards = uNumBillboardsToDraw;
v16 = 0;
if ( (signed int)uNumBillboardsToDraw > 0 )
{
v17 = 0;
- v1 = (char *)&pBillboardRenderList[0].field_28;
+ v1 = (char *)&pBillboardRenderList[0].uScreenSpaceY;
do
{
- billboard.field_8 = *((short *)v1 - 1);
+ billboard.uScreenSpaceX = *((short *)v1 - 1);
v2 = *((short *)v1 - 5);
- billboard.field_C = *(short *)v1;
+ billboard.uScreenSpaceY = *(short *)v1;
v3 = *((int *)v1 - 10);
billboard.uParentBillboardID = v0;
v4 = *((int *)v1 + 1);
@@ -2924,14 +2913,14 @@
v6 = *((short *)v1 - 8);
billboard.field_14 = v5;
v7 = *((int *)v1 - 6);
- billboard.field_28 = *((int *)v1 - 6);
+ billboard.sZValue = *((int *)v1 - 6);
billboard.uFlags = v2;
if ( v6 != -1 )
{
v8 = *((short *)v1 + 1);
if ( pRenderer->pRenderD3D )
{
- billboard.field_28 = v7;
+ billboard.sZValue = v7;
billboard.uFlags = v2;
pRenderer->TransformBillboard(
&billboard,
@@ -3074,7 +3063,7 @@
if ( a6 )
{
LOBYTE(v11) = byte_4E94D3;
- pMobileLightsStack->AddLight(x, y, z, a5, a6, 0xFFu, 0xFFu, 0xFFu, v11);
+ pMobileLightsStack->AddLight(x, y, z, a5, a6, 0xFFu, 0xFFu, 0xFFu, byte_4E94D3);
}
v12 = (x - pIndoorCamera->pos.x) << 16;
if ( pIndoorCamera->sRotationX )
@@ -3141,17 +3130,17 @@
v3->pSpriteFrame = v28;
v3->field_4 = v26;
v3->field_1E = v46;
- v3->field_20 = x;
- v3->field_22 = y;
- v3->field_24 = z;
- v3->field_26 = v35;
- v3->field_28 = v32;
+ v3->some_x = x;
+ v3->some_y = y;
+ v3->some_z = z;
+ v3->uScreenSpaceX = v35;
+ v3->uScreenSpaceY = v32;
HIWORD(v26) = HIWORD(v42);
LOWORD(v26) = 0;
v27 = (*(v0 - 2) & 0x20) == 0;
v3->sZValue = v26 + (8 * v41 | 2);
- v3->field_2A = 0;
- v3->field_2C_prolly_tint = 0;
+ v3->uPaletteSubindex = 0;
+ v3->uTintColor = 0;
if ( !v27 )
{
if ( !pRenderer->pRenderD3D )
@@ -3573,22 +3562,22 @@
v27->field_0 = v26;
v27->field_4 = v26;
v29 = v38;
- v27->field_26 = v25;
+ v27->uScreenSpaceX = v25;
HIBYTE(v29) |= 2u;
v27->uPalette = v28;
v27->field_1E = v29;
- v27->field_20 = x;
- v27->field_22 = y;
- v27->field_24 = v36;
- v27->field_28 = v40;
+ v27->some_x = x;
+ v27->some_y = y;
+ v27->some_z = v36;
+ v27->uScreenSpaceY = v40;
HIWORD(v30) = HIWORD(v39);
v31 = 8 * v35 | 5;
LOWORD(v30) = 0;
v27->uIndoorSectorID = 0;
v27->sZValue = v30 + v31;
- v27->field_2A = 0;
+ v27->uPaletteSubindex = 0;
v27->pSpriteFrame = v9;
- v27->field_2C_prolly_tint = 0;
+ v27->uTintColor = 0;
}
}
goto LABEL_38;
@@ -3627,7 +3616,7 @@
local_0.flt_14 = 0.0;
local_0.flt_18 = 0.0;
local_0.flt_28 = 1.0;
- local_0.field_20 = (rand() & 0x80) + 128;
+ local_0.timeToLive = (rand() & 0x80) + 128;
local_0.uTextureID = pBitmaps_LOD->LoadTexture("effpar01");
pGame->pParticleEngine->AddParticle(&local_0);
}
@@ -4140,61 +4129,42 @@
//----- (0049E4FC) --------------------------------------------------------
void RenderD3D::ClearTarget(unsigned int bClearColor, unsigned int uClearColor, unsigned int bClearDepth, float z_clear)
{
- unsigned int flags; // esi@1
- IDirect3DViewport3 *v6; // eax@6
- D3DRECT v7; // [sp+Ch] [bp-10h]@6
-
- flags = 0;
- if ( bClearColor )
- flags = 1; // D3DRMCLEAR_TARGET
- if ( bClearDepth )
- flags |= 2u; // D3DRMCLEAR_ZBUFFER
- if ( flags )
- {
- v6 = this->pViewport;
- v7.x1 = 0;
- v7.y1 = 0;
- v7.x2 = 640;
- v7.y2 = 480; // BUG
- v6->Clear2(
- 1,
- &v7,
- flags,
- uClearColor,
- LODWORD(z_clear),
- 0);
- }
+ uint uClearFlags = 0;
+
+ if (bClearColor)
+ uClearFlags |= D3DCLEAR_TARGET;
+ if (bClearDepth)
+ uClearFlags |= D3DCLEAR_ZBUFFER;
+
+ D3DRECT rects[] = {{0, 0, 640, 480}};
+ if (uClearFlags)
+ pViewport->Clear2(1, rects, uClearFlags, uClearColor, z_clear, 0);
}
//----- (0049E54D) --------------------------------------------------------
void RenderD3D::Present(bool bForceBlit)
{
- RenderD3D *v2; // esi@1
- char bFullscreen; // zf@1
- struct tagRECT Rect; // [sp+8h] [bp-28h]@4
RECT v5; // [sp+18h] [bp-18h]@1
struct tagPOINT Point; // [sp+28h] [bp-8h]@4
- v2 = this;
v5.left = 0;
v5.top = 0;
- bFullscreen = this->bWindowed == 0;
v5.bottom = 480;
v5.right = 640;
- if ( !bFullscreen || bForceBlit )
- {
- GetClientRect(this->hWindow, &Rect);
+
+ if (bWindowed || bForceBlit)
+ {
+ RECT rc;
+ GetClientRect(hWindow, &rc);
Point.y = 0;
Point.x = 0;
- ClientToScreen(v2->hWindow, &Point);
- OffsetRect(&Rect, Point.x, Point.y);
- v2->pFrontBuffer->Blt(&Rect, v2->pBackBuffer, &v5, DDBLT_WAIT, 0);
+ ClientToScreen(hWindow, &Point);
+ OffsetRect(&rc, Point.x, Point.y);
+ pFrontBuffer->Blt(&rc, pBackBuffer, &v5, DDBLT_WAIT, 0);
}
else
- {
- this->pFrontBuffer->Flip(0, 1u);
- }
+ pFrontBuffer->Flip(0, 1);
}
@@ -4511,7 +4481,7 @@
*(int *)v34 = 0;
v34 += 32;
--v33;
- *((int *)v34 - 9) = LODWORD(pRenderer->uFogColor) | v35 & 0xFF000000;
+ *((int *)v34 - 9) = pRenderer->uFogColor | v35 & 0xFF000000;
}
while ( v33 );
}
@@ -4624,6 +4594,8 @@
LOBYTE(v1->field_103668) = 0;
v1->field_1036B8 = 0;
v1->_gpu_memory_used = 0;
+ uNumBillboardsToDraw = 0;
+ bFogEnabled = false;
}
bool Render::Initialize(bool bWindowed, uint uDefaultDevice,
@@ -4701,20 +4673,13 @@
//----- (0049ECC4) --------------------------------------------------------
void Render::ClearBlack()
{
- Render *v1; // eax@1
- RenderD3D *v2; // ecx@1
-
- v1 = this;
- v2 = this->pRenderD3D;
- if ( v2 )
- {
- if ( v1->field_40110 )
- pRenderD3D->ClearTarget(1u, 0, 0, 0.0);
+ if (pRenderD3D)
+ {
+ if (field_40110)
+ pRenderD3D->ClearTarget(true, 0, false, 0.0);
}
else
- {
- memset(pRenderer->pTargetSurface, 0, 4 * (v1->field_10 * v1->field_14 >> 1));
- }
+ memset(pRenderer->pTargetSurface, 0, 4 * (field_10 * field_14 / 2));
}
@@ -4727,7 +4692,8 @@
RECT x; // [sp+68h] [bp-10h]@3
memset(&v3, 0, sizeof(DDBLTFX));
- if ( pVersion->pVersionInfo.dwPlatformId != VER_PLATFORM_WIN32_NT || pVersion->pVersionInfo.dwMajorVersion != 4 )
+ if (pVersion->pVersionInfo.dwPlatformId != VER_PLATFORM_WIN32_NT ||
+ pVersion->pVersionInfo.dwMajorVersion >= 5)
{
x.left = uWindowX;
x.right = uWindowX + uWindowHeight;
@@ -5146,9 +5112,9 @@
signed int v15; // eax@11
char v16; // zf@20
int result; // eax@21
- char v18; // [sp+Ch] [bp-ACh]@3
- __int16 v19; // [sp+44h] [bp-74h]@3
- char v20; // [sp+48h] [bp-70h]@3
+ char v18[58]; // [sp+Ch] [bp-ACh]@3
+ // __int16 v19; // [sp+44h] [bp-74h]@3
+ char v20[48]; // [sp+48h] [bp-70h]@3
char *v21; // [sp+78h] [bp-40h]@7
char *v22; // [sp+7Ch] [bp-3Ch]@7
int v23; // [sp+80h] [bp-38h]@4
@@ -5187,7 +5153,7 @@
memset(&v18, 0, 0x38u);
v8 = Dst;
v37 = 0;
- v19 = 0;
+ *(_WORD *)&v18[56] = 0;
Src = 10;
v28 = 5;
v29 = 1;
@@ -5444,20 +5410,13 @@
//----- (0049FBCD) --------------------------------------------------------
void Render::ClearTarget(unsigned int uColor)
{
- Render *v2; // eax@1
- RenderD3D *v3; // ecx@1
-
- v2 = this;
- v3 = this->pRenderD3D;
- if ( v3 )
- {
- if ( v2->field_40110 )
- pRenderD3D->ClearTarget(1u, uColor, 0, 0.0);
+ if (pRenderD3D)
+ {
+ if (field_40110)
+ pRenderD3D->ClearTarget(true, uColor, false, 0.0);
}
else
- {
- memset32(v2->pTargetSurface, uColor, v2->field_10 * v2->field_14 >> 1);
- }
+ memset32(pTargetSurface, uColor, field_10 * field_14 / 2);
}
@@ -5488,7 +5447,7 @@
{
if (pAsyncMouse)
pAsyncMouse->_46BAEC();
- pRenderD3D->Present(0);
+ pRenderD3D->Present(false);
if (pAsyncMouse)
pAsyncMouse->_46BB0A();
}
@@ -6148,7 +6107,7 @@
//----- (004A0BEE) --------------------------------------------------------
-char Render::FillRect(unsigned int uX, unsigned int uY, unsigned int uZ, unsigned int uW, unsigned __int16 uColor)
+char Render::Line2D(unsigned int uX, unsigned int uY, unsigned int uZ, unsigned int uW, unsigned __int16 uColor)
{
int v6; // edi@1
int v7; // edx@5
@@ -7116,78 +7075,44 @@
}
//----- (004A1EB6) --------------------------------------------------------
-void Render::SetGameRenderStates()
-{
- Render *v1; // esi@1
- unsigned int v2; // eax@1
- RenderD3D *v3; // ecx@2
- unsigned int uFogColor; // edi@6
- IDirect3DDevice3 *v5; // eax@8
- //IDirect3DDevice3Vtbl *v6; // ecx@8
- RenderD3D *v7; // eax@9
- RenderD3D *v8; // eax@9
- std::string v9; // [sp-14h] [bp-2Ch]@4
- IDirect3DDevice3 *v10; // [sp-8h] [bp-20h]@9
- signed int v11; // [sp-4h] [bp-1Ch]@4
- int v12; // [sp+0h] [bp-18h]@4
- std::string *v13; // [sp+10h] [bp-8h]@4
- int a3; // [sp+17h] [bp-1h]@4
-
- v1 = this;
- v2 = this->uNumD3DSceneBegins;
- this->uNumD3DSceneBegins = v2 + 1;
- if ( !v2 )
- {
- v3 = this->pRenderD3D;
+void Render::BeginSceneD3D()
+{
+ if (!uNumD3DSceneBegins++)
+ {
if (pRenderD3D)
{
- pRenderD3D->ClearTarget(1u, 0, 1u, 1.0);
+ pRenderD3D->ClearTarget(true, 0x00F08020, true, 1.0);
pRenderer->uNumBillboardsToDraw = 0;
pRenderD3D->pDevice->BeginScene();
- if ( !pRenderD3D->DoesRaiseExceptions() )
- {
- MessageBoxW(nullptr, L"Error executing scratch 3D operations", L"E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\screen16_3d.cpp:360", 0);
+ if (!pRenderD3D->DoesRaiseExceptions())
+ {
+ MessageBoxW(nullptr, L"Error executing scratch 3D operations", L"E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\screen16_3d.cpp:360", 0);
}
if ( uCurrentlyLoadedLevelType == LEVEL_Outdoor )
uFogColor = GetLevelFogColor();
else
uFogColor = 0;
- v5 = v1->pRenderD3D->pDevice;
- //v6 = v5->lpVtbl;
+
if ( uFogColor & 0xFF000000 )
{
- v12 = 1;
- v11 = 28;
- v10 = v5;
- pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, 1u);
- //v7 = v1->pRenderD3D;
- v12 = uFogColor & 0xFFFFFF;
- v11 = 34;
- //v10 = v7->pDevice;
+ pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, 1);
pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGCOLOR, uFogColor & 0xFFFFFF);
- v8 = v1->pRenderD3D;
- *(float *)&v12 = 0.0;
- v11 = 35;
- //v10 = v8->pDevice;
pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGTABLEMODE, 0);
- v1->bUsingSpecular = 1;
+ bUsingSpecular = true;
}
else
{
- *(float *)&v12 = 0.0;
- v11 = 28;
- v10 = v5;
pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, 0);
- v1->bUsingSpecular = 0;
+ bUsingSpecular = 0;
}
}
else
{
- LockRenderSurface((void **)&v1->pTargetSurface, &v1->uTargetSurfacePitch);
- if ( v1->pTargetSurface )
- v1->field_18_locked_pitch = v1->uTargetSurfacePitch;
+ LockRenderSurface((void **)&pTargetSurface, &uTargetSurfacePitch);
+ if (pTargetSurface)
+ field_18_locked_pitch = uTargetSurfacePitch;
else
- --v1->uNumD3DSceneBegins;
+ --uNumD3DSceneBegins;
}
}
}
@@ -7195,23 +7120,19 @@
//----- (004A1FE1) --------------------------------------------------------
void Render::DrawBillboards_And_MaybeRenderSpecialEffects_And_EndScene()
{
- char v1; // zf@1
-
- v1 = this->uNumD3DSceneBegins-- == 1;
- if ( v1 )
- {
- if ( this->pRenderD3D )
- {
- pGame->draw_debug_outlines();
- DoRenderBillboards_D3D();
- pGame->pStru6Instance->RenderSpecialEffects();
- pRenderD3D->pDevice->EndScene();
- }
- else
- {
- pGame->pStru6Instance->RenderSpecialEffects();
- }
- }
+ --uNumD3DSceneBegins;
+ if (uNumD3DSceneBegins)
+ return;
+
+ if (pRenderD3D)
+ {
+ pGame->draw_debug_outlines();
+ DoRenderBillboards_D3D();
+ pGame->pStru6Instance->RenderSpecialEffects();
+ pRenderD3D->pDevice->EndScene();
+ }
+ else
+ pGame->pStru6Instance->RenderSpecialEffects();
}
@@ -7370,7 +7291,7 @@
ErrD3D(pRenderD3D->pDevice->SetTexture(0, a5));
ErrD3D(pRenderD3D->pDevice->DrawPrimitive(
D3DPT_TRIANGLEFAN,
- 452,
+ D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1,
arary_77E5C8,
uNumVertices,
16));
@@ -7430,7 +7351,7 @@
ErrD3D(pRenderD3D->pDevice->SetTexture(0, 0));
ErrD3D(pRenderD3D->pDevice->DrawPrimitive(
D3DPT_TRIANGLEFAN,
- 452,
+ D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1,
arary_77E5C8,
uNumVertices,
16));
@@ -7461,7 +7382,7 @@
ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 3u));
ErrD3D(pRenderD3D->pDevice->DrawPrimitive(
D3DPT_TRIANGLEFAN,
- 452,
+ D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1,
arary_77E5C8,
uNumVertices,
16));
@@ -7479,7 +7400,7 @@
*(int *)v38 = 0;
v38 += 32;
--v37;
- *((int *)v38 - 9) = LODWORD(pRenderer->uFogColor) | v39 & 0xFF000000;
+ *((int *)v38 - 9) = pRenderer->uFogColor | v39 & 0xFF000000;
}
while ( v37 );
}
@@ -7488,7 +7409,7 @@
ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 5u));
ErrD3D(pRenderD3D->pDevice->DrawPrimitive(
D3DPT_TRIANGLEFAN,
- 452,
+ D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1,
arary_77E5C8,
uNumVertices,
16));
@@ -7572,7 +7493,7 @@
ErrD3D(pRenderD3D->pDevice->SetTexture(0, a4));
ErrD3D(pRenderD3D->pDevice->DrawPrimitive(
D3DPT_TRIANGLEFAN,
- 452,
+ D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1,
arary_77E5C8,
uNumVertices,
24));
@@ -7628,7 +7549,7 @@
ErrD3D(pRenderD3D->pDevice->SetTexture(0, pHwTex));
ErrD3D(pRenderD3D->pDevice->DrawPrimitive(
D3DPT_TRIANGLEFAN,
- 452,
+ D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1,
arary_77E5C8,
a2,
28));
@@ -7639,81 +7560,66 @@
//----- (004A2FC0) --------------------------------------------------------
-void Render::DrawIndoorPolygon(unsigned int uNumVertices, BLVFace *a3, IDirect3DTexture2 *pHwTex, Texture *pTex, int a6, int a7, int a8)
-{
- Render *v8; // edi@1
- unsigned int v9; // esi@3
- HRESULT v10; // eax@8
- HRESULT v11; // eax@8
+void Render::DrawIndoorPolygon(unsigned int uNumVertices, BLVFace *pFace, IDirect3DTexture2 *pHwTex, Texture *pTex, int uPackedID, unsigned int uColor, int a8)
+{
+ //Render *v8; // edi@1
+ //unsigned int v9; // esi@3
char *v12; // ecx@9
char *v13; // eax@9
double v14; // st6@10
int v15; // edx@10
Texture *v16; // edx@10
double v17; // st6@10
- char v18; // zf@10
+ //char v18; // zf@10
Texture *v19; // edx@10
- HRESULT v20; // eax@11
- HRESULT v21; // eax@11
- HRESULT v22; // eax@11
Texture *v23; // edx@16
char *v24; // ecx@16
char *v25; // eax@16
double v26; // st6@17
int v27; // esi@17
double v28; // st6@17
- HRESULT v29; // eax@18
- HRESULT v30; // eax@18
- HRESULT v31; // eax@18
- HRESULT v32; // eax@18
unsigned int v33; // ecx@18
char *v34; // eax@19
- HRESULT v35; // eax@21
- HRESULT v36; // eax@21
- HRESULT v37; // eax@21
- HRESULT v38; // eax@21
- HRESULT v39; // eax@21
- HRESULT v40; // eax@21
- HRESULT v41; // eax@21
- HRESULT v42; // eax@21
- HRESULT v43; // eax@21
- HRESULT v44; // eax@21
- Texture *v45; // edx@23
- char *v46; // ecx@23
- char *v47; // eax@23
- double v48; // st6@24
- int v49; // esi@24
- double v50; // st6@24
- HRESULT v51; // eax@25
- HRESULT v52; // eax@25
+ //Texture *v45; // edx@23
+ //char *v46; // ecx@23
+ //char *v47; // eax@23
+ //double v48; // st6@24
+ //int v49; // esi@24
+ //double v50; // st6@24
const char *v53; // [sp-Ch] [bp-20h]@21
- int v54; // [sp-8h] [bp-1Ch]@21
- unsigned int v55; // [sp-4h] [bp-18h]@21
+ //int v54; // [sp-8h] [bp-1Ch]@21
+ //unsigned int v55; // [sp-4h] [bp-18h]@21
const char *v56; // [sp+0h] [bp-14h]@0
int v57; // [sp+4h] [bp-10h]@0
unsigned int v58; // [sp+8h] [bp-Ch]@0
- LightmapBuilder *v59; // [sp+Ch] [bp-8h]@3
- int a3a; // [sp+10h] [bp-4h]@4
-
- v8 = this;
- if ( this->uNumD3DSceneBegins && (signed int)uNumVertices >= 3 )
- {
- v59 = pGame->pLightmapBuilder;
- v9 = v59->std__vector_000004_size;
- if ( v9 )
- a3a = -1;
- else
- a3a = a7;
- pGame->_44EDE4(a3, &a3a);
- if ( byte_4D864C && pGame->uFlags & 1 )
- {
+ //LightmapBuilder *v59; // [sp+Ch] [bp-8h]@3
+ //int a3a; // [sp+10h] [bp-4h]@4
+
+ //v8 = this;
+ if (!uNumD3DSceneBegins || uNumVertices < 3)
+ return;
+
+ //auto a3 = pFace;
+ //auto a6 = uPackedID;
+ //v59 = pGame->pLightmapBuilder;
+ //v9 = v59->std__vector_000004_size;
+
+ auto uCorrectedColor = uColor;
+ if (pGame->pLightmapBuilder->std__vector_000004_size)
+ uCorrectedColor = 0xFFFFFFFF;
+ pGame->AlterGamma(pFace, &uCorrectedColor);
+
+ if (byte_4D864C && pGame->uFlags & 1)
+ {
+ __debugbreak();
ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, false));
ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, 1));
if ( (signed int)uNumVertices > 0 )
{
v12 = (char *)&array_507D30[0].vWorldViewPosition;
v13 = (char *)&arary_77E5C8[0].pos.y;
- a7 = uNumVertices;
+ auto a7 = uNumVertices;
+ uint v18;
do
{
v14 = *(float *)v12 * 0.061758894;
@@ -7721,7 +7627,7 @@
*((int *)v13 + 4) = 0;
*((int *)v13 - 1) = v15;
*(int *)v13 = *((int *)v12 + 4);
- *((int *)v13 + 3) = a3a;
+ *((int *)v13 + 3) = uCorrectedColor;
v16 = pTex;
v13 += 32;
*((float *)v13 - 7) = 1.0 - 1.0 / v14;
@@ -7741,63 +7647,47 @@
ErrD3D(pRenderD3D->pDevice->SetTexture(0, nullptr));
ErrD3D(pRenderD3D->pDevice->DrawPrimitive(
D3DPT_TRIANGLEFAN,
- 452,
+ D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1,
arary_77E5C8,
uNumVertices,
28));
- v59->_45D74F_MessWithLight(-1, 0);
- }
- else
- {
- if ( !v9 || byte_4D864C && pGame->uFlags & 2 )
- {
- if ( (signed int)uNumVertices > 0 )
- {
- v45 = pTex;
- v46 = (char *)&array_507D30[0].vWorldViewPosition;
- v47 = (char *)&arary_77E5C8[0].pos.y;
- pTex = (Texture *)uNumVertices;
- do
- {
- v48 = *(float *)v46 * 0.061758894;
- v49 = *((int *)v46 + 3);
- *((int *)v47 + 4) = 0;
- *((int *)v47 - 1) = v49;
- *(int *)v47 = *((int *)v46 + 4);
- *((int *)v47 + 3) = a3a;
- v47 += 32;
- *((float *)v47 - 7) = 1.0 - 1.0 / v48;
- v50 = 1.0 / *(float *)v46;
- v46 += 48;
- v18 = pTex == (Texture *)1;
- pTex = (Texture *)((char *)pTex - 1);
- *((float *)v47 - 6) = v50;
- a7 = v45->uTextureWidth;
- *((float *)v47 - 3) = *((float *)v46 - 6) / (double)a7;
- a7 = v45->uTextureHeight;
- *((float *)v47 - 2) = *((float *)v46 - 5) / (double)a7;
- }
- while ( !v18 );
- }
- ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, 1));
- ErrD3D(pRenderD3D->pDevice->SetTexture(0, pHwTex));
- v55 = 0;
- v54 = 1490;
- ErrD3D(pRenderD3D->pDevice->DrawPrimitive(
- D3DPT_TRIANGLEFAN,
- 452,
+ pGame->pLightmapBuilder->_45D74F_MessWithLight(-1, 0);
+ }
+ else
+ {
+ if (!pGame->pLightmapBuilder->std__vector_000004_size ||
+ byte_4D864C && pGame->uFlags & 2)
+ {
+ for (uint i = 0; i < uNumVertices; ++i)
+ {
+ arary_77E5C8[i].pos.x = array_507D30[i].vWorldViewProjX;
+ arary_77E5C8[i].pos.y = array_507D30[i].vWorldViewProjY;
+ arary_77E5C8[i].pos.z = 1.0 - 1.0 / (array_507D30[i].vWorldViewPosition.x * 0.061758894);
+ arary_77E5C8[i].rhw = 1.0 / array_507D30[i].vWorldViewPosition.x;
+ arary_77E5C8[i].diffuse = uCorrectedColor;
+ arary_77E5C8[i].specular = 0;
+ arary_77E5C8[i].texcoord.x = array_507D30[i].u / (double)pTex->uTextureWidth;
+ arary_77E5C8[i].texcoord.y = array_507D30[i].v / (double)pTex->uTextureHeight;
+ }
+
+ ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, 1));
+ ErrD3D(pRenderD3D->pDevice->SetTexture(0, pHwTex));
+ ErrD3D(pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN,
+ D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1,
arary_77E5C8,
uNumVertices,
28));
- }
- else
- {
+ }
+ else
+ {
+ __debugbreak();
if ( (signed int)uNumVertices > 0 )
{
v23 = pTex;
v24 = (char *)&array_507D30[0].vWorldViewPosition;
v25 = (char *)&arary_77E5C8[0].pos.y;
pTex = (Texture *)uNumVertices;
+ uint v18;
do
{
v26 = *(float *)v24 * 0.061758894;
@@ -7805,7 +7695,7 @@
*((int *)v25 + 4) = 0;
*((int *)v25 - 1) = v27;
*(int *)v25 = *((int *)v24 + 4);
- *((int *)v25 + 3) = a7;
+ *((int *)v25 + 3) = uColor;
v25 += 32;
*((float *)v25 - 7) = 1.0 - 1.0 / v26;
v28 = 1.0 / *(float *)v24;
@@ -7813,10 +7703,10 @@
v18 = pTex == (Texture *)1;
pTex = (Texture *)((char *)pTex - 1);
*((float *)v25 - 6) = v28;
- a3 = (BLVFace *)v23->uTextureWidth;
- *((float *)v25 - 3) = *((float *)v24 - 6) / (double)(signed int)a3;
- a3 = (BLVFace *)v23->uTextureHeight;
- *((float *)v25 - 2) = *((float *)v24 - 5) / (double)(signed int)a3;
+ //a3 = (BLVFace *)v23->uTextureWidth;
+ *((float *)v25 - 3) = *((float *)v24 - 6) / (double)(signed int)v23->uTextureWidth;
+ //a3 = (BLVFace *)v23->uTextureHeight;
+ *((float *)v25 - 2) = *((float *)v24 - 5) / (double)(signed int)v23->uTextureHeight;
}
while ( !v18 );
}
@@ -7825,19 +7715,19 @@
ErrD3D(pRenderD3D->pDevice->SetTexture(0, nullptr));
ErrD3D(pRenderD3D->pDevice->DrawPrimitive(
D3DPT_TRIANGLEFAN,
- 452,
+ D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1,
arary_77E5C8,
uNumVertices,
28));
ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, 1));
- v59->_45D74F_MessWithLight(-1, 0);
+ pGame->pLightmapBuilder->_45D74F_MessWithLight(-1, 0);
v33 = uNumVertices;
if ( (signed int)uNumVertices > 0 )
{
v34 = (char *)&arary_77E5C8[0].diffuse;
do
{
- *(int *)v34 = a3a;
+ *(int *)v34 = uCorrectedColor;
v34 += 32;
--v33;
}
@@ -7851,14 +7741,13 @@
ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 3));
ErrD3D(pRenderD3D->pDevice->DrawPrimitive(
D3DPT_TRIANGLEFAN,
- 452,
+ D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1,
arary_77E5C8,
uNumVertices,
28));
ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 2));
ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 1));
ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, false));
- }
}
}
}
@@ -7866,7 +7755,7 @@
//----- (004A43B1) --------------------------------------------------------
-void Render::_4A43B1(RenderBillboardTransform_local0 *pSoftBillboard, Sprite *a3, int a4)
+void Render::DrawBillboard_Indoor(RenderBillboardTransform_local0 *pSoftBillboard, Sprite *a3, int uPaletteSubindex)
{
RenderBillboardTransform_local0 *v4; // ebx@2
double v5; // st7@2
@@ -7903,23 +7792,23 @@
if ( this->uNumD3DSceneBegins )
{
v4 = pSoftBillboard;
- v5 = (double)HIWORD(pSoftBillboard->field_28);
+ v5 = (double)HIWORD(pSoftBillboard->sZValue);
pSoftBillboarda = v5;
v6 = v5;
v7 = Billboard_ProbablyAddToListAndSortByZOrder(LODWORD(v6));
- v8 = a4;
+ v8 = uPaletteSubindex;
v9 = v7;
- v28 = a4 & 0xFF000000;
- if ( a4 & 0xFF000000 )
- pBillboardRenderListD3D[v9].bOpaque = 3;
+ v28 = uPaletteSubindex & 0xFF000000;
+ if ( uPaletteSubindex & 0xFF000000 )
+ pBillboardRenderListD3D[v9].uOpacity = RenderBillboardD3D::Opaque_3;
else
- pBillboardRenderListD3D[v9].bOpaque = 0;
+ pBillboardRenderListD3D[v9].uOpacity = RenderBillboardD3D::Transparent;
v10 = a3;
pBillboardRenderListD3D[v9].field_90 = v4->field_44;
- pBillboardRenderListD3D[v9].field_94 = v4->field_28;
+ pBillboardRenderListD3D[v9].sZValue = v4->sZValue;
pBillboardRenderListD3D[v9].uParentBillboardID = v4->uParentBillboardID;
- v25 = v4->field_8;
- v24 = v4->field_C;
+ v25 = v4->uScreenSpaceX;
+ v24 = v4->uScreenSpaceY;
a1 = (double)(v4->field_10 & 0xFFFF) * 0.000015260186 + (double)HIWORD(v4->field_10);
v29 = (double)(v4->field_14 & 0xFFFF) * 0.000015260186 + (double)HIWORD(v4->field_14);
v31 = (double)((v10->uBufferWidth >> 1) - v10->uAreaX);
@@ -7956,39 +7845,39 @@
v17 = v17 * -1.0;
pBillboardRenderListD3D[v9].pQuards[1].specular = 0;
pBillboardRenderListD3D[v9].pQuards[1].diffuse = v12;
- *(float *)(v9 * 156 + 15684320) = v13 - v17 * a1;
- *(float *)(v9 * 156 + 15684324) = v32 - v18 * v29;
- *(float *)(v9 * 156 + 15684328) = v15;
- *(float *)(v9 * 156 + 15684332) = v16;
- *(float *)(v9 * 156 + 15684344) = 0.0;
- *(float *)(v9 * 156 + 15684348) = 1.0;
+ pBillboardRenderListD3D[v9].pQuards[1].pos.x = v13 - v17 * a1;
+ pBillboardRenderListD3D[v9].pQuards[1].pos.y = v32 - v18 * v29;
+ pBillboardRenderListD3D[v9].pQuards[1].pos.z = v15;
+ pBillboardRenderListD3D[v9].pQuards[1].rhw = v16;
+ pBillboardRenderListD3D[v9].pQuards[1].texcoord.x = 0.0;
+ pBillboardRenderListD3D[v9].pQuards[1].texcoord.y = 1.0;
v19 = v10->uBufferHeight - v10->uAreaY - v10->uAreaHeight;
v20 = (double)(v10->uAreaX + v10->uAreaWidth + (v10->uBufferWidth >> 1) - v10->uBufferWidth);
if ( v4->uFlags & 4 )
v20 = v20 * -1.0;
pBillboardRenderListD3D[v9].pQuards[2].specular = 0;
pBillboardRenderListD3D[v9].pQuards[2].diffuse = v12;
- *(float *)(v9 * 156 + 15684352) = v20 * a1 + v13;
- *(float *)(v9 * 156 + 15684356) = v32 - (double)v19 * v29;
- *(float *)(v9 * 156 + 15684360) = v15;
- *(float *)(v9 * 156 + 15684364) = v16;
- *(float *)(v9 * 156 + 15684376) = 1.0;
- *(float *)(v9 * 156 + 15684380) = 1.0;
+ pBillboardRenderListD3D[v9].pQuards[2].pos.x = v20 * a1 + v13;
+ pBillboardRenderListD3D[v9].pQuards[2].pos.y = v32 - (double)v19 * v29;
+ pBillboardRenderListD3D[v9].pQuards[2].pos.z = v15;
+ pBillboardRenderListD3D[v9].pQuards[2].rhw = v16;
+ pBillboardRenderListD3D[v9].pQuards[2].texcoord.x = 1.0;
+ pBillboardRenderListD3D[v9].pQuards[2].texcoord.y = 1.0;
v21 = v10->uBufferHeight - v10->uAreaY;
v22 = (double)(v10->uAreaX + v10->uAreaWidth + (v10->uBufferWidth >> 1) - v10->uBufferWidth);
if ( v4->uFlags & 4 )
v22 = v22 * -1.0;
pBillboardRenderListD3D[v9].pQuards[3].specular = 0;
pBillboardRenderListD3D[v9].pQuards[3].diffuse = v12;
- *(float *)(v9 * 156 + 15684384) = v22 * a1 + v13;
- *(float *)(v9 * 156 + 15684388) = v32 - (double)v21 * v29;
- *(float *)(v9 * 156 + 15684392) = v15;
- *(float *)(v9 * 156 + 15684396) = v16;
- *(float *)(v9 * 156 + 15684408) = 1.0;
- *(float *)(v9 * 156 + 15684412) = 0.0;
+ pBillboardRenderListD3D[v9].pQuards[3].pos.x = v22 * a1 + v13;
+ pBillboardRenderListD3D[v9].pQuards[3].pos.y = v32 - (double)v21 * v29;
+ pBillboardRenderListD3D[v9].pQuards[3].pos.z = v15;
+ pBillboardRenderListD3D[v9].pQuards[3].rhw = v16;
+ pBillboardRenderListD3D[v9].pQuards[3].texcoord.x = 1.0;
+ pBillboardRenderListD3D[v9].pQuards[3].texcoord.y = 0.0;
v23 = v10->pTexture;
pBillboardRenderListD3D[v9].uNumVertices = 4;
- *(float *)(v9 * 156 + 15684416) = pSoftBillboarda;
+ pBillboardRenderListD3D[v9].flt_88 = pSoftBillboarda;
pBillboardRenderListD3D[v9].pTexture = v23;
}
}
@@ -8043,18 +7932,18 @@
if ( this->uNumD3DSceneBegins )
{
- if ( HIWORD(a2->field_28) )
- {
- v5 = (double)HIWORD(a2->field_28);
+ if ( HIWORD(a2->sZValue) )
+ {
+ v5 = (double)HIWORD(a2->sZValue);
v6 = v5;
v7 = v5;
v8 = Billboard_ProbablyAddToListAndSortByZOrder(LODWORD(v7));
- pBillboardRenderListD3D[v8].bOpaque = 1;
+ pBillboardRenderListD3D[v8].uOpacity = RenderBillboardD3D::Opaque_1;
pBillboardRenderListD3D[v8].field_90 = a2->field_44;
- pBillboardRenderListD3D[v8].field_94 = a2->field_28;
+ pBillboardRenderListD3D[v8].sZValue = a2->sZValue;
pBillboardRenderListD3D[v8].uParentBillboardID = a2->uParentBillboardID;
- v9 = a2->field_8;
- v10 = a2->field_C;
+ v9 = a2->uScreenSpaceX;
+ v10 = a2->uScreenSpaceY;
v11 = (double)(a2->field_10 & 0xFFFF) * 0.000015260186 + (double)HIWORD(a2->field_10);
v12 = (double)v9;
v13 = v12;
@@ -8077,7 +7966,7 @@
+ ((double)(unsigned __int16)v20 * 0.000015259022 + (double)(v20 >> 16)) * v16
- 12.0)
* v11
- + (double)a2->field_C;
+ + (double)a2->uScreenSpaceY;
pBillboardRenderListD3D[v8].pQuards[0].specular = 0;
pBillboardRenderListD3D[v8].pQuards[0].diffuse = uDiffuse;
pBillboardRenderListD3D[v8].pQuards[0].pos.y = v22;
@@ -8085,8 +7974,8 @@
pBillboardRenderListD3D[v8].pQuards[0].rhw = 1.0 / v6;
pBillboardRenderListD3D[v8].pQuards[0].texcoord.x = 0.0;
pBillboardRenderListD3D[v8].pQuards[0].texcoord.y = 0.0;
- v23 = (double)(a2->field_8 - 12) - v13;
- v24 = (double)a2->field_C - v15;
+ 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);
@@ -8102,7 +7991,7 @@
+ ((double)(unsigned __int16)v27 * 0.000015259022 + (double)(v27 >> 16)) * v23
- 12.0)
* v11
- + (double)a2->field_C;
+ + (double)a2->uScreenSpaceY;
pBillboardRenderListD3D[v8].pQuards[1].pos.z = pRenderer->pBillboardRenderListD3D[v8].pQuards[0].pos.z;
v30 = pBillboardRenderListD3D[v8].pQuards[0].rhw;
pBillboardRenderListD3D[v8].pQuards[1].pos.y = v29;
@@ -8111,8 +8000,8 @@
pBillboardRenderListD3D[v8].pQuards[1].diffuse = uDiffuse;
pBillboardRenderListD3D[v8].pQuards[1].texcoord.x = 0.0;
pBillboardRenderListD3D[v8].pQuards[1].texcoord.y = 1.0;
- v31 = (double)(a2->field_8 + 12) - v13;
- v32 = (double)a2->field_C - v15;
+ 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);
@@ -8129,7 +8018,7 @@
+ ((double)(unsigned __int16)v35 * 0.000015259022 + (double)(v35 >> 16)) * v31
- 12.0)
* v11
- + (double)a2->field_C;
+ + (double)a2->uScreenSpaceY;
pBillboardRenderListD3D[v8].pQuards[2].specular = 0;
pBillboardRenderListD3D[v8].pQuards[2].pos.z = v37;
pBillboardRenderListD3D[v8].pQuards[2].rhw = pBillboardRenderListD3D[v8].pQuards[0].rhw;
@@ -8137,8 +8026,8 @@
pBillboardRenderListD3D[v8].pQuards[2].pos.y = v38;
pBillboardRenderListD3D[v8].pQuards[2].texcoord.x = 1.0;
pBillboardRenderListD3D[v8].pQuards[2].texcoord.y = 1.0;
- v39 = (double)(a2->field_8 + 12) - v13;
- v40 = (double)(a2->field_C - 25) - v15;
+ 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);
@@ -8154,7 +8043,7 @@
+ ((double)(unsigned __int16)v43 * 0.000015259022 + (double)(v43 >> 16)) * v39
- 12.0)
* v11
- + (double)a2->field_C;
+ + (double)a2->uScreenSpaceY;
v46 = pBillboardRenderListD3D[v8].pQuards[0].pos.z;
pBillboardRenderListD3D[v8].pQuards[3].specular = 0;
pBillboardRenderListD3D[v8].pQuards[3].pos.z = v46;
@@ -8219,16 +8108,16 @@
if ( this->uNumD3DSceneBegins )
{
- v5 = (double)HIWORD(a2->field_28);
+ v5 = (double)HIWORD(a2->sZValue);
v6 = v5;
v7 = v5;
v8 = Billboard_ProbablyAddToListAndSortByZOrder(LODWORD(v7));
- pBillboardRenderListD3D[v8].bOpaque = 1;
+ pBillboardRenderListD3D[v8].uOpacity = RenderBillboardD3D::Opaque_1;
pBillboardRenderListD3D[v8].field_90 = a2->field_44;
- pBillboardRenderListD3D[v8].field_94 = a2->field_28;
+ pBillboardRenderListD3D[v8].sZValue = a2->sZValue;
pBillboardRenderListD3D[v8].uParentBillboardID = a2->uParentBillboardID;
- v9 = a2->field_8;
- v10 = a2->field_C;
+ v9 = a2->uScreenSpaceX;
+ v10 = a2->uScreenSpaceY;
v11 = (double)(a2->field_10 & 0xFFFF) * 0.000015260186 + (double)HIWORD(a2->field_10);
v12 = (double)v9;
v13 = v12;
@@ -8252,7 +8141,7 @@
+ ((double)(unsigned __int16)v21 * 0.000015259022 + (double)(v21 >> 16)) * v16
- 12.0)
* v11
- + (double)a2->field_C;
+ + (double)a2->uScreenSpaceY;
pBillboardRenderListD3D[v8].pQuards[0].specular = 0;
pBillboardRenderListD3D[v8].pQuards[0].diffuse = uDiffuse;
pBillboardRenderListD3D[v8].pQuards[0].pos.y = v23;
@@ -8262,8 +8151,8 @@
pBillboardRenderListD3D[v8].pQuards[0].rhw = v25;
pBillboardRenderListD3D[v8].pQuards[0].texcoord.x = 0.0;
pBillboardRenderListD3D[v8].pQuards[0].texcoord.y = 0.0;
- v26 = (double)(a2->field_8 - 12) - v13;
- v27 = (double)a2->field_C - v15;
+ 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);
@@ -8279,7 +8168,7 @@
+ ((double)(unsigned __int16)v30 * 0.000015259022 + (double)(v30 >> 16)) * v26
- 12.0)
* v11
- + (double)a2->field_C;
+ + (double)a2->uScreenSpaceY;
pBillboardRenderListD3D[v8].pQuards[1].pos.z = v24;
pBillboardRenderListD3D[v8].pQuards[1].pos.y = v32;
pBillboardRenderListD3D[v8].pQuards[1].specular = 0;
@@ -8287,8 +8176,8 @@
pBillboardRenderListD3D[v8].pQuards[1].diffuse = uDiffuse;
pBillboardRenderListD3D[v8].pQuards[1].texcoord.x = 0.0;
pBillboardRenderListD3D[v8].pQuards[1].texcoord.y = 1.0;
- v33 = (double)(a2->field_8 + 12) - v13;
- v34 = (double)a2->field_C - v15;
+ 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);
@@ -8304,7 +8193,7 @@
+ ((double)(unsigned __int16)v37 * 0.000015259022 + (double)(v37 >> 16)) * v33
- 12.0)
* v11
- + (double)a2->field_C;
+ + (double)a2->uScreenSpaceY;
pBillboardRenderListD3D[v8].pQuards[2].specular = 0;
pBillboardRenderListD3D[v8].pQuards[2].pos.z = v24;
pBillboardRenderListD3D[v8].pQuards[2].rhw = v25;
@@ -8312,8 +8201,8 @@
pBillboardRenderListD3D[v8].pQuards[2].pos.y = v39;
pBillboardRenderListD3D[v8].pQuards[2].texcoord.x = 1.0;
pBillboardRenderListD3D[v8].pQuards[2].texcoord.y = 1.0;
- v40 = (double)(a2->field_8 + 12) - v13;
- v41 = (double)(a2->field_C - 25) - v15;
+ 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);
@@ -8329,7 +8218,7 @@
+ ((double)(unsigned __int16)v44 * 0.000015259022 + (double)(v44 >> 16)) * v40
- 12.0)
* v11
- + (double)a2->field_C;
+ + (double)a2->uScreenSpaceY;
pBillboardRenderListD3D[v8].pQuards[3].specular = 0;
pBillboardRenderListD3D[v8].pQuards[3].pos.z = v24;
pBillboardRenderListD3D[v8].pQuards[3].rhw = v25;
@@ -8383,20 +8272,20 @@
if ( a1->uNumD3DSceneBegins )
{
v5 = a2;
- v6 = (double)HIWORD(a2->field_28);
+ v6 = (double)HIWORD(a2->sZValue);
v31 = v6;
v7 = v6;
v8 = Billboard_ProbablyAddToListAndSortByZOrder(LODWORD(v7));
if ( BYTE3(v5->uTintColor) )
- pBillboardRenderListD3D[v8].bOpaque = 3;
+ pBillboardRenderListD3D[v8].uOpacity = RenderBillboardD3D::Opaque_3;
else
- pBillboardRenderListD3D[v8].bOpaque = 0;
+ pBillboardRenderListD3D[v8].uOpacity = RenderBillboardD3D::Transparent;
v9 = pSprite;
pBillboardRenderListD3D[v8].field_90 = v5->field_44;
- pBillboardRenderListD3D[v8].field_94 = v5->field_28;
+ pBillboardRenderListD3D[v8].sZValue = v5->sZValue;
pBillboardRenderListD3D[v8].uParentBillboardID = v5->uParentBillboardID;
- v24 = v5->field_8;
- v23 = v5->field_C;
+ v24 = v5->uScreenSpaceX;
+ v23 = v5->uScreenSpaceY;
v30 = (double)(v5->field_10 & 0xFFFF) * 0.000015260186 + (double)HIWORD(v5->field_10);
v29 = (double)(v5->field_14 & 0xFFFF) * 0.000015260186 + (double)HIWORD(v5->field_14);
pSpritea = (double)((v9->uBufferWidth >> 1) - v9->uAreaX);
@@ -8481,7 +8370,7 @@
//----- (004A48E4) --------------------------------------------------------
-int Render::_4A48E4(int a2, int a3, int a4, int a5, int a6)
+int Render::MakeParticleBillboardAndPush_BLV_Software(int screenSpaceX, int screenSpaceY, int z, int lightColor, int a6)
{
int v6; // ecx@1
int v7; // ebx@1
@@ -8498,8 +8387,8 @@
unsigned int v18; // [sp+28h] [bp+Ch]@1
int v19; // [sp+34h] [bp+18h]@1
- v6 = a2;
- v7 = (a6 >> 1) + a3;
+ v6 = screenSpaceX;
+ v7 = (a6 >> 1) + screenSpaceY;
v17 = 0;
v15 = 0;
v8 = (a6 >> 1) + v6;
@@ -8507,22 +8396,22 @@
v9 = 2 * (a6 >> 1);
v10 = (a6 >> 1) * ((a6 >> 1) - 1);
x = v8 - (a6 >> 1);
- v16 = (a6 >> 1) + a3 - v8;
+ v16 = (a6 >> 1) + screenSpaceY - v8;
v19 = a6 >> 1;
v13 = v9;
v18 = v8;
do
{
- sub_4A46E6(x, v16 + v18, a4, 2 * v19, a5);
+ sr_4A46E6_draw_particle_segment(x, v16 + v18, z, 2 * v19, lightColor);
if ( v15 )
- sub_4A46E6(x, v17 + v7, a4, 2 * v19, a5);
+ sr_4A46E6_draw_particle_segment(x, v17 + v7, z, 2 * v19, lightColor);
v14 -= v15;
if ( v14 <= v10 )
{
if ( v19 != v17 )
{
- sub_4A46E6(v18, v16 + x, a4, 2 * v17, a5);
- sub_4A46E6(v18, v19 + v7, a4, 2 * v17, a5);
+ sr_4A46E6_draw_particle_segment(v18, v16 + x, z, 2 * v17, lightColor);
+ sr_4A46E6_draw_particle_segment(v18, v19 + v7, z, 2 * v17, lightColor);
}
--v19;
v13 -= 2;
@@ -8661,7 +8550,7 @@
ErrD3D(pRenderer->pRenderD3D->pDevice->SetTexture(0, a9));
ErrD3D(pRenderer->pRenderD3D->pDevice->DrawPrimitive(
D3DPT_TRIANGLEFAN,
- 452,
+ D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1,
v29,
4,
24));
@@ -8713,7 +8602,7 @@
v6 = 0;
pBillboardRenderListD3D[v5].field_90 = 0;
pBillboardRenderListD3D[v5].uParentBillboardID = -1;
- pBillboardRenderListD3D[v5].bOpaque = 2;
+ pBillboardRenderListD3D[v5].uOpacity = RenderBillboardD3D::Opaque_2;
if ( a1->field_10 > 0 )
{
v7 = (char *)&a1->field_14[62];
@@ -8755,22 +8644,12 @@
//----- (004A4DE1) --------------------------------------------------------
bool Render::LoadTexture(const char *pName, unsigned int bMipMaps, IDirectDrawSurface4 **pOutSurface, IDirect3DTexture2 **pOutTexture)
{
- //const char *v5; // ebx@1
- //Render *v6; // edi@1
- //HWLTexture *pHWLTexture; // esi@1
- //signed int result; // eax@1
- //IDirectDrawSurface **v9; // ebx@9
- //IDirectDrawSurface4 *v10; // edi@11
- //int v11; // ebx@11
HRESULT v12; // eax@14
unsigned __int16 *v13; // ecx@19
unsigned __int16 *v14; // eax@19
DWORD v15; // edx@20
HRESULT v16; // eax@23
stru350 Dst; // [sp+Ch] [bp-F8h]@12
- //DDSURFACEDESC2 desc; // [sp+6Ch] [bp-98h]@13
- //DDSCAPS2 v19; // [sp+E8h] [bp-1Ch]@13
- //int v20; // [sp+100h] [bp-4h]@12
auto pHWLTexture = pD3DBitmaps.LoadTexture(pName, bMipMaps);
if ( pHWLTexture )
@@ -9149,7 +9028,7 @@
ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZFUNC, 8u));
ErrD3D(pRenderD3D->pDevice->DrawPrimitive(
D3DPT_TRIANGLEFAN,
- 452,
+ D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1,
v36,
4,
28));
@@ -9675,52 +9554,20 @@
//----- (004A6D87) --------------------------------------------------------
-void Render::FillRect2(int uX, int uY, int a4, unsigned int a5, int a6, unsigned __int16 a7)
-{
- Render *v7; // esi@1
- void *v8; // edx@2
- unsigned int v9; // ecx@3
- unsigned __int8 v10; // cf@5
- unsigned int v11; // ecx@5
- unsigned __int16 *v12; // edi@5
- int i; // ecx@5
- char v14; // zf@9
- int v15; // [sp+10h] [bp+Ch]@3
-
- auto a1 = this;
- v7 = a1;
- if ( a1->uNumSceneBegins )
- {
- v8 = &a1->pTargetSurface[uY + a4 * a1->uTargetSurfacePitch];
- if ( a6 > 0 )
- {
- v9 = a5;
- v15 = a6;
- do
- {
- if ( (signed int)v9 > 0 )
- {
- LOWORD(uX) = a7;
- uX <<= 16;
- LOWORD(uX) = a7;
- v10 = v9 & 1;
- v11 = v9 >> 1;
- memset32(v8, uX, v11);
- v12 = (unsigned __int16 *)((char *)v8 + 4 * v11);
- for ( i = v10; i; --i )
- {
- *v12 = a7;
- ++v12;
- }
- v9 = a5;
- v8 = (char *)v8 + 2 * a5;
- }
- v14 = v15-- == 1;
- v8 = (char *)v8 + 2 * (v7->uTargetSurfacePitch - v9);
- }
- while ( !v14 );
- }
- }
+void Render::FillRectFast(unsigned int uX, unsigned int uY, unsigned int uWidth, unsigned int uHeight, unsigned int uColor16)
+{
+ if (!uNumSceneBegins)
+ return;
+
+ unsigned __int32 twoColors = (uColor16 << 16) | uColor16;
+ for (uint y = 0; y < uHeight; ++y)
+ {
+ auto pDst = &pTargetSurface[uX + (y + uY) * uTargetSurfacePitch];
+
+ memset32(pDst, twoColors, uWidth / 2);
+ if (uWidth & 1)
+ pDst[uWidth - 1] = uColor16;
+ }
}
@@ -10946,15 +10793,15 @@
dword_A74C88 = 1;
goto LABEL_38;
}
- v6 = &stru_506F20;
- stru_506F20.Release();
+ v6 = &pTexture_PCX;
+ pTexture_PCX.Release();
v9 = 0;
v8 = "makeme.pcx";
}
else
{
- v6 = &stru_506F20;
- stru_506F20.Release();
+ v6 = &pTexture_PCX;
+ pTexture_PCX.Release();
v7 = "title.pcx";
if ( uCurrentMenuID )
v7 = "lsave640.pcx";
@@ -11269,4 +11116,101 @@
fread(pSpriteOffsets, 4, uNumItems, pFile);
return true;
-}
\ No newline at end of file
+}
+
+
+
+
+
+
+
+
+
+//----- (004A1C1E) --------------------------------------------------------
+void DoRenderBillboards_D3D()
+{
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, 3u));
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 1u));
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, 0));
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, 1u));
+
+ for (uint i = pRenderer->uNumBillboardsToDraw - 1; i != (uint)-1; --i)
+ {
+ auto p = pRenderer->pBillboardRenderListD3D + i;
+
+ if (p->uOpacity != RenderBillboardD3D::InvalidOpacity)
+ SetBillboardBlendOptions(p->uOpacity);
+
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetTexture(0, p->pTexture));
+ ErrD3D(pRenderer->pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN,
+ D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1,
+ p->pQuards,
+ p->uNumVertices,
+ D3DDP_DONOTLIGHT | D3DDP_DONOTUPDATEEXTENTS));
+ }
+
+ if (pRenderer->bFogEnabled)
+ {
+ pRenderer->bFogEnabled = false;
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, 1));
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGCOLOR, GetLevelFogColor() & 0xFFFFFF));
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGTABLEMODE, 0));
+ }
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, 2));
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, 1));
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 0));
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 2u));
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 1u));
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DITHERENABLE, 1u));
+}
+
+
+
+
+
+//----- (004A1DA8) --------------------------------------------------------
+void SetBillboardBlendOptions(RenderBillboardD3D::OpacityType a1)
+{
+ switch (a1)
+ {
+ case RenderBillboardD3D::Transparent:
+ {
+ if (pRenderer->bFogEnabled)
+ {
+ pRenderer->bFogEnabled = false;
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, 1u));
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGCOLOR, GetLevelFogColor() & 0xFFFFFF));
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGTABLEMODE, 0));
+ }
+
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 5));
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 6u));
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DITHERENABLE, 1));
+ }
+ break;
+
+ case RenderBillboardD3D::Opaque_1:
+ case RenderBillboardD3D::Opaque_2:
+ case RenderBillboardD3D::Opaque_3:
+ {
+ if (pRenderer->bUsingSpecular)
+ {
+ if (!pRenderer->bFogEnabled)
+ {
+ pRenderer->bFogEnabled = true;
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, 0));
+ }
+ }
+
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 2));
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 2u));
+ ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DITHERENABLE, 0));
+ }
+ break;
+
+ default:
+ Log::Warning(L"SetBillboardBlendOptions: invalid opacity type (%u)", a1);
+ break;
+ }
+}
+
diff -r c83d06692295 -r c0cf9393af64 Render.h
--- a/Render.h Mon Oct 22 09:20:49 2012 +0600
+++ b/Render.h Mon Oct 29 09:28:08 2012 +0600
@@ -18,6 +18,10 @@
#pragma pack(push, 1)
struct RenderVertexSoft
{
+ inline RenderVertexSoft():
+ flt_2C(0.0f)
+ {}
+
Vec3_float_ vWorldPosition;
Vec3_float_ vWorldViewPosition;
float vWorldViewProjX;
@@ -50,21 +54,21 @@
{
int field_0;
int field_4;
- float flt_8;
- float flt_C;
+ float fov_x;
+ float fov_y;
int sZValue;
int field_14;
unsigned __int16 uHwSpriteID;
__int16 uPalette;
__int16 uIndoorSectorID;
__int16 field_1E;
- __int16 field_20;
- __int16 field_22;
- __int16 field_24;
- __int16 field_26;
- __int16 field_28;
- __int16 field_2A;
- int field_2C_prolly_tint;
+ __int16 some_x;
+ __int16 some_y;
+ __int16 some_z;
+ __int16 uScreenSpaceX;
+ __int16 uScreenSpaceY;
+ unsigned __int16 uPaletteSubindex;
+ unsigned int uTintColor;
SpriteFrame *pSpriteFrame;
};
#pragma pack(pop)
@@ -167,13 +171,22 @@
#pragma pack(push, 1)
struct RenderBillboardD3D
{
+ enum OpacityType: unsigned __int32
+ {
+ Transparent = 0,
+ Opaque_1 = 1,
+ Opaque_2 = 2,
+ Opaque_3 = 3,
+ InvalidOpacity = 0xFFFFFFFF
+ };
+
IDirect3DTexture2 *pTexture;
unsigned int uNumVertices;
RenderVertexD3D3 pQuards[4];
float flt_88;
- unsigned int bOpaque;
+ OpacityType uOpacity;
int field_90;
- int field_94;
+ int sZValue;
unsigned int uParentBillboardID;
};
#pragma pack(pop)
@@ -264,7 +277,7 @@
void CreateSomeTexture();
bool InitializeFullscreen(HWND hWnd);
bool SwitchToWindow(HWND hWnd);
- char FillRect(unsigned int uX, unsigned int uY, unsigned int uZ, unsigned int uW, unsigned __int16 uColor);
+ char Line2D(unsigned int uX, unsigned int uY, unsigned int uZ, unsigned int uW, unsigned __int16 uColor);
void ClearZBuffer(int a2, int a3);
void Clip_v2(unsigned int uX, unsigned int uY, unsigned int uZ, unsigned int uW);
void ParseTargetPixelFormat();
@@ -291,19 +304,19 @@
unsigned int Billboard_ProbablyAddToListAndSortByZOrder(unsigned int a1);
unsigned int GetBillboardDrawListSize();
unsigned int GetParentBillboardID(unsigned int uBillboardID);
- void SetGameRenderStates();
+ void BeginSceneD3D();
void DrawBillboards_And_MaybeRenderSpecialEffects_And_EndScene();
unsigned int GetActorTintColor(float a2, int a3, int a4, int a5, RenderBillboard *a6);
void DrawPolygon(unsigned int uNumVertices, stru148 *a3, ODMFace *a4, IDirect3DTexture2 *pTexture);
void DrawTerrainPolygon(unsigned int uNumVertices, stru148 *a4, IDirect3DTexture2 *a5, int a6, int a7);
void DrawFan(unsigned int uNumVertices, stru148 *a3, IDirect3DTexture2 *a4);
void _4A2ED5(signed int a2, stru148 *a3, IDirect3DTexture2 *pHwTex);
- void DrawIndoorPolygon(unsigned int uNumVertices, struct BLVFace *a3, IDirect3DTexture2 *pHwTex, Texture *pTex, int a6, int a7, int a8);
+ void DrawIndoorPolygon(unsigned int uNumVertices, struct BLVFace *a3, IDirect3DTexture2 *pHwTex, Texture *pTex, int uPackedID, unsigned int uColor, int a8);
void MakeParticleBillboardAndPush_BLV(RenderBillboardTransform_local0 *a2, IDirect3DTexture2 *a3, unsigned int uDiffuse, int angle);
void MakeParticleBillboardAndPush_ODM(RenderBillboardTransform_local0 *a2, IDirect3DTexture2 *a3, unsigned int uDiffuse, int angle);
void TransformBillboard(RenderBillboardTransform_local0 *a2, Sprite *pSprite, int a1a, RenderBillboard *pBillboard);
- void _4A43B1(RenderBillboardTransform_local0 *pSoftBillboard, Sprite *a3, int a4);
- int _4A48E4(int a2, int a3, int a4, int a5, int a6);
+ void DrawBillboard_Indoor(RenderBillboardTransform_local0 *pSoftBillboard, Sprite *a3, int uPaletteSubindex);
+ int MakeParticleBillboardAndPush_BLV_Software(int screenSpaceX, int screenSpaceY, int z, int lightColor, int a6);
void DrawProjectile(float srcX, float srcY, float a3, float a4, float dstX, float dstY, float a7, float a8, IDirect3DTexture2 *a9);
void _4A4CC9(struct stru6_stru1_indoor_sw_billboard *a1, int a2);
bool LoadTexture(const char *pName, unsigned int bMipMaps, IDirectDrawSurface4 **pOutSurface, IDirect3DTexture2 **pOutTexture);
@@ -326,7 +339,7 @@
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);
void DrawText(signed int uOutX, signed int uOutY, unsigned __int8 *pFontPixels, unsigned int uCharWidth, unsigned int uCharHeight, unsigned __int16 *pFontPalette, unsigned __int16 uFaceColor, unsigned __int16 uShadowColor);
- void FillRect2(int uX, int uY, int a4, unsigned int a5, int a6, unsigned __int16 a7);
+ void FillRectFast(unsigned int uX, unsigned int uY, unsigned int uWidth, unsigned int uHeight, unsigned int uColor16);
int _4A6DF5(unsigned __int16 *pBitmap, unsigned int uBitmapPitch, struct Vec2_int_ *pBitmapXY, unsigned __int16 *pTarget, unsigned int uTargetPitch, Vec4_int_ *a7);
void _4A6E7E(unsigned int a2, unsigned int a3, Texture *a4);
char DrawBuildingsD3D();
@@ -409,7 +422,7 @@
unsigned int uMinDeviceTextureDim;
int field_10365C;
unsigned int bUsingSpecular;
- float uFogColor;
+ uint uFogColor;
int field_103668;
unsigned int pHDWaterBitmapIDs[7];
char field_103688[32];
@@ -421,7 +434,7 @@
int _gpu_memory_used;
void (__cdecl *pBeforePresentFunction)();
int field_1036C4;
- int turnFogOn;
+ uint bFogEnabled;
int field_1036CC;
RenderBillboardD3D pBillboardRenderListD3D[1000];
unsigned int uNumBillboardsToDraw;
@@ -444,14 +457,14 @@
{
unsigned __int16 *pTarget;
int *pTargetZ;
- int field_8;
- int field_C;
+ int uScreenSpaceX;
+ int uScreenSpaceY;
int field_10;
int field_14;
char field_18[8];
unsigned __int16 *pPalette;
unsigned __int16 *pPalette2;
- int field_28;
+ int sZValue;
unsigned int uFlags;
unsigned int uTargetPitch;
unsigned int uViewportX;
diff -r c83d06692295 -r c0cf9393af64 SaveLoad.cpp
--- a/SaveLoad.cpp Mon Oct 22 09:20:49 2012 +0600
+++ b/SaveLoad.cpp Mon Oct 29 09:28:08 2012 +0600
@@ -42,45 +42,13 @@
//----- (0045EE8A) --------------------------------------------------------
void __fastcall LoadGame(unsigned int uSlot)
{
- //unsigned int v1; // ebx@1
- //char v2; // zf@1
- //signed int v3; // esi@3
- //signed int v4; // esi@8
- //char *v5; // eax@9
- //unsigned int v6; // eax@12
- //unsigned int v7; // esi@13
- //char *v8; // ecx@14
- //FILE *v9; // eax@22
- //FILE *v10; // eax@26
- //FILE *v11; // eax@29
- //FILE *v12; // eax@32
- //FILE *v13; // eax@35
- //FILE *v14; // eax@38
- //unsigned int v15; // edi@41
- //Player *v16; // esi@41
- //int *v17; // esi@46
- //int v18; // edi@46
- //int v19; // ebx@46
- //int v20; // ecx@49
- //int v21; // eax@51
- //int v22; // ecx@56
- //bool v23; // edx@56
- //AudioPlayer *v24; // ebx@60
bool v25; // esi@62
bool v26; // eax@62
- //signed int v27; // esi@66
- //RGBTexture *v28; // edi@67
- std::string v29; // [sp-18h] [bp-108h]@25
int v30; // [sp-Ch] [bp-FCh]@65
int v31; // [sp-8h] [bp-F8h]@4
- //signed int v32; // [sp-4h] [bp-F4h]@4
char DstBuf[100]; // [sp+Ch] [bp-E4h]@23
- //char pContainer; // [sp+20h] [bp-D0h]@62
char Str[123]; // [sp+70h] [bp-80h]@25
- //char a3[5]; // [sp+EBh] [bp-5h]@2
- //v1 = uSlot;
- //v2 = pSavegameUsedSlots[uSlot] == 0;
dword_5B65C8 = 0;
if (!pSavegameUsedSlots[uSlot])
{
@@ -221,7 +189,7 @@
pGUIWindow_CurrentMenu->Release();
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 0;
+ pCurrentScreen = 0;
viewparams->bRedrawGameUI = true;
@@ -321,7 +289,7 @@
int v61; // [sp+224h] [bp-4Ch]@30
int v62; // [sp+228h] [bp-48h]@2
LOD::Directory pDir; // [sp+22Ch] [bp-44h]@2
- std::string *v64; // [sp+24Ch] [bp-24h]@1
+ //std::string *v64; // [sp+24Ch] [bp-24h]@1
size_t Size; // [sp+250h] [bp-20h]@26
__int16 *v66; // [sp+254h] [bp-1Ch]@1
void *DstBuf; // [sp+258h] [bp-18h]@2
@@ -332,42 +300,49 @@
int a3; // [sp+26Fh] [bp-1h]@8
v66 = a2;
- v64 = (std::string *)a1;
+ //v64 = (std::string *)a1;
+
strcpy(byte_6BE3B0, pCurrentMapName);
- result = _strcmpi(pCurrentMapName, "d05.blv");
- if ( result )
- {
- DstBuf = operator new(0xF4240u);
- pDir.Reset();
+ if (!_strcmpi(pCurrentMapName, "d05.blv"))
+ return false;
+
+ DstBuf = malloc(0xF4240u);
+ pDir.Reset();
v52 = pParty->vPosition.x;
- v51 = pParty->vPosition.z;
- v62 = pParty->vPosition.y;
+ v51 = pParty->vPosition.y;
+ v62 = pParty->vPosition.z;
v53 = pParty->sRotationY;
v54 = pParty->sRotationX;
- pParty->vPosition.x = pParty->vPrevPosition.x;
- pParty->vPosition.z = pParty->vPrevPosition.z;
- pParty->vPosition.y = pParty->vPrevPosition.y;
- pParty->uFallStartY = pParty->vPrevPosition.y;
- pParty->sRotationY = pParty->sPrevRotationY;
- pParty->sRotationX = pParty->sPrevRotationX;
- if ( uCurrentlyLoadedLevelType == LEVEL_Indoor )
- pIndoor->stru1.uLastVisitDay = pParty->uTimePlayed;
- else
- pOutdoor->uLastVisitDay = pParty->uTimePlayed;
- v3 = MakeScreenshot(150, 112);
- strcpy((char *)&pDir, "image.pcx");
+ pParty->vPosition.x = pParty->vPrevPosition.x;
+ pParty->vPosition.y = pParty->vPrevPosition.z;
+ pParty->vPosition.z = pParty->vPrevPosition.y;
+ pParty->uFallStartY = pParty->vPrevPosition.y;
+ pParty->sRotationY = pParty->sPrevRotationY;
+ pParty->sRotationX = pParty->sPrevRotationX;
+
+ if (uCurrentlyLoadedLevelType == LEVEL_Indoor)
+ pIndoor->stru1.uLastVisitDay = pParty->uTimePlayed;
+ else
+ pOutdoor->uLastVisitDay = pParty->uTimePlayed;
+
+ v3 = MakeScreenshot(150, 112);
+ {
+ strcpy(pDir.pFilename, "image.pcx");
+
pRenderer->_49F5A2((int)v3, 150, 112, DstBuf, 1000000, (int)&pDir.uDataSize);
- free(v3);
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 11 )
+ }
+ free(v3);
+
+ if ( pCurrentScreen == 11 )
{
pRenderer->DrawTextureIndexed(
8u,
8u,
- (Texture *)(uTextureID_loadsave != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_loadsave] : 0));
+ (Texture *)(uTextureID_loadsave != -1 ? &pIcons_LOD->pTextures[uTextureID_loadsave] : 0));
pRenderer->DrawTextureIndexed(
0x12u,
0x8Du,
- (Texture *)(uTextureID_save_up != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_save_up] : 0));
+ (Texture *)(uTextureID_save_up != -1 ? &pIcons_LOD->pTextures[uTextureID_save_up] : 0));
v36 = pGlobalTXT_LocalizationStrings[190];
v4 = pFontSmallnum->AlignText_Center(0xBAu, pGlobalTXT_LocalizationStrings[190]);
pGUIWindow_CurrentMenu->DrawText(pFontSmallnum, v4 + 25, 219, 0, v36, 0, 0, 0);
@@ -447,13 +422,13 @@
{
v39 = v69;
v38 = (const char *)v70;
- sprintfex(Str, "data\\lloyd%d%d.pcx", v70, v69);
+ sprintf(Str, "data\\lloyd%d%d.pcx", v70, v69);
v8 = fopen(Str, "rb");
if ( v8 )
{
v39 = v69;
v38 = (const char *)v70;
- sprintfex(Str, "lloyd%d%d.pcx", v70, v69);
+ sprintf(Str, "lloyd%d%d.pcx", v70, v69);
fseek(v8, 0, 2);
pDir.uDataSize = ftell(v8);
rewind(v8);
@@ -464,7 +439,7 @@
if ( pNew_LOD->Write(&pDir, DstBuf, 0) )
{
v39 = 207;
- sprintfex(Str, pGlobalTXT_LocalizationStrings[612], 207);
+ sprintf(Str, pGlobalTXT_LocalizationStrings[612], 207);
MessageBoxA(nullptr, Str, "E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\LoadSave.cpp:857", 0);
Size = 5080748;
}
@@ -475,7 +450,7 @@
++v70;
}
while ( v70 <= 4 );
- if ( !v66 )
+ if ( !a2 )
{
sub_42FA22_mess_with_laying_item_list();
v9 = (int)malloc(0xF4240u);
@@ -657,7 +632,7 @@
free((void *)v9);
}
free(DstBuf);
- if ( v64 )
+ if ( a1 )
{
if ( !CopyFileA("data\\new.lod", "saves\\autosave.mm7", 0) )
{
@@ -669,13 +644,13 @@
}
}
pParty->vPosition.x = v52;
- pParty->vPosition.z = v51;
- pParty->vPosition.y = v62;
+ pParty->vPosition.y = v51;
+ pParty->vPosition.z = v62;
pParty->uFallStartY = v62;
pParty->sRotationY = v53;
result = v54;
pParty->sRotationX = v54;
- }
+
return result;
}
@@ -709,7 +684,7 @@
}
GUI_UpdateWindows();
pGUIWindow_CurrentMenu->Release();
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 0;
+ pCurrentScreen = 0;
v3 = pSavegameThumbnails;
viewparams->bRedrawGameUI = 1;
do
@@ -727,7 +702,7 @@
ShowStatusBarString(pGlobalTXT_LocalizationStrings[656], 2u);// "Game Saved!"
viewparams->bRedrawGameUI = 1;
}
-// 4E28F8: using guessed type int uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions;
+// 4E28F8: using guessed type int pCurrentScreen;
diff -r c83d06692295 -r c0cf9393af64 Texture.cpp
--- a/Texture.cpp Mon Oct 22 09:20:49 2012 +0600
+++ b/Texture.cpp Mon Oct 29 09:28:08 2012 +0600
@@ -55,7 +55,7 @@
Texture *ptr_506440;
Texture *pTexture_506444;
Texture *pTexture_506448; // idb
-Texture pTextures_tabs[8][2];
+Texture *pTextures_tabs[8][2];
Texture *pTexture_mapbordr; // idb
Texture *pTexture_pagemask; // idb
Texture *pTextures_5064A0[14];
@@ -70,7 +70,7 @@
RGBTexture stru_506E40; // weak
-RGBTexture stru_506F20;
+RGBTexture pTexture_PCX;
int uTextureID_RestUI_restb4; // weak
@@ -1114,317 +1114,194 @@
//----- (0040EAD8) --------------------------------------------------------
unsigned int RGBTexture::LoadFromFILE(FILE *pFile, unsigned int mode, unsigned int bCloseFile)
{
- RGBTexture *v4; // esi@1
- unsigned int result; // eax@2
- unsigned int v6; // ebx@3
- unsigned __int16 v7; // cx@5
- unsigned __int16 v8; // ax@5
- unsigned int v9; // eax@5
- char v10; // zf@5
- signed int v11; // ecx@14
- int v12; // ebx@19
- signed int v13; // ecx@19
- int v14; // ebx@52
- unsigned __int16 *v15; // edi@52
- __int16 v16; // ax@54
- unsigned __int16 *v17; // edi@59
- __int16 v18; // ax@61
- unsigned __int16 *v19; // edi@66
- unsigned __int16 v20; // ax@68
- int v21; // eax@73
- char DstBuf[60]; // [sp+Ch] [bp-90h]@3
- char pColorMap[48]; // [sp+48h] [bp-54h]@3
- PCXHeader1 pcxh1; // [sp+78h] [bp-24h]@3
- PCXHeader2 pcxh2; // [sp+88h] [bp-14h]@3
- int v26; // [sp+90h] [bp-Ch]@51
- int v27; // [sp+94h] [bp-8h]@54
- unsigned __int8 v28; // [sp+9Bh] [bp-1h]@54
+ signed int result; // eax@2
+ unsigned char test_byte; // edx@3
+ //unsigned int read_offset; // ebx@37
+ unsigned int row_position; // edi@40
+ unsigned char value; // cl@63
+ char count; // [sp+50h] [bp-Ch]@43
+ unsigned short current_line; // [sp+54h] [bp-8h]@38
+ unsigned short *dec_position;
+ unsigned short *temp_dec_position;
+ PCXHeader1 psx_head1;
+ PCXHeader2 psx_head2;
+ short int width, height;
+ BYTE color_map[48]; // Colormap for 16-color images
- v4 = this;
- if ( pFile )
- {
- fread(&pcxh1, 1u, 1u, pFile);
- fread(&pcxh1.version, 1u, 1u, pFile);
- fread(&pcxh1.encoding, 1u, 1u, pFile);
- fread(&pcxh1.bpp, 1u, 1u, pFile);
- v6 = 2;
- fread(&pcxh1.left, 2u, 1u, pFile);
- fread(&pcxh1.up, 2u, 1u, pFile);
- fread(&pcxh1.right, 2u, 1u, pFile);
- fread(&pcxh1.bottom, 2u, 1u, pFile);
- fread(&pcxh1.hres, 2u, 1u, pFile);
- fread(&pcxh1.vres, 2u, 1u, pFile);
- fread(pColorMap, 0x30u, 1u, pFile);
- fread(&pcxh2, 1u, 1u, pFile);
- fread(&pcxh2.planes, 1u, 1u, pFile);
- fread(&pcxh2.pitch, 2u, 1u, pFile);
- fread(&pcxh2.palette_info, 2u, 1u, pFile);
- fread(DstBuf, 58u, 1u, pFile);
- if ( pcxh1.bpp == 8 )
- {
- v7 = pcxh1.right - pcxh1.left + 1;
- v8 = pcxh1.bottom - pcxh1.up;
- v4->uWidth = v7;
- ++v8;
- v4->uHeight = v8;
- v9 = (signed __int16)v7 * (signed __int16)v8;
- v10 = mode == 0;
- v4->uNumPixels = v9;
- if ( v10 )
+ if (!pFile)
+ return 1;
+
+
+ fread(&psx_head1, 1, 16, pFile);
+ fread(&color_map, 1, 48, pFile);
+ fread(&psx_head2, 1, 6, pFile);
+
+ if (psx_head1.bpp!=8)
+ return 3;
+ uWidth=(short int )(psx_head1.right-psx_head1.left+1); // word @ 000014
+ uHeight=(short int )(psx_head1.bottom-psx_head1.up+1); // word @ 000016
+
+
+ uNumPixels=uWidth*uHeight; // dword @ 000010
+
+
+ if ( mode == 0 )
{
- if ( v4->pPixels )
+ if ( pPixels )
{
- pAllocator->FreeChunk(v4->pPixels);
- v4->pPixels = 0;
+ pAllocator->FreeChunk(pPixels);
+ pPixels = 0;
}
- v4->pPixels = (unsigned __int16 *)pAllocator->AllocNamedChunk(
- v4->pPixels,
- 2 * v4->uNumPixels + 4,
- v4->pName);
- v6 = 2;
+ pPixels = (unsigned __int16 *)pAllocator->AllocNamedChunk(
+ pPixels,
+ 2 * uNumPixels + 4,
+ pName);
}
else
{
if ( mode != 1 && mode == 2 )
{
- operator new(2 * v9 + 4);
- v4->pPixels = 0;
- *(unsigned int *)&v4->field_20 |= 1u;
+ pPixels = (unsigned __int16 *)malloc((uNumPixels + 2) * sizeof(unsigned __int16));
+ field_20 |= 1;
}
}
- if ( v4->pPixels )
+
+
+
+
+ auto pOutPixels = pPixels;
+
+ memset(pOutPixels, 0, uNumPixels * sizeof(__int16));
+
+ short i=1;
+ while ( (1<= 15)
+ break;
+ }
+ field_18=i;
+ short i_=1;
+ while ( (1<= 15)
+ break;
+ }
+ field_1A=i_;
+ switch (field_18)
+ {
+ case 2: field_1C = 3; break;
+ case 3: field_1C = 7; break;
+ case 4: field_1C = 15; break;
+ case 5: field_1C = 31; break;
+ case 6: field_1C = 63; break;
+ case 7: field_1C = 127; break;
+ case 8: field_1C = 255; break;
+ case 9: field_1C = 511; break;
+ case 10: field_1C = 1023; break;
+ case 11: field_1C = 2047; break;
+ case 12: field_1C = 4095; break;
+ }
+
+ switch (field_1A)
+ {
+ case 2: field_1E = 3; break;
+ case 3: field_1E = 7; break;
+ case 4: field_1E = 15; break;
+ case 5: field_1E = 31; break;
+ case 6: field_1E = 63; break;
+ case 7: field_1E = 127; break;
+ case 8: field_1E = 255; break;
+ case 9: field_1E = 511; break;
+ case 10: field_1E = 1023; break;
+ case 11: field_1E = 2047; break;
+ case 12: field_1E = 4095; break;
+ }
+
+
+ fseek(pFile, 128 - 70, SEEK_CUR);
+
+
+ for (uint y = 0; y < uHeight; ++y)
+ {
+ unsigned __int16 *pDst = pPixels + y * uWidth;
+
+ uint x = 0;
+ do
+ {
+ uint ctrl = 0;
+ fread(&ctrl, 1, 1, pFile);
+ if ((ctrl & 0xC0) == 0xC0)
{
- v11 = 1;
- while ( 1 << v11 != v4->uWidth )
- {
- ++v11;
- if ( v11 >= 15 )
- goto LABEL_19;
- }
- v4->field_18 = v11;
-LABEL_19:
- v12 = v4->uHeight;
- v13 = 1;
- while ( 1 << v13 != v12 )
- {
- ++v13;
- if ( v13 >= 15 )
- goto LABEL_24;
- }
- v4->field_1A = v13;
-LABEL_24:
- switch ( v4->field_18 )
- {
- case 2:
- v4->field_1C = 3;
- break;
- case 3:
- v4->field_1C = 7;
- break;
- case 4:
- v4->field_1C = 15;
- break;
- case 5:
- v4->field_1C = 31;
- break;
- case 6:
- v4->field_1C = 63;
- break;
- case 7:
- v4->field_1C = 127;
- break;
- case 8:
- v4->field_1C = 255;
- break;
- case 9:
- v4->field_1C = 511;
- break;
- case 10:
- v4->field_1C = 1023;
- break;
- case 11:
- v4->field_1C = 2047;
- break;
- case 12:
- v4->field_1C = 4095;
- break;
- default:
- break;
- }
- switch ( v4->field_1A )
- {
- case 2:
- v4->field_1E = 3;
- break;
- case 3:
- v4->field_1E = 7;
- break;
- case 4:
- v4->field_1E = 15;
- break;
- case 5:
- v4->field_1E = 31;
- break;
- case 6:
- v4->field_1E = 63;
- break;
- case 7:
- v4->field_1E = 127;
- break;
- case 8:
- v4->field_1E = 255;
- break;
- case 9:
- v4->field_1E = 511;
- break;
- case 10:
- v4->field_1E = 1023;
- break;
- case 11:
- v4->field_1E = 2047;
- break;
- case 12:
- v4->field_1E = 4095;
- break;
- default:
- break;
- }
- if ( pcxh2.planes == 1 )
- Abortf("24bit PCX Only!");
- if ( pcxh2.planes == 3 )
- {
- v26 = 0;
- if ( v12 > 0 )
- {
- do
- {
- v14 = 0;
- v15 = &v4->pPixels[v26 * v4->uWidth];
- if ( pcxh2.pitch )
- {
- do
- {
- fread((char *)&mode + 3, 1u, 1u, pFile);
- if ( (BYTE3(mode) & 0xC0) == -64 )
- {
- BYTE3(mode) &= 0x3Fu;
- fread(&v28, 1u, 1u, pFile);
- v27 = 0;
- v16 = v28;
- if ( BYTE3(mode) )
- {
- do
- {
- ++v14;
- *v15 = LOWORD(pRenderer->uTargetRMask) & (v16 << (pRenderer->uTargetGBits
- + pRenderer->uTargetRBits
- + pRenderer->uTargetBBits
- - 8));
- ++v15;
- ++v27;
- }
- while ( v27 < BYTE3(mode) );
- }
- }
- else
- {
- ++v14;
- *v15 = LOWORD(pRenderer->uTargetRMask) & (BYTE3(mode) << (pRenderer->uTargetGBits
- + pRenderer->uTargetRBits
- + pRenderer->uTargetBBits
- - 8));
- ++v15;
- }
- }
- while ( v14 < (unsigned __int16)pcxh2.pitch );
- }
- v17 = &v4->pPixels[v26 * v4->uWidth];
- while ( v14 < 2 * (unsigned __int16)pcxh2.pitch )
- {
- fread((char *)&mode + 3, 1u, 1u, pFile);
- if ( (BYTE3(mode) & 0xC0) == -64 )
- {
- BYTE3(mode) &= 0x3Fu;
- fread(&v28, 1u, 1u, pFile);
- v27 = 0;
- v18 = v28;
- if ( BYTE3(mode) )
- {
- do
- {
- *v17 |= pRenderer->uTargetGMask & (unsigned __int16)(v18 << (pRenderer->uTargetGBits
- + pRenderer->uTargetBBits
- - 8));
- ++v14;
- ++v17;
- ++v27;
- }
- while ( v27 < BYTE3(mode) );
- }
- }
- else
- {
- *v17 |= pRenderer->uTargetGMask & (unsigned __int16)(BYTE3(mode) << (pRenderer->uTargetGBits
- + pRenderer->uTargetBBits
- - 8));
- ++v14;
- ++v17;
- }
- }
- v19 = &v4->pPixels[v26 * v4->uWidth];
- while ( v14 < 3 * (unsigned __int16)pcxh2.pitch )
- {
- fread((char *)&mode + 3, 1u, 1u, pFile);
- if ( (BYTE3(mode) & 0xC0) == -64 )
- {
- BYTE3(mode) &= 0x3Fu;
- fread(&v28, 1u, 1u, pFile);
- v27 = 0;
- v20 = v28;
- if ( BYTE3(mode) )
- {
- do
- {
- *v19 |= v20 >> (8 - pRenderer->uTargetBBits);
- ++v14;
- ++v19;
- ++v27;
- }
- while ( v27 < BYTE3(mode) );
- }
- }
- else
- {
- *v19 |= BYTE3(mode) >> (8 - pRenderer->uTargetBBits);
- ++v14;
- ++v19;
- }
- }
- v21 = v4->uHeight;
- ++v26;
- }
- while ( v26 < v21 );
- }
- }
- if ( bCloseFile )
- fclose(pFile);
- result = 0;
+ uint uNumPixels = ctrl & 0x3F;
+ uint clr = 0;
+ fread(&clr, 1, 1, pFile);
+ for (uint i = 0; i < uNumPixels; ++i)
+ pDst[x++] = pRenderer->uTargetRMask & (clr << (pRenderer->uTargetGBits +
+ pRenderer->uTargetRBits +
+ pRenderer->uTargetBBits - 8));
}
else
{
- result = v6;
+ pDst[x++] = pRenderer->uTargetRMask & (ctrl << (pRenderer->uTargetGBits +
+ pRenderer->uTargetRBits +
+ pRenderer->uTargetBBits - 8));
}
- }
- else
+ } while (x < psx_head2.pitch);
+
+
+
+
+
+ x = 0;
+ do
{
- result = 3;
- }
+ uint ctrl = 0;
+ fread(&ctrl, 1, 1, pFile);
+ if ((ctrl & 0xC0) == 0xC0)
+ {
+ uint uNumPixels = ctrl & 0x3F;
+ uint clr = 0;
+ fread(&clr, 1, 1, pFile);
+ for (uint i = 0; i < uNumPixels; ++i)
+ pDst[x++] |= pRenderer->uTargetGMask & (clr << (pRenderer->uTargetGBits +
+ pRenderer->uTargetBBits - 8));
+ }
+ else
+ {
+ pDst[x++] |= pRenderer->uTargetGMask & (ctrl << (pRenderer->uTargetGBits +
+ pRenderer->uTargetBBits - 8));
+ }
+ } while (x < psx_head2.pitch);
+
+
+
+
+
+ x = 0;
+ do
+ {
+ uint ctrl = 0;
+ fread(&ctrl, 1, 1, pFile);
+ if ((ctrl & 0xC0) == 0xC0)
+ {
+ uint uNumPixels = ctrl & 0x3F;
+ uint clr = 0;
+ fread(&clr, 1, 1, pFile);
+ for (uint i = 0; i < uNumPixels; ++i)
+ pDst[x++] |= pRenderer->uTargetBMask & (clr >> (8 - pRenderer->uTargetBBits));
+ }
+ else
+ {
+ pDst[x++] |= pRenderer->uTargetBMask & (ctrl >> (8 - pRenderer->uTargetRBits));
+ }
+ } while (x < psx_head2.pitch);
}
- else
- {
- result = 1;
- }
- return result;
+
+ if (bCloseFile)
+ fclose(pFile);
+ return 0;
}
//----- (0040E51F) --------------------------------------------------------
diff -r c83d06692295 -r c0cf9393af64 Texture.h
--- a/Texture.h Mon Oct 22 09:20:49 2012 +0600
+++ b/Texture.h Mon Oct 29 09:28:08 2012 +0600
@@ -157,7 +157,7 @@
extern Texture *ptr_506440;
extern Texture *pTexture_506444;
extern Texture *pTexture_506448; // idb
-extern Texture pTextures_tabs[8][2];
+extern Texture *pTextures_tabs[8][2];
extern Texture *pTexture_mapbordr; // idb
extern Texture *pTexture_pagemask; // idb
extern Texture *pTextures_5064A0[14];
@@ -172,7 +172,7 @@
extern RGBTexture stru_506E40; // weak
-extern RGBTexture stru_506F20;
+extern RGBTexture pTexture_PCX;
extern int uTextureID_RestUI_restb4; // weak
diff -r c83d06692295 -r c0cf9393af64 TurnEngine.h
--- a/TurnEngine.h Mon Oct 22 09:20:49 2012 +0600
+++ b/TurnEngine.h Mon Oct 29 09:28:08 2012 +0600
@@ -18,7 +18,7 @@
struct stru262_TurnBased
{
signed int _404544();
- int _40471C();
+ void _40471C();
signed int Start();
void End(bool bPlaySound);
void _405E14();
diff -r c83d06692295 -r c0cf9393af64 VideoPlayer.cpp
--- a/VideoPlayer.cpp Mon Oct 22 09:20:49 2012 +0600
+++ b/VideoPlayer.cpp Mon Oct 29 09:28:08 2012 +0600
@@ -364,7 +364,7 @@
pRenderer->ClearTarget(0);
pRenderer->EndScene();
}
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 16;
+ pCurrentScreen = 16;
if ( pVideoPlayer->uMovieFormat == 2 )
{
if ( pVideoPlayer->pBinkMovie )
@@ -423,11 +423,11 @@
}
}
if ( a4 == 1 )
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 0;
+ pCurrentScreen = 0;
pVideoPlayer->bPlayingMovie = 0;
ShowCursor(1);
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 16 )
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 0;
+ if ( pCurrentScreen == 16 )
+ pCurrentScreen = 0;
}
}
@@ -919,7 +919,7 @@
SetFilePointer(hMightVid, pMightVideoHeaders[i].uFileOffset, 0, FILE_BEGIN);
if (uBinkVersion < 0x0003000000000000)
- return BinkOpen(hMightVid, 0x08800000);
+ return BinkOpen(hMightVid, 0x8800000);
else
return BinkOpen(hMightVid, 0x82000000);
}
@@ -930,7 +930,7 @@
SetFilePointer(hMagicVid, pMagicVideoHeaders[i].uFileOffset, 0, FILE_BEGIN);
if (uBinkVersion < 0x0003000000000000)
- return BinkOpen(hMagicVid, 0x08800000);
+ return BinkOpen(hMagicVid, 0x8800000);
else
return BinkOpen(hMagicVid, 0x82000000);
}
@@ -1192,10 +1192,10 @@
{
pAudioPlayer->PlaySound(SOUND_0, 0, 0, -1, 0, 0, 0, 0);
ptr_507BC0 = GUIWindow::Create(0, 0, 640, 480, WINDOW_HouseInterior, 165, 0);
- ptr_507BC0->CreateButton(0x3Du, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 1u, 0x31u, nullstring, 0);
- ptr_507BC0->CreateButton(0xB1u, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 2u, 0x32u, nullstring, 0);
- ptr_507BC0->CreateButton(0x124u, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 3u, 0x33u, nullstring, 0);
- ptr_507BC0->CreateButton(0x197u, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 4u, 0x34u, nullstring, 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);
}
bGameoverLoop = 0;
}
diff -r c83d06692295 -r c0cf9393af64 Vis.cpp
--- a/Vis.cpp Mon Oct 22 09:20:49 2012 +0600
+++ b/Vis.cpp Mon Oct 29 09:28:08 2012 +0600
@@ -93,7 +93,7 @@
}
}
pGame->pIndoorCameraD3D->ViewTransform(static_sub_4C1026_array_F8F200, v7);
- pGame->pIndoorCameraD3D->_436BB7_project_and_stuff(static_sub_4C1026_array_F8F200, v7, 1);
+ pGame->pIndoorCameraD3D->Project(static_sub_4C1026_array_F8F200, v7, 1);
v15 = this;
SortVectors_x(static_sub_4C1026_array_F8F200, 0, v7 - 1);
if ( static_sub_4C1026_array_F8F200[0].vWorldViewPosition.x > (double)a4
@@ -369,7 +369,7 @@
v7 = v6;
if ( is_part_of_selection(&pIndoor->pFaces[v6], a5) )
{
- if ( !pGame->pIndoorCameraD3D->IsFaceFacedTowardsCamera(&pIndoor->pFaces[v7]) )
+ if ( !pGame->pIndoorCameraD3D->IsCulled(&pIndoor->pFaces[v7]) )
{
if ( Intersect_Ray_Face(pRay, pRay + 1, &fDepth, &a1, &pIndoor->pFaces[v7], 0xFFFFFFFFu) )
{
@@ -1419,6 +1419,8 @@
Vis *thisa; // [sp+68h] [bp-8h]@1
RenderVertexSoft *v16; // [sp+6Ch] [bp-4h]@2
+ __debugbreak();
+
result = sRight;
thisa = this;
if ( sRight > sLeft )
@@ -1600,20 +1602,17 @@
//----- (004C0646) --------------------------------------------------------
bool Vis::PickMouse(float fDepth, float fMouseX, float fMouseY, stru157 *a5, stru157 *a6)
{
- Vis *v6; // esi@1
- bool result; // eax@4
RenderVertexSoft pMouseRay[2]; // [sp+1Ch] [bp-60h]@1
- v6 = this;
- this->stru1.uNumPointers = 0;
+ stru1.uNumPointers = 0;
CastPickRay(pMouseRay, fMouseX, fMouseY, fDepth);
- PickBillboards(fDepth, fMouseX, fMouseY, &v6->stru1, a5);
+ PickBillboards(fDepth, fMouseX, fMouseY, &stru1, a5);
if (uCurrentlyLoadedLevelType == LEVEL_Indoor)
- PickIndoor(fDepth, pMouseRay, &v6->stru1, a6);
+ PickIndoor(fDepth, pMouseRay, &stru1, a6);
else
- PickOutdoor(fDepth, pMouseRay, &v6->stru1, a6, 0);
- v6->stru1.create_object_pointers(0);
- sort_object_pointers(v6->stru1.array_1804, 0, v6->stru1.uNumPointers - 1);
+ PickOutdoor(fDepth, pMouseRay, &stru1, a6, 0);
+ stru1.create_object_pointers(0);
+ sort_object_pointers(stru1.array_1804, 0, stru1.uNumPointers - 1);
return true;
}
@@ -2000,7 +1999,7 @@
if ( v5 < (signed int)pIndoor->uNumFaces )
{
v6 = &pIndoor->pFaces[v5];
- if ( !pGame->pIndoorCameraD3D->IsFaceFacedTowardsCamera(&pIndoor->pFaces[v5]) )
+ if ( !pGame->pIndoorCameraD3D->IsCulled(&pIndoor->pFaces[v5]) )
{
if ( is_part_of_selection(v6, a2) )
{
diff -r c83d06692295 -r c0cf9393af64 Weather.cpp
--- a/Weather.cpp Mon Oct 22 09:20:49 2012 +0600
+++ b/Weather.cpp Mon Oct 29 09:28:08 2012 +0600
@@ -9,7 +9,7 @@
-struct Weather *pWeather;
+struct Weather *pWeather = new Weather;
diff -r c83d06692295 -r c0cf9393af64 mm7_1.cpp
--- a/mm7_1.cpp Mon Oct 22 09:20:49 2012 +0600
+++ b/mm7_1.cpp Mon Oct 29 09:28:08 2012 +0600
@@ -203,7 +203,7 @@
v1 = uPlayerID;
a5 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0x9Bu);
v84 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0, 0xAFu, 0xFFu);
- v85 = pGUIWindow_CurrentMenu->field_2C_focus_id;
+ v85 = pGUIWindow_CurrentMenu->pCurrentPosActiveItem;
v86 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0, 0);
v79 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0, 0xFFu, 0);
pPlayer = (Player *)&stru_AA1058[3].pSounds[6972 * v1 + 40552];
@@ -212,7 +212,7 @@
v4 = v79;
if ( !pPlayer->uSkillPoints )
v4 = 65535;
- sprintfex(
+ sprintf(
pTmpBuf,
"%s ",
pGlobalTXT_LocalizationStrings[206], // Skills for
@@ -223,7 +223,7 @@
pPlayer->uSkillPoints);
pGUIWindow_CurrentMenu->DrawText(pFontArrus, 24, 18, 0, pTmpBuf, 0, 0, 0);
v5 = 2 * LOBYTE(pFontLucida->uFontHeight) + 13;// Weapons, Level
- sprintfex(pTmpBuf, "%s\r400%s", pGlobalTXT_LocalizationStrings[242], pGlobalTXT_LocalizationStrings[131]);
+ sprintf(pTmpBuf, "%s\r400%s", pGlobalTXT_LocalizationStrings[242], pGlobalTXT_LocalizationStrings[131]);
pGUIWindow_CurrentMenu->DrawText(pFontArrus, 24, v5, a5, pTmpBuf, 0, 0, 0);
v6 = pGUIWindow_CurrentMenu;
v70 = 0;
@@ -285,7 +285,7 @@
{
if ( !(v87 & 0xC0) )
{
- sprintfex(pTmpBuf, "%s\r400%2d", pSkillNames[v62], uY);
+ sprintf(pTmpBuf, "%s\r400%2d", pSkillNames[v62], uY);
goto LABEL_28;
}
v16 = pGlobalTXT_LocalizationStrings[432];
@@ -298,7 +298,7 @@
v50 = v58;
v46 = v88;
}
- sprintfex(pTmpBuf, "%s ", pSkillNames[v62], v15, v46, v50, v54);
+ sprintf(pTmpBuf, "%s ", pSkillNames[v62], v15, v46, v50, v54);
LABEL_28:
pGUIWindow_CurrentMenu->DrawText(pFontLucida, 24, v5, v58, pTmpBuf, 0, 0, 0);
v6 = pGUIWindow_CurrentMenu;
@@ -312,7 +312,7 @@
v6->DrawText(pFontLucida, 24, v5, 0, pGlobalTXT_LocalizationStrings[153], 0, 0, 0);
}
uYa = v5 + 2 * LOBYTE(pFontLucida->uFontHeight) - 10;
- sprintfex(pTmpBuf, "%s\r400%s", pGlobalTXT_LocalizationStrings[138], pGlobalTXT_LocalizationStrings[131]);
+ sprintf(pTmpBuf, "%s\r400%s", pGlobalTXT_LocalizationStrings[138], pGlobalTXT_LocalizationStrings[131]);
pGUIWindow_CurrentMenu->DrawText(pFontArrus, 24, uYa, a5, pTmpBuf, 0, 0, 0);
v17 = pGUIWindow_CurrentMenu;
v71 = 0;
@@ -370,7 +370,7 @@
{
if ( !(v21 & 0xC0) )
{
- sprintfex(pTmpBuf, "%s\r400%2d", pSkillNames[v63], v23);
+ sprintf(pTmpBuf, "%s\r400%2d", pSkillNames[v63], v23);
goto LABEL_58;
}
v25 = (v21 & 0x80u) != 0;
@@ -384,7 +384,7 @@
v51 = v59;
v47 = v89;
}
- sprintfex(pTmpBuf, "%s ", pSkillNames[v63], v24, v47, v51, v55);
+ sprintf(pTmpBuf, "%s ", pSkillNames[v63], v24, v47, v51, v55);
LABEL_58:
pGUIWindow_CurrentMenu->DrawText(pFontLucida, 24, uYa, v59, pTmpBuf, 0, 0, 0);
v17 = pGUIWindow_CurrentMenu;
@@ -405,7 +405,7 @@
0,
0);
v27 = 2 * LOBYTE(pFontLucida->uFontHeight) + 13;
- sprintfex(pTmpBuf, "%s\r177%s", pGlobalTXT_LocalizationStrings[11], pGlobalTXT_LocalizationStrings[131]);
+ sprintf(pTmpBuf, "%s\r177%s", pGlobalTXT_LocalizationStrings[11], pGlobalTXT_LocalizationStrings[131]);
pGUIWindow_CurrentMenu->DrawText(pFontArrus, 248, v27, a5, pTmpBuf, 0, 0, 0);
v28 = pGUIWindow_CurrentMenu;
v72 = 0;
@@ -464,7 +464,7 @@
{
if ( !(v90 & 0xC0) )
{
- sprintfex(pTmpBuf, "%s\r177%2d", pSkillNames[v64], uYb);
+ sprintf(pTmpBuf, "%s\r177%2d", pSkillNames[v64], uYb);
goto LABEL_88;
}
v35 = pGlobalTXT_LocalizationStrings[432];
@@ -477,7 +477,7 @@
v52 = v60;
v48 = v91;
}
- sprintfex(pTmpBuf, "%s ", pSkillNames[v64], v34, v48, v52, v56);
+ sprintf(pTmpBuf, "%s ", pSkillNames[v64], v34, v48, v52, v56);
LABEL_88:
pGUIWindow_CurrentMenu->DrawText(pFontLucida, 248, v27, v60, pTmpBuf, 0, 0, 0);
v28 = pGUIWindow_CurrentMenu;
@@ -493,7 +493,7 @@
v28->DrawText(pFontLucida, 248, v27, 0, pGlobalTXT_LocalizationStrings[153], 0, 0, 0);
}
uYc = v27 + 2 * LOBYTE(pFontLucida->uFontHeight) - 10;
- sprintfex(pTmpBuf, "%s\r177%s", pGlobalTXT_LocalizationStrings[143], pGlobalTXT_LocalizationStrings[131]);
+ sprintf(pTmpBuf, "%s\r177%s", pGlobalTXT_LocalizationStrings[143], pGlobalTXT_LocalizationStrings[131]);
pGUIWindow_CurrentMenu->DrawText(pFontArrus, 248, uYc, a5, pTmpBuf, 0, 0, 0);
v36 = pGUIWindow_CurrentMenu;
v73 = 0;
@@ -552,7 +552,7 @@
{
if ( !(v40 & 0xC0) )
{
- sprintfex(pTmpBuf, "%s\r177%2d", pSkillNames[v65], v42);
+ sprintf(pTmpBuf, "%s\r177%2d", pSkillNames[v65], v42);
goto LABEL_118;
}
v25 = (v40 & 0x80u) != 0;
@@ -566,7 +566,7 @@
v53 = v61;
v49 = v92;
}
- sprintfex(pTmpBuf, "%s ", pSkillNames[v65], v43, v49, v53, v57);
+ sprintf(pTmpBuf, "%s ", pSkillNames[v65], v43, v49, v53, v57);
LABEL_118:
LOBYTE(v38) = pGUIWindow_CurrentMenu->DrawText(pFontLucida, 248, uYc, v61, pTmpBuf, 0, 0, 0);
v36 = pGUIWindow_CurrentMenu;
@@ -619,14 +619,14 @@
v2 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0x9Bu);
v3 = pIcons_LOD->LoadTexture("fr_award", TEXTURE_16BIT_PALETTE);
pRenderer->DrawTextureIndexed(8u, 8u, (Texture *)(v3 != -1 ? (int)&pIcons_LOD->pTextures[v3] : 0));
- sprintfex(pTmpBuf, "%s ", pGlobalTXT_LocalizationStrings[23], v2);// TODO check args
- sprintfex(
+ sprintf(pTmpBuf, "%s ", pGlobalTXT_LocalizationStrings[23], v2);// TODO check args
+ sprintf(
Source,
pGlobalTXT_LocalizationStrings[429],
&stru_AA1058[3].pSounds[6972 * v1 + 40720],
pClassNames[stru_AA1058[3].pSounds[6972 * v1 + 40737]]);
strcat(pTmpBuf, Source);
- strcat(pTmpBuf, byte_4E2FD4);
+ strcat(pTmpBuf, "\xC" "00000");
pGUIWindow_CurrentMenu->DrawText(pFontArrus, 24, 18, 0, pTmpBuf, 0, 0, 0);
result = dword_506528;
a1.uFrameX = 12;
@@ -680,7 +680,7 @@
break;
v17 = pParty->uFine;
LABEL_42:
- sprintfex(pTmpBuf, v6, v17);
+ sprintf(pTmpBuf, v6, v17);
v6 = pTmpBuf;
LABEL_43:
v14 = dword_723E84[v20 / 4];
@@ -871,7 +871,7 @@
if ( !(v16 & 0xF0) )
{
if ( v16 & 1
- || uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions != 13 )
+ || pCurrentScreen != 13 )
{
if ( v16 & 2 )
pRenderer->_4A6776(a2a, a3, v7);
@@ -926,7 +926,7 @@
}
while ( v27 < 126 );
}
-// 4E28F8: using guessed type int uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions;
+// 4E28F8: using guessed type int pCurrentScreen;
// 507958: using guessed type int uTextureID_507958;
// 50C9A8: using guessed type int dword_50C9A8;
@@ -1024,7 +1024,7 @@
60,
v0);
v3 = pPlayer->GetActualLevel();
- sprintfex(pTmpBuf, "%lu", v3);
+ sprintf(pTmpBuf, "%lu", v3);
v4 = pPlayer->GetBaseLevel();
if ( pPlayer->GetActualLevel() <= v4 )
v5 = pPlayer->GetExperienceDisplayColor();
@@ -1052,9 +1052,9 @@
pGlobalTXT_LocalizationStrings[107],
60,
v0);
- sprintfex(pTmpBuf, "%d", pPlayer->sHealth);
+ sprintf(pTmpBuf, "%d", pPlayer->sHealth);
v8 = pPlayer->GetMaxHealth();
- v9 = sub_4178FE(pPlayer->sHealth, v8);
+ v9 = UI_GetHealthManaStringColor(pPlayer->sHealth, v8);
pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, v7, v9, pTmpBuf, 84, v0);
v10 = v45 + v7;
if ( v43 == v0 )
@@ -1066,9 +1066,9 @@
pGlobalTXT_LocalizationStrings[209],
60,
v0);
- sprintfex(pTmpBuf, "%d", pPlayer->sMana);
+ sprintf(pTmpBuf, "%d", pPlayer->sMana);
v11 = pPlayer->GetMaxMana();
- v12 = sub_4178FE(pPlayer->sMana, v11);
+ v12 = UI_GetHealthManaStringColor(pPlayer->sMana, v11);
pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, v10, v12, pTmpBuf, 84, v0);
v13 = v45 + v10;
if ( v43 == v0 )
@@ -1081,11 +1081,11 @@
60,
v0);
v14 = pPlayer->GetActualAC();
- sprintfex(pTmpBuf, "%d", v14);
+ sprintf(pTmpBuf, "%d", v14);
v15 = v0;
v16 = pPlayer->GetBaseAC();
v17 = pPlayer->GetActualAC();
- v18 = sub_4178FE(v17, v16);
+ v18 = UI_GetHealthManaStringColor(v17, v16);
pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, v13, v18, pTmpBuf, 84, v15);
v0 = 0;
v19 = v45 + v13;
@@ -1099,7 +1099,7 @@
60,
0);
v20 = pPlayer->GetActualAttack(0);
- sprintfex(pTmpBuf, "%+d", v20);
+ sprintf(pTmpBuf, "%+d", v20);
pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, v19, 0, pTmpBuf, 84, 0);
v21 = v45 + v19;
if ( !v43 )
@@ -1124,7 +1124,7 @@
60,
0);
v24 = pPlayer->GetRangedAttack();
- sprintfex(pTmpBuf, "%+d", v24);
+ sprintf(pTmpBuf, "%+d", v24);
pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, v23, 0, pTmpBuf, 84, 0);
v25 = v45 + v23;
if ( !v43 )
@@ -1159,7 +1159,7 @@
--v30;
}
while ( v30 );
- sprintfex(pTmpBuf, "%lu", v28);
+ sprintf(pTmpBuf, "%lu", v28);
pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, v44, v27, 0, pTmpBuf, 84, 0);
v31 = v45 + v27;
if ( !v43 )
@@ -1171,7 +1171,7 @@
pGlobalTXT_LocalizationStrings[168],
60,
0);
- sprintfex(pTmpBuf, "%lu", pPlayer->uSkillPoints);
+ sprintf(pTmpBuf, "%lu", pPlayer->uSkillPoints);
pGUIWindow_CurrentMenu->DrawTextInRect(
pFontArrus,
v44,
@@ -1225,10 +1225,10 @@
v39 = v46;
}
v40 = GetReputationString(v38);
- sprintfex(pTmpBuf, "%s: ", pGlobalTXT_LocalizationStrings[180], v39, v40);
+ sprintf(pTmpBuf, "%s: ", pGlobalTXT_LocalizationStrings[180], v39, v40);
pGUIWindow_CurrentMenu->DrawText(pFontArrus, 22, 323, 0, pTmpBuf, 0, 0, 0);
v41 = pParty->GetPartyFame();
- sprintfex(pTmpBuf, "\r261%s: %d", pGlobalTXT_LocalizationStrings[84], v41);// Fame
+ sprintf(pTmpBuf, "\r261%s: %d", pGlobalTXT_LocalizationStrings[84], v41);// Fame
return pGUIWindow_CurrentMenu->DrawText(pFontArrus, 0, 323, 0, pTmpBuf, 0, 0, 0);
}
@@ -1314,7 +1314,7 @@
qword_507CC8 = pParty->uTimePlayed;
byte_50697C = byte_50697C == 0;
if ( byte_50697C
- && uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions != 5 )
+ && pCurrentScreen != 5 )
{
if ( bFlashQuestBook )
pRenderer->DrawTextureTransparent(
@@ -1352,9 +1352,9 @@
v0 = uGameUIFontMain;
v1 = uGameUIFontShadow;
v2 = sub_44100D() != 0 ? 381 : 322;
- sprintfex(pTmpBuf, "\r087%lu", pParty->uNumFoodRations);
+ sprintf(pTmpBuf, "\r087%lu", pParty->uNumFoodRations);
pGUIWindow0->DrawText(pFontSmallnum, 0, v2, v0, pTmpBuf, 0, 0, v1);
- sprintfex(pTmpBuf, "\r028%lu", pParty->uNumGold);
+ sprintf(pTmpBuf, "\r028%lu", pParty->uNumGold);
pGUIWindow0->DrawText(pFontSmallnum, 0, v2, v0, pTmpBuf, 0, 0, v1);
}
}
@@ -1758,19 +1758,19 @@
uTextureID_BUTTMAKE2 = pIcons_LOD->LoadTexture("BUTTMAKE2", TEXTURE_16BIT_PALETTE);
pGUIWindow0 = GUIWindow::Create(0, 0, 640, 480, WINDOW_MainMenu, 0, 0);
- pGUIWindow0->CreateButton(7u, 8u, 0x1CCu, 0x157u, 1, 0, 0xAu, 0, 0, nullstring, 0);
- pGUIWindow0->CreateButton(0x3Du, 0x1A8u, 0x1Fu, 0x28u, 2, 94, 0x6Eu, 1u, 0x31u, nullstring, 0);
- pGUIWindow0->CreateButton(0xB1u, 0x1A8u, 0x1Fu, 0x28u, 2, 94, 0x6Eu, 2u, 0x32u, nullstring, 0);
- pGUIWindow0->CreateButton(0x124u, 0x1A8u, 0x1Fu, 0x28u, 2, 94, 0x6Eu, 3u, 0x33u, nullstring, 0);
- pGUIWindow0->CreateButton(0x197u, 0x1A8u, 0x1Fu, 0x28u, 2, 94, 0x6Eu, 4u, 0x34u, nullstring, 0);
- pGUIWindow0->CreateButton(0x18u, 0x194u, 5u, 0x31u, 1, 93, 0, 1u, 0, nullstring, 0);
- pGUIWindow0->CreateButton(0x8Bu, 0x194u, 5u, 0x31u, 1, 93, 0, 2u, 0, nullstring, 0);
- pGUIWindow0->CreateButton(0xFFu, 0x194u, 5u, 0x31u, 1, 93, 0, 3u, 0, nullstring, 0);
- pGUIWindow0->CreateButton(0x172u, 0x194u, 5u, 0x31u, 1, 93, 0, 4u, 0, nullstring, 0);
- pGUIWindow0->CreateButton(0x61u, 0x194u, 5u, 0x31u, 1, 93, 0, 1u, 0, nullstring, 0);
- pGUIWindow0->CreateButton(0xD4u, 0x194u, 5u, 0x31u, 1, 93, 0, 2u, 0, nullstring, 0);
- pGUIWindow0->CreateButton(0x148u, 0x194u, 5u, 0x31u, 1, 93, 0, 3u, 0, nullstring, 0);
- pGUIWindow0->CreateButton(0x1BBu, 0x194u, 5u, 0x31u, 1, 93, 0, 4u, 0, nullstring, 0);
+ pGUIWindow0->CreateButton(7u, 8u, 0x1CCu, 0x157u, 1, 0, 0xAu, 0, 0, "", 0);
+ pGUIWindow0->CreateButton(0x3Du, 0x1A8u, 0x1Fu, 0x28u, 2, 94, 0x6Eu, 1u, 0x31u, "", 0);
+ pGUIWindow0->CreateButton(0xB1u, 0x1A8u, 0x1Fu, 0x28u, 2, 94, 0x6Eu, 2u, 0x32u, "", 0);
+ pGUIWindow0->CreateButton(0x124u, 0x1A8u, 0x1Fu, 0x28u, 2, 94, 0x6Eu, 3u, 0x33u, "", 0);
+ pGUIWindow0->CreateButton(0x197u, 0x1A8u, 0x1Fu, 0x28u, 2, 94, 0x6Eu, 4u, 0x34u, "", 0);
+ pGUIWindow0->CreateButton(0x18u, 0x194u, 5u, 0x31u, 1, 93, 0, 1u, 0, "", 0);
+ pGUIWindow0->CreateButton(0x8Bu, 0x194u, 5u, 0x31u, 1, 93, 0, 2u, 0, "", 0);
+ pGUIWindow0->CreateButton(0xFFu, 0x194u, 5u, 0x31u, 1, 93, 0, 3u, 0, "", 0);
+ pGUIWindow0->CreateButton(0x172u, 0x194u, 5u, 0x31u, 1, 93, 0, 4u, 0, "", 0);
+ pGUIWindow0->CreateButton(0x61u, 0x194u, 5u, 0x31u, 1, 93, 0, 1u, 0, "", 0);
+ pGUIWindow0->CreateButton(0xD4u, 0x194u, 5u, 0x31u, 1, 93, 0, 2u, 0, "", 0);
+ pGUIWindow0->CreateButton(0x148u, 0x194u, 5u, 0x31u, 1, 93, 0, 3u, 0, "", 0);
+ pGUIWindow0->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];
@@ -1888,11 +1888,11 @@
v32,
v31,
0);
- pGUIWindow0->CreateButton(0x1E1u, 0, 0x99u, 0x43u, 1, 92, 0, 0, 0, nullstring, 0);
- pGUIWindow0->CreateButton(0x1EBu, 0x95u, 0x40u, 0x4Au, 1, 0, 0x86u, 0, 0x35u, nullstring, 0);
- pGUIWindow0->CreateButton(0x231u, 0x95u, 0x40u, 0x4Au, 1, 0, 0x87u, 0, 0x36u, nullstring, 0);
- pGUIWindow0->CreateButton(0x1DCu, 0x142u, 0x4Du, 0x11u, 1, 100, 0, 0, 0, nullstring, 0);
- pGUIWindow0->CreateButton(0x22Bu, 0x142u, 0x4Du, 0x11u, 1, 101, 0, 0, 0, nullstring, 0);
+ pGUIWindow0->CreateButton(0x1E1u, 0, 0x99u, 0x43u, 1, 92, 0, 0, 0, "", 0);
+ pGUIWindow0->CreateButton(0x1EBu, 0x95u, 0x40u, 0x4Au, 1, 0, 0x86u, 0, 0x35u, "", 0);
+ pGUIWindow0->CreateButton(0x231u, 0x95u, 0x40u, 0x4Au, 1, 0, 0x87u, 0, 0x36u, "", 0);
+ pGUIWindow0->CreateButton(0x1DCu, 0x142u, 0x4Du, 0x11u, 1, 100, 0, 0, 0, "", 0);
+ pGUIWindow0->CreateButton(0x22Bu, 0x142u, 0x4Du, 0x11u, 1, 101, 0, 0, 0, "", 0);
ptr_5079F8 = pGUIWindow0->CreateButton(
0x1DCu,
0x1C2u,
@@ -1955,7 +1955,7 @@
0xBCu,
0,
0,
- nullstring,
+ "",
(Texture *)(uTextureID_507990 != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_507990] : 0),
0);
ptr_5079E8 = pGUIWindow0->CreateButton(
@@ -1968,7 +1968,7 @@
0xBCu,
1u,
0,
- nullstring,
+ "",
(Texture *)(uTextureID_50798C != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_50798C] : 0),
0);
Load_isn_spells_21_27();
@@ -2143,9 +2143,9 @@
if ( pWindowList[v3].field_30 != v1 )
{
pMouse->GetClickPos(&uClickX, &uClickY);
- v4 = pWindowList[v3].field_38;
- v29 = v4 + pWindowList[v3].field_28;
- if ( v4 < v4 + pWindowList[v3].field_28 )
+ v4 = pWindowList[v3].pStartingPosActiveItem;
+ v29 = v4 + pWindowList[v3].pNumPresenceButton;
+ if ( v4 < v4 + pWindowList[v3].pNumPresenceButton )
{
while ( 1 )
{
@@ -2184,10 +2184,10 @@
if ( v26 == 37 )
{
v12 = pWindowList[v3].field_34;
- if ( pWindowList[v3].field_2C_focus_id - pWindowList[v3].field_38 - v12 >= 0 )
- {
- v8 = uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 21;
- pWindowList[v3].field_2C_focus_id -= v12;
+ if ( pWindowList[v3].pCurrentPosActiveItem - pWindowList[v3].pStartingPosActiveItem - v12 >= 0 )
+ {
+ v8 = pCurrentScreen == 21;
+ pWindowList[v3].pCurrentPosActiveItem -= v12;
if ( v8 )
{
pAudioPlayer->PlaySound((SoundID)66, v1, v1, -1, v1, v1, v1, v1);
@@ -2197,7 +2197,7 @@
if ( pWindowList[v3].field_30 != v1 )
goto LABEL_47;
v9 = pWindowList[v3].pControlsHead;
- v13 = pWindowList[v3].field_2C_focus_id;
+ v13 = pWindowList[v3].pCurrentPosActiveItem;
if ( v13 > (signed int)v1 )
{
do
@@ -2223,11 +2223,11 @@
{
if ( v26 == 39 )
{
- v7 = pWindowList[v3].field_2C_focus_id + pWindowList[v3].field_34;
- if ( v7 < pWindowList[v3].field_28 + pWindowList[v3].field_38 )
- {
- v8 = uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 21;
- pWindowList[v3].field_2C_focus_id = v7;
+ v7 = pWindowList[v3].pCurrentPosActiveItem + pWindowList[v3].field_34;
+ if ( v7 < pWindowList[v3].pNumPresenceButton + pWindowList[v3].pStartingPosActiveItem )
+ {
+ v8 = pCurrentScreen == 21;
+ pWindowList[v3].pCurrentPosActiveItem = v7;
if ( v8 )
{
pAudioPlayer->PlaySound((SoundID)66, v1, v1, -1, v1, v1, v1, v1);
@@ -2237,7 +2237,7 @@
if ( pWindowList[v3].field_30 != v1 )
goto LABEL_47;
v9 = pWindowList[v3].pControlsHead;
- v10 = pWindowList[v3].field_2C_focus_id;
+ v10 = pWindowList[v3].pCurrentPosActiveItem;
if ( v10 > (signed int)v1 )
{
do
@@ -2251,16 +2251,16 @@
}
if ( v26 == 40 )
{
- v17 = pWindowList[v3].field_38;
- v18 = pWindowList[v3].field_2C_focus_id;
- if ( v18 >= pWindowList[v3].field_28 + v17 - 1 )
- pWindowList[v3].field_2C_focus_id = v17;
+ v17 = pWindowList[v3].pStartingPosActiveItem;
+ v18 = pWindowList[v3].pCurrentPosActiveItem;
+ if ( v18 >= pWindowList[v3].pNumPresenceButton + v17 - 1 )
+ pWindowList[v3].pCurrentPosActiveItem = v17;
else
- pWindowList[v3].field_2C_focus_id = v18 + 1;
+ pWindowList[v3].pCurrentPosActiveItem = v18 + 1;
if ( pWindowList[v3].field_30 != v1 )
return 1;
v19 = pWindowList[v3].pControlsHead;
- v20 = pWindowList[v3].field_2C_focus_id;
+ v20 = pWindowList[v3].pCurrentPosActiveItem;
if ( v20 > (signed int)v1 )
{
do
@@ -2275,9 +2275,9 @@
if ( v26 == 41 )
{
pMouse->GetClickPos(&uClickX, &uClickY);
- v4 = pWindowList[v3].field_38;
- v28 = v4 + pWindowList[v3].field_28;
- if ( v4 < v4 + pWindowList[v3].field_28 )
+ v4 = pWindowList[v3].pStartingPosActiveItem;
+ v28 = v4 + pWindowList[v3].pNumPresenceButton;
+ if ( v4 < v4 + pWindowList[v3].pNumPresenceButton )
{
while ( 1 )
{
@@ -2302,7 +2302,7 @@
goto LABEL_45;
}
LABEL_66:
- pWindowList[v3].field_2C_focus_id = v4;
+ pWindowList[v3].pCurrentPosActiveItem = v4;
return 1;
}
LABEL_46:
@@ -2311,18 +2311,18 @@
}
goto LABEL_47;
}
- v22 = pWindowList[v3].field_2C_focus_id;
- v23 = pWindowList[v3].field_38;
+ v22 = pWindowList[v3].pCurrentPosActiveItem;
+ v23 = pWindowList[v3].pStartingPosActiveItem;
if ( v22 <= v23 )
- v24 = pWindowList[v3].field_28 + v23 - 1;
+ v24 = pWindowList[v3].pNumPresenceButton + v23 - 1;
else
v24 = v22 - 1;
v8 = pWindowList[v3].field_30 == v1;
- pWindowList[v3].field_2C_focus_id = v24;
+ pWindowList[v3].pCurrentPosActiveItem = v24;
if ( !v8 )
return 1;
v19 = pWindowList[v3].pControlsHead;
- v25 = pWindowList[v3].field_2C_focus_id;
+ v25 = pWindowList[v3].pCurrentPosActiveItem;
if ( v25 > (signed int)v1 )
{
do
@@ -2380,7 +2380,7 @@
v10 = pGlobalTXT_LocalizationStrings[57]; // Days
if ( v19 <= 1 )
v10 = pGlobalTXT_LocalizationStrings[56]; // Day
- sprintfex(pTmpBuf2, "%d %s ", v19, v10);
+ sprintf(pTmpBuf2, "%d %s ", v19, v10);
strcat(pTmpBuf, pTmpBuf2);
}
if ( v9 )
@@ -2389,7 +2389,7 @@
v11 = pGlobalTXT_LocalizationStrings[109];// Hour
else
v11 = pGlobalTXT_LocalizationStrings[110];// Hours
- sprintfex(pTmpBuf2, "%d %s ", v9, v11);
+ sprintf(pTmpBuf2, "%d %s ", v9, v11);
strcat(pTmpBuf, pTmpBuf2);
}
if ( v17 && !v19 )
@@ -2398,7 +2398,7 @@
v12 = pGlobalTXT_LocalizationStrings[437];// Minute
else
v12 = pGlobalTXT_LocalizationStrings[436];// Minutes
- sprintfex(pTmpBuf2, "%d %s ", v17, v12);
+ sprintf(pTmpBuf2, "%d %s ", v17, v12);
strcat(pTmpBuf, pTmpBuf2);
}
if ( v18 && !v9 )
@@ -2407,7 +2407,7 @@
v13 = pGlobalTXT_LocalizationStrings[439];// Second
else
v13 = pGlobalTXT_LocalizationStrings[438];// Seconds
- sprintfex(pTmpBuf2, "%d %s ", v18, v13);
+ sprintf(pTmpBuf2, "%d %s ", v18, v13);
strcat(pTmpBuf, pTmpBuf2);
}
return a1->DrawText(a2, 32, uY, 0, pTmpBuf, 0, 0, 0);
@@ -2509,7 +2509,7 @@
v82 = pFontComic;
if ( v1->uItemID )
{
- v79.str_48 = 0;
+ v79.Hint = 0;
v79.uFrameWidth = 384;
v79.uFrameHeight = 180;
v79.uFrameY = 40;
@@ -2594,7 +2594,7 @@
a2.y = _this->uAttributes & 1;
if ( v13 & 2 )
{
- v79._415551(0);
+ v79.DrawMessageBox(0);
//v15 = &;
pRenderer->Clip(
v79.uFrameX + 12,
@@ -2621,7 +2621,7 @@
}
if ( !v14 )
{
- v79._415551(0);
+ v79.DrawMessageBox(0);
v15 = pRenderer;
pRenderer->Clip(
v79.uFrameX + 12,
@@ -2646,9 +2646,9 @@
v79.DrawText2(pFontArrus, 0x64u, ((signed int)v79.uFrameHeight >> 1) - v18, v19, v52, v57);
goto LABEL_116;
}
- sprintfex(a1, pGlobalTXT_LocalizationStrings[463], *((int *)v3 + 2));
- strcpy(Dest, nullstring);
- strcpy(v64, nullstring);
+ sprintf(a1, pGlobalTXT_LocalizationStrings[463], *((int *)v3 + 2));
+ strcpy(Dest, "");
+ strcpy(v64, "");
v20 = v3[28];
if ( (unsigned __int8)v20 <= 1u )
{
@@ -2668,7 +2668,7 @@
{
v21 = v3[30];
if ( v21 )
- sprintfex(
+ sprintf(
Dest,
"%s: +%d",
pGlobalTXT_LocalizationStrings[11],
@@ -2683,11 +2683,11 @@
v45 = (unsigned __int8)v3[32];
v43 = pGlobalTXT_LocalizationStrings[203];
}
- sprintfex(Dest, "%s: +%d %s: %dd%d", v43, v45, v48, v53, v58);
+ sprintf(Dest, "%s: +%d %s: %dd%d", v43, v45, v48, v53, v58);
v22 = v3[32];
if ( v22 )
{
- sprintfex(Source, " +%d", (unsigned __int8)v22);
+ sprintf(Source, " +%d", (unsigned __int8)v22);
strcat(Dest, Source);
}
LABEL_50:
@@ -2742,7 +2742,7 @@
v79.uFrameHeight += (unsigned int)v83;
v79.uFrameW = v79.uFrameY + v79.uFrameHeight - 1;
v79.uFrameZ = v79.uFrameX + v79.uFrameWidth - 1;
- v79._415551(0);
+ v79.DrawMessageBox(0);
v15 = pRenderer;
pRenderer->Clip(
v79.uFrameX + 12,
@@ -2784,7 +2784,7 @@
v79.uFrameX -= 12;
if ( v77 )
{
- sprintfex(pTmpBuf, "%s: %lu", pGlobalTXT_LocalizationStrings[465], v77);
+ sprintf(pTmpBuf, "%s: %lu", pGlobalTXT_LocalizationStrings[465], v77);
v40 = v82;
v61 = 0;
v56 = 0;
@@ -2803,22 +2803,22 @@
Str = (char *)(v72 - 1168);
if ( v72 != 1168 )
{
- sprintfex(v65, " %d:yr", v72 - 1168);
+ sprintf(v65, " %d:yr", v72 - 1168);
strcat(pTmpBuf, v65);
}
- if ( (((v71 || Str) && ((sprintfex(v65, " %d:mo", v71), strcat(pTmpBuf, v65), v71) || Str) || v70)
- && ((sprintfex(v65, " %d:dy", v70), strcat(pTmpBuf, v65), v71) || Str || v70)
+ if ( (((v71 || Str) && ((sprintf(v65, " %d:mo", v71), strcat(pTmpBuf, v65), v71) || Str) || v70)
+ && ((sprintf(v65, " %d:dy", v70), strcat(pTmpBuf, v65), v71) || Str || v70)
|| v69)
- && ((sprintfex(v65, " %d:hr", v69), strcat(pTmpBuf, v65), v71) || Str || v70 || v69)
+ && ((sprintf(v65, " %d:hr", v69), strcat(pTmpBuf, v65), v71) || Str || v70 || v69)
|| v68 )
{
- sprintfex(v65, " %d:mn", v68);
+ sprintf(v65, " %d:mn", v68);
strcat(pTmpBuf, v65);
}
v79.DrawText(v82, 100, v79.uFrameHeight - 2 * LOBYTE(v82->uFontHeight), 0, pTmpBuf, 0, 0, 0);
}
v37 = _this->GetValue();
- sprintfex(pTmpBuf, "%s: %lu", pGlobalTXT_LocalizationStrings[465], v37);
+ sprintf(pTmpBuf, "%s: %lu", pGlobalTXT_LocalizationStrings[465], v37);
v79.DrawText(v82, 100, v79.uFrameHeight - LOBYTE(v82->uFontHeight), 0, pTmpBuf, 0, 0, 0);
v38 = _this->uAttributes;
if ( BYTE1(v38) & 1 )
@@ -2862,7 +2862,7 @@
v54 = pGlobalTXT_LocalizationStrings[449];
v49 = "%s: %d";
LABEL_64:
- sprintfex(v64, v49, v54, v59);
+ sprintf(v64, v49, v54, v59);
goto LABEL_65;
}
v25 = _this->_bonus_type;
@@ -2892,7 +2892,7 @@
v50 = pGlobalTXT_LocalizationStrings[210];
v46 = "%s: %s";
}
- sprintfex(v64, v46, v50, v55, v60);
+ sprintf(v64, v46, v50, v55, v60);
goto LABEL_65;
}
}
@@ -3093,27 +3093,27 @@
v106.uViewportY = v12;
v106.uViewportW = v12 + 128;
v106.uViewportZ = v106.uViewportX + 128;
- v106.field_8 = (signed int)(v106.uViewportX + 128 + v106.uViewportX) / 2;
+ v106.uScreenSpaceX = (signed int)(v106.uViewportX + 128 + v106.uViewportX) / 2;
v106.field_10 = 65536;
v106.field_14 = 65536;
- v106.field_C = v115 + v12 + *(short *)(v11 + 18);
+ v106.uScreenSpaceY = v115 + v12 + *(short *)(v11 + 18);
v106.pPalette = PaletteManager::Get_Dark_or_Red_LUT(v10->uPaletteIndex, 0, 1);
- v106.field_28 = 0;
+ v106.sZValue = 0;
v106.uFlags = 0;
pRenderer->Clip_v2(0, 0, 0x27Fu, 0x1DFu);
- pRenderer->FillRect(v106.uViewportX - 1, v106.uViewportY - 1, v106.uViewportX + 129, v106.uViewportY - 1, a5);
- pRenderer->FillRect(
+ pRenderer->Line2D(v106.uViewportX - 1, v106.uViewportY - 1, v106.uViewportX + 129, v106.uViewportY - 1, a5);
+ pRenderer->Line2D(
v106.uViewportX + 129,
v106.uViewportY - 1,
v106.uViewportX + 129,
v106.uViewportW + 1,
a5);
- pRenderer->FillRect(v106.uViewportX + 129, v106.uViewportW + 1, v106.uViewportX - 1, v106.uViewportW + 1, a5);
- pRenderer->FillRect(v106.uViewportX - 1, v106.uViewportW + 1, v106.uViewportX - 1, v106.uViewportY - 1, a5);
+ pRenderer->Line2D(v106.uViewportX + 129, v106.uViewportW + 1, v106.uViewportX - 1, v106.uViewportW + 1, a5);
+ pRenderer->Line2D(v106.uViewportX - 1, v106.uViewportW + 1, v106.uViewportX - 1, v106.uViewportY - 1, a5);
if ( pRenderer->pRenderD3D )
{
v13 = &pSprites_LOD->pHardwareSprites[v10->pHwSpriteIDs[0]];
- v106.field_C = v115 + v106.uViewportY + v13->uBufferHeight;
+ v106.uScreenSpaceY = v115 + v106.uViewportY + v13->uBufferHeight;
v222 = (IDirectDrawSurface *)v13->pTextureSurface;
memset(&Dst, 0, 0x64u);
Dst.dwSize = 100;
@@ -3127,13 +3127,13 @@
v15 = v13->uAreaX;
v119 = (signed int)v120 / 2;
i = 0;
- a4 = (char *)(v106.field_8 + v15 - (signed int)v120 / 2);
+ a4 = (char *)(v106.uScreenSpaceX + v15 - (signed int)v120 / 2);
v115 = v13->uAreaY;
v16 = v13->uAreaWidth + (signed int)v120 / 2 + v15 - (int)v120;
- v124 = v106.field_C + v115 - v14;
+ v124 = v106.uScreenSpaceY + v115 - v14;
v17 = v13->uAreaHeight + v115 - v14;
- v116 = v106.field_8 + v16;
- v119 = v106.field_C + v17;
+ v116 = v106.uScreenSpaceX + v16;
+ v119 = v106.uScreenSpaceY + v17;
if ( (signed int)a4 < (signed int)v106.uViewportX )
{
v18 = v106.uViewportX - (int)a4;
@@ -3150,20 +3150,18 @@
v116 = v106.uViewportZ;
if ( v119 > (signed int)v106.uViewportW )
v119 = v106.uViewportW;
- pRenderer->FillRect2(
- 0,
+ pRenderer->FillRectFast(
v106.uViewportX,
v106.uViewportY,
v106.uViewportZ - v106.uViewportX,
v106.uViewportW - v106.uViewportY,
- LOWORD(pRenderer->uTargetBMask) | LOWORD(pRenderer->uTargetGMask));
- pRenderer->FillRect2(
- 0,
+ pRenderer->uTargetBMask | pRenderer->uTargetGMask);
+ pRenderer->FillRectFast(
v106.uViewportX,
v106.uViewportY,
v106.uViewportZ - v106.uViewportX,
v106.uViewportW - v106.uViewportY,
- LOWORD(pRenderer->uTargetBMask) | LOWORD(pRenderer->uTargetGMask));
+ pRenderer->uTargetBMask | pRenderer->uTargetGMask);
v84.left = v106.uViewportX;
v84.top = v106.uViewportY;
v84.right = v106.uViewportZ;
@@ -3269,8 +3267,7 @@
}
else
{
- pRenderer->FillRect2(
- 0,
+ pRenderer->FillRectFast(
v106.uViewportX,
v106.uViewportY,
v106.uViewportZ - v106.uViewportX,
@@ -3286,7 +3283,7 @@
v37 = v112[6];
if ( v37 )
{
- sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[429], *v112, aNPCProfessionNames[(signed int)v37]);
+ sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[429], *v112, aNPCProfessionNames[(signed int)v37]);
goto LABEL_59;
}
v77 = 2000;
@@ -3543,7 +3540,7 @@
a4 = (char *)v106.uViewportY;
if ( v119 )
{
- sprintfex(pTmpBuf, "%s", pGlobalTXT_LocalizationStrings[108], 0, v121->pMonsterInfo.uHP);
+ sprintf(pTmpBuf, "%s", pGlobalTXT_LocalizationStrings[108], 0, v121->pMonsterInfo.uHP);
a1->DrawText(v56, 150, (int)a4, a5, pTmpBuf, 0, 0, 0);
a4 = &a4[LOBYTE(v56->uFontHeight) - 3];
v79 = v121->pMonsterInfo.uAC;
@@ -3553,7 +3550,7 @@
}
else
{
- sprintfex(pTmpBuf, "%s", pGlobalTXT_LocalizationStrings[108], 0, pGlobalTXT_LocalizationStrings[630]);
+ sprintf(pTmpBuf, "%s", pGlobalTXT_LocalizationStrings[108], 0, pGlobalTXT_LocalizationStrings[630]);
a1->DrawText(v56, 150, (int)a4, a5, pTmpBuf, 0, 0, 0);
v79 = (unsigned int)pGlobalTXT_LocalizationStrings[630];
v75 = 0;
@@ -3561,7 +3558,7 @@
a4 = &a4[LOBYTE(v56->uFontHeight) - 3];
v67 = "%s";
}
- sprintfex(pTmpBuf, v67, v70, v75, v79);
+ sprintf(pTmpBuf, v67, v70, v75, v79);
a1->DrawText(v56, 150, (int)a4, a5, pTmpBuf, 0, 0, 0);
a4 = &a4[LOBYTE(v56->uFontHeight) - 6] + LOBYTE(v56->uFontHeight);
v95 = pGlobalTXT_LocalizationStrings[87];
@@ -3577,12 +3574,12 @@
v105 = pGlobalTXT_LocalizationStrings[54];
if ( v116 )
{
- sprintfex(pTmpBuf, "%s", pGlobalTXT_LocalizationStrings[18], 0, (&v95)[4 * v121->pMonsterInfo.uAttack1Type]);
+ sprintf(pTmpBuf, "%s", pGlobalTXT_LocalizationStrings[18], 0, (&v95)[4 * v121->pMonsterInfo.uAttack1Type]);
a1->DrawText(v56, 150, (int)a4, a5, pTmpBuf, 0, 0, 0);
a4 = &a4[LOBYTE(v56->uFontHeight) - 3];
v57 = v121->pMonsterInfo.uAttack1DamageBonus;
if ( v57 )
- sprintfex(
+ sprintf(
pTmpBuf,
"%s",
pGlobalTXT_LocalizationStrings[53],
@@ -3591,7 +3588,7 @@
v121->pMonsterInfo.uAttack1DamageDiceSides,
v57);
else
- sprintfex(
+ sprintf(
pTmpBuf,
"%s",
pGlobalTXT_LocalizationStrings[53],
@@ -3601,10 +3598,10 @@
}
else
{
- sprintfex(pTmpBuf, "%s", pGlobalTXT_LocalizationStrings[18], 0, pGlobalTXT_LocalizationStrings[630]);
+ sprintf(pTmpBuf, "%s", pGlobalTXT_LocalizationStrings[18], 0, pGlobalTXT_LocalizationStrings[630]);
a1->DrawText(v56, 150, (int)a4, a5, pTmpBuf, 0, 0, 0);
a4 = &a4[LOBYTE(v56->uFontHeight) - 3];
- sprintfex(pTmpBuf, "%s", pGlobalTXT_LocalizationStrings[53], 0, pGlobalTXT_LocalizationStrings[630]);
+ sprintf(pTmpBuf, "%s", pGlobalTXT_LocalizationStrings[53], 0, pGlobalTXT_LocalizationStrings[630]);
}
a1->DrawText(v56, 150, (int)a4, a5, pTmpBuf, 0, 0, 0);
v58 = LOBYTE(v56->uFontHeight);
@@ -3624,7 +3621,7 @@
v120 = (SpellBuff *)pGlobalTXT_LocalizationStrings[629];
if ( v114 )
{
- sprintfex(pTmpBuf, "%s", v120, 0, pSpellStats->pInfos[v114].pShortName);
+ sprintf(pTmpBuf, "%s", v120, 0, pSpellStats->pInfos[v114].pShortName);
a1->DrawText(v56, 150, (int)a4, a5, pTmpBuf, 0, 0, 0);
v58 = LOBYTE(v56->uFontHeight);
a4 = &a4[v58 - 3];
@@ -3633,7 +3630,9 @@
v60 = v59->pMonsterInfo.uSpell2ID;
if ( v60 )
{
- sprintfex(pTmpBuf, &byte_4E3318, 0, pSpellStats->pInfos[v60].pShortName);
+ __debugbreak();
+ const char *fmt = "\xC\x25\x30\x35\x75\x9\x30\x36\x30\x25\x73\n";
+ sprintf(pTmpBuf, fmt, 0, pSpellStats->pInfos[v60].pShortName);
a1->DrawText(v56, 150, (int)a4, a5, pTmpBuf, 0, 0, 0);
v58 = LOBYTE(v56->uFontHeight);
a4 = &a4[v58 - 3];
@@ -3646,7 +3645,7 @@
v71 = pGlobalTXT_LocalizationStrings[628];
v68 = "%s";
LABEL_144:
- sprintfex(pTmpBuf, v68, v71, v76, v80);
+ sprintf(pTmpBuf, v68, v71, v76, v80);
a1->DrawText(v56, 150, (int)a4, a5, pTmpBuf, 0, 0, 0);
v58 = LOBYTE(v56->uFontHeight);
a4 = &a4[v58 - 3];
@@ -3692,7 +3691,7 @@
else
v81 = pGlobalTXT_LocalizationStrings[153];
}
- sprintfex(pTmpBuf, "%s", (&v85)[v124], 0, v81);
+ sprintf(pTmpBuf, "%s", (&v85)[v124], 0, v81);
a1->DrawText(v56, 170, (int)a4, a5, pTmpBuf, 0, 0, 0);
v63 = LOBYTE(v56->uFontHeight);
v124 += 4;
@@ -3706,7 +3705,7 @@
i = 0;
do
{
- sprintfex(pTmpBuf, "%s", (&v85)[4 * i], 0, pGlobalTXT_LocalizationStrings[630]);
+ sprintf(pTmpBuf, "%s", (&v85)[4 * i], 0, pGlobalTXT_LocalizationStrings[630]);
a1->DrawText(v56, 170, (int)a4, a5, pTmpBuf, 0, 0, 0);
v65 = LOBYTE(v56->uFontHeight);
++i;
@@ -3717,7 +3716,7 @@
}
if ( (signed __int64)pParty->pPartyBuffs[3].uExpireTime > 0 )
{
- sprintfex(pTmpBuf, "%s: %d", pGlobalTXT_LocalizationStrings[650], v121->sCurrentHP);
+ sprintf(pTmpBuf, "%s: %d", pGlobalTXT_LocalizationStrings[650], v121->sCurrentHP);
pFontSmallnum->GetLineWidth(pTmpBuf);
result = a1->DrawText2(
pFontSmallnum,
@@ -3740,7 +3739,7 @@
if ( pTexture_RestUI_CurrentHourglassFrame )
pTexture_RestUI_CurrentHourglassFrame->Release();
pIcons_LOD->_40F9C5();
- sprintfex(pTmpBuf, "TERRA%03d", pParty->uCurrentMinute / 6 + 10 * pParty->uCurrentHour);
+ sprintf(pTmpBuf, "TERRA%03d", pParty->uCurrentMinute / 6 + 10 * pParty->uCurrentHour);
pTexture_RestUI_CurrentSkyFrame = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture(pTmpBuf, TEXTURE_16BIT_PALETTE)];
}
@@ -3771,7 +3770,7 @@
pTexture_RestUI_CurrentSkyFrame = 0;
pIcons_LOD->_4114F2();
pIcons_LOD->_40F9C5();
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 0;
+ pCurrentScreen = 0;
viewparams->bRedrawGameUI = 1;
if ( uCurrentlyLoadedLevelType == LEVEL_Outdoor)
{
@@ -3797,10 +3796,10 @@
if ( !dword_506F14 )
pAudioPlayer->StopChannels(-1, -1);
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions )
+ if ( pCurrentScreen )
{
pGUIWindow_CurrentMenu->Release();
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 0;
+ pCurrentScreen = 0;
viewparams->bRedrawGameUI = 1;
}
pEventTimer->Pause();
@@ -3812,8 +3811,8 @@
if ( uCurrentlyLoadedLevelType == LEVEL_Outdoor)
uRestUI_FoodRequiredToRest = pOutdoor->GetNumFoodRequiredToRestInCurrentPos(
pParty->vPosition.x,
- pParty->vPosition.z,
- pParty->vPosition.y);
+ pParty->vPosition.y,
+ pParty->vPosition.z);
if ( sub_476387() )
{
v0 = (char *)&pParty->pPlayers[0].uClass;
@@ -3839,7 +3838,7 @@
++pIcons_LOD->uTexturePacksCount;
if ( !pIcons_LOD->uNumPrevLoadedFiles )
pIcons_LOD->uNumPrevLoadedFiles = pIcons_LOD->uNumLoadedFiles;
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 5;
+ pCurrentScreen = 5;
_507CD4_RestUI_hourglass_anim_controller = 0;
uTextureID_RestUI_restmain = pIcons_LOD->LoadTexture("restmain", TEXTURE_16BIT_PALETTE);
uTextureID_RestUI_restb1 = pIcons_LOD->LoadTexture("restb1", TEXTURE_16BIT_PALETTE);
@@ -3859,7 +3858,7 @@
0xA7u,
0,
0,
- nullstring,
+ "",
(Texture *)(uTextureID_RestUI_restexit != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_RestUI_restexit] : 0),
0);
pButton_RestUI_507634 = pGUIWindow_CurrentMenu->CreateButton(
@@ -3872,7 +3871,7 @@
0x61u,
0,
0x52u,
- nullstring,
+ "",
(Texture *)(uTextureID_RestUI_restb4 != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_RestUI_restb4] : 0),
0);
pButton_RestUI_WaitUntilDawn = pGUIWindow_CurrentMenu->CreateButton(
@@ -3885,7 +3884,7 @@
0x6Du,
0,
0x44u,
- nullstring,
+ "",
(Texture *)(uTextureID_RestUI_restb1 != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_RestUI_restb1] : 0),
0);
pButton_RestUI_Wait1Hour = pGUIWindow_CurrentMenu->CreateButton(
@@ -3898,7 +3897,7 @@
0x60u,
0,
0x48u,
- nullstring,
+ "",
(Texture *)(uTextureID_RestUI_restb2 != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_RestUI_restb2] : 0),
0);
pButton_RestUI_Wait5Minutes = pGUIWindow_CurrentMenu->CreateButton(
@@ -3911,7 +3910,7 @@
0x5Fu,
0,
0x4Du,
- nullstring,
+ "",
(Texture *)(uTextureID_RestUI_restb3 != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_RestUI_restb3] : 0),
0);
}
@@ -3952,7 +3951,7 @@
8u,
(Texture *)(uTextureID_RestUI_restmain != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_RestUI_restmain] : 0));
v10 = pParty->uCurrentHour;
- dword_506F1C = pGUIWindow_CurrentMenu->field_2C_focus_id;
+ dword_506F1C = pGUIWindow_CurrentMenu->pCurrentPosActiveItem;
if ( (signed int)pParty->uCurrentHour <= 12 )
{
if ( !v10 )
@@ -3986,7 +3985,7 @@
v4 = 1;
byte_4E2BC8 = 1;
}
- sprintfex(pTmpBuf, "hglas%03d", (unsigned __int8)v4);
+ sprintf(pTmpBuf, "hglas%03d", (unsigned __int8)v4);
pTexture_RestUI_CurrentHourglassFrame = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture(pTmpBuf, TEXTURE_16BIT_PALETTE)];
pRenderer->DrawTextureIndexed(0x10Bu, 0x9Fu, pTexture_RestUI_CurrentHourglassFrame);
memset(&Dst, 0, 0xBCu);
@@ -3999,7 +3998,7 @@
Dst.pParent = pButton_RestUI_WaitUntilDawn->pParent;
Dst.DrawLabel(pGlobalTXT_LocalizationStrings[183], pFontCreate, a5, *(int **)a9);
Dst.pParent = 0;
- sprintfex(pTmpBuf, "\r408%d", uRestUI_FoodRequiredToRest);
+ sprintf(pTmpBuf, "\r408%d", uRestUI_FoodRequiredToRest);
pGUIWindow_CurrentMenu->DrawText(pFontCreate, 0, 164, a5, pTmpBuf, 0, 0, *(unsigned int *)a9);
pButton_RestUI_WaitUntilDawn->DrawLabel(
pGlobalTXT_LocalizationStrings[237],
@@ -4020,13 +4019,13 @@
Dst.DrawLabel(pGlobalTXT_LocalizationStrings[236], pFontCreate, a5, *(int **)a9);
Dst.pParent = 0;
v5 = pParty->uCurrentHour >= 0xC && pParty->uCurrentHour < 0x18;
- sprintfex(pTmpBuf, "%d:%02d %s", v10, pParty->uCurrentMinute, aAMPMNames[v5]);
+ sprintf(pTmpBuf, "%d:%02d %s", v10, pParty->uCurrentMinute, aAMPMNames[v5]);
pGUIWindow_CurrentMenu->DrawText(pFontCreate, 368, 168, a5, pTmpBuf, 0, 0, *(unsigned int *)a9);
- sprintfex(pTmpBuf, "%s\r190%d", pGlobalTXT_LocalizationStrings[56], pParty->uDaysPlayed + 1);
+ sprintf(pTmpBuf, "%s\r190%d", pGlobalTXT_LocalizationStrings[56], pParty->uDaysPlayed + 1);
pGUIWindow_CurrentMenu->DrawText(pFontCreate, 350, 190, a5, pTmpBuf, 0, 0, *(unsigned int *)a9);
- sprintfex(pTmpBuf, "%s\r190%d", pGlobalTXT_LocalizationStrings[146], pParty->uCurrentMonth + 1);
+ sprintf(pTmpBuf, "%s\r190%d", pGlobalTXT_LocalizationStrings[146], pParty->uCurrentMonth + 1);
pGUIWindow_CurrentMenu->DrawText(pFontCreate, 350, 222, a5, pTmpBuf, 0, 0, *(unsigned int *)a9);
- sprintfex(pTmpBuf, "%s\r190%d", pGlobalTXT_LocalizationStrings[245], pParty->uCurrentYear);
+ sprintf(pTmpBuf, "%s\r190%d", pGlobalTXT_LocalizationStrings[245], pParty->uCurrentYear);
pGUIWindow_CurrentMenu->DrawText(pFontCreate, 350, 254, a5, pTmpBuf, 0, 0, *(unsigned int *)a9);
if ( dword_506F14 )
Sleep6Hours();
@@ -4543,9 +4542,9 @@
}
v18 = (double)pParty->vPosition.x - (double)v14;
*(float *)&a4 = v18;
- v19 = (double)pParty->vPosition.z - (double)v38;
+ v19 = (double)pParty->vPosition.y - (double)v38;
v33 = v19;
- v41 = (double)pParty->sEyelevel + (double)pParty->vPosition.y - (double)v15;
+ v41 = (double)pParty->sEyelevel + (double)pParty->vPosition.z - (double)v15;
*(float *)&sRotY = v19 * v19;
*(float *)&sRotX = v18 * v18;
v20 = sqrt(v41 * v41 + *(float *)&sRotX + *(float *)&sRotY);
@@ -4650,8 +4649,8 @@
pGlobalTXT_LocalizationStrings[79],// Exit
(Texture *)(uTextureID_506438 != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_506438] : 0),
0);
- ptr_507BB8->CreateButton(7u, 8u, 460u, 343u, 1, 0, 0xCu, 0, 0, nullstring, 0);
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 10;
+ ptr_507BB8->CreateButton(7u, 8u, 460u, 343u, 1, 0, 0xCu, 0, 0, "", 0);
+ pCurrentScreen = 10;
pEventTimer->Pause();
return 1;
}
@@ -4693,7 +4692,7 @@
v18 = pChestSmthn2ByType[v4];
v21 = pChestWidthsByType[v4];
v19 = pChestHeightsByType[v4];
- sprintfex(pTmpBuf, "chest%02d", pChestList->pChests[pChests[v3].uChestBitmapID].uTextureID);
+ sprintf(pTmpBuf, "chest%02d", pChestList->pChests[pChests[v3].uChestBitmapID].uTextureID);
v5 = pIcons_LOD->LoadTexture(pTmpBuf, TEXTURE_16BIT_PALETTE);
pRenderer->DrawTextureIndexed(8u, 8u, (Texture *)(v5 != -1 ? (int)&pIcons_LOD->pTextures[v5] : 0));
v23 = 0;
@@ -4844,7 +4843,7 @@
{
if ( _1_dont_share_with_followers___2_the_same_but_without_a_message__else_normal == 1 )
{
- sprintfex(pTmpBuf2, pGlobalTXT_LocalizationStrings[467], uNumGold);// You found %lu gold!
+ sprintf(pTmpBuf2, pGlobalTXT_LocalizationStrings[467], uNumGold);// You found %lu gold!
}
else
{
@@ -4913,11 +4912,11 @@
v3 = (signed int)(v4 * v3 / 100) / 100;
if ( v3 < 1 )
v3 = 1;
- sprintfex(pTmpBuf2, pGlobalTXT_LocalizationStrings[466], v4, v3);// You found %lu gold (followers take %lu)!
+ sprintf(pTmpBuf2, pGlobalTXT_LocalizationStrings[466], v4, v3);// You found %lu gold (followers take %lu)!
}
else
{
- sprintfex(pTmpBuf2, pGlobalTXT_LocalizationStrings[467], v4);// You found %lu gold!
+ sprintf(pTmpBuf2, pGlobalTXT_LocalizationStrings[467], v4);// You found %lu gold!
}
v2 = 0;
}
@@ -4980,7 +4979,6 @@
//----- (00420EFF) --------------------------------------------------------
void __cdecl GameUI_WritePointedObjectStatusString()
{
- unsigned int zero; // edi@1
int v1; // ebx@6
GUIWindow *v2; // edi@7
GUIButton *i; // ecx@11
@@ -5027,12 +5025,13 @@
unsigned int pY; // [sp+D8h] [bp-8h]@1
unsigned int v45; // [sp+DCh] [bp-4h]@21
- zero = 0;
+ v13 = nullptr;
+
pMouse->uPointingObjectID = 0;
pMouse->GetClickPos(&pX, &pY);
if ( (pX & 0x80000000u) != 0 || (signed int)pX > 639 || (pY & 0x80000000u) != 0 || (signed int)pY > 479 )
return;
- if ( !uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions )
+ if ( !pCurrentScreen )
{
if ( (signed int)pX > 467 || (signed int)pY > 351 )
goto _click_on_game_ui;
@@ -5067,7 +5066,7 @@
}
v31 = pLayingItems[v30].stru_24.GetDisplayName();
v28 = pTmpBuf;
- sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[470], v31);// "Get %s"
+ sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[470], v31);// "Get %s"
}
else
{
@@ -5138,15 +5137,15 @@
if ( uNumVisibleWindows <= 0 )
{
LABEL_38:
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 10 )
+ if ( pCurrentScreen == 10 )
{
sub_42038D();
goto _return;
}
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 13 )
+ if ( pCurrentScreen == 13 )
{
if ( dword_F8B19C != 2
- || (v16 = pRenderer->pActiveZBuffer[pX + pSRZBufferLineOffsets[pY]], v16 == zero)
+ || (v16 = pRenderer->pActiveZBuffer[pX + pSRZBufferLineOffsets[pY]], v16 == 0)
|| v16 == -65536 )
goto _return;
v15 = (ItemGen *)((char *)&pParty->pPickedItem + 36 * (v16 + 12 * (unsigned int)ptr_507BC0->ptr_1C) + 4);
@@ -5156,9 +5155,9 @@
LABEL_50:
uLastPointedObjectID = 1;
_return:
- if ( pMouse->uPointingObjectID == zero )
- {
- if ( uLastPointedObjectID != zero )
+ if ( pMouse->uPointingObjectID == 0 )
+ {
+ if ( uLastPointedObjectID != 0 )
{
pStatusBarString[0] = 0;
bForceDrawStatusBar = 1;
@@ -5170,7 +5169,7 @@
if ( (signed int)pY < 350 )
{
v14 = pRenderer->pActiveZBuffer[pX + pSRZBufferLineOffsets[pY]];
- if ( v14 == zero || v14 == -65536 || (unsigned int)v14 >= 0x1388 )
+ if ( v14 == 0 || v14 == -65536 || (unsigned int)v14 >= 0x1388 )
goto _return;
v15 = (ItemGen *)&pPlayers[uActiveCharacter]->spellbook.pDarkSpellbook.bIsSpellAvailable[36 * v14 + 5];
goto LABEL_49;
@@ -5181,7 +5180,7 @@
&& (signed int)pY >= (signed int)pWindowList[0].uFrameY
&& (signed int)pY <= (signed int)pWindowList[0].uFrameW )
{
- for ( i = pWindowList[0].pControlsHead; i != (GUIButton *)zero; i = i->pNext )
+ for ( i = pWindowList[0].pControlsHead; i != (GUIButton *)0; i = i->pNext )
{
if ( i->uButtonType == 1 )
{
@@ -5191,14 +5190,14 @@
&& (signed int)pY <= (signed int)i->uW )
{
v37 = (UIMessageType)i->field_1C;
- if ( v37 == zero )
+ if ( v37 == 0 )
goto LABEL_28;
v38 = i->uControlParam;
if ( (signed int)pMessageQueue_50CBD0->uNumMessages < 40 )
{
pMessageQueue_50CBD0->pMessages[pMessageQueue_50CBD0->uNumMessages].eType = v37;
pMessageQueue_50CBD0->pMessages[pMessageQueue_50CBD0->uNumMessages].param = v38;
- *(&pMessageQueue_50CBD0->uNumMessages + 3 * pMessageQueue_50CBD0->uNumMessages + 3) = zero;
+ *(&pMessageQueue_50CBD0->uNumMessages + 3 * pMessageQueue_50CBD0->uNumMessages + 3) = 0;
++pMessageQueue_50CBD0->uNumMessages;
}
goto LABEL_131;
@@ -5210,28 +5209,31 @@
{
v45 = pX - i->uX;
v45 = pY - i->uY;
- if ( (double)(signed int)i->uWidth != 0.0 )
- {
- if ( (double)(signed int)i->uHeight != 0.0 )
- {
- //UNDEF(v32);
- if ( v33 | v34 )
+
+ if (pX >= i->uX && pX <= i->uZ &&
+ pY >= i->uY && pY <= i->uW)
+ //if ( (double)(signed int)i->uWidth != 0.0 )
+ //{
+ // if ( (double)(signed int)i->uHeight != 0.0 )
+ // {
+ //UNDEF(v32);
+ //if ( v33 | v34 )
{
v35 = (UIMessageType)i->field_1C;
- if ( v35 != zero )
+ if ( v35 != 0 )
{
v36 = i->uControlParam;
if ( (signed int)pMessageQueue_50CBD0->uNumMessages < 40 )
{
pMessageQueue_50CBD0->pMessages[pMessageQueue_50CBD0->uNumMessages].eType = v35;
pMessageQueue_50CBD0->pMessages[pMessageQueue_50CBD0->uNumMessages].param = v36;
- *(&pMessageQueue_50CBD0->uNumMessages + 3 * pMessageQueue_50CBD0->uNumMessages + 3) = zero;
+ *(&pMessageQueue_50CBD0->uNumMessages + 3 * pMessageQueue_50CBD0->uNumMessages + 3) = 0;
goto LABEL_27;
}
}
goto LABEL_28;
- }
- }
+ //}
+ //}
}
}
else
@@ -5330,7 +5332,7 @@
v41 = v7;
v39 = pGlobalTXT_LocalizationStrings[468];// "Clicking here will spend %d Skill Points"
}
- sprintfex(Str1, v39, v41);
+ sprintf(Str1, v39, v41);
v13 = Str1;
goto _set_status_and_ret;
}
@@ -5343,16 +5345,11 @@
--v1;
if ( v1 <= 0 )
{
- zero = 0;
goto LABEL_38;
}
}
}
-// 4E28F8: using guessed type int uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions;
-// 506578: using guessed type int uLastPointedObjectID;
-// 5075E0: using guessed type int pVisibleWindowsIdxs[20];
-// 5C35BC: using guessed type int bForceDrawStatusBar;
-// F8B19C: using guessed type int dword_F8B19C;
+
//----- (00421626) --------------------------------------------------------
GUIWindow *GameUI_InitializeCharacterWindow(unsigned int _this)
@@ -5368,7 +5365,7 @@
pAudioPlayer->StopChannels(-1, -1);
bRingsShownInCharScreen = 0;
CharacterUI_LoadPaperdollTextures();
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = v1;
+ pCurrentScreen = v1;
v2 = GUIWindow::Create(0, 0, 640, 480, WINDOW_CharacterRecord, uActiveCharacter, 0);
pCharacterScreen_StatsBtn = v2->CreateButton(
pViewport->uViewportX + 12,
@@ -5440,7 +5437,7 @@
(Texture *)(papredoll_dbrds[2] != -1 ? (int)&pIcons_LOD->pTextures[papredoll_dbrds[2]] : 0),
papredoll_dbrds[1] != -1 ? (int)&pIcons_LOD->pTextures[papredoll_dbrds[1]] : 0,
0);
- v2->CreateButton(0, 0, 0x1DCu, 0x159u, 1, 122, 0x78u, 0, 0, nullstring, 0);
+ v2->CreateButton(0, 0, 0x1DCu, 0x159u, 1, 122, 0x78u, 0, 0, "", 0);
ptr_507694 = v2->CreateButton(
0x258u,
0x12Cu,
@@ -5453,12 +5450,12 @@
0,
pGlobalTXT_LocalizationStrings[64],
0);
- ptr_507690 = v2->CreateButton(0x1DCu, 0, 0xA4u, 0x159u, 1, 0, 0x85u, 0, 0, nullstring, 0);
- v2->CreateButton(0x3Du, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 1u, 0x31u, nullstring, 0);
- v2->CreateButton(0xB1u, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 2u, 0x32u, nullstring, 0);
- v2->CreateButton(0x124u, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 3u, 0x33u, nullstring, 0);
- v2->CreateButton(0x197u, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 4u, 0x34u, nullstring, 0);
- v2->CreateButton(0, 0, 0, 0, 1, 0, 0xB0u, 0, 9u, nullstring, 0);
+ ptr_507690 = v2->CreateButton(0x1DCu, 0, 0xA4u, 0x159u, 1, 0, 0x85u, 0, 0, "", 0);
+ v2->CreateButton(0x3Du, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 1u, 0x31u, "", 0);
+ v2->CreateButton(0xB1u, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 2u, 0x32u, "", 0);
+ v2->CreateButton(0x124u, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 3u, 0x33u, "", 0);
+ v2->CreateButton(0x197u, 0x1A8u, 0x1Fu, 0, 2, 94, 0x6Eu, 4u, 0x34u, "", 0);
+ v2->CreateButton(0, 0, 0, 0, 1, 0, 0xB0u, 0, 9u, "", 0);
sub_419100();
return v2;
}
@@ -5477,7 +5474,7 @@
pAudioPlayer->StopChannels(-1, -1);
bRingsShownInCharScreen = 0;
CharacterUI_LoadPaperdollTextures();
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 23;
+ pCurrentScreen = 23;
v2 = GUIWindow::Create(0, 0, 640, 480, (WindowType)(WINDOW_HouseInterior|WINDOW_Options), v1, 0);
ptr_50767C = v2->CreateButton(
394u,
@@ -5493,12 +5490,12 @@
(Texture *)(papredoll_dbrds[2] != -1 ? (int)&pIcons_LOD->pTextures[papredoll_dbrds[2]] : 0),
papredoll_dbrds[1] != -1 ? (int)&pIcons_LOD->pTextures[papredoll_dbrds[1]] : 0,
0);
- v2->CreateButton(0, 0, 0x1DCu, 0x159u, 1, 122, 0x78u, 0, 0, nullstring, 0);
- ptr_507690 = v2->CreateButton(0x1DCu, 0, 0xA4u, 0x159u, 1, 0, 0x85u, 0, 0, nullstring, 0);
- v2->CreateButton(61u, 424u, 0x1Fu, 0, 2, 94, 0x6Eu, 1u, 0x31u, nullstring, 0);
- v2->CreateButton(177u, 424u, 0x1Fu, 0, 2, 94, 0x6Eu, 2u, 0x32u, nullstring, 0);
- v2->CreateButton(292u, 424u, 0x1Fu, 0, 2, 94, 0x6Eu, 3u, 0x33u, nullstring, 0);
- v2->CreateButton(407u, 424u, 0x1Fu, 0, 2, 94, 0x6Eu, 4u, 0x34u, nullstring, 0);
+ v2->CreateButton(0, 0, 0x1DCu, 0x159u, 1, 122, 0x78u, 0, 0, "", 0);
+ ptr_507690 = v2->CreateButton(0x1DCu, 0, 0xA4u, 0x159u, 1, 0, 0x85u, 0, 0, "", 0);
+ v2->CreateButton(61u, 424u, 0x1Fu, 0, 2, 94, 0x6Eu, 1u, 0x31u, "", 0);
+ v2->CreateButton(177u, 424u, 0x1Fu, 0, 2, 94, 0x6Eu, 2u, 0x32u, "", 0);
+ v2->CreateButton(292u, 424u, 0x1Fu, 0, 2, 94, 0x6Eu, 3u, 0x33u, "", 0);
+ v2->CreateButton(407u, 424u, 0x1Fu, 0, 2, 94, 0x6Eu, 4u, 0x34u, "", 0);
return v2;
}
@@ -5571,16 +5568,16 @@
}
a1.field_58 = 4;
a1.uObjectDescID = v6;
- a1.vPosition.y = pParty->vPosition.z;
+ a1.vPosition.y = pParty->vPosition.y;
a1.vPosition.x = pParty->vPosition.x;
- a1.vPosition.z = pParty->sEyelevel + pParty->vPosition.y;
+ a1.vPosition.z = pParty->sEyelevel + pParty->vPosition.z;
a1.uSoundID = 0;
a1.uFacing = 0;
a1.uAttributes = 8;
v8 = pIndoor->GetSector(
pParty->vPosition.x,
- pParty->vPosition.z,
- pParty->sEyelevel + pParty->vPosition.y);
+ pParty->vPosition.y,
+ pParty->sEyelevel + pParty->vPosition.z);
a1.uSpriteFrameID = 0;
a1.uSectorID = v8;
memcpy(&a1.stru_24, &pParty->pPickedItem, sizeof(a1.stru_24));
@@ -5631,7 +5628,7 @@
v4->PlaySound(15, 0);
}
LABEL_9:
- if ( !uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions )
+ if ( !pCurrentScreen )
{
viewparams->bRedrawGameUI = 1;
if ( uActiveCharacter != v1 )
@@ -5641,16 +5638,16 @@
pGUIWindow_CurrentMenu = GameUI_InitializeCharacterWindow(v5);
return;
}
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 8 )
+ if ( pCurrentScreen == 8 )
return;
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 10 )
+ if ( pCurrentScreen == 10 )
{
LABEL_23:
viewparams->bRedrawGameUI = 1;
if ( uActiveCharacter == v1 )
{
pWindowList_at_506F50_minus1_indexing_buttons____and_an_int_[0] = 103;
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 15;
+ pCurrentScreen = 15;
goto LABEL_28;
}
LABEL_27:
@@ -5658,15 +5655,15 @@
return;
goto LABEL_28;
}
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions != 13 )
- {
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 14 )
+ if ( pCurrentScreen != 13 )
+ {
+ if ( pCurrentScreen == 14 )
{
LABEL_28:
uActiveCharacter = v1;
return;
}
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions != 15 )
+ if ( pCurrentScreen != 15 )
{
viewparams->bRedrawGameUI = 1;
uActiveCharacter = v1;
@@ -5688,7 +5685,7 @@
goto LABEL_22;
}
}
-// 4E28F8: using guessed type int uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions;
+// 4E28F8: using guessed type int pCurrentScreen;
// F8B19C: using guessed type int dword_F8B19C;
//----- (00421EA6) --------------------------------------------------------
@@ -5853,7 +5850,7 @@
}
else
{
- sprintfex(pTmpBuf2, pGlobalTXT_LocalizationStrings[471], pItemsTable->pItems[v23].pUnidentifiedName);
+ sprintf(pTmpBuf2, pGlobalTXT_LocalizationStrings[471], pItemsTable->pItems[v23].pUnidentifiedName);
ShowStatusBarString(pTmpBuf2, 2u);
if ( v22->uItemID == 506 )
_449B7E_toggle_bit(pParty->_award_bits, 184, 1u);
@@ -5923,17 +5920,17 @@
}
}
a1.uObjectDescID = v6;
- a1.vPosition.y = pParty->vPosition.z;
+ a1.vPosition.y = pParty->vPosition.y;
a1.field_58 = 4;
a1.vPosition.x = pParty->vPosition.x;
- a1.vPosition.z = pParty->sEyelevel + pParty->vPosition.y;
+ a1.vPosition.z = pParty->sEyelevel + pParty->vPosition.z;
a1.uSoundID = 0;
a1.uFacing = 0;
a1.uAttributes = 8;
a1.uSectorID = pIndoor->GetSector(
pParty->vPosition.x,
- pParty->vPosition.z,
- pParty->sEyelevel + pParty->vPosition.y);
+ pParty->vPosition.y,
+ pParty->sEyelevel + pParty->vPosition.z);
a1.uSpriteFrameID = 0;
memcpy(&a1.stru_24, &pParty->pPickedItem, 0x24u);
v8 = (int *)pMouse->GetCursorPos(&v25);
@@ -5960,7 +5957,7 @@
else
{
v12 = &pOutdoor->pBModels[(signed int)(unsigned __int16)v0 >> 9].pFaces[v2 & 0x3F];
- if ( !(v12->uFaceAttributes & 0x2000000) )
+ if ( !(v12->uAttributes & 0x2000000) )
goto LABEL_11;
v11 = v12->sCogTriggeredID;
}
@@ -6047,18 +6044,18 @@
//----- (004226C2) --------------------------------------------------------
bool __cdecl sub_4226C2()
{
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions
- && uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions != 4
- && uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions != 17 )
- {
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 18 )
+ if ( pCurrentScreen
+ && pCurrentScreen != 4
+ && pCurrentScreen != 17 )
+ {
+ if ( pCurrentScreen == 18 )
return pVideoPlayer->pSmackerMovie != 0;
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions != 19 )
+ if ( pCurrentScreen != 19 )
return 1;
}
return 0;
}
-// 4E28F8: using guessed type int uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions;
+// 4E28F8: using guessed type int pCurrentScreen;
//----- (004226EF) --------------------------------------------------------
void __fastcall SetUserInterface(int a1, bool bReplace)
@@ -6396,13 +6393,13 @@
{
BLVFace *v1; // ebx@1
Vec3_short_ *v2; // esi@1
- int v3; // ST28_4@1
+ //int v3; // ST28_4@1
__int16 v4; // ST2C_2@1
- signed int v5; // esi@1
- Vec3_short_ *v6; // eax@4
- signed int v7; // edi@5
- signed int v8; // eax@5
- signed int i_; // ecx@10
+ //signed int v5; // esi@1
+ //Vec3_short_ *v6; // eax@4
+ //signed int v7; // edi@5
+ //signed int v8; // eax@5
+ //signed int i_; // ecx@10
int v10; // eax@10
int v11; // edx@11
int v12; // ST28_4@12
@@ -6419,64 +6416,65 @@
int v23; // edi@21
int v24; // eax@21
int v25; // eax@22
- signed int v26; // ST30_4@24
- signed __int64 v27; // qtt@24
- int v28; // ST18_4@25
- int v29; // eax@26
- int v30; // eax@27
- signed int v31; // ST30_4@29
- signed __int64 v32; // qtt@29
- int v33; // ST30_4@30
- signed int v34; // edi@31
- unsigned int v35; // eax@31
- bool v36; // edx@31
- int v37; // ecx@31
- int v38; // ecx@32
- int v39; // esi@32
- int v40; // eax@34
- signed int v41; // ebx@41
- unsigned int v42; // eax@41
- signed int v43; // ecx@42
- int v44; // esi@42
- int v45; // eax@44
- signed int v46; // edi@51
- unsigned int v47; // eax@51
- bool v48; // edx@51
- int v49; // ecx@51
- int v50; // ecx@52
- signed int v51; // esi@52
- int v52; // eax@54
- int v53; // ebx@61
- unsigned int v54; // eax@61
- signed int v55; // ecx@62
- int v56; // esi@62
- int v57; // eax@64
- char v59; // zf@72
- signed int v60; // edx@75
- int v61; // ecx@76
- int v62; // esi@76
- int v63; // ecx@83
- signed int v64; // [sp+14h] [bp-14h]@3
- int v65; // [sp+14h] [bp-14h]@34
- int v66; // [sp+14h] [bp-14h]@44
- int v67; // [sp+14h] [bp-14h]@54
- int v68; // [sp+14h] [bp-14h]@64
- signed int v69; // [sp+14h] [bp-14h]@75
- IndoorCameraD3D *_this; // [sp+18h] [bp-10h]@1
+ int v26; // eax@22
+ signed int v27; // ST30_4@24
+ signed __int64 v28; // qtt@24
+ int v29; // ST18_4@25
+ int v30; // eax@26
+ int v31; // eax@27
+ int v32; // eax@27
+ signed int v33; // ST30_4@29
+ signed __int64 v34; // qtt@29
+ int v35; // ST30_4@30
+ signed int v36; // edi@31
+ unsigned int v37; // eax@31
+ bool v38; // edx@31
+ int v39; // ecx@31
+ int v40; // ecx@32
+ int v41; // esi@32
+ int v42; // eax@34
+ signed int v43; // ebx@41
+ unsigned int v44; // eax@41
+ signed int v45; // ecx@42
+ int v46; // esi@42
+ int v47; // eax@44
+ signed int v48; // edi@51
+ unsigned int v49; // eax@51
+ bool v50; // edx@51
+ int v51; // ecx@51
+ int v52; // ecx@52
+ signed int v53; // esi@52
+ int v54; // eax@54
+ int v55; // ebx@61
+ unsigned int v56; // eax@61
+ signed int v57; // ecx@62
+ int v58; // esi@62
+ int v59; // eax@64
+ char v61; // zf@72
+ signed int v62; // edx@75
+ int v63; // ecx@76
+ int v64; // esi@76
+ int v65; // ecx@83
+ //signed int v66; // [sp+14h] [bp-14h]@3
+ int v67; // [sp+14h] [bp-14h]@34
+ int v68; // [sp+14h] [bp-14h]@44
+ int v69; // [sp+14h] [bp-14h]@54
+ int v70; // [sp+14h] [bp-14h]@64
+ signed int v71; // [sp+14h] [bp-14h]@75
bool thisa; // [sp+18h] [bp-10h]@9
int thisb; // [sp+18h] [bp-10h]@12
int thisc; // [sp+18h] [bp-10h]@20
bool thisd; // [sp+18h] [bp-10h]@41
bool thise; // [sp+18h] [bp-10h]@61
int thisf; // [sp+18h] [bp-10h]@74
- signed int v77; // [sp+1Ch] [bp-Ch]@9
- int v78; // [sp+1Ch] [bp-Ch]@76
- bool v79; // [sp+20h] [bp-8h]@10
- bool v80; // [sp+20h] [bp-8h]@32
- bool v81; // [sp+20h] [bp-8h]@42
- bool v82; // [sp+20h] [bp-8h]@52
- bool v83; // [sp+20h] [bp-8h]@62
- signed int i; // [sp+24h] [bp-4h]@9
+ signed int v79; // [sp+1Ch] [bp-Ch]@9
+ int v80; // [sp+1Ch] [bp-Ch]@76
+ bool v81; // [sp+20h] [bp-8h]@10
+ bool v82; // [sp+20h] [bp-8h]@32
+ bool v83; // [sp+20h] [bp-8h]@42
+ bool v84; // [sp+20h] [bp-8h]@52
+ bool v85; // [sp+20h] [bp-8h]@62
+ //signed int i; // [sp+24h] [bp-4h]@9
signed int ia; // [sp+24h] [bp-4h]@19
signed int ib; // [sp+24h] [bp-4h]@31
signed int ic; // [sp+24h] [bp-4h]@41
@@ -6484,14 +6482,14 @@
signed int ie; // [sp+24h] [bp-4h]@61
v1 = &pIndoor->pFaces[uFaceID];
- _this = pGame->pIndoorCameraD3D;
- v2 = &pIndoor->pVertices[*v1->pVertexIDs];
- v3 = *(int *)&v2->x;
+ //this = pGame->pIndoorCameraD3D;
+ v2 = &pIndoor->pVertices[v1->pVertexIDs[0]];
+ //v3 = *(_DWORD *)&v2->x;
v4 = v2->z;
- v5 = 0;
- if ( v1->pFacePlane_old.vNormal.x * ((signed __int16)v3 - pBLVRenderParams->vPartyPos.x)
- + v1->pFacePlane_old.vNormal.y * (SHIWORD(v3) - pBLVRenderParams->vPartyPos.y)
- + v1->pFacePlane_old.vNormal.z * (v4 - pBLVRenderParams->vPartyPos.z) < 0 )
+ //v5 = 0;
+ if ( v1->pFacePlane_old.vNormal.x * (v2->x - pBLVRenderParams->vPartyPos.x)
+ + v1->pFacePlane_old.vNormal.y * (v2->y - pBLVRenderParams->vPartyPos.y)
+ + v1->pFacePlane_old.vNormal.z * (v2->z - pBLVRenderParams->vPartyPos.z) < 0 )
{
dword_50B700 = 1;
}
@@ -6501,110 +6499,103 @@
if ( !(v1->uAttributes & 1) )
return 0;
}
- v64 = v1->uNumVertices;
- if ( (signed int)v1->uNumVertices > 0 )
- {
- do
- {
- v6 = &pIndoor->pVertices[v1->pVertexIDs[v5]];
- _this->ApplyViewTransform_TrueIfStillVisible(
+ //v66 = v1->uNumVertices;
+ for (uint i = 0; i < v1->uNumVertices; ++i)
+ {
+ auto v6 = &pIndoor->pVertices[v1->pVertexIDs[i]];
+ pGame->pIndoorCameraD3D->ApplyViewTransform_TrueIfStillVisible(
v6->x,
v6->y,
v6->z,
- &_50B924_view_transformed_xs[v5],
- &_50B834_view_transformed_zs[v5],
- &_50B744_view_transformed_ys[v5],
+ &_50B924_view_transformed_xs[i],
+ &_50B834_view_transformed_zs[i],
+ &_50B744_view_transformed_ys[i],
0);
- ++v5;
- }
- while ( v5 < v64 );
- }
- v7 = v64;
- v8 = 0;
- if ( v64 <= 0 )
+ }
+
+ //v7 = v1->uNumVertices;
+ //v8 = 0;
+ if (v1->uNumVertices <= 0)
return 0;
- do
- {
- if ( _50B924_view_transformed_xs[v8] >= 524288 )
+
+ bool bFound = false;
+ for (uint i = 0; i < v1->uNumVertices; ++i)
+ if (_50B924_view_transformed_xs[i] >= 0x80000u)
+ {
+ bFound = true;
break;
- ++v8;
- }
- while ( v8 < v64 );
- if ( v8 >= v64 )
+ }
+ if (!bFound)
return 0;
- v77 = 0;
- _50B924_view_transformed_xs[v64] = _50B924_view_transformed_xs[0];
- _50B834_view_transformed_zs[v64] = _50B834_view_transformed_zs[0];
- _50B744_view_transformed_ys[v64] = _50B744_view_transformed_ys[0];
- thisa = _50B924_view_transformed_xs[0] >= 524288;
- i = 1;
- if ( v64 >= 1 )
- {
- do
- {
- i_ = i;
+
+ v79 = 0;
+ _50B924_view_transformed_xs[v1->uNumVertices] = _50B924_view_transformed_xs[0];
+ _50B834_view_transformed_zs[v1->uNumVertices] = _50B834_view_transformed_zs[0];
+ _50B744_view_transformed_ys[v1->uNumVertices] = _50B744_view_transformed_ys[0];
+ thisa = _50B924_view_transformed_xs[0] >= 0x80000u;
+ //int i = 1;
+ for (uint i = 1; i < v1->uNumVertices; ++i)
+ {
v10 = _50B924_view_transformed_xs[i];
- v79 = v10 >= 524288;
- if ( thisa ^ v79 )
- {
- v11 = _50B924_view_transformed_xs_minus1[i_];
- if ( v10 >= 524288 )
+ v81 = v10 >= (signed int)0x80000u;
+ if ( thisa ^ v81 )
+ {
+ v11 = _50B924_view_transformed_xs[i - 1];
+ if ( v10 >= (signed int)0x80000u )
{
v12 = v10 - v11;
- v13 = 524288 - v11;
+ v13 = 0x80000 - v11;
LODWORD(v14) = v13 << 16;
HIDWORD(v14) = v13 >> 16;
- v15 = &_50B744_view_transformed_ys_minus1[i_];
- dword_50B828[v77] = ((unsigned __int64)((_50B834_view_transformed_zs[i_] - _50B834_view_transformed_zs_minus1[i_])
+ v15 = &_50B744_view_transformed_ys[i - 1];
+ dword_50B828[v79] = ((unsigned __int64)((_50B834_view_transformed_zs[i] - _50B834_view_transformed_zs[i - 1])
* v14
/ v12) >> 16)
- + _50B834_view_transformed_zs_minus1[i_];
- thisb = (unsigned __int64)((_50B744_view_transformed_ys[i_] - _50B744_view_transformed_ys_minus1[i_]) * v14 / v12) >> 16;
+ + _50B834_view_transformed_zs[i - 1];
+ thisb = (unsigned __int64)((_50B744_view_transformed_ys[i] - _50B744_view_transformed_ys[i - 1]) * v14 / v12) >> 16;
}
else
{
v16 = v11 - v10;
- v17 = 524288 - v10;
+ v17 = 0x80000 - v10;
LODWORD(v18) = v17 << 16;
HIDWORD(v18) = v17 >> 16;
- v15 = &_50B744_view_transformed_ys[i_];
- dword_50B828[v77] = ((unsigned __int64)((_50B834_view_transformed_zs_minus1[i_] - _50B834_view_transformed_zs[i_])
+ v15 = &_50B744_view_transformed_ys[i];
+ dword_50B828[v79] = ((unsigned __int64)((_50B834_view_transformed_zs[i - 1] - _50B834_view_transformed_zs[i])
* v18
/ v16) >> 16)
- + _50B834_view_transformed_zs[i_];
- thisb = (unsigned __int64)((_50B744_view_transformed_ys_minus1[i_] - _50B744_view_transformed_ys[i_]) * v18 / v16) >> 16;
+ + _50B834_view_transformed_zs[i];
+ thisb = (unsigned __int64)((_50B744_view_transformed_ys[i - 1] - _50B744_view_transformed_ys[i]) * v18 / v16) >> 16;
}
- v19 = v77++;
- v7 = v64;
+ v19 = v79++;
+ //v7 = v66;
dword_50B738[v19] = thisb + *v15;
- dword_50B918[v19] = 524288;
- }
- if ( v79 )
- {
- v20 = v77++;
- dword_50B918[v20] = _50B924_view_transformed_xs[i_];
- dword_50B828[v20] = _50B834_view_transformed_zs[i_];
- dword_50B738[v20] = _50B744_view_transformed_ys[i_];
- }
- ++i;
- thisa = v79;
- }
- while ( i <= v7 );
+ dword_50B918[v19] = 0x80000u;
+ }
+ if ( v81 )
+ {
+ v20 = v79++;
+ dword_50B918[v20] = _50B924_view_transformed_xs[i];
+ dword_50B828[v20] = _50B834_view_transformed_zs[i];
+ dword_50B738[v20] = _50B744_view_transformed_ys[i];
+ }
+ //++i;
+ thisa = v81;
}
ia = 0;
- v21 = v77;
- dword_50B918[v77] = dword_50B918[0];
- dword_50B828[v77] = dword_50B828[0];
- for ( dword_50B738[v77] = dword_50B738[0]; ia < v77; dword_50BA08[v22] = pBLVRenderParams->uViewportCenterY - v33 )
+ v21 = v79;
+ dword_50B918[v79] = dword_50B918[0];
+ dword_50B828[v79] = dword_50B828[0];
+ for ( dword_50B738[v79] = dword_50B738[0]; ia < v79; dword_50BA08[v22] = pBLVRenderParams->uViewportCenterY - v35 )
{
v22 = ia;
thisc = abs(dword_50B918[ia]);
if ( abs(dword_50B828[ia]) >> 13 <= thisc )
{
- v26 = dword_50B828[v22];
- LODWORD(v27) = v26 << 16;
- HIDWORD(v27) = v26 >> 16;
- v25 = v27 / dword_50B918[v22];
+ v27 = dword_50B828[v22];
+ LODWORD(v28) = v27 << 16;
+ HIDWORD(v28) = v27 >> 16;
+ v26 = v28 / dword_50B918[v22];
v23 = 0;
}
else
@@ -6614,272 +6605,277 @@
if ( dword_50B828[v22] >= 0 )
{
LOBYTE(v24) = dword_50B918[v22] >= 0;
- v25 = ((v24 - 1) & 0xFF800000) + 0x400000;
+ v26 = ((v24 - 1) & 0xFF800000) + 0x400000;
}
else
{
LOBYTE(v24) = dword_50B918[v22] >= 0;
- v25 = ((unsigned int)&array_77EC08[1975].pEdgeList1[1] & (v24 - 1)) - 4194304;
- }
- }
- v28 = dword_50B738[v22];
- dword_50BAF8_xs[v22] = v25;
- if ( abs(v28) >> 13 <= thisc )
- {
- v31 = dword_50B738[v22];
- LODWORD(v32) = v31 << 16;
- HIDWORD(v32) = v31 >> 16;
- v30 = v32 / dword_50B918[v22];
+ v25 = v24 - 1;
+ v26 = (v25 & 0x800000) - 0x400000;
+ }
+ }
+ v29 = dword_50B738[v22];
+ dword_50BAF4_xs[v22 + 1] = v26;
+ if ( abs(v29) >> 13 <= thisc )
+ {
+ v33 = dword_50B738[v22];
+ LODWORD(v34) = v33 << 16;
+ HIDWORD(v34) = v33 >> 16;
+ v32 = v34 / dword_50B918[v22];
}
else
{
- v29 = 0;
+ v30 = 0;
if ( dword_50B738[v22] >= v23 )
{
- LOBYTE(v29) = dword_50B918[v22] >= v23;
- v30 = ((v29 - 1) & 0xFF800000) + 4194304;
+ LOBYTE(v30) = dword_50B918[v22] >= v23;
+ v32 = ((v30 - 1) & 0xFF800000) + 0x400000;
}
else
{
- LOBYTE(v29) = dword_50B918[v22] >= v23;
- v30 = ((unsigned int)&array_77EC08[1975].pEdgeList1[1] & (v29 - 1)) - 4194304;
- }
- }
- dword_50BA08[v22] = v30;
- dword_50BAF8_xs[v22] = (unsigned __int64)(SHIWORD(pBLVRenderParams->field_40) * (signed __int64)dword_50BAF8_xs[v22]) >> 16;
- v33 = (unsigned __int64)(SHIWORD(pBLVRenderParams->field_40) * (signed __int64)dword_50BA08[v22]) >> 16;
- dword_50BAF8_xs[v22] = pBLVRenderParams->uViewportCenterX - dword_50BAF8_xs[v22];
+ LOBYTE(v30) = dword_50B918[v22] >= v23;
+ v31 = v30 - 1;
+ v32 = (v31 & 0x800000) - 0x400000;
+ }
+ }
+ dword_50BA08[v22] = v32;
+ dword_50BAF4_xs[v22 + 1] = (unsigned __int64)(SHIWORD(pBLVRenderParams->field_40)
+ * (signed __int64)dword_50BAF4_xs[v22 + 1]) >> 16;
+ v35 = (unsigned __int64)(SHIWORD(pBLVRenderParams->field_40) * (signed __int64)dword_50BA08[v22]) >> 16;
+ dword_50BAF4_xs[v22 + 1] = pBLVRenderParams->uViewportCenterX - dword_50BAF4_xs[v22 + 1];
++ia;
}
- v34 = 0;
- dword_50BAF8_xs[v21] = dword_50BAF8_xs[0];
+ v36 = 0;
+ dword_50BAF4_xs[v21 + 1] = dword_50BAF4_xs[1];
dword_50BA08[v21] = dword_50BA08[0];
- v35 = pBLVRenderParams->uViewportX;
- v36 = dword_50BAF8_xs[0] < (signed int)pBLVRenderParams->uViewportX;
- LOBYTE(v36) = dword_50BAF8_xs[0] >= (signed int)pBLVRenderParams->uViewportX;
- v37 = 1;
+ v37 = pBLVRenderParams->uViewportX;
+ v38 = dword_50BAF4_xs[1] < (signed int)pBLVRenderParams->uViewportX;
+ LOBYTE(v38) = dword_50BAF4_xs[1] >= (signed int)pBLVRenderParams->uViewportX;
+ v39 = 1;
ib = 1;
- if ( v77 < 1 )
+ if ( v79 < 1 )
return 0;
do
{
- v38 = v37;
- v39 = dword_50BAF8_xs[v38];
- v80 = v39 >= (signed int)v35;
- if ( v36 ^ v80 )
- {
- if ( v39 >= (signed int)v35 )
- {
- v65 = (signed int)(v35 - dword_50BAF4[v38])
- * (signed __int64)(dword_50BA08[v38] - dword_50B9F8[v38 + 3])
- / (v39 - dword_50BAF4[v38]);
- v40 = dword_50B9F8[v38 + 3];
+ v40 = v39;
+ v41 = dword_50BAF4_xs[v40 + 1];
+ v82 = v41 >= (signed int)v37;
+ if ( v38 ^ v82 )
+ {
+ if ( v41 >= (signed int)v37 )
+ {
+ v67 = (signed int)(v37 - dword_50BAF4_xs[v40])
+ * (signed __int64)(dword_50BA08[v40] - dword_50B9F8[v40 + 3])
+ / (v41 - dword_50BAF4_xs[v40]);
+ v42 = dword_50B9F8[v40 + 3];
}
else
{
- v65 = (signed int)(v35 - v39)
- * (signed __int64)(dword_50B9F8[v38 + 3] - dword_50BA08[v38])
- / (dword_50BAF4[v38] - v39);
- v40 = dword_50BA08[v38];
- }
- ++v34;
- dword_50B9F8[v34] = v65 + v40;
- v35 = pBLVRenderParams->uViewportX;
- dword_50BAE8[v34] = pBLVRenderParams->uViewportX;
- }
- v36 = v80;
- if ( v80 )
- {
- dword_50BAEC_xs[v34] = dword_50BAF8_xs[v38];
- dword_50B9F8[v34++ + 1] = dword_50BA08[v38];
- }
- v37 = ib++ + 1;
- }
- while ( ib <= v77 );
- if ( !v34
- || (v41 = 0,
- dword_50BAEC_xs[v34] = dword_50BAEC_xs[0],
- dword_50B9F8[v34 + 1] = dword_50B9F8[1],
- v42 = pBLVRenderParams->uViewportZ,
- thisd = dword_50BAEC_xs[0] <= (signed int)pBLVRenderParams->uViewportZ,
+ v67 = (signed int)(v37 - v41)
+ * (signed __int64)(dword_50B9F8[v40 + 3] - dword_50BA08[v40])
+ / (dword_50BAF4_xs[v40] - v41);
+ v42 = dword_50BA08[v40];
+ }
+ ++v36;
+ dword_50B9F8[v36] = v67 + v42;
+ v37 = pBLVRenderParams->uViewportX;
+ dword_50BAE8_xs[v36] = pBLVRenderParams->uViewportX;
+ }
+ v38 = v82;
+ if ( v82 )
+ {
+ dword_50BAE8_xs[v36 + 1] = dword_50BAF4_xs[v40 + 1];
+ dword_50B9F8[v36++ + 1] = dword_50BA08[v40];
+ }
+ v39 = ib++ + 1;
+ }
+ while ( ib <= v79 );
+
+ if ( !v36
+ || (v43 = 0,
+ dword_50BAE8_xs[v36 + 1] = dword_50BAE8_xs[1],
+ dword_50B9F8[v36 + 1] = dword_50B9F8[1],
+ v44 = pBLVRenderParams->uViewportZ,
+ thisd = dword_50BAE8_xs[1] <= (signed int)pBLVRenderParams->uViewportZ,
ic = 1,
- v34 < 1) )
+ v36 < 1) )
return 0;
+
do
{
- v43 = ic;
- v44 = dword_50BAEC_xs[ic];
- v81 = v44 <= (signed int)v42;
- if ( thisd ^ v81 )
- {
- if ( v44 <= (signed int)v42 )
- {
- v66 = (signed int)(v42 - dword_50BAE8[v43])
- * (signed __int64)(dword_50B9F8[v43 + 1] - dword_50B9F8[v43])
- / (v44 - dword_50BAE8[v43]);
- v45 = dword_50B9F8[v43];
+ v45 = ic;
+ v46 = dword_50BAE8_xs[ic + 1];
+ v83 = v46 <= (signed int)v44;
+ if ( thisd ^ v83 )
+ {
+ if ( v46 <= (signed int)v44 )
+ {
+ v68 = (signed int)(v44 - dword_50BAE8_xs[v45])
+ * (signed __int64)(dword_50B9F8[v45 + 1] - dword_50B9F8[v45])
+ / (v46 - dword_50BAE8_xs[v45]);
+ v47 = dword_50B9F8[v45];
}
else
{
- v66 = (signed int)(v42 - v44)
- * (signed __int64)(dword_50B9F8[v43] - dword_50B9F8[v43 + 1])
- / (dword_50BAE8[v43] - v44);
- v45 = dword_50B9F8[v43 + 1];
- }
- ++v41;
- dword_50B9EC[v41] = v66 + v45;
- v42 = pBLVRenderParams->uViewportZ;
- dword_50BADC_xs[v41] = pBLVRenderParams->uViewportZ;
- }
- if ( v81 )
- {
- dword_50BAE0[v41] = dword_50BAEC_xs[v43];
- dword_50B9F0[v41++] = dword_50B9F8[v43 + 1];
+ v68 = (signed int)(v44 - v46)
+ * (signed __int64)(dword_50B9F8[v45] - dword_50B9F8[v45 + 1])
+ / (dword_50BAE8_xs[v45] - v46);
+ v47 = dword_50B9F8[v45 + 1];
+ }
+ ++v43;
+ dword_50B9EC[v43] = v68 + v47;
+ v44 = pBLVRenderParams->uViewportZ;
+ dword_50BADC_xs[v43] = pBLVRenderParams->uViewportZ;
+ }
+ if ( v83 )
+ {
+ dword_50BAE0[v43] = dword_50BAE8_xs[v45 + 1];
+ dword_50B9F0[v43++] = dword_50B9F8[v45 + 1];
}
++ic;
- thisd = v81;
- }
- while ( ic <= v34 );
- if ( !v41
- || (v46 = 0,
- dword_50BAE0[v41] = dword_50BAE0[0],
- dword_50B9F0[v41] = dword_50B9F0[0],
- v47 = pBLVRenderParams->uViewportY,
- v48 = dword_50B9F0[0] < (signed int)pBLVRenderParams->uViewportY,
- LOBYTE(v48) = dword_50B9F0[0] >= (signed int)pBLVRenderParams->uViewportY,
- v49 = 1,
+ thisd = v83;
+ }
+ while ( ic <= v36 );
+ if ( !v43
+ || (v48 = 0,
+ dword_50BAE0[v43] = dword_50BAE0[0],
+ dword_50B9F0[v43] = dword_50B9F0[0],
+ v49 = pBLVRenderParams->uViewportY,
+ v50 = dword_50B9F0[0] < (signed int)pBLVRenderParams->uViewportY,
+ LOBYTE(v50) = dword_50B9F0[0] >= (signed int)pBLVRenderParams->uViewportY,
+ v51 = 1,
id = 1,
- v41 < 1) )
+ v43 < 1) )
return 0;
do
{
- v50 = v49;
- v51 = dword_50B9F0[v50];
- v82 = v51 >= (signed int)v47;
- if ( v48 ^ v82 )
- {
- if ( v51 >= (signed int)v47 )
- {
- v67 = (signed int)(v47 - dword_50B9EC[v50])
- * (signed __int64)(dword_50BAE0[v50] - dword_50BADC_xs[v50])
- / (v51 - dword_50B9EC[v50]);
- v52 = dword_50BADC_xs[v50];
+ v52 = v51;
+ v53 = dword_50B9F0[v52];
+ v84 = v53 >= (signed int)v49;
+ if ( v50 ^ v84 )
+ {
+ if ( v53 >= (signed int)v49 )
+ {
+ v69 = (signed int)(v49 - dword_50B9EC[v52])
+ * (signed __int64)(dword_50BAE0[v52] - dword_50BADC_xs[v52])
+ / (v53 - dword_50B9EC[v52]);
+ v54 = dword_50BADC_xs[v52];
}
else
{
- v67 = (signed int)(v47 - v51)
- * (signed __int64)(dword_50BADC_xs[v50] - dword_50BAE0[v50])
- / (dword_50B9EC[v50] - v51);
- v52 = dword_50BAE0[v50];
- }
- ++v46;
- dword_50BAD0[v46] = v67 + v52;
- v47 = pBLVRenderParams->uViewportY;
- dword_50B9E0_ys[v46] = pBLVRenderParams->uViewportY;
- }
- v48 = v82;
- if ( v82 )
- {
- dword_50BAD4[v46] = dword_50BAE0[v50];
- dword_50B9E0_ys[v46++ + 1] = dword_50B9F0[v50];
- }
- v49 = id++ + 1;
- }
- while ( id <= v41 );
- if ( !v46
- || (v53 = 0,
- dword_50BAD4[v46] = dword_50BAD4[0],
- dword_50B9E0_ys[v46 + 1] = dword_50B9E0_ys[1],
- v54 = pBLVRenderParams->uViewportW,
+ v69 = (signed int)(v49 - v53)
+ * (signed __int64)(dword_50BADC_xs[v52] - dword_50BAE0[v52])
+ / (dword_50B9EC[v52] - v53);
+ v54 = dword_50BAE0[v52];
+ }
+ ++v48;
+ dword_50BAD0[v48] = v69 + v54;
+ v49 = pBLVRenderParams->uViewportY;
+ dword_50B9E0_ys[v48] = pBLVRenderParams->uViewportY;
+ }
+ v50 = v84;
+ if ( v84 )
+ {
+ dword_50BAD4[v48] = dword_50BAE0[v52];
+ dword_50B9E0_ys[v48++ + 1] = dword_50B9F0[v52];
+ }
+ v51 = id++ + 1;
+ }
+ while ( id <= v43 );
+ if ( !v48
+ || (v55 = 0,
+ dword_50BAD4[v48] = dword_50BAD4[0],
+ dword_50B9E0_ys[v48 + 1] = dword_50B9E0_ys[1],
+ v56 = pBLVRenderParams->uViewportW,
thise = dword_50B9E0_ys[1] <= (signed int)pBLVRenderParams->uViewportW,
ie = 1,
- v46 < 1) )
+ v48 < 1) )
return 0;
do
{
- v55 = ie;
- v56 = dword_50B9E0_ys[ie + 1];
- v83 = v56 <= (signed int)v54;
- if ( thise ^ v83 )
- {
- if ( v56 <= (signed int)v54 )
- {
- v68 = (signed int)(v54 - dword_50B9E0_ys[v55])
- * (signed __int64)(dword_50BAD4[v55] - dword_50BAD0[v55])
- / (v56 - dword_50B9E0_ys[v55]);
- v57 = dword_50BAD0[v55];
+ v57 = ie;
+ v58 = dword_50B9E0_ys[ie + 1];
+ v85 = v58 <= (signed int)v56;
+ if ( thise ^ v85 )
+ {
+ if ( v58 <= (signed int)v56 )
+ {
+ v70 = (signed int)(v56 - dword_50B9E0_ys[v57])
+ * (signed __int64)(dword_50BAD4[v57] - dword_50BAD0[v57])
+ / (v58 - dword_50B9E0_ys[v57]);
+ v59 = dword_50BAD0[v57];
}
else
{
- v68 = (signed int)(v54 - v56)
- * (signed __int64)(dword_50BAD0[v55] - dword_50BAD4[v55])
- / (dword_50B9E0_ys[v55] - v56);
- v57 = dword_50BAD4[v55];
- }
- ++v53;
- dword_50BAC4[v53] = v68 + v57;
- v54 = pBLVRenderParams->uViewportW;
- unk_50B9D4[v53] = pBLVRenderParams->uViewportW;
- }
- if ( v83 )
- {
- dword_50BAC8[v53] = dword_50BAD4[v55];
- dword_50B9D8_ys[v53++] = dword_50B9E0_ys[v55 + 1];
+ v70 = (signed int)(v56 - v58)
+ * (signed __int64)(dword_50BAD0[v57] - dword_50BAD4[v57])
+ / (dword_50B9E0_ys[v57] - v58);
+ v59 = dword_50BAD4[v57];
+ }
+ ++v55;
+ dword_50BAC4[v55] = v70 + v59;
+ v56 = pBLVRenderParams->uViewportW;
+ unk_50B9D4[v55] = pBLVRenderParams->uViewportW;
+ }
+ if ( v85 )
+ {
+ dword_50BAC8[v55] = dword_50BAD4[v57];
+ dword_50B9D8_ys[v55++] = dword_50B9E0_ys[v57 + 1];
}
++ie;
- thise = v83;
- }
- while ( ie <= v46 );
- if ( !v53 )
+ thise = v85;
+ }
+ while ( ie <= v48 );
+ if ( !v55 )
return 0;
- v59 = pRenderer->pRenderD3D == 0;
- dword_50BAC8[v53] = dword_50BAC8[0];
- dword_50B9D8_ys[v53] = dword_50B9D8_ys[0];
- if ( v59 && v53 > 3 )
- {
- dword_50BAC8[v53 + 1] = dword_50BAC8[1];
- dword_50B9D8_ys[v53 + 1] = dword_50B9D8_ys[1];
+ v61 = pRenderer->pRenderD3D == 0;
+ dword_50BAC8[v55] = dword_50BAC8[0];
+ dword_50B9D8_ys[v55] = dword_50B9D8_ys[0];
+ if ( v61 && v55 > 3 )
+ {
+ dword_50BAC8[v55 + 1] = dword_50BAC8[1];
+ dword_50B9D8_ys[v55 + 1] = dword_50B9D8_ys[1];
thisf = 2 * (dword_50B700 != 0) - 1;
- if ( v53 > 0 )
- {
- v60 = 1;
- v69 = 1;
+ if ( v55 > 0 )
+ {
+ v62 = 1;
+ v71 = 1;
do
{
- v61 = v60 - 1;
- v62 = v60 + 1;
- v78 = v60 + 1;
- if ( v60 - 1 >= v53 )
- v61 -= v53;
- if ( v60 >= v53 )
- v60 -= v53;
- if ( v62 >= v53 )
- v62 -= v53;
+ v63 = v62 - 1;
+ v64 = v62 + 1;
+ v80 = v62 + 1;
+ if ( v62 - 1 >= v55 )
+ v63 -= v55;
+ if ( v62 >= v55 )
+ v62 -= v55;
+ if ( v64 >= v55 )
+ v64 -= v55;
if ( thisf
- * ((dword_50B9D8_ys[v62] - dword_50B9D8_ys[v61]) * (dword_50BAC8[v60] - dword_50BAC8[v61])
- - (dword_50B9D8_ys[v60] - dword_50B9D8_ys[v61]) * (dword_50BAC8[v62] - dword_50BAC8[v61])) < 0 )
+ * ((dword_50B9D8_ys[v64] - dword_50B9D8_ys[v63]) * (dword_50BAC8[v62] - dword_50BAC8[v63])
+ - (dword_50B9D8_ys[v62] - dword_50B9D8_ys[v63]) * (dword_50BAC8[v64] - dword_50BAC8[v63])) < 0 )
{
- v60 = v78;
- v69 = v78;
+ v62 = v80;
+ v71 = v80;
}
else
{
- v60 = v69;
- v63 = v69;
- if ( v69 < v53 || (v63 = v69 - v53, v69 - v53 < v53) )
+ v62 = v71;
+ v65 = v71;
+ if ( v71 < v55 || (v65 = v71 - v55, v71 - v55 < v55) )
{
- memcpy(&dword_50B9D8_ys[v63], &dword_50B9D8_ys[v63 + 1], 4 * ((unsigned int)(4 * (v53 - v63)) >> 2));
- memcpy(&dword_50BAC8[v63], &dword_50BAC8[v63 + 1], 4 * ((unsigned int)(4 * (v53 - v63)) >> 2));
+ memcpy(&dword_50B9D8_ys[v65], &dword_50B9D8_ys[v65 + 1], 4 * ((unsigned int)(4 * (v55 - v65)) >> 2));
+ memcpy(&dword_50BAC8[v65], &dword_50BAC8[v65 + 1], 4 * ((unsigned int)(4 * (v55 - v65)) >> 2));
}
- --v53;
+ --v55;
}
}
- while ( v60 - 1 < v53 );
- }
- dword_50BAC8[v53] = dword_50BAC8[0];
- dword_50B9D8_ys[v53] = dword_50B9D8_ys[0];
- }
- return v53;
+ while ( v62 - 1 < v55 );
+ }
+ dword_50BAC8[v55] = dword_50BAC8[0];
+ dword_50B9D8_ys[v55] = dword_50B9D8_ys[0];
+ }
+ return v55;
}
diff -r c83d06692295 -r c0cf9393af64 mm7_2.cpp
--- a/mm7_2.cpp Mon Oct 22 09:20:49 2012 +0600
+++ b/mm7_2.cpp Mon Oct 29 09:28:08 2012 +0600
@@ -166,11 +166,11 @@
v14 = pDialogueWindow;
v15 = 80 - v11 * (100 - (signed int)pOutString) / v11 - (signed int)pOutString;
v16 = v15 - HIDWORD(v15);
- LODWORD(v15) = pDialogueWindow->field_38;
- HIDWORD(v15) = v15 + pDialogueWindow->field_28;
+ LODWORD(v15) = pDialogueWindow->pStartingPosActiveItem;
+ HIDWORD(v15) = v15 + pDialogueWindow->pNumPresenceButton;
v17 = (v16 >> 1) - v29 / 2 + 158;
- v18 = -pDialogueWindow->field_28 < 0;
- pOutString = (GUIFont *)pDialogueWindow->field_38;
+ v18 = -pDialogueWindow->pNumPresenceButton < 0;
+ pOutString = (GUIFont *)pDialogueWindow->pStartingPosActiveItem;
if ( v18 ^ __OFSUB__((int)v15, HIDWORD(v15)) )
{
v31 = 2;
@@ -186,7 +186,7 @@
v17 = v23 + v22 - 1;
v21->uW = v17;
v24 = v30;
- if ( pDialogueWindow->field_2C_focus_id != v31 )
+ if ( pDialogueWindow->pCurrentPosActiveItem != v31 )
v24 = v28;
_this.DrawText2(pFontArrus, 0, v23, v24, *v19, 3u);
v14 = pDialogueWindow;
@@ -194,7 +194,7 @@
++v19;
pOutString = (GUIFont *)((char *)pOutString + 1);
}
- while ( (signed int)pOutString < pDialogueWindow->field_28 + pDialogueWindow->field_38 );
+ while ( (signed int)pOutString < pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem );
}
}
else
@@ -403,11 +403,11 @@
return;
}
v8 = v14[0];
- if ( pDialogueWindow->field_2C_focus_id != 2 )
+ if ( pDialogueWindow->pCurrentPosActiveItem != 2 )
v8 = v13[0];
_this.DrawText2(pFontArrus, 0, 0x92u, v8, pGlobalTXT_LocalizationStrings[60], 3u);
v9 = v14[0];
- if ( pDialogueWindow->field_2C_focus_id != 3 )
+ if ( pDialogueWindow->pCurrentPosActiveItem != 3 )
v9 = v13[0];
_this.DrawText2(pFontArrus, 0, 0xB0u, v9, pGlobalTXT_LocalizationStrings[244], 3u);
}
@@ -662,8 +662,8 @@
pOutString = (GUIFont *)(v9 * (100 - v85->GetMerchant()) / 100);
if ( (signed int)pOutString < v9 / 3 )
pOutString = (GUIFont *)(v9 / 3);
- v10 = v8->field_38;
- v11 = v10 + v8->field_28;
+ v10 = v8->pStartingPosActiveItem;
+ v11 = v10 + v8->pNumPresenceButton;
v86 = 0;
if ( (signed int)v10 < v11 )
{
@@ -678,7 +678,7 @@
}
++v10;
}
- while ( (signed int)v10 < v8->field_38 + v8->field_28 );
+ while ( (signed int)v10 < v8->pStartingPosActiveItem + v8->pNumPresenceButton );
if ( v86 )
{
sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[401], pOutString);
@@ -687,9 +687,9 @@
if ( (149 - v89) / v86 > 32 )
pOutString = (GUIFont *)32;
v14 = (149 - v86 * (signed int)pOutString - v89) / 2 - (signed int)pOutString / 2 + 162;
- v89 = v8->field_38;
+ v89 = v8->pStartingPosActiveItem;
v83 = v14;
- if ( v89 < v89 + v8->field_28 )
+ if ( v89 < v89 + v8->pNumPresenceButton )
{
v86 = 2;
do
@@ -716,13 +716,13 @@
v16->uW = v22;
v83 = v22;
v23 = v84[0];
- if ( pDialogueWindow->field_2C_focus_id != v21 )
+ if ( pDialogueWindow->pCurrentPosActiveItem != v21 )
v23 = v81;
v79.DrawText2(pFontArrus, 0, v20, v23, Str[1], 3u);
}
- v24 = v8->field_28;
+ v24 = v8->pNumPresenceButton;
++v89;
- v25 = v8->field_38 + v24;
+ v25 = v8->pStartingPosActiveItem + v24;
++v86;
}
while ( v89 < v25 );
@@ -768,7 +768,7 @@
if ( !sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() )
return;
v28 = *(int *)v84;
- if ( pDialogueWindow->field_2C_focus_id != 2 )
+ if ( pDialogueWindow->pCurrentPosActiveItem != 2 )
v28 = v81;
sprintfex(&Dest, format_4E2DC8, v28);
sprintfex(pTmpBuf2, pGlobalTXT_LocalizationStrings[178], pOutString);
@@ -776,7 +776,7 @@
v90 = pFontArrus->CalcTextHeight(&Dest, &v79, 0, 0);
strcat(&Dest, "\n \n");
v29 = *(int *)v84;
- if ( pDialogueWindow->field_2C_focus_id != 3 )
+ if ( pDialogueWindow->pCurrentPosActiveItem != 3 )
v29 = v81;
sprintfex(&a1, format_4E2DC8, v29);
sprintfex(pTmpBuf2,
@@ -788,7 +788,7 @@
v88 = pFontArrus->CalcTextHeight(&a1, &v79, 0, 0);
strcat(&a1, "\n \n");
v30 = *(int *)v84;
- if ( pDialogueWindow->field_2C_focus_id != 4 )
+ if ( pDialogueWindow->pCurrentPosActiveItem != 4 )
v30 = v81;
sprintfex(&v77, format_4E2DC8, v30);
strcat(&v77, pGlobalTXT_LocalizationStrings[160]);
@@ -800,7 +800,7 @@
if ( v31 >= 108 && v31 <= 120 )
{
v32 = *(int *)v84;
- if ( pDialogueWindow->field_2C_focus_id != 5 )
+ if ( pDialogueWindow->pCurrentPosActiveItem != 5 )
v32 = v81;
sprintfex(&v75, format_4E2DC8, v32);
strcat(&v75, pGlobalTXT_LocalizationStrings[611]);
@@ -808,11 +808,11 @@
}
v33 = pDialogueWindow;
Str[1] = (char *)pDialogueWindow;
- v34 = pDialogueWindow->field_38;
- v35 = v34 + pDialogueWindow->field_28;
+ v34 = pDialogueWindow->pStartingPosActiveItem;
+ v35 = v34 + pDialogueWindow->pNumPresenceButton;
v36 = LOBYTE(pFontArrus->uFontHeight) - 3;
- v37 = -pDialogueWindow->field_28 < 0;
- pOutString = (GUIFont *)pDialogueWindow->field_38;
+ v37 = -pDialogueWindow->pNumPresenceButton < 0;
+ pOutString = (GUIFont *)pDialogueWindow->pStartingPosActiveItem;
if ( !(v37 ^ __OFSUB__(v34, v35)) )
{
LABEL_75:
@@ -858,9 +858,9 @@
LABEL_73:
v38->uW = v41;
}
- v47 = v33->field_38;
+ v47 = v33->pStartingPosActiveItem;
pOutString = (GUIFont *)((char *)pOutString + 1);
- if ( (signed int)pOutString >= v33->field_28 + v47 )
+ if ( (signed int)pOutString >= v33->pNumPresenceButton + v47 )
goto LABEL_75;
}
v42 = v90 + v88 + 2 * v36 + 146;
@@ -890,11 +890,11 @@
v51 = pDialogueWindow;
v52 = 174 - v48 * (174 - (signed int)pOutString) / v48 - (signed int)pOutString;
v53 = v52 - HIDWORD(v52);
- LODWORD(v52) = pDialogueWindow->field_38;
- HIDWORD(v52) = v52 + pDialogueWindow->field_28;
+ LODWORD(v52) = pDialogueWindow->pStartingPosActiveItem;
+ HIDWORD(v52) = v52 + pDialogueWindow->pNumPresenceButton;
v54 = (v53 >> 1) - v86 / 2 + 138;
- v37 = -pDialogueWindow->field_28 < 0;
- v89 = pDialogueWindow->field_38;
+ v37 = -pDialogueWindow->pNumPresenceButton < 0;
+ v89 = pDialogueWindow->pStartingPosActiveItem;
if ( v37 ^ __OFSUB__((int)v52, HIDWORD(v52)) )
{
v85 = (Player *)2;
@@ -911,7 +911,7 @@
v54 = v57 + v58 - 1;
v55->uW = v54;
v60 = v84[0];
- if ( (Player *)pDialogueWindow->field_2C_focus_id != v59 )
+ if ( (Player *)pDialogueWindow->pCurrentPosActiveItem != v59 )
v60 = v81;
v79.DrawText2(pFontArrus, 0, v58, v60, *(const char **)&pOutString->cFirstChar, 3u);
v51 = pDialogueWindow;
@@ -919,7 +919,7 @@
pOutString = (GUIFont *)((char *)pOutString + 4);
++v89;
}
- while ( v89 < pDialogueWindow->field_28 + pDialogueWindow->field_38 );
+ while ( v89 < pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem );
}
}
}
@@ -1144,11 +1144,11 @@
while ( (signed int)v66 < (signed int)&pShopOptions[3] );
v68 = pDialogueWindow;
v109 = (const char **)((174 - v65) / 3);
- result = (char *)pDialogueWindow->field_38;
- v69 = (int)&result[pDialogueWindow->field_28];
+ result = (char *)pDialogueWindow->pStartingPosActiveItem;
+ v69 = (int)&result[pDialogueWindow->pNumPresenceButton];
v70 = (3 * (58 - (signed int)v109) - v65) / 2 - (174 - v65) / 3 / 2 + 138;
- v20 = -pDialogueWindow->field_28 < 0;
- v106.y = pDialogueWindow->field_38;
+ v20 = -pDialogueWindow->pNumPresenceButton < 0;
+ v106.y = pDialogueWindow->pStartingPosActiveItem;
if ( v20 ^ __OFSUB__((int)result, (int)v69) )
{
_this = (Player *)2;
@@ -1165,14 +1165,14 @@
v70 = v73 + v74 - 1;
v71->uW = v70;
v76 = v104;
- if ( (Player *)pDialogueWindow->field_2C_focus_id != v75 )
+ if ( (Player *)pDialogueWindow->pCurrentPosActiveItem != v75 )
v76 = v105;
v101.DrawText2(pFontArrus, 0, v74, v76, *(const char **)v108, 3u);
v68 = pDialogueWindow;
_this = (Player *)((char *)_this + 1);
v108 += 4;
++v106.y;
- result = (char *)(pDialogueWindow->field_28 + pDialogueWindow->field_38);
+ result = (char *)(pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem);
}
while ( v106.y < (signed int)result );
}
@@ -1195,8 +1195,8 @@
v108 = v32 * (100 - _this->GetMerchant()) / 100;
if ( v108 < v32 / 3 )
v108 = v32 / 3;
- v33 = v30->field_38;
- v34 = v33 + v30->field_28;
+ v33 = v30->pStartingPosActiveItem;
+ v34 = v33 + v30->pNumPresenceButton;
v109 = 0;
if ( (signed int)v33 >= v34 )
goto LABEL_105;
@@ -1211,7 +1211,7 @@
}
++v33;
}
- while ( (signed int)v33 < v30->field_28 + v30->field_38 );
+ while ( (signed int)v33 < v30->pNumPresenceButton + v30->pStartingPosActiveItem );
if ( !v109 )
{
LABEL_105:
@@ -1232,11 +1232,11 @@
v108 = (149 - v106.y) / (signed int)v109;
if ( (149 - v106.y) / (signed int)v109 > 32 )
v108 = 32;
- result = (char *)v30->field_38;
+ result = (char *)v30->pStartingPosActiveItem;
v37 = (149 - (signed int)v109 * v108 - v106.y) / 2 - v108 / 2 + 162;
v106.y = (LONG)result;
v103 = v37;
- if ( (signed int)result < (signed int)&result[v30->field_28] )
+ if ( (signed int)result < (signed int)&result[v30->pNumPresenceButton] )
{
v109 = (const char **)2;
do
@@ -1263,13 +1263,13 @@
v39->uW = v45;
v103 = v45;
v46 = v104;
- if ( (const char **)pDialogueWindow->field_2C_focus_id != v44 )
+ if ( (const char **)pDialogueWindow->pCurrentPosActiveItem != v44 )
v46 = v105;
v101.DrawText2(pFontArrus, 0, v43, v46, Str, 3u);
}
- v47 = v30->field_38;
+ v47 = v30->pStartingPosActiveItem;
++v106.y;
- result = (char *)(v30->field_28 + v47);
+ result = (char *)(v30->pNumPresenceButton + v47);
v109 = (const char **)((char *)v109 + 1);
}
while ( v106.y < (signed int)result );
@@ -1345,11 +1345,11 @@
while ( (signed int)v15 < (signed int)&unk_F8B1C8 );
v17 = pDialogueWindow;
v103 = (174 - v14) / 4;
- result = (char *)pDialogueWindow->field_38;
- v18 = (int)&result[pDialogueWindow->field_28];
+ result = (char *)pDialogueWindow->pStartingPosActiveItem;
+ v18 = (int)&result[pDialogueWindow->pNumPresenceButton];
v19 = (174 - 4 * (174 - v14) / 4 - v14) / 2 - (174 - v14) / 4 / 2 + 138;
- v20 = -pDialogueWindow->field_28 < 0;
- _this = (Player *)pDialogueWindow->field_38;
+ v20 = -pDialogueWindow->pNumPresenceButton < 0;
+ _this = (Player *)pDialogueWindow->pStartingPosActiveItem;
if ( v20 ^ __OFSUB__((int)result, v18) )
{
v108 = 2;
@@ -1366,14 +1366,14 @@
v19 = v24 + v23 - 1;
v21->uW = v19;
v26 = v104;
- if ( pDialogueWindow->field_2C_focus_id != v25 )
+ if ( pDialogueWindow->pCurrentPosActiveItem != v25 )
v26 = v105;
v101.DrawText2(pFontArrus, 0, v24, v26, *v109, 3u);
v17 = pDialogueWindow;
++v108;
++v109;
_this = (Player *)((char *)_this + 1);
- result = (char *)(pDialogueWindow->field_28 + pDialogueWindow->field_38);
+ result = (char *)(pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem);
}
while ( (signed int)_this < (signed int)result );
}
@@ -1762,11 +1762,11 @@
while ( (signed int)v73 < (signed int)&unk_F8B1C8 );
v75 = pDialogueWindow;
Str = (char *)((174 - v72) / 4);
- result = (POINT *)pDialogueWindow->field_38;
- v76 = (int)((char *)result + pDialogueWindow->field_28);
+ result = (POINT *)pDialogueWindow->pStartingPosActiveItem;
+ v76 = (int)((char *)result + pDialogueWindow->pNumPresenceButton);
v77 = (174 - 4 * (174 - v72) / 4 - v72) / 2 - (174 - v72) / 4 / 2 + 138;
- v28 = -pDialogueWindow->field_28 < 0;
- v112 = pDialogueWindow->field_38;
+ v28 = -pDialogueWindow->pNumPresenceButton < 0;
+ v112 = pDialogueWindow->pStartingPosActiveItem;
if ( v28 ^ __OFSUB__((int)result, v76) )
{
_this = (Player *)2;
@@ -1783,14 +1783,14 @@
v77 = v81 + v80 - 1;
v78->uW = v77;
v83 = v106;
- if ( (Player *)pDialogueWindow->field_2C_focus_id != v82 )
+ if ( (Player *)pDialogueWindow->pCurrentPosActiveItem != v82 )
v83 = v108;
v104.DrawText2(pFontArrus, 0, v81, v83, *v111, 3u);
v75 = pDialogueWindow;
_this = (Player *)((char *)_this + 1);
++v111;
++v112;
- result = (POINT *)(pDialogueWindow->field_28 + pDialogueWindow->field_38);
+ result = (POINT *)(pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem);
}
while ( (signed int)v112 < (signed int)result );
}
@@ -1885,11 +1885,11 @@
while ( (signed int)v23 < (signed int)&pShopOptions[2] );
Str = (char *)((174 - v22) / 2);
v25 = pDialogueWindow;
- result = (POINT *)pDialogueWindow->field_38;
- v26 = (int)((char *)result + pDialogueWindow->field_28);
+ result = (POINT *)pDialogueWindow->pStartingPosActiveItem;
+ v26 = (int)((char *)result + pDialogueWindow->pNumPresenceButton);
v27 = (2 * (87 - (174 - v22) / 2) - v22) / 2 - (174 - v22) / 2 / 2 + 138;
- v28 = -pDialogueWindow->field_28 < 0;
- v112 = pDialogueWindow->field_38;
+ v28 = -pDialogueWindow->pNumPresenceButton < 0;
+ v112 = pDialogueWindow->pStartingPosActiveItem;
if ( v28 ^ __OFSUB__((int)result, v26) )
{
_this = (Player *)2;
@@ -1907,14 +1907,14 @@
v29->uW = v34;
v27 = v34;
v35 = v106;
- if ( (Player *)pDialogueWindow->field_2C_focus_id != v33 )
+ if ( (Player *)pDialogueWindow->pCurrentPosActiveItem != v33 )
v35 = v108;
v104.DrawText2(pFontArrus, 0, v32, v35, *v111, 3u);
v25 = pDialogueWindow;
_this = (Player *)((char *)_this + 1);
++v111;
++v112;
- result = (POINT *)(pDialogueWindow->field_28 + pDialogueWindow->field_38);
+ result = (POINT *)(pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem);
}
while ( (signed int)v112 < (signed int)result );
}
@@ -1935,8 +1935,8 @@
v111 = (const char **)(v5 * (100 - _this->GetMerchant()) / 100);
if ( (signed int)v111 < v5 / 3 )
v111 = (const char **)(v5 / 3);
- v6 = v2->field_38;
- v7 = v6 + v2->field_28;
+ v6 = v2->pStartingPosActiveItem;
+ v7 = v6 + v2->pNumPresenceButton;
v114 = 0;
if ( (signed int)v6 < v7 )
{
@@ -1951,7 +1951,7 @@
}
++v6;
}
- while ( (signed int)v6 < v2->field_28 + v2->field_38 );
+ while ( (signed int)v6 < v2->pNumPresenceButton + v2->pStartingPosActiveItem );
if ( v114 )
{
sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[401], v111);
@@ -1959,11 +1959,11 @@
v111 = (const char **)((signed int)(149 - v112) / v114);
if ( (signed int)(149 - v112) / v114 > 32 )
v111 = (const char **)32;
- result = (POINT *)v2->field_38;
+ result = (POINT *)v2->pStartingPosActiveItem;
v10 = (signed int)(149 - v114 * (int)v111 - v112) / 2 - (signed int)v111 / 2 + 162;
v112 = (unsigned int)result;
v105 = v10;
- if ( (signed int)result < (signed int)((char *)result + v2->field_28) )
+ if ( (signed int)result < (signed int)((char *)result + v2->pNumPresenceButton) )
{
v114 = 2;
do
@@ -1990,13 +1990,13 @@
v12->uW = v18;
v105 = v18;
v19 = v106;
- if ( pDialogueWindow->field_2C_focus_id != v17 )
+ if ( pDialogueWindow->pCurrentPosActiveItem != v17 )
v19 = v108;
v104.DrawText2(pFontArrus, 0, v16, v19, Str, 3u);
}
- v20 = v2->field_38;
+ v20 = v2->pStartingPosActiveItem;
++v112;
- result = (POINT *)(v2->field_28 + v20);
+ result = (POINT *)(v2->pNumPresenceButton + v20);
++v114;
}
while ( (signed int)v112 < (signed int)result );
@@ -2486,11 +2486,11 @@
while ( (signed int)v81 < (signed int)&pShopOptions[3] );
v83 = pDialogueWindow;
v152 = (174 - v80) / 3;
- v84 = pDialogueWindow->field_38;
- v85 = v84 + pDialogueWindow->field_28;
+ v84 = pDialogueWindow->pStartingPosActiveItem;
+ v85 = v84 + pDialogueWindow->pNumPresenceButton;
v86 = (3 * (58 - v152) - v80) / 2 - v152 / 2 + 138;
- v24 = -pDialogueWindow->field_28 < 0;
- _this = (Player *)pDialogueWindow->field_38;
+ v24 = -pDialogueWindow->pNumPresenceButton < 0;
+ _this = (Player *)pDialogueWindow->pStartingPosActiveItem;
if ( v24 ^ __OFSUB__(v84, v85) )
{
v153 = 2;
@@ -2506,7 +2506,7 @@
v86 = v90 + v89 - 1;
v88->uW = v86;
v92 = v147;
- if ( pDialogueWindow->field_2C_focus_id != v91 )
+ if ( pDialogueWindow->pCurrentPosActiveItem != v91 )
v92 = v148;
v144.DrawText2(pFontArrus, 0, v90, v92, *v79, 3u);
v83 = pDialogueWindow;
@@ -2514,7 +2514,7 @@
++v79;
_this = (Player *)((char *)_this + 1);
}
- while ( (signed int)_this < pDialogueWindow->field_28 + pDialogueWindow->field_38 );
+ while ( (signed int)_this < pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem );
}
return;
}
@@ -2529,8 +2529,8 @@
_this = (Player *)(v38 * (100 - v0->GetMerchant()) / 100);
if ( (signed int)_this < v38 / 3 )
_this = (Player *)(v38 / 3);
- v39 = v37->field_38;
- v40 = v37->field_28;
+ v39 = v37->pStartingPosActiveItem;
+ v40 = v37->pNumPresenceButton;
v153 = 0;
if ( (signed int)v39 < (signed int)(v39 + v40) )
{
@@ -2545,7 +2545,7 @@
}
++v39;
}
- while ( (signed int)v39 < v37->field_28 + v37->field_38 );
+ while ( (signed int)v39 < v37->pNumPresenceButton + v37->pStartingPosActiveItem );
if ( v153 )
{
sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[401], _this);
@@ -2554,9 +2554,9 @@
if ( (149 - v152) / v153 > 32 )
_this = (Player *)32;
v43 = (149 - v153 * (signed int)_this - v152) / 2 - (signed int)_this / 2 + 162;
- v152 = v37->field_38;
+ v152 = v37->pStartingPosActiveItem;
v146 = v43;
- if ( v152 < v152 + v37->field_28 )
+ if ( v152 < v152 + v37->pNumPresenceButton )
{
v153 = 2;
do
@@ -2583,13 +2583,13 @@
v45->uW = v51;
v146 = v51;
v52 = v147;
- if ( pDialogueWindow->field_2C_focus_id != v50 )
+ if ( pDialogueWindow->pCurrentPosActiveItem != v50 )
v52 = v148;
v144.DrawText2(pFontArrus, 0, v49, v52, Str, 3u);
}
- v53 = v37->field_38;
+ v53 = v37->pStartingPosActiveItem;
++v152;
- v54 = v37->field_28 + v53;
+ v54 = v37->pNumPresenceButton + v53;
++v153;
}
while ( v152 < v54 );
@@ -2816,11 +2816,11 @@
while ( (signed int)v18 < (signed int)&unk_F8B1C8 );
v20 = pDialogueWindow;
v146 = (174 - v17) / 4;
- v21 = pDialogueWindow->field_38;
- v22 = v21 + pDialogueWindow->field_28;
+ v21 = pDialogueWindow->pStartingPosActiveItem;
+ v22 = v21 + pDialogueWindow->pNumPresenceButton;
v23 = (174 - 4 * (174 - v17) / 4 - v17) / 2 - (174 - v17) / 4 / 2 + 138;
- v24 = -pDialogueWindow->field_28 < 0;
- v152 = pDialogueWindow->field_38;
+ v24 = -pDialogueWindow->pNumPresenceButton < 0;
+ v152 = pDialogueWindow->pStartingPosActiveItem;
if ( v24 ^ __OFSUB__(v21, v22) )
{
_this = (Player *)2;
@@ -2836,7 +2836,7 @@
v23 = v28 + v27 - 1;
v26->uW = v23;
v30 = v147;
- if ( (Player *)pDialogueWindow->field_2C_focus_id != v29 )
+ if ( (Player *)pDialogueWindow->pCurrentPosActiveItem != v29 )
v30 = v148;
v144.DrawText2(pFontArrus, 0, v28, v30, *v16, 3u);
v20 = pDialogueWindow;
@@ -2844,7 +2844,7 @@
++v16;
++v152;
}
- while ( v152 < pDialogueWindow->field_28 + pDialogueWindow->field_38 );
+ while ( v152 < pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem );
}
}
return;
@@ -3160,8 +3160,8 @@
pGlobalTXT_LocalizationStrings[34],// "Cancel"
(Texture *)(uTextureID_506438 != -1 ? &pIcons_LOD->pTextures[uTextureID_506438] : 0),
0);
- pDialogueWindow->CreateButton(0, 0, 0, 0, 1, 0, 0x51u, 0, 0, nullstring, 0);
- pDialogueWindow->CreateButton(480u, 160u, 140u, 30u, 1, 0, 0, 0x53u, 0, nullstring, 0);
+ pDialogueWindow->CreateButton(0, 0, 0, 0, 1, 0, 0x51u, 0, 0, "", 0);
+ pDialogueWindow->CreateButton(480u, 160u, 140u, 30u, 1, 0, 0, 0x53u, 0, "", 0);
pDialogueWindow->_41D08F(1, 1, 0, 2);
dword_F8B19C = -1;
v0 = (int)((char *)ptr_507BC0->ptr_1C - 102);
@@ -3273,8 +3273,8 @@
{
uDialogueType = 90;
pParty->vPosition.x = 3849;
- pParty->vPosition.z = 5770;
- pParty->vPosition.y = 1;
+ pParty->vPosition.y = 5770;
+ pParty->vPosition.z = 1;
pParty->uFallStartY = 1;
pParty->sRotationY = 512;
pParty->sRotationX = 0;
@@ -3313,10 +3313,10 @@
pGlobalTXT_LocalizationStrings[79],
(Texture *)(uTextureID_506438 != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_506438] : 0),
0);
- pDialogueWindow->CreateButton(0x1E0u, 0xA0u, 0x8Cu, 0x1Eu, 1, 0, 0x88u, 0x55u, 0, nullstring, 0);
- pDialogueWindow->CreateButton(0x1E0u, 0xBEu, 0x8Cu, 0x1Eu, 1, 0, 0x88u, 0x56u, 0, nullstring, 0);
- pDialogueWindow->CreateButton(0x1E0u, 0xDCu, 0x8Cu, 0x1Eu, 1, 0, 0x88u, 0x57u, 0, nullstring, 0);
- pDialogueWindow->CreateButton(0x1E0u, 0xFAu, 0x8Cu, 0x1Eu, 1, 0, 0x88u, 0x58u, 0, nullstring, 0);
+ pDialogueWindow->CreateButton(0x1E0u, 0xA0u, 0x8Cu, 0x1Eu, 1, 0, 0x88u, 0x55u, 0, "", 0);
+ pDialogueWindow->CreateButton(0x1E0u, 0xBEu, 0x8Cu, 0x1Eu, 1, 0, 0x88u, 0x56u, 0, "", 0);
+ pDialogueWindow->CreateButton(0x1E0u, 0xDCu, 0x8Cu, 0x1Eu, 1, 0, 0x88u, 0x57u, 0, "", 0);
+ pDialogueWindow->CreateButton(0x1E0u, 0xFAu, 0x8Cu, 0x1Eu, 1, 0, 0x88u, 0x58u, 0, "", 0);
pDialogueWindow->_41D08F(4, 1, 0, 1);
}
}
@@ -3440,7 +3440,7 @@
window.uFrameWidth = 460;
window.uFrameZ = 452;
v0 = pFontArrus->CalcTextHeight(pGlobalTXT_LocalizationStrings[575], &window, 13, 0) + 7;
- pRenderer->SetGameRenderStates();
+ pRenderer->BeginSceneD3D();
if ( uCurrentlyLoadedLevelType == LEVEL_Indoor )
pIndoor->Draw();
@@ -3450,13 +3450,12 @@
pRenderer->DrawBillboards_And_MaybeRenderSpecialEffects_And_EndScene();
pRenderer->BeginScene();
if ( pRenderer->pRenderD3D )
- pRenderer->FillRect2(
- 1,
+ pRenderer->FillRectFast(
pViewport->uViewportX,
pViewport->uViewportY,
pViewport->uViewportZ - pViewport->uViewportX,
pViewport->uViewportW - pViewport->uViewportY + 1,
- LOWORD(pRenderer->uTargetGMask) | LOWORD(pRenderer->uTargetBMask));
+ pRenderer->uTargetGMask | pRenderer->uTargetBMask);
auto pTex = (uTextureID_Leather != -1 ? &pIcons_LOD->pTextures[uTextureID_Leather] : nullptr);
pRenderer->_4A6A68(
@@ -3471,8 +3470,8 @@
pRenderer->EndScene();
pRenderer->Present();
pParty->vPosition.x = 3849;
- pParty->vPosition.z = 5770;
- pParty->vPosition.y = 1;
+ pParty->vPosition.y = 5770;
+ pParty->vPosition.z = 1;
pParty->uFallStartY = 1;
pParty->sRotationY = 512;
pParty->sRotationX = 0;
@@ -3707,7 +3706,7 @@
pGlobalTXT_LocalizationStrings[74],
(Texture *)(uTextureID_506438 != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_506438] : 0),
0);
- return pDialogueWindow->CreateButton(8u, 8u, 0x1C2u, 0x140u, 1, 0, 0x51u, 0, 0, nullstring, 0);
+ return pDialogueWindow->CreateButton(8u, 8u, 0x1C2u, 0x140u, 1, 0, 0x51u, 0, 0, "", 0);
}
//----- (004BCACC) --------------------------------------------------------
@@ -3773,7 +3772,7 @@
v1 = 0;
v2 = a1;
v55 = a1;
- if ( !pDialogueWindow->field_28 )
+ if ( !pDialogueWindow->pNumPresenceButton )
return;
pRenderer->ClearZBuffer(0, 479);
v3 = dword_F8B198;
@@ -3823,7 +3822,7 @@
pGlobalTXT_LocalizationStrings[74],// "End Conversation"
(Texture *)(uTextureID_BUTTDESC2 != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_BUTTDESC2] : 0),
v1);
- pDialogueWindow->CreateButton(8u, 8u, 0x1C2u, 0x140u, 1, v1, 0x51u, v1, v1, nullstring, (Texture *)v1);
+ pDialogueWindow->CreateButton(8u, 8u, 0x1C2u, 0x140u, 1, v1, 0x51u, v1, v1, "", (Texture *)v1);
LABEL_10:
v3 = dword_F8B198;
v8 = ptr_507BC0;
@@ -4528,7 +4527,7 @@
v0 = pPlayers[uActiveCharacter];
v77 = pPlayers[uActiveCharacter];
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 14 )
+ if ( pCurrentScreen == 14 )
goto LABEL_73;
if ( !sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() )
{
@@ -7547,7 +7546,7 @@
char *v45; // [sp-4h] [bp-ECh]@9
char Str; // [sp+Ch] [bp-DCh]@60
char Str2; // [sp+2Ch] [bp-BCh]@29
- char v48; // [sp+A4h] [bp-44h]@52
+ unsigned int uFaceID; // [sp+A4h] [bp-44h]@52
void *Src; // [sp+A8h] [bp-40h]@50
int v50; // [sp+ACh] [bp-3Ch]@47
char Source; // [sp+B0h] [bp-38h]@20
@@ -7769,7 +7768,7 @@
v37 = pIndoor->GetSector(v55, a4, v36);
if ( v37 == v54 )
{
- v38 = _46CEC3_get_floor_level(v55, a4, a3, v37, (int *)&v48);
+ v38 = _46CEC3_get_floor_level(v55, a4, a3, v37, &uFaceID);
v39 = v38;
if ( v38 != -30000 )
{
@@ -7814,7 +7813,7 @@
const char *v15; // [sp-4h] [bp-24h]@2
unsigned __int16 v16; // [sp+0h] [bp-20h]@1
int v17; // [sp+4h] [bp-1Ch]@1
- int v18; // [sp+8h] [bp-18h]@16
+ unsigned int uFaceID; // [sp+8h] [bp-18h]@16
int v19; // [sp+Ch] [bp-14h]@16
size_t v20; // [sp+10h] [bp-10h]@6
int v21; // [sp+14h] [bp-Ch]@14
@@ -7853,9 +7852,9 @@
if ( v20 != uNumActors || (result = uNumActors + 1, (signed int)(uNumActors + 1) < 500) )
{
v21 = 0;
- v22 = pParty->vPosition.y;
+ v22 = pParty->vPosition.z;
if ( uCurrentlyLoadedLevelType == LEVEL_Indoor )
- v21 = pIndoor->GetSector(pParty->vPosition.x, pParty->vPosition.z, pParty->vPosition.y);
+ v21 = pIndoor->GetSector(pParty->vPosition.x, pParty->vPosition.y, pParty->vPosition.z);
v6 = &pActors[v20];
v7 = (char *)&pMonsterStats->pInfos[v23 + 1];
v19 = (((uCurrentlyLoadedLevelType != LEVEL_Outdoor) - 1) & 0x40) + 64;
@@ -7874,10 +7873,10 @@
v6->uMovementSpeed = v9;
v10 = rand() % 2048;
v11 = ((unsigned __int64)(stru_5C6E00->SinCos(v10) * (signed __int64)v19) >> 16) + pParty->vPosition.x;
- v18 = stru_5C6E00->SinCos(v10 - stru_5C6E00->uIntegerHalfPi);
- v23 = (unsigned __int64)(v18 * (signed __int64)v19) >> 16;
- v12 = pParty->vPosition.z;
- v13 = (unsigned __int64)(v18 * (signed __int64)v19) >> 16;
+ uFaceID = stru_5C6E00->SinCos(v10 - stru_5C6E00->uIntegerHalfPi);
+ v23 = (unsigned __int64)(uFaceID * (signed __int64)v19) >> 16;
+ v12 = pParty->vPosition.y;
+ v13 = (unsigned __int64)(uFaceID * (signed __int64)v19) >> 16;
v6->vInitialPosition.x = v11;
v14 = v13 + v12;
LOWORD(v12) = v22;
@@ -7894,14 +7893,14 @@
v6->uAlly = 9999;
v6->uGroup = 0;
v6->uCurrentActionTime = 0;
- v6->uAIState = 17;
+ v6->uAIState = Summoned;
v6->uCurrentActionLength = 256;
v6->UpdateAnimation();
if ( uCurrentlyLoadedLevelType == LEVEL_Outdoor
- || (v22 = pParty->vPosition.y,
- result = pIndoor->GetSector(v11, v14, pParty->vPosition.y),
+ || (v22 = pParty->vPosition.z,
+ result = pIndoor->GetSector(v11, v14, pParty->vPosition.z),
result == v21)
- && (result = _46CEC3_get_floor_level(v11, v14, v22, result, &v18), result != -30000)
+ && (result = _46CEC3_get_floor_level(v11, v14, v22, result, &uFaceID), result != -30000)
&& (result = abs(result - v22), result <= 1024) )
{
if ( v20 == uNumActors )
@@ -8369,7 +8368,7 @@
int v22; // [sp+2Ch] [bp-18h]@3
int v23; // [sp+30h] [bp-14h]@11
int v24; // [sp+34h] [bp-10h]@1
- int v25; // [sp+38h] [bp-Ch]@10
+ unsigned int uFaceID; // [sp+38h] [bp-Ch]@10
int v26; // [sp+3Ch] [bp-8h]@11
int v27; // [sp+40h] [bp-4h]@11
@@ -8396,10 +8395,10 @@
if ( uCurrentlyLoadedLevelType == LEVEL_Outdoor )
{
v22 = 0;
- v25 = 0;
+ uFaceID = 0;
while ( 1 )
{
- ++v25;
+ ++uFaceID;
v6 = rand() % 1024 + 512;
v7 = rand() % (signed int)stru_5C6E00->uIntegerDoublePi;
v20 = stru_5C6E00->SinCos(v7);
@@ -8409,14 +8408,14 @@
v23 = (unsigned __int64)(v20 * (signed __int64)v6) >> 16;
v8 = 0;
v19.uIndex = v24;
- v19.vPosition.y = v23 + pParty->vPosition.z;
- v19.vPosition.z = pParty->vPosition.y;
+ v19.vPosition.y = v23 + pParty->vPosition.y;
+ v19.vPosition.z = pParty->vPosition.z;
v26 = 0;
v27 = 0;
v19.vPosition.z = sub_46D49E_prolly_get_world_y_under_party(
v19.vPosition.x,
- v23 + pParty->vPosition.z,
- pParty->vPosition.y,
+ v23 + pParty->vPosition.y,
+ pParty->vPosition.z,
0,
&v26,
&v27,
@@ -8438,12 +8437,12 @@
v22 = 1;
}
LABEL_16:
- v11 = v25 == 100;
- if ( v25 >= 100 )
+ v11 = uFaceID == 100;
+ if ( uFaceID >= 100 )
break;
if ( v22 )
{
- v11 = v25 == 100;
+ v11 = uFaceID == 100;
break;
}
}
@@ -8451,7 +8450,7 @@
else
{
v26 = 0;
- v22 = pIndoor->GetSector(pParty->vPosition.x, pParty->vPosition.z, pParty->vPosition.y);
+ v22 = pIndoor->GetSector(pParty->vPosition.x, pParty->vPosition.y, pParty->vPosition.z);
do
{
++v26;
@@ -8465,17 +8464,17 @@
v16 = stru_5C6E00->SinCos(v14 - stru_5C6E00->uIntegerHalfPi);
v20 = v16;
v23 = (unsigned __int64)(v16 * (signed __int64)v12) >> 16;
- v19.vPosition.y = v23 + pParty->vPosition.z;
- v19.vPosition.z = pParty->vPosition.y;
+ v19.vPosition.y = v23 + pParty->vPosition.y;
+ v19.vPosition.z = pParty->vPosition.z;
v19.uIndex = v24;
- v17 = pIndoor->GetSector(v19.vPosition.x, v23 + pParty->vPosition.z, pParty->vPosition.y);
+ v17 = pIndoor->GetSector(v19.vPosition.x, v23 + pParty->vPosition.y, pParty->vPosition.z);
if ( v17 == v22 )
{
- v18 = _46CEC3_get_floor_level(v19.vPosition.x, v19.vPosition.y, v19.vPosition.z, v17, &v25);
+ v18 = _46CEC3_get_floor_level(v19.vPosition.x, v19.vPosition.y, v19.vPosition.z, v17, &uFaceID);
v19.vPosition.z = v18;
if ( v18 != -30000 )
{
- if ( abs(v18 - pParty->vPosition.y) <= 1024 )
+ if ( abs(v18 - pParty->vPosition.z) <= 1024 )
break;
}
}
@@ -9004,111 +9003,109 @@
// return value: angle in integer format (multiplier of Pi/1024)
unsigned int stru193_math::Atan2(int x, int y)
{
- stru193_math *v3; // esi@1
- int v4; // edi@1
- int v5; // ebx@1
- int v6; // eax@1
- signed int v7; // ecx@1
- unsigned int result; // eax@5
- signed int v9; // ebx@14
- signed __int64 v10; // qtt@20
- unsigned int v11; // eax@20
- int v12; // edx@20
- int v13; // ecx@38
- int v14; // eax@38
- unsigned int v15; // eax@43
- signed int v16; // [sp-4h] [bp-10h]@13
-
- v3 = this;
- v4 = y;
- v5 = abs(x);
- v6 = abs(y);
- v7 = 0;
- if ( v5 < 65536 && v6 >> 15 >= v5 )
- x = 0;
- if ( !x )
- {
- result = v3->uIntegerHalfPi;
- if ( y <= 0 )
- result += v3->uIntegerPi;
- return result;
- }
- if ( y )
- {
- if ( x <= 0 )
- {
- x = -x;
- if ( y >= 0 )
- {
- v16 = 4;
- goto LABEL_19;
- }
- v16 = 3;
+ signed int quadrant;
+ __int64 dividend;
+ int quotient;
+ int lowIdx;
+ int highIdx;
+ int angle;
+
+ auto X = x;
+ auto Y = y;
+
+ if ( abs(X) < 65536 )
+ {
+ if ( (abs(Y) >> 15) >= abs(X) )
+ X = 0;
+ }
+
+ if ( !X )
+ {
+ if ( Y > 0 )
+ {
+ return uIntegerHalfPi; //Pi/2
+ }
+ else
+ {
+ return uIntegerHalfPi + uIntegerPi; //3*(Pi/2)
+ }
+ }
+
+ if ( Y )
+ {
+ if ( X < 0 )
+ {
+ X = -X;
+ if ( Y > 0 )
+ {
+ quadrant = 4;
+ }
+ else
+ {
+ quadrant = 3;
+ }
}
else
{
- if ( y >= 0 )
- {
- v9 = 1;
- goto LABEL_20;
- }
- v16 = 2;
- }
- v4 = -y;
-LABEL_19:
- v9 = v16;
-LABEL_20:
- LODWORD(v10) = v4 << 16;
- HIDWORD(v10) = v4 >> 16;
- v11 = v3->uIntegerHalfPi;
- v12 = v10 / x;
- if ( v12 <= v3->pTanTable[(signed int)v3->uIntegerHalfPi >> 1] )
- v11 = (signed int)v3->uIntegerHalfPi >> 1;
- else
- v7 = (signed int)v3->uIntegerHalfPi >> 1;
- if ( v12 <= v3->pTanTable[(signed int)(v7 + v11) >> 1] )
- v11 = (signed int)(v7 + v11) >> 1;
- else
- v7 = (signed int)(v7 + v11) >> 1;
- if ( v12 <= v3->pTanTable[(signed int)(v7 + v11) >> 1] )
- v11 = (signed int)(v7 + v11) >> 1;
- else
- v7 = (signed int)(v7 + v11) >> 1;
- if ( v12 <= v3->pTanTable[(signed int)(v7 + v11) >> 1] )
- v11 = (signed int)(v7 + v11) >> 1;
- else
- v7 = (signed int)(v7 + v11) >> 1;
- if ( v12 <= v3->pTanTable[(signed int)(v7 + v11) >> 1] )
- v11 = (signed int)(v7 + v11) >> 1;
- else
- v7 = (signed int)(v7 + v11) >> 1;
- if ( v12 <= v3->pTanTable[(signed int)(v7 + v11) >> 1] )
- v11 = (signed int)(v7 + v11) >> 1;
- else
- v7 = (signed int)(v7 + v11) >> 1;
- v13 = v7 + 1;
- v14 = v11 - 1;
- while ( v13 < v14 && v12 >= v3->pTanTable[v13] )
- ++v13;
- if ( v9 == 2 )
- {
- v15 = v3->uIntegerDoublePi;
- }
- else
- {
- if ( v9 == 3 )
- return v13 + v3->uIntegerPi;
- if ( v9 != 4 )
- return v13;
- v15 = v3->uIntegerPi;
- }
- return v15 - v13;
- }
- if ( x <= 0 )
- result = v3->uIntegerPi;
- else
- result = 0;
- return result;
+ if ( Y > 0 )
+ {
+ quadrant = 1;
+ }
+ else
+ {
+ quadrant = 2;
+ }
+ }
+
+ if ( Y < 0 )
+ Y = -Y;
+
+ LODWORD(dividend) = Y << 16;
+ HIDWORD(dividend) = Y >> 16;
+ quotient = dividend / X;
+
+ //looks like binary search
+ {
+ int i;
+ highIdx = uIntegerHalfPi;
+ lowIdx = 0;
+
+ for (i = 0; i < 6; ++i)
+ {
+ if (quotient <= pTanTable[(lowIdx + highIdx) / 2])
+ highIdx = (lowIdx + highIdx) / 2;
+ else
+ lowIdx = (lowIdx + highIdx) / 2;
+ }
+ }
+
+ angle = lowIdx + 1;
+ while ( angle < (highIdx - 1) && quotient >= pTanTable[angle] )
+ ++angle;
+
+ switch (quadrant)
+ {
+ case 1: //X > 0, Y > 0
+ return angle;
+
+ case 2: //X > 0, Y < 0
+ return uIntegerDoublePi - angle; //2*Pi - angle
+
+ case 3: //X > 0, Y < 0
+ return uIntegerPi + angle; //Pi + angle
+
+ case 4: //X < 0, Y > 0
+ return uIntegerPi - angle; //Pi - angle
+ }
+
+ //should newer get here
+ return 0;
+ }
+
+ if ( X < 0 ) //Y == 0, X < 0
+ return uIntegerPi;
+
+ return 0;
}
@@ -9314,7 +9311,7 @@
}
//----- (00452C49) --------------------------------------------------------
-void __cdecl InitializeGameText()
+void InitializeGameText()
{
//char *v0; // ebx@1
char *v1; // eax@3
@@ -11237,30 +11234,6 @@
}
-
-
-
-
-
-
-
-//----- (0045BAA5) --------------------------------------------------------
-int __thiscall sub_45BAA5(int _this)
-{
- sub_45BAB6(_this);
- return 0;
-}
-
-//----- (0045BAB6) --------------------------------------------------------
-std::string *__fastcall sub_45BAB6(int a1)
-{
- size_t v1; // eax@1
-
- stru_69BD44 = "effpar03";
- return &stru_69BD44;
-}
-
-
//----- (0045E03A) --------------------------------------------------------
unsigned __int16 *__fastcall MakeScreenshot(signed int width, signed int height)
{
@@ -11302,7 +11275,7 @@
v3 = pPixels;
if ( pRenderer->pRenderD3D )
{
- pRenderer->SetGameRenderStates();
+ pRenderer->BeginSceneD3D();
if ( uCurrentlyLoadedLevelType == LEVEL_Indoor )
{
pIndoor->Draw();
@@ -11745,7 +11718,7 @@
//----- (0046086A) --------------------------------------------------------
-int __cdecl MaybeDoAutosave()
+bool Autosave()
{
int v0; // esi@3
int v1; // eax@4
@@ -11762,7 +11735,7 @@
if ( pVideoPlayer->AnyMovieLoaded() )
pVideoPlayer->Unload();
v0 = 0;
- pSave = pAllocator->AllocNamedChunk(0, 0xF4240u, 0);
+ pSave = pAllocator->AllocNamedChunk(0, 0xF4240, 0);
pNew_LOD->CloseWriteFile();
remove("data\\new.lod");
this_.Reset();
@@ -11772,7 +11745,7 @@
this_.dword_0000A8 = 0;
a3.dword_000018 = 0;
a3.word_00001E = 0;
- strcpy((char *)&a3, "current");
+ strcpy(a3.pFilename, "current");
pNew_LOD->_461492(&this_, &a3, "data\\new.lod");
if ( pNew_LOD->LoadFile("data\\new.lod", 0) )
{
@@ -11808,12 +11781,12 @@
pParty->vPrevPosition.y = v0;
pParty->vPrevPosition.x = 12552;
pParty->vPosition.x = 12552;
- pParty->vPosition.y = v0;
+ pParty->vPosition.z = v0;
pParty->uFallStartY = v0;
pParty->sPrevRotationX = v0;
pParty->sRotationX = v0;
pParty->vPrevPosition.z = 1816;
- pParty->vPosition.z = 1816;
+ pParty->vPosition.y = 1816;
v0 = 1;
pParty->sPrevRotationY = 512;
pParty->sRotationY = 512;
@@ -12138,7 +12111,7 @@
GUIButton *v14; // [sp+0h] [bp-3Ch]@27
GUIWindow *v15; // [sp+4h] [bp-38h]@11
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 0;
+ pCurrentScreen = 0;
if (pAsyncMouse)
pAsyncMouse->Resume();
if ( LOBYTE(pGame->pKeyboardInstance->bUsingAsynKeyboard) && pAsyncKeyboard )
@@ -12208,8 +12181,8 @@
pExit,
0);
- stru_506F20.Release();
- stru_506F20.Load("title.pcx", 0);
+ pTexture_PCX.Release();
+ pTexture_PCX.Load("title.pcx", 0);
SetCurrentMenuID(MENU_MAIN);
SetForegroundWindow(hWnd);
SendMessageW(hWnd, WM_ACTIVATEAPP, 1, 0);
@@ -12223,12 +12196,12 @@
v15 = pWindow_MainMenu;
if ( GetCurrentMenuID() == MENU_SAVELOAD)
{
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions != 12 )
- {
- stru_506F20.Release();
- stru_506F20.Load("lsave640.pcx", 0);
+ if ( pCurrentScreen != 12 )
+ {
+ pTexture_PCX.Release();
+ pTexture_PCX.Load("lsave640.pcx", 0);
pGUIWindow2 = GUIWindow::Create(0, 0, 640, 480, WINDOW_MainMenu, 0, 0);
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 12;
+ pCurrentScreen = 12;
GameUI_DrawLoadMenu(0);
}
v15 = pGUIWindow_CurrentMenu;
@@ -12249,7 +12222,7 @@
else
{
pRenderer->BeginScene();
- pRenderer->DrawTextureRGB(0, 0, &stru_506F20);
+ pRenderer->DrawTextureRGB(0, 0, &pTexture_PCX);
if (pAsyncMouse)
pAsyncMouse->_46B736_consume_click_lists(1);
GUI_MainMenuMessageProc();
@@ -12264,7 +12237,7 @@
pIcons_LOD->_4114F2();
pGUIWindow_CurrentMenu->Release();
pGUIWindow_CurrentMenu = 0;
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 0;
+ pCurrentScreen = 0;
viewparams->bRedrawGameUI = 1;
}
}
@@ -12336,7 +12309,7 @@
GUI_UpdateWindows();
pRenderer->EndScene();
pRenderer->Present();
- stru_506F20.Release();
+ pTexture_PCX.Release();
if ( pGUIWindow2 )
{
pGUIWindow2->Release();
@@ -12502,16 +12475,16 @@
LABEL_240:
if ( pVideoPlayer->pVideoFrame.pPixels != (unsigned __int16 *)v31 )
pVideoPlayer->bStopBeforeSchedule = 1;
- if ( pAsyncMouse == (void *)v31 )
+ if (!pAsyncMouse)
pMouse->SetMouseClick((unsigned __int16)lParam, lParam >> 16);
- if ( pGame != (Game *)v31 )
- {
- if ( pAsyncMouse != (void *)v31 )
+ if (pGame)
+ {
+ if (pAsyncMouse)
goto _def_wnd_proc;
v33 = GetPickDepth();
pGame->PickMouse(v33, (unsigned __int16)lParam, lParam >> 16, v31, &stru_F93E30, &a4);
}
- if ( pAsyncMouse == (void *)v31 )
+ if (!pAsyncMouse)
{
sub_416D62_ShowPopupWindow_MonsterRecord_ItemInfo_etcsub_416D62(0);
return DefWindowProcA(hWnd, Msg, wParam, v4);
@@ -12669,8 +12642,8 @@
v35 = hWnd;
goto LABEL_104;
}
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions
- && uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions != 21 )
+ if ( pCurrentScreen
+ && pCurrentScreen != 21 )
return 0;
}
if ( !viewparams->field_4C )
@@ -13111,8 +13084,8 @@
char *v3; // eax@1
//char *v4; // eax@1
unsigned int v5; // eax@3
- size_t v6; // ecx@10
- char *v7; // eax@11
+ //size_t v6; // ecx@10
+ //char *v7; // eax@11
char Str1[20]; // [sp+Ch] [bp-18h]@1
unsigned int v9; // [sp+20h] [bp-4h]@1
@@ -13152,20 +13125,13 @@
sub_461103();
if ( !_strcmpi(pCurrentMapName, "d11.blv") || !_strcmpi(pCurrentMapName, "d10.blv") )
{
- __debugbreak();
- v6 = uNumActors;
- if ( (signed int)uNumActors > 0 )
- {
- v7 = (char *)&pActors[0].pMonsterInfo.uTreasureType;
- do
- {
- *v7 = 0;
- *(v7 - 3) = 0;
- *(int *)(v7 + 59) = 0;
- v7 += 836;
- --v6;
- }
- while ( v6 );
+ //spawning grounds & good analogue - no loot & exp from monsters
+
+ for (uint i = 0; i < uNumActors; ++i)
+ {
+ pActors[i].pMonsterInfo.uTreasureType = 0;
+ pActors[i].pMonsterInfo.uTreasureDiceRolls = 0;
+ pActors[i].pMonsterInfo.uExp = 0;
}
}
bDialogueUI_InitializeActor_NPC_ID = 0;
@@ -13198,11 +13164,11 @@
cbData = 4;
if ( !RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE", 0, 0x2001Fu, &hKey) )
{
- if ( !RegCreateKeyExA(hKey, "New World Computing", 0, nullstring, 0, 0xF003Fu, 0, &phkResult, &dwDisposition) )
- {
- if ( !RegCreateKeyExA(phkResult, "Might and Magic VII", 0, nullstring, 0, 0xF003Fu, 0, &v10, &dwDisposition) )
- {
- if ( !RegCreateKeyExA(v10, "1.0", 0, nullstring, 0, 0xF003Fu, 0, &v11, &dwDisposition) )
+ if ( !RegCreateKeyExA(hKey, "New World Computing", 0, "", 0, 0xF003Fu, 0, &phkResult, &dwDisposition) )
+ {
+ if ( !RegCreateKeyExA(phkResult, "Might and Magic VII", 0, "", 0, 0xF003Fu, 0, &v10, &dwDisposition) )
+ {
+ if ( !RegCreateKeyExA(v10, "1.0", 0, "", 0, 0xF003Fu, 0, &v11, &dwDisposition) )
{
if ( RegQueryValueExA(v11, lpValueName, 0, 0, Data, &cbData) )
{
@@ -13240,11 +13206,11 @@
phkResult = 0;
if ( !RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE", 0, 0x2001Fu, &hKey) )
{
- if ( !RegCreateKeyExA(hKey, "New World Computing", 0, nullstring, 0, 0xF003Fu, 0, &phkResult, &dwDisposition) )
- {
- if ( !RegCreateKeyExA(phkResult, "Might and Magic VII", 0, nullstring, 0, 0xF003Fu, 0, &v8, &dwDisposition) )
- {
- if ( !RegCreateKeyExA(v8, "1.0", 0, nullstring, 0, 0xF003Fu, 0, &v9, &dwDisposition) )
+ if ( !RegCreateKeyExA(hKey, "New World Computing", 0, "", 0, 0xF003Fu, 0, &phkResult, &dwDisposition) )
+ {
+ if ( !RegCreateKeyExA(phkResult, "Might and Magic VII", 0, "", 0, 0xF003Fu, 0, &v8, &dwDisposition) )
+ {
+ if ( !RegCreateKeyExA(v8, "1.0", 0, "", 0, 0xF003Fu, 0, &v9, &dwDisposition) )
{
v2 = strlen(Str);
RegSetValueExA(v9, lpValueName, 0, 1u, (const BYTE *)Str, v2 + 1);
@@ -13282,9 +13248,9 @@
phkResult = 0;
v4 = RegCloseKey;
if ( RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE", 0, 0x2001Fu, &hKey)
- || RegCreateKeyExA(hKey, "New World Computing", 0, nullstring, 0, 0xF003Fu, 0, &phkResult, &dwDisposition)
- || RegCreateKeyExA(phkResult, "Might and Magic VII", 0, nullstring, 0, 0xF003Fu, 0, &v13, &dwDisposition)
- || RegCreateKeyExA(v13, "1.0", 0, nullstring, 0, 0xF003Fu, 0, &v14, &dwDisposition) )
+ || RegCreateKeyExA(hKey, "New World Computing", 0, "", 0, 0xF003Fu, 0, &phkResult, &dwDisposition)
+ || RegCreateKeyExA(phkResult, "Might and Magic VII", 0, "", 0, 0xF003Fu, 0, &v13, &dwDisposition)
+ || RegCreateKeyExA(v13, "1.0", 0, "", 0, 0xF003Fu, 0, &v14, &dwDisposition) )
goto LABEL_7;
if ( RegQueryValueExA(v14, lpValueName, 0, &Type, Dest, &cbData) )
{
@@ -13333,11 +13299,11 @@
phkResult = 0;
if ( !RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE", 0, 0x2001Fu, &hKey) )
{
- if ( !RegCreateKeyExA(hKey, "New World Computing", 0, nullstring, 0, 0xF003Fu, 0, &phkResult, &dwDisposition) )
- {
- if ( !RegCreateKeyExA(phkResult, "Might and Magic VII", 0, nullstring, 0, 0xF003Fu, 0, &v7, &dwDisposition) )
- {
- if ( !RegCreateKeyExA(v7, "1.0", 0, nullstring, 0, 0xF003Fu, 0, &v8, &dwDisposition) )
+ if ( !RegCreateKeyExA(hKey, "New World Computing", 0, "", 0, 0xF003Fu, 0, &phkResult, &dwDisposition) )
+ {
+ if ( !RegCreateKeyExA(phkResult, "Might and Magic VII", 0, "", 0, 0xF003Fu, 0, &v7, &dwDisposition) )
+ {
+ if ( !RegCreateKeyExA(v7, "1.0", 0, "", 0, 0xF003Fu, 0, &v8, &dwDisposition) )
{
RegSetValueExA(v8, lpValueName, 0, 4u, Data, 4u);
RegCloseKey(v8);
@@ -13527,7 +13493,7 @@
drive[0] = 'A' + i;
if (GetDriveTypeA(drive) == DRIVE_CDROM)
- if (CheckMM7CD(bGotCDFromRegistry))
+ if (CheckMM7CD(*drive))
{
cMM7GameCDDriveLetter = *drive;
WriteWindowsRegistryString("CDDrive", drive);
@@ -13884,7 +13850,6 @@
ClipCursor(nullptr);
pRenderer->SwitchToWindow(hWnd);
}
- pRenderer->Present();
uSoundVolumeMultiplier = ReadWindowsRegistryInt("soundflag", 9);
if (uSoundVolumeMultiplier > 9)
@@ -14090,6 +14055,9 @@
RECT Rect; // [sp+Ch] [bp-20h]@15
int a2[4]; // [sp+1Ch] [bp-10h]@15
+ auto mm7text_dll = LoadLibraryW(L"mm7text.dll");
+ sprintfex = (int (__cdecl *)(char *a1, const char *a2, ...))GetProcAddress(mm7text_dll, "_sprintfex");
+
if (pCmdLine && *pCmdLine)
{
if (wcsstr(pCmdLine, L"-usedefs"))
@@ -14187,9 +14155,9 @@
goto LABEL_53;
}
DeleteCCharFont();
- bFlashQuestBook = 1;
+ bFlashQuestBook = true;
pGame->pCShow->PlayMovie(MOVIE_Emerald, 0);
- MaybeDoAutosave();
+ Autosave();
goto LABEL_48;
}
if (GetCurrentMenuID() == MENU_CREDITS)
@@ -15173,7 +15141,7 @@
GUIWindow a1; // [sp+Ch] [bp-54h]@1
memcpy(&a1, ptr_507BC4, sizeof(a1));
- a1.str_48 = 0;
+ a1.Hint = 0;
a1.uFrameX = 1;
a1.uFrameY = 1;
a1.uFrameWidth = 468;
@@ -15188,7 +15156,7 @@
}
a1.uFrameZ = a1.uFrameWidth + a1.uFrameX - 1;
a1.uFrameW = v0 + a1.uFrameY - 1;
- a1._415551(0);
+ a1.DrawMessageBox(0);
a1.uFrameX += 12;
a1.uFrameWidth -= 24;
a1.uFrameY += 12;
@@ -15671,7 +15639,7 @@
if ( uCurrentlyLoadedLevelType == LEVEL_Indoor )
{
if ( pRenderer->pRenderD3D )
- v1 = pGame->pIndoorCameraD3D->flt_fov;
+ v1 = pGame->pIndoorCameraD3D->fov;
else
v1 = pIndoorCamera->flt_1C_fov;
v3 = (signed __int64)v1;
@@ -15692,7 +15660,7 @@
if ( uCurrentlyLoadedLevelType == LEVEL_Indoor )
{
if ( pRenderer->pRenderD3D )
- v1 = pGame->pIndoorCameraD3D->flt_fov;
+ v1 = pGame->pIndoorCameraD3D->fov;
else
v1 = pIndoorCamera->flt_1C_fov;
v3 = (signed __int64)v1;
@@ -15976,7 +15944,7 @@
if ( uCurrentlyLoadedLevelType != LEVEL_Indoor )
{
if ( a1 >> 9 >= pOutdoor->uNumBModels
- || (v7 = &pOutdoor->pBModels[a1 >> 9].pFaces[(a1 >> 3) & 0x3F], BYTE2(v7->uFaceAttributes) & 0x10)
+ || (v7 = &pOutdoor->pBModels[a1 >> 9].pFaces[(a1 >> 3) & 0x3F], BYTE2(v7->uAttributes) & 0x10)
|| (v6 = v7->sCogTriggeredID) == 0 )
return 1;
LABEL_13:
@@ -15992,13 +15960,13 @@
}
if ( v5 & 0x100000 || (v6 = pIndoor->pFaceExtras[v4->uFaceExtraID].uEventID) == 0 )
return 1;
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions != 19 )
+ if ( pCurrentScreen != 19 )
goto LABEL_13;
break;
}
return 0;
}
-// 4E28F8: using guessed type int uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions;
+// 4E28F8: using guessed type int pCurrentScreen;
//----- (0046A6AC) --------------------------------------------------------
int __fastcall sub_46A6AC(int a1, int a2, int a3)
@@ -16182,8 +16150,8 @@
do
{
v5 = abs(*((short *)v4 - 17) - pParty->vPosition.x);
- v17 = abs(*((short *)v4 - 16) - pParty->vPosition.z);
- v18 = abs(*((short *)v4 - 15) - pParty->vPosition.y);
+ v17 = abs(*((short *)v4 - 16) - pParty->vPosition.y);
+ v18 = abs(*((short *)v4 - 15) - pParty->vPosition.z);
v6 = v5;
v7 = v17;
v8 = v18;
@@ -16439,21 +16407,6 @@
return v19;
}
-//----- (0046AC59) --------------------------------------------------------
-std::string *__fastcall crt_intit_global_46AC59(int a1)
-{
- size_t v1; // eax@1
-
- //std__string_720990.field_0 = BYTE3(a1);
- //std::string::dtor(&std__string_720990, 0);
- //v1 = strlen("micon1");
- //return std::stringoperator_assign__const_char_ptr__(&std__string_720990, "micon1", v1);
- std__string_720990 = "micon1";
- return &std__string_720990;
-}
-
-
-
//----- (0046BDA8) --------------------------------------------------------
unsigned int __cdecl GetGravityStrength()
@@ -16509,21 +16462,21 @@
ODM_ProcessPartyActions();
if ( pParty->vPosition.x < -22528
|| pParty->vPosition.x > 22528
- || pParty->vPosition.z < -22528
- || pParty->vPosition.z > 22528 )
+ || pParty->vPosition.y < -22528
+ || pParty->vPosition.y > 22528 )
{
strcpy(pOutdoor->pLevelFilename, pCurrentMapName);
- v0 = pOutdoor->GetTravelDestination(pParty->vPosition.x, pParty->vPosition.z, (char *)&pOut, 32);
+ v0 = pOutdoor->GetTravelDestination(pParty->vPosition.x, pParty->vPosition.y, (char *)&pOut, 32);
if ( !bUnderwater && (pParty->uFlags & 0x8C || BYTE1(pParty->uFlags) & 2 || pParty->bFlying) || !v0 )
{
if ( pParty->vPosition.x < -22528 )
pParty->vPosition.x = -22528;
if ( pParty->vPosition.x > 22528 )
pParty->vPosition.x = 22528;
- if ( pParty->vPosition.z < -22528 )
- pParty->vPosition.z = -22528;
- if ( pParty->vPosition.z > 22528 )
- pParty->vPosition.z = 22528;
+ if ( pParty->vPosition.y < -22528 )
+ pParty->vPosition.y = -22528;
+ if ( pParty->vPosition.y > 22528 )
+ pParty->vPosition.y = 22528;
}
else
{
@@ -16916,7 +16869,7 @@
v138 = 0;
if ( v2->uItemType == 8030 )
{
- pActors[v108].uAIState = 0;
+ pActors[v108].uAIState = Standing;
pActors[v108].UpdateAnimation();
}
((SpellBuff *)((char *)&pActors[0].pActorBuffs[v136] + v108 * 836))->Apply(
diff -r c83d06692295 -r c0cf9393af64 mm7_3.cpp
--- a/mm7_3.cpp Mon Oct 22 09:20:49 2012 +0600
+++ b/mm7_3.cpp Mon Oct 29 09:28:08 2012 +0600
@@ -122,7 +122,7 @@
{
v9 = &pIndoor->pSectors[v33[result]];
v10 = 0;
- v32 = v9->field_4 + v9->field_C + v9->field_14;
+ v32 = v9->uNumFloors + v9->field_C + v9->field_14;
v26 = 0;
if ( v32 > 0 )
break;
@@ -346,7 +346,7 @@
f.pFacePlane_old.vNormal.z = v4->pFacePlane.vNormal.z;
v6 = v4->pFacePlane.dist;
f.pFacePlane_old.dist = v4->pFacePlane.dist;
- v7 = v4->uFaceAttributes;
+ v7 = v4->uAttributes;
f.uAttributes = v7;
f.pBounding.x1 = v4->pBoundingBox.x1;
f.pBounding.y1 = v4->pBoundingBox.y1;
@@ -518,25 +518,25 @@
//----- (0046ED1B) --------------------------------------------------------
-int __fastcall _46ED1B_collide_against_floor(signed int a1, signed int a2, int a3, unsigned int *pSectorID, int *a5)
-{
- unsigned int *v5; // edi@1
- int result; // eax@1
- int v7; // eax@3
- int v8; // [sp+Ch] [bp-8h]@1
- int v9; // [sp+10h] [bp-4h]@1
-
- v5 = pSectorID;
- v9 = a2;
- v8 = a1;
- result = _46CEC3_get_floor_level(a1, a2, a3, *pSectorID, (int *)&pSectorID);
- if ( result != -30000 && result <= a3 + 50
- || (v7 = pIndoor->GetSector(v8, v9, a3), (*v5 = v7) != 0)
- && (result = _46CEC3_get_floor_level(v8, v9, a3, v7, (int *)&pSectorID), result != -30000) )
- *a5 = (int)pSectorID;
- else
- result = -30000;
- return result;
+int _46ED1B_collide_against_floor(int x, int y, int z, unsigned int *pSectorID, unsigned int *pFaceID)
+{
+ uint uFaceID = -1;
+ int floor_level = _46CEC3_get_floor_level(x, y, z, *pSectorID, &uFaceID);
+
+ if (floor_level != -30000 && floor_level <= z + 50)
+ {
+ *pFaceID = uFaceID;
+ return floor_level;
+ }
+
+ uint uSectorID = pIndoor->GetSector(x, y, z);
+ *pSectorID = uSectorID;
+
+ floor_level = _46CEC3_get_floor_level(x, y, z, uSectorID, &uFaceID);
+ if (uSectorID && floor_level != -30000)
+ *pFaceID = uFaceID;
+ else return -30000;
+ return floor_level;
}
//----- (0046ED8A) --------------------------------------------------------
@@ -649,21 +649,21 @@
{
if ( stru_721530.sMinX >= pParty->vPosition.x - v1 )
{
- if ( stru_721530.sMaxY <= pParty->vPosition.z + v1 )
- {
- if ( stru_721530.sMinY >= pParty->vPosition.z - v1 )
- {
- if ( stru_721530.sMaxZ <= (signed int)(pParty->vPosition.y + pParty->uPartyHeight) )
- {
- if ( stru_721530.sMinZ >= pParty->vPosition.y )
+ if ( stru_721530.sMaxY <= pParty->vPosition.y + v1 )
+ {
+ if ( stru_721530.sMinY >= pParty->vPosition.y - v1 )
+ {
+ if ( stru_721530.sMaxZ <= (signed int)(pParty->vPosition.z + pParty->uPartyHeight) )
+ {
+ if ( stru_721530.sMinZ >= pParty->vPosition.z )
{
v3 = stru_721530.prolly_normal_d + v1;
v11 = pParty->vPosition.x - stru_721530.normal.x;
v4 = ((pParty->vPosition.x - stru_721530.normal.x) * stru_721530.field_58.y
- - (pParty->vPosition.z - stru_721530.normal.y) * stru_721530.field_58.x) >> 16;
- v10 = pParty->vPosition.z - stru_721530.normal.y;
+ - (pParty->vPosition.y - stru_721530.normal.y) * stru_721530.field_58.x) >> 16;
+ v10 = pParty->vPosition.y - stru_721530.normal.y;
result = abs(((pParty->vPosition.x - stru_721530.normal.x) * stru_721530.field_58.y
- - (pParty->vPosition.z - stru_721530.normal.y) * stru_721530.field_58.x) >> 16);
+ - (pParty->vPosition.y - stru_721530.normal.y) * stru_721530.field_58.x) >> 16);
if ( result <= v3 )
{
result = v10 * stru_721530.field_58.y;
@@ -671,11 +671,11 @@
if ( v5 > 0 )
{
v6 = ((unsigned __int64)(stru_721530.field_58.z * (signed __int64)v5) >> 16) + stru_721530.normal.z;
- result = pParty->vPosition.y;
- if ( v6 >= pParty->vPosition.y )
+ result = pParty->vPosition.z;
+ if ( v6 >= pParty->vPosition.z )
{
- result = v9 + pParty->vPosition.y;
- if ( v6 <= (signed int)(v9 + pParty->vPosition.y) || v8 )
+ result = v9 + pParty->vPosition.z;
+ if ( v6 <= (signed int)(v9 + pParty->vPosition.z) || v8 )
{
result = sub_452A9E(v3 * v3 - v4 * v4);
v7 = v5 - result;
@@ -1011,7 +1011,7 @@
v72 = 1;
if ( v0->uAIState == 5 && v76 && !v72 )
{
- v0->uAIState = 11;
+ v0->uAIState = Removed;
goto LABEL_121;
}
if ( v0->uCurrentActionAnimation == 1 )
@@ -1114,7 +1114,7 @@
v0->vVelocity.y += rand() % 100 - 50;
v0->vVelocity.z += rand() % 100 - 20;
v25 = rand();
- v0->uAIState = 8;
+ v0->uAIState = Stunned;
v0->uYawAngle += v25 % 32 - 16;
v0->UpdateAnimation();
}
@@ -1191,7 +1191,7 @@
else
v61 = v68 + 60;
sub_42F960_create_object(v0->vPosition.x, v0->vPosition.y, v61);
- v0->uAIState = 11;
+ v0->uAIState = Removed;
return;
}
}
@@ -1274,7 +1274,7 @@
case 6:
v40 = &pOutdoor->pBModels[v38 >> 9];
v41 = &v40->pFaces[v39 & 0x3F];
- if ( !(BYTE3(v41->uFaceAttributes) & 0x20) )
+ if ( !(BYTE3(v41->uAttributes) & 0x20) )
{
v42 = v41->uPolygonType;
if ( v42 == 3 )
@@ -1372,7 +1372,7 @@
v0->uYawAngle -= 32;
v0->uCurrentActionTime = 0;
v0->uCurrentActionLength = 128;
- v0->uAIState = 7;
+ v0->uAIState = Fleeing;
}
}
}
@@ -1381,10 +1381,6 @@
}
while ( (signed int)v75 < (signed int)uNumActors );
}
-// 46DF1A: using guessed type int __fastcall 46DF1A_collide_against_actor(int, int);
-// 47F44B: using guessed type int __stdcall WorldPosToGridCellX(int);
-// 47F458: using guessed type int __stdcall WorldPosToGridCellZ(int);
-// 4F75D8: using guessed type int ai_arrays_size;
@@ -1428,7 +1424,7 @@
Particle_ Dst; // [sp+Ch] [bp-84h]@18
unsigned int uLayingItemID_; // [sp+74h] [bp-1Ch]@1
ObjectDesc *v37; // [sp+78h] [bp-18h]@1
- int v38; // [sp+7Ch] [bp-14h]@4
+ unsigned int uFaceID; // [sp+7Ch] [bp-14h]@4
int v39; // [sp+80h] [bp-10h]@33
int v40; // [sp+84h] [bp-Ch]@28
int v41; // [sp+88h] [bp-8h]@34
@@ -1442,11 +1438,11 @@
if ( abs(v3) > 32767
|| abs(v1->vPosition.y) > 32767
|| abs(v1->vPosition.z) > 20000
- || (v42 = _46CEC3_get_floor_level(v1->vPosition.x, v1->vPosition.y, v1->vPosition.z, v1->uSectorID, &v38),
+ || (v42 = _46CEC3_get_floor_level(v1->vPosition.x, v1->vPosition.y, v1->vPosition.z, v1->uSectorID, &uFaceID),
v42 <= -30000)
&& ((v4 = pIndoor->GetSector(v1->vPosition.x, v1->vPosition.y, v1->vPosition.z),
(v1->uSectorID = v4) == 0)
- || (v42 = _46CEC3_get_floor_level(v1->vPosition.x, v1->vPosition.y, v1->vPosition.z, v4, &v38), v42 == -30000)) )
+ || (v42 = _46CEC3_get_floor_level(v1->vPosition.x, v1->vPosition.y, v1->vPosition.z, v4, &uFaceID), v42 == -30000)) )
{
LayingItem::_42F933(uLayingItemID_);
return;
@@ -1458,7 +1454,7 @@
v8 = 0;
LABEL_25:
stru_721530.field_0 = v8;
- v38 = v8;
+ uFaceID = v8;
stru_721530.prolly_normal_d = v2->uRadius;
v12 = v2->uHeight;
stru_721530.field_84 = -1;
@@ -1559,7 +1555,7 @@
v34 = (TEXTURE_TYPE)v8;
v32 = "effpar03";
}
- Dst.field_20 = (unsigned __int8)(v30 & 0x80) + 128;
+ Dst.timeToLive = (unsigned __int8)(v30 & 0x80) + 128;
Dst.uTextureID = pBitmaps_LOD->LoadTexture(v32, v34);
goto LABEL_71;
}
@@ -1660,9 +1656,9 @@
v1->vVelocity.y = v41;
v41 = v1->vVelocity.z;
v41 = (unsigned __int64)(v40 * (signed __int64)v41) >> 16;
- ++v38;
- v28 = __OFSUB__(v38, 100);
- v27 = v38 - 100 < 0;
+ ++uFaceID;
+ v28 = __OFSUB__(uFaceID, 100);
+ v27 = uFaceID - 100 < 0;
v1->vVelocity.z = v41;
if ( !(v27 ^ v28) )
return;
@@ -1678,7 +1674,7 @@
{
v6 = pIndoor->pFaces;
v1->vPosition.z = v42 + 1;
- v7 = &v6[v38];
+ v7 = &v6[uFaceID];
if ( v7->uPolygonType == 3 )
{
v8 = 0;
@@ -1691,15 +1687,15 @@
v8 = 0;
}
v42 = v1->vVelocity.x;
- v38 = 58500;
+ uFaceID = 58500;
v42 = (unsigned __int64)(58500i64 * v42) >> 16;
v1->vVelocity.x = v42;
v42 = v1->vVelocity.y;
- v42 = (unsigned __int64)(v38 * (signed __int64)v42) >> 16;
- v38 = 58500;
+ v42 = (unsigned __int64)(uFaceID * (signed __int64)v42) >> 16;
+ uFaceID = 58500;
v1->vVelocity.y = v42;
v42 = v1->vVelocity.z;
- v42 = (unsigned __int64)(v38 * (signed __int64)v42) >> 16;
+ v42 = (unsigned __int64)(uFaceID * (signed __int64)v42) >> 16;
v9 = v1->vVelocity.x;
v1->vVelocity.z = v42;
if ( v9 * v9 + v1->vVelocity.y * v1->vVelocity.y < 400 )
@@ -1733,7 +1729,7 @@
LABEL_70:
Dst.bFree = 512;
Dst.uDiffuse = rand();
- Dst.field_20 = 64;
+ Dst.timeToLive = 64;
Dst.uTextureID = v8;
LABEL_71:
Dst.flt_28 = 1.0;
@@ -1746,7 +1742,7 @@
v33 = (TEXTURE_TYPE)v8;
v31 = "effpar03";
}
- Dst.field_20 = (unsigned __int8)(v11 & 0x80) + 128;
+ Dst.timeToLive = (unsigned __int8)(v11 & 0x80) + 128;
Dst.uTextureID = pBitmaps_LOD->LoadTexture(v31, v33);
LABEL_72:
pGame->pParticleEngine->AddParticle(&Dst);
@@ -1927,7 +1923,7 @@
{
Dst.bFree = 512;
Dst.uDiffuse = rand();
- Dst.field_20 = 64;
+ Dst.timeToLive = 64;
Dst.uTextureID = 0;
LABEL_89:
Dst.flt_28 = 1.0;
@@ -1941,7 +1937,7 @@
LABEL_87:
v47 = "effpar03";
}
- Dst.field_20 = (unsigned __int8)(v24 & 0x80) + 128;
+ Dst.timeToLive = (unsigned __int8)(v24 & 0x80) + 128;
Dst.uTextureID = pBitmaps_LOD->LoadTexture(v47, v48);
goto LABEL_89;
}
@@ -2066,7 +2062,7 @@
v46 = rand();
Dst.uTextureID = 0;
Dst.uDiffuse = v46;
- Dst.field_20 = 64;
+ Dst.timeToLive = 64;
goto LABEL_89;
}
Dst.bFree = 1032;
@@ -2127,7 +2123,7 @@
}
v1->vVelocity.z += v37;
LABEL_70:
- if ( BYTE3(v32->uFaceAttributes) & 0x10 )
+ if ( BYTE3(v32->uAttributes) & 0x10 )
EventProcessor(v32->sCogTriggeredID, 0, 1);
goto LABEL_74;
}
@@ -2214,6 +2210,7 @@
v20 = 0;
if ( (signed int)uNumLayingItems > 0 )
{
+ __debugbreak();
v2 = (char *)&pLayingItems[0].uSpriteFrameID;
do
{
@@ -2272,8 +2269,8 @@
if ( pParty->bTurnBasedModeOn != 1 || !(*(v2 - 4) & 4) )
goto LABEL_36;
v12 = abs(pParty->vPosition.x - *(int *)(v2 - 26));
- v18 = abs(pParty->vPosition.z - *(int *)(v2 - 22));
- v19 = abs(pParty->vPosition.y - *(int *)(v2 - 18));
+ v18 = abs(pParty->vPosition.y - *(int *)(v2 - 22));
+ v19 = abs(pParty->vPosition.z - *(int *)(v2 - 18));
v13 = v12;
v14 = v18;
v15 = v19;
@@ -2316,34 +2313,35 @@
}
//----- (0047272C) --------------------------------------------------------
-int __fastcall _47272C_collide_agains_some_secotors_floors(int x, int y, int z, unsigned int *pSectorID, int *a5)
+int _47272C_collide_agains_some_secotors_floors(int x, int y, int z, unsigned int *pSectorID, unsigned int *pFaceID)
{
signed int v5; // ebx@1
int result; // eax@1
int v7; // [sp+10h] [bp-8h]@1
signed int v8; // [sp+14h] [bp-4h]@1
+ __debugbreak();
v5 = x - 2;
v7 = x;
v8 = y;
*pSectorID = pIndoor->GetSector(x - 2, y, z + 40);
- result = _46ED1B_collide_against_floor(v5, v8, z + 40, pSectorID, a5);
+ result = _46ED1B_collide_against_floor(v5, v8, z + 40, pSectorID, pFaceID);
if ( result == -30000 || !*pSectorID )
{
*pSectorID = pIndoor->GetSector(v7 + 2, v8, z + 40);
- result = _46ED1B_collide_against_floor(v7 + 2, v8, z + 40, pSectorID, a5);
+ result = _46ED1B_collide_against_floor(v7 + 2, v8, z + 40, pSectorID, pFaceID);
if ( result == -30000 || !*pSectorID )
{
*pSectorID = pIndoor->GetSector(v7, v8 - 2, z + 40);
- result = _46ED1B_collide_against_floor(v7, v8 - 2, z + 40, pSectorID, a5);
+ result = _46ED1B_collide_against_floor(v7, v8 - 2, z + 40, pSectorID, pFaceID);
if ( result == -30000 || !*pSectorID )
{
*pSectorID = pIndoor->GetSector(v7, v8 + 2, z + 40);
- result = _46ED1B_collide_against_floor(v7, v8 + 2, z + 40, pSectorID, a5);
+ result = _46ED1B_collide_against_floor(v7, v8 + 2, z + 40, pSectorID, pFaceID);
if ( result == -30000 || !*pSectorID )
{
*pSectorID = pIndoor->GetSector(v7, v8, z + 140);
- result = _46ED1B_collide_against_floor(v7, v8, z + 140, pSectorID, a5);
+ result = _46ED1B_collide_against_floor(v7, v8, z + 140, pSectorID, pFaceID);
}
}
}
@@ -2352,20 +2350,14 @@
}
//----- (00472866) --------------------------------------------------------
-void __cdecl BLV_ProcessPartyActions()
-{
- int v0; // esi@1
+void BLV_ProcessPartyActions()
+{
int v1; // ebx@1
int v2; // edi@1
- int v3; // esi@1
- float v4; // ST40_4@8
- Player **v5; // esi@15
int v6; // eax@18
- Player **v7; // esi@24
signed __int64 v8; // qax@27
int v9; // eax@27
double v10; // st7@27
- BLVFace *v11; // edx@41
unsigned int v12; // eax@49
double v13; // st7@50
int v14; // eax@51
@@ -2383,15 +2375,9 @@
int v26; // eax@67
double v27; // st7@67
int v28; // ST40_4@67
- int v29; // eax@69
- double v30; // st7@69
- int v31; // ST3C_4@69
- int v32; // eax@71
- double v33; // st7@71
- int v34; // ST3C_4@71
unsigned int v35; // eax@74
int v36; // ecx@88
- int v37; // esi@96
+ int new_party_z; // esi@96
int v38; // eax@96
int v39; // ecx@106
int v40; // eax@106
@@ -2421,160 +2407,151 @@
unsigned int v64; // [sp-8h] [bp-68h]@161
int v65; // [sp-4h] [bp-64h]@75
int v66; // [sp-4h] [bp-64h]@161
- double v67; // [sp+Ch] [bp-54h]@8
int v68; // [sp+10h] [bp-50h]@45
int v69; // [sp+10h] [bp-50h]@140
- int v70; // [sp+14h] [bp-4Ch]@1
+ unsigned int uFaceEvent; // [sp+14h] [bp-4Ch]@1
signed int v71; // [sp+18h] [bp-48h]@1
signed int v72; // [sp+1Ch] [bp-44h]@1
signed int v73; // [sp+20h] [bp-40h]@100
int v74; // [sp+20h] [bp-40h]@140
- signed int bFeatherFall; // [sp+24h] [bp-3Ch]@15
- bool bFeatherFalla; // [sp+24h] [bp-3Ch]@33
- unsigned int v77; // [sp+28h] [bp-38h]@1
+ bool bFeatherFall; // [sp+24h] [bp-3Ch]@15
+ unsigned int uSectorID; // [sp+28h] [bp-38h]@1
int v78; // [sp+2Ch] [bp-34h]@1
- int v79; // [sp+30h] [bp-30h]@1
- int i; // [sp+34h] [bp-2Ch]@1
+ unsigned int uFaceID; // [sp+30h] [bp-30h]@1
+ int v80; // [sp+34h] [bp-2Ch]@1
int v81; // [sp+38h] [bp-28h]@47
int v82; // [sp+3Ch] [bp-24h]@47
- int v83; // [sp+40h] [bp-20h]@47
+ int _view_angle; // [sp+40h] [bp-20h]@47
int bJumping; // [sp+44h] [bp-1Ch]@1
- int v85; // [sp+48h] [bp-18h]@1
- int v86; // [sp+4Ch] [bp-14h]@1
- int v87; // [sp+50h] [bp-10h]@1
- float v88; // [sp+54h] [bp-Ch]@62
+ int new_party_y; // [sp+48h] [bp-18h]@1
+ int new_party_x; // [sp+4Ch] [bp-14h]@1
+ int party_z; // [sp+50h] [bp-10h]@1
int v89; // [sp+58h] [bp-8h]@1
int angle; // [sp+5Ch] [bp-4h]@47
- v0 = pParty->vPosition.y;
+ uFaceEvent = 0;
v89 = pParty->uFallSpeed;
v1 = 0;
- v85 = pParty->vPosition.z;
- v70 = 0;
+ new_party_y = pParty->vPosition.y;
v2 = 0;
- v86 = pParty->vPosition.x;
- v87 = pParty->vPosition.y;
- v77 = pIndoor->GetSector(pParty->vPosition.x, pParty->vPosition.z, pParty->vPosition.y);
+ new_party_x = pParty->vPosition.x;
+ party_z = pParty->vPosition.z;
+ uSectorID = pIndoor->GetSector(pParty->vPosition.x, pParty->vPosition.y, pParty->vPosition.z);
v72 = 0;
v78 = 0;
v71 = 0;
bJumping = 0;
- v3 = v0 + 40;
- i = _46ED1B_collide_against_floor(v86, v85, v3, &v77, &v79);
+ v80 = _46ED1B_collide_against_floor(new_party_x, new_party_y, party_z + 40, &uSectorID, &uFaceID);
if ( pParty->bFlying )
{
pParty->bFlying = 0;
- if ( (signed __int64)pParty->pPartyBuffs[7].uExpireTime > 0 )
+ __debugbreak();
+ if (pParty->FlyActive())
stru_5E4C90.field_4B[20 * pParty->pPartyBuffs[7].uOverlayID + 119] |= 1u;// 005E4D58 pOtherOverlayList [negindexing]
}
- if ( i == -30000 )
- {
- i = _47272C_collide_agains_some_secotors_floors(v86, v85, v3, &v77, &v79);
- if ( i == -30000 )
+ if ( v80 == -30000 )
+ {
+ v80 = _47272C_collide_agains_some_secotors_floors(new_party_x, new_party_y, party_z + 40, &uSectorID, &uFaceID);
+ if ( v80 == -30000 )
{
pParty->vPosition.x = blv_prev_party_x;
- pParty->vPosition.z = blv_prev_party_z;
- pParty->vPosition.y = blv_prev_party_y;
+ pParty->vPosition.y = blv_prev_party_z;
+ pParty->vPosition.z = blv_prev_party_y;
pParty->uFallStartY = blv_prev_party_y;
return;
}
}
blv_prev_party_x = pParty->vPosition.x;
- blv_prev_party_z = pParty->vPosition.z;
- blv_prev_party_y = pParty->vPosition.y;
- if ( pParty->bTurnBasedModeOn != 1 )
- {
- v4 = (double)(GetTickCount() / 0x1F4);
- v67 = v4 + 6.7553994e15;
- if ( *(int *)&word_720C10_intercepts_xs[102] != LODWORD(v67) )
- {
- dword_4F8584[3 * dword_4F8580[0]] = pParty->vPosition.x;
- dword_4F8588[3 * dword_4F8580[0]] = pParty->vPosition.z;
- dword_4F8580[3 * dword_4F8580[0]++ + 3] = pParty->vPosition.y;
+ blv_prev_party_z = pParty->vPosition.y;
+ blv_prev_party_y = pParty->vPosition.z;
+ if (!pParty->bTurnBasedModeOn)
+ {
+ auto v67 = GetTickCount() / 500;
+ if (dword_720CDC != v67 )
+ {
+ dword_4F8580[3 * dword_4F8580[0] + 1] = pParty->vPosition.x;
+ dword_4F8580[3 * dword_4F8580[0] + 2] = pParty->vPosition.y;
+ dword_4F8580[3 * dword_4F8580[0]++ + 3] = pParty->vPosition.z;
if ( dword_4F8580[0] > 60 )
dword_4F8580[0] = 1;
}
- *(int *)&word_720C10_intercepts_xs[102] = LODWORD(v67);
- }
- if ( SHIDWORD(pParty->pPartyBuffs[5].uExpireTime) < 0
- || SHIDWORD(pParty->pPartyBuffs[5].uExpireTime) <= 0 && LODWORD(pParty->pPartyBuffs[5].uExpireTime) <= 0 )
- {
- bFeatherFall = 0;
- v5 = &pPlayers[1];
- while ( !(*v5)->WearsItem(536, 16) )
- {
- ++v5;
- if ( (signed int)v5 > (signed int)&pPlayers[4] )
- {
- v6 = pParty->uFallStartY;
- goto LABEL_20;
- }
- }
- }
- v6 = i;
- bFeatherFall = 1;
- pParty->uFallStartY = i;
+ dword_720CDC = v67;
+ }
+ if (!pParty->FeatherFallActive())
+ {
+ bFeatherFall = false;
+ if (!pParty->pPlayers[0].WearsItem(536, 16) &&
+ !pParty->pPlayers[1].WearsItem(536, 16) &&
+ !pParty->pPlayers[2].WearsItem(536, 16) &&
+ !pParty->pPlayers[3].WearsItem(536, 16))
+ {
+ v6 = pParty->uFallStartY;
+ }
+ }
+ else
+ {
+ v6 = v80;
+ bFeatherFall = true;
+ pParty->uFallStartY = v80;
+ }
LABEL_20:
- if ( v6 - v87 > 512 && !bFeatherFall && v87 <= i + 1 )
+ if ( v6 - party_z > 512 && !bFeatherFall && party_z <= v80 + 1 )
{
if ( BYTE1(pParty->uFlags) & 1 )
{
BYTE1(pParty->uFlags) &= 0xFEu;
}
- else
- {
- v7 = &pPlayers[1]; // receive falling damage
- do
- {
- if ( !(*v7)->HasEnchantedItemEquipped(72) && !(*v7)->WearsItem(529, 8) )
- {
- v8 = (signed __int64)((double)(*v7)->GetMaxHealth() * 0.1);
- (*v7)->ReceiveDamage((pParty->uFallStartY - v87) * (signed int)v8 / 256, 4);
- v9 = (*v7)->GetActualEndurance();
- v10 = (double)(20 - (*v7)->_48EA1B_get_static_effect(v9)) * flt_6BE3A4_debug_recmod1 * 2.133333333333333;
- (*v7)->SetRecoveryTime((signed __int64)v10);
- }
- ++v7;
- }
- while ( (signed int)v7 <= (signed int)&pPlayers[4] );
- }
- }
- if ( v87 > i + 1 )
+ else for (uint i = 0; i < 4; ++i)
+ { // receive falling damage
+ auto pPlayer = pParty->pPlayers + i;
+
+ if (!pPlayer->HasEnchantedItemEquipped(72) &&
+ !pPlayer->WearsItem(529, 8))
+ {
+ v8 = (signed __int64)((double)pPlayer->GetMaxHealth() * 0.1);
+ pPlayer->ReceiveDamage((pParty->uFallStartY - party_z) * (signed int)v8 / 256, 4);
+ v9 = pPlayer->GetActualEndurance();
+ v10 = (double)(20 - pPlayer->_48EA1B_get_static_effect(v9)) * flt_6BE3A4_debug_recmod1 * 2.133333333333333;
+ pPlayer->SetRecoveryTime((signed __int64)v10);
+ }
+ }
+ }
+ if ( party_z > v80 + 1 )
bJumping = 1;
- bFeatherFalla = v87 - i <= 32;
- if ( v87 - i <= 32 )
- pParty->uFallStartY = v87;
+ bFeatherFall = party_z - v80 <= 32;
+ if ( party_z - v80 <= 32 )
+ pParty->uFallStartY = party_z;
if ( bWalkSound && pParty->field_6F8 > 0 )
pParty->field_6F8 -= pEventTimer->uTimeElapsed;
- if ( v87 > i + 1 )
+ if ( party_z > v80 + 1 )
{
LABEL_43:
if ( bJumping )
goto LABEL_45;
goto LABEL_44;
}
- v87 = i + 1;
- pParty->uFallStartY = i + 1;
+ party_z = v80 + 1;
+ pParty->uFallStartY = v80 + 1;
if ( bJumping )
goto LABEL_45;
- if ( pParty->field_6F4_packedid != v79 )
- {
- v11 = &pIndoor->pFaces[v79];
- if ( BYTE3(v11->uAttributes) & 4 )
- {
- v70 = pIndoor->pFaceExtras[v11->uFaceExtraID].uEventID;
+ if (pParty->field_6F4_packedid != uFaceID)
+ {
+ auto pFace = &pIndoor->pFaces[uFaceID];
+ if (pFace->uAttributes & 0x04000000 )
+ {
+ uFaceEvent = pIndoor->pFaceExtras[pFace->uFaceExtraID].uEventID;
goto LABEL_43;
}
}
LABEL_44:
- pParty->field_6F4_packedid = v79;
+ pParty->field_6F4_packedid = uFaceID;
LABEL_45:
- v68 = v79;
- if ( pIndoor->pFaces[v79].uAttributes & 0x10 )
+ v68 = uFaceID;
+ if ( pIndoor->pFaces[uFaceID].uAttributes & 0x10 )
v71 = 1;
v81 = pParty->uWalkSpeed;
angle = pParty->sRotationY;
- v83 = pParty->sRotationX;
+ _view_angle = pParty->sRotationX;
v82 = (unsigned __int64)(pEventTimer->dt_in_some_format
* (signed __int64)((signed int)(pParty->field_20_prolly_turn_speed * stru_5C6E00->uIntegerPi)
/ 180)) >> 16;
@@ -2584,12 +2561,14 @@
switch ( pPartyActionQueue->Next() )
{
case PARTY_TurnLeft:
+ __debugbreak();
v12 = uTurnSpeed;
if ( uTurnSpeed )
goto LABEL_58;
v13 = (double)v82 * fTurnSpeedMultiplier;
goto LABEL_51;
case PARTY_TurnRight:
+ __debugbreak();
LODWORD(v15) = uTurnSpeed;
if ( uTurnSpeed )
goto LABEL_56;
@@ -2622,79 +2601,77 @@
angle = stru_5C6E00->uDoublePiMask & (angle - v15);
goto LABEL_87;
case PARTY_StrafeLeft:
+ __debugbreak();
v17 = stru_5C6E00->SinCos(angle - stru_5C6E00->uIntegerHalfPi);
v18 = (double)v81;
- v88 = v18;
+ //v88 = v18;
v78 = (unsigned __int64)(v17 * (signed __int64)((signed int)(signed __int64)(v18 * fWalkSpeedMultiplier) >> 1)) >> 16;
v2 -= v78;
v19 = stru_5C6E00->SinCos(angle);
- v78 = (unsigned __int64)(v19 * (signed __int64)((signed int)(signed __int64)(v88 * fWalkSpeedMultiplier) >> 1)) >> 16;
+ 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);
v21 = (double)v81;
- v88 = v21;
+ //v88 = v21;
v78 = (unsigned __int64)(v20 * (signed __int64)((signed int)(signed __int64)(v21 * fWalkSpeedMultiplier) >> 1)) >> 16;
v2 += v78;
v22 = stru_5C6E00->SinCos(angle);
- v78 = (unsigned __int64)(v22 * (signed __int64)((signed int)(signed __int64)(v88 * fWalkSpeedMultiplier) >> 1)) >> 16;
+ 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);
v24 = (double)v81;
- v88 = v24;
+ //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);
- v78 = (unsigned __int64)(v25 * (signed __int64)(signed int)(signed __int64)(v88 * fWalkSpeedMultiplier)) >> 16;
+ 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);
v27 = (double)v81;
- v88 = v27;
+ //v88 = v27;
v78 = (unsigned __int64)(v26
- * (signed __int64)(signed int)(signed __int64)(v27 * fBackwardMovementSlowdownMultiplier)) >> 16;
+ * (signed __int64)(signed int)(signed __int64)(v27 * fBackwardWalkSpeedMultiplier)) >> 16;
v2 -= v78;
v28 = stru_5C6E00->SinCos(angle - stru_5C6E00->uIntegerHalfPi);
v78 = (unsigned __int64)(v28
- * (signed __int64)(signed int)(signed __int64)(v88 * fBackwardMovementSlowdownMultiplier)) >> 16;
+ * (signed __int64)(signed int)(signed __int64)(v27 * fBackwardWalkSpeedMultiplier)) >> 16;
LABEL_68:
v1 -= v78;
LABEL_64:
v78 = 1;
goto LABEL_87;
case PARTY_RunForward:
- v29 = stru_5C6E00->SinCos(angle);
- v30 = (double)v81;
- v88 = v30;
- v2 += (unsigned __int64)(v29
- * (signed __int64)(signed int)(2
- * (unsigned __int64)(signed __int64)(v30
- * fWalkSpeedMultiplier))) >> 16;
- v31 = stru_5C6E00->SinCos(angle - stru_5C6E00->uIntegerHalfPi);
- v1 += (unsigned __int64)(v31
- * (signed __int64)(signed int)(2
- * (unsigned __int64)(signed __int64)(v88
- * fWalkSpeedMultiplier))) >> 16;
- goto LABEL_70;
+ //v29 = stru_5C6E00->SinCos(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;
+ //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;
+ v72 = 1;
+ goto LABEL_87;
case PARTY_RunBackward:
- v32 = stru_5C6E00->SinCos(angle);
- v33 = (double)v81;
- v88 = v33;
- v2 -= (unsigned __int64)(v32
- * (signed __int64)(signed int)(signed __int64)(v33 * fBackwardMovementSlowdownMultiplier)) >> 16;
- v34 = stru_5C6E00->SinCos(angle - stru_5C6E00->uIntegerHalfPi);
- v1 -= (unsigned __int64)(v34
- * (signed __int64)(signed int)(signed __int64)(v88 * fBackwardMovementSlowdownMultiplier)) >> 16;
-LABEL_70:
+ //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;
+ //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;
+//LABEL_70:
v72 = 1;
goto LABEL_87;
case PARTY_LookUp:
- v83 += (signed __int64)(flt_6BE150_look_up_down_dangle * 25.0);
- if ( v83 > 128 )
- v83 = 128;
+ __debugbreak();
+ _view_angle += (signed __int64)(flt_6BE150_look_up_down_dangle * 25.0);
+ if ( _view_angle > 128 )
+ _view_angle = 128;
v35 = uActiveCharacter;
if ( !uActiveCharacter )
goto LABEL_87;
@@ -2702,9 +2679,10 @@
v63 = 63;
goto LABEL_76;
case PARTY_LookDown:
- v83 += (signed __int64)(flt_6BE150_look_up_down_dangle * -25.0);
- if ( v83 < -128 )
- v83 = -128;
+ __debugbreak();
+ _view_angle += (signed __int64)(flt_6BE150_look_up_down_dangle * -25.0);
+ if ( _view_angle < -128 )
+ _view_angle = -128;
v35 = uActiveCharacter;
if ( uActiveCharacter )
{
@@ -2715,10 +2693,12 @@
}
break;
case PARTY_CenterView:
- v83 = 0;
+ __debugbreak();
+ _view_angle = 0;
break;
case PARTY_Jump:
- if ( (!bJumping || v87 <= i + 6 && v89 <= 0) && pParty->field_24 )
+ __debugbreak();
+ if ( (!bJumping || party_z <= v80 + 6 && v89 <= 0) && pParty->field_24 )
{
bJumping = 1;
v89 = (signed __int64)((double)(pParty->field_24 << 6) * 1.5 + (double)v89);
@@ -2730,7 +2710,7 @@
}
v36 = 0;
pParty->sRotationY = angle;
- pParty->sRotationX = v83;
+ pParty->sRotationX = _view_angle;
if ( bJumping )
{
v89 += -2 * pEventTimer->uTimeElapsed * GetGravityStrength();
@@ -2762,7 +2742,7 @@
goto LABEL_93;
}
LABEL_92:
- pParty->uFallStartY = v87;
+ pParty->uFallStartY = party_z;
LABEL_93:
if ( v2 * v2 + v1 * v1 < 400 )
{
@@ -2773,22 +2753,22 @@
stru_721530.field_70 = 0;
stru_721530.prolly_normal_d = pParty->field_14;
stru_721530.field_8 = pParty->field_14 >> 1;
- v83 = 0;
+ auto v83 = 0;
stru_721530.field_0 = 1;
stru_721530.field_C = pParty->uPartyHeight - 32;
while ( 1 )
{
- v37 = v87;
- stru_721530.field_34.x = v86;
- stru_721530.normal.x = v86;
+ new_party_z = party_z;
+ stru_721530.field_34.x = new_party_x;
+ stru_721530.normal.x = new_party_x;
stru_721530.field_1C = v2;
- stru_721530.field_34.y = v85;
- stru_721530.normal.y = v85;
+ stru_721530.field_34.y = new_party_y;
+ stru_721530.normal.y = new_party_y;
stru_721530.field_20 = v1;
- stru_721530.normal.z = stru_721530.prolly_normal_d + v87 + 1;
- stru_721530.field_34.z = stru_721530.field_C + v87 + 1;
+ stru_721530.normal.z = stru_721530.prolly_normal_d + party_z + 1;
+ stru_721530.field_34.z = stru_721530.field_C + party_z + 1;
stru_721530.field_24 = v89;
- stru_721530.uSectorID = v77;
+ stru_721530.uSectorID = uSectorID;
v38 = 0;
if ( pParty->bTurnBasedModeOn == 1 && pTurnEngine->field_4 == 3 )
v38 = 13312;
@@ -2799,8 +2779,8 @@
{
_46E44E_collide_against_faces_and_portals(1u);
_46E0B2_collide_against_decorations();
- for ( i = 0; i < (signed int)uNumActors; ++i )
- _46DF1A_collide_against_actor(i, 0);
+ for ( v80 = 0; v80 < (signed int)uNumActors; ++v80 )
+ _46DF1A_collide_against_actor(v80, 0);
if ( _46F04E_collide_against_portals() )
break;
++v73;
@@ -2809,31 +2789,31 @@
if ( stru_721530.field_7C >= stru_721530.field_6C )
{
v39 = stru_721530.normal2.x;
- v77 = stru_721530.normal2.y;
+ uSectorID = stru_721530.normal2.y;
v40 = stru_721530.normal2.z - stru_721530.prolly_normal_d - 1;
}
else
{
- v39 = ((unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.field_58.x) >> 16) + v86;
- v77 = v85 + ((unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.field_58.y) >> 16);
- v40 = v37 + ((unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.field_58.z) >> 16);
- }
- v42 = _46ED1B_collide_against_floor(v39, v77, v40 + 40, &stru_721530.uSectorID, &v79);
- if ( v42 == -30000 || v42 - v37 > 128 )
+ v39 = ((unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.field_58.x) >> 16) + new_party_x;
+ uSectorID = new_party_y + ((unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.field_58.y) >> 16);
+ v40 = new_party_z + ((unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.field_58.z) >> 16);
+ }
+ v42 = _46ED1B_collide_against_floor(v39, uSectorID, v40 + 40, &stru_721530.uSectorID, &uFaceID);
+ if ( v42 == -30000 || v42 - new_party_z > 128 )
return;
if ( stru_721530.field_7C >= stru_721530.field_6C )
{
- v86 = stru_721530.normal2.x;
- v85 = stru_721530.normal2.y;
- v37 = stru_721530.normal2.z - stru_721530.prolly_normal_d - 1;
+ new_party_x = stru_721530.normal2.x;
+ new_party_y = stru_721530.normal2.y;
+ new_party_z = stru_721530.normal2.z - stru_721530.prolly_normal_d - 1;
break;
}
- v86 += (unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.field_58.x) >> 16;
- v85 += (unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.field_58.y) >> 16;
+ new_party_x += (unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.field_58.x) >> 16;
+ new_party_y += (unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.field_58.y) >> 16;
v43 = stru_721530.uFaceID;
- v77 = stru_721530.uSectorID;
+ uSectorID = stru_721530.uSectorID;
stru_721530.field_70 += stru_721530.field_7C;
- v87 = ((unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.field_58.z) >> 16) + v37;
+ auto v87 = ((unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.field_58.z) >> 16) + new_party_z;
if ( (stru_721530.uFaceID & 7) == 3 )
{
if ( SHIDWORD(pParty->pPartyBuffs[11].uExpireTime) >= 0
@@ -2845,13 +2825,13 @@
if ( (stru_721530.uFaceID & 7) == 5 )
{
v53 = sub_452A9E(v2 * v2 + v1 * v1);
- i = v53;
+ v80 = v53;
v54 = stru_5C6E00->Atan2(
- v86 - pLevelDecorations[(signed int)stru_721530.uFaceID >> 3].vPosition.x,
- v85 - pLevelDecorations[(signed int)stru_721530.uFaceID >> 3].vPosition.y);
+ 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);
- v1 = (unsigned __int64)(v55 * (signed __int64)i) >> 16;
+ v1 = (unsigned __int64)(v55 * (signed __int64)v80) >> 16;
}
else
{
@@ -2878,43 +2858,43 @@
v48 = v44->pFacePlane_old.vNormal.x;
if ( !v47 )
{
- i = abs(v1 * v44->pFacePlane_old.vNormal.y + v46 + v2 * v48) >> 16;
- if ( stru_721530.field_64 >> 3 > i )
- i = stru_721530.field_64 >> 3;
- v50 = (unsigned __int64)(i * (signed __int64)v44->pFacePlane_old.vNormal.x) >> 16;
+ v80 = abs(v1 * v44->pFacePlane_old.vNormal.y + v46 + v2 * v48) >> 16;
+ if ( stru_721530.field_64 >> 3 > v80 )
+ v80 = stru_721530.field_64 >> 3;
+ v50 = (unsigned __int64)(v80 * (signed __int64)v44->pFacePlane_old.vNormal.x) >> 16;
v81 = v44->pFacePlane_old.vNormal.y;
- v81 = (unsigned __int64)(i * (signed __int64)v81) >> 16;
+ v81 = (unsigned __int64)(v80 * (signed __int64)v81) >> 16;
v82 = v44->pFacePlane_old.vNormal.z;
- v82 = (unsigned __int64)(i * (signed __int64)v82) >> 16;
+ v82 = (unsigned __int64)(v80 * (signed __int64)v82) >> 16;
v2 += v50;
v89 += v82;
v74 = v44->pFacePlane_old.vNormal.z;
v51 = v44->pFacePlane_old.vNormal.y;
v69 = v44->pFacePlane_old.vNormal.x;
- i = v51;
+ v80 = v51;
v1 += v81;
- v52 = stru_721530.prolly_normal_d - ((v44->pFacePlane_old.dist + v87 * v74 + v85 * v51 + v86 * v69) >> 16);
+ v52 = stru_721530.prolly_normal_d - ((v44->pFacePlane_old.dist + v87 * v74 + new_party_y * v51 + new_party_x * v69) >> 16);
if ( v52 > 0 )
{
- v86 += v52 * v69 >> 16;
- v85 += v52 * i >> 16;
+ new_party_x += v52 * v69 >> 16;
+ new_party_y += v52 * v80 >> 16;
v87 += v52 * v74 >> 16;
}
LABEL_142:
v43 = stru_721530.uFaceID;
LABEL_143:
if ( pParty->field_6F4_packedid != v43 >> 3 && BYTE3(v44->uAttributes) & 4 )
- v70 = pIndoor->pFaceExtras[v44->uFaceExtraID].uEventID;
+ uFaceEvent = pIndoor->pFaceExtras[v44->uFaceExtraID].uEventID;
goto LABEL_152;
}
- i = abs(v1 * v44->pFacePlane_old.vNormal.y + v46 + v2 * v48) >> 16;
- if ( stru_721530.field_64 >> 3 > i )
- i = stru_721530.field_64 >> 3;
- v49 = (unsigned __int64)(i * (signed __int64)v44->pFacePlane_old.vNormal.x) >> 16;
+ v80 = abs(v1 * v44->pFacePlane_old.vNormal.y + v46 + v2 * v48) >> 16;
+ if ( stru_721530.field_64 >> 3 > v80 )
+ v80 = stru_721530.field_64 >> 3;
+ v49 = (unsigned __int64)(v80 * (signed __int64)v44->pFacePlane_old.vNormal.x) >> 16;
v81 = v44->pFacePlane_old.vNormal.y;
- v81 = (unsigned __int64)(i * (signed __int64)v81) >> 16;
+ v81 = (unsigned __int64)(v80 * (signed __int64)v81) >> 16;
v82 = v44->pFacePlane_old.vNormal.z;
- v82 = (unsigned __int64)(i * (signed __int64)v82) >> 16;
+ v82 = (unsigned __int64)(v80 * (signed __int64)v82) >> 16;
v2 += v49;
v1 += v81;
v89 += v82;
@@ -2932,18 +2912,18 @@
v89 = (unsigned __int64)(58500i64 * v89) >> 16;
if ( v83 >= 100 )
{
- v37 = v87;
+ new_party_z = v87;
break;
}
}
if ( bWalkSound && pParty->field_6F8 <= 0 )
{
- if ( sub_452A9E((pParty->vPosition.x - v86) * (pParty->vPosition.x - v86) + (pParty->vPosition.z - v85)
- * (pParty->vPosition.z - v85)
- + (pParty->vPosition.y - v37)
- * (pParty->vPosition.y - v37)) <= 16 )
+ if ( sub_452A9E((pParty->vPosition.x - new_party_x) * (pParty->vPosition.x - new_party_x) + (pParty->vPosition.y - new_party_y)
+ * (pParty->vPosition.y - new_party_y)
+ + (pParty->vPosition.z - new_party_z)
+ * (pParty->vPosition.z - new_party_z)) <= 16 )
goto LABEL_188;
- if ( v72 && (!bJumping || bFeatherFalla) )
+ if ( v72 && (!bJumping || bFeatherFall) )
{
v66 = 0;
v64 = 0;
@@ -2955,7 +2935,7 @@
if ( !v71 )
{
v56 = pAudioPlayer;
- if ( BYTE2(pIndoor->pFaces[v79].uAttributes) & 0x20 )
+ if ( BYTE2(pIndoor->pFaces[uFaceID].uAttributes) & 0x20 )
v57 = (SoundID)50;
else
v57 = (SoundID)64;
@@ -2966,7 +2946,7 @@
v56 = pAudioPlayer;
goto LABEL_175;
}
- if ( v78 && (!bJumping || bFeatherFalla) )
+ if ( v78 && (!bJumping || bFeatherFall) )
{
v66 = 0;
v64 = 0;
@@ -2981,7 +2961,7 @@
goto LABEL_174;
}
v56 = pAudioPlayer;
- if ( BYTE2(pIndoor->pFaces[v79].uAttributes) & 0x20 )
+ if ( BYTE2(pIndoor->pFaces[uFaceID].uAttributes) & 0x20 )
v57 = (SoundID)89;
else
v57 = (SoundID)103;
@@ -2995,19 +2975,19 @@
pParty->field_6F8 = 64;
}
}
- if ( !bJumping || bFeatherFalla )
+ if ( !bJumping || bFeatherFall )
pParty->uFlags &= 0xFFFFFFF7u;
else
pParty->uFlags |= 8u;
BYTE1(pParty->uFlags) &= 0xFDu;
- pParty->vPosition.x = v86;
- pParty->vPosition.y = v37;
- pParty->vPosition.z = v85;
+ pParty->vPosition.x = new_party_x;
+ pParty->vPosition.z = new_party_z;
+ pParty->vPosition.y = new_party_y;
pParty->uFallSpeed = v89;
- if ( !bJumping && BYTE3(pIndoor->pFaces[v79].uAttributes) & 0x40 )
+ if ( !bJumping && BYTE3(pIndoor->pFaces[uFaceID].uAttributes) & 0x40 )
BYTE1(pParty->uFlags) |= 2u;
- if ( v70 )
- EventProcessor(v70, 0, 1);
+ if (uFaceEvent)
+ EventProcessor(uFaceEvent, 0, 1);
}
@@ -3147,17 +3127,17 @@
int v130; // [sp+90h] [bp-4h]@14
v121 = pParty->uFallSpeed;
- v123 = pParty->vPosition.y;
+ v123 = pParty->vPosition.z;
_zero = 0;
v1 = 0;
v103 = 0;
v2 = 0;
*(float *)&v128 = 0.0;
v116 = pParty->vPosition.x;
- v117 = pParty->vPosition.z;
+ v117 = pParty->vPosition.y;
v113 = pParty->field_6F0;
bJumping = 0;
- v118 = GetTerrainHeightsAroundParty(pParty->vPosition.x, pParty->vPosition.z);
+ v118 = GetTerrainHeightsAroundParty(pParty->vPosition.x, pParty->vPosition.y);
v114 = 0;
v124 = 0;
v108 = 0;
@@ -3286,7 +3266,7 @@
|| pParty->pPartyBuffs[7].uFlags & 1
|| *(int *)&pParty->pArtifactsFound[6972 * pParty->pPartyBuffs[7].uCaster + 10] > 0 )
{
- if ( pParty->vPosition.y < 4000 || bJumping )
+ if ( pParty->vPosition.z < 4000 || bJumping )
{
v123 += 30;
v113 += 30;
@@ -3306,7 +3286,7 @@
pParty->field_6E4 = 0;
pPartyActionQueue->uNumActions = 0;
BYTE1(pParty->uFlags) |= 1u;
- pParty->vPosition.y = v109 - pParty->uPartyHeight - 31;
+ pParty->vPosition.z = v109 - pParty->uPartyHeight - 31;
pParty->field_6F0 = v123;
pParty->bFlying = 0;
v123 = v109 - pParty->uPartyHeight - 31;
@@ -3420,12 +3400,12 @@
v126 = v19;
*(float *)&v128 = v20;
v124 = (unsigned __int64)(v19
- * (signed __int64)(signed int)(signed __int64)(v20 * fBackwardMovementSlowdownMultiplier)) >> 16;
+ * (signed __int64)(signed int)(signed __int64)(v20 * fBackwardWalkSpeedMultiplier)) >> 16;
v2 -= v124;
v126 = stru_5C6E00->SinCos(_angle_y - stru_5C6E00->uIntegerHalfPi);
v124 = (unsigned __int64)(v126
* (signed __int64)(signed int)(signed __int64)(*(float *)&v128
- * fBackwardMovementSlowdownMultiplier)) >> 16;
+ * fBackwardWalkSpeedMultiplier)) >> 16;
LABEL_90:
v1 -= v124;
goto LABEL_86;
@@ -3486,7 +3466,7 @@
v28 = (double)_walk_speed;
v126 = v27;
*(float *)&v128 = v28;
- v29 = (signed __int64)(v28 * fBackwardMovementSlowdownMultiplier);
+ v29 = (signed __int64)(v28 * fBackwardWalkSpeedMultiplier);
if ( pParty->bFlying )
{
v129 = (unsigned __int64)(v126 * (signed __int64)(4 * (signed int)v29)) >> 16;
@@ -3495,7 +3475,7 @@
v129 = (unsigned __int64)(v126
* (signed __int64)(signed int)(4
* (unsigned __int64)(signed __int64)(*(float *)&v128
- * fBackwardMovementSlowdownMultiplier))) >> 16;
+ * fBackwardWalkSpeedMultiplier))) >> 16;
v1 -= v129;
LABEL_93:
v128 = v1;
@@ -3507,7 +3487,7 @@
v126 = stru_5C6E00->SinCos(_angle_y - stru_5C6E00->uIntegerHalfPi);
v129 = (unsigned __int64)(v126
* (signed __int64)(signed int)(signed __int64)(*(float *)&v128
- * fBackwardMovementSlowdownMultiplier)) >> 16;
+ * fBackwardWalkSpeedMultiplier)) >> 16;
v1 -= v129;
LABEL_86:
v128 = v1;
@@ -3635,7 +3615,7 @@
{
if ( v34 < -500
&& !pParty->bFlying
- && pParty->vPosition.y - v111 > 1000
+ && pParty->vPosition.z - v111 > 1000
&& SHIDWORD(pParty->pPartyBuffs[5].uExpireTime) <= 0
&& (SHIDWORD(pParty->pPartyBuffs[5].uExpireTime) < 0 || !LODWORD(pParty->pPartyBuffs[5].uExpireTime)) )
{
@@ -3683,7 +3663,7 @@
if ( stru_721530._47050A(v36) )
break;
_46E889_collide_against_bmodels(1u);
- v37 = WorldPosToGridCellZ(pParty->vPosition.z);
+ v37 = WorldPosToGridCellZ(pParty->vPosition.y);
v38 = WorldPosToGridCellX(pParty->vPosition.x);
_46E26D_collide_against_sprites(v38, v37);
_46ED8A_collide_against_layingItems(4u);
@@ -3856,7 +3836,7 @@
LABEL_220:
v45 = stru_721530.uFaceID;
LABEL_221:
- if ( pParty->field_6F4_packedid != v45 && BYTE3(v47->uFaceAttributes) & 4 )
+ if ( pParty->field_6F4_packedid != v45 && BYTE3(v47->uAttributes) & 4 )
{
pParty->field_6F4_packedid = v45;
v103 = v47->sCogTriggeredID;
@@ -3894,14 +3874,14 @@
if ( bWalkSound && pParty->field_6F8 <= 0 )
{
v122 = abs(pParty->vPosition.x - v116);
- v126 = abs(pParty->vPosition.z - v117);
- v62 = abs(pParty->vPosition.y - v123);
+ v126 = abs(pParty->vPosition.y - v117);
+ v62 = abs(pParty->vPosition.z - v123);
if ( sub_452A9E(v122 * v122 + v126 * v126 + v62 * v62) < 8 )
goto LABEL_344;
if ( v114 && (!bJumping || v101) )
{
if ( !v107
- && !(BYTE1(pOutdoor->pBModels[pParty->field_6F4_packedid >> 9].pFaces[(pParty->field_6F4_packedid >> 3) & 0x3F].uFaceAttributes) & 0x20) )
+ && !(BYTE1(pOutdoor->pBModels[pParty->field_6F4_packedid >> 9].pFaces[(pParty->field_6F4_packedid >> 3) & 0x3F].uAttributes) & 0x20) )
{
v96 = 0;
v94 = 0;
@@ -3922,7 +3902,7 @@
v88 = 804;
v86 = 1;
LABEL_255:
- v63 = WorldPosToGridCellZ(pParty->vPosition.z) - 1;
+ v63 = WorldPosToGridCellZ(pParty->vPosition.y) - 1;
v64 = WorldPosToGridCellX(pParty->vPosition.x);
v87 = pOutdoor->_47EE49(v64, v63, v86);
goto LABEL_257;
@@ -3930,7 +3910,7 @@
if ( v124 && (!bJumping || v101) )
{
if ( v107
- || BYTE1(pOutdoor->pBModels[pParty->field_6F4_packedid >> 9].pFaces[(pParty->field_6F4_packedid >> 3) & 0x3F].uFaceAttributes) & 0x20 )
+ || BYTE1(pOutdoor->pBModels[pParty->field_6F4_packedid >> 9].pFaces[(pParty->field_6F4_packedid >> 3) & 0x3F].uAttributes) & 0x20 )
{
v96 = 0;
v94 = 0;
@@ -3965,7 +3945,7 @@
else
pParty->uFlags |= 8u;
v126 = WorldPosToGridCellX(pParty->vPosition.x);
- v65 = WorldPosToGridCellZ(pParty->vPosition.z) - 1;
+ v65 = WorldPosToGridCellZ(pParty->vPosition.y) - 1;
v114 = WorldPosToGridCellX(v116);
v66 = WorldPosToGridCellZ(v117) - 1;
v127 = (BSPModel *)(((unsigned int)~pOutdoor->ActuallyGetSomeOtherTileInfo(v126, v65) >> 1) & 1);
@@ -3985,25 +3965,25 @@
pParty->uFallSpeed = v121;
v73 = v123;
pParty->vPosition.x = v116;
- pParty->vPosition.z = v117;
- pParty->vPosition.y = v123;
+ pParty->vPosition.y = v117;
+ pParty->vPosition.z = v123;
pParty->field_6F0 = v113;
if ( v123 > 8160 )
{
v73 = 8160;
pParty->uFallStartY = 8160;
- pParty->vPosition.y = 8160;
+ pParty->vPosition.z = 8160;
}
if ( !v103
|| (EventProcessor(v103, 0, 1), pParty->vPosition.x == v71)
- && pParty->vPosition.z == v72
- && (v73 = pParty->vPosition.y, pParty->vPosition.y == v70) )
+ && pParty->vPosition.y == v72
+ && (v73 = pParty->vPosition.z, pParty->vPosition.z == v70) )
{
if ( v73 < v111 )
{
pParty->uFallSpeed = 0;
v73 = v105;
- pParty->vPosition.y = v105;
+ pParty->vPosition.z = v105;
if ( pParty->uFallStartY - v70 > 512 && !bFeatherFall && v70 <= v105 && !bUnderwater )
{
if ( pParty->uFlags & 0x100 )
@@ -4026,7 +4006,7 @@
++v74;
}
while ( (signed int)v74 <= (signed int)&pPlayers[4] );
- v73 = pParty->vPosition.y;
+ v73 = pParty->vPosition.z;
}
}
pParty->uFallStartY = v70;
@@ -4035,7 +4015,7 @@
{
if ( (signed int)(pParty->uPartyHeight + v73) >= v109 )
{
- pParty->vPosition.y = v109 - pParty->uPartyHeight - 1;
+ pParty->vPosition.z = v109 - pParty->uPartyHeight - 1;
pParty->field_6F0 = v109 - pParty->uPartyHeight - 1;
}
}
@@ -4070,7 +4050,7 @@
if ( v78 )
{
LABEL_312:
- pParty->vPosition.z = v117;
+ pParty->vPosition.y = v117;
LABEL_313:
if ( bWaterWalk )
{
@@ -4097,33 +4077,33 @@
LABEL_318:
v81 = v123;
v82 = v123;
- pParty->vPosition.y = v123;
+ pParty->vPosition.z = v123;
if ( v123 > 8160 )
{
v82 = 8160;
pParty->uFallStartY = 8160;
- pParty->vPosition.y = 8160;
+ pParty->vPosition.z = 8160;
}
LOWORD(pParty->uFlags) &= 0xFDFBu;
pParty->uFallSpeed = v121;
pParty->field_6F0 = v113;
if ( v114 )
{
- v83 = GetTerrainHeightsAroundParty2(pParty->vPosition.x, pParty->vPosition.z, &v110, 1);
- v82 = pParty->vPosition.y;
- if ( pParty->vPosition.y <= v83 )
+ v83 = GetTerrainHeightsAroundParty2(pParty->vPosition.x, pParty->vPosition.y, &v110, 1);
+ v82 = pParty->vPosition.z;
+ if ( pParty->vPosition.z <= v83 )
pParty->uFlags |= 4u;
}
if ( !v103
|| (EventProcessor(v103, 0, 1), pParty->vPosition.x == v116)
- && pParty->vPosition.z == v117
- && (v82 = pParty->vPosition.y, pParty->vPosition.y == v81) )
+ && pParty->vPosition.y == v117
+ && (v82 = pParty->vPosition.z, pParty->vPosition.z == v81) )
{
if ( v82 < v111 )
{
v82 = v105;
pParty->uFallSpeed = 0;
- pParty->vPosition.y = v105;
+ pParty->vPosition.z = v105;
if ( pParty->uFallStartY - v81 > 512 && !bFeatherFall && v81 <= v105 && !bUnderwater )
{
if ( pParty->uFlags & 0x100 )
@@ -4145,14 +4125,14 @@
++v84;
}
while ( (signed int)v84 <= (signed int)&pPlayers[4] );
- v82 = pParty->vPosition.y;
+ v82 = pParty->vPosition.z;
}
}
pParty->uFallStartY = v81;
}
if ( v102 && v82 < v109 && (signed int)(pParty->uPartyHeight + v82) >= v109 )
{
- pParty->vPosition.y = v82 + pParty->uPartyHeight - v109 + 1;
+ pParty->vPosition.z = v82 + pParty->uPartyHeight - v109 + 1;
pParty->field_6F0 = v82 + pParty->uPartyHeight - v109 + 1;
}
}
@@ -4733,6 +4713,7 @@
}
//----- (00476395) --------------------------------------------------------
+//0x26 Wizard eye at skill level 2
bool __thiscall CheckHiredNPCSpeciality(unsigned int uProfession)
{
bool result; // eax@2
@@ -6796,7 +6777,7 @@
}
while ( 1 )
{
- if ( pFace->uFaceAttributes & 0x2000 )
+ if (pFace->Invisible())
goto LABEL_85;
v5 = (int)*(v2 - 1);
v6 = pFace->pVertexIDs[0];
@@ -6806,7 +6787,7 @@
*(int *)&v7->flags = 0;
pLightmapBuilder = v8;
v9 = pFace->uTextureID;
- v10 = (BYTE1(pFace->uFaceAttributes) & 0x40) == 0;
+ v10 = (BYTE1(pFace->uAttributes) & 0x40) == 0;
v48 = pFace->uTextureID;
if ( !v10 )
{
@@ -6818,14 +6799,14 @@
v12 = (v9 != -1 ? pBitmaps_LOD->pTextures[v9].uTextureWidth : 24);
v49 = v12;
v49 = pFaceTexture->uTextureHeight;
- v10 = (pFace->uFaceAttributes & 0x10) == 0;
+ v10 = (pFace->uAttributes & 0x10) == 0;
v45 = 1.0 / (double)v12;
v44 = 1.0 / (double)v49;
if ( !v10 )
*(int *)&v7->flags |= 2u;
- if ( BYTE2(pFace->uFaceAttributes) & 0x40 )
+ if ( BYTE2(pFace->uAttributes) & 0x40 )
HIBYTE(v7->flags) |= 4u;
- v13 = pFace->uFaceAttributes;
+ v13 = pFace->uAttributes;
if ( v13 & 4 )
{
HIBYTE(v7->flags) |= 4u;
@@ -6835,7 +6816,7 @@
if ( v13 & 0x20 )
HIBYTE(v7->flags) |= 8u;
}
- v14 = pFace->uFaceAttributes;
+ v14 = pFace->uAttributes;
if ( BYTE1(v14) & 8 )
{
*(int *)&v7->flags |= 0x2000u;
@@ -6925,7 +6906,7 @@
}
else
{
- v47->_436BB7_project_and_stuff((RenderVertexSoft *)(v23 - 12), 1u, 0);
+ v47->Project((RenderVertexSoft *)(v23 - 12), 1u, 0);
}
v23 += 48;
--v51;
@@ -7004,7 +6985,7 @@
pDecalBuilder->ApplyDecals_OutdoorFace(pFace);
v31->std__vector_000004_size = 0;
LOBYTE(v31) = 0;
- if ( stru_F8AD28.field_AC > 0 || pDecalBuilder->uNumDecals > 0 )
+ if ( stru_F8AD28.uNumLightsApplied > 0 || pDecalBuilder->uNumDecals > 0 )
{
v31 = (LightmapBuilder *)(v50 ? 3 : v49 != 0 ? 5 : 0);
static_RenderBuildingsD3D_stru_73C834._49B04D(pFace, (BSPVertexBuffer *)v56 - 1);
@@ -7026,13 +7007,13 @@
-1);
}
}
- if ( stru_F8AD28.field_AC > 0 )
+ if ( stru_F8AD28.uNumLightsApplied > 0 )
pLightmapBuilder->ApplyLights(
&stru_F8AD28,
&static_RenderBuildingsD3D_stru_73C834,
uNumVertices,
array_50AC10,
- 0.0,
+ 0,
(char)v31);
if ( v50 )
{
@@ -7240,7 +7221,7 @@
}
else
{
- pGame->pIndoorCameraD3D->_436BB7_project_and_stuff((RenderVertexSoft *)(v9 - 12), 1u, 0);
+ pGame->pIndoorCameraD3D->Project((RenderVertexSoft *)(v9 - 12), 1u, 0);
}
v81 += 2;
v9 += 48;
@@ -7372,7 +7353,7 @@
}*/
pGame->pLightmapBuilder->ApplyLights_OutdoorFace((ODMFace *)v3);
- if ( stru_F8AD28.field_AC <= 0 )
+ if ( stru_F8AD28.uNumLightsApplied <= 0 )
{
v12->field_108 = 0;
}
@@ -7382,9 +7363,9 @@
v12->field_108 = 1;
static_sub_004789DE_stru_73C818._49B04D((ODMFace *)v3, v35);
- v55 = static_sub_004789DE_stru_73C818.vNormal.x;
- v56 = static_sub_004789DE_stru_73C818.vNormal.y;
- v57 = static_sub_004789DE_stru_73C818.vNormal.z;
+ v55 = static_sub_004789DE_stru_73C818.face_plane.vNormal.x;
+ v56 = static_sub_004789DE_stru_73C818.face_plane.vNormal.y;
+ v57 = static_sub_004789DE_stru_73C818.face_plane.vNormal.z;
pGame->pLightmapBuilder->_45CA88(&stru_F8AD28, array_50AC10, v26, (Vec3_float_ *)&v55);
}
if ( v74 )
@@ -7906,7 +7887,7 @@
//----- (00479A53) --------------------------------------------------------
-void __fastcall sub_479A53(unsigned int uNumVertices, unsigned int uFaceID)
+void __fastcall _479A53_draw_some_blv_poly(unsigned int uNumVertices, unsigned int uFaceID)
{
BLVFace *pFace; // esi@1
unsigned int v3; // edi@1
@@ -7989,6 +7970,8 @@
float v80; // [sp+16Ch] [bp-8h]@3
const void *v81; // [sp+170h] [bp-4h]@7
+ __debugbreak();
+
pFace = &pIndoor->pFaces[uFaceID];
v65 = uFaceID;
v3 = uNumVertices;
@@ -8522,7 +8505,7 @@
{
v15 = 0;
}
- v17 = sub_43F55F(a1, v15);
+ v17 = _43F55F_get_billboard_light_level(a1, v15);
if ( v17 > 27 )
v17 = 27;
if ( !a3 )
@@ -8539,7 +8522,7 @@
a3a = (double)(signed int)(((unsigned __int64)(11 * v12 / (pOutdoorCamera->shading_dist_shade << 16)) >> 16) + 20)
* pOutdoor->fFogDensity;
v13 = a3a + 6.7553994e15;
- v10 = sub_43F55F(a1, LODWORD(v13) + v11);
+ v10 = _43F55F_get_billboard_light_level(a1, LODWORD(v13) + v11);
if ( v10 > 27 )
v10 = 27;
if ( v10 < a4 )
@@ -8567,7 +8550,7 @@
{
v6 = 27;
}
- v10 = sub_43F55F(a1, v6);
+ v10 = _43F55F_get_billboard_light_level(a1, v6);
if ( v10 > 27 || !a3 )
v10 = 27;
return PaletteManager::Get_Dark_or_Red_LUT(v4, v10, 1);
@@ -9080,7 +9063,7 @@
{
LABEL_20:
if ( a5 )
- v6 = 8 * sub_43F55F(a5, v6 >> 3);
+ v6 = 8 * _43F55F_get_billboard_light_level(a5, v6 >> 3);
if ( v6 > 216 )
v6 = 216;
return (255 - v6) | ((255 - v6) << 16) | ((255 - v6) << 8);
@@ -9120,7 +9103,7 @@
}
v6 = a4a + v12;
if ( a5 )
- v6 = 8 * sub_43F55F(a5, v6 >> 3);
+ v6 = 8 * _43F55F_get_billboard_light_level(a5, v6 >> 3);
if ( v6 > 216 )
v6 = 216;
if ( v6 < v12 )
@@ -9346,7 +9329,7 @@
pOutdoorCamera->uNumEdges = 0;
pOutdoorCamera->uNumSpans = 0;
pOutdoorCamera->uNumSurfs = 0;
- pOutdoorCamera->field_3C = 0;
+ pOutdoorCamera->uNumBillboards = 0;
pOutdoorCamera->field_44 = 0;
}
@@ -12901,27 +12884,27 @@
//----- (0043F953) --------------------------------------------------------
-int __cdecl PrepareWallsRenderList_BLV()
+void PrepareWallsRenderList_BLV()
{
pStru170->uNumFaceIDs = 0;
- if ( pBLVRenderParams->uRadius )
- {
- pStru170->field_FA8[0].uSectorID = LOWORD(pBLVRenderParams->uRadius);
- pStru170->field_FA8[0].uViewportW = LOWORD(pBLVRenderParams->uViewportW);
- pStru170->field_FA8[0].uViewportZ = LOWORD(pBLVRenderParams->uViewportZ);
- pStru170->field_FA8[0].uViewportY = LOWORD(pBLVRenderParams->uViewportY);
- pStru170->field_FA8[0].uViewportX = LOWORD(pBLVRenderParams->uViewportX);
+ if ( pBLVRenderParams->uPartySectorID )
+ {
+ pStru170->field_FA8[0].uSectorID = pBLVRenderParams->uPartySectorID;
+ pStru170->field_FA8[0].uViewportW = pBLVRenderParams->uViewportW;
+ pStru170->field_FA8[0].uViewportZ = pBLVRenderParams->uViewportZ;
+ pStru170->field_FA8[0].uViewportY = pBLVRenderParams->uViewportY;
+ pStru170->field_FA8[0].uViewportX = pBLVRenderParams->uViewportX;
pStru170->field_FA8[0].field_C._43F9E1(
- SLOWORD(pBLVRenderParams->uViewportX),
- SLOWORD(pBLVRenderParams->uViewportY),
- SLOWORD(pBLVRenderParams->uViewportZ),
- SLOWORD(pBLVRenderParams->uViewportW));
+ pBLVRenderParams->uViewportX,
+ pBLVRenderParams->uViewportY,
+ pBLVRenderParams->uViewportZ,
+ pBLVRenderParams->uViewportW);
pStru170->field_FA8[0].uFaceID = -1;
pStru170->field_FA8[0].std__vector_0007A8 = -1;
pStru170->std__vector_000FA8 = 1;
sub_440639(0);
}
- return pStru170->RenderWalls();
+ pStru170->MakeVisibleSectorList();
}
//----- (0043F9E1) --------------------------------------------------------
@@ -13062,10 +13045,10 @@
else
{
v17 = &pGame->pIndoorCameraD3D;
- v15->flt_8 = pGame->pIndoorCameraD3D->flt_D0;
- v18 = (*v17)->flt_D4;
- v19 = v15->flt_8;
- v15->flt_C = v18;
+ v15->fov_x = pGame->pIndoorCameraD3D->fov_x;
+ v18 = (*v17)->fov_y;
+ v19 = v15->fov_x;
+ v15->fov_y = v18;
v31 = v19;
v25 = v19 + 6.7553994e15;
LODWORD(v20) = 0;
@@ -13074,7 +13057,7 @@
LODWORD(v31) = v12->scale;
v37 = (unsigned __int64)(SLODWORD(v31) * v20 / x) >> 16;
v15->field_0 = (unsigned __int64)(SLODWORD(v31) * v20 / x) >> 16;
- v31 = v15->flt_C;
+ v31 = v15->fov_y;
v25 = v31 + 6.7553994e15;
LODWORD(v20) = 0;
HIDWORD(v20) = SLOWORD(v25);
@@ -13084,15 +13067,15 @@
HIWORD(v22) = HIWORD(x);
v15->field_4 = v37;
v15->field_1E = v30;
- v15->field_20 = a1;
- v15->field_22 = a2;
- v15->field_24 = a3;
- v15->field_26 = a5;
- v15->field_28 = a6;
+ v15->some_x = a1;
+ v15->some_y = a2;
+ v15->some_z = a3;
+ v15->uScreenSpaceX = a5;
+ v15->uScreenSpaceY = a6;
v23 = 8 * v26;
LOBYTE(v23) = 8 * v26 | 5;
LOWORD(v22) = 0;
- v15->field_2C_prolly_tint = 0;
+ v15->uTintColor = 0;
v15->sZValue = v22 + v23;
v15->pSpriteFrame = v12;
}
@@ -13113,7 +13096,7 @@
local_0.flt_14 = 0.0;
local_0.flt_18 = 0.0;
local_0.flt_28 = 1.0;
- local_0.field_20 = (rand() & 0x80) + 128;
+ local_0.timeToLive = (rand() & 0x80) + 128;
local_0.uTextureID = pBitmaps_LOD->LoadTexture("effpar01");
pGame->pParticleEngine->AddParticle(&local_0);
}
@@ -13122,9 +13105,8 @@
//----- (0044028F) --------------------------------------------------------
-void __cdecl PrepareItemsRenderList_BLV()
-{
- char *v0; // edi@2
+void PrepareItemsRenderList_BLV()
+{
ObjectDesc *v1; // ebx@4
__int16 v2; // ax@5
RenderBillboard *v3; // esi@12
@@ -13137,11 +13119,6 @@
unsigned __int16 v10; // ax@12
int *v11; // eax@20
char v12; // zf@26
- IndoorCameraD3D **v13; // eax@27
- double v14; // st7@27
- float v15; // eax@27
- double v16; // ST30_8@27
- signed __int64 v17; // qtt@27
int v18; // ST5C_4@27
signed __int64 v19; // qtt@28
int v20; // ST5C_4@28
@@ -13149,14 +13126,12 @@
__int16 v22; // ax@29
int v23; // eax@29
SpriteFrame *v24; // [sp+1Ch] [bp-40h]@12
- ObjectDesc *v25; // [sp+20h] [bp-3Ch]@4
__int16 a5; // [sp+28h] [bp-34h]@12
int a6; // [sp+2Ch] [bp-30h]@12
int a2; // [sp+30h] [bp-2Ch]@12
int a1; // [sp+34h] [bp-28h]@12
int v30; // [sp+38h] [bp-24h]@12
int v31; // [sp+38h] [bp-24h]@27
- signed int v32; // [sp+3Ch] [bp-20h]@1
int a3; // [sp+40h] [bp-1Ch]@12
signed __int16 v34; // [sp+44h] [bp-18h]@14
int v35; // [sp+48h] [bp-14h]@25
@@ -13165,37 +13140,33 @@
signed int y; // [sp+54h] [bp-8h]@24
signed int x; // [sp+58h] [bp-4h]@24
- v32 = 0;
- if ( (signed int)uNumLayingItems > 0 )
- {
- v0 = (char *)&pLayingItems[0].uSectorID;
- do
- {
- if ( *((short *)v0 - 13) )
- {
- v1 = &pObjectList->pObjects[*((short *)v0 - 13)];
- v25 = v1;
+ for (uint i = 0; i < uNumLayingItems; ++i)
+ {
+ auto p = pLayingItems + i;
+ if (p->uObjectDescID)
+ {
+ v1 = &pObjectList->pObjects[p->uObjectDescID];
if ( !(v1->uFlags & 1) )
- {
- if ( ((v2 = *((short *)v0 - 14), v2 < 1000) || v2 >= 10000)
+ {
+ if ( ((v2 = p->uItemType, v2 < 1000) || v2 >= 10000)
&& (v2 < 500 || v2 >= 600)
&& (v2 < 811 || v2 >= 815)
- || pGame->pStru6Instance->_4A81CA((LayingItem *)(v0 - 28)) )
- {
- a5 = *(short *)v0;
- a1 = *((int *)v0 - 6);
- a2 = *((int *)v0 - 5);
- a3 = *((int *)v0 - 4);
+ || pGame->pStru6Instance->_4A81CA(p))
+ {
+ a5 = p->uSectorID;
+ a1 = p->vPosition.x;
+ a2 = p->vPosition.y;
+ a3 = p->vPosition.z;
v3 = &pBillboardRenderList[uNumBillboardsToDraw];
- v4 = pSpriteFrameTable->GetFrame(v1->uSpriteID, *((short *)v0 + 1));
+ v4 = pSpriteFrameTable->GetFrame(v1->uSpriteID, p->uSpriteFrameID);
v5 = v4;
v24 = v4;
v30 = v4->uFlags;
- a6 = v4->uGlowRadius * *((short *)v0 + 3);
+ a6 = v4->uGlowRadius * p->field_22;
v6 = stru_5C6E00->Atan2(
- *((int *)v0 - 6) - pBLVRenderParams->vPartyPos.x,
- *((int *)v0 - 5) - pBLVRenderParams->vPartyPos.y);
- LOWORD(v7) = *((short *)v0 - 3);
+ p->vPosition.x - pBLVRenderParams->vPartyPos.x,
+ p->vPosition.y - pBLVRenderParams->vPartyPos.y);
+ LOWORD(v7) = p->uFacing;
v8 = v30;
v9 = ((signed int)(stru_5C6E00->uIntegerPi + ((signed int)stru_5C6E00->uIntegerPi >> 3) + v7 - v6) >> 8) & 7;
v10 = v5->pHwSpriteIDs[v9];
@@ -13225,10 +13196,10 @@
a3,
a5,
a6,
- v25->uParticleTrailColorR,
- v25->uParticleTrailColorG,
- v25->uParticleTrailColorB,
- v11);
+ v1->uParticleTrailColorR,
+ v1->uParticleTrailColorG,
+ v1->uParticleTrailColorB,
+ byte_4E94D3);
}
if ( pGame->pIndoorCameraD3D->ApplyViewTransform_TrueIfStillVisible(
a1,
@@ -13244,7 +13215,7 @@
return;
++uNumBillboardsToDraw;
++uNumSpritesDrawnThisFrame;
- *(v0 - 2) |= 1u;
+ p->uAttributes |= 1u;
v12 = pRenderer->pRenderD3D == 0;
v3->uPalette = v24->uPaletteIndex;
v3->uIndoorSectorID = a5;
@@ -13258,33 +13229,27 @@
}
else
{
- v13 = &pGame->pIndoorCameraD3D;
- v3->flt_8 = pGame->pIndoorCameraD3D->flt_D0;
- v14 = (*v13)->flt_D4;
- v15 = v3->flt_8;
- v3->flt_C = v14;
- v16 = v15 + 6.7553994e15;
- LODWORD(v17) = 0;
- HIDWORD(v17) = SLOWORD(v16);
- v18 = v17 / x;
- v3->field_0 = (unsigned __int64)(v24->scale * v17 / x) >> 16;
- v31 = (unsigned __int64)(v24->scale * (signed __int64)v18) >> 16;
+ v3->fov_x = pGame->pIndoorCameraD3D->fov_x;
+ v3->fov_y = pGame->pIndoorCameraD3D->fov_y;
+ v18 = (int)floorf(v3->fov_x + 0.5f) / x;
+ v3->field_0 = (unsigned __int64)(v24->scale * (__int64)v18) >> 16;
+ v31 = (unsigned __int64)(v24->scale * (__int64)v18) >> 16;
}
HIWORD(v21) = HIWORD(x);
v3->field_4 = v31;
v3->field_1E = v34;
- v3->field_20 = a1;
- v3->field_22 = a2;
- v3->field_24 = a3;
- v3->field_26 = v36;
+ v3->some_x = a1;
+ v3->some_y = a2;
+ v3->some_z = a3;
+ v3->uScreenSpaceX = v36;
v22 = v35;
- v3->field_2C_prolly_tint = 0;
- v3->field_28 = v22;
+ v3->uTintColor = 0;
+ v3->uScreenSpaceY = v22;
LOWORD(v21) = 0;
- v23 = 8 * v32;
- LOBYTE(v23) = 8 * v32 | 2;
+ v23 = 8 * i;
+ LOBYTE(v23) = 8 * i | 2;
v3->pSpriteFrame = v24;
- v12 = (*(v0 - 2) & 0x20) == 0;
+ v12 = (p->uAttributes & 0x20) == 0;
v3->sZValue = v21 + v23;
if ( !v12 )
{
@@ -13295,10 +13260,6 @@
}
}
}
- ++v32;
- v0 += 112;
- }
- while ( v32 < (signed int)uNumLayingItems );
}
}
@@ -13319,7 +13280,10 @@
if ( v3->uNumNonBSPFaces > 0 )
{
do
- pStru170->_4B0EA8(v1, v3->pFaceIDs[v2++]);
+ {
+ Log::Warning(L"Non-BSP face: %X", v3->pFaceIDs[v2]);
+ pStru170->PrepareFaceRenderList_d3d(v1, v3->pFaceIDs[v2++]);
+ }
while ( v2 < v3->uNumNonBSPFaces );
}
}
@@ -13328,7 +13292,7 @@
if ( v3->uNumNonBSPFaces > 0 )
{
do
- pStru170->_4AFB86(v1, v3->pFaceIDs[v2++]);
+ pStru170->PrepareFaceRenderList_sw(v1, v3->pFaceIDs[v2++]);
while ( v2 < v3->uNumNonBSPFaces );
}
}
@@ -13351,6 +13315,8 @@
bool v11; // [sp+14h] [bp-8h]@5
stru170_stru0 *v12; // [sp+18h] [bp-4h]@1
+ Log::Warning(L"sub_4406BC(%u, %u)", a1, uFirstNode);
+
v10 = a1;
v12 = &pStru170->field_FA8[a1];
while ( 1 )
@@ -13373,15 +13339,18 @@
sub_4406BC(v10, v6);
v7 = v3->uCoplanarOffset;
v8 = v7 + v3->uCoplanarSize;
+
+ Log::Warning(L"Node %u: %X to %X (%hX)", uFirstNode, v7, v8, v2->pFaceIDs[v7]);
+
if ( pRenderer->pRenderD3D )
{
while ( v7 < v8 )
- pStru170->_4B0EA8(v10, v2->pFaceIDs[v7++]);
+ pStru170->PrepareFaceRenderList_d3d(v10, v2->pFaceIDs[v7++]);
}
else
{
while ( v7 < v8 )
- pStru170->_4AFB86(v10, v2->pFaceIDs[v7++]);
+ pStru170->PrepareFaceRenderList_sw(v10, v2->pFaceIDs[v7++]);
}
v9 = v11 ? v3->uFront : v3->uBack;
if ( v9 == -1 )
@@ -13393,20 +13362,18 @@
//----- (00440DF5) --------------------------------------------------------
int stru167_wrap::Push(__int16 a2, __int16 a3, __int16 a4, int a5, __int16 bgr)
{
- stru167_wrap *v6; // esi@1
int result; // eax@1
- v6 = this;
- v6->pElements[v6->uNumElements].field_6 = a2;
- this->pElements[this->uNumElements].field_8 = a3;
- this->pElements[this->uNumElements].field_A = a4;
- v6->pElements[v6->uNumElements].field_C = rand() % 64 + 256;
- v6->pElements[v6->uNumElements].field_E = v6->pElements[v6->uNumElements].field_C;
- result = 3 * v6->uNumElements;
- v6->pElements[v6->uNumElements++].bgr16 = bgr;
- if ( v6->uNumElements >= 100 )
- v6->uNumElements = 0;
- return result;
+ pElements[uNumElements].field_6_rnd_value = a2;
+ pElements[uNumElements].field_8_rnd_value = a3;
+ pElements[uNumElements].field_A_rnd_value = a4;
+ pElements[uNumElements].field_C_time_left = rand() % 64 + 256;
+ pElements[uNumElements].field_E_time_to_live = pElements[uNumElements].field_C_time_left;
+ result = 3 * uNumElements;
+ pElements[uNumElements++].bgr16 = bgr;
+ if (uNumElements >= 100 )
+ uNumElements = 0;
+ return result;
}
//----- (00440E91) --------------------------------------------------------
@@ -13431,38 +13398,30 @@
//----- (00440F07) --------------------------------------------------------
void stru167_wrap::_440F07()
{
- char *v1; // esi@1
- signed int v2; // edi@1
-
- v1 = (char *)&this->pElements[0].field_6;
- v2 = 100;
- do
- {
- if ( *((short *)v1 + 3) > 0 )
- {
- *((short *)v1 + 2) += rand() % 5 + 4;
- *(short *)v1 += rand() % 5 - 2;
- *((short *)v1 + 1) += rand() % 5 - 2;
- *((short *)v1 + 3) -= LOWORD(pEventTimer->uTimeElapsed);
- }
- v1 += 24;
- --v2;
- }
- while ( v2 );
+ for (uint i = 0; i < 100; ++i)
+ {
+ if (pElements[i].field_C_time_left > 0)
+ {
+ pElements[i].field_A_rnd_value += rand() % 5 + 4;
+ pElements[i].field_6_rnd_value += rand() % 5 - 2;
+ pElements[i].field_8_rnd_value += rand() % 5 - 2;
+ pElements[i].field_C_time_left -= (short)pEventTimer->uTimeElapsed;
+ }
+ }
}
//----- (0044100D) --------------------------------------------------------
bool __cdecl sub_44100D()
{
- return uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 4
- || uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 7
- || uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions > 12
- && (uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions <= 14
- || uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions > 16
- && (uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions <= 18
- || uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 23));
-}
-// 4E28F8: using guessed type int uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions;
+ return pCurrentScreen == 4
+ || pCurrentScreen == 7
+ || pCurrentScreen > 12
+ && (pCurrentScreen <= 14
+ || pCurrentScreen > 16
+ && (pCurrentScreen <= 18
+ || pCurrentScreen == 23));
+}
+// 4E28F8: using guessed type int pCurrentScreen;
//----- (00441498) --------------------------------------------------------
void __cdecl GameUI_DrawTorchlightAndWizardEye()
@@ -13472,17 +13431,17 @@
unsigned int v2; // eax@19
IconFrame *v3; // eax@19
- if ( !uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions
- || uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 1
- || uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 2
- || uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 5
- || uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 8
- || uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 10
- || uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 11
- || uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 12
- || uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 15
- || uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 3
- || uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 19 )
+ if ( !pCurrentScreen
+ || pCurrentScreen == 1
+ || pCurrentScreen == 2
+ || pCurrentScreen == 5
+ || pCurrentScreen == 8
+ || pCurrentScreen == 10
+ || pCurrentScreen == 11
+ || pCurrentScreen == 12
+ || pCurrentScreen == 15
+ || pCurrentScreen == 3
+ || pCurrentScreen == 19 )
{
if ( SHIDWORD(pParty->pPartyBuffs[16].uExpireTime) >= 0
&& (SHIDWORD(pParty->pPartyBuffs[16].uExpireTime) > 0 || LODWORD(pParty->pPartyBuffs[16].uExpireTime)) )
@@ -13506,19 +13465,18 @@
}
}
}
-// 4E28F8: using guessed type int uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions;
+// 4E28F8: using guessed type int pCurrentScreen;
//----- (0044158F) --------------------------------------------------------
void __cdecl GameUI_DrawCharacterSelectionFrame()
{
if ( uActiveCharacter )
pRenderer->DrawTextureTransparent(
- pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing__negindex[uActiveCharacter] - 9,
+ pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[uActiveCharacter - 1] - 9,
0x17Cu,
&pIcons_LOD->pTextures[dword_50C98C]);
}
-// 4ED746: using guessed type __int16 pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing__negindex[];
-// 50C98C: using guessed type int dword_50C98C;
+
//----- (004415C5) --------------------------------------------------------
void __cdecl Load_isn_spells_21_27()
@@ -13564,8 +13522,8 @@
pRenderer->_4A65CC(
pPartySpellbuffsUI_XYs[v1][0],
pPartySpellbuffsUI_XYs[v1][1],
- (Texture *)(v3 != -1 ? (int)&pIcons_LOD->pTextures[v3] : 0),
- (Texture *)(v3 != -1 ? (int)&pIcons_LOD->pTextures[v3] : 0),
+ (Texture *)(v3 != -1 ? &pIcons_LOD->pTextures[v3] : 0),
+ (Texture *)(v3 != -1 ? &pIcons_LOD->pTextures[v3] : 0),
v0 + 20 * pPartySpellbuffsUI_smthns[v1],
0,
63);
@@ -13573,8 +13531,8 @@
++v1;
}
while ( v1 < 14 );
- if ( !uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions
- || uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 4 )
+ if ( !pCurrentScreen
+ || pCurrentScreen == 4 )
{
if ( (signed __int64)pParty->pPartyBuffs[7].uExpireTime > 0 )
{
@@ -13687,17 +13645,17 @@
v11 = *((int *)v3 + 1);
v13 = v6->scale;
v13 = (unsigned __int64)(v11 * (signed __int64)v13) >> 16;
- v10.field_8 = *((short *)v3 - 2);
- v10.field_C = *((short *)v3 - 1);
+ v10.uScreenSpaceX = *((short *)v3 - 2);
+ v10.uScreenSpaceY = *((short *)v3 - 1);
v10.field_10 = v13;
v10.field_14 = v13;
v10.pPalette = PaletteManager::Get_Dark_or_Red_LUT(v6->uPaletteIndex, 0, 1);
v8 = *((short *)v3 - 5);
- v10.field_28 = 0;
+ v10.sZValue = 0;
v10.uFlags = 0;
v9 = pOverlayList->pOverlays[v8].uOverlayType;
if ( !v9 || v9 == 2 )
- v10.field_C += pSprites_LOD->pSpriteHeaders[v7->pHwSpriteIDs[0]].uHeight >> 1;
+ v10.uScreenSpaceY += pSprites_LOD->pSpriteHeaders[v7->pHwSpriteIDs[0]].uHeight >> 1;
result = pSprites_LOD->pSpriteHeaders[v7->pHwSpriteIDs[0]]._4AD2D1(&v10, 0);
++v12;
if ( v12 == 5 )
@@ -13715,28 +13673,23 @@
//----- (00441D38) --------------------------------------------------------
-void __fastcall GameUI_DrawMinimap(unsigned int uX, unsigned int uY, unsigned int uZ, unsigned int uW, unsigned int uZoom, unsigned int flags)
-{
- int v6; // ebx@6
- BLVFace *v7; // eax@8
- unsigned int *v8; // edi@9
- unsigned int v9; // edx@9
- unsigned int v10; // ebx@10
+void GameUI_DrawMinimap(unsigned int uX, unsigned int uY, unsigned int uZ, unsigned int uW, unsigned int uZoom, unsigned int flags)
+{
+ int uHeight; // ebx@6
+ //unsigned int v9; // edx@9
+ //unsigned int v10; // ebx@10
__int16 v11; // cx@11
- int v12; // ecx@17
- unsigned int v13; // ecx@21
+ //BLVFace *v12; // ecx@17
+ //unsigned int v13; // ecx@21
unsigned int v14; // ebx@23
int v15; // eax@23
- unsigned int *v16; // ecx@28
+ //unsigned int *v16; // ecx@28
__int16 v17; // di@30
double v18; // st7@30
float v19; // ST38_4@30
double v20; // st7@30
double v21; // st6@30
double v22; // st5@33
- float v23; // ST3C_4@37
- double v24; // ST20_8@37
- double v25; // ST20_8@37
unsigned __int16 *v26; // edx@37
signed int v27; // eax@37
unsigned __int16 *v28; // ecx@37
@@ -13786,30 +13739,23 @@
signed int uBluea; // [sp+28h] [bp-2Ch]@37
int v73; // [sp+2Ch] [bp-28h]@30
unsigned __int8 *v74; // [sp+30h] [bp-24h]@30
- signed int v75; // [sp+34h] [bp-20h]@4
int v76; // [sp+34h] [bp-20h]@91
int v77; // [sp+34h] [bp-20h]@108
signed int v78; // [sp+38h] [bp-1Ch]@37
int v79; // [sp+38h] [bp-1Ch]@72
- bool v80; // [sp+3Ch] [bp-18h]@2
- unsigned int a2; // [sp+40h] [bp-14h]@1
- int a2a; // [sp+40h] [bp-14h]@8
signed int a2b; // [sp+40h] [bp-14h]@41
char *a2c; // [sp+40h] [bp-14h]@68
- unsigned int a3; // [sp+44h] [bp-10h]@1
int a3a; // [sp+44h] [bp-10h]@40
- signed int uHeight; // [sp+48h] [bp-Ch]@1
- signed int uWidth; // [sp+4Ch] [bp-8h]@1
- signed int uZa; // [sp+5Ch] [bp+8h]@7
- signed int uZb; // [sp+5Ch] [bp+8h]@27
- signed int uZc; // [sp+5Ch] [bp+8h]@30
+ signed int uCenterY; // [sp+48h] [bp-Ch]@1
+ signed int uCenterX; // [sp+4Ch] [bp-8h]@1
+ //signed int uZb; // [sp+5Ch] [bp+8h]@27
+ signed int uWidth; // [sp+5Ch] [bp+8h]@30
signed int uZd; // [sp+5Ch] [bp+8h]@45
signed int uZe; // [sp+5Ch] [bp+8h]@67
signed int uZf; // [sp+5Ch] [bp+8h]@85
signed int uZg; // [sp+5Ch] [bp+8h]@105
unsigned int uWa; // [sp+60h] [bp+Ch]@23
float uWb; // [sp+60h] [bp+Ch]@30
- float uWe; // [sp+60h] [bp+Ch]@37
unsigned __int16 *uWc; // [sp+60h] [bp+Ch]@37
unsigned int uWd; // [sp+60h] [bp+Ch]@95
float uZooma; // [sp+64h] [bp+10h]@117
@@ -13818,25 +13764,26 @@
char *flagsc; // [sp+68h] [bp+14h]@86
unsigned int flagsd; // [sp+68h] [bp+14h]@105
- a3 = uY;
- a2 = uX;
- uWidth = (signed int)(uX + uZ) >> 1;
- uHeight = (signed int)(uY + uW) >> 1;
+ //a3 = uY;
+ //a2 = uX;
+ uCenterX = (uX + uZ) / 2;
+ uCenterY = (uY + uW) / 2;
lPitch = pRenderer->uTargetSurfacePitch;
GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0, 0, 0);
uBlue = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0, 0, 0xFFu);
- v80 = (signed __int64)pParty->pPartyBuffs[19].uExpireTime > 0;
- v75 = pParty->pPartyBuffs[19].uSkill;
- if ( CheckHiredNPCSpeciality(0x26u) )
- {
- v80 = 1;
- v75 = 2;
- }
- pRenderer->Clip_v2(a2, a3, uZ - 1, uW - 1);
- v6 = uW - a3;
+ auto bWizardEyeActive = pParty->WizardEyeActive();
+ auto uWizardEyeSkillLevel = pParty->WizardEyeSkillLevel();
+ if (CheckHiredNPCSpeciality(0x26u))
+ {
+ bWizardEyeActive = true;
+ uWizardEyeSkillLevel = 2;
+ }
+ pRenderer->Clip_v2(uX, uY, uZ - 1, uW - 1);
+ uHeight = uW - uY;
+ uWidth = uZ - uX;
+
if ( uCurrentlyLoadedLevelType != LEVEL_Indoor)
{
- uZc = uZ - a2;
v17 = pIcons_LOD->pTextures[viewparams->uTextureID_LocationMap].uWidthLn2;
v74 = pIcons_LOD->pTextures[viewparams->uTextureID_LocationMap].pLevelOfDetail0;
v62 = pIcons_LOD->pTextures[viewparams->uTextureID_LocationMap].pPalette16;
@@ -13844,58 +13791,58 @@
v18 = (double)(1 << (16 - v17));
v19 = v18;
v20 = (double)(pParty->vPosition.x + 32768) / v18;
- v21 = (double)(32768 - pParty->vPosition.z) / v19;
+ v21 = (double)(32768 - pParty->vPosition.y) / v19;
uWb = v21;
if ( uZoom == 512 )
{
- v20 = v20 - (double)(uZc / 2);
- v22 = (double)(v6 / 2);
+ v20 = v20 - (double)(uWidth / 2);
+ v22 = (double)(uHeight / 2);
}
else
{
if ( uZoom == 1024 )
{
- v20 = v20 - (double)(uZc / 4);
- v22 = (double)(v6 / 4);
+ v20 = v20 - (double)(uWidth / 4);
+ v22 = (double)(uHeight / 4);
}
else
{
if ( uZoom != 2048 )
goto LABEL_37;
- v20 = v20 - (double)(uZc / 8);
- v22 = (double)(v6 / 8);
+ v20 = v20 - (double)(uWidth / 8);
+ v22 = (double)(uHeight / 8);
}
}
uWb = v21 - v22;
LABEL_37:
- v23 = v20 * 65536.0;
- v24 = v23 + 6.7553994e15;
- v70 = LODWORD(v24);
- uWe = uWb * 65536.0;
- v25 = uWe + 6.7553994e15;
+ //v23 = v20 * 65536.0;
+ //v24 = v23 + 6.7553994e15;
+ v70 = floorf(v20 * 65536.0 + 0.5f);//LODWORD(v24);
+ //uWe = uWb * 65536.0;
+ //v25 = uWe + 6.7553994e15;
v78 = v70;
- uBluea = LODWORD(v25);
+ uBluea = floorf(uWb * 65536.0 + 0.5f);//LODWORD(v25);
v26 = (unsigned __int16 *)_56EFD8_minimap;
- v27 = SLODWORD(v25) >> 16;
+ v27 = uBluea >> 16;
uWc = (unsigned __int16 *)_56EFD8_minimap;
- v28 = &pRenderer->pTargetSurface[a2 + a3 * lPitch];
+ v28 = &pRenderer->pTargetSurface[uX + uY * lPitch];
if ( flags )
{
if ( v74 )
{
v64 = pIcons_LOD->pTextures[viewparams->uTextureID_LocationMap].uTextureWidth;
- if ( v6 > 0 )
- {
- a3a = v6;
+ if ( uHeight > 0 )
+ {
+ a3a = uHeight;
v29 = v70 >> 16;
do
{
a2b = 0;
- if ( uZc > 0 )
+ if ( uWidth > 0 )
{
v30 = (int)&v74[v27 * v64];
- flagsa = uZc;
- a2b = uZc;
+ flagsa = uWidth;
+ a2b = uWidth;
do
{
v31 = uWc;
@@ -13935,102 +13882,89 @@
}
while ( uZd );
uNumBlueFacesInBLVMinimap = 0;
- goto LABEL_50;
- }
- pRenderer->FillRect2(v6, a2, a3, uZ - a2, v6, 0xFu);
- uNumBlueFacesInBLVMinimap = 0;
- uZa = 0;
- if ( (signed int)pIndoor->pMapVertices->uNumVertices > 0 )
- {
- a2a = 0;
- v7 = pIndoor->pFaces;
- while ( 1 )
- {
- v8 = (uint *)&pIndoor->pMapVertices->pVertices[a2a];
- v9 = v7[LOWORD(pIndoor->pMapVertices[a2a + 2])].uAttributes;
- if ( !(BYTE1(v9) & 0x20) )
- {
- v10 = v7[HIWORD(pIndoor->pMapVertices[a2a + 2])].uAttributes;
- if ( !(BYTE1(v10) & 0x20) )
- {
- v11 = HIWORD(pIndoor->pMapVertices[a2a + 3]);
- if ( v11 & 1 )
- goto LABEL_15;
- if ( (v9 & 0x80u) != 0 || (v10 & 0x80u) != 0 )
- break;
- }
- }
-LABEL_26:
- ++uZa;
- a2a += 3;
- if ( uZa >= (signed int)pIndoor->pMapVertices->uNumVertices )
- goto LABEL_27;
- }
- HIWORD(pIndoor->pMapVertices[a2a + 3]) = v11 | 1;
- pIndoor->_visible_outlines[uZa >> 3] |= 1 << (7 - uZa % 8);
- v7 = pIndoor->pFaces;
+ }
+ else
+ {
+ pRenderer->FillRectFast(uX, uY, uZ - uX, uHeight, 0xF);
+ uNumBlueFacesInBLVMinimap = 0;
+
+ for (uint i = 0; i < pIndoor->pMapOutlines->uNumOutlines; ++i)
+ {
+ auto pOutline = &pIndoor->pMapOutlines->pOutlines[i];
+
+ auto pFace1 = pIndoor->pFaces + pOutline->uFace1ID;
+ auto pFace2 = pIndoor->pFaces + pOutline->uFace2ID;
+ //v9 = pIndoor->pFaces[pMapVertex->uFace1ID].uAttributes;
+ //v10 = pIndoor->pFaces[pMapVertex->uFace2ID].uAttributes;
+ if (pFace1->Visible() && pFace2->Visible())
+ {
+ v11 = pOutline->uFlags;
+ if ( v11 & 1 )
+ goto LABEL_15;
+ if (pFace1->uAttributes & 0x80 || pFace2->uAttributes & 0x80u != 0 )
+ goto LABEL_ABC;
+
+ }
+ continue;
+
+LABEL_ABC:
+ pOutline->uFlags = v11 | 1;
+ pIndoor->_visible_outlines[i >> 3] |= 1 << (7 - i % 8);
+
LABEL_15:
- if ( v80
- && v75 >= 3
- && ((v12 = (int)&v7[*((short *)v8 + 2)], *(int *)(v12 + 44) & 0x2000000)
- || v7[*((short *)v8 + 3)].uAttributes & 0x2000000)
- && (pIndoor->pFaceExtras[*(short *)(v12 + 72)].uEventID
- || pIndoor->pFaceExtras[v7[*((short *)v8 + 3)].uFaceExtraID].uEventID)
- && (v13 = uNumBlueFacesInBLVMinimap, (signed int)uNumBlueFacesInBLVMinimap < 49) )
- {
- pBlueFacesInBLVMinimapIDs[uNumBlueFacesInBLVMinimap] = uZa;
- uNumBlueFacesInBLVMinimap = v13 + 1;
- }
- else
- {
- v69 = uWidth
- + ((signed int)(((unsigned int)((unsigned __int64)((signed int)uZoom
- * (signed __int64)pIndoor->pVertices[*(short *)v8].x) >> 16) << 16)
- - uZoom * pParty->vPosition.x) >> 16);
- lPitcha = uHeight
- - ((signed int)(((unsigned int)((unsigned __int64)((signed int)uZoom
- * (signed __int64)pIndoor->pVertices[*(short *)v8].y) >> 16) << 16)
- - uZoom * pParty->vPosition.z) >> 16);
- uWa = uWidth
- + ((signed int)(((unsigned int)((unsigned __int64)((signed int)uZoom
- * (signed __int64)pIndoor->pVertices[*((short *)v8 + 1)].x) >> 16) << 16)
- - uZoom * pParty->vPosition.x) >> 16);
- v14 = uHeight
- - ((signed int)(((unsigned int)((unsigned __int64)((signed int)uZoom
- * (signed __int64)pIndoor->pVertices[*((short *)v8 + 1)].y) >> 16) << 16)
- - uZoom * pParty->vPosition.z) >> 16);
- v15 = abs(*((short *)v8 + 4) - pParty->vPosition.y) / 8;
+ //v12 = &pIndoor->pFaces[pOutline->uFace1ID];
+ if (bWizardEyeActive && uWizardEyeSkillLevel >= 3 &&
+ (pFace1->uAttributes & 0x2000000 || pFace2->uAttributes & 0x2000000) &&
+ (pIndoor->pFaceExtras[pFace1->uFaceExtraID].uEventID || pIndoor->pFaceExtras[pFace2->uFaceExtraID].uEventID))
+ {
+ if (uNumBlueFacesInBLVMinimap < 49)
+ pBlueFacesInBLVMinimapIDs[uNumBlueFacesInBLVMinimap++] = i;
+ }
+ else
+ {
+ auto _a = (uZoom * (signed __int64)pIndoor->pVertices[pOutline->uVertex1ID].x);
+ auto _b = ((unsigned int)((unsigned __int64)_a >> 16) << 16);
+ auto _c = ((signed int)(_b - uZoom * pParty->vPosition.x) >> 16);
+ v69 = uCenterX + _c;
+ v69 = uCenterX + ((signed int)(((unsigned int)((unsigned __int64)(uZoom * (signed __int64)pIndoor->pVertices[pOutline->uVertex1ID].x) >> 16) << 16) - uZoom * pParty->vPosition.x) >> 16);
+ lPitcha = uCenterY - ((signed int)(((unsigned int)((unsigned __int64)(uZoom * (signed __int64)pIndoor->pVertices[pOutline->uVertex1ID].y) >> 16) << 16) - uZoom * pParty->vPosition.y) >> 16);
+ uWa = uCenterX + ((signed int)(((unsigned int)((unsigned __int64)(uZoom * (signed __int64)pIndoor->pVertices[pOutline->uVertex2ID].x) >> 16) << 16) - uZoom * pParty->vPosition.x) >> 16);
+ v14 = uCenterY - ((signed int)(((unsigned int)((unsigned __int64)(uZoom * (signed __int64)pIndoor->pVertices[pOutline->uVertex2ID].y) >> 16) << 16) - uZoom * pParty->vPosition.y) >> 16);
+ v15 = abs(pOutline->sZ - pParty->vPosition.z) / 8;
if ( v15 > 100 )
v15 = 100;
- pRenderer->FillRect(v69, lPitcha, uWa, v14, viewparams->pPalette[-v15 + 200]);
- v7 = pIndoor->pFaces;
- }
- goto LABEL_26;
- }
-LABEL_27:
- for ( uZb = 0; uZb < (signed int)uNumBlueFacesInBLVMinimap; ++uZb )
- {
- v16 = (uint *)&pIndoor->pMapVertices->pVertices[3 * pBlueFacesInBLVMinimapIDs[uZb]];
- pRenderer->FillRect(
- uWidth
+ pRenderer->Line2D(v69, lPitcha, uWa, v14, viewparams->pPalette[-v15 + 200]);
+ }
+ }
+
+
+ for (uint i = 0; i < uNumBlueFacesInBLVMinimap; ++i)
+ {
+ //v16 = (uint *)&pIndoor->pMapOutlines->pOutlines[pBlueFacesInBLVMinimapIDs[uZb]];
+ auto pOutline = &pIndoor->pMapOutlines->pOutlines[pBlueFacesInBLVMinimapIDs[i]];
+ pRenderer->Line2D(
+ uCenterX
+ ((signed int)(((unsigned int)((unsigned __int64)((signed int)uZoom
- * (signed __int64)pIndoor->pVertices[*(short *)v16].x) >> 16) << 16)
+ * (signed __int64)pIndoor->pVertices[pOutline->uVertex1ID].x) >> 16) << 16)
- uZoom * pParty->vPosition.x) >> 16),
- uHeight
+ uCenterY
- ((signed int)(((unsigned int)((unsigned __int64)((signed int)uZoom
- * (signed __int64)pIndoor->pVertices[*(short *)v16].y) >> 16) << 16)
- - uZoom * pParty->vPosition.z) >> 16),
- uWidth
+ * (signed __int64)pIndoor->pVertices[pOutline->uVertex1ID].y) >> 16) << 16)
+ - uZoom * pParty->vPosition.y) >> 16),
+ uCenterX
+ ((signed int)(((unsigned int)((unsigned __int64)((signed int)uZoom
- * (signed __int64)pIndoor->pVertices[HIWORD(pIndoor->pMapVertices[3 * pBlueFacesInBLVMinimapIDs[uZb] + 1])].x) >> 16) << 16)
+ * (signed __int64)pIndoor->pVertices[pOutline->uVertex2ID].x) >> 16) << 16)
- uZoom * pParty->vPosition.x) >> 16),
- uHeight
+ uCenterY
- ((signed int)(((unsigned int)((unsigned __int64)((signed int)uZoom
- * (signed __int64)pIndoor->pVertices[HIWORD(pIndoor->pMapVertices[3 * pBlueFacesInBLVMinimapIDs[uZb] + 1])].y) >> 16) << 16)
- - uZoom * pParty->vPosition.z) >> 16),
+ * (signed __int64)pIndoor->pVertices[pOutline->uVertex2ID].y) >> 16) << 16)
+ - uZoom * pParty->vPosition.y) >> 16),
uBlue);
}
-LABEL_50:
+ }
+
+
+//_draw_party_arrow:
v33 = 0;
v34 = pParty->sRotationY & stru_5C6E00->uDoublePiMask;
v35 = 0;
@@ -14082,27 +14016,28 @@
v35 = v57;
LABEL_66:
pRenderer->DrawTextureTransparent(
- uWidth - 3,
- uHeight - 3,
+ uCenterX - 3,
+ uCenterY - 3,
(Texture *)(pTextureIDs_pMapDirs[v35] != -1 ? (int)&pIcons_LOD->pTextures[pTextureIDs_pMapDirs[v35]] : 0));
v36 = 255;
flagsb = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0, 0, 0xFFu);
v60 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0, 0);
- if ( v80 )
+ if ( bWizardEyeActive )
{
uZe = 0;
- if ( (signed int)uNumLayingItems > 0 )
+ //for (uint i = 0; i < uNumLayingItems; ++i)
+ if (uNumLayingItems > 0)
{
a2c = (char *)&pLayingItems[0].uObjectDescID;
while ( 1 )
{
if ( !*((short *)a2c - 1)
|| !*(short *)a2c
- || v75 == 1
+ || uWizardEyeSkillLevel == 1
|| (v37 = ((unsigned __int64)((*(int *)(a2c + 2) - pParty->vPosition.x) * (signed __int64)(signed int)uZoom) >> 16)
- + uWidth,
- v79 = (unsigned __int64)((*(int *)(a2c + 6) - pParty->vPosition.z) * (signed __int64)(signed int)uZoom) >> 16,
- v38 = uHeight - v79,
+ + uCenterX,
+ v79 = (unsigned __int64)((*(int *)(a2c + 6) - pParty->vPosition.y) * (signed __int64)(signed int)uZoom) >> 16,
+ v38 = uCenterY - v79,
v37 < pRenderer->field_1C_clipx)
|| v37 > pRenderer->field_24_clipz
|| v38 < pRenderer->field_20_clipy
@@ -14112,22 +14047,22 @@
break;
if ( (signed int)uZoom > 512 )
{
- pRenderer->FillRect(v37 - 1, v38 - 1, v37 - 1, v38 + 1, flagsb);
- pRenderer->FillRect(v37, v38 - 2, v37, v38 + 1, flagsb);
- pRenderer->FillRect(v37 + 1, v38 - 1, v37 + 1, v38 + 1, flagsb);
- pRenderer->FillRect(v37 - 2, v38, v37 - 2, v38 + 1, flagsb);
+ pRenderer->Line2D(v37 - 1, v38 - 1, v37 - 1, v38 + 1, flagsb);
+ pRenderer->Line2D(v37, v38 - 2, v37, v38 + 1, flagsb);
+ pRenderer->Line2D(v37 + 1, v38 - 1, v37 + 1, v38 + 1, flagsb);
+ pRenderer->Line2D(v37 - 2, v38, v37 - 2, v38 + 1, flagsb);
v37 += 2;
v58 = flagsb;
v55 = v38 + 1;
goto LABEL_81;
}
- pRenderer->FillRect(v37 - 1, v38 - 1, v37 - 1, uHeight - v79, flagsb);
+ pRenderer->Line2D(v37 - 1, v38 - 1, v37 - 1, uCenterY - v79, flagsb);
v58 = flagsb;
- v55 = uHeight - v79;
+ v55 = uCenterY - v79;
v53 = v37;
v51 = v38 - 1;
LABEL_82:
- pRenderer->FillRect(v37, v51, v53, v55, v58);
+ pRenderer->Line2D(v37, v51, v53, v55, v58);
LABEL_83:
++uZe;
a2c += 112;
@@ -14139,10 +14074,10 @@
}
}
v58 = v60;
- v55 = uHeight - v79;
+ v55 = uCenterY - v79;
LABEL_81:
v53 = v37;
- v51 = uHeight - v79;
+ v51 = uCenterY - v79;
goto LABEL_82;
}
LABEL_85:
@@ -14160,10 +14095,10 @@
{
v40 = ((unsigned __int64)(((signed int)*((short *)flagsc - 17) - pParty->vPosition.x)
* (signed __int64)(signed int)uZoom) >> 16)
- + uWidth;
- v76 = (unsigned __int64)(((signed int)*((short *)flagsc - 16) - pParty->vPosition.z)
+ + uCenterX;
+ v76 = (unsigned __int64)(((signed int)*((short *)flagsc - 16) - pParty->vPosition.y)
* (signed __int64)(signed int)uZoom) >> 16;
- v41 = uHeight - v76;
+ v41 = uCenterY - v76;
if ( v40 >= pRenderer->field_1C_clipx )
{
if ( v40 <= pRenderer->field_24_clipz && v41 >= pRenderer->field_20_clipy && v41 <= pRenderer->field_28_clipw )
@@ -14175,13 +14110,13 @@
uWd = v65;
if ( (signed int)uZoom > 1024 )
{
- pRenderer->FillRect(v40 - 1, v41 - 2, v40 - 1, v41 + 2, uWd);
- pRenderer->FillRect(v40, v41 - 2, v40, v41 + 2, uWd);
- pRenderer->FillRect(v40 + 1, v41 - 2, v40 + 1, v41 + 2, uWd);
+ pRenderer->Line2D(v40 - 1, v41 - 2, v40 - 1, v41 + 2, uWd);
+ pRenderer->Line2D(v40, v41 - 2, v40, v41 + 2, uWd);
+ pRenderer->Line2D(v40 + 1, v41 - 2, v40 + 1, v41 + 2, uWd);
v42 = v41 + 1;
v43 = v41 - 1;
v44 = v42;
- pRenderer->FillRect(v40 - 2, v43, v40 - 2, v42, uWd);
+ pRenderer->Line2D(v40 - 2, v43, v40 - 2, v42, uWd);
v40 += 2;
v59 = uWd;
v56 = v44;
@@ -14190,13 +14125,13 @@
}
else
{
- pRenderer->FillRect(v40 - 1, v41 - 1, v40 - 1, uHeight - v76, uWd);
+ pRenderer->Line2D(v40 - 1, v41 - 1, v40 - 1, uCenterY - v76, uWd);
v59 = uWd;
- v56 = uHeight - v76;
+ v56 = uCenterY - v76;
v54 = v40;
v52 = v41 - 1;
}
- pRenderer->FillRect(v40, v52, v54, v56, v59);
+ pRenderer->Line2D(v40, v52, v54, v56, v59);
}
}
}
@@ -14219,9 +14154,9 @@
if ( *(v45 - 2) & 8 )
{
v46 = ((unsigned __int64)((*(int *)v45 - pParty->vPosition.x) * (signed __int64)(signed int)uZoom) >> 16)
- + uWidth;
- v77 = (unsigned __int64)((*((int *)v45 + 1) - pParty->vPosition.z) * (signed __int64)(signed int)uZoom) >> 16;
- v47 = uHeight - v77;
+ + uCenterX;
+ v77 = (unsigned __int64)((*((int *)v45 + 1) - pParty->vPosition.y) * (signed __int64)(signed int)uZoom) >> 16;
+ v47 = uCenterY - v77;
if ( v46 >= pRenderer->field_1C_clipx )
{
if ( v46 <= pRenderer->field_24_clipz && v47 >= pRenderer->field_20_clipy && v47 <= pRenderer->field_28_clipw )
@@ -14230,14 +14165,14 @@
{
v48 = v47 + 1;
v49 = v47 - 1;
- pRenderer->FillRect(v46 - 1, v47 - 1, v46 - 1, v47 + 1, flagsd);
- pRenderer->FillRect(v46, v49, v46, v48, flagsd);
- pRenderer->FillRect(v46 + 1, v49, v46 + 1, v48, flagsd);
+ pRenderer->Line2D(v46 - 1, v47 - 1, v46 - 1, v47 + 1, flagsd);
+ pRenderer->Line2D(v46, v49, v46, v48, flagsd);
+ pRenderer->Line2D(v46 + 1, v49, v46 + 1, v48, flagsd);
v45 = lPitchb;
}
else
{
- pRenderer->FillRect(v46, uHeight - v77, v46, uHeight - v77, flagsd);
+ pRenderer->Line2D(v46, uCenterY - v77, v46, uCenterY - v77, flagsd);
}
}
}
@@ -14252,14 +14187,14 @@
pRenderer->DrawTextureTransparent(
0x1D4u,
v33,
- (Texture *)(dword_5079D8 != -1 ? (int)&pIcons_LOD->pTextures[dword_5079D8] : 0));
+ (Texture *)(dword_5079D8 != -1 ? &pIcons_LOD->pTextures[dword_5079D8] : 0));
uZooma = (double)pParty->sRotationY * 0.1171875;
v50 = uZooma + 6.7553994e15;
pRenderer->Clip(0x21Du, v33, 0x237u, 0x1E0u);
pRenderer->DrawTextureIndexed(
LODWORD(v50) + 285,
0x88u,
- (Texture *)(dword_5079B4 != -1 ? (int)&pIcons_LOD->pTextures[dword_5079B4] : 0));
+ (Texture *)(dword_5079B4 != -1 ? &pIcons_LOD->pTextures[dword_5079B4] : 0));
pRenderer->ResetClip();
}
@@ -14481,10 +14416,10 @@
LABEL_8:
black = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0, 0, 0);
teal = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0, 0xFFu, 0xFFu);
- v7 = (uint *)pIndoor->pMapVertices;
+ v7 = (uint *)pIndoor->pMapOutlines;
uNumBlueFacesInBLVMinimap = 0;
- v8 = pIndoor->pMapVertices->uNumVertices == 0;
- v9 = (pIndoor->pMapVertices->uNumVertices & 0x80000000u) != 0;
+ v8 = pIndoor->pMapOutlines->uNumOutlines == 0;
+ v9 = (pIndoor->pMapOutlines->uNumOutlines & 0x80000000u) != 0;
v94 = 0;
if ( !(v9 | v8) )
{
@@ -14521,13 +14456,13 @@
v87 = (unsigned __int64)((signed int)v92 * (signed __int64)v5) >> 16;
v93 = (unsigned __int16 *)((unsigned __int64)((v19 - v6) * (signed __int64)v5) >> 16);
v92 = (unsigned __int64)(v20 * (signed __int64)v5) >> 16;
- pRenderer->FillRect(
+ pRenderer->Line2D(
v85 + v88,
v90 - v87,
v85 + ((unsigned __int64)((v19 - v6) * (signed __int64)v5) >> 16),
v90 - v92,
black);
- v7 = (uint *)pIndoor->pMapVertices;
+ v7 = (uint *)pIndoor->pMapOutlines;
LABEL_17:
++v94;
i += 12;
@@ -14555,7 +14490,7 @@
v88 = (unsigned __int64)(v28 * (signed __int64)v5) >> 16;
i = (unsigned __int64)((v26 - v86) * (signed __int64)v5) >> 16;
v95 = (unsigned __int64)(v29 * (signed __int64)v5) >> 16;
- pRenderer->FillRect(
+ pRenderer->Line2D(
v85 + ((unsigned __int64)((signed int)v27 * (signed __int64)v5) >> 16),
v90 - v88,
v85 + ((unsigned __int64)((v26 - v86) * (signed __int64)v5) >> 16),
@@ -14564,14 +14499,14 @@
++v21;
if ( v21 >= (signed int)uNumBlueFacesInBLVMinimap )
break;
- v7 = (uint *)pIndoor->pMapVertices;
+ v7 = (uint *)pIndoor->pMapOutlines;
}
v6 = v86;
}
LABEL_38:
v47 = ((unsigned __int64)((pParty->vPosition.x - v6) * (signed __int64)v5) >> 16) + v85 - 3;
- v81 = pParty->vPosition.z - v84;
- v97 = (const void *)((unsigned __int64)((pParty->vPosition.z - v84) * (signed __int64)v5) >> 16);
+ v81 = pParty->vPosition.y - v84;
+ v97 = (const void *)((unsigned __int64)((pParty->vPosition.y - v84) * (signed __int64)v5) >> 16);
v48 = 1;
v49 = v90 - (int)v97 - 3;
if ( v47 >= (signed int)x_ )
@@ -14686,8 +14621,8 @@
{
v96 = v55 + 1;
black = v55 - 1;
- pRenderer->FillRect(v54 - 1, v55 - 1, v54 - 1, v55 + 1, v86);
- pRenderer->FillRect(v54, black, v54, v96, v86);
+ pRenderer->Line2D(v54 - 1, v55 - 1, v54 - 1, v55 + 1, v86);
+ pRenderer->Line2D(v54, black, v54, v96, v86);
++v54;
v74 = v86;
v72 = v96;
@@ -14700,7 +14635,7 @@
v71 = ((unsigned __int64)((signed int)v93 * (signed __int64)v5) >> 16) + v85;
v70 = v90 - (int)v97;
}
- pRenderer->FillRect(v54, v70, v71, v72, v74);
+ pRenderer->Line2D(v54, v70, v71, v72, v74);
}
}
}
@@ -14835,7 +14770,7 @@
if ( v1 < 384 )
this->field_2C = 384;
this->sPartyPosX = pParty->vPosition.x;
- this->sPartyPosZ = pParty->vPosition.z;
+ this->sPartyPosZ = pParty->vPosition.y;
return _4432E7();
}
@@ -14853,7 +14788,7 @@
if ( v1 > v2 )
this->field_2C = v2;
this->sPartyPosX = pParty->vPosition.x;
- this->sPartyPosZ = pParty->vPosition.z;
+ this->sPartyPosZ = pParty->vPosition.y;
return _4432E7();
}
@@ -14937,11 +14872,11 @@
v14 = 0x40000000u;
v17 = 0xC0000000u;
v15 = 0xC0000000u;
- if ( (signed int)pIndoor->pMapVertices->uNumVertices > 0 )
- {
- v2 = (__int16 *)(pIndoor->pMapVertices->pVertices);
- v11 = pIndoor->pMapVertices->uNumVertices;
- v12 = (uint *)pIndoor->pMapVertices->pVertices;
+ if ( (signed int)pIndoor->pMapOutlines->uNumOutlines > 0 )
+ {
+ v2 = (__int16 *)(pIndoor->pMapOutlines->pOutlines);
+ v11 = pIndoor->pMapOutlines->uNumOutlines;
+ v12 = (uint *)pIndoor->pMapOutlines->pOutlines;
do
{
v3 = &pIndoor->pVertices[*v2];
@@ -15666,7 +15601,7 @@
int pX; // [sp+28h] [bp-4h]@1
v24 = pParty->vPosition.x;
- v0 = pParty->vPosition.z;
+ v0 = pParty->vPosition.y;
v1 = pOutdoor->uNumBModels;
*(float *)&v23 = (double)(signed int)viewparams->uMinimapZoom * 0.000015258789;
v2 = 0;
@@ -15711,13 +15646,13 @@
v13 = v12->sCogTriggeredID;
if ( v13 )
{
- if ( !(BYTE2(v12->uFaceAttributes) & 0x10) )
+ if ( !(BYTE2(v12->uAttributes) & 0x10) )
{
v14 = _444732_GetEventHintString(v13);
v15 = v14;
if ( v14 )
{
- if ( _strcmpi(v14, nullstring) )
+ if ( _strcmpi(v14, "") )
v21 = (char *)v15;
}
}
@@ -15812,13 +15747,13 @@
v12 = v11->sCogTriggeredID;
if ( v12 )
{
- if ( !(BYTE2(v11->uFaceAttributes) & 0x10) )
+ if ( !(BYTE2(v11->uAttributes) & 0x10) )
{
v13 = _444732_GetEventHintString(v12);
v14 = v13;
if ( v13 )
{
- if ( _strcmpi(v13, nullstring) )
+ if ( _strcmpi(v13, "") )
v17 = v14;
}
}
@@ -15910,12 +15845,12 @@
v1 = pTmpBuf;
goto LABEL_12;
}
- v1 = nullstring;
+ v1 = "";
}
if ( !v1 )
{
MessageBoxW(nullptr, L"No transition text found!", L"E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\Events.cpp:1410", 0);
- v1 = nullstring;
+ v1 = "";
}
LABEL_12:
v7 = 3;
@@ -16000,7 +15935,7 @@
memcpy(&v7, pGUIWindow0, sizeof(v7));
v9 = pMapStats->GetMapInfo(pCurrentMapName);
- pOutdoor->GetTravelDestination(pParty->vPosition.x, pParty->vPosition.z, pDestinationMapName, 20);
+ pOutdoor->GetTravelDestination(pParty->vPosition.x, pParty->vPosition.y, pDestinationMapName, 20);
v0 = pMapStats->GetMapInfo(pDestinationMapName);
pRenderer->DrawTextureIndexed(0x1DDu, 0, pTexture_Dialogue_Background);
pRenderer->DrawTextureTransparent(0x1D4u, 0,
@@ -16127,10 +16062,10 @@
dword_5C341C = v3;
_591094_decoration = _5C3420_pDecoration;
pGUIWindow2 = GUIWindow::Create(0, 0, 640u, 480u, (enum WindowType)19, a4, 0);
- pGUIWindow2->CreateButton(61u, 424u, 0x1Fu, 0x28u, 2, 94, 0x6Eu, 1u, 0x31u, nullstring, 0);
- pGUIWindow2->CreateButton(177u, 424u, 0x1Fu, 0x28u, 2, 94, 0x6Eu, 2u, 0x32u, nullstring, 0);
- pGUIWindow2->CreateButton(292u, 424u, 0x1Fu, 0x28u, 2, 94, 0x6Eu, 3u, 0x33u, nullstring, 0);
- pGUIWindow2->CreateButton(407u, 424u, 0x1Fu, 0x28u, 2, 94, 0x6Eu, 4u, 0x34u, nullstring, 0);
+ pGUIWindow2->CreateButton(61u, 424u, 0x1Fu, 0x28u, 2, 94, 0x6Eu, 1u, 0x31u, "", 0);
+ pGUIWindow2->CreateButton(177u, 424u, 0x1Fu, 0x28u, 2, 94, 0x6Eu, 2u, 0x32u, "", 0);
+ pGUIWindow2->CreateButton(292u, 424u, 0x1Fu, 0x28u, 2, 94, 0x6Eu, 3u, 0x33u, "", 0);
+ pGUIWindow2->CreateButton(407u, 424u, 0x1Fu, 0x28u, 2, 94, 0x6Eu, 4u, 0x34u, "", 0);
}
}
@@ -16383,8 +16318,8 @@
v52.uFrameX = 483;
v52.uFrameWidth = 148;
v52.uFrameZ = 334;
- for ( pOutString = (GUIFont *)v52.field_38;
- (signed int)pOutString < v52.field_38 + v52.field_28;
+ for ( pOutString = (GUIFont *)v52.pStartingPosActiveItem;
+ (signed int)pOutString < v52.pStartingPosActiveItem + v52.pNumPresenceButton;
pOutString = (GUIFont *)((char *)pOutString + 1) )
{
v14 = v52.GetControl((unsigned int)pOutString);
@@ -16454,7 +16389,7 @@
v24 = (&dword_721660)[8 * v23];
if ( !v24 )
{
- v24 = nullstring;
+ v24 = "";
v15->uControlParam = 0;
}
goto LABEL_79;
@@ -16498,7 +16433,7 @@
goto LABEL_63;
}
LABEL_71:
- v24 = nullstring;
+ v24 = "";
goto LABEL_79;
}
if ( v0->uFlags & 0x80 )
@@ -16511,7 +16446,7 @@
pInString = 0;
if ( (signed int)uNumActors > 0 )
{
- v55 = &pActors[0].uAIState;
+ v55 = (unsigned short *)&pActors[0].uAIState;
*(int *)v54 = uNumActors;
do
{
@@ -16533,8 +16468,8 @@
v33 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xE1u, 0xCDu, 0x23u);
v34 = pDialogueWindow;
*(int *)v54 = v33;
- v35 = pDialogueWindow->field_38;
- for ( i = v35 + pDialogueWindow->field_28; v35 < i; i = pDialogueWindow->field_28 + pDialogueWindow->field_38 )
+ v35 = pDialogueWindow->pStartingPosActiveItem;
+ for ( i = v35 + pDialogueWindow->pNumPresenceButton; v35 < i; i = pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem )
{
v37 = v34->GetControl(v35);
if ( !v37 )
@@ -16547,7 +16482,7 @@
v32 += v38;
++v35;
}
- v39 = v34->field_28;
+ v39 = v34->pNumPresenceButton;
if ( v39 )
{
pOutString = (GUIFont *)((174 - v32) / v39);
@@ -16555,7 +16490,7 @@
pOutString = (GUIFont *)32;
v55 = (unsigned __int16 *)1;
v40 = 174 - (int)pOutString * v39 - v32;
- v41 = v34->field_38;
+ v41 = v34->pStartingPosActiveItem;
v42 = v40 / 2 - (signed int)pOutString / 2 + 138;
if ( (signed int)v41 < (signed int)(v41 + v39) )
{
@@ -16573,14 +16508,14 @@
v42 = v45 + v44 - 1;
v43->uW = v42;
v47 = v54[0];
- if ( (unsigned __int16 *)pDialogueWindow->field_2C_focus_id != v46 )
+ if ( (unsigned __int16 *)pDialogueWindow->pCurrentPosActiveItem != v46 )
v47 = (unsigned __int16)pInString;
v52.DrawText2(pFontArrus, 0, v45, v47, Str, 3u);
v34 = pDialogueWindow;
v55 = (unsigned __int16 *)((char *)v55 + 1);
++v41;
}
- while ( (signed int)v41 < pDialogueWindow->field_28 + pDialogueWindow->field_38 );
+ while ( (signed int)v41 < pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem );
}
}
pRenderer->DrawTextureIndexed(
@@ -17208,7 +17143,7 @@
{
//v5 = pSomeEVT;
//v6 = v123;
- //v7 = nullstring;
+ //v7 = "";
//while ( 1 )
//{
if ( dword_5B65C4 )
@@ -17238,7 +17173,7 @@
pVideoPlayer->field_40 = 0;
if (pAsyncMouse)
pAsyncMouse->Suspend();
- v128 = uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions;
+ v128 = pCurrentScreen;
//v13 = &pSomeEVT[v9];
//v14 = (unsigned __int8)v13[5];
//v15 = (unsigned __int8)v13[6];
@@ -17271,7 +17206,7 @@
LABEL_28:
if ( !v15 || v128 == 3 )
{
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = v128;
+ pCurrentScreen = v128;
if ( v128 == 3 )
pGameLoadingUI_ProgressBar->uType = GUIProgressBar::TYPE_Fullscreen;
if ( v128 == 13 )
@@ -17573,7 +17508,7 @@
//v4 = v124;
//v5 = pSomeEVT;
//v6 = v123;
- //v7 = nullstring;
+ //v7 = "";
break;
case EVENT_CharacterAnimation:
v54 = _evt->v5;
@@ -18140,8 +18075,8 @@
if ( v100 )
{
pParty->vPosition.x = v135;
- pParty->vPosition.z = v132;
- pParty->vPosition.y = v126;
+ 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;
@@ -18171,7 +18106,7 @@
pGameLoadingUI_ProgressBar->uType = (GUIProgressBar::Type)((_5C3420_pDecoration == 0) + 1);
sub_44987B(v99, 0);
v133 = 1;
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 13 )
+ if ( pCurrentScreen == 13 )
{
if ( uGameState == 2 )
{
@@ -18184,7 +18119,7 @@
ptr_507BC0 = 0;
if ( pMessageQueue_50CBD0->uNumMessages )
pMessageQueue_50CBD0->uNumMessages = pMessageQueue_50CBD0->pMessages[0].field_8 != 0;
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 0;
+ pCurrentScreen = 0;
viewparams->bRedrawGameUI = 1;
array_5913D8[6] = 0;
pDialogueWindow->Release();
@@ -18344,7 +18279,7 @@
v10 = (ODMFace *)(v8 + *((_DWORD *)v9 + 4));
if ( v10->sCogNumber == v14 )
{
- if ( BYTE1(v10->uFaceAttributes) & 0x40 )
+ if ( BYTE1(v10->uAttributes) & 0x40 )
{
*(_WORD *)(*((_DWORD *)v9 + 4) + v8 + 272) = pTextureFrameTable->FindTextureByName(
Str2);
@@ -18511,9 +18446,9 @@
if ( v9->sCogNumber == v10 )
{
if ( on )
- v9->uFaceAttributes |= bit;
+ v9->uAttributes |= bit;
else
- v9->uFaceAttributes &= ~bit;
+ v9->uAttributes &= ~bit;
}
++v8;
v6 += 308;
@@ -18549,8 +18484,6 @@
//----- (00448A40) --------------------------------------------------------
void Actor::ToggleFlag(signed int uActorID, unsigned int uFlag, int bToggle)
{
- unsigned __int16 *pState; // eax@6
-
if ( uActorID >= 0 && uActorID <= (signed int)(uNumActors - 1) )
{
if ( bToggle )
@@ -18561,9 +18494,8 @@
{
if ( uFlag == 0x10000 )
{
- pState = &pActors[uActorID].uAIState;
- if ( *pState == Disabled )
- *pState = Standing;
+ if (pActors[uActorID].uAIState == Disabled )
+ pActors[uActorID].uAIState = Standing;
}
pActors[uActorID].uAttributes &= ~uFlag;
}
@@ -18888,9 +18820,9 @@
{
v10 = (double)pParty->vPosition.x - (double)fromx;
v53 = v10;
- v11 = (double)pParty->vPosition.z - (double)fromy;
+ v11 = (double)pParty->vPosition.y - (double)fromy;
v54 = v11;
- v12 = (double)(pParty->vPosition.y + pParty->sEyelevel);
+ v12 = (double)(pParty->vPosition.z + pParty->sEyelevel);
}
a7a = v12 - (double)fromz;
toza = v11 * v11;
@@ -19452,9 +19384,9 @@
}
v7 = v5;
pParty->vPosition.x = pLevelDecorations[v7].vPosition.x;
- pParty->vPosition.z = pLevelDecorations[v7].vPosition.y;
- pParty->vPosition.y = pLevelDecorations[v7].vPosition.z;
- pParty->uFallStartY = pParty->vPosition.y;
+ pParty->vPosition.y = pLevelDecorations[v7].vPosition.y;
+ pParty->vPosition.z = pLevelDecorations[v7].vPosition.z;
+ pParty->uFallStartY = pParty->vPosition.z;
v8 = (signed int)(stru_5C6E00->uIntegerHalfPi * pLevelDecorations[v7].field_1A) / 90;
v9 = pLevelDecorations[v7].field_10_y_rot;
pParty->sRotationY = v8;
@@ -19469,10 +19401,10 @@
if ( _5B65A8_npcdata_uflags_or_other )
pParty->vPosition.x = _5B65A8_npcdata_uflags_or_other;
if ( _5B65AC_npcdata_fame_or_other )
- pParty->vPosition.z = _5B65AC_npcdata_fame_or_other;
+ pParty->vPosition.y = _5B65AC_npcdata_fame_or_other;
if ( _5B65B0_npcdata_rep_or_other )
{
- pParty->vPosition.y = _5B65B0_npcdata_rep_or_other;
+ pParty->vPosition.z = _5B65B0_npcdata_rep_or_other;
pParty->uFallStartY = _5B65B0_npcdata_rep_or_other;
}
if ( _5B65B4_npcdata_loword_house_or_other )
@@ -19688,7 +19620,7 @@
dword_5B65C0 = 0;
pGameLoadingUI_ProgressBar->uType = GUIProgressBar::TYPE_Fullscreen;
sub_44987B("nwc.blv", 0);
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 0;
+ pCurrentScreen = 0;
result = 1;
}
return result;
@@ -20018,8 +19950,8 @@
*(char *)(v0 + 1) &= 0xFBu;
if ( ! ((Actor *)(v0 - offsetof(Actor, uAttributes)))->CanAct() )
goto LABEL_37;
- v22 = abs(pParty->vPosition.y - *(short *)(v0 + 110));
- v21 = abs(pParty->vPosition.z - *(short *)(v0 + 108));
+ v22 = abs(pParty->vPosition.z - *(short *)(v0 + 110));
+ v21 = abs(pParty->vPosition.y - *(short *)(v0 + 108));
v1 = abs(pParty->vPosition.x - *(short *)(v0 + 106));
v2 = v21;
v3 = v22;
@@ -20176,7 +20108,7 @@
int v45; // [sp+20h] [bp-4h]@1
pParty->uFlags &= 0xFFFFFFCFu;
- v37 = pIndoor->GetSector(pParty->vPosition.x, pParty->vPosition.z, pParty->vPosition.y);
+ v37 = pIndoor->GetSector(pParty->vPosition.x, pParty->vPosition.y, pParty->vPosition.z);
v45 = 0;
v43 = 0;
if ( (signed int)uNumActors > 0 )
@@ -20187,8 +20119,8 @@
v0[1] &= 0xFBu;
if ( ! ((Actor *)(v0 - 36))->CanAct() )
goto LABEL_60;
- v39 = abs(pParty->vPosition.y - *((short *)v0 + 55));
- v38 = abs(pParty->vPosition.z - *((short *)v0 + 54));
+ v39 = abs(pParty->vPosition.z - *((short *)v0 + 55));
+ v38 = abs(pParty->vPosition.y - *((short *)v0 + 54));
v1 = abs(pParty->vPosition.x - *((short *)v0 + 53));
v2 = v38;
v3 = v39;
@@ -20616,7 +20548,7 @@
Actor::_403F58(uActorID, Dying, 256, 0);
goto LABEL_78;
}
- pActor->uAIState = 0;
+ pActor->uAIState = Standing;
}
pActor->uCurrentActionTime = 0;
pActor->uCurrentActionLength = 0;
@@ -20701,7 +20633,7 @@
&& (SHIDWORD(v21->pActorBuffs[2].uExpireTime) < (signed int)v24
|| LODWORD(v21->pActorBuffs[2].uExpireTime) <= v24) )
{
- v21->uAIState = 11;
+ v21->uAIState = Removed;
goto LABEL_254;
}
if ( v21->pActorBuffs[5].uExpireTime || v21->pActorBuffs[6].uExpireTime )
@@ -21101,19 +21033,19 @@
//----- (00402CAE) --------------------------------------------------------
int stru193_math::SinCos(int angle)
{
- unsigned int v2; // edx@1
- unsigned int v3; // eax@1
- int result; // eax@4
-
- v2 = this->uIntegerPi;
- v3 = this->uDoublePiMask & angle;
- if ( (signed int)v3 > (signed int)v2 )
- v3 = this->uIntegerDoublePi - v3;
- if ( (signed int)v3 >= (signed int)this->uIntegerHalfPi )
- result = -this->pCosTable[v2 - v3];
- else
- result = this->pCosTable[v3];
- return result;
+ int v2; // eax@1
+
+ //a2: (angle - uIntegerHalfPi) for sin(angle)
+ // (angle) for cos(angle)
+
+ v2 = uDoublePiMask & angle;
+
+ if ( v2 > uIntegerPi )
+ v2 = uIntegerDoublePi - v2;
+ if ( v2 >= uIntegerHalfPi )
+ return -pCosTable[uIntegerPi - v2];
+ else
+ return pCosTable[v2];
}
@@ -21269,16 +21201,13 @@
}
//----- (0040471C) --------------------------------------------------------
-int stru262_TurnBased::_40471C()
-{
- int result; // eax@3
-
+void stru262_TurnBased::_40471C()
+{
if ( pParty->bTurnBasedModeOn == 1 )
{
if ( pTurnEngine->field_4 == 2 )
- result = _406457(0);
- }
- return result;
+ _406457(0);
+ }
}
diff -r c83d06692295 -r c0cf9393af64 mm7_4.cpp
--- a/mm7_4.cpp Mon Oct 22 09:20:49 2012 +0600
+++ b/mm7_4.cpp Mon Oct 29 09:28:08 2012 +0600
@@ -123,8 +123,8 @@
if ( v1->field_2 & 1 )
{
v36 = abs(v1->vPosition.x - pParty->vPosition.x);
- v25 = abs(v3 - pParty->vPosition.z);
- v28 = abs(v35 - pParty->vPosition.y);
+ v25 = abs(v3 - pParty->vPosition.y);
+ v28 = abs(v35 - pParty->vPosition.z);
v4 = v36;
v5 = v25;
v6 = v28;
@@ -234,15 +234,15 @@
// 6836C8: using guessed type int 6836C8_num_decorations_6807E8;
//----- (0046CEC3) --------------------------------------------------------
-int __fastcall _46CEC3_get_floor_level(signed int a1, signed int a2, int a3, unsigned int uSectorID, int *a5)
-{
- BLVSector *v5; // edi@1
- int v6; // ecx@1
- Vec3_short_ *v7; // edx@1
- BLVFace *v8; // esi@2
- int v9; // eax@8
- int v10; // edi@8
- int v11; // eax@10
+int _46CEC3_get_floor_level(int x, int y, int z, unsigned int uSectorID, unsigned int *pFaceID)
+{
+ //BLVSector *v5; // edi@1
+ //int v6; // ecx@1
+ //Vec3_short_ *v7; // edx@1
+ //BLVFace *v8; // esi@2
+ //int v9; // eax@8
+ //int v10; // edi@8
+ //int v11; // eax@10
int v12; // ecx@10
int v13; // ecx@13
signed int v14; // ebx@14
@@ -254,9 +254,9 @@
PolygonType v20; // al@25
int v21; // eax@27
int v22; // ecx@29
- BLVFace *v23; // eax@33
- int v24; // esi@39
- int v25; // edi@39
+ //BLVFace *v23; // eax@33
+ //int v24; // esi@39
+ //int v25; // edi@39
int v26; // esi@41
int v27; // ecx@43
signed int v28; // eax@45
@@ -270,78 +270,86 @@
int result; // eax@57
int v37; // edi@61
int v38; // edx@62
- int v39; // [sp+Ch] [bp-34h]@1
- int v40; // [sp+10h] [bp-30h]@2
+ //int v39; // [sp+Ch] [bp-34h]@1
+ //int v40; // [sp+10h] [bp-30h]@2
int v41; // [sp+14h] [bp-2Ch]@12
- unsigned __int16 *v42; // [sp+18h] [bp-28h]@1
- BLVSector *v43; // [sp+1Ch] [bp-24h]@1
+ //unsigned __int16 *v42; // [sp+18h] [bp-28h]@1
+ //BLVSector *v43; // [sp+1Ch] [bp-24h]@1
int v44; // [sp+20h] [bp-20h]@10
int v45; // [sp+24h] [bp-1Ch]@10
- signed int v46; // [sp+24h] [bp-1Ch]@38
+ //signed int v46; // [sp+24h] [bp-1Ch]@38
bool v47; // [sp+24h] [bp-1Ch]@43
bool v48; // [sp+28h] [bp-18h]@10
bool v49; // [sp+28h] [bp-18h]@41
bool v50; // [sp+2Ch] [bp-14h]@12
int v51; // [sp+2Ch] [bp-14h]@41
- signed int v52; // [sp+30h] [bp-10h]@7
+ //signed int v52; // [sp+30h] [bp-10h]@7
signed int v53; // [sp+30h] [bp-10h]@10
signed int v54; // [sp+30h] [bp-10h]@41
signed int v55; // [sp+34h] [bp-Ch]@1
- signed int v56; // [sp+38h] [bp-8h]@1
- signed int v57; // [sp+3Ch] [bp-4h]@1
- int uSectorIDa; // [sp+4Ch] [bp+Ch]@1
- signed int uSectorIDb; // [sp+4Ch] [bp+Ch]@32
-
- v5 = &pIndoor->pSectors[uSectorID];
- v57 = a2;
- v56 = a1;
- v6 = 0;
+ //signed int v56; // [sp+38h] [bp-8h]@1
+ //signed int v57; // [sp+3Ch] [bp-4h]@1
+ //int uSectorIDa; // [sp+4Ch] [bp+Ch]@1
+ //signed int uSectorIDb; // [sp+4Ch] [bp+Ch]@32
+
+ LOG_DECOMPILATION_WARNING();
+
+ //auto a1 = x;
+ //auto a2 = y;
+ //auto a3 = z;
+
+ //v5 = &pIndoor->pSectors[uSectorID];
+ auto pSector = &pIndoor->pSectors[uSectorID];
+ //v57 = y;
+ //v56 = x;
+ //v6 = 0;
v55 = 0;
- v43 = v5;
- v42 = v5->pFloors;
- v7 = pIndoor->pVertices;
- v39 = v5->field_4;
- for ( uSectorIDa = 0; uSectorIDa < v39; ++uSectorIDa )
- {
- v40 = (int)&v42[v6];
- v8 = &pIndoor->pFaces[*(short *)v40];
- if ( !(BYTE3(v8->uAttributes) & 0x20)
- && v56 <= v8->pBounding.x2
- && v56 >= v8->pBounding.x1
- && v57 <= v8->pBounding.y2
- && v57 >= v8->pBounding.y1 )
- {
- v52 = 0;
- if ( v8->uNumVertices )
- {
- do
- {
- v9 = v52;
- v10 = 2 * v52;
- word_721460[2 * v52] = v8->pXInterceptDisplacements[v52] + v7[v8->pVertexIDs[v52]].x;
- word_721390[2 * v52] = v8->pYInterceptDisplacements[v9] + v7[v8->pVertexIDs[v9]].y;
- word_721460[2 * v52++ + 1] = v8->pXInterceptDisplacements[v9] + v7[v8->pVertexIDs[v9 + 1]].x;
- word_721390[v10 + 1] = v8->pYInterceptDisplacements[v9] + v7[v8->pVertexIDs[v9 + 1]].y;
- }
- while ( v52 < v8->uNumVertices );
- v5 = v43;
- }
- v44 = 2 * v8->uNumVertices;
- v11 = 2 * v8->uNumVertices;
- word_721460[v11] = word_721460[0];
- word_721390[v11] = word_721390[0];
- v48 = word_721390[0] >= v57;
+ //v43 = v5;
+ //v42 = v5->pFloors;
+ //v7 = pIndoor->pVertices;
+ //v39 = v5->uNumFloors;
+ //for ( uSectorIDa = 0; uSectorIDa < v39; ++uSectorIDa )
+ for (uint i = 0; i < pSector->uNumFloors; ++i)
+ {
+ //v40 = (int)&v42[v6];
+ //v8 = &pIndoor->pFaces[pSector->pFloors[i]];
+ auto pFloor = &pIndoor->pFaces[pSector->pFloors[i]];
+ if (pFloor->Clickable())
+ continue;
+
+ if (x <= pFloor->pBounding.x2 && x >= pFloor->pBounding.x1 &&
+ y <= pFloor->pBounding.y2 && y >= pFloor->pBounding.y1)
+ {
+ //v52 = 0;
+ for (uint j = 0; j < pFloor->uNumVertices; ++j)
+ {
+ //v9 = v52;
+ //v10 = 2 * v52;
+ word_721460[2 * j] = pFloor->pXInterceptDisplacements[j] + pIndoor->pVertices[pFloor->pVertexIDs[j]].x;
+ word_721460[2 * j + 1] = pFloor->pXInterceptDisplacements[j] + pIndoor->pVertices[pFloor->pVertexIDs[j + 1]].x;
+ word_721390[2 * j] = pFloor->pYInterceptDisplacements[j] + pIndoor->pVertices[pFloor->pVertexIDs[j]].y;
+ word_721390[2 * j + 1] = pFloor->pYInterceptDisplacements[j] + pIndoor->pVertices[pFloor->pVertexIDs[j + 1]].y;
+ //}
+ //while ( v52 < v8->uNumVertices );
+ //v5 = v43;
+ }
+ v44 = 2 * pFloor->uNumVertices;
+ //v11 = 2 * pFloor->uNumVertices;
+ word_721460[2 * pFloor->uNumVertices] = word_721460[0];
+ word_721390[2 * pFloor->uNumVertices] = word_721390[0];
+
+ v48 = word_721390[0] >= y;
v12 = 0;
v53 = 0;
v45 = 0;
- if ( v44 > 0 )
+ if ( pFloor->uNumVertices > 0 )
{
do
{
if ( v53 >= 2 )
break;
v41 = word_721390[v12 + 1];
- v50 = word_721390[v12 + 1] >= v57;
+ v50 = word_721390[v12 + 1] >= y;
if ( v48 == v50 )
{
v13 = v45;
@@ -349,24 +357,24 @@
else
{
v13 = v45;
- if ( word_721460[v45 + 1] >= v56 )
+ if ( word_721460[v45 + 1] >= x )
v14 = 0;
else
v14 = 2;
- v15 = v14 | word_721460[v45] < v56;
+ v15 = v14 | word_721460[v45] < x;
if ( v15 != 3 )
{
if ( !v15
|| (v16 = word_721390[v45],
v17 = v41 - v16,
- v18 = v57 - v16,
+ v18 = y - v16,
LODWORD(v19) = v18 << 16,
HIDWORD(v19) = v18 >> 16,
- v7 = pIndoor->pVertices,
+ //v7 = pIndoor->pVertices,
(signed int)(((unsigned __int64)(((signed int)word_721460[v45 + 1] - (signed int)word_721460[v45])
* v19
/ v17) >> 16)
- + word_721460[v45]) >= v56) )
+ + word_721460[v45]) >= x) )
++v53;
}
}
@@ -375,62 +383,66 @@
v45 = v12;
}
while ( v12 < v44 );
+
if ( v53 == 1 )
{
if ( v55 >= 50 )
break;
- v20 = v8->uPolygonType;
+ v20 = pFloor->uPolygonType;
if ( v20 == 3 || v20 == 5 )
{
- v21 = v7[*v8->pVertexIDs].z;
+ v21 = pIndoor->pVertices[*pFloor->pVertexIDs].z;
}
else
{
- v7 = pIndoor->pVertices;
- v21 = ((unsigned __int64)(v8->zCalc1 * (signed __int64)v56) >> 16)
- + ((unsigned __int64)(v8->zCalc2 * (signed __int64)v57) >> 16)
- + HIWORD(v8->zCalc3);
+ //v7 = pIndoor->pVertices;
+ v21 = ((unsigned __int64)(pFloor->zCalc1 * (signed __int64)x) >> 16)
+ + ((unsigned __int64)(pFloor->zCalc2 * (signed __int64)y) >> 16)
+ + HIWORD(pFloor->zCalc3);
}
v22 = v55++;
dword_7212C8[v22] = v21;
- dword_721200[v22] = *(short *)v40;
- }
- }
- }
- v6 = uSectorIDa + 1;
- }
- if ( v5->field_0 & 8 )
- {
- for ( uSectorIDb = 0; uSectorIDb < v5->uNumPortals; ++uSectorIDb )
- {
- v23 = &pIndoor->pFaces[v5->pPortals[uSectorIDb]];
- if ( v23->uPolygonType == 3
- && v56 <= v23->pBounding.x2
- && v56 >= v23->pBounding.x1
- && v57 <= v23->pBounding.y2
- && v57 >= v23->pBounding.y1 )
- {
- v46 = 0;
- if ( v23->uNumVertices )
- {
- do
- {
- v24 = v46;
- v25 = 2 * v46;
- word_721460[2 * v46] = v23->pXInterceptDisplacements[v46] + v7[v23->pVertexIDs[v46]].x;
- word_721390[2 * v46] = v23->pYInterceptDisplacements[v24] + v7[v23->pVertexIDs[v24]].y;
- word_721460[2 * v46++ + 1] = v23->pXInterceptDisplacements[v24 + 1] + v7[v23->pVertexIDs[v24 + 1]].x;
- word_721390[v25 + 1] = v23->pYInterceptDisplacements[v24 + 1] + v7[v23->pVertexIDs[v24 + 1]].y;
- }
- while ( v46 < v23->uNumVertices );
- v5 = v43;
- }
- v26 = 2 * v23->uNumVertices;
- word_721460[2 * v23->uNumVertices] = word_721460[0];
- word_721390[v26] = word_721390[0];
+ dword_721200[v22] = pSector->pFloors[i];
+ }
+ }
+ }
+ //v6 = uSectorIDa + 1;
+ }
+
+ if ( pSector->field_0 & 8 )
+ {
+ for (uint i = 0; i < pSector->uNumPortals; ++i)
+ {
+ //v23 = &pIndoor->pFaces[v5->pPortals[uSectorIDb]];
+ auto portal = &pIndoor->pFaces[pSector->pPortals[i]];
+ if (portal->uPolygonType != POLYGON_Floor)
+ continue;
+
+ if (x <= portal->pBounding.x2 &&
+ x >= portal->pBounding.x1 &&
+ y <= portal->pBounding.y2 &&
+ y >= portal->pBounding.y1 )
+ {
+ //v46 = 0;
+ for (uint j = 0; j < portal->uNumVertices; ++j)
+ {
+ //v24 = v46;
+ //v25 = 2 * v46;
+ word_721460[2 * j] = portal->pXInterceptDisplacements[j] + pIndoor->pVertices[portal->pVertexIDs[j]].x;
+ word_721460[2 * j + 1] = portal->pXInterceptDisplacements[j + 1] + pIndoor->pVertices[portal->pVertexIDs[j + 1]].x;
+ word_721390[2 * j] = portal->pYInterceptDisplacements[j] + pIndoor->pVertices[portal->pVertexIDs[j]].y;
+ word_721390[2 * j + 1] = portal->pYInterceptDisplacements[j + 1] + pIndoor->pVertices[portal->pVertexIDs[j + 1]].y;
+ //}
+ //while ( v46 < v23->uNumVertices );
+ //v5 = v43;
+ }
+
+ //v26 = 2 * v23->uNumVertices;
+ word_721460[2 * portal->uNumVertices] = word_721460[0];
+ word_721390[2 * portal->uNumVertices] = word_721390[0];
v54 = 0;
v51 = 0;
- v49 = word_721390[0] >= v57;
+ v49 = word_721390[0] >= y;
if ( v26 > 0 )
{
do
@@ -438,27 +450,27 @@
if ( v54 >= 2 )
break;
v27 = v51;
- v47 = word_721390[v51 + 1] >= v57;
+ v47 = word_721390[v51 + 1] >= y;
if ( v49 != v47 )
{
- if ( word_721460[v27 + 1] >= v56 )
+ if ( word_721460[v27 + 1] >= x )
v28 = 0;
else
v28 = 2;
- v29 = v28 | word_721460[v27] < v56;
+ v29 = v28 | word_721460[v27] < x;
if ( v29 != 3 )
{
if ( !v29
|| (v30 = word_721390[v27],
v31 = word_721390[v51 + 1] - v30,
- v32 = v57 - v30,
+ v32 = y - v30,
LODWORD(v33) = v32 << 16,
HIDWORD(v33) = v32 >> 16,
- v7 = pIndoor->pVertices,
+ //v7 = pIndoor->pVertices,
(signed int)(((unsigned __int64)(((signed int)word_721460[v27 + 1] - (signed int)word_721460[v27])
* v33
/ v31) >> 16)
- + word_721460[v27]) >= v56) )
+ + word_721460[v27]) >= x) )
++v54;
}
}
@@ -472,25 +484,26 @@
break;
v34 = v55++;
dword_7212C8[v34] = -29000;
- dword_721200[v34] = v5->pPortals[uSectorIDb];
- }
- }
- }
- }
- }
+ dword_721200[v34] = pSector->pPortals[i];
+ }
+ }
+ }
+ }
+ }
+
v35 = 1;
if ( v55 == 1 )
{
- *a5 = dword_721200[0];
+ *pFaceID = dword_721200[0];
return dword_7212C8[0];
}
if ( !v55 )
return -30000;
- *a5 = dword_721200[0];
+ *pFaceID = dword_721200[0];
result = dword_7212C8[0];
if ( v55 > 1 )
{
- v37 = a3 + 5;
+ v37 = z + 5;
while ( 1 )
{
v38 = dword_7212C8[v35];
@@ -507,7 +520,7 @@
goto LABEL_68;
LABEL_67:
result = dword_7212C8[v35];
- *a5 = dword_721200[v35];
+ *pFaceID = dword_721200[v35];
goto LABEL_68;
}
return result;
@@ -594,7 +607,7 @@
v11 = &v10->pFaces[v39];
v12 = v11->uPolygonType;
if ( (v12 == 3 || v12 == 4)
- && !(BYTE3(v11->uFaceAttributes) & 0x20)
+ && !(v11->uAttributes & 0x20000000)
&& v8 <= v11->pBoundingBox.x2
&& v8 >= v11->pBoundingBox.x1
&& v7 <= v11->pBoundingBox.y2
@@ -742,7 +755,7 @@
{
v32 = &pOutdoor->pBModels[dword_721160[v27]].pFaces[dword_721110[v27]];
*a5 = 0;
- if ( v32->uFaceAttributes & 0x10 )
+ if ( v32->uAttributes & 0x10 )
*a5 = 1;
}
v33 = dword_7211B0[v27];
@@ -825,7 +838,7 @@
v7 = (ODMFace *)((char *)v6->pFaces + v30);
v8 = v7->uPolygonType;
if ( (v8 == 5 || v8 == 6)
- && !(BYTE3(v7->uFaceAttributes) & 0x20)
+ && !(BYTE3(v7->uAttributes) & 0x20)
&& v4 <= v7->pBoundingBox.x2
&& v4 >= v7->pBoundingBox.x1
&& v40 <= v7->pBoundingBox.y2
@@ -2813,47 +2826,26 @@
//----- (0048A959) --------------------------------------------------------
-unsigned int sub_48A959(int _this, float a2, float a3, float a4)
-{
- int v4; // esi@1
- double v5; // st6@1
- double v6; // st6@1
- __int64 v8; // [sp+14h] [bp-20h]@1
- double v9; // [sp+1Ch] [bp-18h]@1
- int a6; // [sp+24h] [bp-10h]@1
- float v11; // [sp+28h] [bp-Ch]@1
- float v12; // [sp+2Ch] [bp-8h]@1
- float a1; // [sp+30h] [bp-4h]@1
- float a2a; // [sp+3Ch] [bp+8h]@7
- float a2b; // [sp+3Ch] [bp+8h]@7
- float a2c; // [sp+3Ch] [bp+8h]@7
- int a3a; // [sp+40h] [bp+Ch]@7
-
- v4 = _this;
- v8 = ((unsigned int)_this >> 16) & 0xFFi64;
- v5 = (double)v8 * 0.0039215689;
- v8 = (unsigned __int16)_this >> 8;
- a1 = v5;
- v6 = (double)v8;
- v8 = _this & 0xFFi64;
- v12 = v6 * 0.0039215689;
- v11 = (double)v8 * 0.0039215689;
- RGB2HSV((float *)&v8 + 1, (float *)&v9 + 1, a1, v12, v11, (float *)&a6);
- if ( a2 != -1.0 )
- HIDWORD(v8) = LODWORD(a2);
- if ( a3 != -1.0 )
- HIDWORD(v9) = LODWORD(a3);
- if ( a4 != -1.0 )
- a6 = LODWORD(a4);
- HSV2RGB(&a1, &v12, &v11, *((float *)&v8 + 1), *((float *)&v9 + 1), *(float *)&a6);
- a2a = a1 * 255.0;
- *(double *)&v8 = a2a + 6.7553994e15;
- a3a = v8;
- a2b = v12 * 255.0;
- *(double *)&v8 = a2b + 6.7553994e15;
- a2c = v11 * 255.0;
- v9 = a2c + 6.7553994e15;
- return LODWORD(v9) | v4 & 0xFF000000 | (((unsigned int)v8 | (a3a << 8)) << 8);
+unsigned int ReplaceHSV(unsigned int uColor, float h_replace, float s_replace, float v_replace)
+{
+ float r = ((uColor & 0x00FF0000) >> 16) / 255.0f,
+ g = ((uColor & 0x0000FF00) >> 8) / 255.0f,
+ b = (uColor & 0x000000FF) / 255.0f;
+
+ float h, s, v;
+ RGB2HSV(&h, &s, r, g, b, &v);
+
+ if ( h_replace != -1.0 )
+ h = h_replace;
+ if ( s_replace != -1.0 )
+ s = s_replace;
+ if ( v_replace != -1.0 )
+ v = v_replace;
+ HSV2RGB(&r, &g, &b, h, s, v);
+
+ return (((uint)floorf(r * 255.0f + 0.5f) & 0xFF) << 16) |
+ (((uint)floorf(g * 255.0f + 0.5f) & 0xFF) << 8) |
+ ((uint)floorf(b * 255.0f + 0.5f) & 0xFF);
}
@@ -3065,12 +3057,6 @@
//----- (00491F87) --------------------------------------------------------
void __cdecl DrawHiredNPCs()
{
- int v0; // ecx@2
- char *v1; // eax@2
- int v2; // edx@4
- signed int v3; // ebx@6
- char *v4; // esi@7
- int v5; // ecx@13
int v6; // eax@15
char v7; // al@17
unsigned int v8; // eax@18
@@ -3081,7 +3067,7 @@
unsigned int v13; // eax@23
IconFrame *v14; // eax@24
unsigned int v15; // eax@26
- char pContainer; // [sp+Ch] [bp-30h]@18
+ char pContainer[20]; // [sp+Ch] [bp-30h]@18
unsigned int v17; // [sp+20h] [bp-1Ch]@19
signed int uFrameID; // [sp+24h] [bp-18h]@19
int i; // [sp+28h] [bp-14h]@15
@@ -3094,38 +3080,24 @@
{
v23 = 0;
v22 = 0;
- v0 = 0;
- v1 = (char *)pParty->pHirelings;
- do
- {
- if ( *(int *)v1 )
- {
- v2 = v22++;
- pTmpBuf[v2] = v0;
- }
- v1 += 76;
- ++v0;
- }
- while ( (signed int)v1 < (signed int)&pParty->pPickedItem );
- v3 = 0;
- if ( (signed int)pNPCStats->uNumNewNPCs > 0 )
- {
- v4 = (char *)pNPCStats->pNewNPCData;
- do
- {
- if ( v4[8] & 0x80 && (!pParty->pHirelings[0].pName || strcmp(*(const char **)v4, pParty->pHirelings[0].pName)) )
- {
- if ( !pParty->pHirelings[1].pName || strcmp(*(const char **)v4, pParty->pHirelings[1].pName) )
- {
- v5 = v22++;
- pTmpBuf[v5] = v3 + 2;
- }
- }
- ++v3;
- v4 += 76;
- }
- while ( v3 < (signed int)pNPCStats->uNumNewNPCs );
- }
+ for (uint i = 0; i < 2; ++i)
+ {
+ if (pParty->pHirelings[i].pName)
+ pTmpBuf[v22++] = i;
+ }
+
+ for (uint i = 0; i < pNPCStats->uNumNewNPCs; ++i)
+ {
+ if (pNPCStats->pNewNPCData[i].uFlags & 0x80)
+ {
+ if (!pParty->pHirelings[0].pName || strcmp(pNPCStats->pNewNPCData[i].pName, pParty->pHirelings[0].pName))
+ {
+ if (!pParty->pHirelings[1].pName || strcmp(pNPCStats->pNewNPCData[i].pName, pParty->pHirelings[1].pName))
+ pTmpBuf[v22++] = i + 2;
+ }
+ }
+ }
+
v6 = (unsigned __int8)pParty->field_709;
for ( i = (unsigned __int8)pParty->field_709; i < v22; v6 = i++ + 1 )
{
@@ -3134,22 +3106,22 @@
v7 = pTmpBuf[v6];
if ( (unsigned __int8)v7 >= 2u )
{
- sprintfex(&pContainer, "NPC%03d", pNPCStats->pNPCData[(unsigned __int8)v7 + 499].uPortraitID);
- v15 = pIcons_LOD->LoadTexture(&pContainer, TEXTURE_16BIT_PALETTE);
+ sprintf(pContainer, "NPC%03d", pNPCStats->pNPCData[(unsigned __int8)v7 + 499].uPortraitID);
+ v15 = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE);
pRenderer->DrawTextureIndexed(
pHiredNPCsIconsOffsetsX[v23],
pHiredNPCsIconsOffsetsY[v23],
- (Texture *)(v15 != -1 ? 72 * v15 + 7145548 : 0));
+ (Texture *)(v15 != -1 ? &pIcons_LOD->pTextures[v15] : 0));
}
else
{
- sprintfex(&pContainer, "NPC%03d", pParty->pHirelings[(unsigned __int8)v7].uPortraitID);
- v8 = pIcons_LOD->LoadTexture(&pContainer, TEXTURE_16BIT_PALETTE);
+ sprintf(pContainer, "NPC%03d", pParty->pHirelings[(unsigned __int8)v7].uPortraitID);
+ v8 = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE);
v9 = v23;
pRenderer->DrawTextureIndexed(
pHiredNPCsIconsOffsetsX[v9],
pHiredNPCsIconsOffsetsY[v9],
- (Texture *)(v8 != -1 ? (int)&pIcons_LOD->pTextures[v8] : 0));
+ (Texture *)(v8 != -1 ? &pIcons_LOD->pTextures[v8] : 0));
v10 = (unsigned __int8)pTmpBuf[i];
if ( pParty->pHirelings[v10].bDrawSomeAnim == 1 )
{
@@ -3190,12 +3162,7 @@
//----- (004921C1) --------------------------------------------------------
void GameUI_DrawPortraits(unsigned int _this)
{
- signed int v1; // ebx@2
- int v2; // ebp@7
- char *v3; // esi@7
Texture *v4; // eax@10
- signed int v5; // edx@13
- PlayerFrame *v6; // eax@14
unsigned int v7; // eax@17
PlayerFrame *v8; // eax@21
unsigned int v9; // eax@27
@@ -3203,21 +3170,15 @@
bool v11; // edi@40
bool v12; // edx@43
bool v13; // ecx@46
- int v14; // esi@54
- char *v15; // edi@55
int v16; // eax@57
- __int16 *v17; // esi@59
- char *v18; // edi@59
int v19; // eax@62
Texture *v20; // [sp-4h] [bp-1Ch]@27
- signed int v21; // [sp+10h] [bp-8h]@7
unsigned int v22; // [sp+14h] [bp-4h]@1
v22 = _this;
if ( qword_A750D8 )
{
qword_A750D8 -= (signed int)pMiscTimer->uTimeElapsed;
- v1 = 0;
if ( qword_A750D8 <= 0 )
{
if ( pPlayers[word_A750E2]->CanAct() )
@@ -3225,95 +3186,80 @@
qword_A750D8 = 0i64;
}
}
- else
- {
- v1 = 0;
- }
- v2 = 0;
- v21 = v1;
- v3 = (char *)&pParty->pPlayers[0].pConditions[14];
- while ( 1 )
- {
- if ( *((_QWORD *)v3 + 2) )
+
+ for (uint i = 0; i < 4; ++i)
+ {
+ auto pPlayer = pParty->pPlayers + i;
+
+ if (pPlayer->Eradicated())
{
v4 = pTexture_PlayerFaceEradicated;
LABEL_27:
v20 = v4;
- v9 = pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[v2];
+ v9 = pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[i];
if ( pParty->pPartyBuffs[11].uExpireTime )
pRenderer->_4A6E7E(v9, 0x183u, v20);
else
pRenderer->DrawTextureTransparent(v9 + 1, 0x184u, v20);
- v10 = *((int *)v3 + 1541) >= v1 && (*((int *)v3 + 1541) > v1 || *((int *)v3 + 1540) > (unsigned int)v1);
- if ( *((int *)v3 + 1489) >= v1 && (*((int *)v3 + 1489) > v1 || *((int *)v3 + 1488) > (unsigned int)v1) )
- v1 = 1;
- v11 = *((_QWORD *)v3 + 758) > 0i64;
- v12 = *((_QWORD *)v3 + 756) > 0i64;
- v13 = *((_QWORD *)v3 + 768) > 0i64;
- if ( v13 | v12 | v11 | v1 | v10 )
- sub_441A4E(v2);
+ auto _v1 = 0;
+ v10 = pPlayer->pPlayerBuffs[14].uExpireTime > 0;
+ if (pPlayer->pPlayerBuffs[1].uExpireTime > 0)
+ _v1 = 1;
+ v11 = pPlayer->pPlayerBuffs[8].uExpireTime > 0;
+ v12 = pPlayer->pPlayerBuffs[7].uExpireTime > 0;
+ v13 = pPlayer->pPlayerBuffs[13].uExpireTime > 0;
+ if ( v13 | v12 | v11 | _v1 | v10 )
+ sub_441A4E(i);
goto LABEL_50;
}
- if ( *(_QWORD *)v3 )
+ if (pPlayer->Dead())
{
v4 = pTexture_PlayerFaceDead;
goto LABEL_27;
}
- v5 = 0;
- if ( (signed int)pPlayerFrameTable->uNumFrames <= v1 )
- {
-LABEL_17:
+
v7 = 0;
- }
- else
- {
- v6 = pPlayerFrameTable->pFrames;
- while ( v6->uSequenceID != *((short *)v3 + 3350) )
- {
- ++v5;
- ++v6;
- if ( v5 >= (signed int)pPlayerFrameTable->uNumFrames )
- goto LABEL_17;
- }
- v7 = v5;
- }
- if ( v7 == v1 )
+ for (uint j = 0; j < pPlayerFrameTable->uNumFrames; ++j)
+ if (pPlayerFrameTable->pFrames[j].uSequenceID == pPlayer->uExpressionID)
+ {
+ v7 = j;
+ break;
+ }
+
+ if ( v7 == 0 )
v7 = 1;
- if ( *((short *)v3 + 3350) == 21 )
+ if (pPlayer->uExpressionID == 21 )
v8 = pPlayerFrameTable->GetFrameBy_y(
- (int *)v3 + 1678,
- (int *)v3 + 1677,
+ &pPlayer->field_1AA8,
+ &pPlayer->field_1AA4,
pMiscTimer->uTimeElapsed);
else
- v8 = pPlayerFrameTable->GetFrameBy_x(v7, *((short *)v3 + 3351));
- if ( *((short *)v3 + 3353) != v8->uTextureID - 1 || v22 )
- {
- *((short *)v3 + 3353) = v8->uTextureID - 1;
- v1 = 0;
- v4 = (Texture *)A74CEC_player_faces_minus1_indexing[v21 + v8->uTextureID];
+ v8 = pPlayerFrameTable->GetFrameBy_x(v7, pPlayer->uExpressionTimePassed);
+ if (pPlayer->field_1AA2 != v8->uTextureID - 1 || v22 )
+ {
+ pPlayer->field_1AA2 = v8->uTextureID - 1;
+ v4 = (Texture *)pTextures_PlayerFaces[i][v8->uTextureID];
goto LABEL_27;
}
LABEL_50:
- v21 += 56;
- v3 += 6972;
- ++v2;
- if ( (signed int)v3 >= (signed int)&pParty->pHirelings[1].field_24 )
- break;
- v1 = 0;
- }
+ ;
+ }
+
if ( pParty->bTurnBasedModeOn == 1 )
{
if ( pTurnEngine->field_4 != 1 )
{
if ( (pTurnEngine->pQueue[0].uPackedID & 7) == 4 )
{
- v14 = 0;
+ //v14 = 0;
if ( pTurnEngine->uActorQueueSize > 0 )
{
- v15 = (char *)pTurnEngine->pQueue;
- do
- {
- if ( (*v15 & 7) != 4 )
+ //v15 = (char *)pTurnEngine->pQueue;
+ for (uint i = 0; i < pTurnEngine->uActorQueueSize; ++i)
+ {
+ auto pElem = pTurnEngine->pQueue + i;
+
+ if ( (pElem->uPackedID & 7) != 4 )
break;
v16 = dword_5079D0;
if ( pParty->uFlags & 0x10 )
@@ -3326,24 +3272,20 @@
v16 = dword_5079C8;
}
pRenderer->DrawTextureTransparent(
- pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[*(int *)v15 >> 3] - 4,
+ pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[pElem->uPackedID >> 3] - 4,
0x181u,
- (Texture *)(v16 != -1 ? (int)&pIcons_LOD->pTextures[v16] : 0));
- ++v14;
- v15 += 16;
- }
- while ( v14 < pTurnEngine->uActorQueueSize );
- }
- }
- }
- }
- else
- {
- v17 = pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing;
- v18 = (char *)pParty->pPlayers;
- do
- {
- if ( ((Player *)v18)->CanAct() && !*((short *)v18 + 3226) )
+ (Texture *)(v16 != -1 ? &pIcons_LOD->pTextures[v16] : 0));
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ for (uint i = 0; i < 4; ++i)
+ {
+ auto pPlayer = pParty->pPlayers + i;
+ if (pPlayer->CanAct() && !pPlayer->uTimeToRecovery)
{
v19 = dword_5079D0;
if ( pParty->uFlags & 0x10 )
@@ -3356,14 +3298,11 @@
v19 = dword_5079C8;
}
pRenderer->DrawTextureTransparent(
- *v17 - 4,
+ pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[i] - 4,
0x181u,
- (Texture *)(v19 != -1 ? (int)&pIcons_LOD->pTextures[v19] : 0));
- }
- v18 += 6972;
- ++v17;
- }
- while ( (signed int)v18 < (signed int)pParty->pHirelings );
+ (Texture *)(v19 != -1 ? &pIcons_LOD->pTextures[v19] : 0));
+ }
+ }
}
}
@@ -3457,7 +3396,7 @@
signed int v20; // ebx@25
Player *v21; // esi@25
ITEM_EQUIP_TYPE v22; // edi@30
- int v23; // edx@31
+ //int v23; // edx@31
signed int v24; // ecx@32
signed int v25; // eax@33
int v26; // eax@35
@@ -3495,13 +3434,14 @@
{
v51 = 0;
v4 = (v0 - v2) / 5;
- if ( (signed __int64)pParty->pPartyBuffs[7].uExpireTime > 0 )
+ if (pParty->FlyActive())
{
if ( pParty->bFlying )
{
if ( !(pParty->pPartyBuffs[7].uFlags & 1) )
{
v5 = v4 * pParty->pPartyBuffs[7].uPower;
+ __debugbreak();
v6 = &stru_AA1058[4].pSounds[6972 * pParty->pPartyBuffs[7].uCaster + 2000];
v7 = *(int *)v6 - v5 < 0;
*(int *)v6 -= v5;
@@ -3515,12 +3455,13 @@
}
}
}
- if ( (signed __int64)pParty->pPartyBuffs[18].uExpireTime > 0 )
- {
- if ( pParty->uFlags & 0x80 )
+ if (pParty->WaterWalkActive())
+ {
+ if (pParty->uFlags & 0x80 )
{
if ( !(pParty->pPartyBuffs[18].uFlags & 1) )
{
+ __debugbreak();
v8 = &stru_AA1058[4].pSounds[6972 * pParty->pPartyBuffs[18].uCaster + 2000];
v7 = *(int *)v8 - v4 < 0;
*(int *)v8 -= v4;
@@ -3533,8 +3474,7 @@
}
}
}
- if ( SHIDWORD(pParty->pPartyBuffs[10].uExpireTime) >= 0
- && (SHIDWORD(pParty->pPartyBuffs[10].uExpireTime) > 0 || LODWORD(pParty->pPartyBuffs[10].uExpireTime)) )
+ if (pParty->ImmolationActive())
{
//LayingItem::LayingItem(&a1);
v9 = 0;
@@ -3543,7 +3483,7 @@
a3.x = 0;
a1.stru_24.Reset();
a1.field_4C = pParty->pPartyBuffs[10].uPower;
- a1.field_50 = pParty->pPartyBuffs[10].uSkill;
+ a1.field_50 = pParty->ImmolationSkillLevel();
v10 = 0;
a1.uItemType = 1070;
a1.field_48 = 8;
@@ -3616,7 +3556,9 @@
{
if ( v21->HasItemEquipped(v22) )
{
- v24 = *(int *)&v21->spellbook.pDarkSpellbook.bIsSpellAvailable[36 * *(int *)v23 + 5];
+ //v23 = v21->pEquipment.pIndices;
+ auto _idx = v21->pEquipment.pIndices[v22];
+ v24 = v21->pInventoryItems[_idx].uItemID;
if ( v24 > 134 )
{
if ( v24 == 529 )
@@ -3635,7 +3577,7 @@
}
else
{
- v25 = *(int *)&v21->field_1F5[36 * *(int *)v23 + 7];
+ v25 = v21->pInventoryItems[_idx].uAdditionalValue;
if ( v25 <= 50 )
{
if ( v25 != 50 )
@@ -4254,7 +4196,7 @@
v51 = v65;
if ( v65 )
goto LABEL_135;
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions != 5 )
+ if ( pCurrentScreen != 5 )
{
v52 = (signed int)&pPlayers[1];
while ( 1 )
@@ -4270,13 +4212,13 @@
*(int *)(v53 + 20) = 0;
v51 = 1;
LABEL_135:
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions != 5
+ if ( pCurrentScreen != 5
&& (!v51 || dword_5C35C0) )
uGameState = 8;
}
if ( uActiveCharacter )
{
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions != 5 )
+ if ( pCurrentScreen != 5 )
{
v54 = pPlayers[uActiveCharacter];
if ( v54->pConditions[2]
@@ -5333,7 +5275,6 @@
//----- (00495B39) --------------------------------------------------------
void __cdecl PlayerCreationUI_Draw()
{
- Texture *v0; // edi@1
const char *uTitleText; // ST10_4@3
int v2; // eax@3
IconFrame *v3; // eax@3
@@ -5387,63 +5328,41 @@
int v51; // eax@49
char *v52; // edi@52
char v53; // al@52
- int v54; // edi@53
+ int uClassType; // edi@53
int v55; // ST0C_4@53
int v56; // eax@53
int v57; // eax@53
- const char *v58; // ST10_4@55
- unsigned int v59; // ST0C_4@55
int v60; // eax@55
int v61; // ecx@55
- const char *v62; // ST10_4@57
- unsigned int v63; // ST0C_4@57
int v64; // ST08_4@57
int v65; // eax@57
int v66; // ecx@57
- const char *v67; // ST10_4@59
- unsigned int v68; // ST0C_4@59
int v69; // ST08_4@59
int v70; // eax@59
int v71; // eax@59
- const char *v72; // ST10_4@61
- unsigned int v73; // ST0C_4@61
int v74; // eax@61
int v75; // eax@61
- const char *v76; // ST10_4@63
- unsigned int v77; // ST0C_4@63
int v78; // ST08_4@63
int v79; // eax@63
int v80; // eax@63
- const char *v81; // ST10_4@65
- unsigned int v82; // ST0C_4@65
int v83; // ST08_4@65
int v84; // eax@65
int v85; // eax@65
- const char *v86; // ST10_4@67
- unsigned int v87; // ST0C_4@67
int v88; // eax@67
int v89; // eax@67
- const char *v90; // ST10_4@69
- unsigned int v91; // ST0C_4@69
int v92; // ST08_4@69
int v93; // eax@69
int v94; // eax@69
- const char *v95; // ST10_4@71
- unsigned int v96; // ST0C_4@71
int v97; // ST08_4@71
int v98; // eax@71
- const char *v99; // ST10_4@71
- int v100; // ST0C_4@71
int v101; // eax@71
enum PLAYER_SKILL_TYPE v102; // edi@72
size_t v103; // eax@72
signed int v104; // ecx@72
int v105; // ecx@79
- int v106; // edi@81
unsigned int v107; // ST0C_4@81
- int v108; // ST08_4@81
+ int pTextY; // ST08_4@81
int v109; // eax@81
- const char *v110; // ST10_4@82
int v111; // ST0C_4@82
int v112; // eax@82
signed int v113; // edi@82
@@ -5451,7 +5370,7 @@
int v115; // eax@82
const char *uRaceName; // [sp+0h] [bp-170h]@39
char Str1[200]; // [sp+10h] [bp-160h]@14
- GUIWindow v118; // [sp+D8h] [bp-98h]@83
+ GUIWindow pWindow; // [sp+D8h] [bp-98h]@83
int v119; // [sp+12Ch] [bp-44h]@18
size_t v120; // [sp+130h] [bp-40h]@25
int uY; // [sp+134h] [bp-3Ch]@18
@@ -5468,29 +5387,31 @@
int uX; // [sp+160h] [bp-10h]@18
unsigned int v133; // [sp+164h] [bp-Ch]@25
int v134; // [sp+168h] [bp-8h]@14
- char *Str; // [sp+16Ch] [bp-4h]@18
+ Player *pPlayer;
+ const char *pSkillName;
uColor1 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xD1u, 0xBBu, 0x61u);
uColorTeal = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0, 0xF7u, 0xF7u);
uColorGreen = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0, 0xFFu, 0);
uColorWhite = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0xFFu);
pRenderer->BeginScene();
- pRenderer->DrawTextureRGB(0, 0, &stru_506F20);
- v0 = pTexture_MAKESKY;
- pRenderer->DrawTextureIndexed(uPlayerCreationUI_SkySliderPos, 2u, pTexture_MAKESKY);
- pRenderer->DrawTextureIndexed(uPlayerCreationUI_SkySliderPos++ - 640, 2u, v0);
- if ( (signed int)uPlayerCreationUI_SkySliderPos > 640 )
- uPlayerCreationUI_SkySliderPos = 0;
+ pRenderer->DrawTextureRGB(0, 0, &pTexture_PCX);
+
+ uPlayerCreationUI_SkySliderPos = (GetTickCount() % 12800) / 20;
+ pRenderer->DrawTextureIndexed(uPlayerCreationUI_SkySliderPos, 2, pTexture_MAKESKY);
+ pRenderer->DrawTextureIndexed(uPlayerCreationUI_SkySliderPos - 640, 2, pTexture_MAKESKY);
+ //if (uPlayerCreationUI_SkySliderPos > 640)
+ //uPlayerCreationUI_SkySliderPos = 0;
pRenderer->DrawTextureTransparent(0, 0, pTexture_MAKETOP);
+
uTitleText = pGlobalTXT_LocalizationStrings[51];
- uPlayerCreationUI_SelectedCharacter = (pGUIWindow_CurrentMenu->field_2C_focus_id - pGUIWindow_CurrentMenu->field_38)
- / 7;
- v2 = pFontCChar->AlignText_Center(640u, pGlobalTXT_LocalizationStrings[51]);
+ uPlayerCreationUI_SelectedCharacter = (pGUIWindow_CurrentMenu->pCurrentPosActiveItem - pGUIWindow_CurrentMenu->pStartingPosActiveItem) / 7;
+ v2 = pFontCChar->AlignText_Center(640, pGlobalTXT_LocalizationStrings[51]);
pGUIWindow_CurrentMenu->DrawText(pFontCChar, v2 + 1, 0, 0, uTitleText, 0, 0, 0);
- pRenderer->DrawTextureTransparent(17u, 35u, pPlayerPortraits[(char)pParty->pPlayers[0].uFace]);
- pRenderer->DrawTextureTransparent(176u, 35u, pPlayerPortraits[(char)pParty->pPlayers[1].uFace]);
- pRenderer->DrawTextureTransparent(335u, 35u, pPlayerPortraits[(char)pParty->pPlayers[2].uFace]);
- pRenderer->DrawTextureTransparent(494u, 35u, pPlayerPortraits[(char)pParty->pPlayers[3].uFace]);
+ pRenderer->DrawTextureTransparent(17u, 35u, pPlayerPortraits[pParty->pPlayers[0].uFace]);
+ pRenderer->DrawTextureTransparent(176u, 35u, pPlayerPortraits[pParty->pPlayers[1].uFace]);
+ pRenderer->DrawTextureTransparent(335u, 35u, pPlayerPortraits[pParty->pPlayers[2].uFace]);
+ pRenderer->DrawTextureTransparent(494u, 35u, pPlayerPortraits[pParty->pPlayers[3].uFace]);
v3 = pIconsFrameTable->GetFrame(uIconID_CharacterFrame, pEventTimer->uStartTime);
if ( uPlayerCreationUI_SelectedCharacter )
{
@@ -5514,14 +5435,18 @@
{
v4 = 12;
}
+
pRenderer->DrawTextureTransparent(v4, 29, &pIcons_LOD->pTextures[v3->uTextureID]);
- uPosActiveItem = pGUIWindow_CurrentMenu->GetControl(pGUIWindow_CurrentMenu->field_2C_focus_id);
- pRenderer->DrawTextureTransparent(uPosActiveItem->uZ - 4, uPosActiveItem->uY, pTextures_arrowl[uPlayerCreationUI_ArrowAnim + 1]);
- pRenderer->DrawTextureTransparent(uPosActiveItem->uX - 12, uPosActiveItem->uY, pTextures_arrowr[uPlayerCreationUI_ArrowAnim-- + 1]);
- if ( uPlayerCreationUI_ArrowAnim < 0 )
- uPlayerCreationUI_ArrowAnim = 18;
- v6 = LOBYTE(pFontCreate->uFontHeight) - 2;
- v128 = LOBYTE(pFontCreate->uFontHeight) - 2;
+ uPosActiveItem = pGUIWindow_CurrentMenu->GetControl(pGUIWindow_CurrentMenu->pCurrentPosActiveItem);
+
+ uPlayerCreationUI_ArrowAnim = 19 - (GetTickCount() % 500) / 25;
+ pRenderer->DrawTextureTransparent(uPosActiveItem->uZ - 4, uPosActiveItem->uY, pTextures_arrowl[uPlayerCreationUI_ArrowAnim]);
+ pRenderer->DrawTextureTransparent(uPosActiveItem->uX - 12, uPosActiveItem->uY, pTextures_arrowr[uPlayerCreationUI_ArrowAnim]);
+ //if (uPlayerCreationUI_ArrowAnim < 0)
+ // uPlayerCreationUI_ArrowAnim = 18;
+
+ v6 = pFontCreate->uFontHeight - 2;
+ v128 = pFontCreate->uFontHeight - 2;
strcpy(Str1, pGlobalTXT_LocalizationStrings[205]);// "Skills"
uNumLet = strlen(Str1) - 1;
v134 = uNumLet;
@@ -5545,7 +5470,7 @@
v122 = 5 * v6 + 169;
v123 = 3 * v6 + 311;
v129 = 493;
- Str = pParty->pPlayers[0].pName;
+ pPlayer = pParty->pPlayers;
v119 = 6 * v6 + 169;
do
{
@@ -5554,14 +5479,14 @@
v134 + 73,
100,
0,
- pClassNames[(unsigned __int8)Str[17]],
+ pClassNames[(unsigned __int8)pPlayer->uClass],
0,
0,
0);
pRenderer->DrawTextureTransparent(
v134 + 77,
50u,
- *(&pTexture_IC_KNIGHT + ((unsigned int)(unsigned __int8)Str[17] >> 2)));
+ pTexture_IC_KNIGHT[pPlayer->uClass/4]);
v11 = pGUIWindow_CurrentMenu->field_40;
if ( v11 && (v12 = pGUIWindow_CurrentMenu->ptr_1C, v12 == v124) )
{
@@ -5599,7 +5524,7 @@
if ( v120 && v126 != v120 )
strcpy(Str, (const char *)pKeyActionMap->pPressedKeysBuffer);
pGUIWindow_CurrentMenu->DrawTextInRect(pFontCreate, v134, 0x7Cu, 0, Str, 130, 0);
- *((short *)Str + 3323) = 1;
+ *((short *)pPlayer->pName + 3323) = 1;
}
}
else
@@ -5620,58 +5545,60 @@
}
else
{
- pGUIWindow_CurrentMenu->DrawTextInRect(pFontCreate, v134, 0x7Cu, 0, Str, 130, 0);
- }
- uNumRace = ((Player *)(Str - 168))->GetRace();
+ pGUIWindow_CurrentMenu->DrawTextInRect(pFontCreate, v134, 0x7Cu, 0, pPlayer->pName, 130, 0);
+ }
+ uNumRace = pPlayer->GetRace();
switch (uNumRace)
{
case 0: uRaceName = pGlobalTXT_LocalizationStrings[99]; break; // "Human"
- case 1: uRaceName = pGlobalTXT_LocalizationStrings[101]; break; // "Dwarf"
+ case 1: uRaceName = pGlobalTXT_LocalizationStrings[103]; break; // "Dwarf"
case 2: uRaceName = pGlobalTXT_LocalizationStrings[106]; break; // "Goblin"
- case 3: uRaceName = pGlobalTXT_LocalizationStrings[103]; break; // "Elf"
+ case 3: uRaceName = pGlobalTXT_LocalizationStrings[101]; break; // "Elf"
};
strcpy(pTmpBuf, uRaceName);
pGUIWindow_CurrentMenu->DrawTextInRect(pFontCreate, v134 + 72, v128 + 12, 0, pTmpBuf, 130, 0);
v21 = uColor1;
v22 = pFontCreate->AlignText_Center(0x96u, Str1);
pGUIWindow_CurrentMenu->DrawText(pFontCreate, v22 + uX - 24, 291, v21, Str1, 0, 0, 0);
- uNumMight = ((Player *)(Str - 168))->GetActualMight();
+ uNumMight = pPlayer->GetActualMight();
sprintf(pTmpBuf, "%s\r%03d%d", pGlobalTXT_LocalizationStrings[144], v129, uNumMight);// "Might"
- LOWORD(v24) = ((Player *)(Str - 168))->GetStatColor(0);
+ LOWORD(v24) = pPlayer->GetStatColor(0);
pGUIWindow_CurrentMenu->DrawText(pFontCreate, uX, 169, v24, pTmpBuf, 0, 0, 0);
- v25 = ((Player *)(Str - 168))->GetActualIntelligence();
+ v25 = pPlayer->GetActualIntelligence();
sprintf(pTmpBuf, "%s\r%03d%d", pGlobalTXT_LocalizationStrings[116], v129, v25);// "Intellect"
- LOWORD(v26) = ((Player *)(Str - 168))->GetStatColor(1u);
+ LOWORD(v26) = pPlayer->GetStatColor(1u);
pGUIWindow_CurrentMenu->DrawText(pFontCreate, uX, v128 + 169, v26, pTmpBuf, 0, 0, 0);
- v27 = ((Player *)(Str - 168))->GetActualWillpower();
+ v27 = pPlayer->GetActualWillpower();
sprintf(pTmpBuf, "%s\r%03d%d", pGlobalTXT_LocalizationStrings[163], v129, v27);// "Personality"
- LOWORD(v28) = ((Player *)(Str - 168))->GetStatColor(2u);
+ LOWORD(v28) = pPlayer->GetStatColor(2u);
pGUIWindow_CurrentMenu->DrawText(pFontCreate, uX, 2 * v128 + 169, v28, pTmpBuf, 0, 0, 0);
- v29 = ((Player *)(Str - 168))->GetActualEndurance();
+ v29 = pPlayer->GetActualEndurance();
sprintf(pTmpBuf, "%s\r%03d%d", pGlobalTXT_LocalizationStrings[75], v129, v29);// "Endurance"
- LOWORD(v30) = ((Player *)(Str - 168))->GetStatColor(3u);
+ LOWORD(v30) = pPlayer->GetStatColor(3u);
pGUIWindow_CurrentMenu->DrawText(pFontCreate, uX, uY, v30, pTmpBuf, 0, 0, 0);
- v31 = ((Player *)(Str - 168))->GetActualAccuracy();
+ v31 = pPlayer->GetActualAccuracy();
sprintf(pTmpBuf, "%s\r%03d%d", pGlobalTXT_LocalizationStrings[1], v129, v31);// "Accuracy"
- LOWORD(v32) = ((Player *)(Str - 168))->GetStatColor(4u);
+ LOWORD(v32) = pPlayer->GetStatColor(4u);
pGUIWindow_CurrentMenu->DrawText(pFontCreate, uX, 4 * v128 + 169, v32, pTmpBuf, 0, 0, 0);
- v33 = ((Player *)(Str - 168))->GetActualSpeed();
+ v33 = pPlayer->GetActualSpeed();
sprintf(pTmpBuf, "%s\r%03d%d", pGlobalTXT_LocalizationStrings[211], v129, v33);// "Speed"
- LOWORD(v34) = ((Player *)(Str - 168))->GetStatColor(5u);
+ LOWORD(v34) = pPlayer->GetStatColor(5u);
pGUIWindow_CurrentMenu->DrawText(pFontCreate, uX, v122, v34, pTmpBuf, 0, 0, 0);
- v35 = ((Player *)(Str - 168))->GetActualLuck();
+ v35 = pPlayer->GetActualLuck();
sprintf(pTmpBuf, "%s\r%03d%d", pGlobalTXT_LocalizationStrings[136], v129, v35);// "Luck"
- LOWORD(v36) = ((Player *)(Str - 168))->GetStatColor(6u);
+ LOWORD(v36) = pPlayer->GetStatColor(6u);
pGUIWindow_CurrentMenu->DrawText(pFontCreate, uX, v119, v36, pTmpBuf, 0, 0, 0);
- v37 = ((Player *)(Str - 168))->GetSkillIdxByOrder(0);
- v38 = pFontCreate->AlignText_Center(0x96u, pSkillNames[v37]);
- sprintf(pTmpBuf, "\t%03u%s", v38);
+ v37 = pPlayer->GetSkillIdxByOrder(0);
+ pSkillName = pSkillNames[v37];
+ v38 = pFontCreate->AlignText_Center(0x96u, pSkillName);
+ sprintf(pTmpBuf, "\t%03u%s", v38, pSkillName);
pGUIWindow_CurrentMenu->DrawText(pFontCreate, uX - 24, 311, uColorWhite, pTmpBuf, 0, 0, 0);
- v39 = ((Player *)(Str - 168))->GetSkillIdxByOrder(1);
- v40 = pFontCreate->AlignText_Center(0x96u, pSkillNames[v39]);
- sprintf(pTmpBuf, "\t%03u%s", v40);
+ v39 = pPlayer->GetSkillIdxByOrder(1);
+ pSkillName = pSkillNames[v39];
+ v40 = pFontCreate->AlignText_Center(0x96u, pSkillName);
+ sprintf(pTmpBuf, "\t%03u%s", v40, pSkillName);
pGUIWindow_CurrentMenu->DrawText(pFontCreate, uX - 24, v128 + 311, uColorWhite, pTmpBuf, 0, 0, 0);
- v41 = ((Player *)(Str - 168))->GetSkillIdxByOrder(2);
+ v41 = pPlayer->GetSkillIdxByOrder(2);
v42 = pSkillNames[v41];
v43 = pSkillNames[v41];
v133 = v41;
@@ -5681,7 +5608,7 @@
if ( (signed int)v133 >= 37 )
v45 = uColorTeal;
pGUIWindow_CurrentMenu->DrawText(pFontCreate, uX - 24, 2 * v128 + 311, v45, pTmpBuf, 0, 0, 0);
- v46 = ((Player *)(Str - 168))->GetSkillIdxByOrder(3);
+ v46 = pPlayer->GetSkillIdxByOrder(3);
v47 = pSkillNames[v46];
v48 = pSkillNames[v46];
v133 = v46;
@@ -5691,13 +5618,13 @@
if ( (signed int)v133 >= 37 )
v50 = uColorTeal;
pGUIWindow_CurrentMenu->DrawText(pFontCreate, uX - 24, v123, v50, pTmpBuf, 0, 0, 0);
- Str += 6972;
+ pPlayer++;
v124 = (char *)v124 + 1;
v134 += 159;
v129 -= 158;
uX += 158;
}
- while ( (signed int)Str < (signed int)&pParty->pPickedItem.uNumCharges );
+ while ( (signed int)pPlayer->pName < (signed int)&pParty->pPickedItem.uNumCharges );
strcpy(Str1, pGlobalTXT_LocalizationStrings[41]);// "Class"
v51 = strlen(Str1) - 1;
v134 = v51;
@@ -5714,86 +5641,65 @@
v51 = v134;
}
}
- v54 = pParty->pPlayers[uPlayerCreationUI_SelectedCharacter].uClass;
+ uClassType = pParty->pPlayers[uPlayerCreationUI_SelectedCharacter].uClass;
v55 = uColor1;
- v133 = pParty->pPlayers[uPlayerCreationUI_SelectedCharacter].uClass;
v56 = pFontCreate->AlignText_Center(193u, Str1);
pGUIWindow_CurrentMenu->DrawText(pFontCreate, v56 + 324, 395, v55, Str1, 0, 0, 0);
v57 = uColorTeal;
- if ( v54 )
+ if ( uClassType )
v57 = uColorWhite;
- v58 = pClassNames[0];
- v59 = v57;
v60 = pFontCreate->AlignText_Center(65u, pClassNames[0]);
- pGUIWindow_CurrentMenu->DrawText(pFontCreate, v60 + 323, 417, v59, v58, 0, 0, 0);
+ pGUIWindow_CurrentMenu->DrawText(pFontCreate, v60 + 323, 417, v57, pClassNames[0], 0, 0, 0);
v61 = uColorTeal;
- if ( v133 != 12 )
+ if ( uClassType != PLAYER_CLASS_PALADIN )
v61 = uColorWhite;
- v62 = pClassNames[12];
- v63 = v61;
v64 = v128 + 417;
uColorGreen = v128 + 417;
v65 = pFontCreate->AlignText_Center(65u, pClassNames[12]);
- pGUIWindow_CurrentMenu->DrawText(pFontCreate, v65 + 323, v64, v63, v62, 0, 0, 0);
+ pGUIWindow_CurrentMenu->DrawText(pFontCreate, v65 + 323, v64, v61, pClassNames[12], 0, 0, 0);
v66 = uColorTeal;
- if ( v133 != 20 )
+ if ( uClassType != PLAYER_CLASS_DRUID )
v66 = uColorWhite;
- v67 = pClassNames[20];
- v68 = v66;
v69 = 2 * v128 + 417;
v126 = 2 * v128 + 417;
v70 = pFontCreate->AlignText_Center(65u, pClassNames[20]);
- pGUIWindow_CurrentMenu->DrawText(pFontCreate, v70 + 323, v69, v68, v67, 0, 0, 0);
+ pGUIWindow_CurrentMenu->DrawText(pFontCreate, v70 + 323, v69, v66, pClassNames[20], 0, 0, 0);
v71 = uColorTeal;
- if ( v133 != PLAYER_CLASS_CLERIC )
+ if ( uClassType != PLAYER_CLASS_CLERIC )
v71 = uColorWhite;
- v72 = pClassNames[24];
- v73 = v71;
v74 = pFontCreate->AlignText_Center(65u, pClassNames[24]);
- pGUIWindow_CurrentMenu->DrawText(pFontCreate, v74 + 388, 417, v73, v72, 0, 0, 0);
+ pGUIWindow_CurrentMenu->DrawText(pFontCreate, v74 + 388, 417, v71, pClassNames[24], 0, 0, 0);
v75 = uColorTeal;
- if ( v133 != 28 )
+ if ( uClassType != 28 )
v75 = uColorWhite;
- v76 = pClassNames[28];
- v77 = v75;
v78 = uColorGreen;
v79 = pFontCreate->AlignText_Center(65u, pClassNames[28]);
- pGUIWindow_CurrentMenu->DrawText(pFontCreate, v79 + 388, v78, v77, v76, 0, 0, 0);
+ pGUIWindow_CurrentMenu->DrawText(pFontCreate, v79 + 388, v78, v75, pClassNames[28], 0, 0, 0);
v80 = uColorTeal;
- if ( v133 != PLAYER_CLASS_SORCERER )
+ if ( uClassType != PLAYER_CLASS_SORCERER )
v80 = uColorWhite;
- v81 = pClassNames[32];
- v82 = v80;
v83 = v126;
v84 = pFontCreate->AlignText_Center(65u, pClassNames[32]);
- pGUIWindow_CurrentMenu->DrawText(pFontCreate, v84 + 388, v83, v82, v81, 0, 0, 0);
+ pGUIWindow_CurrentMenu->DrawText(pFontCreate, v84 + 388, v83, v80, pClassNames[32], 0, 0, 0);
v85 = uColorTeal;
- if ( v133 != 16 )
+ if ( uClassType != PLAYER_CLASS_SHOOTER )
v85 = uColorWhite;
- v86 = pClassNames[16];
- v87 = v85;
v88 = pFontCreate->AlignText_Center(65u, pClassNames[16]);
- pGUIWindow_CurrentMenu->DrawText(pFontCreate, v88 + 453, 417, v87, v86, 0, 0, 0);
+ pGUIWindow_CurrentMenu->DrawText(pFontCreate, v88 + 453, 417, v85, pClassNames[16], 0, 0, 0);
v89 = uColorTeal;
- if ( v133 != 8 )
+ if ( uClassType != PLAYER_CLASS_MONK )
v89 = uColorWhite;
- v90 = pClassNames[8];
- v91 = v89;
v92 = uColorGreen;
v93 = pFontCreate->AlignText_Center(65u, pClassNames[8]);
- pGUIWindow_CurrentMenu->DrawText(pFontCreate, v93 + 453, v92, v91, v90, 0, 0, 0);
+ pGUIWindow_CurrentMenu->DrawText(pFontCreate, v93 + 453, v92, v89, pClassNames[8], 0, 0, 0);
v94 = uColorTeal;
- if ( v133 != 4 )
+ if ( uClassType != PLAYER_CLASS_THEIF )
v94 = uColorWhite;
- v95 = pClassNames[4];
- v96 = v94;
v97 = v126;
v98 = pFontCreate->AlignText_Center(65u, pClassNames[4]);
- pGUIWindow_CurrentMenu->DrawText(pFontCreate, v98 + 453, v97, v96, v95, 0, 0, 0);
- v99 = pGlobalTXT_LocalizationStrings[20]; // "Available Skills"
- v100 = uColor1;
- v101 = pFontCreate->AlignText_Center(0xECu, pGlobalTXT_LocalizationStrings[20]);
- pGUIWindow_CurrentMenu->DrawText(pFontCreate, v101 + 37, 395, v100, v99, 0, 0, 0);
+ pGUIWindow_CurrentMenu->DrawText(pFontCreate, v98 + 453, v97, v94, pClassNames[4], 0, 0, 0);
+ v101 = pFontCreate->AlignText_Center(0xECu, pGlobalTXT_LocalizationStrings[20]); // "Available Skills"
+ pGUIWindow_CurrentMenu->DrawText(pFontCreate, v101 + 37, 395, uColor1, pGlobalTXT_LocalizationStrings[20], 0, 0, 0);
v134 = 0;
do
{
@@ -5803,29 +5709,32 @@
v104 = 0;
if ( (signed int)v103 > 0 )
{
- while ( Str1[v104] != 32 )
- {
- ++v104;
- if ( v104 >= (signed int)v103 )
- goto LABEL_77;
- }
- Str1[v104] = 0;
- }
-LABEL_77:
+ if ( Str1[v104] == 32 )
+ {
+ Str1[v104] = 0;
+ }
+ else
+ {
+ while ( Str1[v104] != 32 )
+ {
+ ++v104;
+ if ( v104 >= (signed int)v103 )
+ break;
+ }
+ }
+ }
uColorGreen = -5;
if ( (signed int)v124 <= 3 )
uColorGreen = 0;
v105 = uColorTeal;
if ( !pParty->pPlayers[0].pActiveSkills[v102 + 3486 * uPlayerCreationUI_SelectedCharacter] )
v105 = uColorWhite;
- v106 = v134 / 3;
v107 = v105;
- v108 = v128 * v134 % 3 + 417;
- v109 = pFontCreate->AlignText_Center(100u, Str1);
+ v109 = pFontCreate->AlignText_Center(100u, Str1);
pGUIWindow_CurrentMenu->DrawText(
pFontCreate,
- 100 * v106 + v109 + uColorGreen + 17,
- v108,
+ 100 * (v134 / 3) + v109 + uColorGreen + 17,
+ v128 * (v134 % 3) + 417,
v107,
Str1,
0,
@@ -5834,10 +5743,9 @@
++v134;
}
while ( v134 < 9 );
- v110 = pGlobalTXT_LocalizationStrings[30]; // "Bonus"
v111 = uColor1;
- v112 = pFontCreate->AlignText_Center(0x5Cu, pGlobalTXT_LocalizationStrings[30]);
- pGUIWindow_CurrentMenu->DrawText(pFontCreate, v112 + 533, 394, v111, v110, 0, 0, 0);
+ v112 = pFontCreate->AlignText_Center(0x5Cu, pGlobalTXT_LocalizationStrings[30]);// "Bonus"
+ pGUIWindow_CurrentMenu->DrawText(pFontCreate, v112 + 533, 394, v111, pGlobalTXT_LocalizationStrings[30], 0, 0, 0);
v113 = PlayerCreation_ComputeAttributeBonus();
sprintf(pTmpBuf, "%d", v113);
v114 = uColorWhite;
@@ -5845,16 +5753,16 @@
pGUIWindow_CurrentMenu->DrawText(pFontCreate, v115 + 530, 410, v114, pTmpBuf, 0, 0, 0);
if ( GameUI_StatusBar_TimedStringTimeLeft > GetTickCount() )
{
- v118.str_48 = pGlobalTXT_LocalizationStrings[412];// "Create Party cannot be completed unless you have assigned all characters 2 extra skills and have spent all of your bonus points."
+ pWindow.Hint = pGlobalTXT_LocalizationStrings[412];// "Create Party cannot be completed unless you have assigned all characters 2 extra skills and have spent all of your bonus points."
if ( v113 < 0 )
- v118.str_48 = pGlobalTXT_LocalizationStrings[413];// "You can't spend more than 50 points."
- v118.uFrameWidth = 300;
- v118.uFrameHeight = 100;
- v118.uFrameX = 170;
- v118.uFrameY = 140;
- v118.uFrameZ = 469;
- v118.uFrameW = 239;
- v118._415551(0);
+ pWindow.Hint = pGlobalTXT_LocalizationStrings[413];// "You can't spend more than 50 points."
+ pWindow.uFrameWidth = 300;
+ pWindow.uFrameHeight = 100;
+ pWindow.uFrameX = 170;
+ pWindow.uFrameY = 140;
+ pWindow.uFrameZ = 469;
+ pWindow.uFrameW = 239;
+ pWindow.DrawMessageBox(0);
}
pRenderer->EndScene();
}
@@ -5884,20 +5792,20 @@
++pIcons_LOD->uTexturePacksCount;
if ( !pIcons_LOD->uNumPrevLoadedFiles )
pIcons_LOD->uNumPrevLoadedFiles = pIcons_LOD->uNumLoadedFiles;
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 21;
+ pCurrentScreen = 21;
uPlayerCreationUI_ArrowAnim = 0;
uPlayerCreationUI_SkySliderPos = 0;
uPlayerCreationUI_SelectedCharacter = 0;
v0 = LOBYTE(pFontCreate->uFontHeight) - 2;
- pTexture_IC_KNIGHT = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture("IC_KNIGHT", TEXTURE_16BIT_PALETTE)];
- pTexture_IC_THIEF = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture("IC_THIEF", TEXTURE_16BIT_PALETTE)];
- pTexture_IC_MONK = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture("IC_MONK", TEXTURE_16BIT_PALETTE)];
- pTexture_IC_PALAD = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture("IC_PALAD", TEXTURE_16BIT_PALETTE)];
- pTexture_IC_ARCH = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture("IC_ARCH", TEXTURE_16BIT_PALETTE)];
- pTexture_IC_RANGER = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture("IC_RANGER", TEXTURE_16BIT_PALETTE)];
- pTexture_IC_CLER = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture("IC_CLER", TEXTURE_16BIT_PALETTE)];
- pTexture_IC_DRUID = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture("IC_DRUID", TEXTURE_16BIT_PALETTE)];
- pTexture_IC_SORC = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture("IC_SORC", TEXTURE_16BIT_PALETTE)];
+ pTexture_IC_KNIGHT[0] = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture("IC_KNIGHT", TEXTURE_16BIT_PALETTE)];
+ pTexture_IC_KNIGHT[1] = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture("IC_THIEF", TEXTURE_16BIT_PALETTE)];
+ pTexture_IC_KNIGHT[2] = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture("IC_MONK", TEXTURE_16BIT_PALETTE)];
+ pTexture_IC_KNIGHT[3] = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture("IC_PALAD", TEXTURE_16BIT_PALETTE)];
+ pTexture_IC_KNIGHT[4] = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture("IC_ARCH", TEXTURE_16BIT_PALETTE)];
+ pTexture_IC_KNIGHT[5] = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture("IC_RANGER", TEXTURE_16BIT_PALETTE)];
+ pTexture_IC_KNIGHT[6] = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture("IC_CLER", TEXTURE_16BIT_PALETTE)];
+ pTexture_IC_KNIGHT[7] = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture("IC_DRUID", TEXTURE_16BIT_PALETTE)];
+ pTexture_IC_KNIGHT[8] = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture("IC_SORC", TEXTURE_16BIT_PALETTE)];
pTexture_MAKETOP = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture("MAKETOP", TEXTURE_16BIT_PALETTE)];
uX = 0;
pTexture_MAKESKY = &pIcons_LOD->pTextures[pIcons_LOD->LoadTexture("MAKESKY", TEXTURE_16BIT_PALETTE)];
@@ -5931,7 +5839,7 @@
uXa = 8;
do
{
- pGUIWindow_CurrentMenu->CreateButton(uXa, 120u, 145u, 25u, 1, 0, 0x3Cu, uControlParama, 0, nullstring, 0);
+ pGUIWindow_CurrentMenu->CreateButton(uXa, 120u, 145u, 25u, 1, 0, 0x3Cu, uControlParama, 0, "", 0);
uXa += 158;
++uControlParama;
}
@@ -5946,7 +5854,7 @@
0xABu,
0,
0,
- nullstring,
+ "",
pTexture_presleft,
0);
pCreationUI_BtnPressLeft[1] = pGUIWindow_CurrentMenu->CreateButton(
@@ -5959,7 +5867,7 @@
0xABu,
1u,
0,
- nullstring,
+ "",
pTexture_presleft,
0);
pCreationUI_BtnPressLeft[2] = pGUIWindow_CurrentMenu->CreateButton(
@@ -5972,7 +5880,7 @@
0xABu,
2u,
0,
- nullstring,
+ "",
pTexture_presleft,
0);
pCreationUI_BtnPressLeft[3] = pGUIWindow_CurrentMenu->CreateButton(
@@ -5985,7 +5893,7 @@
0xABu,
3u,
0,
- nullstring,
+ "",
pTexture_presleft,
0);
pCreationUI_BtnPressRight[0] = pGUIWindow_CurrentMenu->CreateButton(
@@ -5998,7 +5906,7 @@
0xACu,
0,
0,
- nullstring,
+ "",
pTexture_pressrigh,
0);
pCreationUI_BtnPressRight[1] = pGUIWindow_CurrentMenu->CreateButton(
@@ -6011,7 +5919,7 @@
0xACu,
1u,
0,
- nullstring,
+ "",
pTexture_pressrigh,
0);
pCreationUI_BtnPressRight[2] = pGUIWindow_CurrentMenu->CreateButton(
@@ -6024,7 +5932,7 @@
0xACu,
2u,
0,
- nullstring,
+ "",
pTexture_pressrigh,
0);
pCreationUI_BtnPressRight[3] = pGUIWindow_CurrentMenu->CreateButton(
@@ -6037,7 +5945,7 @@
0xACu,
3u,
0,
- nullstring,
+ "",
pTexture_pressrigh,
0);
pCreationUI_BtnPressLeft2[0] = pGUIWindow_CurrentMenu->CreateButton(
@@ -6050,7 +5958,7 @@
0x90u,
0,
0,
- nullstring,
+ "",
pTexture_presleft,
0);
pCreationUI_BtnPressLeft2[1] = pGUIWindow_CurrentMenu->CreateButton(
@@ -6063,7 +5971,7 @@
0x90u,
1u,
0,
- nullstring,
+ "",
pTexture_presleft,
0);
pCreationUI_BtnPressLeft2[2] = pGUIWindow_CurrentMenu->CreateButton(
@@ -6076,7 +5984,7 @@
0x90u,
2u,
0,
- nullstring,
+ "",
pTexture_presleft,
0);
pCreationUI_BtnPressLeft2[3] = pGUIWindow_CurrentMenu->CreateButton(
@@ -6089,7 +5997,7 @@
0x90u,
3u,
0,
- nullstring,
+ "",
pTexture_presleft,
0);
pCreationUI_BtnPressRight2[0] = pGUIWindow_CurrentMenu->CreateButton(
@@ -6102,7 +6010,7 @@
0x91u,
0,
0,
- nullstring,
+ "",
pTexture_pressrigh,
0);
pCreationUI_BtnPressRight2[1] = pGUIWindow_CurrentMenu->CreateButton(
@@ -6115,7 +6023,7 @@
0x91u,
1u,
0,
- nullstring,
+ "",
pTexture_pressrigh,
0);
pCreationUI_BtnPressRight2[2] = pGUIWindow_CurrentMenu->CreateButton(
@@ -6128,7 +6036,7 @@
0x91u,
2u,
0,
- nullstring,
+ "",
pTexture_pressrigh,
0);
pCreationUI_BtnPressRight2[3] = pGUIWindow_CurrentMenu->CreateButton(
@@ -6141,14 +6049,14 @@
0x91u,
3u,
0,
- nullstring,
+ "",
pTexture_pressrigh,
0);
uControlParamb = 0;
uXb = 8;
do
{
- pGUIWindow_CurrentMenu->CreateButton(uXb, 308u, 150u, v0, 1, 0, 0x48u, uControlParamb, 0, nullstring, 0);
+ pGUIWindow_CurrentMenu->CreateButton(uXb, 308u, 150u, v0, 1, 0, 0x48u, uControlParamb, 0, "", 0);
pGUIWindow_CurrentMenu->CreateButton(
uXb,
v0 + 308,
@@ -6159,7 +6067,7 @@
0x49u,
uControlParamb,
0,
- nullstring,
+ "",
0);
pGUIWindow_CurrentMenu->CreateButton(
uXb,
@@ -6171,7 +6079,7 @@
0x4Au,
uControlParamb,
0,
- nullstring,
+ "",
0);
pGUIWindow_CurrentMenu->CreateButton(
uXb,
@@ -6183,21 +6091,21 @@
0x4Bu,
uControlParamb,
0,
- nullstring,
+ "",
0);
uXb += 158;
++uControlParamb;
}
while ( (signed int)uXb < 640 );
- pGUIWindow_CurrentMenu->CreateButton(5u, 21u, 0x99u, 0x16Du, 1, 0, 0x76u, 0, 0x31u, nullstring, 0);
- pGUIWindow_CurrentMenu->CreateButton(163u, 21u, 0x99u, 0x16Du, 1, 0, 0x76u, 1u, 0x32u, nullstring, 0);
- pGUIWindow_CurrentMenu->CreateButton(321u, 21u, 0x99u, 0x16Du, 1, 0, 0x76u, 2u, 0x33u, nullstring, 0);
- pGUIWindow_CurrentMenu->CreateButton(479u, 21u, 0x99u, 0x16Du, 1, 0, 0x76u, 3u, 0x34u, nullstring, 0);
+ pGUIWindow_CurrentMenu->CreateButton(5u, 21u, 0x99u, 0x16Du, 1, 0, 0x76u, 0, 0x31u, "", 0);
+ pGUIWindow_CurrentMenu->CreateButton(163u, 21u, 0x99u, 0x16Du, 1, 0, 0x76u, 1u, 0x32u, "", 0);
+ pGUIWindow_CurrentMenu->CreateButton(321u, 21u, 0x99u, 0x16Du, 1, 0, 0x76u, 2u, 0x33u, "", 0);
+ pGUIWindow_CurrentMenu->CreateButton(479u, 21u, 0x99u, 0x16Du, 1, 0, 0x76u, 3u, 0x34u, "", 0);
uXc = 23;
uControlParamc = 2;
do
{
- pGUIWindow_CurrentMenu->CreateButton(uXc, 169u, 120u, 20u, 1, 0, 0, uControlParamc - 2, 0, nullstring, 0);
+ pGUIWindow_CurrentMenu->CreateButton(uXc, 169u, 120u, 20u, 1, 0, 0, uControlParamc - 2, 0, "", 0);
pGUIWindow_CurrentMenu->CreateButton(
uXc,
v0 + 169,
@@ -6208,7 +6116,7 @@
0,
uControlParamc - 1,
0,
- nullstring,
+ "",
0);
pGUIWindow_CurrentMenu->CreateButton(
uXc,
@@ -6220,7 +6128,7 @@
0,
uControlParamc,
0,
- nullstring,
+ "",
0);
pGUIWindow_CurrentMenu->CreateButton(
uXc,
@@ -6232,7 +6140,7 @@
0,
uControlParamc + 1,
0,
- nullstring,
+ "",
0);
pGUIWindow_CurrentMenu->CreateButton(
uXc,
@@ -6244,7 +6152,7 @@
0,
uControlParamc + 2,
0,
- nullstring,
+ "",
0);
pGUIWindow_CurrentMenu->CreateButton(
uXc,
@@ -6256,7 +6164,7 @@
0,
uControlParamc + 3,
0,
- nullstring,
+ "",
0);
pGUIWindow_CurrentMenu->CreateButton(
uXc,
@@ -6268,22 +6176,22 @@
0,
uControlParamc + 4,
0,
- nullstring,
+ "",
0);
uControlParamc += 7;
uXc += 158;
}
while ( (signed int)uControlParamc < 30 );
pGUIWindow_CurrentMenu->_41D08F(28, 0, 7, 40);
- pGUIWindow_CurrentMenu->CreateButton(323u, 417u, 65u, v0, 1, 0, 0x41u, 0, 0, nullstring, 0);
- pGUIWindow_CurrentMenu->CreateButton(323u, v0 + 417, 65u, v0, 1, 0, 0x41u, 0xCu, 0, nullstring, 0);
- pGUIWindow_CurrentMenu->CreateButton(323u, 2 * v0 + 417, 65u, v0, 1, 0, 0x41u, 0x14u, 0, nullstring, 0);
- pGUIWindow_CurrentMenu->CreateButton(388u, 417u, 65u, v0, 1, 0, 0x41u, 0x18u, 0, nullstring, 0);
- pGUIWindow_CurrentMenu->CreateButton(388u, v0 + 417, 65u, v0, 1, 0, 0x41u, 0x1Cu, 0, nullstring, 0);
- pGUIWindow_CurrentMenu->CreateButton(388u, 2 * v0 + 417, 65u, v0, 1, 0, 0x41u, 0x20u, 0, nullstring, 0);
- pGUIWindow_CurrentMenu->CreateButton(453u, 417u, 65u, v0, 1, 0, 0x41u, 0x10u, 0, nullstring, 0);
- pGUIWindow_CurrentMenu->CreateButton(453u, v0 + 417, 65u, v0, 1, 0, 0x41u, 8u, 0, nullstring, 0);
- pGUIWindow_CurrentMenu->CreateButton(453u, 2 * v0 + 417, 65u, v0, 1, 0, 0x41u, 4u, 0, nullstring, 0);
+ pGUIWindow_CurrentMenu->CreateButton(323u, 417u, 65u, v0, 1, 0, 0x41u, 0, 0, "", 0);
+ pGUIWindow_CurrentMenu->CreateButton(323u, v0 + 417, 65u, v0, 1, 0, 0x41u, 0xCu, 0, "", 0);
+ pGUIWindow_CurrentMenu->CreateButton(323u, 2 * v0 + 417, 65u, v0, 1, 0, 0x41u, 0x14u, 0, "", 0);
+ pGUIWindow_CurrentMenu->CreateButton(388u, 417u, 65u, v0, 1, 0, 0x41u, 0x18u, 0, "", 0);
+ pGUIWindow_CurrentMenu->CreateButton(388u, v0 + 417, 65u, v0, 1, 0, 0x41u, 0x1Cu, 0, "", 0);
+ pGUIWindow_CurrentMenu->CreateButton(388u, 2 * v0 + 417, 65u, v0, 1, 0, 0x41u, 0x20u, 0, "", 0);
+ pGUIWindow_CurrentMenu->CreateButton(453u, 417u, 65u, v0, 1, 0, 0x41u, 0x10u, 0, "", 0);
+ pGUIWindow_CurrentMenu->CreateButton(453u, v0 + 417, 65u, v0, 1, 0, 0x41u, 8u, 0, "", 0);
+ pGUIWindow_CurrentMenu->CreateButton(453u, 2 * v0 + 417, 65u, v0, 1, 0, 0x41u, 4u, 0, "", 0);
uControlParamd = 0;
do
{
@@ -6291,8 +6199,8 @@
if ( uControlParamd <= 3 )
uXd = 0;
pGUIWindow_CurrentMenu->CreateButton(
- 100 * uControlParamd / 3 + uXd + 17,
- v0 * uControlParamd % 3 + 417,
+ 100 * (uControlParamd / 3) + uXd + 17,
+ v0 * (uControlParamd % 3) + 417,
100u,
v0,
1,
@@ -6300,7 +6208,7 @@
0x40u,
uControlParamd,
0,
- nullstring,
+ "",
0);
++uControlParamd;
}
@@ -6315,7 +6223,7 @@
0x42u,
0,
0xDu,
- nullstring,
+ "",
(Texture *)(uTextureID_BUTTMAKE != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_BUTTMAKE] : 0),
0);
pPlayerCreationUI_BtnReset = pGUIWindow_CurrentMenu->CreateButton(
@@ -6328,7 +6236,7 @@
0x43u,
0,
0x43u,
- nullstring,
+ "",
(Texture *)(uTextureID_BUTTMAKE2 != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_BUTTMAKE2] : 0),
0);
pPlayerCreationUI_BtnMinus = pGUIWindow_CurrentMenu->CreateButton(
@@ -6341,7 +6249,7 @@
0x3Fu,
0,
0x2Du,
- nullstring,
+ "",
pTexture_buttminu,
0);
pPlayerCreationUI_BtnPlus = pGUIWindow_CurrentMenu->CreateButton(
@@ -6354,12 +6262,12 @@
0x3Eu,
1u,
0x2Bu,
- nullstring,
+ "",
pTexture_buttplus,
0);
pFontCChar = LoadFont("cchar.fnt", "FONTPAL", 0);
}
-// 4E28F8: using guessed type int uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions;
+// 4E28F8: using guessed type int pCurrentScreen;
//----- (0049750E) --------------------------------------------------------
void __cdecl DeleteCCharFont()
@@ -6390,20 +6298,20 @@
signed int v16; // ecx@70
unsigned int v18; // [sp-4h] [bp-84h]@48
ItemGen item; // [sp+Ch] [bp-74h]@37
- char v20; // [sp+30h] [bp-50h]@29
- char v21; // [sp+31h] [bp-4Fh]@29
- __int16 v22; // [sp+4Dh] [bp-33h]@29
+ char v20[32]; // [sp+30h] [bp-50h]@29
+ //char v21; // [sp+31h] [bp-4Fh]@29
+ //__int16 v22; // [sp+4Dh] [bp-33h]@29
char v23; // [sp+4Fh] [bp-31h]@29
MSG Msg; // [sp+50h] [bp-30h]@17
POINT v25; // [sp+6Ch] [bp-14h]@6
bool v26; // [sp+74h] [bp-Ch]@1
POINT v24; // [sp+78h] [bp-8h]@6
- v0 = &stru_506F20;
+ v0 = &pTexture_PCX;
v1 = 0;
v26 = 0;
- stru_506F20.Release();
- stru_506F20.Load("makeme.pcx", 0);
+ pTexture_PCX.Release();
+ pTexture_PCX.Load("makeme.pcx", 0);
if (pAsyncMouse)
pAsyncMouse->Resume();
v2 = 6;
@@ -6422,7 +6330,7 @@
v6 = pMessageQueue_50CBD0->uNumMessages;
do
{
- if ( uMouseX >= (signed int)v5->uX
+ if ( uMouseX >= (signed int)v5->uX //mouse movement
&& uMouseX <= (signed int)v5->uZ
&& uMouseY >= (signed int)v5->uY
&& uMouseY <= (signed int)v5->uW )
@@ -6431,7 +6339,7 @@
if ( (signed int)v6 < 40 )
{
pMessageQueue_50CBD0->pMessages[v6].eType = (UIMessageType)v5->field_1C;
- v0 = &stru_506F20;
+ v0 = &pTexture_PCX;
pMessageQueue_50CBD0->pMessages[pMessageQueue_50CBD0->uNumMessages].param = v7;
*(&pMessageQueue_50CBD0->uNumMessages + 3 * pMessageQueue_50CBD0->uNumMessages + 3) = 0;
v6 = pMessageQueue_50CBD0->uNumMessages + 1;
@@ -6479,17 +6387,17 @@
v0->Release();
pGUIWindow_CurrentMenu->Release();
pIcons_LOD->_4114F2();
- v20 = 0;
- memset(&v21, 0, 0x1Cu);
- v22 = 0;
- v23 = 0;
+ v20[0] = 0;
+ memset(&v20[1], 0, 0x1Cu);
+ *(_WORD*)&v20[29] = 0;
+ v20[31] = 0;
do
{
v8 = 0;
do
{
v9 = rand() % 32;
- if ( !*(&v20 + v9) )
+ if ( !v20[v9] )
break;
++v8;
}
@@ -6497,15 +6405,15 @@
if ( v8 == 10 )
{
v9 = 0;
- if ( v20 )
+ if ( v20[0] )
{
do
++v9;
- while ( *(&v20 + v9) );
+ while ( v20[v9] );
}
}
pParty->field_854[v1++] = v9;
- *(&v20 + v9) = 1;
+ v20[v9] = 1;
}
while ( (signed int)v1 < 32 );
item.Reset();
@@ -6760,8 +6668,8 @@
(signed __int16)v21.uWidth);
free(pString);
pWindow_MainMenu = GUIWindow::Create(0, 0, 640, 480, WINDOW_MainMenu, 0, (int)ptr);
- pWindow_MainMenu->CreateButton(0, 0, 0, 0, 1, 0, 0x71u, 0, 0x1Bu, nullstring, 0);
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 9;
+ pWindow_MainMenu->CreateButton(0, 0, 0, 0, 1, 0, 0x71u, 0, 0x1Bu, "", 0);
+ pCurrentScreen = 9;
SetCurrentMenuID(MENU_Credits);
pRenderer->BeginScene();
pRenderer->DrawTextureRGB(0, 0, &v16);
@@ -6901,16 +6809,16 @@
{
result = 1;
}
- v3->vNormal.x = v.x;
- v3->vNormal.y = v.y;
- v3->vNormal.z = v.z;
- v3->field_10 = *(float *)&a3;
- v3->field_14 = result;
+ v3->face_plane.vNormal.x = v.x;
+ v3->face_plane.vNormal.y = v.y;
+ v3->face_plane.vNormal.z = v.z;
+ v3->face_plane.dist = *(float *)&a3;
+ v3->polygonType = (PolygonType)result;
return result;
}
//----- (0049B0C9) --------------------------------------------------------
-int stru154::_49B0C9(Vec3_float_ *pNormal, float a3)
+int stru154::_49B0C9(Vec3_float_ *pNormal, float dist)
{
signed int v3; // esi@1
signed int result; // eax@9
@@ -6944,11 +6852,11 @@
v5 = pNormal->z;
v6 = pNormal->y;
v7 = pNormal->x;
- this->field_14 = result;
- this->vNormal.x = v7;
- this->field_10 = a3;
- this->vNormal.y = v6;
- this->vNormal.z = v5;
+ this->polygonType = (PolygonType)result;
+ this->face_plane.vNormal.x = v7;
+ this->face_plane.dist = dist;
+ this->face_plane.vNormal.y = v6;
+ this->face_plane.vNormal.z = v5;
return result;
}
@@ -7130,109 +7038,9 @@
}
-//----- (004A1C1E) --------------------------------------------------------
-void __cdecl DoRenderBillboards_D3D()
-{
- signed int v0; // ebp@1
- signed int *v1; // esi@2
- //IDirect3DDevice3Vtbl *v2; // esi@7
- unsigned int v3; // eax@7
- unsigned int v4; // [sp+58h] [bp-4h]@2
-
- v0 = -1;
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, 3u));
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 1u));
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, 0));
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, 1u));
- if ( ((pRenderer->uNumBillboardsToDraw - 1) & 0x80000000u) == 0 )
- {
- v1 = (signed int *)&pRenderer->pBillboardRenderListD3D[pRenderer->uNumBillboardsToDraw - 1].bOpaque;
- v4 = pRenderer->uNumBillboardsToDraw;
- do
- {
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetTexture(
- 0,
- (IDirect3DTexture2 *)*(v1 - 35)));
- if ( *v1 != v0 )
- {
- v0 = *v1;
- SetBillboardBlendOptions(*v1);
- }
- ErrD3D(pRenderer->pRenderD3D->pDevice->DrawPrimitive(
- D3DPT_TRIANGLEFAN,
- 452,
- v1 - 33,
- *(v1 - 34),
- 24));
- v1 -= 39;
- --v4;
- }
- while ( v4 );
- }
- if ( pRenderer->turnFogOn )
- {
- pRenderer->turnFogOn = 0;
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, 1u));
- //v2 = pRenderer->pRenderD3D->pDevice->lpVtbl;
- v3 = GetLevelFogColor();
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGCOLOR, v3 & 0xFFFFFF));
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGTABLEMODE, 0));
- }
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, 2u));
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, 1u));
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 0));
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 2u));
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 1u));
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DITHERENABLE, 1u));
-}
-
-//----- (004A1DA8) --------------------------------------------------------
-void __fastcall SetBillboardBlendOptions(signed int a1)
-{
- //IDirect3DDevice3Vtbl *v1; // edi@9
- unsigned int v2; // eax@9
- int v3; // [sp+0h] [bp-4h]@0
-
- if ( !a1 )
- {
- if ( pRenderer->turnFogOn )
- {
- pRenderer->turnFogOn = 0;
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, 1u));
- //v1 = pRenderer->pRenderD3D->pDevice->lpVtbl;
- v2 = GetLevelFogColor();
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGCOLOR, v2 & 0xFFFFFF));
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGTABLEMODE, 0));
- }
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 5));
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 6u));
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DITHERENABLE, 1));
- return;
- }
- if ( a1 > 0 && a1 <= 3 )
- {
- if ( pRenderer->bUsingSpecular )
- {
- if ( !pRenderer->turnFogOn )
- {
- pRenderer->turnFogOn = 1;
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, 0));
- }
- }
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 2));
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 2u));
- ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DITHERENABLE, 0));
- }
-}
-
-
-
-
-
-
//----- (004A46E6) --------------------------------------------------------
-int __fastcall sub_4A46E6(unsigned int x, signed int y, signed int a3, int a4, unsigned int a5)
+int __fastcall sr_4A46E6_draw_particle_segment(unsigned int x, signed int y, signed int _z, int a4, unsigned int lightColor)
{
int v5; // eax@1
int z; // eax@1
@@ -7255,7 +7063,7 @@
signed int v23; // [sp+20h] [bp+Ch]@1
v5 = a4;
- v23 = a3 >> 16;
+ v23 = _z >> 16;
z = x + v5;
if ( z >= (signed int)pViewport->uViewportX
&& (signed int)x <= (signed int)pViewport->uViewportZ
@@ -7269,12 +7077,12 @@
pTarget = &pRenderer->pTargetSurface[x + y * pRenderer->uTargetSurfacePitch];
v22 = z - x;
pTargetZ = &pRenderer->pActiveZBuffer[x + 640 * y];
- v7 = a5 >> 3;
- v8 = a5 & 0xF0;
+ v7 = lightColor >> 3;
+ v8 = lightColor & 0xF0;
v9 = v7 & 0x1E0000;
if ( pRenderer->uTargetGBits == 5 )
{
- v10 = (v8 | (((unsigned __int16)(a5 & 0xF000) | (unsigned int)v9) >> 3)) >> 4;
+ v10 = (v8 | (((unsigned __int16)(lightColor & 0xF000) | (unsigned int)v9) >> 3)) >> 4;
v11 = (int *)pTarget;
v12 = pTargetZ;
v13 = v22;
@@ -7321,7 +7129,7 @@
}
else
{
- v15 = (v8 | (((unsigned __int16)(a5 & 0xF800) | (unsigned int)v9) >> 2)) >> 4;
+ v15 = (v8 | (((unsigned __int16)(lightColor & 0xF800) | (unsigned int)v9) >> 2)) >> 4;
v16 = (int *)pTarget;
v17 = pTargetZ;
v18 = v22;
@@ -7482,12 +7290,13 @@
v1 = pRenderer->pTargetSurface;
v2 = Dst.lpSurface;
- for (uint y = 0; y < 480; ++y)
+
+ /*for (uint y = 0; y < 480; ++y)
{
auto pDst = (unsigned short *)((char *)Dst.lpSurface + y * Dst.lPitch);
for (uint x = 0; x < 640; ++x)
- pDst[x] = pRenderer->uTargetGMask | pRenderer->uTargetBMask;
- }
+ pDst[x] = pRenderer->uTargetRMask | pRenderer->uTargetBMask;
+ }*/
auto pSrc = pRenderer->pTargetSurface;
auto pDst = (__int16 *)Dst.lpSurface;
@@ -7526,9 +7335,16 @@
v13 = v24;
for (uint y = pViewport->uViewportY; y < pViewport->uViewportW; ++y)
- memcpy(pDst + pViewport->uViewportX + y * Dst.lPitch / 2,
- pSrc + pViewport->uViewportX + y * 640, (pViewport->uViewportZ - pViewport->uViewportX) * sizeof(__int16));
-
+ {
+ //memcpy(pDst + pViewport->uViewportX + y * Dst.lPitch / 2,
+ // pSrc + pViewport->uViewportX + y * 640, (pViewport->uViewportZ - pViewport->uViewportX) * sizeof(__int16));
+ for (uint x = pViewport->uViewportX; x < pViewport->uViewportZ; ++x)
+ {
+ if (pSrc[y * 640 + x] != (pRenderer->uTargetGMask | pRenderer->uTargetBMask))
+ pDst[y * Dst.lPitch / 2 + x] = pSrc[y * 640 + x];
+ }
+ }
+
ErrD3D(pRenderer->pBackBuffer4->Unlock(0));
/* while ( 1 )
@@ -8124,7 +7940,7 @@
v6 = stru_F8AD28.pDeltaUV[0];
v116 = stru_F8AD28.pDeltaUV[1];
v7 = 0;
- for ( i = bUseLoResSprites; v7 < stru_F8AD28.field_AC; *(int *)v9 = v10 )
+ for ( i = bUseLoResSprites; v7 < stru_F8AD28.uNumLightsApplied; *(int *)v9 = v10 )
{
v8 = v116;
stru_F8AD28._blv_lights_xs[v7] += v6;
@@ -8623,7 +8439,7 @@
v48 = v9;
v50 = v10;
sub_4AF412();
- ++pBLVRenderParams->field_80;
+ ++pBLVRenderParams->uNumFacesRenderedThisFrame;
v11 = sr_sub_47C24C_get_palette(v2, v4->palette_id2, 0, 1);
v12 = stru_F8A590._viewport_space_y;
v51 = v11;
@@ -8889,11 +8705,11 @@
v2 = a1 >> SLOBYTE(stru_F8AD28.field_38);
v3 = a2 >> SLOBYTE(stru_F8AD28.field_38);
- v17 = stru_F8AD28.field_2C;
+ v17 = stru_F8AD28.uCurrentAmbientLightLevel;
v4 = 0;
v15 = v2;
v16 = 0;
- if ( stru_F8AD28.field_AC > 0 )
+ if ( stru_F8AD28.uNumLightsApplied > 0 )
{
do
{
@@ -8926,7 +8742,7 @@
++v16;
v2 = v15;
}
- while ( v16 < stru_F8AD28.field_AC );
+ while ( v16 < stru_F8AD28.uNumLightsApplied );
v4 = 0;
}
if ( stru_F8AD28.field_3E4 != v4 )
@@ -9070,7 +8886,7 @@
stru_F8AD28.vec_20.x = v66.x;
stru_F8AD28.vec_20.y = v66.y;
stru_F8AD28.vec_20.z = v66.z;
- stru_F8AD28.field_3F8 = v2->field_22;
+ stru_F8AD28.uDefaultAmbientLightLevel = v2->field_22;
if ( pBLVRenderParams->sPartyRotX )
{
v74 = (unsigned __int64)(stru_F8AD28.plane_4.vNormal.y * (signed __int64)pBLVRenderParams->sSineY) >> 16;
@@ -9191,11 +9007,11 @@
v69 = v17;
v74 = 0;
v73 = 0;
- stru_F8AD28.field_2C = (stru_F8AD28.field_3F8 + *(__int16 *)((char *)&pIndoor->pSectors->uMinAmbientLightLevel + v17)) << 16;
- v70 = uNumMobileLightsApplied;
- if ( uNumMobileLightsApplied > 0 )
- {
- v18 = (char *)&pMobileLights[0].vPosition.y;
+ stru_F8AD28.uCurrentAmbientLightLevel = (stru_F8AD28.uDefaultAmbientLightLevel + *(__int16 *)((char *)&pIndoor->pSectors->uMinAmbientLightLevel + v17)) << 16;
+ v70 = pMobileLightsStack->uNumLightsActive;
+ if ( pMobileLightsStack->uNumLightsActive > 0 )
+ {
+ v18 = (char *)&pMobileLightsStack->pLights[0].vPosition.y;
do
{
if ( v74 >= 20 )
@@ -9244,7 +9060,7 @@
v28 = v74;
v29 = v18[9];
++v74;
- stru_F8AD28._blv_lights_smthngs[v28] = v29;
+ stru_F8AD28._blv_lights_types[v28] = v29;
}
}
}
@@ -9312,7 +9128,7 @@
v16 = 0.0039215689;
stru_F8AD28._blv_lights_light_dot_faces[v39] = abs(v38);
v40 = v74++;
- stru_F8AD28._blv_lights_smthngs[v40] = 1;
+ stru_F8AD28._blv_lights_types[v40] = 1;
}
}
}
@@ -9329,9 +9145,9 @@
}
}
v73 = 0;
- if ( uNumStationaryLightsApplied > 0 )
- {
- v41 = (char *)&pStationaryLights[0].vPosition.y;
+ if ( pStationaryLightsStack->uNumLightsActive > 0 )
+ {
+ v41 = (char *)&pStationaryLightsStack->pLights[0].vPosition.y;
do
{
if ( v74 >= 20 )
@@ -9380,7 +9196,7 @@
v16 = 0.0039215689;
stru_F8AD28._blv_lights_light_dot_faces[v48] = abs(v47);
v52 = v74++;
- stru_F8AD28._blv_lights_smthngs[v52] = 1;
+ stru_F8AD28._blv_lights_types[v52] = 1;
}
}
}
@@ -9392,9 +9208,9 @@
++v73;
v41 += 12;
}
- while ( v73 < uNumStationaryLightsApplied );
- }
- stru_F8AD28.field_AC = v74;
+ while ( v73 < pStationaryLightsStack->uNumLightsActive );
+ }
+ stru_F8AD28.uNumLightsApplied = v74;
v53 = v1->pBounding.x2;
if ( pBLVRenderParams->vPartyPos.x <= v53 )
{
@@ -9497,7 +9313,7 @@
stru_F8AD28.vec_14.z = 0;
stru_F8AD28.vec_20.x = 0;
stru_F8AD28.vec_20.z = 0;
- stru_F8AD28.field_3F8 = 0;
+ stru_F8AD28.uDefaultAmbientLightLevel = 0;
if ( pBLVRenderParams->sPartyRotX )
{
v0 = ((unsigned __int64)(stru_F8AD28.plane_4.vNormal.x * (signed __int64)pBLVRenderParams->sCosineY) >> 16)
@@ -9595,8 +9411,8 @@
+ ((unsigned __int64)(stru_F8AD28.vec_70.z * (signed __int64)v7) >> 16));
stru_F8AD28.field_38 = 0;
stru_F8AD28.field_3E4 = 0;
- stru_F8AD28.field_2C = 0;
- stru_F8AD28.field_AC = 0;
+ stru_F8AD28.uCurrentAmbientLightLevel = 0;
+ stru_F8AD28.uNumLightsApplied = 0;
stru_F8AD28.field_34 = 0;
return result;
}
@@ -9702,7 +9518,7 @@
v3 = pMouse->GetCursorPos(&a2)->y + 30;
else
v3 = 30;
- a1.str_48 = 0;
+ a1.Hint = 0;
a1.uFrameY = v3;
a1.uFrameWidth = 328;
a1.uFrameHeight = 68;
@@ -9745,7 +9561,7 @@
if ( (signed int)a1.uFrameHeight < 150 )
a1.uFrameHeight = 150;
a1.uFrameWidth = 460;
- a1._415551(0);
+ a1.DrawMessageBox(0);
a1.uFrameWidth -= 12;
a1.uFrameHeight -= 12;
v7 = pSpellStats->pInfos[v1].pName;
@@ -9780,12 +9596,12 @@
pPlayer = pPlayers[uActiveCharacter];
if ( pPlayer->CanAct() )
{
- pDialogueWindow->field_28 = dword_F8B1E0;
+ pDialogueWindow->pNumPresenceButton = dword_F8B1E0;
result = 1;
}
else
{
- pDialogueWindow->field_28 = 0;
+ pDialogueWindow->pNumPresenceButton = 0;
memcpy(&v4, pGUIWindow0, sizeof(v4));
v4.uFrameX = 483;
v4.uFrameWidth = 148;
@@ -10908,8 +10724,8 @@
v52.uFrameX = 483;
v52.uFrameWidth = 148;
v52.uFrameZ = 334;
- v56 = v52.field_38;
- if ( v52.field_38 < v52.field_38 + v52.field_28 )
+ v56 = v52.pStartingPosActiveItem;
+ if ( v52.pStartingPosActiveItem < v52.pStartingPosActiveItem + v52.pNumPresenceButton )
{
v15 = (char *)v54;
while ( 1 )
@@ -10957,7 +10773,7 @@
sprintfex(pTmpBuf, &byte_4F0F98, v32, v31, v30);
sprintfex(pTmpBuf2, dword_F8B1A4, pTmpBuf, 100 * (unsigned __int8)v29[8]);
ptr_F8B1E8 = pTmpBuf2;
- v15 = nullstring;
+ v15 = "";
goto LABEL_45;
}
if ( v28 != 10 )
@@ -10973,7 +10789,7 @@
if ( !v15 )
{
v16->uControlParam = 0;
- v15 = nullstring;
+ v15 = "";
}
goto LABEL_49;
}
@@ -10993,7 +10809,7 @@
if ( !v15 )
{
v16->uControlParam = 0;
- v15 = nullstring;
+ v15 = "";
}
if ( uDialogueType != 84 )
goto LABEL_49;
@@ -11020,7 +10836,7 @@
goto LABEL_33;
}
LABEL_41:
- v15 = nullstring;
+ v15 = "";
goto LABEL_49;
}
v15 = pGlobalTXT_LocalizationStrings[122];
@@ -11028,7 +10844,7 @@
LABEL_49:
strcpy(v16->pButtonName, v15);
++v56;
- if ( v56 >= v52.field_38 + v52.field_28 )
+ if ( v56 >= v52.pStartingPosActiveItem + v52.pNumPresenceButton )
{
v14 = pDialogueWindow;
break;
@@ -11038,10 +10854,10 @@
v34 = 0;
v54 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0xFFu);
v35 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xE1u, 0xCDu, 0x23u);
- v36 = v14->field_38;
+ v36 = v14->pStartingPosActiveItem;
v55 = v35;
- for ( i = v36 + v14->field_28; (signed int)v36 < (signed int)i; i = pDialogueWindow->field_28
- + pDialogueWindow->field_38 )
+ for ( i = v36 + v14->pNumPresenceButton; (signed int)v36 < (signed int)i; i = pDialogueWindow->pNumPresenceButton
+ + pDialogueWindow->pStartingPosActiveItem )
{
v37 = v14->GetControl(v36);
v38 = pFontArrus->CalcTextHeight(v37->pButtonName, &v52, 0, 0);
@@ -11049,7 +10865,7 @@
v34 += v38;
++v36;
}
- v39 = v14->field_28;
+ v39 = v14->pNumPresenceButton;
if ( v39 )
{
v58 = (NPCData *)((174 - v34) / v39);
@@ -11057,7 +10873,7 @@
v58 = (NPCData *)32;
pInString = (char *)2;
v40 = (174 - (signed int)v58 * v39 - v34) / 2 - (signed int)v58 / 2 + 138;
- v56 = v14->field_38;
+ v56 = v14->pStartingPosActiveItem;
i = v56;
if ( (signed int)i < (signed int)(i + v39) )
{
@@ -11073,13 +10889,13 @@
v40 = v45 + v44 - 1;
v42->uW = v40;
v46 = v55;
- if ( (char *)pDialogueWindow->field_2C_focus_id != pInString )
+ if ( (char *)pDialogueWindow->pCurrentPosActiveItem != pInString )
v46 = v54;
v52.DrawText2(pFontArrus, 0, v45, v46, v43, 3u);
v14 = pDialogueWindow;
++pInString;
++v56;
- i = pDialogueWindow->field_28 + pDialogueWindow->field_38;
+ i = pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem;
if ( v56 >= (signed int)i )
break;
i = v56;
@@ -11126,7 +10942,7 @@
0x195u,
a2,
0,
- nullstring,
+ "",
0);
}
@@ -11505,8 +11321,8 @@
}
LABEL_107:
pDialogueWindow->_41D08F(a2, 1, 0, 2);
- result = pDialogueWindow->field_28;
- dword_F8B1E0 = pDialogueWindow->field_28;
+ result = pDialogueWindow->pNumPresenceButton;
+ dword_F8B1E0 = pDialogueWindow->pNumPresenceButton;
return result;
}
@@ -11530,8 +11346,8 @@
}
}
pDialogueWindow->_41D08F(v1, 1, 0, 2);
- result = pDialogueWindow->field_28;
- dword_F8B1E0 = pDialogueWindow->field_28;
+ result = pDialogueWindow->pNumPresenceButton;
+ dword_F8B1E0 = pDialogueWindow->pNumPresenceButton;
return result;
}
// F8B1E0: using guessed type int dword_F8B1E0;
@@ -11572,8 +11388,8 @@
}
}
LABEL_7:
- result = pDialogueWindow->field_28;
- dword_F8B1E0 = pDialogueWindow->field_28;
+ result = pDialogueWindow->pNumPresenceButton;
+ dword_F8B1E0 = pDialogueWindow->pNumPresenceButton;
return result;
}
// F8B1E0: using guessed type int dword_F8B1E0;
@@ -11772,8 +11588,8 @@
break;
}
LABEL_43:
- result = pDialogueWindow->field_28;
- dword_F8B1E0 = pDialogueWindow->field_28;
+ result = pDialogueWindow->pNumPresenceButton;
+ dword_F8B1E0 = pDialogueWindow->pNumPresenceButton;
return result;
}
// F8B1E0: using guessed type int dword_F8B1E0;
@@ -11846,7 +11662,7 @@
pGlobalTXT_LocalizationStrings[34],
(Texture *)(uTextureID_506438 != -1 ? &pIcons_LOD->pTextures[uTextureID_506438] : 0),
0);
- pDialogueWindow->CreateButton(0, 0, 0, 0, 1, 0, 0x51u, 0, 0, nullstring, 0);
+ pDialogueWindow->CreateButton(0, 0, 0, 0, 1, 0, 0x51u, 0, 0, "", 0);
pDialogueWindow->CreateButton(
0x1E0u,
0xA0u,
@@ -11876,7 +11692,7 @@
_4B254D_SkillMasteryTeacher(a4);
pDialogueWindow->Release();
pDialogueWindow = GUIWindow::Create(0, 0, 640, 0x15Eu, WINDOW_MainMenu, v1, 0);
- v2 = nullstring;
+ v2 = "";
ptr_5076F4 = pDialogueWindow->CreateButton(
0x1D7u,
0x1BDu,
@@ -11890,7 +11706,7 @@
pGlobalTXT_LocalizationStrings[34],
(Texture *)(uTextureID_506438 != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_506438] : 0),
0);
- pDialogueWindow->CreateButton(0, 0, 0, 0, 1, 0, 0x51u, 0, 0, nullstring, 0);
+ pDialogueWindow->CreateButton(0, 0, 0, 0, 1, 0, 0x51u, 0, 0, "", 0);
if ( dword_F8B1A8 )
v2 = pGlobalTXT_LocalizationStrings[535];
pDialogueWindow->CreateButton(0x1E0u, 0xA0u, 0x8Cu, 0x1Eu, 1, 0, 0xAFu, 0x4Fu, 0, v2, 0);
@@ -11923,7 +11739,7 @@
pGlobalTXT_LocalizationStrings[34],
(Texture *)(uTextureID_506438 != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_506438] : 0),
0);
- pDialogueWindow->CreateButton(0, 0, 0, 0, 1, 0, 0x51u, 0, 0, nullstring, 0);
+ pDialogueWindow->CreateButton(0, 0, 0, 0, 1, 0, 0x51u, 0, 0, "", 0);
if ( *(&pNPCStats->field_13A5C + 5 * v1->uProfession) )
{
pDialogueWindow->CreateButton(
@@ -12052,7 +11868,7 @@
pGlobalTXT_LocalizationStrings[74],// "End Conversation"
(Texture *)(uTextureID_506438 != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_506438] : 0),
0);
- pDialogueWindow->CreateButton(8u, 8u, 0x1C2u, 0x140u, 1, 0, 0x51u, 0, 0, nullstring, 0);
+ pDialogueWindow->CreateButton(8u, 8u, 0x1C2u, 0x140u, 1, 0, 0x51u, 0, 0, "", 0);
if ( array_5913D8[6] == (NPCData *)1 && dword_591080 )
{
result = (GUIButton *)sub_4B3B42(dword_F8B198);
@@ -12062,7 +11878,7 @@
if ( v17->joins )
{
v1 = 1;
- pDialogueWindow->CreateButton(480u, 160u, 140u, 30u, 1, 0, 0xAFu, 0xDu, 0, nullstring, 0);
+ pDialogueWindow->CreateButton(480u, 160u, 140u, 30u, 1, 0, 0xAFu, 0xDu, 0, "", 0);
}
v5 = (void *)v17->bDrawSomeAnim;
if ( v5 )
@@ -12081,7 +11897,7 @@
0xAFu,
0x13u,
0,
- nullstring,
+ "",
0);
}
}
@@ -12102,7 +11918,7 @@
0xAFu,
0x14u,
0,
- nullstring,
+ "",
0);
}
}
@@ -12123,7 +11939,7 @@
0xAFu,
0x15u,
0,
- nullstring,
+ "",
0);
}
}
@@ -12144,7 +11960,7 @@
0xAFu,
0x16u,
0,
- nullstring,
+ "",
0);
}
}
@@ -12165,7 +11981,7 @@
0xAFu,
0x17u,
0,
- nullstring,
+ "",
0);
}
}
@@ -12186,14 +12002,14 @@
0xAFu,
0x18u,
0,
- nullstring,
+ "",
0);
}
}
pDialogueWindow->_41D08F(v1, 1, 0, 2);
v4 = 1;
- result = (GUIButton *)pDialogueWindow->field_28;
- dword_F8B1E0 = pDialogueWindow->field_28;
+ result = (GUIButton *)pDialogueWindow->pNumPresenceButton;
+ dword_F8B1E0 = pDialogueWindow->pNumPresenceButton;
}
dword_F8B19C = v4;
}
@@ -12359,8 +12175,8 @@
v73 = v14 * (100 - v0->GetMerchant()) / 100;
if ( v73 < v14 / 3 )
v73 = v14 / 3;
- v15 = v13->field_38;
- v16 = v13->field_28;
+ v15 = v13->pStartingPosActiveItem;
+ v16 = v13->pNumPresenceButton;
v72 = 0;
if ( (signed int)v15 >= (signed int)(v15 + v16) )
goto LABEL_76;
@@ -12375,7 +12191,7 @@
}
++v15;
}
- while ( (signed int)v15 < v13->field_28 + v13->field_38 );
+ while ( (signed int)v15 < v13->pNumPresenceButton + v13->pStartingPosActiveItem );
if ( v72 )
{
sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[401], v73);// "Skill Cost: %lu"
@@ -12383,11 +12199,11 @@
v73 = (signed int)(149 - i) / v72;
if ( v73 > 32 )
v73 = 32;
- result = v13->field_38;
+ result = v13->pStartingPosActiveItem;
v19 = (signed int)(149 - v72 * v73 - i) / 2 - v73 / 2 + 162;
i = result;
v68 = v19;
- if ( result < result + v13->field_28 )
+ if ( result < result + v13->pNumPresenceButton )
{
v72 = 2;
do
@@ -12413,13 +12229,13 @@
v21->uW = v26;
v68 = v26;
v27 = v71;
- if ( pDialogueWindow->field_2C_focus_id != v72 )
+ if ( pDialogueWindow->pCurrentPosActiveItem != v72 )
v27 = white;
v65.DrawText2(pFontArrus, 0, v25, v27, (char *)HIDWORD(v66), 3u);
}
- v28 = v13->field_38;
+ v28 = v13->pStartingPosActiveItem;
++i;
- result = v13->field_28 + v28;
+ result = v13->pNumPresenceButton + v28;
++v72;
}
while ( (signed int)i < result );
@@ -12447,7 +12263,7 @@
v33 = pFontArrus->CalcTextHeight(pNPCTopics[122].pText, &v65, 0, 0);
v65.DrawText2(pFontArrus, 0, (212 - v33) / 2 + 101, v32, v31, 3u);
result = (int)pDialogueWindow;
- pDialogueWindow->field_28 = 0;
+ pDialogueWindow->pNumPresenceButton = 0;
return result;
}
v34 = v0->uLevel;
@@ -12537,8 +12353,8 @@
v72 = 0;
pShopOptions[0] = pTmpBuf;
pShopOptions[1] = pGlobalTXT_LocalizationStrings[160];// "Learn Skills"
- v44 = pDialogueWindow->field_28;
- v73 = pDialogueWindow->field_38;
+ v44 = pDialogueWindow->pNumPresenceButton;
+ v73 = pDialogueWindow->pStartingPosActiveItem;
if ( v73 < v73 + v44 )
{
v45 = pShopOptions;
@@ -12576,14 +12392,14 @@
++v45;
++v73;
}
- while ( v73 < pDialogueWindow->field_28 + pDialogueWindow->field_38 );
+ while ( v73 < pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem );
}
HIDWORD(v66) = (174 - v72) / 2;
- result = v43->field_38;
- v48 = result + v43->field_28;
+ result = v43->pStartingPosActiveItem;
+ v48 = result + v43->pNumPresenceButton;
v49 = (2 * (87 - (174 - v72) / 2) - v72) / 2 - (174 - v72) / 2 / 2 + 138;
- v50 = -v43->field_28 < 0;
- v73 = v43->field_38;
+ v50 = -v43->pNumPresenceButton < 0;
+ v73 = v43->pStartingPosActiveItem;
if ( v50 ^ __OFSUB__(result, v48) )
{
i = 2;
@@ -12600,14 +12416,14 @@
v53->uW = v56;
v49 = v56;
v57 = v71;
- if ( pDialogueWindow->field_2C_focus_id != i )
+ if ( pDialogueWindow->pCurrentPosActiveItem != i )
v57 = white;
v65.DrawText2(pFontArrus, 0, v55, v57, *v51, 3u);
v43 = pDialogueWindow;
++i;
++v51;
++v73;
- result = pDialogueWindow->field_28 + pDialogueWindow->field_38;
+ result = pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem;
}
while ( v73 < result );
}
@@ -12779,11 +12595,11 @@
while ( (signed int)v77 < (signed int)&pShopOptions[3] );
v79 = pDialogueWindow;
_this = (Player *)((174 - v76) / 3);
- result = pDialogueWindow->field_38;
- v80 = result + pDialogueWindow->field_28;
+ result = pDialogueWindow->pStartingPosActiveItem;
+ v80 = result + pDialogueWindow->pNumPresenceButton;
v81 = (3 * (58 - (signed int)_this) - v76) / 2 - (174 - v76) / 3 / 2 + 138;
- v20 = -pDialogueWindow->field_28 < 0;
- v118 = pDialogueWindow->field_38;
+ v20 = -pDialogueWindow->pNumPresenceButton < 0;
+ v118 = pDialogueWindow->pStartingPosActiveItem;
if ( v20 ^ __OFSUB__(result, v80) )
{
v122 = 2;
@@ -12800,14 +12616,14 @@
v81 = v84 + v85 - 1;
v82->uW = v81;
v87 = color2;
- if ( pDialogueWindow->field_2C_focus_id != v86 )
+ if ( pDialogueWindow->pCurrentPosActiveItem != v86 )
v87 = white;
v112.DrawText2(pFontArrus, 0, v85, v87, *v119, 3u);
v79 = pDialogueWindow;
++v122;
++v119;
++v118;
- result = pDialogueWindow->field_28 + pDialogueWindow->field_38;
+ result = pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem;
}
while ( v118 < result );
}
@@ -12830,8 +12646,8 @@
v119 = (const char **)(v33 * (100 - _this->GetMerchant()) / 100);
if ( (signed int)v119 < v33 / 3 )
v119 = (const char **)(v33 / 3);
- v34 = v31->field_38;
- v35 = v34 + v31->field_28;
+ v34 = v31->pStartingPosActiveItem;
+ v35 = v34 + v31->pNumPresenceButton;
v122 = 0;
if ( (signed int)v34 >= v35 )
goto LABEL_140;
@@ -12846,7 +12662,7 @@
}
++v34;
}
- while ( (signed int)v34 < v31->field_28 + v31->field_38 );
+ while ( (signed int)v34 < v31->pNumPresenceButton + v31->pStartingPosActiveItem );
if ( !v122 )
{
LABEL_140:
@@ -12868,11 +12684,11 @@
v119 = (const char **)((149 - v118) / v122);
if ( (149 - v118) / v122 > 32 )
v119 = (const char **)32;
- result = v31->field_38;
+ result = v31->pStartingPosActiveItem;
v38 = (149 - v122 * (signed int)v119 - v118) / 2 - (signed int)v119 / 2 + 162;
v118 = result;
v114 = v38;
- if ( result < result + v31->field_28 )
+ if ( result < result + v31->pNumPresenceButton )
{
v122 = 2;
do
@@ -12899,13 +12715,13 @@
v40->uW = v46;
v114 = v46;
v47 = color2;
- if ( pDialogueWindow->field_2C_focus_id != v45 )
+ if ( pDialogueWindow->pCurrentPosActiveItem != v45 )
v47 = white;
v112.DrawText2(pFontArrus, 0, v44, v47, Str, 3u);
}
- v48 = v31->field_38;
+ v48 = v31->pStartingPosActiveItem;
++v118;
- result = v31->field_28 + v48;
+ result = v31->pNumPresenceButton + v48;
++v122;
}
while ( v118 < result );
@@ -12963,11 +12779,11 @@
while ( (signed int)v15 < (signed int)&unk_F8B1C8 );
v17 = pDialogueWindow;
v114 = (174 - v14) / 4;
- result = pDialogueWindow->field_38;
- v18 = result + pDialogueWindow->field_28;
+ result = pDialogueWindow->pStartingPosActiveItem;
+ v18 = result + pDialogueWindow->pNumPresenceButton;
v19 = (174 - 4 * (174 - v14) / 4 - v14) / 2 - (174 - v14) / 4 / 2 + 138;
- v20 = -pDialogueWindow->field_28 < 0;
- v122 = pDialogueWindow->field_38;
+ v20 = -pDialogueWindow->pNumPresenceButton < 0;
+ v122 = pDialogueWindow->pStartingPosActiveItem;
if ( v20 ^ __OFSUB__(result, v18) )
{
v119 = (const char **)2;
@@ -12984,14 +12800,14 @@
v19 = v24 + v23 - 1;
v21->uW = v19;
v26 = color2;
- if ( (const char **)pDialogueWindow->field_2C_focus_id != v25 )
+ if ( (const char **)pDialogueWindow->pCurrentPosActiveItem != v25 )
v26 = white;
v112.DrawText2(pFontArrus, 0, v24, v26, (const char *)LODWORD(_this->pConditions[0]), 3u);
v17 = pDialogueWindow;
v119 = (const char **)((char *)v119 + 1);
_this = (Player *)((char *)_this + 4);
++v122;
- result = pDialogueWindow->field_28 + pDialogueWindow->field_38;
+ result = pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem;
}
while ( v122 < result );
}
@@ -13445,7 +13261,7 @@
++pMessageQueue_50CBD0->uNumMessages;
}
if ( (uDialogue_SpeakingActorNPC_ID & 0x80000000u) == 0 )
- pDialogue_SpeakingActor->uAIState = 11;
+ pDialogue_SpeakingActor->uAIState = Removed;
if ( uActiveCharacter )
pPlayers[uActiveCharacter]->PlaySound(61, 0);
goto LABEL_87;
@@ -13705,11 +13521,11 @@
v63 = v2 * (100 - v1->GetMerchant()) / 100;
if ( v63 < v2 / 3 )
v63 = v2 / 3;
- strcpy(Dest, nullstring);
- strcpy(v46, nullstring);
- strcpy(v47, nullstring);
- strcpy(v48, nullstring);
- strcpy(v49, nullstring);
+ strcpy(Dest, "");
+ strcpy(v46, "");
+ strcpy(v47, "");
+ strcpy(v48, "");
+ strcpy(v49, "");
if ( dword_F8B19C != 1 )
{
if ( dword_F8B19C != 18 )
@@ -13844,7 +13660,7 @@
v38 = pFontArrus->CalcTextHeight(pNPCTopics[121].pText, &v52, 0, 0);
v52.DrawText2(pFontArrus, 0, (212 - v38) / 2 + 101, v37, v36, 3u);
result = (int)pDialogueWindow;
- pDialogueWindow->field_28 = 0;
+ pDialogueWindow->pNumPresenceButton = 0;
return result;
}
result = sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win();
@@ -13854,8 +13670,8 @@
v5 = 0;
v62 = 0;
Str = 0;
- v21 = pDialogueWindow->field_38;
- v22 = v21 + pDialogueWindow->field_28;
+ v21 = pDialogueWindow->pStartingPosActiveItem;
+ v22 = v21 + pDialogueWindow->pNumPresenceButton;
v61 = 0;
if ( v21 >= v22 )
goto LABEL_64;
@@ -13887,7 +13703,7 @@
}
++v21;
}
- while ( v21 < v20->field_28 + v20->field_38 );
+ while ( v21 < v20->pNumPresenceButton + v20->pStartingPosActiveItem );
if ( !v61 )
{
LABEL_64:
@@ -13911,11 +13727,11 @@
v63 = (signed int)(149 - v62) / v61;
if ( v63 > 32 )
v63 = 32;
- result = v20->field_38;
+ result = v20->pStartingPosActiveItem;
v26 = (signed int)(149 - v61 * v63 - v62) / 2 - v63 / 2 + 162;
v62 = result;
v55 = v26;
- if ( result < result + v20->field_28 )
+ if ( result < result + v20->pNumPresenceButton )
{
v61 = 2;
while ( 1 )
@@ -13946,7 +13762,7 @@
v28->uW = v33;
v55 = v33;
v34 = v57;
- if ( pDialogueWindow->field_2C_focus_id != v61 )
+ if ( pDialogueWindow->pCurrentPosActiveItem != v61 )
v34 = v56;
v52.DrawText2(pFontArrus, 0, v32, v34, Str, 3u);
goto LABEL_58;
@@ -13955,9 +13771,9 @@
v28->uHeight = 0;
v28->uY = 0;
LABEL_58:
- v35 = v20->field_38;
+ v35 = v20->pStartingPosActiveItem;
++v62;
- result = v20->field_28 + v35;
+ result = v20->pNumPresenceButton + v35;
++v61;
if ( (signed int)v62 >= result )
return result;
@@ -14074,8 +13890,8 @@
v64 = (signed int)(v65 * (100 - v6)) / 100;
if ( v64 < (signed int)v65 / 3 )
v64 = (signed int)v65 / 3;
- v7 = v4->field_38;
- v8 = v7 + v4->field_28;
+ v7 = v4->pStartingPosActiveItem;
+ v8 = v7 + v4->pNumPresenceButton;
v65 = 0;
v62 = v7;
if ( (signed int)v7 >= v8 )
@@ -14089,10 +13905,10 @@
v66 = (DDM_DLV_Header *)((char *)v66 + v10);
++v65;
}
- v11 = v4->field_38;
+ v11 = v4->pStartingPosActiveItem;
++v62;
}
- while ( (signed int)v62 < v4->field_28 + v11 );
+ while ( (signed int)v62 < v4->pNumPresenceButton + v11 );
if ( v65 )
{
sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[401], v64);
@@ -14102,9 +13918,9 @@
v64 = 32;
v65 = (signed int)(149 - v65 * v64 - (int)v66) / 2 - v64 / 2 + 162;
v12 = v61;
- result = v61->field_38;
- v13 = result + v61->field_28;
- v62 = v61->field_38;
+ result = v61->pStartingPosActiveItem;
+ v13 = result + v61->pNumPresenceButton;
+ v62 = v61->pStartingPosActiveItem;
if ( result < v13 )
{
v66 = (DDM_DLV_Header *)2;
@@ -14131,14 +13947,14 @@
v15->uW = v20;
v65 = v20;
v21 = WORD2(v59);
- if ( (DDM_DLV_Header *)pDialogueWindow->field_2C_focus_id != v66 )
+ if ( (DDM_DLV_Header *)pDialogueWindow->pCurrentPosActiveItem != v66 )
v21 = WORD2(v58);
v57.DrawText2(pFontArrus, 0, v19, v21, (const char *)HIDWORD(v60), 3u);
}
result = (int)v61;
++v62;
v66 = (DDM_DLV_Header *)((char *)v66 + 1);
- if ( (signed int)v62 >= v61->field_28 + v61->field_38 )
+ if ( (signed int)v62 >= v61->pNumPresenceButton + v61->pStartingPosActiveItem )
break;
v12 = v61;
}
@@ -14295,8 +14111,8 @@
return result;
}
v63 = 1;
- v41 = pDialogueWindow->GetControl(pDialogueWindow->field_38);
- strcpy(a1, nullstring);
+ v41 = pDialogueWindow->GetControl(pDialogueWindow->pStartingPosActiveItem);
+ strcpy(a1, "");
v41->uHeight = 0;
v41->uY = 0;
if ( v1->_4B6FF9() )
@@ -14310,7 +14126,7 @@
v43 = pDialogueWindow;
v44 = v63;
v66 = 0;
- if ( v63 < pDialogueWindow->field_28 )
+ if ( v63 < pDialogueWindow->pNumPresenceButton )
{
v61 = (GUIWindow *)&a1[100 * v63];
do
@@ -14321,16 +14137,16 @@
v61 = (GUIWindow *)((char *)v61 + 100);
++v44;
}
- while ( v44 < pDialogueWindow->field_28 );
- }
- v46 = v43->field_28 - v42;
+ while ( v44 < pDialogueWindow->pNumPresenceButton );
+ }
+ v46 = v43->pNumPresenceButton - v42;
v64 = (174 - (signed int)v66) / v46;
if ( v64 > 32 )
v64 = 32;
- result = v43->field_38;
+ result = v43->pStartingPosActiveItem;
v47 = (174 - v64 * v46 - (signed int)v66) / 2 - v64 / 2 + 138;
v65 = v42 + result;
- if ( v42 + result < result + v43->field_28 )
+ if ( v42 + result < result + v43->pNumPresenceButton )
{
v61 = (GUIWindow *)(v42 + 2);
v66 = (DDM_DLV_Header *)&a1[100 * v42];
@@ -14346,14 +14162,14 @@
v47 = v52 + v51 - 1;
v50->uW = v47;
v53 = WORD2(v59);
- if ( (GUIWindow *)pDialogueWindow->field_2C_focus_id != v61 )
+ if ( (GUIWindow *)pDialogueWindow->pCurrentPosActiveItem != v61 )
v53 = WORD2(v58);
v57.DrawText2(pFontArrus, 0, v52, v53, (const char *)v66, 3u);
v43 = pDialogueWindow;
v66 = (DDM_DLV_Header *)((char *)v66 + 100);
v61 = (GUIWindow *)((char *)v61 + 1);
++v65;
- result = pDialogueWindow->field_28 + pDialogueWindow->field_38;
+ result = pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem;
}
while ( (signed int)v65 < result );
}
@@ -14565,7 +14381,7 @@
v26 = pFontArrus->CalcTextHeight(pNPCTopics[171].pText, &v28, 0, 0);
v28.DrawText2(pFontArrus, 0, (212 - v26) / 2 + 101, v25, v24, 3u);
result = (int)pDialogueWindow;
- pDialogueWindow->field_28 = 0;
+ pDialogueWindow->pNumPresenceButton = 0;
return result;
}
result = sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win();
@@ -14575,9 +14391,9 @@
v33 = 0;
v34 = 0;
v29 = pDialogueWindow;
- v9 = pDialogueWindow->field_38;
- v10 = v9 + pDialogueWindow->field_28;
- v35 = pDialogueWindow->field_38;
+ v9 = pDialogueWindow->pStartingPosActiveItem;
+ v10 = v9 + pDialogueWindow->pNumPresenceButton;
+ v35 = pDialogueWindow->pStartingPosActiveItem;
if ( v9 >= v10 )
goto LABEL_40;
do
@@ -14589,10 +14405,10 @@
v33 += v12;
++v34;
}
- v13 = v8->field_38;
+ v13 = v8->pStartingPosActiveItem;
++v35;
}
- while ( v35 < v8->field_28 + v13 );
+ while ( v35 < v8->pNumPresenceButton + v13 );
if ( !v34 )
{
LABEL_40:
@@ -14608,10 +14424,10 @@
v32 = (149 - v33) / v34;
if ( (149 - v33) / v34 > 32 )
v32 = 32;
- result = v8->field_38;
+ result = v8->pStartingPosActiveItem;
v35 = result;
v34 = (149 - v34 * v32 - v33) / 2 - v32 / 2 + 162;
- if ( result < result + v8->field_28 )
+ if ( result < result + v8->pNumPresenceButton )
{
v33 = 2;
do
@@ -14632,7 +14448,7 @@
v14->uW = v20;
v34 = v20;
v21 = v31;
- if ( pDialogueWindow->field_2C_focus_id != v33 )
+ if ( pDialogueWindow->pCurrentPosActiveItem != v33 )
v21 = v30;
v28.DrawText2(pFontArrus, 0, v19, v21, v17, 3u);
goto LABEL_34;
@@ -14649,7 +14465,7 @@
v8 = v29;
++v35;
++v33;
- result = v29->field_28 + v29->field_38;
+ result = v29->pNumPresenceButton + v29->pStartingPosActiveItem;
}
while ( v35 < result );
}
@@ -14757,12 +14573,12 @@
v17 = LOBYTE(pFontArrus->uFontHeight) - 3;
v59 = pDialogueWindow;
v54 = v17;
- strcpy(&Dest, nullstring);
+ strcpy(&Dest, "");
sprintfex(pTmpBuf2, pGlobalTXT_LocalizationStrings[405], s1);
v18 = pFontArrus->CalcTextHeight(pTmpBuf2, &v53, 0, 0);
- v19 = v16->field_28;
+ v19 = v16->pNumPresenceButton;
v20 = v18 + v17 + 146;
- v21 = v16->field_38;
+ v21 = v16->pStartingPosActiveItem;
v63 = v20;
v55 = v20;
v60 = v21;
@@ -14786,7 +14602,7 @@
{
v58 = v61;
v27 = (const char *)v56;
- if ( pDialogueWindow->field_2C_focus_id != s1 )
+ if ( pDialogueWindow->pCurrentPosActiveItem != s1 )
v27 = *(const char **)v57;
v47[1] = v27;
sprintfex(a1, format_4E2DC8, v27);
@@ -14853,7 +14669,7 @@
++v62;
++s1;
a1 += 100;
- strcpy(v31, nullstring);
+ strcpy(v31, "");
if ( v24 )
{
v24->uW = 0;
@@ -14862,7 +14678,7 @@
}
}
++v60;
- if ( (signed int)v60 >= v59->field_28 + v59->field_38 )
+ if ( (signed int)v60 >= v59->pNumPresenceButton + v59->pStartingPosActiveItem )
break;
v16 = v59;
}
@@ -14934,9 +14750,9 @@
v7 = *((int *)v5 + 4);
pIndoorCamera->sRotationY = 0;
pParty->uFlags |= 2u;
- pParty->vPosition.z = v7;
- pParty->vPosition.y = *((int *)v5 + 5);
- pParty->uFallStartY = pParty->vPosition.y;
+ pParty->vPosition.y = v7;
+ pParty->vPosition.z = *((int *)v5 + 5);
+ pParty->uFallStartY = pParty->vPosition.z;
pParty->sRotationY = *((int *)v5 + 6);
}
HousePlaySomeSound((unsigned int)ptr_507BC0->ptr_1C, 2);
@@ -15170,7 +14986,7 @@
{
v4->uCurrentActionTime = 0;
v4->uCurrentActionLength = 0;
- v4->uAIState = 5;
+ v4->uAIState = Dead;
v4->UpdateAnimation();
}
v1 = v18;
@@ -15247,11 +15063,9 @@
//----- (0043FDED) --------------------------------------------------------
-unsigned int __cdecl PrepareActorRenderList_BLV()
+void PrepareActorRenderList_BLV()
{
RenderBillboard *v0; // esi@0
- unsigned int result; // eax@1
- char *v2; // edi@2
unsigned __int16 v3; // ax@3
unsigned int v4; // eax@5
unsigned __int16 v5; // cx@5
@@ -15260,13 +15074,12 @@
int v8; // eax@10
SpriteFrame *v9; // eax@16
SpriteFrame *v10; // ebx@18
- int *v11; // eax@18
+ //int *v11; // eax@18
int v12; // ecx@28
- Actor *v13; // ecx@35
- IndoorCameraD3D **v14; // eax@36
+ //IndoorCameraD3D **v14; // eax@36
double v15; // st7@36
float v16; // eax@36
- double v17; // ST30_8@36
+ //double v17; // ST30_8@36
signed __int64 v18; // qtt@36
int v19; // ST5C_4@36
signed __int64 v20; // qtt@37
@@ -15276,8 +15089,8 @@
signed int v24; // ecx@40
int v25; // edx@44
__int16 v26; // ax@44
- MonsterDesc *v27; // edx@44
- int v28; // ecx@44
+ //MonsterDesc *v27; // edx@44
+ //int v28; // ecx@44
unsigned __int8 v29; // zf@44
unsigned __int8 v30; // sf@44
unsigned int v31; // [sp-8h] [bp-5Ch]@15
@@ -15288,8 +15101,6 @@
__int16 a5; // [sp+2Ch] [bp-28h]@5
int a5a; // [sp+2Ch] [bp-28h]@36
int a5b; // [sp+2Ch] [bp-28h]@40
- unsigned int v39; // [sp+30h] [bp-24h]@1
- int v40; // [sp+34h] [bp-20h]@2
__int16 v41; // [sp+3Ch] [bp-18h]@18
int a6; // [sp+40h] [bp-14h]@34
int v43; // [sp+44h] [bp-10h]@34
@@ -15297,36 +15108,21 @@
signed int y; // [sp+4Ch] [bp-8h]@32
int x; // [sp+50h] [bp-4h]@32
- result = 0;
- v39 = 0;
- if ( (signed int)uNumActors > 0 )
- {
- v40 = 0;
- v2 = (char *)&pActors[0].uAttributes;
- while ( 1 )
- {
- v3 = *((_WORD *)v2 + 70);
- *(_DWORD *)v2 &= 0xFFFFFFF7u;
- if ( v3 != 11 )
- {
- if ( v3 != 19 )
- break;
- }
-LABEL_48:
- ++v39;
- v40 += 32;
- result = v39;
- v2 += 836;
- if ( (signed int)v39 >= (signed int)uNumActors )
- return result;
- }
- a5 = *((_WORD *)v2 + 61);
- a2 = *((_WORD *)v2 + 54);
- a1a = *((_WORD *)v2 + 53);
- a3 = *((_WORD *)v2 + 55);
+ for (uint i = 0; i < uNumActors; ++i)
+ {
+ auto p = pActors + i;
+
+ if (p->uAIState == Removed ||
+ p->uAIState == Disabled)
+ continue;
+
+ a5 = p->uSectorID;
+ a2 = p->vPosition.y;
+ a1a = p->vPosition.x;
+ a3 = p->vPosition.z;
v4 = stru_5C6E00->Atan2(a1a - pBLVRenderParams->vPartyPos.x, a2 - pBLVRenderParams->vPartyPos.y);
- LOWORD(v0) = *((_WORD *)v2 + 59);
- v5 = *((_WORD *)v2 + 71);
+ LOWORD(v0) = p->uYawAngle;
+ v5 = p->uCurrentActionAnimation;
v6 = ((signed int)((char *)v0 + ((signed int)stru_5C6E00->uIntegerPi >> 3) - v4 + stru_5C6E00->uIntegerPi) >> 8) & 7;
v32 = v6;
if ( pParty->bTurnBasedModeOn )
@@ -15343,34 +15139,34 @@
{
v7 = pBLVRenderParams->field_0_timer_;
LABEL_10:
- v8 = v40 + v7;
+ v8 = i * 32 + v7;
goto LABEL_12;
}
}
- v8 = *((_DWORD *)v2 + 37);
+ v8 = p->uCurrentActionTime;
LABEL_12:
- if ( *((_QWORD *)v2 + 32) > 0i64 || *((_QWORD *)v2 + 34) > 0i64 )
+ if (p->pActorBuffs[5].uExpireTime > 0i64 || p->pActorBuffs[6].uExpireTime > 0i64 )
v8 = 0;
- v31 = *(_WORD *)&v2[2 * (signed __int16)v5 + 152];
- if ( *((_WORD *)v2 + 70) == 16 )
+ v31 = p->pSpriteIDs[v5];
+ if (p->uAIState == Resurrected)
v9 = pSpriteFrameTable->GetFrameBy_x(v31, v8);
else
v9 = pSpriteFrameTable->GetFrame(v31, v8);
v41 = 0;
v10 = v9;
- v11 = (int *)v9->uFlags;
- if ( (unsigned __int8)v11 & 2 )
+ //v11 = (int *)v9->uFlags;
+ if (v9->uFlags & 2)
v41 = 2;
- if ( (unsigned int)v11 & 0x40000 )
+ if (v9->uFlags & 0x40000)
v41 |= 0x40u;
- if ( (unsigned int)v11 & 0x20000 )
+ if (v9->uFlags & 0x20000)
LOBYTE(v41) = v41 | 0x80;
v0 = (RenderBillboard *)(256 << v6);
- if ( (unsigned int)v0 & (unsigned int)v11 )
+ if ( (unsigned int)v0 & v9->uFlags)
v41 |= 4u;
if ( v10->uGlowRadius )
{
- LOBYTE(v11) = byte_4E94D3;
+ //LOBYTE(v11) = byte_4E94D3;
pMobileLightsStack->AddLight(
a1a,
a2,
@@ -15380,29 +15176,28 @@
0xFFu,
0xFFu,
0xFFu,
- v11);
+ byte_4E94D3);
}
v12 = 0;
- if ( pStru170->field_53730 <= 0 )
- goto LABEL_48;
- while ( pStru170->pSectorIDs_toDrawDecorationsFrom[v12] != *((_WORD *)v2 + 61) )
+ if ( pStru170->uNumVisibleNotEmptySectors <= 0 )
+ continue;
+ while (pStru170->pVisibleSectorIDs_toDrawDecorsActorsEtcFrom[v12] != p->uSectorID)
{
++v12;
- if ( v12 >= pStru170->field_53730 )
- goto LABEL_48;
+ if ( v12 >= pStru170->uNumVisibleNotEmptySectors )
+ goto _continue;
}
if ( !pGame->pIndoorCameraD3D->ApplyViewTransform_TrueIfStillVisible(a1a, a2, a3, &x, &y, &z, 1)
|| (v0 = (RenderBillboard *)abs(x), (signed int)v0 < abs(y)) )
- goto LABEL_48;
+ continue;
pGame->pIndoorCameraD3D->Project(x, y, z, &v43, &a6);
- result = uNumBillboardsToDraw;
+
v0 = &pBillboardRenderList[uNumBillboardsToDraw];
- if ( (signed int)uNumBillboardsToDraw >= 500 )
- return result;
+ if (uNumBillboardsToDraw >= 500)
+ break;
++uNumBillboardsToDraw;
++uNumSpritesDrawnThisFrame;
- v13 = (Actor *)(v2 - 36);
- *(_DWORD *)v2 |= 8u;
+ p->uAttributes |= 8u;
v29 = pRenderer->pRenderD3D == 0;
v0->uHwSpriteID = v10->pHwSpriteIDs[v32];
v0->uPalette = v10->uPaletteIndex;
@@ -15417,34 +15212,34 @@
}
else
{
- v14 = &pGame->pIndoorCameraD3D;
- v0->flt_8 = pGame->pIndoorCameraD3D->flt_D0;
- v15 = (*v14)->flt_D4;
- v16 = v0->flt_8;
- v0->flt_C = v15;
- v17 = v16 + 6.7553994e15;
+ //v14 = &pGame->pIndoorCameraD3D;
+ v0->fov_x = pGame->pIndoorCameraD3D->fov_x;
+ v15 = pGame->pIndoorCameraD3D->fov_y;
+ v16 = v0->fov_x;
+ v0->fov_y = v15;
+ //v17 = v16 + 6.7553994e15;
LODWORD(v18) = 0;
- HIDWORD(v18) = SLOWORD(v17);
+ HIDWORD(v18) = floorf(v16 + 0.5f);
v19 = v18 / x;
v0->field_0 = (unsigned __int64)(v10->scale * v18 / x) >> 16;
a5a = (unsigned __int64)(v10->scale * (signed __int64)v19) >> 16;
}
v0->field_4 = a5a;
- if ( (signed __int64)v13->pActorBuffs[3].uExpireTime <= 0 )
- {
- if ( (signed __int64)v13->pActorBuffs[10].uExpireTime > 0 )
- {
- a5b = (unsigned __int64)(pGame->pStru6Instance->_4A806F((Actor *)(v2 - 36)) * (signed __int64)v0->field_4) >> 16;
+ if ( (signed __int64)p->pActorBuffs[3].uExpireTime <= 0 )
+ {
+ if ( (signed __int64)p->pActorBuffs[10].uExpireTime > 0 )
+ {
+ a5b = (unsigned __int64)(pGame->pStru6Instance->_4A806F(p) * (signed __int64)v0->field_4) >> 16;
goto LABEL_43;
}
}
else
{
- v22 = v13->pActorBuffs[3].uPower;
+ v22 = p->pActorBuffs[3].uPower;
if ( v22 )
{
v23 = (unsigned __int64)(65536 / (unsigned __int16)v22 * (signed __int64)v0->field_0) >> 16;
- v24 = *((_WORD *)v2 + 116);
+ v24 = p->pActorBuffs[3].uPower;
v0->field_0 = v23;
a5b = (unsigned __int64)(65536 / v24 * (signed __int64)v0->field_4) >> 16;
LABEL_43:
@@ -15454,29 +15249,30 @@
}
LABEL_44:
HIWORD(v25) = HIWORD(x);
- v0->field_20 = a1a;
- v0->field_22 = a2;
- v0->field_24 = a3;
- v0->field_26 = v43;
- v0->field_28 = a6;
+ v0->some_x = a1a;
+ v0->some_y = a2;
+ v0->some_z = a3;
+ v0->uScreenSpaceX = v43;
+ v0->uScreenSpaceY = a6;
LOWORD(v25) = 0;
LOBYTE(v26) = v41;
- v0->sZValue = v25 + (8 * v39 | 3);
- v27 = pMonsterList->pMonsters;
- v28 = *((_WORD *)v2 + 30);
- v29 = *((_DWORD *)v2 + 65) == 0;
- v30 = *((_DWORD *)v2 + 65) < 0;
+ v0->sZValue = v25 + (8 * i | 3);
+ //v27 = pMonsterList->pMonsters;
+ //v28 = p->pMonsterInfo.uID;
+ v29 = HIDWORD(p->pActorBuffs[5].uExpireTime) == 0;
+ v30 = HIDWORD(p->pActorBuffs[5].uExpireTime) < 0;
v0->field_1E = v41;
v0->pSpriteFrame = v10;
- v0->field_2C_prolly_tint = *((_DWORD *)&v27[v28] - 36);
- if ( !v30 && (!(v30 | v29) || *((_DWORD *)v2 + 64)) )
+ v0->uTintColor = pMonsterList->pMonsters[p->pMonsterInfo.uID - 1].uTintColor;
+ if ( !v30 && (!(v30 | v29) || LODWORD(p->pActorBuffs[5].uExpireTime)) )
{
HIBYTE(v26) = HIBYTE(v41) | 1;
v0->field_1E = v26;
}
- goto LABEL_48;
- }
- return result;
+
+_continue:
+ ;
+ }
}
@@ -15796,7 +15592,7 @@
v25 = uHouseID;
GameUI_StatusBar_TimedString[0] = 0;
pStatusBarString[0] = 0;
- ShowStatusBarString(nullstring, 2u);
+ ShowStatusBarString("", 2u);
if ( pMessageQueue_50CBD0->uNumMessages )
pMessageQueue_50CBD0->uNumMessages = pMessageQueue_50CBD0->pMessages[0].field_8 != 0;
viewparams->bRedrawGameUI = 1;
diff -r c83d06692295 -r c0cf9393af64 mm7_5.cpp
--- a/mm7_5.cpp Mon Oct 22 09:20:49 2012 +0600
+++ b/mm7_5.cpp Mon Oct 29 09:28:08 2012 +0600
@@ -304,9 +304,12 @@
if ( pMessageQueue_50CBD0->uNumMessages )
{
v0 = 1;
- v1 = nullstring;
+ v1 = "";
while ( 2 )
{
+ if ( !pMessageQueue_50CBD0->uNumMessages )
+ break;
+
pMessageQueue_50CBD0->PopMessage(&uMessage, &uMessageParam, (int *)&v199);
switch ( uMessage )
{
@@ -330,7 +333,7 @@
case UIMSG_Quit|0x2:
case 0x87:
if ( bNoNPCHiring != 1
- && !uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions )
+ && !pCurrentScreen )
{
if ( pMessageQueue_50CBD0->uNumMessages )
pMessageQueue_50CBD0->uNumMessages = pMessageQueue_50CBD0->pMessages[0].field_8 != 0;
@@ -403,7 +406,7 @@
pGUIWindow_CurrentMenu->Release();
uGameState = 4;
LABEL_188:
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 0;
+ pCurrentScreen = 0;
viewparams->bRedrawGameUI = v0;
}
else
@@ -421,7 +424,7 @@
if ( pMessageQueue_50CBD0->uNumMessages )
pMessageQueue_50CBD0->uNumMessages = pMessageQueue_50CBD0->pMessages[0].field_8 != 0;
pGUIWindow_CurrentMenu->Release();
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 12;
+ pCurrentScreen = 12;
GameUI_DrawLoadMenu(v0);
goto _continue;
case UIMSG_Quit:
@@ -432,7 +435,7 @@
if ( pMessageQueue_50CBD0->uNumMessages )
pMessageQueue_50CBD0->uNumMessages = pMessageQueue_50CBD0->pMessages[0].field_8 != 0;
pGUIWindow_CurrentMenu->Release();
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 0;
+ pCurrentScreen = 0;
viewparams->bRedrawGameUI = v0;
if ( !uMessageParam )
pAudioPlayer->PlaySound((SoundID)(SOUND_EnteringAHouse|0x1), 0, 0, -1, 0, 0, 0, 0);
@@ -449,7 +452,7 @@
pIcons_LOD->_40F9C5();
pIcons_LOD->_4114F2();
pGUIWindow_CurrentMenu->Release();
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 2;
+ pCurrentScreen = 2;
v162 = 0;
v148 = 0;
v141 = (WindowType)8;
@@ -496,7 +499,7 @@
case UIMSG_A5:
if ( pGUIWindow_CurrentMenu->field_40 == v0 )
pKeyActionMap->_459ED1(0);
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions != 11
+ if ( pCurrentScreen != 11
|| uLoadGameUI_SelectedSlot != dword_6A0C9C + uMessageParam )
{
v10 = dword_6A0C9C + uMessageParam;
@@ -554,7 +557,7 @@
goto _release_tex_and_continue;
case UIMSG_StartNewGame|0x2:
pGUIWindow_CurrentMenu->Release();
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 11;
+ pCurrentScreen = 11;
GameUI_DrawSaveMenu();
goto _continue;
case UIMSG_Game_OpenOptionsDialog:
@@ -562,7 +565,7 @@
pMessageQueue_50CBD0->uNumMessages = pMessageQueue_50CBD0->pMessages[0].field_8 != 0;
pGUIWindow_CurrentMenu->Release();
viewparams->field_48 = v0;
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 2;
+ pCurrentScreen = 2;
uTextureID_507C60 = pIcons_LOD->LoadTexture("ControlBG", TEXTURE_16BIT_PALETTE);
uTextureID_507C6C = pIcons_LOD->LoadTexture("con_16x", TEXTURE_16BIT_PALETTE);
uTextureID_507C68 = pIcons_LOD->LoadTexture("con_32x", TEXTURE_16BIT_PALETTE);
@@ -779,32 +782,32 @@
pMessageQueue_50CBD0->uNumMessages = pMessageQueue_50CBD0->pMessages[0].field_8 != 0;
pGUIWindow_CurrentMenu->Release();
viewparams->field_48 = 1;
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 26;
+ pCurrentScreen = 26;
uTextureID_507BF4 = pIcons_LOD->LoadTexture("optkb", TEXTURE_16BIT_PALETTE);
uTextureID_507BF8 = pIcons_LOD->LoadTexture("optkb_h", TEXTURE_16BIT_PALETTE);
uTextureID_507BFC = pIcons_LOD->LoadTexture("resume1", TEXTURE_16BIT_PALETTE);
uTextureID_507C00 = pIcons_LOD->LoadTexture("optkb_1", TEXTURE_16BIT_PALETTE);
uTextureID_507C04 = pIcons_LOD->LoadTexture("optkb_2", TEXTURE_16BIT_PALETTE);
pGUIWindow_CurrentMenu = GUIWindow::Create(0, 0, 640, 480, WINDOW_KeyMappingOptions, 0, 0);
- pGUIWindow_CurrentMenu->CreateButton(0xF1u, 0x12Eu, 0xD6u, 0x28u, 1, 0, 0x71u, 0, 0, nullstring, 0);
- pGUIWindow_CurrentMenu->CreateButton(19u, 0x12Eu, 0x6Cu, 0x14u, 1, 0, 0x1A0u, 0, 0, nullstring, 0);
- pGUIWindow_CurrentMenu->CreateButton(127u, 0x12Eu, 0x6Cu, 0x14u, 1, 0, 0x1A1u, 0, 0, nullstring, 0);
- pGUIWindow_CurrentMenu->CreateButton(127u, 0x144u, 0x6Cu, 0x14u, 1, 0, 0x1A2u, 0, 0, nullstring, 0);
- pGUIWindow_CurrentMenu->CreateButton(19u, 0x144u, 0x6Cu, 0x14u, 1, 0, 0x7Fu, 0, 0, nullstring, 0);
- pGUIWindow_CurrentMenu->CreateButton(129u, 0x94u, 0x46u, 0x13u, 1, 0, 0x1A3u, 0, 0, nullstring, 0);
- pGUIWindow_CurrentMenu->CreateButton(129u, 0xA7u, 0x46u, 0x13u, 1, 0, 0x1A3u, 1u, 0, nullstring, 0);
- pGUIWindow_CurrentMenu->CreateButton(129u, 0xBAu, 0x46u, 0x13u, 1, 0, 0x1A3u, 2u, 0, nullstring, 0);
- pGUIWindow_CurrentMenu->CreateButton(129u, 0xCDu, 0x46u, 0x13u, 1, 0, 0x1A3u, 3u, 0, nullstring, 0);
- pGUIWindow_CurrentMenu->CreateButton(129u, 224u, 70u, 19u, 1, 0, 0x1A3u, 4u, 0, nullstring, 0);
- pGUIWindow_CurrentMenu->CreateButton(129u, 243u, 70u, 0x13u, 1, 0, 0x1A3u, 5u, 0, nullstring, 0);
- pGUIWindow_CurrentMenu->CreateButton(129u, 262u, 70u, 0x13u, 1, 0, 0x1A3u, 6u, 0, nullstring, 0);
- pGUIWindow_CurrentMenu->CreateButton(350u, 148u, 70u, 0x13u, 1, 0, 0x1A3u, 7u, 0, nullstring, 0);
- pGUIWindow_CurrentMenu->CreateButton(350u, 167u, 70u, 0x13u, 1, 0, 0x1A3u, 8u, 0, nullstring, 0);
- pGUIWindow_CurrentMenu->CreateButton(350u, 186u, 70u, 0x13u, 1, 0, 0x1A3u, 9u, 0, nullstring, 0);
- pGUIWindow_CurrentMenu->CreateButton(350u, 205u, 70u, 0x13u, 1, 0, 0x1A3u, 0xAu, 0, nullstring, 0);
- pGUIWindow_CurrentMenu->CreateButton(350u, 224u, 70u, 0x13u, 1, 0, 0x1A3u, 0xBu, 0, nullstring, 0);
- pGUIWindow_CurrentMenu->CreateButton(350u, 243u, 70u, 0x13u, 1, 0, 0x1A3u, 0xCu, 0, nullstring, 0);
- pGUIWindow_CurrentMenu->CreateButton(350u, 262u, 70u, 0x13u, 1, 0, 0x1A3u, 0xDu, 0, nullstring, 0);
+ pGUIWindow_CurrentMenu->CreateButton(0xF1u, 0x12Eu, 0xD6u, 0x28u, 1, 0, 0x71u, 0, 0, "", 0);
+ pGUIWindow_CurrentMenu->CreateButton(19u, 0x12Eu, 0x6Cu, 0x14u, 1, 0, 0x1A0u, 0, 0, "", 0);
+ pGUIWindow_CurrentMenu->CreateButton(127u, 0x12Eu, 0x6Cu, 0x14u, 1, 0, 0x1A1u, 0, 0, "", 0);
+ pGUIWindow_CurrentMenu->CreateButton(127u, 0x144u, 0x6Cu, 0x14u, 1, 0, 0x1A2u, 0, 0, "", 0);
+ pGUIWindow_CurrentMenu->CreateButton(19u, 0x144u, 0x6Cu, 0x14u, 1, 0, 0x7Fu, 0, 0, "", 0);
+ pGUIWindow_CurrentMenu->CreateButton(129u, 0x94u, 0x46u, 0x13u, 1, 0, 0x1A3u, 0, 0, "", 0);
+ pGUIWindow_CurrentMenu->CreateButton(129u, 0xA7u, 0x46u, 0x13u, 1, 0, 0x1A3u, 1u, 0, "", 0);
+ pGUIWindow_CurrentMenu->CreateButton(129u, 0xBAu, 0x46u, 0x13u, 1, 0, 0x1A3u, 2u, 0, "", 0);
+ pGUIWindow_CurrentMenu->CreateButton(129u, 0xCDu, 0x46u, 0x13u, 1, 0, 0x1A3u, 3u, 0, "", 0);
+ pGUIWindow_CurrentMenu->CreateButton(129u, 224u, 70u, 19u, 1, 0, 0x1A3u, 4u, 0, "", 0);
+ pGUIWindow_CurrentMenu->CreateButton(129u, 243u, 70u, 0x13u, 1, 0, 0x1A3u, 5u, 0, "", 0);
+ pGUIWindow_CurrentMenu->CreateButton(129u, 262u, 70u, 0x13u, 1, 0, 0x1A3u, 6u, 0, "", 0);
+ pGUIWindow_CurrentMenu->CreateButton(350u, 148u, 70u, 0x13u, 1, 0, 0x1A3u, 7u, 0, "", 0);
+ pGUIWindow_CurrentMenu->CreateButton(350u, 167u, 70u, 0x13u, 1, 0, 0x1A3u, 8u, 0, "", 0);
+ pGUIWindow_CurrentMenu->CreateButton(350u, 186u, 70u, 0x13u, 1, 0, 0x1A3u, 9u, 0, "", 0);
+ pGUIWindow_CurrentMenu->CreateButton(350u, 205u, 70u, 0x13u, 1, 0, 0x1A3u, 0xAu, 0, "", 0);
+ pGUIWindow_CurrentMenu->CreateButton(350u, 224u, 70u, 0x13u, 1, 0, 0x1A3u, 0xBu, 0, "", 0);
+ pGUIWindow_CurrentMenu->CreateButton(350u, 243u, 70u, 0x13u, 1, 0, 0x1A3u, 0xCu, 0, "", 0);
+ pGUIWindow_CurrentMenu->CreateButton(350u, 262u, 70u, 0x13u, 1, 0, 0x1A3u, 0xDu, 0, "", 0);
dword_506E68 = -1;
dword_506F08 = 1;
memset(word_506E6C, 0, 0x1Cu);
@@ -871,7 +874,7 @@
pMessageQueue_50CBD0->uNumMessages = pMessageQueue_50CBD0->pMessages[0].field_8 != 0;
pGUIWindow_CurrentMenu->Release();
viewparams->field_48 = v0;
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 28;
+ pCurrentScreen = 28;
uTextureID_507C10 = pIcons_LOD->LoadTexture("optvid", TEXTURE_16BIT_PALETTE);
uTextureID_507C14 = pIcons_LOD->LoadTexture("opvdH-bs", TEXTURE_16BIT_PALETTE);
uTextureID_507C18 = pIcons_LOD->LoadTexture("opvdH-cl", TEXTURE_16BIT_PALETTE);
@@ -1184,7 +1187,7 @@
case UIMSG_OpenQuestBook:
if ( pMessageQueue_50CBD0->uNumMessages )
pMessageQueue_50CBD0->uNumMessages = pMessageQueue_50CBD0->pMessages[0].field_8 != 0;
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions )
+ if ( pCurrentScreen )
pGUIWindow_CurrentMenu->Release();
pEventTimer->Pause();
pAudioPlayer->StopChannels(-1, -1);
@@ -1195,7 +1198,7 @@
case UIMSG_OpenAutonotes:
if ( pMessageQueue_50CBD0->uNumMessages )
pMessageQueue_50CBD0->uNumMessages = pMessageQueue_50CBD0->pMessages[0].field_8 != 0;
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions )
+ if ( pCurrentScreen )
pGUIWindow_CurrentMenu->Release();
pEventTimer->Pause();
pAudioPlayer->StopChannels(-1, -1);
@@ -1206,11 +1209,11 @@
case UIMSG_OpenMapBook:
if ( pMessageQueue_50CBD0->uNumMessages )
pMessageQueue_50CBD0->uNumMessages = pMessageQueue_50CBD0->pMessages[0].field_8 != 0;
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions )
+ if ( pCurrentScreen )
pGUIWindow_CurrentMenu->Release();
pEventTimer->Pause();
viewparams->sPartyPosX = pParty->vPosition.x;
- viewparams->sPartyPosZ = pParty->vPosition.z;
+ viewparams->sPartyPosZ = pParty->vPosition.y;
pAudioPlayer->StopChannels(-1, -1);
v26 = GUIWindow::Create(0, 0, 640u, 480u, WINDOW_Book, uMessage, 0);
v27 = 353;
@@ -1221,7 +1224,7 @@
case UIMSG_OpenCalendar:
if ( pMessageQueue_50CBD0->uNumMessages )
pMessageQueue_50CBD0->uNumMessages = pMessageQueue_50CBD0->pMessages[0].field_8 != 0;
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions )
+ if ( pCurrentScreen )
pGUIWindow_CurrentMenu->Release();
pEventTimer->Pause();
pAudioPlayer->StopChannels(-1, -1);
@@ -1237,7 +1240,7 @@
case UIMSG_OpenHistoryBook:
if ( pMessageQueue_50CBD0->uNumMessages )
pMessageQueue_50CBD0->uNumMessages = pMessageQueue_50CBD0->pMessages[0].field_8 != 0;
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions )
+ if ( pCurrentScreen )
pGUIWindow_CurrentMenu->Release();
pEventTimer->Pause();
pAudioPlayer->StopChannels(-1, -1);
@@ -1249,11 +1252,11 @@
back_to_game();
if ( pMessageQueue_50CBD0->uNumMessages )
pMessageQueue_50CBD0->uNumMessages = pMessageQueue_50CBD0->pMessages[0].field_8 != 0;
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions > 15 )
- {
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions >= 17
- && (uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions <= 18
- || uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 104) )
+ if ( pCurrentScreen > 15 )
+ {
+ if ( pCurrentScreen >= 17
+ && (pCurrentScreen <= 18
+ || pCurrentScreen == 104) )
{
LABEL_229:
if ( dword_50CDC8 )
@@ -1264,11 +1267,11 @@
}
else
{
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions >= 14
- || uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 4
- || uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 10 )
+ if ( pCurrentScreen >= 14
+ || pCurrentScreen == 4
+ || pCurrentScreen == 10 )
goto LABEL_229;
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 13
+ if ( pCurrentScreen == 13
&& !dword_50CDC8
&& !dword_5C35C8 )
{
@@ -1285,18 +1288,18 @@
pRenderer->ClearZBuffer(0, 479);
viewparams->bRedrawGameUI = v0;
viewparams->field_48 = v0;
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions )
- {
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions > 103 )
+ if ( pCurrentScreen )
+ {
+ if ( pCurrentScreen > 103 )
{
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 104 )
+ if ( pCurrentScreen == 104 )
goto LABEL_321;
}
else
{
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions < 100 )
+ if ( pCurrentScreen < 100 )
{
- switch ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions )
+ switch ( pCurrentScreen )
{
case 23:
pIcons_LOD->_4114F2();
@@ -1330,7 +1333,7 @@
//crt_deconstruct_ptr_6A0118();
goto LABEL_291;
case 15:
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 10;
+ pCurrentScreen = 10;
goto _continue;
case 10:
v29 = ptr_507BB8;
@@ -1340,7 +1343,7 @@
LABEL_249:
v29->Release();
pIcons_LOD->_4114F2();
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 0;
+ pCurrentScreen = 0;
viewparams->bRedrawGameUI = v0;
pEventTimer->Resume();
goto _continue;
@@ -1481,7 +1484,7 @@
goto LABEL_322;
case 14:
pGUIWindow_CurrentMenu->Release();
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 13;
+ pCurrentScreen = 13;
pIcons_LOD->_4114F2();
goto _continue;
case 13:
@@ -1527,10 +1530,10 @@
pParty->vPosition.x = -22528;
if ( pParty->vPosition.x > 22528 )
pParty->vPosition.x = 22528;
- if ( pParty->vPosition.z < -22528 )
- pParty->vPosition.z = -22528;
- if ( pParty->vPosition.z > 22528 )
- pParty->vPosition.z = 22528;
+ if ( pParty->vPosition.y < -22528 )
+ pParty->vPosition.y = -22528;
+ if ( pParty->vPosition.y > 22528 )
+ pParty->vPosition.y = 22528;
goto LABEL_317;
case 16:
pVideoPlayer->Unload();
@@ -1551,7 +1554,7 @@
LABEL_322:
if ( ptr_507BD4 )
{
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 7 )
+ if ( pCurrentScreen == 7 )
{
pMouse->SetCursorBitmap("MICON2");
}
@@ -1572,7 +1575,7 @@
ptr_507BC0 = 0;
pGUIWindow_CurrentMenu = 0;
pEventTimer->Resume();
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 0;
+ pCurrentScreen = 0;
viewparams->bRedrawGameUI = v0;
pIcons_LOD->_4355F7();
goto _continue;
@@ -1585,7 +1588,7 @@
pEventTimer->Pause();
pAudioPlayer->StopChannels(-1, -1);
++pIcons_LOD->uTexturePacksCount;
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = v0;
+ pCurrentScreen = v0;
if ( !pIcons_LOD->uNumPrevLoadedFiles )
pIcons_LOD->uNumPrevLoadedFiles = pIcons_LOD->uNumLoadedFiles;
pGUIWindow_CurrentMenu = GUIWindow::Create(0, 0, 640, 480, (enum WindowType)3, 0, 0);
@@ -1687,8 +1690,6 @@
}
sub_41426F();
_continue:
- if ( !pMessageQueue_50CBD0->uNumMessages )
- break;
continue;
case UIMSG_BC:
if ( uMessageParam )
@@ -1738,12 +1739,12 @@
}
if ( dword_591178_teleporty )
{
- pParty->vPosition.z = dword_591178_teleporty;
+ pParty->vPosition.y = dword_591178_teleporty;
_5B65AC_npcdata_fame_or_other = dword_591178_teleporty;
}
if ( dword_591174_teleportz )
{
- pParty->vPosition.y = dword_591174_teleportz;
+ pParty->vPosition.z = dword_591174_teleportz;
_5B65B0_npcdata_rep_or_other = dword_591174_teleportz;
pParty->uFallStartY = dword_591174_teleportz;
}
@@ -1799,7 +1800,7 @@
v195 = (NPCData *)GetTravelTime();
strcpy(pOutdoor->pLevelFilename, pCurrentMapName);
if ( bUnderwater != 1 && pParty->bFlying
- || pOutdoor->GetTravelDestination(pParty->vPosition.x, pParty->vPosition.z, &pOut, 20) != v0 )
+ || pOutdoor->GetTravelDestination(pParty->vPosition.x, pParty->vPosition.y, &pOut, 20) != v0 )
{
viewparams->bRedrawGameUI = v0;
LABEL_387:
@@ -1808,13 +1809,13 @@
pParty->vPosition.x = -22528;
if ( pParty->vPosition.x > 22528 )
pParty->vPosition.x = 22528;
- if ( pParty->vPosition.z < -22528 )
- pParty->vPosition.z = -22528;
- if ( pParty->vPosition.z > 22528 )
- pParty->vPosition.z = 22528;
+ if ( pParty->vPosition.y < -22528 )
+ pParty->vPosition.y = -22528;
+ if ( pParty->vPosition.y > 22528 )
+ pParty->vPosition.y = 22528;
LABEL_317:
sub_44603D();
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 0;
+ pCurrentScreen = 0;
}
else
{
@@ -1882,12 +1883,12 @@
OnMapLoad();
pOutdoor->SetFog();
TeleportToStartingPoint(uLevel_StartingPointType);
- pParty->vPosition.y = GetTerrainHeightsAroundParty2(pParty->vPosition.x, pParty->vPosition.z, (int *)&v213, 0);
- pParty->uFallStartY = pParty->vPosition.y;
+ pParty->vPosition.z = GetTerrainHeightsAroundParty2(pParty->vPosition.x, pParty->vPosition.y, (int *)&v213, 0);
+ pParty->uFallStartY = pParty->vPosition.z;
sub_461103();
pEventTimer->Resume();
viewparams->bRedrawGameUI = 1;
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 0;
+ pCurrentScreen = 0;
pGameLoadingUI_ProgressBar->Release();
}
goto LABEL_422;
@@ -1932,7 +1933,7 @@
if ( uCurrentlyLoadedLevelType != v0 )
{
v50 = &pOutdoor->pBModels[v44 >> 9].pFaces[v46 & 0x3F];
- if ( !(BYTE3(v50->uFaceAttributes) & 2) || !v50->sCogTriggeredID )
+ if ( !(v50->uAttributes & 0x02000000) || !v50->sCogTriggeredID )
goto _continue;
v44 = uNumSeconds;
goto LABEL_415;
@@ -2081,7 +2082,7 @@
v158 = (unsigned int)thise;
v146 = pGlobalTXT_LocalizationStrings[475];// "Set %s over %s"
_sprintex_draw_status_and_continue:
- sprintfex(pTmpBuf, v146, v158, v174);
+ sprintf(pTmpBuf, v146, v158, v174);
goto _set_status_string_pTmpBuf_and_continue;
case UIMSG_B5:
dword_50CDC8 = v0;
@@ -2133,9 +2134,9 @@
else
{
pParty->vPosition.x = v195->uFlags;
- pParty->vPosition.z = v195->fame;
- pParty->vPosition.y = v195->rep;
- pParty->uFallStartY = pParty->vPosition.y;
+ pParty->vPosition.y = v195->fame;
+ pParty->vPosition.z = v195->rep;
+ pParty->uFallStartY = pParty->vPosition.z;
pParty->sRotationY = LOWORD(v195->house);
pParty->sRotationX = HIWORD(v195->house);
}
@@ -2164,8 +2165,8 @@
v195->pName = (char *)v62;
v61->uPortraitID = HIDWORD(v62);
v61->uFlags = pParty->vPosition.x;
- v61->fame = pParty->vPosition.z;
- v61->rep = pParty->vPosition.y;
+ v61->fame = pParty->vPosition.y;
+ v61->rep = pParty->vPosition.z;
LOWORD(v61->house) = LOWORD(pParty->sRotationY);
HIWORD(v61->house) = LOWORD(pParty->sRotationX);
if ( (signed int)pGames_LOD->uNumSubIndices / 2 <= 0 )
@@ -2208,9 +2209,9 @@
if ( v64 == stru_4ECBB8[uMessageParam].uMapInfoID )
{
pParty->vPosition.x = stru_4ECBB8[v65].pos.x;
- pParty->vPosition.z = stru_4ECBB8[v65].pos.y;
- pParty->vPosition.y = stru_4ECBB8[v65].pos.z;
- pParty->uFallStartY = pParty->vPosition.y;
+ pParty->vPosition.y = stru_4ECBB8[v65].pos.y;
+ pParty->vPosition.z = stru_4ECBB8[v65].pos.z;
+ pParty->uFallStartY = pParty->vPosition.z;
pParty->sRotationY = stru_4ECBB8[v65].rot_y;
pParty->sRotationX = stru_4ECBB8[v65].rot_x;
}
@@ -2230,7 +2231,7 @@
_5B65B8_npcdata_hiword_house_or_other = v66;
UpdateActors();
}
- v67 = pGUIWindow_CurrentMenu->str_48;
+ v67 = pGUIWindow_CurrentMenu->Hint;
if ( v67 )
*((int *)v67 + 17) = v0;
else
@@ -2351,7 +2352,7 @@
if ( v70 <= 0 || v70 >= 77 )
{
LABEL_90:
- v1 = nullstring;
+ v1 = "";
LABEL_91:
v0 = 1;
goto _continue;
@@ -2397,8 +2398,8 @@
v77 = thisi;
LABEL_544:
pParty->vPosition.x = v74;
- pParty->vPosition.z = v77;
- pParty->vPosition.y = v76;
+ pParty->vPosition.y = v77;
+ pParty->vPosition.z = v76;
pParty->uFallStartY = v76;
goto LABEL_90;
}
@@ -2466,10 +2467,10 @@
goto LABEL_416;
case 0x1C:
if ( !uActiveCharacter
- || uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions )
+ || pCurrentScreen )
goto LABEL_90;
ptr_507BC8 = GUIWindow::Create(0, 0, 640, 480, (enum WindowType)104, uMessageParam, 0);
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 25;
+ pCurrentScreen = 25;
pEventTimer->Pause();
goto _continue;
case 0x1B:
@@ -2544,7 +2545,7 @@
case 0x68:
if ( pMessageQueue_50CBD0->uNumMessages )
pMessageQueue_50CBD0->uNumMessages = pMessageQueue_50CBD0->pMessages[0].field_8 != 0;
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions )
+ if ( pCurrentScreen )
goto _continue;
if ( sub_42F4DA() )
goto LABEL_594;
@@ -2670,10 +2671,10 @@
case 0x4E:
if ( dword_50654C && byte_506550 )
{
- v173 = pSpellStats->pInfos[dword_50654C + 11 * pPlayers[uActiveCharacter]->field_1A4E].pName;
+ v173 = pSpellStats->pInfos[dword_50654C + 11 * pPlayers[uActiveCharacter]->pNumSpellBookPage].pName;
v157 = pGlobalTXT_LocalizationStrings[483];
_sprintex_2args_draw_status_and_continue:
- sprintfex(pTmpBuf, v157, v173);
+ sprintf(pTmpBuf, v157, v173);
}
else
{
@@ -2726,7 +2727,7 @@
v127 = 203;
goto _play_sound_and_continue;
}
- v99 = dword_50654C + 11 * pPlayers[uActiveCharacter]->field_1A4E;
+ v99 = dword_50654C + 11 * pPlayers[uActiveCharacter]->pNumSpellBookPage;
pPlayers[uActiveCharacter]->uQuickSpell = v99;
stru_A750F8[uActiveCharacter + 3]._494836(v99, uActiveCharacter);
if ( uActiveCharacter )
@@ -2745,7 +2746,7 @@
{
if ( *(short *)thisl )
{
- if ( v100->field_1A4E == v101 )
+ if ( v100->pNumSpellBookPage == v101 )
uAction = (int)v195;
v102 = (int)v195;
v195 = (NPCData *)((char *)v195 + 1);
@@ -2770,13 +2771,13 @@
uAction = 0;
}
sub_41140B();
- pPlayers[uActiveCharacter]->field_1A4E = LOBYTE(v217[uAction]);
+ pPlayers[uActiveCharacter]->pNumSpellBookPage = LOBYTE(v217[uAction]);
goto LABEL_661;
case UIMSG_SaveGame|0x4:
- if ( pTurnEngine->field_4 == 3 || !uActiveCharacter || uMessageParam == pPlayers[uActiveCharacter]->field_1A4E )
+ if ( pTurnEngine->field_4 == 3 || !uActiveCharacter || uMessageParam == pPlayers[uActiveCharacter]->pNumSpellBookPage )
goto _continue;
sub_41140B();
- pPlayers[uActiveCharacter]->field_1A4E = uMessageParam;
+ pPlayers[uActiveCharacter]->pNumSpellBookPage = uMessageParam;
LABEL_661:
pGUIWindow_CurrentMenu->_411621();
LABEL_662:
@@ -2802,7 +2803,7 @@
pGUIWindow_CurrentMenu->Release();
pEventTimer->Resume();
viewparams->bRedrawGameUI = v0;
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 0;
+ pCurrentScreen = 0;
pIcons_LOD->_4114F2();
v103 = dword_50654C + 11 * *(char *)(uNumSeconds + 6734);
if ( dword_50C9E8 < 40 )
@@ -2869,17 +2870,17 @@
pMessageQueue_50CBD0->uNumMessages = pMessageQueue_50CBD0->pMessages[0].field_8 != 0;
if ( uActiveCharacter && !pPlayers[uActiveCharacter]->uTimeToRecovery )
{
- if ( !uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions )
+ if ( !pCurrentScreen )
goto LABEL_693;
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions != 5
- && uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions != 7
- && (uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions <= 99
- || uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions > 103) )
+ if ( pCurrentScreen != 5
+ && pCurrentScreen != 7
+ && (pCurrentScreen <= 99
+ || pCurrentScreen > 103) )
{
pGUIWindow_CurrentMenu->Release();
LABEL_693:
GUIWindow::Create(0x1DCu, 0x1C2u, 0, 0, (enum WindowType)90, (int)ptr_5079F8, 0);
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 8;
+ pCurrentScreen = 8;
pEventTimer->Pause();
pGUIWindow_CurrentMenu = GUIWindow::Create(0, 0, 640, 480, (enum WindowType)18, 0, 0);
pAudioPlayer->PlaySound((SoundID)48, 0, 0, -1, 0, 0, 0, 0);
@@ -2892,7 +2893,7 @@
case 0x6A:
if ( pMessageQueue_50CBD0->uNumMessages )
pMessageQueue_50CBD0->uNumMessages = pMessageQueue_50CBD0->pMessages[0].field_8 != 0;
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions )
+ if ( pCurrentScreen )
pGUIWindow_CurrentMenu->Release();
++pIcons_LOD->uTexturePacksCount;
if ( !pIcons_LOD->uNumPrevLoadedFiles )
@@ -2901,7 +2902,7 @@
viewparams->bRedrawGameUI = v0;
pEventTimer->Pause();
pAudioPlayer->StopChannels(-1, -1);
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 104;
+ pCurrentScreen = 104;
pGUIWindow_CurrentMenu = GUIWindow::Create(0, 0, 640, 480, (enum WindowType)12, 5, 0);
papredoll_dbrds[2] = pIcons_LOD->LoadTexture("BUTTEXI1", TEXTURE_16BIT_PALETTE);
ptr_5076F4 = pGUIWindow_CurrentMenu->CreateButton(
@@ -2920,11 +2921,11 @@
v179);
goto _continue;
case 0x6B:
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions )
+ if ( pCurrentScreen )
{
pGUIWindow_CurrentMenu->Release();
pEventTimer->Resume();
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 0;
+ pCurrentScreen = 0;
viewparams->bRedrawGameUI = v0;
}
stru_506E40.Release();
@@ -3154,7 +3155,7 @@
}
if ( pParty->uCurrentHour < 0xC || (uNumSeconds = v0, pParty->uCurrentHour >= 0x18) )
uNumSeconds = 0;
- sprintfex(
+ sprintf(
pTmpBuf,
"%d:%02d%s %s %d %s %d",
v195,
@@ -3171,7 +3172,7 @@
goto _sprintex_2args_draw_status_and_continue;
case UIMSG_ShowStatus_Player:
v106 = pPlayers[uMessageParam];
- sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[429], v106->pName, pClassNames[v106->uClass]);// "%s the %s"
+ sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[429], v106->pName, pClassNames[v106->uClass]);// "%s the %s"
strcat(pTmpBuf, ": ");
v107 = v106->GetMajorConditionIdx();
strcat(pTmpBuf, aCharacterConditionNames[v107]);
@@ -3187,10 +3188,10 @@
v112 = v110->sMana;
v113 = pGlobalTXT_LocalizationStrings[108];// "Hit Points"
v114 = v110->GetMaxHealth();
- sprintfex(pTmpBuf, "%d / %d %s %d / %d %s", v110->sHealth, v114, v113, v112, v111, v109);
+ sprintf(pTmpBuf, "%d / %d %s %d / %d %s", v110->sHealth, v114, v113, v112, v111, v109);
goto _set_status_string_pTmpBuf_and_continue;
case 0xC:
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 15 )
+ if ( pCurrentScreen == 15 )
goto LABEL_762;
sub_420E01();
goto _continue;
@@ -3260,7 +3261,7 @@
OnPressSpace();
goto _continue;
case UIMSG_ChangeSoundVolume|0x100:
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions )
+ if ( pCurrentScreen )
goto _continue;
pParty->uFlags |= 2u;
GUIWindow::Create(0x207u, 0x88u, 0, 0, (enum WindowType)90, (int)dword_507A14, 0);
@@ -3283,7 +3284,7 @@
viewparams->field_28 = 11;
goto LABEL_788;
case UIMSG_ChangeMusicVolume|0x100:
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions )
+ if ( pCurrentScreen )
goto _continue;
pParty->uFlags |= 2u;
GUIWindow::Create(0x23Eu, 0x88u, 0, 0, (enum WindowType)90, (int)dword_507A18, 0);
@@ -3363,7 +3364,7 @@
dword_50CDCC = 0;
if ( ptr_507BC4 )
free_book_subwindow();
- if ( !uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions
+ if ( !pCurrentScreen
&& !ptr_507BD4 )
pEventTimer->Resume();
viewparams->bRedrawGameUI = 1;
@@ -3400,7 +3401,7 @@
unsigned int v26; // ecx@127
unsigned int v27; // eax@129
unsigned __int8 v28; // of@129
- SoundID v29; // [sp-2Ch] [bp-3Ch]@36
+ SoundID pSoundID; // [sp-2Ch] [bp-3Ch]@36
signed int v30; // [sp-28h] [bp-38h]@36
unsigned int v31; // [sp-24h] [bp-34h]@36
signed int v32; // [sp-20h] [bp-30h]@36
@@ -3415,18 +3416,20 @@
signed int v41; // [sp-10h] [bp-20h]@29
int v42; // [sp-10h] [bp-20h]@36
int v43; // [sp-10h] [bp-20h]@56
- unsigned __int8 uClass[4]; // [sp+4h] [bp-Ch]@3
- UIMessageType v45; // [sp+8h] [bp-8h]@3
+ int uNum; // [sp+4h] [bp-Ch]@3
+ UIMessageType pUIMessageType; // [sp+8h] [bp-8h]@3
int v46; // [sp+Ch] [bp-4h]@3
+ Player *pPlayer;
if ( pMessageQueue_50CBD0->uNumMessages )
{
//v0 = pAudioPlayer;
v1 = (char *)pParty->pPlayers;
+ pPlayer = pParty->pPlayers;
do
{
- pMessageQueue_50CBD0->PopMessage(&v45, (int *)uClass, &v46);
- switch (v45)
+ pMessageQueue_50CBD0->PopMessage(&pUIMessageType, &uNum, &v46);
+ switch (pUIMessageType)
{
case UIMSG_MainMenu_ShowPartyCreationWnd:
{
@@ -3467,19 +3470,18 @@
}
- switch (v45)
+ switch (pUIMessageType)
{
case UIMSG_A5: // WINDOW_5A
{
//main menu save/load wnd clicking on savegame lines
if (pGUIWindow_CurrentMenu->field_40 == 1)
pKeyActionMap->_459ED1(0);
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions != 11
- || uLoadGameUI_SelectedSlot != *(int *)uClass + dword_6A0C9C )
+ if ( pCurrentScreen != 11 || uLoadGameUI_SelectedSlot != uNum + dword_6A0C9C )
{
//load clicked line
- v26 = *(int *)uClass + dword_6A0C9C;
- if ( dword_6BE138 == *(int *)uClass + dword_6A0C9C )
+ v26 = uNum + dword_6A0C9C;
+ if ( dword_6BE138 == uNum + dword_6A0C9C )
{
pMessageQueue_50CBD0->SendMessage(UIMSG_A4, 0, 0);
pMessageQueue_50CBD0->SendMessage(UIMSG_LoadGame, 0, 0);
@@ -3502,18 +3504,17 @@
case UIMSG_A4:
{
- GUIWindow::Create(pGUIWindow_CurrentMenu->uFrameX + 241,
- pGUIWindow_CurrentMenu->uFrameY + 302,
+ GUIWindow::Create(pGUIWindow_CurrentMenu->uFrameX + 241, pGUIWindow_CurrentMenu->uFrameY + 302,
61, 28, WINDOW_5E, (int)ptr_69BD64, 0);
}
continue;
}
- if ( (signed int)v45 > 75 )
- {
- if ( v45 > UIMSG_A3 )
- {
- if ( v45 == UIMSG_A6 )
+ if ( (signed int)pUIMessageType > UIMSG_PlayerCreationRemoveDownSkill )
+ {
+ if ( pUIMessageType > UIMSG_A3 )
+ {
+ if ( pUIMessageType == UIMSG_A6 )
{
v43 = 0;
v39 = (int)ptr_69BD60;
@@ -3525,106 +3526,73 @@
GUIWindow::Create(v18, v8, v33, v35, v37, v39, v43);
continue;
}
- if ( v45 == UIMSG_AB )
- {
- v23 = (char *)&pParty->pPlayers[*(int *)uClass];
- v24 = (int)(v23 + 186);
- v12 = (char)(v23[186] - 1) < 0;
- --*(char *)v24;
+ if ( pUIMessageType == UIMSG_SelectFacePlayerBack )
+ {
+ pPlayer = &pParty->pPlayers[uNum];
+ v12 = (char)((int)pPlayer->uFace - 1) < 0;
+ --pPlayer->uFace;
if ( v12 )
- *(char *)v24 = 19;
- *((int *)v23 + 1608) = *(char *)v24;
- ((Player *)v23)->SetInitialStats();
- ((Player *)v23)->SetSexByVoice();
- ((Player *)v23)->RandomizeName();
- v25 = *(int *)uClass;
- pGUIWindow_CurrentMenu->field_2C_focus_id = (pGUIWindow_CurrentMenu->field_2C_focus_id
- - pGUIWindow_CurrentMenu->field_38)
- % 7
- + pGUIWindow_CurrentMenu->field_38
- + 7 * *(int *)uClass;
+ pPlayer->uFace = 19;
+ pPlayer->uVoiceID = pPlayer->uFace;
+ pPlayer->SetInitialStats();
+ pPlayer->SetSexByVoice();
+ pPlayer->RandomizeName();
+ v25 = uNum;
+ pGUIWindow_CurrentMenu->pCurrentPosActiveItem = (pGUIWindow_CurrentMenu->pCurrentPosActiveItem - pGUIWindow_CurrentMenu->pStartingPosActiveItem)
+ % 7 + pGUIWindow_CurrentMenu->pStartingPosActiveItem + 7 * uNum;
uPlayerCreationUI_SelectedCharacter = v25;
- GUIWindow::Create(
- pCreationUI_BtnPressLeft[v25]->uX,
- pCreationUI_BtnPressLeft[v25]->uY,
- 0,
- 0,
- (enum WindowType)92,
- (int)pCreationUI_BtnPressLeft[v25],
- 1);
+ GUIWindow::Create(pCreationUI_BtnPressLeft[v25]->uX, pCreationUI_BtnPressLeft[v25]->uY, 0, 0,
+ (enum WindowType)92, (int)pCreationUI_BtnPressLeft[v25], 1);
//v0 = pAudioPlayer;
pAudioPlayer->PlaySound((SoundID)66, 0, 0, -1, 0, 0, 0.0, 0);
- v22 = (Player *)v23;
- goto LABEL_117;
- }
- if ( v45 == UIMSG_AC )
- {
- v19 = (int)&v1[6972 * *(int *)uClass];
- v20 = (char)(*(char *)(v19 + 186) + 1) % 20;
- *(char *)(v19 + 186) = v20;
- *(int *)(v19 + 6432) = v20;
- ((Player *)v19)->SetInitialStats();
- ((Player *)v19)->SetSexByVoice();
- ((Player *)v19)->RandomizeName();
- v21 = *(int *)uClass;
- pGUIWindow_CurrentMenu->field_2C_focus_id = (pGUIWindow_CurrentMenu->field_2C_focus_id
- - pGUIWindow_CurrentMenu->field_38)
- % 7
- + pGUIWindow_CurrentMenu->field_38
- + 7 * *(int *)uClass;
- uPlayerCreationUI_SelectedCharacter = v21;
- GUIWindow::Create(
- pCreationUI_BtnPressRight[v21]->uX,
- pCreationUI_BtnPressRight[v21]->uY,
- 0,
- 0,
- (enum WindowType)92,
- (int)pCreationUI_BtnPressRight[v21],
- 1);
- //v0 = pAudioPlayer;
- pAudioPlayer->PlaySound((SoundID)66, 0, 0, -1, 0, 0, 0, 0);
- v22 = (Player *)v19;
-LABEL_117:
+ v22 = pPlayer;
v22->PlaySound(102, 0);
v1 = (char *)pParty->pPlayers;
continue;
}
- if ( v45 == UIMSG_AD )
- {
- GUIWindow::Create(
- pMainMenu_BtnNew->uX,
- pMainMenu_BtnNew->uY,
- 0,
- 0,
- (enum WindowType)90,
- (int)pMainMenu_BtnNew,
- 0);
+ if ( pUIMessageType == UIMSG_SelectFacePlayerForward )
+ {
+ pPlayer = &pParty->pPlayers[uNum];
+ v20 = (char)((int)pPlayer->uFace + 1) % 20;
+ pPlayer->uFace = v20;
+ pPlayer->uVoiceID = v20;
+ pPlayer->SetInitialStats();
+ pPlayer->SetSexByVoice();
+ pPlayer->RandomizeName();
+ v21 = uNum;
+ pGUIWindow_CurrentMenu->pCurrentPosActiveItem = (pGUIWindow_CurrentMenu->pCurrentPosActiveItem - pGUIWindow_CurrentMenu->pStartingPosActiveItem)
+ % 7 + pGUIWindow_CurrentMenu->pStartingPosActiveItem + 7 * uNum;
+ uPlayerCreationUI_SelectedCharacter = v21;
+ GUIWindow::Create(pCreationUI_BtnPressRight[v21]->uX, pCreationUI_BtnPressRight[v21]->uY, 0, 0, (enum WindowType)92,
+ (int)pCreationUI_BtnPressRight[v21], 1);
+ //v0 = pAudioPlayer;
+ pAudioPlayer->PlaySound((SoundID)66, 0, 0, -1, 0, 0, 0, 0);
+ v22 = pPlayer;
+ v22->PlaySound(102, 0);
+ v1 = (char *)pParty->pPlayers;
+ continue;
+ }
+ if ( pUIMessageType == UIMSG_AD )
+ {
+ GUIWindow::Create(pMainMenu_BtnNew->uX, pMainMenu_BtnNew->uY, 0, 0, (enum WindowType)90, (int)pMainMenu_BtnNew, 0);
SetCurrentMenuID(MENU_LOAD);
continue;
}
- if ( v45 != 174 )
+ if ( pUIMessageType != UIMSG_AE )
continue;
- GUIWindow::Create(
- pMainMenu_BtnExit->uX,
- pMainMenu_BtnExit->uY,
- 0,
- 0,
- (enum WindowType)90,
- (int)pMainMenu_BtnExit,
- 0);
+ GUIWindow::Create(pMainMenu_BtnExit->uX, pMainMenu_BtnExit->uY, 0, 0, (enum WindowType)90, (int)pMainMenu_BtnExit, 0);
LABEL_114:
v40 = 10;
LABEL_89:
v2 = v40;
-LABEL_90:
SetCurrentMenuID((MENU_STATE)v2);
continue;
}
- if ( v45 == UIMSG_A3 )
+ if ( pUIMessageType == UIMSG_A3 )
{
++dword_6A0C9C;
- if ( dword_6A0C9C >= *(int *)uClass )
- dword_6A0C9C = *(int *)uClass - 1;
+ if ( dword_6A0C9C >= uNum )
+ dword_6A0C9C = uNum - 1;
if ( dword_6A0C9C < 1 )
dword_6A0C9C = 0;
v7 = pGUIWindow_CurrentMenu;
@@ -3633,22 +3601,22 @@
v8 = pGUIWindow_CurrentMenu->uFrameY + 323;
goto LABEL_105;
}
- if ( v45 == 107 )
- {
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions )
+ if ( pUIMessageType == UIMSG_6B )
+ {
+ if ( pCurrentScreen )
{
pGUIWindow_CurrentMenu->Release();
pEventTimer->Resume();
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 0;
+ pCurrentScreen = 0;
viewparams->bRedrawGameUI = 1;
}
- GUIWindow::Create(0x25Au, 0x1C2u, 0, 0, (enum WindowType)92, (int)ptr_5079F0, 0);
+ GUIWindow::Create(602, 450, 0, 0, (enum WindowType)92, (int)ptr_5079F0, 0);
if ( (signed int)pMessageQueue_50CBD0->uNumMessages >= 40 )
continue;
- pMessageQueue_50CBD0->pMessages[pMessageQueue_50CBD0->uNumMessages].eType = (UIMessageType)113;
+ pMessageQueue_50CBD0->pMessages[pMessageQueue_50CBD0->uNumMessages].eType = UIMSG_CloseBook;
goto LABEL_93;
}
- if ( v45 == UIMSG_CloseBook )
+ if ( pUIMessageType == UIMSG_CloseBook )
{
if ( ptr_507BDC )
{
@@ -3663,7 +3631,7 @@
viewparams->field_48 = 1;
if ( !GetCurrentMenuID() || GetCurrentMenuID() == 6 || GetCurrentMenuID() == 7 )
{
- v17 = uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions;
+ v17 = pCurrentScreen;
LABEL_83:
if ( v17 == 16 )
pVideoPlayer->FastForwardToFrame(pVideoPlayer->field_40);
@@ -3689,16 +3657,15 @@
continue;
}
v16 = GetCurrentMenuID() == 8;
- v17 = uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions;
- if ( v16
- && !uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions )
+ v17 = pCurrentScreen;
+ if ( v16 && !pCurrentScreen )
goto LABEL_83;
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 12 )
+ if ( pCurrentScreen == 12 )
{
pIcons_LOD->_4114F2();
//crt_deconstruct_ptr_6A0118();
- stru_506F20.Release();
- stru_506F20.Load("title.pcx", 0);
+ pTexture_PCX.Release();
+ pTexture_PCX.Load("title.pcx", 0);
SetCurrentMenuID(MENU_MAIN);
v15 = 1;
LABEL_81:
@@ -3706,32 +3673,28 @@
pGUIWindow2->Release();
pGUIWindow2 = 0;
pEventTimer->Resume();
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 0;
+ pCurrentScreen = 0;
viewparams->bRedrawGameUI = v15;
continue;
}
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 16 )
+ if ( pCurrentScreen == 16 )
{
pVideoPlayer->Unload();
}
else
{
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions != 27 )
+ if ( pCurrentScreen != 27 )
goto LABEL_81;
//VideoPlayer::dtor();
}
}
else
{
- if ( v45 == 118 )
- {
- v14 = *(int *)uClass;
- pGUIWindow_CurrentMenu->field_2C_focus_id = (pGUIWindow_CurrentMenu->field_2C_focus_id
- - pGUIWindow_CurrentMenu->field_38)
- % 7
- + pGUIWindow_CurrentMenu->field_38
- + 7 * *(int *)uClass;
- uPlayerCreationUI_SelectedCharacter = v14;
+ if ( pUIMessageType == UIMSG_PlayerCreationSelectQuality )
+ {
+ pGUIWindow_CurrentMenu->pCurrentPosActiveItem = (pGUIWindow_CurrentMenu->pCurrentPosActiveItem - pGUIWindow_CurrentMenu->pStartingPosActiveItem)
+ % 7 + pGUIWindow_CurrentMenu->pStartingPosActiveItem + 7 * uNum;
+ uPlayerCreationUI_SelectedCharacter = uNum;
LABEL_36:
v42 = 0;
v38 = 0;
@@ -3740,14 +3703,14 @@
v32 = -1;
v31 = 0;
v30 = 0;
- v29 = (SoundID)66;
+ pSoundID = (SoundID)66;
LABEL_40:
- pAudioPlayer->PlaySound(v29, v30, v31, v32, v34, v36, v38, v42);
+ pAudioPlayer->PlaySound(pSoundID, v30, v31, v32, v34, v36, v38, v42);
continue;
}
- if ( v45 == 144 )
- {
- v9 = (Player *)&v1[6972 * *(int *)uClass];
+ if ( pUIMessageType == UIMSG_PlayerCreationVoiceBack )
+ {
+ v9 = &pPlayer[uNum];
v46 = v9->GetSexByVoice();
do
{
@@ -3757,12 +3720,12 @@
v13 = v9->GetSexByVoice();
}
while ( v13 != v46 );
- v11 = pCreationUI_BtnPressLeft2[*(int *)uClass];
+ v11 = pCreationUI_BtnPressLeft2[uNum];
goto LABEL_60;
}
- if ( v45 == 145 )
- {
- v9 = (Player *)&v1[6972 * *(int *)uClass];
+ if ( pUIMessageType == UIMSG_PlayerCreationVoiceForward )
+ {
+ v9 = &pPlayer[uNum];
v46 = v9->GetSexByVoice();
do
{
@@ -3770,14 +3733,14 @@
v10 = v9->GetSexByVoice();
}
while ( v10 != v46 );
- v11 = pCreationUI_BtnPressRight2[*(int *)uClass];
+ v11 = pCreationUI_BtnPressRight2[uNum];
LABEL_60:
GUIWindow::Create(v11->uX, v11->uY, 0, 0, (enum WindowType)92, (int)v11, 1);
pAudioPlayer->PlaySound((SoundID)66, 0, 0, -1, 0, 0, 0, 0);
v9->PlaySound(102, 0);
continue;
}
- if ( v45 == UIMSG_A2 )
+ if ( pUIMessageType == UIMSG_A2 )
{
--dword_6A0C9C;
if ( dword_6A0C9C < 0 )
@@ -3787,34 +3750,29 @@
v39 = (int)ptr_69BD5C;
v8 = pGUIWindow_CurrentMenu->uFrameY + 197;
LABEL_105:
- v37 = (WindowType)90;
- v35 = 0;
- v33 = 0;
- v18 = v7->uFrameX + 215;
- GUIWindow::Create(v18, v8, v33, v35, v37, v39, v43);
+ GUIWindow::Create(v7->uFrameX + 215, v8, 0, 0, (WindowType)90, v39, v43);
continue;
}
}
}
else
{
- if ( v45 == 75 )
- {
- uPlayerCreationUI_SelectedCharacter = *(int *)uClass;
+ if ( pUIMessageType == UIMSG_PlayerCreationRemoveDownSkill )
+ {
+ uPlayerCreationUI_SelectedCharacter = uNum;
v41 = 3;
v1 = (char *)pParty->pPlayers;
- v5 = (pGUIWindow_CurrentMenu->field_2C_focus_id - pGUIWindow_CurrentMenu->field_38) % 7
- + pGUIWindow_CurrentMenu->field_38
- + 7 * *(int *)uClass;
+ v5 = (pGUIWindow_CurrentMenu->pCurrentPosActiveItem - pGUIWindow_CurrentMenu->pStartingPosActiveItem) % 7
+ + pGUIWindow_CurrentMenu->pStartingPosActiveItem + 7 * uNum;
goto LABEL_44;
}
- if ( (signed int)v45 > 60 )
- {
- if ( v45 == 62 )
- {
- GUIWindow::Create(0x265u, 0x189u, 0, 0, (enum WindowType)90, (int)pPlayerCreationUI_BtnPlus, 1);
- ((Player *)&v1[6972 * uPlayerCreationUI_SelectedCharacter])->IncreaseAttribute(
- (pGUIWindow_CurrentMenu->field_2C_focus_id - pGUIWindow_CurrentMenu->field_38) % 7);
+ if ( (signed int)pUIMessageType > UIMSG_3C )
+ {
+ if ( pUIMessageType == UIMSG_PlayerCreationClickPlus )
+ {
+ GUIWindow::Create(613, 393, 0, 0, (enum WindowType)90, (int)pPlayerCreationUI_BtnPlus, 1);
+ (&pPlayer[uPlayerCreationUI_SelectedCharacter])->IncreaseAttribute(
+ (pGUIWindow_CurrentMenu->pCurrentPosActiveItem - pGUIWindow_CurrentMenu->pStartingPosActiveItem) % 7);
v42 = 0;
v38 = 0;
v36 = 0;
@@ -3822,14 +3780,14 @@
v32 = -1;
v31 = 0;
v30 = 0;
- v29 = (SoundID)20;
+ pSoundID = (SoundID)20;
goto LABEL_40;
}
- if ( v45 == 63 )
- {
- GUIWindow::Create(0x20Bu, 0x189u, 0, 0, (enum WindowType)90, (int)pPlayerCreationUI_BtnMinus, 1);
- ((Player *)&v1[6972 * uPlayerCreationUI_SelectedCharacter])->DecreaseAttribute(
- (pGUIWindow_CurrentMenu->field_2C_focus_id - pGUIWindow_CurrentMenu->field_38) % 7);
+ if ( pUIMessageType == UIMSG_PlayerCreationClickMinus )
+ {
+ GUIWindow::Create(523, 393, 0, 0, (enum WindowType)90, (int)pPlayerCreationUI_BtnMinus, 1);
+ (&pPlayer[uPlayerCreationUI_SelectedCharacter])->DecreaseAttribute(
+ (pGUIWindow_CurrentMenu->pCurrentPosActiveItem - pGUIWindow_CurrentMenu->pStartingPosActiveItem) % 7);
v42 = 0;
v38 = 0;
v36 = 0;
@@ -3837,14 +3795,13 @@
v32 = -1;
v31 = 0;
v30 = 0;
- v29 = (SoundID)23;
+ pSoundID = (SoundID)23;
goto LABEL_40;
}
- if ( v45 == 64 )
- {
- auto _t = (Player *)&v1[6972 * uPlayerCreationUI_SelectedCharacter];
- v6 = _t->GetSkillIdxByOrder(
- *(int *)uClass + 4);
+ if ( pUIMessageType == UIMSG_PlayerCreationSelectActiveSkill )
+ {
+ auto _t = &pPlayer[uPlayerCreationUI_SelectedCharacter];
+ v6 = _t->GetSkillIdxByOrder(uNum + 4);
if ( _t->GetSkillIdxByOrder(3) == 37 )
pParty->pPlayers[0].pActiveSkills[v6 + 3486 * uPlayerCreationUI_SelectedCharacter] = 1;
v42 = 0;
@@ -3854,40 +3811,40 @@
v32 = -1;
v31 = 0;
v30 = 0;
- v29 = (SoundID)24;
+ pSoundID = (SoundID)24;
goto LABEL_40;
}
- if ( v45 == 65 )
- {
- ((Player *)&v1[6972 * uPlayerCreationUI_SelectedCharacter])->Reset(uClass[0]);
+ if ( pUIMessageType == UIMSG_PlayerCreationSelectClass )
+ {
+ (&pPlayer[uPlayerCreationUI_SelectedCharacter])->Reset(uNum);
goto LABEL_36;
}
- if ( v45 == 66 )
- {
- GUIWindow::Create(0x244u, 0x1AFu, 0, 0, (enum WindowType)90, (int)pPlayerCreationUI_BtnOK, 0);
+ if ( pUIMessageType == UIMSG_PlayerCreationClickOK )
+ {
+ GUIWindow::Create(580, 431, 0, 0, (enum WindowType)90, (int)pPlayerCreationUI_BtnOK, 0);
if ( PlayerCreation_ComputeAttributeBonus() || !sub_4908DE() )
GameUI_StatusBar_TimedStringTimeLeft = GetTickCount() + 4000;
else
uGameState = 6;
continue;
}
- if ( v45 == 67 )
- {
- GUIWindow::Create(0x20Fu, 0x1AFu, 0, 0, (enum WindowType)90, (int)pPlayerCreationUI_BtnReset, 0);
+ if ( pUIMessageType == UIMSG_PlayerCreationClickReset )
+ {
+ GUIWindow::Create(527, 431, 0, 0, (enum WindowType)90, (int)pPlayerCreationUI_BtnReset, 0);
pParty->Reset();
}
else
{
- if ( v45 == 74 )
- {
- uPlayerCreationUI_SelectedCharacter = *(int *)uClass;
- v4 = pGUIWindow_CurrentMenu->field_2C_focus_id - pGUIWindow_CurrentMenu->field_38;
- v46 = pGUIWindow_CurrentMenu->field_38;
+ if ( pUIMessageType == UIMSG_PlayerCreationRemoveUpSkill )
+ {
+ uPlayerCreationUI_SelectedCharacter = uNum;
+ v4 = pGUIWindow_CurrentMenu->pCurrentPosActiveItem - pGUIWindow_CurrentMenu->pStartingPosActiveItem;
+ v46 = pGUIWindow_CurrentMenu->pStartingPosActiveItem;
v41 = 2;
- v5 = v4 % 7 + v46 + 7 * *(int *)uClass;
+ v5 = v4 % 7 + v46 + 7 * uNum;
LABEL_44:
- pGUIWindow_CurrentMenu->field_2C_focus_id = v5;
- pParty->pPlayers[0].pActiveSkills[((Player *)&v1[6972 * uPlayerCreationUI_SelectedCharacter])->GetSkillIdxByOrder(v41)
+ pGUIWindow_CurrentMenu->pCurrentPosActiveItem = v5;
+ pParty->pPlayers[0].pActiveSkills[(&pPlayer[uPlayerCreationUI_SelectedCharacter])->GetSkillIdxByOrder(v41)
+ 3486 * uPlayerCreationUI_SelectedCharacter] = 0;
continue;
}
@@ -3895,12 +3852,12 @@
}
else
{
- switch ( v45 )
+ switch ( pUIMessageType )
{
case 60:
pAudioPlayer->PlaySound((SoundID)24, 0, 0, -1, 0, 0, 0, 0);
- v3 = *(void **)uClass;
- uPlayerCreationUI_SelectedCharacter = *(int *)uClass;
+ v3 = (void *)uNum;
+ uPlayerCreationUI_SelectedCharacter = uNum;
pKeyActionMap->_459E5A(0, 15, pGUIWindow_CurrentMenu);
pGUIWindow_CurrentMenu->ptr_1C = v3;
break;
@@ -3911,7 +3868,7 @@
pMouse->SetCursorBitmap("MICON2");
break;
default:
- if ( v45 == 58 )
+ if ( pUIMessageType == 58 )
goto LABEL_114;
break;
}
@@ -3947,17 +3904,13 @@
}
//----- (0043648F) --------------------------------------------------------
-void __thiscall Vec3_short__to_RenderVertexSoft(RenderVertexSoft *_this, Vec3_short_ *a2)
-{
- signed int v2; // edx@1
- double v3; // st7@1
-
+void Vec3_short__to_RenderVertexSoft(RenderVertexSoft *_this, Vec3_short_ *a2)
+{
_this->flt_2C = 0.0;
- v2 = a2->y;
- v3 = (double)a2->z;
- _this->vWorldPosition.x = (double)a2->x;
- _this->vWorldPosition.y = (double)v2;
- _this->vWorldPosition.z = v3;
+
+ _this->vWorldPosition.x = a2->x;
+ _this->vWorldPosition.y = a2->y;
+ _this->vWorldPosition.z = a2->z;
}
//----- (004369DB) --------------------------------------------------------
@@ -4713,18 +4666,18 @@
if ( v8 == 1 )
{
v9 = *(short *)v1;
- v10 = pParty->vPosition.z - *((short *)v1 - 100);
+ v10 = pParty->vPosition.y - *((short *)v1 - 100);
a1 = pParty->vPosition.x - *((short *)v1 - 200);
v48 = v10;
if ( a1 * a1
+ v10 * v10
- + ((signed int)(pParty->vPosition.y + pParty->uPartyHeight) >> (1 - v9))
- * ((signed int)(pParty->vPosition.y + pParty->uPartyHeight) >> (1 - v9)) < (unsigned int)((*((short *)v1 + 100) + 32) * (*((short *)v1 + 100) + 32)) )
+ + ((signed int)(pParty->vPosition.z + pParty->uPartyHeight) >> (1 - v9))
+ * ((signed int)(pParty->vPosition.z + pParty->uPartyHeight) >> (1 - v9)) < (unsigned int)((*((short *)v1 + 100) + 32) * (*((short *)v1 + 100) + 32)) )
{
v11.z = *(short *)v1;
v11.y = *((short *)v1 - 100);
v11.x = *((short *)v1 - 200);
- if ( sub_407A1C(pParty->vPosition.x, pParty->vPosition.z, pParty->vPosition.y + pParty->sEyelevel, v11) )
+ if ( sub_407A1C(pParty->vPosition.x, pParty->vPosition.y, pParty->vPosition.z + pParty->sEyelevel, v11) )
{
v12 = stru_50C198.which_player_would_attack(&pActors[v39]);
DamagePlayerFromMonster(*((short *)v1 - 300), stru_50FE08.field_450[v43], pVelocity, v12);
@@ -4772,16 +4725,16 @@
}
else
{
- v23 = pParty->vPosition.z - *((short *)v1 - 100);
+ v23 = pParty->vPosition.y - *((short *)v1 - 100);
v24 = ((signed int)pParty->uPartyHeight >> 1) - *(short *)v1;
a1 = pParty->vPosition.x - *((short *)v1 - 200);
v48 = v23;
- if ( a1 * a1 + v23 * v23 + (pParty->vPosition.y + v24) * (pParty->vPosition.y + v24) < (unsigned int)((*((short *)v1 + 100) + 32) * (*((short *)v1 + 100) + 32)) )
+ if ( a1 * a1 + v23 * v23 + (pParty->vPosition.z + v24) * (pParty->vPosition.z + v24) < (unsigned int)((*((short *)v1 + 100) + 32) * (*((short *)v1 + 100) + 32)) )
{
v25.z = *(short *)v1;
v25.y = *((short *)v1 - 100);
v25.x = *((short *)v1 - 200);
- if ( sub_407A1C(pParty->vPosition.x, pParty->vPosition.z, pParty->vPosition.y + pParty->sEyelevel, v25) )
+ if ( sub_407A1C(pParty->vPosition.x, pParty->vPosition.y, pParty->vPosition.z + pParty->sEyelevel, v25) )
{
v26 = 0;
v27 = (char *)&pParty->pPlayers[0].pConditions[15];
@@ -5011,9 +4964,9 @@
v9 = (LayingItem *)uDamageAmount;
v50 = pParty->vPosition.x - *(int *)(uDamageAmount + 4);
v55 = abs(v50);
- pMonsterName = (char *)(pParty->vPosition.z - v9->vPosition.y);
+ pMonsterName = (char *)(pParty->vPosition.y - v9->vPosition.y);
v51 = (unsigned __int64 *)abs((int)pMonsterName);
- pPlayerName = (char *)(pParty->vPosition.y - v9->vPosition.z);
+ pPlayerName = (char *)(pParty->vPosition.z - v9->vPosition.z);
v52 = abs((int)pPlayerName);
v61 = v55;
v10 = v55;
@@ -6398,7 +6351,7 @@
v15->field_C = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE);
_43C91D_FormItemTextureFilename(pContainer, 544, v14, 0);
v15->field_10 = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE);
- if ( sub_43ED6F_get_some_race_sex_relation(1u) )
+ if ( _43ED6F_check_party_races(true) )
papredoll_dbrds[11] = pIcons_LOD->LoadTexture("item092v3", TEXTURE_16BIT_PALETTE);
v35 += 28;
++v14;
@@ -6555,9 +6508,11 @@
int v8; // [sp-4h] [bp-10h]@61
signed int v9; // [sp-4h] [bp-10h]@69
+ result = 0; //BUG fn is void
if ( a2 <= 500 )
{
- v5 = *((char *)&pBloodsplatContainer->std__vector_pBloodsplats[62].field_20 + a2 + 2) == 0;
+ //v5 = *((char *)&pBloodsplatContainer->std__vector_pBloodsplats[62].field_20 + a2 + 2) == 0;
+ v5 = byte_5111C0[(a2 - 100) + 32 + 2] == 0;
LABEL_21:
if ( v5 )
return result;
@@ -8691,37 +8646,26 @@
//----- (0043ED6F) --------------------------------------------------------
-bool __thiscall sub_43ED6F_get_some_race_sex_relation(unsigned int a1)
-{
- unsigned int v1; // ebp@1
- Player **v2; // ebx@1
- Player *v3; // esi@2
- enum CHARACTER_RACE v4; // edi@2
- bool result; // eax@2
- char v6; // zf@5
-
- v1 = a1;
- v2 = &pPlayers[1];
- while ( 1 )
- {
- v3 = *v2;
- v4 = v3->GetRace();
- result = v3->GetSexByVoice();
- if ( v4 && v4 != CHARACTER_RACE_ELF && v4 != CHARACTER_RACE_GOBLIN )
- v6 = v1 == 1;
+bool _43ED6F_check_party_races(bool a1)
+{
+ bool v6; // zf@5
+
+ for (uint i = 0; i < 4; ++i)
+ {
+ auto player = pParty->pPlayers + i;
+ auto race = player->GetRace();
+
+ if (race != CHARACTER_RACE_HUMAN &&
+ race != CHARACTER_RACE_ELF &&
+ race != CHARACTER_RACE_GOBLIN)
+ v6 = a1 == 1;
else
- v6 = v1 == 0;
- if ( v6 )
- break;
- ++v2;
- if ( (signed int)v2 >= (signed int)&qword_A750D8 )
- {
- LOBYTE(result) = 0;
- return result;
- }
- }
- LOBYTE(result) = 1;
- return result;
+ v6 = !a1;
+
+ if (v6)
+ return true;
+ }
+ return false;
}
// A750D8: using guessed type __int64 qword_A750D8;
@@ -8957,120 +8901,79 @@
//----- (0043F333) --------------------------------------------------------
-int stru170::RenderWalls()
-{
- signed int result; // eax@1
- unsigned __int8 v2; // zf@1
- unsigned __int8 v3; // sf@1
- stru170_stru0 *v4; // edx@2
- int v5; // eax@3
+void stru170::MakeVisibleSectorList()
+{
int v6; // ebx@3
- char *v7; // esi@4
- signed int v8; // [sp+0h] [bp-4h]@1
-
- result = 0;
- v2 = this->std__vector_000FA8 == 0;
- v3 = (this->std__vector_000FA8 & 0x80000000u) != 0;
- this->field_53730 = 0;
- v8 = 0;
- if ( !(v3 | v2) )
- {
- v4 = this->field_FA8;
- do
- {
- v5 = this->field_53730;
+
+ uNumVisibleNotEmptySectors = 0;
+ for (uint i = 0; i < std__vector_000FA8; ++i)
+ {
v6 = 0;
- if ( v5 <= 0 )
+ if (!uNumVisibleNotEmptySectors)
{
LABEL_7:
- this->pSectorIDs_toDrawDecorationsFrom[v5] = v4->uSectorID;
- ++this->field_53730;
+ pVisibleSectorIDs_toDrawDecorsActorsEtcFrom[uNumVisibleNotEmptySectors++] = field_FA8[i].uSectorID;
}
else
{
- v7 = (char *)this->pSectorIDs_toDrawDecorationsFrom;
- while ( *(short *)v7 != v4->uSectorID )
+ while (pVisibleSectorIDs_toDrawDecorsActorsEtcFrom[v6] != field_FA8[i].uSectorID )
{
++v6;
- v7 += 2;
- if ( v6 >= v5 )
- goto LABEL_7;
- }
- }
- ++v8;
- ++v4;
- result = v8;
- }
- while ( v8 < (signed int)this->std__vector_000FA8 );
- }
- return result;
+ if ( v6 >= uNumVisibleNotEmptySectors)
+ {
+ pVisibleSectorIDs_toDrawDecorsActorsEtcFrom[uNumVisibleNotEmptySectors++] = field_FA8[i].uSectorID;
+ continue;
+ }
+ }
+ }
+ }
}
//----- (0043F515) --------------------------------------------------------
-void __cdecl MessWithBillboards_BLV()
-{
- signed int v0; // edi@1
- char *v1; // esi@2
-
- v0 = 0;
- if ( (signed int)uNumBillboardsToDraw > 0 )
- {
- v1 = (char *)&pBillboardRenderList[0].field_2A;
- do
- {
- if ( *(v1 - 12) & 2 || uCurrentlyLoadedLevelType == LEVEL_Indoor && !*((short *)v1 - 7) )
- *(short *)v1 = 0;
- else
- *(short *)v1 = sub_43F55F((RenderBillboard *)(v1 - 42), -1);
- ++v0;
- v1 += 52;
- }
- while ( v0 < (signed int)uNumBillboardsToDraw );
+void MessWithBillboards_BLV()
+{
+ for (uint i = 0; i < uNumBillboardsToDraw; ++i)
+ {
+ auto p = pBillboardRenderList + i;
+
+ if (p->field_1E & 2 || uCurrentlyLoadedLevelType == LEVEL_Indoor && !p->uIndoorSectorID)
+ p->uPaletteSubindex = 0;
+ else
+ p->uPaletteSubindex = _43F55F_get_billboard_light_level(p, -1);
}
}
//----- (0043F55F) --------------------------------------------------------
-signed int __fastcall sub_43F55F(RenderBillboard *a1, signed int a2)
-{
- RenderBillboard *v2; // eax@1
+int __fastcall _43F55F_get_billboard_light_level(RenderBillboard *a1, int uBaseLightLevel)
+{
signed int v3; // ecx@2
- float v4; // ST08_4@6
- float v5; // ST04_4@6
- float v6; // ST00_4@6
-
- v2 = a1;
+
if ( uCurrentlyLoadedLevelType == LEVEL_Indoor )
{
v3 = pIndoor->pSectors[a1->uIndoorSectorID].uMinAmbientLightLevel;
}
else
{
- if ( a2 == -1 )
- v3 = a1->field_2A;
+ if ( uBaseLightLevel == -1 )
+ v3 = a1->uPaletteSubindex;
else
- v3 = a2;
- }
- v4 = (double)v2->field_24;
- v5 = (double)v2->field_22;
- v6 = (double)v2->field_20;
- return sub_43F5C8(v3, v2->uIndoorSectorID, v6, v5, v4);
+ v3 = uBaseLightLevel;
+ }
+ return _43F5C8_get_point_light_level_with_respect_to_lights(v3, a1->uIndoorSectorID, a1->some_x, a1->some_y, a1->some_z);
}
//----- (0043F5C8) --------------------------------------------------------
-signed int __fastcall sub_43F5C8(signed int a1, int a2, float a3, float a4, float a5)
+int __fastcall _43F5C8_get_point_light_level_with_respect_to_lights(unsigned int uBaseLightLevel, int uSectorID, float x, float y, float z)
{
int v5; // esi@1
signed int v6; // edi@1
- char *v7; // ebx@2
int v8; // eax@6
int v9; // ebx@6
unsigned int v10; // ecx@6
unsigned int v11; // edx@9
unsigned int v12; // edx@11
signed int v13; // ecx@12
- BLVSector *v14; // esi@17
- int v15; // ecx@17
BLVLightMM7 *v16; // esi@20
int v17; // ebx@21
int v18; // eax@24
@@ -9080,7 +8983,6 @@
unsigned int v22; // edx@27
unsigned int v23; // edx@29
signed int v24; // ecx@30
- char *v25; // esi@34
int v26; // ebx@35
int v27; // eax@38
int v28; // ebx@38
@@ -9089,53 +8991,41 @@
unsigned int v31; // edx@41
unsigned int v32; // edx@43
signed int v33; // ecx@44
- int v35; // [sp+Ch] [bp-18h]@4
- BLVSector *v36; // [sp+Ch] [bp-18h]@17
int v37; // [sp+Ch] [bp-18h]@37
int v38; // [sp+10h] [bp-14h]@5
int v39; // [sp+10h] [bp-14h]@23
int v40; // [sp+10h] [bp-14h]@36
- int v41; // [sp+14h] [bp-10h]@3
int v42; // [sp+14h] [bp-10h]@22
unsigned int v43; // [sp+18h] [bp-Ch]@12
unsigned int v44; // [sp+18h] [bp-Ch]@30
unsigned int v45; // [sp+18h] [bp-Ch]@44
- char *v46; // [sp+1Ch] [bp-8h]@2
- int v47; // [sp+1Ch] [bp-8h]@17
- int v48; // [sp+20h] [bp-4h]@1
- int v49; // [sp+20h] [bp-4h]@17
- int v50; // [sp+20h] [bp-4h]@33
-
- v48 = 0;
- v5 = a2;
- v6 = a1;
- if ( uNumMobileLightsApplied > 0 )
- {
- v7 = (char *)&pMobileLights[0].uRadius;
- v46 = (char *)&pMobileLights[0].uRadius;
- do
- {
- v41 = abs((signed __int64)((double)*((short *)v7 - 3) - a3));
- if ( v41 <= *(short *)v7 )
- {
- v35 = abs((signed __int64)((double)*((short *)v7 - 2) - a4));
- if ( v35 <= *(short *)v7 )
- {
- v38 = abs((signed __int64)((double)*((short *)v7 - 1) - a5));
- if ( v38 <= *(short *)v7 )
- {
- v8 = v41;
- v9 = v35;
- v10 = v38;
- if ( v41 < v35 )
- {
- v8 = v35;
- v9 = v41;
- }
- if ( v8 < v38 )
+
+ v6 = uBaseLightLevel;
+ for (uint i = 0; i < pMobileLightsStack->uNumLightsActive; ++i)
+ {
+ auto p = pMobileLightsStack->pLights + i;
+
+ auto distX = abs(p->vPosition.x - x);
+ if ( distX <= p->uRadius)
+ {
+ auto distY = abs(p->vPosition.y - y);
+ if ( distY <= p->uRadius)
+ {
+ auto distZ = abs(p->vPosition.z - z);
+ if ( distZ <= p->uRadius)
+ {
+ v8 = distX;
+ v9 = distY;
+ v10 = distZ;
+ if (distX < distY)
+ {
+ v8 = distY;
+ v9 = distX;
+ }
+ if ( v8 < distZ )
{
v11 = v8;
- v8 = v38;
+ v8 = distZ;
v10 = v11;
}
if ( v9 < (signed int)v10 )
@@ -9144,41 +9034,31 @@
v10 = v9;
v9 = v12;
}
- v43 = ((unsigned int)(11 * v9) >> 5) + (v10 >> 2) + v8;
- v13 = *(short *)v46;
+ v43 = ((unsigned int)(11 * v9) / 32) + (v10 / 4) + v8;
+ v13 = p->uRadius;
if ( (signed int)v43 < v13 )
- v6 = v6 + ((unsigned __int64)(30i64 * (signed int)(v43 << 16) / v13) >> 16) - 30;
- v7 = v46;
- }
- }
- }
- ++v48;
- v7 += 18;
- v46 = v7;
- }
- while ( v48 < uNumMobileLightsApplied );
- }
+ v6 += ((unsigned __int64)(30i64 * (signed int)(v43 << 16) / v13) >> 16) - 30;
+ }
+ }
+ }
+ }
+
if ( uCurrentlyLoadedLevelType == LEVEL_Indoor)
{
- v14 = &pIndoor->pSectors[v5];
- v15 = 0;
- v49 = 0;
- v36 = v14;
- v47 = v14->uNumLights;
- if ( v14->uNumLights > 0 )
- {
- while ( 1 )
- {
- v16 = &pIndoor->pLights[*(&v14->pLights->vPosition.x + v15)];
- if ( !(v16->uAtributes & 8) )
- {
- v17 = abs((signed __int64)((double)v16->vPosition.x - a3));
+ auto pSector = pIndoor->pSectors + uSectorID;
+
+ for (uint i = 0; i < pSector->uNumLights; ++i)
+ {
+ v16 = pIndoor->pLights + pSector->pLights[i];
+ if (~v16->uAtributes & 8)
+ {
+ v17 = abs(v16->vPosition.x - x);
if ( v17 <= v16->uRadius )
{
- v42 = abs((signed __int64)((double)v16->vPosition.y - a4));
+ v42 = abs(v16->vPosition.y - y);
if ( v42 <= v16->uRadius )
{
- v39 = abs((signed __int64)((double)v16->vPosition.z - a5));
+ v39 = abs(v16->vPosition.z - z);
if ( v39 <= v16->uRadius )
{
v18 = v17;
@@ -9205,32 +9085,25 @@
v44 = ((unsigned int)(11 * v19) >> 5) + (v20 >> 2) + v18;
v24 = v16->uRadius;
if ( (signed int)v44 < v24 )
- v6 = v6 + ((unsigned __int64)(30i64 * (signed int)(v44 << 16) / v24) >> 16) - 30;
+ v6 += ((unsigned __int64)(30i64 * (signed int)(v44 << 16) / v24) >> 16) - 30;
}
}
}
}
- v15 = v49++ + 1;
- if ( v49 >= v47 )
- break;
- v14 = v36;
- }
- }
- }
- v50 = 0;
- if ( uNumStationaryLightsApplied > 0 )
- {
- v25 = (char *)&pStationaryLights[0].uRadius;
- do
- {
- v26 = abs((signed __int64)((double)*((short *)v25 - 3) - a3));
- if ( v26 <= *(short *)v25 )
- {
- v40 = abs((signed __int64)((double)*((short *)v25 - 2) - a4));
- if ( v40 <= *(short *)v25 )
- {
- v37 = abs((signed __int64)((double)*((short *)v25 - 1) - a5));
- if ( v37 <= *(short *)v25 )
+ }
+ }
+
+ for (uint i = 0; i < pStationaryLightsStack->uNumLightsActive; ++i)
+ {
+ auto p = pStationaryLightsStack->pLights + i;
+ v26 = abs(p->vPosition.x - x);
+ if ( v26 <= p->uRadius)
+ {
+ v40 = abs(p->vPosition.y - y);
+ if ( v40 <= p->uRadius)
+ {
+ v37 = abs(p->vPosition.z - z);
+ if ( v37 <= p->uRadius)
{
v27 = v26;
v28 = v40;
@@ -9254,17 +9127,14 @@
v28 = v32;
}
v45 = ((unsigned int)(11 * v28) >> 5) + (v29 >> 2) + v27;
- v33 = *(short *)v25;
+ v33 = p->uRadius;
if ( (signed int)v45 < v33 )
- v6 = v6 + ((unsigned __int64)(30i64 * (signed int)(v45 << 16) / v33) >> 16) - 30;
- }
- }
- }
- ++v50;
- v25 += 12;
- }
- while ( v50 < uNumStationaryLightsApplied );
- }
+ v6 += ((unsigned __int64)(30i64 * (signed int)(v45 << 16) / v33) >> 16) - 30;
+ }
+ }
+ }
+ }
+
if ( v6 <= 31 )
{
if ( v6 < 0 )
@@ -9276,7 +9146,6 @@
}
return v6;
}
-// 519AB4: using guessed type int uNumStationaryLightsApplied;
//----- (00406051) --------------------------------------------------------
__int16 stru262_TurnBased::StartTurn()
@@ -9483,7 +9352,7 @@
if ( (signed __int16)v6 == 4 )
{
v3 = 0;
- v5->uAIState = 5;
+ v5->uAIState = Dead;
v5->uCurrentActionTime = 0;
v5->uCurrentActionLength = 0;
v5->UpdateAnimation();
@@ -10235,7 +10104,7 @@
{
v6->uCurrentActionTime = 0;
v6->uCurrentActionLength = 0;
- v6->uAIState = 5;
+ v6->uAIState = Dead;
v6->UpdateAnimation();
}
if ( !thisa->_406D10(a2) )
@@ -10506,11 +10375,11 @@
v5->uCurrentActionTime += pMiscTimer->uTimeElapsed;
if ( (signed int)v5->uCurrentActionTime >= v5->uCurrentActionLength )
{
- if ( v5->uAIState == 4 )
+ if (v5->uAIState == Dying)
{
v5->uCurrentActionTime = 0;
v5->uCurrentActionLength = 0;
- v5->uAIState = 5;
+ v5->uAIState = Dead;
v5->UpdateAnimation();
return;
}
@@ -10660,10 +10529,10 @@
else
{
v18 = pParty->vPosition.x;
- v17 = pParty->sEyelevel + pParty->vPosition.y;
- v60 = pParty->vPosition.z;
- v44 = pParty->sEyelevel + pParty->vPosition.y;
- v43 = pParty->vPosition.z;
+ v17 = pParty->sEyelevel + pParty->vPosition.z;
+ v60 = pParty->vPosition.y;
+ v44 = pParty->sEyelevel + pParty->vPosition.z;
+ v43 = pParty->vPosition.y;
}
v19 = pIndoor->GetSector(v18, v43, v44);
}
@@ -10981,7 +10850,7 @@
signed int a5a; // [sp+2Ch] [bp+10h]@14
v5 = a4;
- v6 = a4->uFaceAttributes;
+ v6 = a4->uAttributes;
v7 = 0;
if ( v6 & 0x100 )
{
@@ -11350,7 +11219,7 @@
sDepthb = 0;
for ( i = 116 * v59;
sDepthb < *(__int16 *)((char *)&pIndoor->pSectors->field_C + v61)
- + 2 * *(__int16 *)((char *)&pIndoor->pSectors->field_4 + v61);
+ + 2 * *(__int16 *)((char *)&pIndoor->pSectors->uNumFloors + v61);
++sDepthb )
{
v62 = &pIndoor->pFaces[(*(unsigned __int16 **)((char *)&v60->pWalls + v61))[sDepthb]];
@@ -11504,7 +11373,7 @@
v162 = 0;
v112 = v89;
if ( *(__int16 *)((char *)&pIndoor->pSectors->field_C + v89)
- + 2 * *(__int16 *)((char *)&pIndoor->pSectors->field_4 + v89) > 0 )
+ + 2 * *(__int16 *)((char *)&pIndoor->pSectors->uNumFloors + v89) > 0 )
break;
LABEL_148:
++a5c;
@@ -11584,7 +11453,7 @@
v88 = pIndoor->pSectors;
++v162;
if ( v162 >= *(__int16 *)((char *)&pIndoor->pSectors->field_C + v89)
- + 2 * *(__int16 *)((char *)&pIndoor->pSectors->field_4 + v89) )
+ + 2 * *(__int16 *)((char *)&pIndoor->pSectors->uNumFloors + v89) )
goto LABEL_148;
}
}
@@ -11915,7 +11784,7 @@
}
//----- (00408896) --------------------------------------------------------
-char *__cdecl UpdateLayingItems()
+void UpdateLayingItems()
{
unsigned int v0; // edi@1
char *v1; // esi@1
@@ -11931,14 +11800,9 @@
++v0;
}
while ( (signed int)v1 < (signed int)((char *)&pObjectList->uNumObjects + 2) );
- result = (char *)&array_5118E8.pElements[0].field_C;
- do
- {
- *(short *)result = 0;
- result += 24;
- }
- while ( (signed int)result < (signed int)&pBillboardRenderList[0].field_4 );
- return result;
+
+ for (uint i = 0; i < 100; ++i)
+ array_5118E8.pElements[i].field_C_time_left = 0;
}
//----- (004088E9) --------------------------------------------------------
@@ -12190,14 +12054,14 @@
if ( bSolidFill )
{
for ( i = v3->y; (signed int)i <= v3->w; ++i )
- pRenderer->FillRect(v3->x, i, v3->z, i, v4);
- }
- else
- {
- pRenderer->FillRect(v3->x, v3->y, v3->z, v3->y, v4);
- pRenderer->FillRect(v3->z, v3->y, v3->z, v3->w, v4);
- pRenderer->FillRect(v3->z, v3->w, v3->x, v3->w, v4);
- pRenderer->FillRect(v3->x, v3->w, v3->x, v3->y, v4);
+ pRenderer->Line2D(v3->x, i, v3->z, i, v4);
+ }
+ else
+ {
+ pRenderer->Line2D(v3->x, v3->y, v3->z, v3->y, v4);
+ pRenderer->Line2D(v3->z, v3->y, v3->z, v3->w, v4);
+ pRenderer->Line2D(v3->z, v3->w, v3->x, v3->w, v4);
+ pRenderer->Line2D(v3->x, v3->w, v3->x, v3->y, v4);
}
pRenderer->EndScene();
}
@@ -12646,7 +12510,7 @@
v1 = pPlayers[uActiveCharacter];
v10 = _this;
- v2 = &pSpellStats->pInfos[(signed int)((char *)_this + 11 * v1->field_1A4E) + 1];
+ v2 = &pSpellStats->pInfos[(signed int)((char *)_this + 11 * v1->pNumSpellBookPage) + 1];
if ( pMouse->GetCursorPos(&a2)->y <= 250 )
v3 = pMouse->GetCursorPos(&a2)->y + 30;
else
@@ -12657,7 +12521,7 @@
a1.uFrameX = 90;
a1.uFrameZ = 417;
a1.uFrameW = v3 + 67;
- a1.str_48 = 0;
+ a1.Hint = 0;
a2.y = pFontSmallnum->GetLineWidth(pGlobalTXT_LocalizationStrings[431]);
v13 = pFontSmallnum->GetLineWidth(pGlobalTXT_LocalizationStrings[433]);
v12 = pFontSmallnum->GetLineWidth(pGlobalTXT_LocalizationStrings[432]);
@@ -12694,7 +12558,7 @@
if ( (signed int)a1.uFrameHeight < 150 )
a1.uFrameHeight = 150;
a1.uFrameWidth = 460;
- a1._415551(0);
+ a1.DrawMessageBox(0);
a1.uFrameWidth -= 12;
a1.uFrameHeight -= 12;
v7 = v2->pName;
@@ -12705,14 +12569,14 @@
a1.DrawText(pFontSmallnum, 120, 44, 0, pTmpBuf2, 0, 0, 0);
a1.uFrameWidth = 108;
a1.uFrameZ = a1.uFrameX + 107;
- a1.DrawText2(pFontComic, 0xCu, 0x4Bu, 0, pSkillNames[v1->field_1A4E + 12], 3u);
+ a1.DrawText2(pFontComic, 0xCu, 0x4Bu, 0, pSkillNames[v1->pNumSpellBookPage + 12], 3u);
sprintfex(
pTmpBuf,
"%s\n%d",
pGlobalTXT_LocalizationStrings[522],
*(&pSpellDatas[0].field_14
- + ((unsigned int)LOBYTE(v1->pActiveSkills[v1->field_1A4E + 12]) >> 6)
- + 10 * (int)((char *)v10 + 11 * v1->field_1A4E)));
+ + ((unsigned int)LOBYTE(v1->pActiveSkills[v1->pNumSpellBookPage + 12]) >> 6)
+ + 10 * (int)((char *)v10 + 11 * v1->pNumSpellBookPage)));
a1.DrawText2(pFontComic, 0xCu, a1.uFrameHeight - LOBYTE(pFontComic->uFontHeight) - 16, 0, pTmpBuf, 3u);
dword_507B00_spell_info_to_draw_in_popup = 0;
}
@@ -13127,7 +12991,7 @@
//----- (00411473) --------------------------------------------------------
void __cdecl sub_411473()
{
- char *v0; // esi@1
+ Texture **v0; // esi@1
Texture **v1; // edi@1
Texture *v2; // ecx@2
Texture *v3; // ecx@2
@@ -13135,7 +12999,7 @@
pTexture_pagemask->Release();
pTexture_506448->Release();
pTexture_50643C->Release();
- v0 = &pTextures_tabs[0][0].pName[4];
+ v0 = &pTextures_tabs[0][1];
v1 = pTextures_5064A0;
do
{
@@ -13224,7 +13088,7 @@
sub_412AF9();
v0 = pPlayers[uActiveCharacter];
- v1 = 11 * v0->field_1A4E;
+ v1 = 11 * v0->pNumSpellBookPage;
v2 = pIcons_LOD->FindTextureByName("Pending");
v3 = (Texture *)(v2 != -1 ? (int)&pIcons_LOD->pTextures[v2] : 0);
pRenderer->ClearZBuffer(0, 479);
@@ -13250,14 +13114,14 @@
}
if ( v6->pLevelOfDetail0 )
{
- v7 = 2 * (12 * v0->field_1A4E + (unsigned __int8)*(&byte_4E2430[12 * v0->field_1A4E] + v4));
+ v7 = 2 * (12 * v0->pNumSpellBookPage + (unsigned __int8)*(&byte_4E2430[12 * v0->pNumSpellBookPage + v4]));
v19 = pViewport->uViewportY + dword_4E20D0[v7 + 1];
v17 = pViewport->uViewportX + dword_4E20D0[v7];
if ( BYTE1(v6->pBits) & 2 )
pRenderer->DrawTextureTransparent(v17, v19, v6);
else
pRenderer->DrawTextureIndexed(v17, v19, v6);
- v8 = 2 * (12 * v0->field_1A4E + (unsigned __int8)*(&byte_4E2430[12 * v0->field_1A4E] + v4));
+ v8 = 2 * (12 * v0->pNumSpellBookPage + (unsigned __int8)*(&byte_4E2430[12 * v0->pNumSpellBookPage] + v4));
pRenderer->_4A612A(dword_4E20D0[v8], dword_4E20D0[v8 + 1], (Texture *)v23[0], v4);
}
}
@@ -13274,7 +13138,7 @@
if ( v11->pLevelOfDetail0 )
{
v21 = dword_5063D8[v10];
- v12 = 2 * (12 * v0->field_1A4E + (unsigned __int8)*(&byte_4E2430[12 * v0->field_1A4E] + v10));
+ v12 = 2 * (12 * v0->pNumSpellBookPage + (unsigned __int8)*(&byte_4E2430[12 * v0->pNumSpellBookPage] + v10));
v20 = pViewport->uViewportY + dword_4E20D0[v12 + 1];
v18 = pViewport->uViewportX + dword_4E20D0[v12];
if ( BYTE1(v11->pBits) & 2 )
@@ -13292,9 +13156,9 @@
{
if ( *(short *)a2.x )
{
- if ( v0->field_1A4E == v13 )
- {
- v16 = *(Texture **)&pTextures_tabs[0][0].pName[8 * v13 + 4];
+ if ( v0->pNumSpellBookPage == v13 )
+ {
+ v16 = pTextures_tabs[v13][1];
switch ( v13 )
{
case 0:
@@ -13334,7 +13198,7 @@
}
else
{
- v16 = *(Texture **)&pTextures_tabs[0][0].pName[8 * v13];
+ v16 = pTextures_tabs[v13][0];
switch ( v13 )
{
case 0:
@@ -14039,7 +13903,7 @@
if ( v7 )
v22.DrawText2(pBook2Font, 0xFFFFFFF2u, 0xCu, 0, pMapStats->pInfos[v7].pName, 3u);
v22.uFrameX = 0;
- sprintfex(Str, pGlobalTXT_LocalizationStrings[659], pParty->vPosition.x, pParty->vPosition.z);
+ sprintfex(Str, pGlobalTXT_LocalizationStrings[659], pParty->vPosition.x, pParty->vPosition.y);
return v22.DrawText2(pFontComic, 0, 0x140u, 0, Str, 0);
}
@@ -14245,28 +14109,28 @@
v2 = pStr;
v3 = a4;
pEventTimer->Pause();
- dword_506F0C[0] = uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions;
+ dword_506F0C[0] = pCurrentScreen;
result = GUIWindow::Create(0, 0, 640, 480, WINDOW_FinalWindow, v3, (int)v2);
ptr_507BDC = result;
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 22;
+ pCurrentScreen = 22;
return result;
}
-// 4E28F8: using guessed type int uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions;
+// 4E28F8: using guessed type int pCurrentScreen;
//----- (0041420D) --------------------------------------------------------
void __cdecl sub_41420D_press_esc()
{
GUIWindow v0; // [sp+4h] [bp-54h]@1
- sprintfex(pTmpBuf2, "%s\n \n%s", ptr_507BDC->str_48, pGlobalTXT_LocalizationStrings[61]);// Press Escape
- v0.str_48 = pTmpBuf2;
+ sprintfex(pTmpBuf2, "%s\n \n%s", ptr_507BDC->Hint, pGlobalTXT_LocalizationStrings[61]);// Press Escape
+ v0.Hint = pTmpBuf2;
v0.uFrameWidth = 400;
v0.uFrameHeight = 100;
v0.uFrameX = 120;
v0.uFrameY = 140;
v0.uFrameZ = 519;
v0.uFrameW = 239;
- v0._415551(0);
+ v0.DrawMessageBox(0);
}
//----- (0041426F) --------------------------------------------------------
@@ -14284,10 +14148,10 @@
}
v0->Release();
ptr_507BDC = 0;
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = dword_506F0C[0];
+ pCurrentScreen = dword_506F0C[0];
pEventTimer->Resume();
}
-// 4E28F8: using guessed type int uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions;
+// 4E28F8: using guessed type int pCurrentScreen;
//----- (004142D3) --------------------------------------------------------
char __cdecl GameMenuUI_DrawKeyBindings()
@@ -14835,7 +14699,7 @@
Dst.uFrameY = 470 - Dst.uFrameHeight;
Dst.uFrameZ = Dst.uFrameX + Dst.uFrameWidth - 1;
Dst.uFrameW = 469;
- Dst._415551(0);
+ Dst.DrawMessageBox(0);
Dst.uFrameWidth -= 24;
Dst.uFrameX += 12;
Dst.uFrameY += 12;
@@ -14851,8 +14715,8 @@
//----- (004156F0) --------------------------------------------------------
void __cdecl GUI_UpdateWindows()
{
- GUIWindow *v0; // esi@4
- unsigned int v1; // eax@4
+ GUIWindow *pWindow; // esi@4
+ unsigned int pWindowType; // eax@4
int v2; // eax@10
int v3; // eax@11
int v4; // eax@12
@@ -14909,10 +14773,10 @@
for ( i = 1; i <= uNumVisibleWindows; ++i )
{
//v0 = (GUIWindow *)&pWindowList_at_506F50_minus1_indexing[21 * pVisibleWindowsIdxs[i]];
- v0 = &pWindowList[pVisibleWindowsIdxs[i] - 1];
- v1 = v0->eWindowType;
-
- switch (v0->eWindowType)
+ pWindow = &pWindowList[pVisibleWindowsIdxs[i] - 1];
+ pWindowType = pWindow->eWindowType;
+
+ switch (pWindow->eWindowType)
{
case WINDOW_MainMenu_Load:
GameUI_MainMenu_DrawLoad();
@@ -14920,16 +14784,16 @@
case WINDOW_5E: // window that initiates savegame loading
{
- if (v0->str_48 != (char *)1)
+ if (pWindow->Hint != (char *)1)
pAudioPlayer->PlaySound((SoundID)75, 0, 0, -1, 0, 0, 0, 0);
- auto v20 = (GUIButton *)v0->ptr_1C;
- pRenderer->DrawTextureIndexed(v0->uFrameX, v0->uFrameY, v20->pTextures[0]);
- v21 = v0->str_48;
+ auto v20 = (GUIButton *)pWindow->ptr_1C;
+ pRenderer->DrawTextureIndexed(pWindow->uFrameX, pWindow->uFrameY, v20->pTextures[0]);
+ v21 = pWindow->Hint;
viewparams->bRedrawGameUI = 1;
if ( v21 && v21 != (char *)1 )
v20->DrawLabel(v21, pFontCreate, 0, 0);
- v0->Release();
- if (uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 11)
+ pWindow->Release();
+ if (pCurrentScreen == 11)
pMessageQueue_50CBD0->SendMessage(UIMSG_SaveGame, 0, 0);
else
pMessageQueue_50CBD0->SendMessage(UIMSG_LoadGame, 0, 0);
@@ -14938,22 +14802,22 @@
}
- if ( (signed int)v1 > 70 )
- {
- if ( (signed int)v1 > 95 )
- {
- v33 = v1 - 96;
+ if ( (signed int)pWindowType > 70 )
+ {
+ if ( (signed int)pWindowType > 95 )
+ {
+ v33 = pWindowType - 96;
if ( !v33 )
{
- if ( v0->str_48 != (char *)1 )
+ if ( pWindow->Hint != (char *)1 )
pAudioPlayer->PlaySound((SoundID)75, 0, 0, -1, 0, 0, 0, 0);
- v42 = (GUIButton *)v0->ptr_1C;
- pRenderer->DrawTextureIndexed(v0->uFrameX, v0->uFrameY, v42->pTextures[0]);
- v43 = v0->str_48;
+ v42 = (GUIButton *)pWindow->ptr_1C;
+ pRenderer->DrawTextureIndexed(pWindow->uFrameX, pWindow->uFrameY, v42->pTextures[0]);
+ v43 = pWindow->Hint;
viewparams->bRedrawGameUI = 1;
if ( v43 && v43 != (char *)1 )
v42->DrawLabel(v43, pFontCreate, 0, 0);
- v0->Release();
+ pWindow->Release();
if ( (signed int)pMessageQueue_50CBD0->uNumMessages >= 40 )
continue;
v41 = pMessageQueue_50CBD0->uNumMessages;
@@ -14990,15 +14854,15 @@
}
else
{
- v0->_415551(0);
- v0->DrawText(pFontLucida, 10, 20, 0, "Making item number", 0, 0, 0);
- v0->DrawText(pFontLucida, 10, 40, 0, (const char *)pKeyActionMap->pPressedKeysBuffer, 0, 0, 0);
+ pWindow->DrawMessageBox(0);
+ pWindow->DrawText(pFontLucida, 10, 20, 0, "Making item number", 0, 0, 0);
+ pWindow->DrawText(pFontLucida, 10, 40, 0, (const char *)pKeyActionMap->pPressedKeysBuffer, 0, 0, 0);
if ( !pKeyActionMap->field_204 )
{
v51.Reset();
- v0->Release();
+ pWindow->Release();
pEventTimer->Resume();
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 0;
+ pCurrentScreen = 0;
viewparams->bRedrawGameUI = 1;
v39 = atoi((const char *)pKeyActionMap->pPressedKeysBuffer);
if ( v39 > 0 )
@@ -15010,9 +14874,9 @@
}
continue;
}
- v46 = (Texture *)*((_DWORD *)v0->ptr_1C + 15);
- v45 = v0->uFrameY;
- v44 = v0->uFrameX;
+ v46 = (Texture *)*((_DWORD *)pWindow->ptr_1C + 15);
+ v45 = pWindow->uFrameY;
+ v44 = pWindow->uFrameX;
LABEL_18:
pRenderer->DrawTextureIndexed(v44, v45, v46);
LABEL_114:
@@ -15028,51 +14892,51 @@
Dst.uHeight = 37;
Dst.pParent = pButton_RestUI_WaitUntilDawn->pParent;
pAudioPlayer->PlaySound((SoundID)75, 0, 0, -1, 0, 0, 0, 0);
- pRenderer->DrawTextureIndexed(v0->uFrameX, v0->uFrameY, *((Texture **)v0->ptr_1C + 15));
+ pRenderer->DrawTextureIndexed(pWindow->uFrameX, pWindow->uFrameY, *((Texture **)pWindow->ptr_1C + 15));
viewparams->bRedrawGameUI = 1;
Dst.DrawLabel(pGlobalTXT_LocalizationStrings[183], pFontCreate, 0, 0);
Dst.pParent = 0;
goto LABEL_134;
}
- if ( v0->str_48 != (char *)1 )
+ if ( pWindow->Hint != (char *)1 )
pAudioPlayer->PlaySound((SoundID)75, 0, 0, -1, 0, 0, 0, 0);
- v32 = v0->ptr_1C;
- pRenderer->DrawTextureIndexed(v0->uFrameX, v0->uFrameY, *((Texture **)v32 + 16));
+ v32 = pWindow->ptr_1C;
+ pRenderer->DrawTextureIndexed(pWindow->uFrameX, pWindow->uFrameY, *((Texture **)v32 + 16));
goto LABEL_138;
}
- if ( v1 == 95 )
- {
- if ( v0->str_48 != (char *)1 )
+ if ( pWindowType == 95 )
+ {
+ if ( pWindow->Hint != (char *)1 )
pAudioPlayer->PlaySound((SoundID)75, 0, 0, -1, 0, 0, 0, 0);
- v32 = v0->ptr_1C;
- pRenderer->DrawTextureTransparent(v0->uFrameX, v0->uFrameY, *((Texture **)v32 + 15));
+ v32 = pWindow->ptr_1C;
+ pRenderer->DrawTextureTransparent(pWindow->uFrameX, pWindow->uFrameY, *((Texture **)v32 + 15));
LABEL_138:
- v40 = v0->str_48;
+ v40 = pWindow->Hint;
viewparams->bRedrawGameUI = 1;
if ( v40 && v40 != (char *)1 )
((GUIButton *)v32)->DrawLabel(v40, pFontCreate, 0, 0);
- v0->Release();
+ pWindow->Release();
LABEL_142:
v41 = pMessageQueue_50CBD0->uNumMessages;
if ( (signed int)pMessageQueue_50CBD0->uNumMessages < 40 )
goto LABEL_151;
continue;
}
- v14 = v1 - 80;
+ v14 = pWindowType - 80;
if ( v14 )
{
v15 = v14 - 9;
if ( !v15 )
{
- v0->_415551(0);
- v0->DrawText(pFontLucida, 10, 20, 0, "Making item number", 0, 0, 0);
- v0->DrawText(pFontLucida, 10, 40, 0, (const char *)pKeyActionMap->pPressedKeysBuffer, 0, 0, 0);
+ pWindow->DrawMessageBox(0);
+ pWindow->DrawText(pFontLucida, 10, 20, 0, "Making item number", 0, 0, 0);
+ pWindow->DrawText(pFontLucida, 10, 40, 0, (const char *)pKeyActionMap->pPressedKeysBuffer, 0, 0, 0);
if ( !pKeyActionMap->field_204 )
{
_this.Reset();
- v0->Release();
+ pWindow->Release();
pEventTimer->Resume();
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 0;
+ pCurrentScreen = 0;
viewparams->bRedrawGameUI = 1;
v26 = atoi((const char *)pKeyActionMap->pPressedKeysBuffer);
if ( v26 > 0 )
@@ -15101,9 +14965,9 @@
v16 = v15 - 1;
if ( !v16 )
{
- if ( v0->str_48 != (char *)1 )
+ if ( pWindow->Hint != (char *)1 )
pAudioPlayer->PlaySound((SoundID)75, 0, 0, -1, 0, 0, 0, 0);
- v22 = (GUIButton *)v0->ptr_1C;
+ v22 = (GUIButton *)pWindow->ptr_1C;
if ( (v22->uX & 0x80000000u) == 0 )
{
if ( (signed int)v22->uX <= 640 )
@@ -15119,7 +14983,7 @@
}
}
}
- v23 = v0->str_48;
+ v23 = pWindow->Hint;
viewparams->bRedrawGameUI = 1;
if ( v23 )
{
@@ -15127,20 +14991,20 @@
goto LABEL_82;
}
LABEL_134:
- v28 = v0;
+ v28 = pWindow;
goto LABEL_110;
}
v17 = v16 - 1;
if ( !v17 )
{
- if ( v0->str_48 != (char *)1 )
+ if ( pWindow->Hint != (char *)1 )
pAudioPlayer->PlaySound((SoundID)75, 0, 0, -1, 0, 0, 0, 0);
- v22 = (GUIButton *)v0->ptr_1C;
+ v22 = (GUIButton *)pWindow->ptr_1C;
v47 = v22->pTextures[1];
LABEL_94:
- pRenderer->DrawTextureIndexed(v0->uFrameX, v0->uFrameY, v47);
+ pRenderer->DrawTextureIndexed(pWindow->uFrameX, pWindow->uFrameY, v47);
LABEL_80:
- v23 = v0->str_48;
+ v23 = pWindow->Hint;
viewparams->bRedrawGameUI = 1;
if ( v23 )
{
@@ -15154,18 +15018,18 @@
v18 = v17 - 1;
if ( !v18 )
{
- if ( v0->str_48 != (char *)1 )
+ if ( pWindow->Hint != (char *)1 )
pAudioPlayer->PlaySound((SoundID)75, 0, 0, -1, 0, 0, 0, 0);
- v22 = (GUIButton *)v0->ptr_1C;
- pRenderer->DrawTextureTransparent(v0->uFrameX, v0->uFrameY, v22->pTextures[0]);
+ v22 = (GUIButton *)pWindow->ptr_1C;
+ pRenderer->DrawTextureTransparent(pWindow->uFrameX, pWindow->uFrameY, v22->pTextures[0]);
goto LABEL_80;
}
v19 = v18 - 1;
if ( !v19 )
{
- if ( v0->str_48 != (char *)1 )
+ if ( pWindow->Hint != (char *)1 )
pAudioPlayer->PlaySound((SoundID)75, 0, 0, -1, 0, 0, 0, 0);
- pRenderer->DrawTextureTransparent(v0->uFrameX, v0->uFrameY, *((Texture **)v0->ptr_1C + 16));
+ pRenderer->DrawTextureTransparent(pWindow->uFrameX, pWindow->uFrameY, *((Texture **)pWindow->ptr_1C + 16));
viewparams->bRedrawGameUI = 1;
goto LABEL_134;
}
@@ -15175,7 +15039,7 @@
v27 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0xFFu);
if ( ptr_507BD0->field_40 == 1 )
{
- ptr_507BD0->_415551(0);
+ ptr_507BD0->DrawMessageBox(0);
ptr_507BD0->DrawText(
pFontCreate,
30,
@@ -15193,7 +15057,7 @@
if ( ptr_507BD0->field_40 == 2 )
{
v29 = pMessageQueue_50CBD0->uNumMessages;
- v0->field_40 = 0;
+ pWindow->field_40 = 0;
if ( (signed int)v29 < 40 )
{
pMessageQueue_50CBD0->pMessages[v29].eType = (UIMessageType)(int)ptr_507BD0->ptr_1C;
@@ -15203,12 +15067,12 @@
}
pEventTimer->Resume();
ptr_507BD0->Release();
- uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions = 0;
+ pCurrentScreen = 0;
goto LABEL_114;
}
if ( ptr_507BD0->field_40 == 3 )
{
- v0->field_40 = 0;
+ pWindow->field_40 = 0;
pEventTimer->Resume();
v28 = ptr_507BD0;
LABEL_110:
@@ -15219,16 +15083,16 @@
}
else
{
- if ( v1 == 70 )
+ if ( pWindowType == 70 )
{
sub_41420D_press_esc();
continue;
}
- if ( (signed int)v1 > 18 )
- {
- if ( (signed int)v1 > 25 )
- {
- v12 = v1 - 26;
+ if ( (signed int)pWindowType > 18 )
+ {
+ if ( (signed int)pWindowType > 25 )
+ {
+ v12 = pWindowType - 26;
if ( v12 )
{
v13 = v12 - 4;
@@ -15257,9 +15121,9 @@
}
continue;
}
- if ( v1 != 25 )
- {
- v7 = v1 - 19;
+ if ( pWindowType != 25 )
+ {
+ v7 = pWindowType - 19;
if ( v7 )
{
v8 = v7 - 1;
@@ -15278,13 +15142,13 @@
}
else
{
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 10 )
+ if ( pCurrentScreen == 10 )
{
- Chest::DrawChestUI((unsigned int)v0->ptr_1C);
+ Chest::DrawChestUI((unsigned int)pWindow->ptr_1C);
}
else
{
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 15 )
+ if ( pCurrentScreen == 15 )
{
pRenderer->ClearZBuffer(0, 479);
draw_leather();
@@ -15324,15 +15188,15 @@
}
goto LABEL_142;
}
- if ( v1 == 18 )
+ if ( pWindowType == 18 )
{
sub_412B58();
}
else
{
- if ( (signed int)v1 > 10 )
- {
- v5 = v1 - 12;
+ if ( (signed int)pWindowType > 10 )
+ {
+ v5 = pWindowType - 12;
if ( v5 )
{
v6 = v5 - 4;
@@ -15352,9 +15216,9 @@
}
continue;
}
- if ( v1 != 10 )
- {
- v2 = v1 - 3;
+ if ( pWindowType != 10 )
+ {
+ v2 = pWindowType - 3;
if ( v2 )
{
v3 = v2 - 1;
@@ -15364,7 +15228,7 @@
if ( v4 )
{
if ( v4 == 3 )
- DrawSpellbook((unsigned int)v0->ptr_1C);
+ DrawSpellbook((unsigned int)pWindow->ptr_1C);
}
else
{
@@ -15482,7 +15346,7 @@
if ( !v0->CanAct() )
{
sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[427], v0->pName, pGlobalTXT_LocalizationStrings[541]);
- v43.str_48 = pTmpBuf;
+ v43.Hint = pTmpBuf;
v43.uFrameWidth = 384;
v43.uFrameHeight = 180;
v43.uFrameY = 40;
@@ -15491,7 +15355,7 @@
else
v38 = pMouse->GetCursorPos(&a2)->x - 414;
v43.uFrameX = v38;
- v43._415551(0);
+ v43.DrawMessageBox(0);
return;
}
--pOut.z;
@@ -15695,7 +15559,7 @@
v42 = (int *)&a2.y;
v41 = (int *)&y.y;
v40 = (int *)&pOut;
- v39.z = pParty->vPosition.y + pParty->sEyelevel;
+ v39.z = pParty->vPosition.z + pParty->sEyelevel;
}
else
{
@@ -15769,7 +15633,7 @@
v42 = (int *)&a2.y;
v41 = (int *)&y.y;
v40 = (int *)&pOut;
- v39.z = pParty->vPosition.y + pParty->sEyelevel;
+ v39.z = pParty->vPosition.z + pParty->sEyelevel;
}
*(_QWORD *)&v39.x = *(_QWORD *)&pParty->vPosition.x;
Vec3_int_::Rotate(64, pParty->sRotationY, pParty->sRotationX, v39, v40, v41, v42);
@@ -15898,9 +15762,9 @@
{
lpsz = (LPCSTR)*(&pNPCStats->field_13A64 + 5 * v6->uProfession);
if ( !lpsz )
- lpsz = nullstring;
- }
- a1.str_48 = 0;
+ lpsz = "";
+ }
+ a1.Hint = 0;
a1.uFrameX = 38;
a1.uFrameY = 60;
a1.uFrameWidth = 276;
@@ -15912,7 +15776,7 @@
a1.uFrameHeight = 130;
a1.uFrameWidth = 400;
a1.uFrameZ = a1.uFrameX + 399;
- a1._415551(0);
+ a1.DrawMessageBox(0);
sprintfex(pTmpBuf2, "NPC%03d", v6->uPortraitID);
v8 = pIcons_LOD->LoadTexture(pTmpBuf2, TEXTURE_16BIT_PALETTE);
pRenderer->DrawTextureIndexed(
@@ -15980,7 +15844,7 @@
unsigned int pX; // [sp+70h] [bp-8h]@3
unsigned int pY; // [sp+74h] [bp-4h]@3
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 16 )
+ if ( pCurrentScreen == 16 )
return;
if ( _this )
{
@@ -16019,10 +15883,11 @@
while ( v1 < 4 );
}
pEventTimer->Pause();
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions <= 10 )
- {
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 10 )
- {
+ if ( pCurrentScreen <= 10 )
+ {
+ if ( pCurrentScreen == 10 )
+ {
+ __debugbreak();
if ( !pPlayers[uActiveCharacter]->CanAct() )
{
sprintfex(
@@ -16030,7 +15895,7 @@
pGlobalTXT_LocalizationStrings[427],
pPlayers[uActiveCharacter]->pName,
pGlobalTXT_LocalizationStrings[541]);
- a1.str_48 = pTmpBuf;
+ a1.Hint = pTmpBuf;
a1.uFrameWidth = 384;
a1.uFrameHeight = 180;
a1.uFrameY = 40;
@@ -16054,13 +15919,13 @@
}
else
{
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions )
- {
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions != 3 )
- {
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions != 7 )
- {
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 8 )
+ if ( pCurrentScreen )
+ {
+ if ( pCurrentScreen != 3 )
+ {
+ if ( pCurrentScreen != 7 )
+ {
+ if ( pCurrentScreen == 8 )
{
if ( dword_507B00_spell_info_to_draw_in_popup )
DrawSpellDescriptionPopup((void *)(dword_507B00_spell_info_to_draw_in_popup - 1));
@@ -16069,7 +15934,7 @@
}
LABEL_119:
if ( (signed int)pX > 467
- && uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions != 14 )
+ && pCurrentScreen != 14 )
{
LABEL_126:
identify_item();
@@ -16098,7 +15963,7 @@
|| (signed int)pX > (signed int)pViewport->uViewportZ
|| (signed int)pY < (signed int)pViewport->uViewportY
|| (signed int)pY > (signed int)pViewport->uViewportW
- || (v2 = (char *)sub_444564(), (a1.str_48 = v2) == 0) )
+ || (v2 = (char *)sub_444564(), (a1.Hint = v2) == 0) )
goto LABEL_132;
v30 = (double)(pFontArrus->GetLineWidth(v2) + 32);
v27 = v30 + 6.7553994e15;
@@ -16108,20 +15973,21 @@
a1.uFrameY = pY + 5;
goto LABEL_41;
}
- if ( (GetCurrentMenuID() & 0x80000000u) == 0 )
+ if (GetCurrentMenuID() > 0)
goto LABEL_132;
+
if ( (signed int)pY > (signed int)pViewport->uViewportW )
{
a1.ptr_1C = (void *)((signed int)pX / 118);
if ( (signed int)pX / 118 < 4 )
{
- a1.str_48 = 0;
+ a1.Hint = 0;
a1.uFrameWidth = 400;
a1.uFrameHeight = 200;
a1.uFrameX = 38;
a1.uFrameY = 60;
pAudioPlayer->StopChannels(-1, -1);
- a1._41D3B7();
+ a1.DrawQuickCharRecord();
}
goto LABEL_132;
}
@@ -16131,7 +15997,7 @@
{
if ( (signed int)pX >= 476 && (signed int)pX <= 636 && (signed int)pY >= 240 && (signed int)pY <= 300 )
{
- a1.str_48 = 0;
+ a1.Hint = 0;
a1.uFrameWidth = 400;
a1.uFrameHeight = 200;
a1.uFrameX = 38;
@@ -16155,7 +16021,7 @@
sub_416B01(v3);
goto LABEL_132;
}
- a1.str_48 = _4443D5_GetMinimapRightClickText();
+ a1.Hint = _4443D5_GetMinimapRightClickText();
a1.uFrameWidth = 256;
a1.uFrameX = 130;
a1.uFrameY = 140;
@@ -16163,10 +16029,10 @@
a1.uFrameHeight = 64;
pAudioPlayer->StopChannels(-1, -1);
LABEL_42:
- a1._415551(0);
+ a1.DrawMessageBox(0);
goto LABEL_132;
}
- a1.str_48 = 0;
+ a1.Hint = 0;
a1.uFrameWidth = 320;
a1.uFrameHeight = 320;
v4 = pX - 350;
@@ -16185,13 +16051,13 @@
{
if ( pRenderer->uNumSceneBegins )
{
- a1._415551(1);
+ a1.DrawMessageBox(1);
MonsterPopup_Draw(v6 >> 3, &a1);
}
else
{
pRenderer->BeginScene();
- a1._415551(1);
+ a1.DrawMessageBox(1);
MonsterPopup_Draw(v6 >> 3, &a1);
pRenderer->EndScene();
}
@@ -16206,22 +16072,22 @@
GameUI_DrawItemInfo(v8);
goto LABEL_132;
}
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 13 )
+ if ( pCurrentScreen == 13 )
{
if ( (signed int)pY < 345 && (signed int)pX < 469 )
sub_4B1A2D();
goto LABEL_132;
}
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions <= 13 )
+ if ( pCurrentScreen <= 13 )
goto LABEL_132;
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions <= 15 )
+ if ( pCurrentScreen <= 15 )
goto LABEL_119;
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions != 21 )
- {
- v11 = uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 23;
+ if ( pCurrentScreen != 21 )
+ {
+ v11 = pCurrentScreen == 23;
goto LABEL_125;
}
- a1.str_48 = 0;
+ a1.Hint = 0;
v12 = pGUIWindow_CurrentMenu->pControlsHead;
if ( !v12 )
goto LABEL_132;
@@ -16240,7 +16106,7 @@
{
if ( v15 == 65 )
{
- a1.str_48 = pClassDescriptions[v12->uControlParam];
+ a1.Hint = pClassDescriptions[v12->uControlParam];
v14 = pClassNames[v12->uControlParam];
}
else
@@ -16258,7 +16124,7 @@
v18 = pParty->pPlayers[uPlayerCreationUI_SelectedCharacter].GetSkillIdxByOrder(
v12->uControlParam + 4);
v14 = pSkillNames[v18];
- a1.str_48 = pSkillDesc[v18];
+ a1.Hint = pSkillDesc[v18];
v13 = pY;
}
goto LABEL_117;
@@ -16273,7 +16139,7 @@
}
goto LABEL_116;
}
- a1.str_48 = pAttributeDescriptions[(signed int)v12->uControlParam % 7];
+ a1.Hint = pAttributeDescriptions[(signed int)v12->uControlParam % 7];
v14 = aAttributeNames[(signed int)v12->uControlParam % 7];
}
goto LABEL_117;
@@ -16305,7 +16171,7 @@
v14 = pParty->pPlayers[v20].pName;
v19 = pClassDescriptions[pParty->pPlayers[v20].uClass];
LABEL_116:
- a1.str_48 = v19;
+ a1.Hint = v19;
goto LABEL_117;
}
goto LABEL_117;
@@ -16317,14 +16183,14 @@
goto LABEL_117;
v22 = CharacterUI_GetSkillDescText(v12->uControlParam, (enum PLAYER_SKILL_TYPE)v21);
strcpy(pTmpBuf2, v22);
- a1.str_48 = pTmpBuf2;
+ a1.Hint = pTmpBuf2;
v14 = pSkillNames[pY];
LABEL_112:
- v23 = a1.str_48;
- if ( a1.str_48 )
- {
- v24 = a1.str_48;
- a1.str_48 = 0;
+ v23 = a1.Hint;
+ if ( a1.Hint )
+ {
+ v24 = a1.Hint;
+ a1.Hint = 0;
a1.uFrameWidth = 384;
a1.uFrameHeight = 256;
a1.uFrameX = 128;
@@ -16334,7 +16200,7 @@
+ 24;
a1.uFrameZ = a1.uFrameX + a1.uFrameWidth - 1;
a1.uFrameW = a1.uFrameY + a1.uFrameHeight - 1;
- a1._415551(0);
+ a1.DrawMessageBox(0);
a1.uFrameX += 12;
a1.uFrameWidth -= 24;
a1.uFrameY += 12;
@@ -16370,7 +16236,7 @@
unsigned int pY; // [sp+18h] [bp-4h]@7
pXY_ = pXY;
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 16
+ if ( pCurrentScreen == 16
|| sub_4637E0_is_there_popup_onscreen() )
return;
if ( pGUIWindow2 && pGUIWindow2->ptr_1C == (void *)33 )
@@ -16391,7 +16257,7 @@
y = pY;
x = pX;
}
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions
+ if ( pCurrentScreen
|| !dword_507B98_ctrl_pressed )
goto LABEL_30;
v4 = GetCurrentMenuID();
@@ -16528,7 +16394,7 @@
}
//----- (004178FE) --------------------------------------------------------
-unsigned int __fastcall sub_4178FE(signed int a1, signed int a2)
+unsigned int __fastcall UI_GetHealthManaStringColor(signed int a1, signed int a2)
{
unsigned __int16 v2; // dx@2
unsigned __int16 v3; // cx@2
@@ -16625,7 +16491,7 @@
Dst.uFrameHeight = pFontSmallnum->CalcTextHeight(v2, &Dst, 24, 0) + 2 * LOBYTE(pFontLucida->uFontHeight) + 24;
Dst.uFrameZ = Dst.uFrameX + Dst.uFrameWidth - 1;
Dst.uFrameW = Dst.uFrameY + Dst.uFrameHeight - 1;
- Dst._415551(0);
+ Dst.DrawMessageBox(0);
Dst.uFrameX += 12;
Dst.uFrameWidth -= 24;
Dst.uFrameY += 12;
@@ -17286,14 +17152,14 @@
v4 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0, 0xFFu, 0);
else
v4 = 0xFFFFu;
- sprintfex(pTmpBuf2, &byte_4E2F14, pGlobalTXT_LocalizationStrings[207], v4, pPlayer->uSkillPoints);
+ sprintfex(pTmpBuf2, "\xC" "00000\xD" "180%s: \xC%05d%d\xC" "00000\n\n\n", pGlobalTXT_LocalizationStrings[207], v4, pPlayer->uSkillPoints);
strcat(pTmpBuf, pTmpBuf2);
pGUIWindow_CurrentMenu->DrawText(pFontArrus, 26, 18, 0, pTmpBuf, 0, 0, 0);
v5 = pPlayer->GetBaseStrength();
v6 = pPlayer->GetActualMight();
v7 = pPlayer->GetBaseStrength();
v8 = pPlayer->GetActualMight();
- v9 = sub_4178FE(v8, v7);
+ v9 = UI_GetHealthManaStringColor(v8, v7);
sprintfex(pTmpBuf, "%s", pGlobalTXT_LocalizationStrings[144], v9, v6, v5);
pGUIWindow_CurrentMenu->DrawText(pFontArrus, 26, 53, 0, pTmpBuf, 0, 0, 0);
v10 = LOBYTE(pFontArrus->uFontHeight) + 51;
@@ -17301,7 +17167,7 @@
v12 = pPlayer->GetActualIntelligence();
v13 = pPlayer->GetBaseIntelligence();
v14 = pPlayer->GetActualIntelligence();
- v15 = sub_4178FE(v14, v13);
+ v15 = UI_GetHealthManaStringColor(v14, v13);
sprintfex(pTmpBuf, "%s", pGlobalTXT_LocalizationStrings[116], v15, v12, v11);
pGUIWindow_CurrentMenu->DrawText(pFontArrus, 26, v10, 0, pTmpBuf, 0, 0, 0);
v16 = LOBYTE(pFontArrus->uFontHeight) + v10 - 2;
@@ -17309,7 +17175,7 @@
v18 = pPlayer->GetActualWillpower();
v19 = pPlayer->GetBaseWillpower();
v20 = pPlayer->GetActualWillpower();
- v21 = sub_4178FE(v20, v19);
+ v21 = UI_GetHealthManaStringColor(v20, v19);
sprintfex(pTmpBuf, "%s", pGlobalTXT_LocalizationStrings[163], v21, v18, v17);
pGUIWindow_CurrentMenu->DrawText(pFontArrus, 26, v16, 0, pTmpBuf, 0, 0, 0);
v22 = LOBYTE(pFontArrus->uFontHeight) + v16 - 2;
@@ -17317,7 +17183,7 @@
v24 = pPlayer->GetActualEndurance();
v25 = pPlayer->GetBaseEndurance();
v26 = pPlayer->GetActualEndurance();
- v27 = sub_4178FE(v26, v25);
+ v27 = UI_GetHealthManaStringColor(v26, v25);
sprintfex(pTmpBuf, "%s", pGlobalTXT_LocalizationStrings[75], v27, v24, v23);
pGUIWindow_CurrentMenu->DrawText(pFontArrus, 26, v22, 0, pTmpBuf, 0, 0, 0);
v28 = LOBYTE(pFontArrus->uFontHeight) + v22 - 2;
@@ -17325,7 +17191,7 @@
v30 = pPlayer->GetActualAccuracy();
v31 = pPlayer->GetBaseAccuracy();
v32 = pPlayer->GetActualAccuracy();
- v33 = sub_4178FE(v32, v31);
+ v33 = UI_GetHealthManaStringColor(v32, v31);
sprintfex(pTmpBuf, "%s", pGlobalTXT_LocalizationStrings[1], v33, v30, v29);
pGUIWindow_CurrentMenu->DrawText(pFontArrus, 26, v28, 0, pTmpBuf, 0, 0, 0);
v34 = LOBYTE(pFontArrus->uFontHeight) + v28 - 2;
@@ -17333,7 +17199,7 @@
v36 = pPlayer->GetActualSpeed();
v37 = pPlayer->GetBaseSpeed();
v38 = pPlayer->GetActualSpeed();
- v39 = sub_4178FE(v38, v37);
+ v39 = UI_GetHealthManaStringColor(v38, v37);
sprintfex(pTmpBuf, "%s", pGlobalTXT_LocalizationStrings[211], v39, v36, v35);
pGUIWindow_CurrentMenu->DrawText(pFontArrus, 26, v34, 0, pTmpBuf, 0, 0, 0);
v40 = LOBYTE(pFontArrus->uFontHeight) + v34 - 2;
@@ -17341,7 +17207,7 @@
v42 = pPlayer->GetActualLuck();
v43 = pPlayer->GetBaseLuck();
v44 = pPlayer->GetActualLuck();
- v45 = sub_4178FE(v44, v43);
+ v45 = UI_GetHealthManaStringColor(v44, v43);
sprintfex(pTmpBuf, "%s", pGlobalTXT_LocalizationStrings[136], v45, v42, v41);
pGUIWindow_CurrentMenu->DrawText(pFontArrus, 26, v40, 0, pTmpBuf, 0, 0, 0);
a2 = "%s";
@@ -17351,7 +17217,7 @@
v47 = pPlayer->GetMaxHealth();
v48 = pPlayer->sHealth;
v49 = pPlayer->GetMaxHealth();
- v50 = sub_4178FE(pPlayer->sHealth, v49);
+ v50 = UI_GetHealthManaStringColor(pPlayer->sHealth, v49);
sprintfex(pTmpBuf, a2, pGlobalTXT_LocalizationStrings[108], v50, v48, v47);
pGUIWindow_CurrentMenu->DrawText(pFontArrus, 26, v46, 0, pTmpBuf, 0, 0, 0);
a2a = "%s";
@@ -17361,7 +17227,7 @@
v51 = pPlayer->GetMaxMana();
v52 = pPlayer->sMana;
v53 = pPlayer->GetMaxMana();
- v54 = sub_4178FE(pPlayer->sMana, v53);
+ v54 = UI_GetHealthManaStringColor(pPlayer->sMana, v53);
sprintfex(pTmpBuf, a2a, pGlobalTXT_LocalizationStrings[212], v54, v52, v51);
pGUIWindow_CurrentMenu->DrawText(pFontArrus, 26, uY, 0, pTmpBuf, 0, 0, 0);
v55 = LOBYTE(pFontArrus->uFontHeight) + uY - 2;
@@ -17369,7 +17235,7 @@
v57 = pPlayer->GetActualAC();
v58 = pPlayer->GetBaseAC();
v59 = pPlayer->GetActualAC();
- v60 = sub_4178FE(v59, v58);
+ v60 = UI_GetHealthManaStringColor(v59, v58);
sprintfex(pTmpBuf, "%s", pGlobalTXT_LocalizationStrings[12], v60, v57, v56);
pGUIWindow_CurrentMenu->DrawText(pFontArrus, 26, v55, 0, pTmpBuf, 0, 0, 0);
v61 = v55 + 2 * LOBYTE(pFontArrus->uFontHeight) - 2;
@@ -17390,7 +17256,7 @@
v69 = pPlayer->GetActualAge();
v70 = pPlayer->GetBaseAge();
v71 = pPlayer->GetActualAge();
- v72 = sub_4178FE(v71, v70);
+ v72 = UI_GetHealthManaStringColor(v71, v70);
sprintfex(pTmpBuf, "%s", pGlobalTXT_LocalizationStrings[5], v72, v69, v68);
pGUIWindow_CurrentMenu->DrawText(pFontArrus, 266, 50, 0, pTmpBuf, 0, 0, 0);
a2b = "%s";
@@ -17401,7 +17267,7 @@
v74 = pPlayer->GetActualLevel();
v75 = pPlayer->GetBaseLevel();
v76 = pPlayer->GetActualLevel();
- v77 = sub_4178FE(v76, v75);
+ v77 = UI_GetHealthManaStringColor(v76, v75);
sprintfex(pTmpBuf, a2b, pGlobalTXT_LocalizationStrings[131], v77, v74, v73);
pGUIWindow_CurrentMenu->DrawText(pFontArrus, 266, uYa, 0, pTmpBuf, 0, 0, 0);
uYb = uYa + LOBYTE(pFontArrus->uFontHeight) - 2;
@@ -17437,7 +17303,7 @@
if ( v131 > 99 || v90 > 99 )
a2c = format_4E2E68;
v91 = v90;
- v92 = sub_4178FE(v131, v90);
+ v92 = UI_GetHealthManaStringColor(v131, v90);
sprintfex(pTmpBuf, a2c, pGlobalTXT_LocalizationStrings[87], v92, v131, v91);
pGUIWindow_CurrentMenu->DrawText(pFontArrus, 266, uYc, 0, pTmpBuf, 0, 0, 0);
a2d = format_4E2E10;
@@ -17447,7 +17313,7 @@
if ( v132 > 99 || v93 > 99 )
a2d = format_4E2E68;
v94 = v93;
- v95 = sub_4178FE(v132, v93);
+ v95 = UI_GetHealthManaStringColor(v132, v93);
sprintfex(pTmpBuf, a2d, pGlobalTXT_LocalizationStrings[6], v95, v132, v94);
pGUIWindow_CurrentMenu->DrawText(pFontArrus, 266, uYd, 0, pTmpBuf, 0, 0, 0);
a2e = format_4E2E10;
@@ -17457,7 +17323,7 @@
if ( v133 > 99 || v96 > 99 )
a2e = format_4E2E68;
v97 = v96;
- v98 = sub_4178FE(v133, v96);
+ v98 = UI_GetHealthManaStringColor(v133, v96);
sprintfex(pTmpBuf, a2e, pGlobalTXT_LocalizationStrings[240], v98, v133, v97);
pGUIWindow_CurrentMenu->DrawText(pFontArrus, 266, uYe, 0, pTmpBuf, 0, 0, 0);
a2f = format_4E2E10;
@@ -17467,7 +17333,7 @@
if ( v134 > 99 )
a2f = format_4E2E68;
v100 = v99;
- v101 = sub_4178FE(v134, v99);
+ v101 = UI_GetHealthManaStringColor(v134, v99);
sprintfex(pTmpBuf, a2f, pGlobalTXT_LocalizationStrings[70], v101, v134, v100);
pGUIWindow_CurrentMenu->DrawText(pFontArrus, 266, uYf, 0, pTmpBuf, 0, 0, 0);
a2g = format_4E2E10;
@@ -17478,12 +17344,12 @@
if ( v135 > 99 || v102 > 99 )
a2g = format_4E2E68;
v103 = v102;
- v104 = sub_4178FE(v135, v102);
+ v104 = UI_GetHealthManaStringColor(v135, v102);
sprintfex(pTmpBuf, a2g, pGlobalTXT_LocalizationStrings[142], v104, v135, v103);
if ( pPlayer->uClass == 35 && v137 == 200 )
{
v105 = pGlobalTXT_LocalizationStrings[625];
- v106 = sub_4178FE(v135, 200);
+ v106 = UI_GetHealthManaStringColor(v135, 200);
sprintfex(pTmpBuf, format_4E2E00, pGlobalTXT_LocalizationStrings[142], v106, v105);
}
pGUIWindow_CurrentMenu->DrawText(pFontArrus, 266, uYg, 0, pTmpBuf, 0, 0, 0);
@@ -17495,12 +17361,12 @@
if ( v136 > 99 || v107 > 99 )
a2h = format_4E2E68;
v108 = v107;
- v109 = sub_4178FE(v136, v107);
+ v109 = UI_GetHealthManaStringColor(v136, v107);
sprintfex(pTmpBuf, a2h, pGlobalTXT_LocalizationStrings[29], v109, v136, v108);
if ( pPlayer->uClass == 35 && v138 == 200 )
{
v110 = pGlobalTXT_LocalizationStrings[625];
- v111 = sub_4178FE(v136, 200);
+ v111 = UI_GetHealthManaStringColor(v136, 200);
sprintfex(pTmpBuf, format_4E2E00, pGlobalTXT_LocalizationStrings[29], v111, v110);
}
return pGUIWindow_CurrentMenu->DrawText(pFontArrus, 266, uYh, 0, pTmpBuf, 0, 0, 0);
@@ -17622,7 +17488,7 @@
0xA9u,
0,
0,
- nullstring,
+ "",
(Texture *)(uTextureID_ar_up_up != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_ar_up_up] : 0),
uTextureID_ar_up_dn != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_ar_up_dn] : 0,
0);
@@ -17636,7 +17502,7 @@
0xAAu,
0,
0,
- nullstring,
+ "",
(Texture *)(uTextureID_ar_dn_up != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_ar_dn_up] : 0),
uTextureID_ar_dn_dn != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_ar_dn_dn] : 0,
0);
@@ -17650,7 +17516,7 @@
0xC0u,
0,
0,
- nullstring,
+ "",
0);
}
}
@@ -17753,7 +17619,7 @@
0x79u,
*v14,
0,
- nullstring,
+ "",
0);
v2 = pFontLucida;
}
@@ -17781,7 +17647,7 @@
0x79u,
*v15,
0,
- nullstring,
+ "",
0);
v2 = pFontLucida;
}
@@ -17809,7 +17675,7 @@
0x79u,
*v16,
0,
- nullstring,
+ "",
0);
v2 = pFontLucida;
}
@@ -17837,7 +17703,7 @@
0x79u,
*v17,
0,
- nullstring,
+ "",
0);
v2 = pFontLucida;
}
diff -r c83d06692295 -r c0cf9393af64 mm7_6.cpp
--- a/mm7_6.cpp Mon Oct 22 09:20:49 2012 +0600
+++ b/mm7_6.cpp Mon Oct 29 09:28:08 2012 +0600
@@ -2343,10 +2343,10 @@
if ( ptr_507BD4 )
return result;
ptr_507BD4 = GUIWindow::Create(0, 0, 640, 480, (WindowType)(WINDOW_HouseInterior|0x2), (int)&pStru277[result], 0);
- ptr_507BD4->CreateButton(0x34u, 0x1A6u, 0x23u, 0, 2, 0, 0x45u, 0, 0x31u, nullstring, 0);
- ptr_507BD4->CreateButton(0xA5u, 0x1A6u, 0x23u, 0, 2, 0, 0x45u, 1u, 0x32u, nullstring, 0);
- ptr_507BD4->CreateButton(0x118u, 0x1A6u, 0x23u, 0, 2, 0, 0x45u, 2u, 0x33u, nullstring, 0);
- ptr_507BD4->CreateButton(0x186u, 0x1A6u, 0x23u, 0, 2, 0, 0x45u, 3u, 0x34u, nullstring, 0);
+ ptr_507BD4->CreateButton(0x34u, 0x1A6u, 0x23u, 0, 2, 0, 0x45u, 0, 0x31u, "", 0);
+ ptr_507BD4->CreateButton(0xA5u, 0x1A6u, 0x23u, 0, 2, 0, 0x45u, 1u, 0x32u, "", 0);
+ ptr_507BD4->CreateButton(0x118u, 0x1A6u, 0x23u, 0, 2, 0, 0x45u, 2u, 0x33u, "", 0);
+ ptr_507BD4->CreateButton(0x186u, 0x1A6u, 0x23u, 0, 2, 0, 0x45u, 3u, 0x34u, "", 0);
return sub_421B2C_PlaceInInventory_or_DropPickedItem();
}
if ( v6 & 8 )
@@ -2355,7 +2355,7 @@
return result;
v17 = GUIWindow::Create(0, 0, 640, 480, (WindowType)(WINDOW_HouseInterior|0x2), (int)&pStru277[result], 0);
v29 = 0;
- v28 = nullstring;
+ v28 = "";
v27 = 0;
v26 = 0;
v25 = 70;
@@ -2378,7 +2378,7 @@
return result;
v17 = GUIWindow::Create(0, 0, 640, 480, (WindowType)(WINDOW_HouseInterior|0x2), (int)&pStru277[result], 0);
v29 = 0;
- v28 = nullstring;
+ v28 = "";
v27 = 0;
v26 = 0;
v25 = 190;
@@ -2401,12 +2401,12 @@
if ( ptr_507BD4 )
return result;
ptr_507BD4 = GUIWindow::Create(0, 0, 640, 480, (WindowType)(WINDOW_HouseInterior|0x2), 20 * result + 5292232, 0);
- ptr_507BD4->CreateButton(0x34u, 0x1A6u, 0x23u, 0, 2, 0, 0x8Du, 0, 0x31u, nullstring, 0);
- ptr_507BD4->CreateButton(0xA5u, 0x1A6u, 0x23u, 0, 2, 0, 0x8Du, 1u, 0x32u, nullstring, 0);
- ptr_507BD4->CreateButton(0x118u, 0x1A6u, 0x23u, 0, 2, 0, 0x8Du, 2u, 0x33u, nullstring, 0);
- ptr_507BD4->CreateButton(0x186u, 0x1A6u, 0x23u, 0, 2, 0, 0x8Du, 3u, 0x34u, nullstring, 0);
+ ptr_507BD4->CreateButton(0x34u, 0x1A6u, 0x23u, 0, 2, 0, 0x8Du, 0, 0x31u, "", 0);
+ ptr_507BD4->CreateButton(0xA5u, 0x1A6u, 0x23u, 0, 2, 0, 0x8Du, 1u, 0x32u, "", 0);
+ ptr_507BD4->CreateButton(0x118u, 0x1A6u, 0x23u, 0, 2, 0, 0x8Du, 2u, 0x33u, "", 0);
+ ptr_507BD4->CreateButton(0x186u, 0x1A6u, 0x23u, 0, 2, 0, 0x8Du, 3u, 0x34u, "", 0);
v29 = 0;
- v28 = nullstring;
+ v28 = "";
v27 = 0;
v26 = 0;
v25 = 140;
@@ -2432,7 +2432,7 @@
0xBCu,
0,
0,
- nullstring,
+ "",
(Texture *)(uTextureID_507990 != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_507990] : 0),
0);
ptr_5079E8 = ptr_507BD4->CreateButton(
@@ -2445,10 +2445,10 @@
0xBCu,
1u,
0,
- nullstring,
+ "",
(Texture *)(uTextureID_50798C != -1 ? (int)&pIcons_LOD->pTextures[uTextureID_50798C] : 0),
0);
- ptr_507BD4->CreateButton(0x1EBu, 0x95u, 0x40u, 0x4Au, 1, 0, 0x8Fu, 4u, 0x35u, nullstring, 0);
+ ptr_507BD4->CreateButton(0x1EBu, 0x95u, 0x40u, 0x4Au, 1, 0, 0x8Fu, 4u, 0x35u, "", 0);
result = (bool)ptr_507BD4->CreateButton(
0x231u,
0x95u,
@@ -2459,7 +2459,7 @@
0x8Fu,
5u,
0x36u,
- nullstring,
+ "",
0);
}
}
@@ -3490,10 +3490,10 @@
if ( v17->WearsItem(510, 2) )
a1.uObjectDescID = pObjectList->ObjectIDByItemID(0xBD6u);
a1.vPosition.x = pParty->vPosition.x;
- a1.vPosition.y = pParty->vPosition.z;
+ a1.vPosition.y = pParty->vPosition.y;
a1.uAttributes = 0;
a1.uSpriteFrameID = 0;
- a1.vPosition.z = pParty->vPosition.y + (signed int)pParty->uPartyHeight / 3;
+ a1.vPosition.z = pParty->vPosition.z + (signed int)pParty->uPartyHeight / 3;
v19 = 8 * v3->uPlayerID;
LOBYTE(v19) = v19 | 4;
a1.field_58 = v19;
@@ -3528,10 +3528,10 @@
a1.field_50 = v731;
a1.uObjectDescID = pObjectList->ObjectIDByItemID(a1.uItemType);
a1.vPosition.x = pParty->vPosition.x;
- a1.vPosition.y = pParty->vPosition.z;
+ a1.vPosition.y = pParty->vPosition.y;
a1.uAttributes = 0;
a1.uSpriteFrameID = 0;
- a1.vPosition.z = pParty->vPosition.y + (signed int)pParty->uPartyHeight / 2;
+ a1.vPosition.z = pParty->vPosition.z + (signed int)pParty->uPartyHeight / 2;
v22 = 8 * v3->uPlayerID;
LOBYTE(v22) = v22 | 4;
a1.field_58 = v22;
@@ -3545,7 +3545,7 @@
* pParty->pPlayers[v3->uPlayerID].pEquipment.uMainHand
+ 5],
sizeof(a1.stru_24));
- v23 = pIndoor->GetSector(pParty->vPosition.x, pParty->vPosition.z, a1.vPosition.z);
+ v23 = pIndoor->GetSector(pParty->vPosition.x, pParty->vPosition.y, a1.vPosition.z);
HIBYTE(a1.uAttributes) |= 1u;
a1.uSectorID = v23;
if ( pParty->bTurnBasedModeOn == 1 )
@@ -3629,14 +3629,14 @@
a1.field_4C = v2;
a1.field_50 = v731;
a1.uObjectDescID = pObjectList->ObjectIDByItemID(a1.uItemType);
- a1.vPosition.y = pParty->vPosition.z;
+ a1.vPosition.y = pParty->vPosition.y;
a1.vPosition.x = pParty->vPosition.x;
a1.uAttributes = v1;
- a1.vPosition.z = pParty->vPosition.y + (signed int)pParty->uPartyHeight / 3;
+ a1.vPosition.z = pParty->vPosition.z + (signed int)pParty->uPartyHeight / 3;
a1.uSectorID = pIndoor->GetSector(
pParty->vPosition.x,
- pParty->vPosition.z,
- pParty->vPosition.y + (signed int)pParty->uPartyHeight / 3);
+ pParty->vPosition.y,
+ pParty->vPosition.z + (signed int)pParty->uPartyHeight / 3);
a1.uSpriteFrameID = v1;
v34 = 8 * v3->uPlayerID;
LOBYTE(v34) = v34 | 4;
@@ -3791,14 +3791,14 @@
a1.field_4C = v2;
a1.field_50 = v731;
a1.uObjectDescID = pObjectList->ObjectIDByItemID(a1.uItemType);
- a1.vPosition.y = pParty->vPosition.z;
+ a1.vPosition.y = pParty->vPosition.y;
a1.vPosition.x = pParty->vPosition.x;
a1.uAttributes = v1;
- a1.vPosition.z = pParty->vPosition.y + (signed int)pParty->uPartyHeight / 3;
+ a1.vPosition.z = pParty->vPosition.z + (signed int)pParty->uPartyHeight / 3;
a1.uSectorID = pIndoor->GetSector(
pParty->vPosition.x,
- pParty->vPosition.z,
- pParty->vPosition.y + (signed int)pParty->uPartyHeight / 3);
+ pParty->vPosition.y,
+ pParty->vPosition.z + (signed int)pParty->uPartyHeight / 3);
a1.uSpriteFrameID = v1;
v50 = 8 * v3->uPlayerID;
LOBYTE(v50) = v50 | 4;
@@ -3823,10 +3823,10 @@
a1.field_4C = v2;
a1.field_50 = v731;
a1.uObjectDescID = pObjectList->ObjectIDByItemID(a1.uItemType);
- v51 = pParty->vPosition.y + (signed int)pParty->uPartyHeight / 2;
- a1.vPosition.y = pParty->vPosition.z;
- v671 = pParty->vPosition.y + (signed int)pParty->uPartyHeight / 2;
- v660 = pParty->vPosition.z;
+ v51 = pParty->vPosition.z + (signed int)pParty->uPartyHeight / 2;
+ a1.vPosition.y = pParty->vPosition.y;
+ v671 = pParty->vPosition.z + (signed int)pParty->uPartyHeight / 2;
+ v660 = pParty->vPosition.y;
goto LABEL_153;
case 87:
if ( uCurrentlyLoadedLevelType == LEVEL_Indoor
@@ -3937,13 +3937,13 @@
a1.stru_24.Reset();
a1.uObjectDescID = pObjectList->ObjectIDByItemID(a1.uItemType);
a1.vPosition.x = pParty->vPosition.x;
- a1.vPosition.y = pParty->vPosition.z;
+ a1.vPosition.y = pParty->vPosition.y;
a1.uAttributes = v1;
- a1.vPosition.z = pParty->vPosition.y + (signed int)pParty->uPartyHeight / 3;
+ a1.vPosition.z = pParty->vPosition.z + (signed int)pParty->uPartyHeight / 3;
a1.uSectorID = pIndoor->GetSector(
pParty->vPosition.x,
- pParty->vPosition.z,
- pParty->vPosition.y + (signed int)pParty->uPartyHeight / 3);
+ pParty->vPosition.y,
+ pParty->vPosition.z + (signed int)pParty->uPartyHeight / 3);
a1.uSpriteFrameID = v1;
v62 = 8 * v3->uPlayerID;
LOBYTE(v62) = v62 | 4;
@@ -4308,8 +4308,8 @@
{
v730 = a2 >> 3;
v112 = &pActors[a2 >> 3];
- v726 = (Player *)abs(v112->vPosition.z - pParty->vPosition.y);
- v721 = abs(v112->vPosition.y - pParty->vPosition.z);
+ v726 = (Player *)abs(v112->vPosition.z - pParty->vPosition.z);
+ v721 = abs(v112->vPosition.y - pParty->vPosition.y);
v113 = abs(v112->vPosition.x - pParty->vPosition.x);
_this = (ItemGen *)v113;
v114 = v721;
@@ -4504,8 +4504,8 @@
v155 = stru_5C6E00->SinCos(pParty->sRotationY);
uRequiredMana = pParty->vPosition.x + sub_42EBBE(2048, v155);
v156 = stru_5C6E00->_42EBDB(pParty->sRotationY);
- LODWORD(v727) = pParty->vPosition.z + sub_42EBBE(2048, v156);
- v154 = pParty->vPosition.y;
+ LODWORD(v727) = pParty->vPosition.y + sub_42EBBE(2048, v156);
+ v154 = pParty->vPosition.z;
}
HIDWORD(v733) = v154;
v713 = v154 + 2500;
@@ -4728,14 +4728,14 @@
a1.field_4C = v2;
a1.field_50 = v731;
a1.uObjectDescID = pObjectList->ObjectIDByItemID(a1.uItemType);
- a1.vPosition.y = pParty->vPosition.z;
+ a1.vPosition.y = pParty->vPosition.y;
a1.vPosition.x = pParty->vPosition.x;
a1.uAttributes = v1;
- a1.vPosition.z = pParty->vPosition.y + (signed int)pParty->uPartyHeight / 3;
+ a1.vPosition.z = pParty->vPosition.z + (signed int)pParty->uPartyHeight / 3;
a1.uSectorID = pIndoor->GetSector(
pParty->vPosition.x,
- pParty->vPosition.z,
- pParty->vPosition.y + (signed int)pParty->uPartyHeight / 3);
+ pParty->vPosition.y,
+ pParty->vPosition.z + (signed int)pParty->uPartyHeight / 3);
a1.uSpriteFrameID = v1;
v187 = 8 * v3->uPlayerID;
LOBYTE(v187) = v187 | 4;
@@ -4909,8 +4909,8 @@
LODWORD(v718) = pParty->vPosition.x + sub_42EBBE(2048, v212);
v213 = stru_5C6E00->_42EBDB(pParty->sRotationY);
v214 = sub_42EBBE(2048, v213);
- v211 = pParty->vPosition.y;
- v713 = pParty->vPosition.z + v214;
+ v211 = pParty->vPosition.z;
+ v713 = pParty->vPosition.y + v214;
v208 = LODWORD(v725);
}
v726 = (Player *)v211;
@@ -5038,10 +5038,10 @@
a1.field_50 = v731;
a1.field_4C = v2;
a1.uObjectDescID = pObjectList->ObjectIDByItemID(a1.uItemType);
- a1.vPosition.y = pParty->vPosition.z;
- v51 = pParty->vPosition.y + (signed int)pParty->uPartyHeight / 3;
- v671 = pParty->vPosition.y + (signed int)pParty->uPartyHeight / 3;
- v660 = pParty->vPosition.z;
+ a1.vPosition.y = pParty->vPosition.y;
+ v51 = pParty->vPosition.z + (signed int)pParty->uPartyHeight / 3;
+ v671 = pParty->vPosition.z + (signed int)pParty->uPartyHeight / 3;
+ v660 = pParty->vPosition.y;
LABEL_153:
a1.uAttributes = v1;
a1.vPosition.x = pParty->vPosition.x;
@@ -5076,14 +5076,14 @@
a1.field_4C = v2;
a1.field_50 = v731;
a1.uObjectDescID = pObjectList->ObjectIDByItemID(a1.uItemType);
- a1.vPosition.y = pParty->vPosition.z;
+ a1.vPosition.y = pParty->vPosition.y;
a1.vPosition.x = pParty->vPosition.x;
a1.uAttributes = v1;
- a1.vPosition.z = pParty->vPosition.y + (signed int)pParty->uPartyHeight / 3;
+ a1.vPosition.z = pParty->vPosition.z + (signed int)pParty->uPartyHeight / 3;
a1.uSectorID = pIndoor->GetSector(
pParty->vPosition.x,
- pParty->vPosition.z,
- pParty->vPosition.y + (signed int)pParty->uPartyHeight / 3);
+ pParty->vPosition.y,
+ pParty->vPosition.z + (signed int)pParty->uPartyHeight / 3);
a1.uSpriteFrameID = v1;
v226 = 8 * v3->uPlayerID;
LOBYTE(v226) = v226 | 4;
@@ -5661,14 +5661,14 @@
a1.field_4C = v2;
a1.field_50 = v731;
a1.uObjectDescID = pObjectList->ObjectIDByItemID(a1.uItemType);
- a1.vPosition.y = pParty->vPosition.z;
+ a1.vPosition.y = pParty->vPosition.y;
a1.vPosition.x = pParty->vPosition.x;
a1.uAttributes = v1;
- a1.vPosition.z = pParty->vPosition.y + (signed int)pParty->uPartyHeight / 3;
+ a1.vPosition.z = pParty->vPosition.z + (signed int)pParty->uPartyHeight / 3;
a1.uSectorID = pIndoor->GetSector(
pParty->vPosition.x,
- pParty->vPosition.z,
- pParty->vPosition.y + (signed int)pParty->uPartyHeight / 3);
+ pParty->vPosition.y,
+ pParty->vPosition.z + (signed int)pParty->uPartyHeight / 3);
a1.uSpriteFrameID = v1;
v326 = 8 * v3->uPlayerID;
LOBYTE(v326) = v326 | 4;
@@ -5695,11 +5695,11 @@
a1.field_50 = v731;
a1.uObjectDescID = pObjectList->ObjectIDByItemID(a1.uItemType);
a1.vPosition.x = pParty->vPosition.x;
- a1.vPosition.y = pParty->vPosition.z;
+ a1.vPosition.y = pParty->vPosition.y;
a1.uAttributes = v1;
a1.uSectorID = v1;
a1.uSpriteFrameID = v1;
- a1.vPosition.z = pParty->vPosition.y + (signed int)pParty->uPartyHeight / 3;
+ a1.vPosition.z = pParty->vPosition.z + (signed int)pParty->uPartyHeight / 3;
v327 = 8 * v3->uPlayerID;
LOBYTE(v327) = v327 | 4;
a1.field_60_distance_related_prolly_lod = 0;
@@ -7360,13 +7360,13 @@
a1.field_50 = v731;
a1.uObjectDescID = pObjectList->ObjectIDByItemID(a1.uItemType);
a1.vPosition.x = pParty->vPosition.x;
- a1.vPosition.y = pParty->vPosition.z;
+ a1.vPosition.y = pParty->vPosition.y;
a1.uAttributes = v1;
- a1.vPosition.z = pParty->vPosition.y + (signed int)pParty->uPartyHeight / 2;
+ a1.vPosition.z = pParty->vPosition.z + (signed int)pParty->uPartyHeight / 2;
a1.uSectorID = pIndoor->GetSector(
pParty->vPosition.x,
- pParty->vPosition.z,
- pParty->vPosition.y + (signed int)pParty->uPartyHeight / 2);
+ pParty->vPosition.y,
+ pParty->vPosition.z + (signed int)pParty->uPartyHeight / 2);
a1.uSpriteFrameID = v1;
v595 = 8 * v3->uPlayerID;
LOBYTE(v595) = v595 | 4;
@@ -7694,7 +7694,7 @@
v642 = rand() % 4096 - 2048;
v643 = rand();
v721 = v642 + pParty->vPosition.x;
- y = (char *)(pParty->vPosition.z + v643 % 4096 - 2048);
+ y = (char *)(pParty->vPosition.y + v643 % 4096 - 2048);
v732 = GetTerrainHeightsAroundParty2(v642 + pParty->vPosition.x, (int)y, (int *)&v710, v1);
v644 = rand();
sub_42F7EB_DropItemAt(0xFE6u, v721, (int)y, v732 + 16, v644 % 500 + 500, 1, v1, v1, (ItemGen *)v1);
@@ -7909,7 +7909,7 @@
{
a2 = v34 >> 3;
v8 = &pActors[v34 >> 3];
- v34 = sub_452A9E((v8->vPosition.x - pParty->vPosition.x) * (v8->vPosition.x - pParty->vPosition.x) + (v8->vPosition.y - pParty->vPosition.z) * (v8->vPosition.y - pParty->vPosition.z) + (v8->vPosition.z - pParty->vPosition.y) * (v8->vPosition.z - pParty->vPosition.y))
+ v34 = sub_452A9E((v8->vPosition.x - pParty->vPosition.x) * (v8->vPosition.x - pParty->vPosition.x) + (v8->vPosition.y - pParty->vPosition.y) * (v8->vPosition.y - pParty->vPosition.y) + (v8->vPosition.z - pParty->vPosition.z) * (v8->vPosition.z - pParty->vPosition.z))
- v8->uActorRadius;
if ( v34 >= 0 )
{
@@ -7956,8 +7956,8 @@
if ( (double)v34 <= 407.2 )
{
a3.x = v8->vPosition.x - pParty->vPosition.x;
- a3.y = v8->vPosition.y - pParty->vPosition.z;
- a3.z = v8->vPosition.z - pParty->vPosition.y;
+ a3.y = v8->vPosition.y - pParty->vPosition.y;
+ a3.z = v8->vPosition.z - pParty->vPosition.z;
Vec3_int_::Normalize(&a3.x, &a3.y, &a3.z);
DamageMonsterFromParty((8 * v0 - 8) | 4, a2, &a3);
if ( v1->WearsItem(506, 1) || v1->WearsItem(506, 0) )
@@ -8321,8 +8321,8 @@
while ( 1 )
{
v2 = abs(*((short *)v1 - 17) - pParty->vPosition.x);
- v11 = abs(*((short *)v1 - 16) - pParty->vPosition.z);
- v12 = abs(*((short *)v1 - 15) - pParty->vPosition.y);
+ v11 = abs(*((short *)v1 - 16) - pParty->vPosition.y);
+ v12 = abs(*((short *)v1 - 15) - pParty->vPosition.z);
v3 = v2;
v4 = v11;
v5 = v12;
@@ -8862,8 +8862,6 @@
//----- (0042FC4E) --------------------------------------------------------
void __cdecl ProcessInputActions()
{
- Keyboard *v0; // ecx@1
- signed int _1; // ebx@7
ActionQueue *pActionQueue; // esi@7
Keyboard *v3; // ecx@8
char v4; // al@9
@@ -8889,24 +8887,27 @@
int v24; // [sp+4h] [bp-4h]@87
pGame->pKeyboardInstance->EnterCriticalSection();
- v0 = pGame->pKeyboardInstance;
- if ( !bAlwaysRun )
+ auto pKeyboard = pGame->pKeyboardInstance;
+ if (!bAlwaysRun)
{
- if ( v0->IsShiftHeld() )
- goto _set_running;
-_set_not_running:
- pParty->uFlags2 &= 0xFFFFFFFDu;
- goto LABEL_6;
+ if (pKeyboard->IsShiftHeld())
+ pParty->uFlags2 |= PARTY_FLAGS_2_RUNNING;
+ else
+ pParty->uFlags2 &= ~PARTY_FLAGS_2_RUNNING;
+ }
+ else
+ {
+ if (pKeyboard->IsShiftHeld())
+ pParty->uFlags2 &= ~PARTY_FLAGS_2_RUNNING;
+ else
+ pParty->uFlags2 |= PARTY_FLAGS_2_RUNNING;
}
- if ( v0->IsShiftHeld() )
- goto _set_not_running;
-_set_running:
+
pParty->uFlags2 |= PARTY_FLAGS_2_RUNNING;
LABEL_6:
if ( !pEventTimer->bPaused )
{
inputAction = (InputAction)0;
- _1 = 1;
pActionQueue = pPartyActionQueue;
while ( 1 )
{
@@ -8921,11 +8922,11 @@
switch ( inputAction )
{
case INPUT_MoveForward:
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions )
+ if ( pCurrentScreen )
break;
- if ( pParty->bTurnBasedModeOn != _1 )
+ if (!pParty->bTurnBasedModeOn)
goto _do_move_forward;
- if ( pTurnEngine->field_4 != _1 && pTurnEngine->field_4 != 2 && pTurnEngine->uActionPointsLeft > 0 )
+ if (pTurnEngine->field_4 != 1 && pTurnEngine->field_4 != 2 && pTurnEngine->uActionPointsLeft > 0 )
{
pTurnEngine->uActionPointsLeft -= 26;
_do_move_forward:
@@ -8938,11 +8939,12 @@
}
break;
case INPUT_MoveBackwards:
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions )
+ __debugbreak();
+ if ( pCurrentScreen )
break;
- if ( pParty->bTurnBasedModeOn != _1 )
+ if (!pParty->bTurnBasedModeOn)
goto _do_move_backwards;
- if ( pTurnEngine->field_4 != _1 && pTurnEngine->field_4 != 2 && pTurnEngine->uActionPointsLeft > 0 )
+ if ( pTurnEngine->field_4 != 1 && pTurnEngine->field_4 != 2 && pTurnEngine->uActionPointsLeft > 0 )
{
pTurnEngine->uActionPointsLeft -= 26;
_do_move_backwards:
@@ -8955,35 +8957,37 @@
}
break;
case INPUT_StrafeLeft:
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions )
+ __debugbreak();
+ if ( pCurrentScreen )
break;
- if ( pParty->bTurnBasedModeOn != _1 )
+ if (!pParty->bTurnBasedModeOn)
goto _do_strafe_left;
- if ( pTurnEngine->field_4 == _1 || pTurnEngine->field_4 == 2 || pTurnEngine->uActionPointsLeft <= 0 )
+ if ( pTurnEngine->field_4 == 1 || pTurnEngine->field_4 == 2 || pTurnEngine->uActionPointsLeft <= 0 )
break;
pTurnEngine->uActionPointsLeft -= 26;
_do_strafe_left:
partyAction = PARTY_StrafeLeft;
goto _add_action_and_continue_;
case INPUT_StrafeRight:
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions )
+ __debugbreak();
+ if ( pCurrentScreen )
break;
- if ( pParty->bTurnBasedModeOn != _1 )
+ if (!pParty->bTurnBasedModeOn)
goto _do_strafe_right;
- if ( pTurnEngine->field_4 == _1 || pTurnEngine->field_4 == 2 || pTurnEngine->uActionPointsLeft <= 0 )
+ if ( pTurnEngine->field_4 == 1 || pTurnEngine->field_4 == 2 || pTurnEngine->uActionPointsLeft <= 0 )
break;
pTurnEngine->uActionPointsLeft -= 26;
_do_strafe_right:
partyAction = PARTY_StrafeRight;
goto _add_action_and_continue_;
case INPUT_TurnLeft:
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions )
+ if ( pCurrentScreen )
break;
if ( GetAsyncKeyState(VK_CONTROL) ) // strafing
{
- if ( pParty->bTurnBasedModeOn == _1 )
+ if (pParty->bTurnBasedModeOn)
{
- if ( pTurnEngine->field_4 == _1 || pTurnEngine->field_4 == 2 || pTurnEngine->uActionPointsLeft <= 0 )
+ if ( pTurnEngine->field_4 == 1 || pTurnEngine->field_4 == 2 || pTurnEngine->uActionPointsLeft <= 0 )
break;
pTurnEngine->uActionPointsLeft -= 26;
}
@@ -8994,23 +8998,23 @@
if ( pParty->uFlags2 & 2 )
partyAction_ = PARTY_FastTurnLeft;
else
- partyAction_ = (PartyAction)_1;
+ partyAction_ = PARTY_TurnLeft;
}
pActionQueue->Add(partyAction_);
- if ( uCurrentlyLoadedLevelType == LEVEL_Outdoor && pWeather->bRenderSnow == _1 )
+ if (uCurrentlyLoadedLevelType == LEVEL_Outdoor && pWeather->bRenderSnow)
{
v20 = 10;
goto LABEL_75;
}
break;
case INPUT_TurnRight:
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions )
+ if ( pCurrentScreen )
break;
if ( GetAsyncKeyState(17) ) // strafing
{
- if ( pParty->bTurnBasedModeOn == _1 )
+ if (pParty->bTurnBasedModeOn)
{
- if ( pTurnEngine->field_4 == _1 || pTurnEngine->field_4 == 2 || pTurnEngine->uActionPointsLeft <= 0 )
+ if ( pTurnEngine->field_4 == 1 || pTurnEngine->field_4 == 2 || pTurnEngine->uActionPointsLeft <= 0 )
break;
pTurnEngine->uActionPointsLeft -= 26;
}
@@ -9024,7 +9028,7 @@
v21 = 2;
}
pActionQueue->Add((PartyAction)v21);
- if ( uCurrentlyLoadedLevelType == LEVEL_Outdoor && pWeather->bRenderSnow == _1 )
+ if (uCurrentlyLoadedLevelType == LEVEL_Outdoor && pWeather->bRenderSnow)
{
v20 = -10;
LABEL_75:
@@ -9032,13 +9036,15 @@
}
break;
case INPUT_Jump:
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions
- || pParty->bTurnBasedModeOn == _1 )
+ __debugbreak();
+ if ( pCurrentScreen
+ || pParty->bTurnBasedModeOn)
break;
partyAction = (PartyAction)12;
goto _add_action_and_continue_;
case INPUT_Yell:
- if ( !uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions
+ __debugbreak();
+ if ( !pCurrentScreen
&& uActiveCharacter )
{
pParty->Yell();
@@ -9046,9 +9052,10 @@
}
break;
case INPUT_Pass:
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions )
+ __debugbreak();
+ if ( pCurrentScreen )
break;
- if ( pParty->bTurnBasedModeOn == _1 && pTurnEngine->field_4 == 3 )
+ if (pParty->bTurnBasedModeOn && pTurnEngine->field_4 == 3)
goto LABEL_118;
if ( uActiveCharacter )
{
@@ -9065,27 +9072,29 @@
}
break;
case INPUT_Combat:
- if ( !uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions )
+ __debugbreak();
+ if ( !pCurrentScreen )
{
- if ( pParty->bTurnBasedModeOn == _1 )
+ if (pParty->bTurnBasedModeOn)
{
if ( pTurnEngine->field_4 == 3 || (pTurnEngine->pQueue[0].uPackedID & 7) == 4 )
{
pParty->bTurnBasedModeOn = 0;
- pTurnEngine->End(_1);
+ pTurnEngine->End(true);
}
}
else
{
pTurnEngine->Start();
- pParty->bTurnBasedModeOn = _1;
+ pParty->bTurnBasedModeOn = true;
}
}
break;
case INPUT_CastReady:
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions )
+ __debugbreak();
+ if ( pCurrentScreen )
break;
- if ( pParty->bTurnBasedModeOn == _1 && pTurnEngine->field_4 == 3 )
+ if (pParty->bTurnBasedModeOn && pTurnEngine->field_4 == 3)
goto LABEL_118;
if ( !uActiveCharacter )
break;
@@ -9097,7 +9106,6 @@
v10 > v7->sMana) )
{
pActionQueue = pPartyActionQueue;
- _1 = 1;
LABEL_120:
if ( (signed int)pMessageQueue_50CBD0->uNumMessages < 40 )
{
@@ -9115,36 +9123,37 @@
*(&dword_50C9E8 + 3 * dword_50C9E8 + 3) = 0;
++dword_50C9E8;
}
- _1 = 1;
}
break;
default:
+ __debugbreak();
break;
case INPUT_Attack:
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions )
+ __debugbreak();
+ if ( pCurrentScreen )
break;
- if ( pParty->bTurnBasedModeOn != _1 || pTurnEngine->field_4 != 3 )
+ if (!pParty->bTurnBasedModeOn || pTurnEngine->field_4 != 3)
goto LABEL_120;
LABEL_118:
pTurnEngine->field_18 |= 8u;
break;
case INPUT_EventTrigger:
- if ( !uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions )
+ if ( !pCurrentScreen )
{
if ( (signed int)pMessageQueue_50CBD0->uNumMessages >= 40 )
break;
pMessageQueue_50CBD0->pMessages[pMessageQueue_50CBD0->uNumMessages].eType = (UIMessageType)404;
goto _send_message;
}
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 4 )
+ if ( pCurrentScreen == 4 )
{
v11 = pMessageQueue_50CBD0->uNumMessages;
if ( pMessageQueue_50CBD0->uNumMessages )
{
if ( pMessageQueue_50CBD0->pMessages[0].field_8 )
{
- v11 = _1;
- pMessageQueue_50CBD0->uNumMessages = _1;
+ v11 = 1;
+ pMessageQueue_50CBD0->uNumMessages = 1;
LABEL_132:
pMessageQueue_50CBD0->pMessages[v11].eType = (UIMessageType)113;
_send_message:
@@ -9161,40 +9170,47 @@
}
break;
case INPUT_CharCycle:
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 8
+ __debugbreak();
+ if ( pCurrentScreen == 8
|| dword_50C9E8 >= 40 )
break;
dword_50C9EC[3 * dword_50C9E8] = 176;
goto LABEL_155;
case INPUT_LookUp:
+ __debugbreak();
if ( pEventTimer->bPaused )
break;
partyAction = (PartyAction)7;
goto _add_action_and_continue_;
case INPUT_CenterView:
+ __debugbreak();
if ( pEventTimer->bPaused )
break;
partyAction = (PartyAction)9;
goto _add_action_and_continue_;
case INPUT_LookDown:
+ __debugbreak();
if ( pEventTimer->bPaused )
break;
partyAction = (PartyAction)8;
goto _add_action_and_continue_;
case INPUT_FlyUp:
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions
+ __debugbreak();
+ if ( pCurrentScreen
|| pEventTimer->bPaused )
break;
partyAction = (PartyAction)13;
goto _add_action_and_continue_;
case INPUT_Land:
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions
+ __debugbreak();
+ if ( pCurrentScreen
|| pEventTimer->bPaused )
break;
partyAction = (PartyAction)15;
goto _add_action_and_continue_;
case INPUT_FlyDown:
- if ( !uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions
+ __debugbreak();
+ if ( !pCurrentScreen
&& !pEventTimer->bPaused )
{
partyAction = (PartyAction)14;
@@ -9205,11 +9221,13 @@
}
break;
case INPUT_ZoomIn:
+ __debugbreak();
if ( dword_50C9E8 >= 40 )
break;
dword_50C9EC[3 * dword_50C9E8] = 367;
goto LABEL_155;
case INPUT_ZoomOut:
+ __debugbreak();
if ( dword_50C9E8 < 40 )
{
dword_50C9EC[3 * dword_50C9E8] = 368;
@@ -9240,15 +9258,15 @@
v14 = v13->IsKeyBeingHeld(v22);
if ( v14 && v12 == 9 )
{
- if ( !uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions )
+ if ( !pCurrentScreen )
{
if ( (signed int)pMessageQueue_50CBD0->uNumMessages >= 40 )
goto LABEL_175;
pMessageQueue_50CBD0->pMessages[pMessageQueue_50CBD0->uNumMessages].eType = (UIMessageType)404;
goto LABEL_174;
}
- if ( uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 4
- || uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions == 19 )
+ if ( pCurrentScreen == 4
+ || pCurrentScreen == 19 )
{
v15 = pMessageQueue_50CBD0->uNumMessages;
if ( pMessageQueue_50CBD0->uNumMessages )
@@ -9278,7 +9296,7 @@
}
while ( v12 < 30 );
LABEL_176:
- if ( LOBYTE(pGame->pKeyboardInstance->bUsingAsynKeyboard) )
+ if (pGame->pKeyboardInstance->bUsingAsynKeyboard)
{
AsyncKeyboard::LeaveCriticalSection();
v16 = pAsyncKeyboard;
diff -r c83d06692295 -r c0cf9393af64 mm7_data.cpp
--- a/mm7_data.cpp Mon Oct 22 09:20:49 2012 +0600
+++ b/mm7_data.cpp Mon Oct 29 09:28:08 2012 +0600
@@ -316,10 +316,11 @@
+#include "stru314.h"
-char nullstring[1] = {0};
+
//-------------------------------------------------------------------------
// Data declarations
@@ -330,9 +331,8 @@
int dword_4C9920[16]; // weak
_UNKNOWN unk_4D8548; // weak
char byte_4D864C; // weak
-int dword_4D86CC; // weak
+float flt_4D86CC = 1.0f; // weak
int dword_4D86D8; // weak
-int dword_4D86F0; // weak
int dword_4DAFCC; // weak
int (__stdcall *off_4DAFDC)(char); // weak
char asc_4DB724[777]; // idb
@@ -351,6 +351,7 @@
int amuint_4E1870; // weak
int dword_4E1874; // weak
int dword_4E1878; // weak
+float flt_4D84E8 = 0.0f;
int dword_4E187C; // weak
int dword_4E1880; // weak
int dword_4E1884; // weak
@@ -389,10 +390,10 @@
int dword_4E20D0[777]; // idb
char byte_4E2430[777]; // weak
char byte_4E2431[777]; // weak
-unsigned int pLloydsBeaconsPreviewXs[5];
-int pLloydsBeaconsPreviewYs[5];
-unsigned int pLloydsBeacons_SomeXs[5];
-int pLloydsBeacons_SomeYs[777]; // idb
+unsigned int pLloydsBeaconsPreviewXs[5] = {61, 281, 61, 281, 171};
+unsigned int pLloydsBeaconsPreviewYs[5] = {84, 84, 228, 228, 155};
+unsigned int pLloydsBeacons_SomeXs[5] = {59, 279, 59, 279, 169};
+unsigned int pLloydsBeacons_SomeYs[5] = {82, 82, 226, 226, 153};
char aSbwb00[7]; // weak
char aW[2]; // idb
char aA[2]; // idb
@@ -470,7 +471,7 @@
char aS100110D[777]; // idb
char aS100110DS[777]; // idb
char aS100110D02dSS[777]; // idb
-int uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions; // weak
+int pCurrentScreen; // weak
char byte_4E28FC; // weak
unsigned int uGammaPos;
int dword_4E2910[777]; // weak
@@ -482,8 +483,8 @@
int dword_4E2A50[12];
int _4E2A80_skills[9];
unsigned __int8 pAwardsTextColors[20];
-unsigned int pHealthBarPos[4];
-unsigned int pManaBarPos[4];
+unsigned int pHealthBarPos[4] = {22, 137, 251, 366};
+unsigned int pManaBarPos[4] = {102, 217, 331, 447};
char _4E2AD8_ui_colors[72];
char _4E2B21_buff_spell_tooltip_colors[80];
char byte_4E2B70[777]; // weak
@@ -543,270 +544,12 @@
char aSS_0[777]; // idb
char aS_5[4]; // idb
_UNKNOWN unk_4E2EB8; // weak
-char aS_4[2]; // idb
-char aS_0[2]; // idb
-char byte_4E2F14; // idb
-char aFr_stats[777]; // idb
-char aS1772d[777]; // idb
-char aS_10[3]; // idb
-char aS177S[777]; // idb
-char aS4002d[777]; // idb
-char aS_9[3]; // idb
-char aS400S[777]; // idb
-char aS_8[38];
-char aFr_skill[777]; // idb
-char byte_4E2FD4[7];
-char aS_11[3]; // idb
-char aFr_award[777]; // idb
-char aSptext01[777]; // idb
-char aSp28a[6]; // weak
-char aSp30a[6]; // weak
-char aSp91a[6]; // weak
-char aFr_strip[777]; // idb
-char a261SD[777]; // idb
-char aS_12[4]; // idb
-char aD_2[4];
-char aLu[4];
-char aQuikref[777]; // idb
-char aIbCd1D[777]; // idb
-char aIbCd2D[777]; // idb
-char aIbCd4D[777]; // idb
-char aIbCd3D[777]; // idb
-char a028Lu[777]; // idb
-char a087Lu[777]; // idb
-char aComic_fnt[777]; // idb
-char aSmallnum_fnt[777]; // idb
-char aCreate_fnt[777]; // idb
-char aLucida_fnt[777]; // idb
-char aArrus_fnt[777]; // idb
-char aIbTd5A[777]; // idb
-char aIbTd4A[777]; // idb
-char aIbTd3A[777]; // idb
-char aIbTd2A[777]; // idb
-char aIbTd1A[777]; // idb
-char aButtmake2[777]; // idb
-char aButtmake[777]; // idb
-char aButtyes2[777]; // idb
-char aX_ok_u[777]; // idb
-char aButtesc2[777]; // idb
-char aX_x_u[777]; // idb
-char aIbground[777]; // idb
-char aLeather[777]; // idb
-char aMhp_yel[777]; // idb
-char aMhp_red[777]; // idb
-char aMhp_grn[777]; // idb
-char aMhp_capr[777]; // idb
-char aMhp_capl[777]; // idb
-char aMhp_bg[777]; // idb
-char aIbStatr[777]; // idb
-char aIbStaty[777]; // idb
-char aIbStatg[777]; // idb
-char aIbStatb[777]; // idb
-char aMapdir7[777]; // idb
-char aMapdir6[777]; // idb
-char aMapdir5[777]; // idb
-char aMapdir4[777]; // idb
-char aMapdir3[777]; // idb
-char aMapdir2[777]; // idb
-char aMapdir1[777]; // idb
-char aMapdir8[777]; // idb
-char aTorcha[777]; // idb
-char aTorchb[777]; // idb
-char aTorchc[777]; // idb
-char aWizeyea[777]; // idb
-char aWizeyeb[777]; // idb
-char aWizeyec[777]; // idb
-char aTest[777]; // idb
-char aMicon2[777]; // idb
-char aButton[777]; // idb
-char aDS[777]; // idb
-char a020[777]; // idb
-char aS_14[4]; // idb
-char aS_13[5]; // idb
char string_4E3294[8];
-char aDMn[777]; // idb
-char aDHr[777]; // idb
-char aDDy[777]; // idb
-char aDMo[777]; // idb
-char aDYr[777]; // idb
-char aDuration[777]; // idb
-char aSLu[777]; // idb
-char aSSD[777]; // idb
-char aSD_1[777]; // idb
-char aD_0[777]; // idb
-char aSDSDdD[777]; // idb
-char aS_21[2]; // idb
-char byte_4E3318; // idb
-char aS_20[2]; // idb
-char aS_19[2]; // idb
-char aS_18[2]; // idb
-char aS_17[2]; // idb
-char aS_16[2]; // idb
-char aS_15[2]; // idb
-char aTerra03d[777]; // idb
-char aRestexit[777]; // idb
-char aRestb4[777]; // idb
-char aRestb3[777]; // idb
-char aRestb2[777]; // idb
-char aRestb1[777]; // idb
-char aRestmain[777]; // idb
-char aD29_blv[777]; // idb
-char aS190D[777]; // idb
-char aD02dS[777]; // idb
-char a408D[777]; // idb
-char aHglas03d[777]; // idb
-char aChest02d[777]; // idb
-char aMicon1[777]; // idb
-char aEndcapB[777]; // idb
-char aEdge_topB[777]; // idb
-char aEdge_rtB[777]; // idb
-char aEdge_lfB[777]; // idb
-char aEdge_btmB[777]; // idb
-char aCornr_urB[777]; // idb
-char aCornr_ulB[777]; // idb
-char aCornr_lrB[777]; // idb
-char aCornr_llB[777]; // idb
-char aFr_invenB[777]; // idb
-char aEvtnpcB[777]; // idb
-char aIbBcuB[777]; // idb
-char aIsg04B[777]; // idb
-char aIsg03B[777]; // idb
-char aIsg02B[777]; // idb
-char aIsg01B[777]; // idb
-char aIbM4dB[777]; // idb
-char aIbM3dB[777]; // idb
-char aIbM2dB[777]; // idb
-char aIbM1dB[777]; // idb
-char aIbSelecB[777]; // idb
-char aIbAutinB[777]; // idb
-char aIbAutoutB[777]; // idb
-char aIbNpcrdB[777]; // idb
-char aIbNpcldB[777]; // idb
-char aIbInitrB[777]; // idb
-char aIbInityB[777]; // idb
-char aIbInitgB[777]; // idb
-char aIbCompB[777]; // idb
-char aIbAutmaskB[777]; // idb
-char aIbMbB[777]; // idb
-char aIbFootB_pcx[777]; // idb
-char aIbLB_pcx[777]; // idb
-char aIbTB_pcx[777]; // idb
-char aIbBB_pcx[777]; // idb
-char aIbRB_pcx[777]; // idb
-char aIbSelecA_0[777]; // idb
-char aIbNpcrdA_0[777]; // idb
-char aIbNpcldA_0[777]; // idb
-char aIbCompA_0[777]; // idb
-char aIbMbA_0[777]; // idb
-char aIbLA_pcx_0[777]; // idb
-char aIbTA_pcx_0[777]; // idb
-char aIbBA_pcx_0[777]; // idb
-char aIbRA_pcx_0[777]; // idb
-char aEndcap[777]; // idb
-char aEdge_top[777]; // idb
-char aEdge_rt[777]; // idb
-char aEdge_lf[777]; // idb
-char aEdge_btm[777]; // idb
-char aCornr_ur[777]; // idb
-char aCornr_ul[777]; // idb
-char aCornr_lr[777]; // idb
-char aCornr_ll[777]; // idb
-char aEvtnpc[777]; // idb
-char aIsg04A[777]; // idb
-char aIsg03A[777]; // idb
-char aIsg02A[777]; // idb
-char aIsg01A[777]; // idb
-char aIbBcuA[777]; // idb
-char aIbAutinA[777]; // idb
-char aIbAutoutA[777]; // idb
-char aIbM4dA[777]; // idb
-char aIbM3dA[777]; // idb
-char aIbM2dA[777]; // idb
-char aIbM1dA[777]; // idb
-char aIbSelecA[777]; // idb
-char aIbNpcrdA[777]; // idb
-char aIbNpcldA[777]; // idb
-char aIbInitrA[777]; // idb
-char aIbInityA[777]; // idb
-char aIbInitgA[777]; // idb
-char aIbCompA[777]; // idb
-char aIbAutmaskA[777]; // idb
-char aIbMbA[777]; // idb
-char aIbFootA_pcx[777]; // idb
-char aIbLA_pcx[11]; // weak
-char aIbTA_pcx[11]; // weak
-char aIbBA_pcx[11]; // weak
-char aIbRA_pcx[11]; // weak
-char aEndcapC[777]; // idb
-char aEdge_topC[777]; // idb
-char aEdge_rtC[777]; // idb
-char aEdge_lfC[777]; // idb
-char aEdge_btmC[777]; // idb
-char aCornr_urC[777]; // idb
-char aCornr_ulC[777]; // idb
-char aCornr_lrC[777]; // idb
-char aCornr_llC[777]; // idb
-char aParchment[777]; // idb
-char pContainer[777]; // idb
-char aIbBC_pcx_0[777]; // idb
-char aFr_inven[777]; // idb
-char aEvtnpcC[777]; // idb
-char aIsg04C[777]; // idb
-char aIsg03C[777]; // idb
-char aIsg02C[777]; // idb
-char aIsg01C[777]; // idb
-char aIbBcuC[777]; // idb
-char aIbM4dC[777]; // idb
-char aIbM3dC[777]; // idb
-char aIbM2dC[777]; // idb
-char aIbM1dC[777]; // idb
-char aIbSelecC[777]; // idb
-char aIbAutinC[777]; // idb
-char aIbAutoutC[777]; // idb
-char aIbNpcrdC[777]; // idb
-char aIbNpcldC[777]; // idb
-char aIbInitrC[777]; // idb
-char aIbInityC[777]; // idb
-char aIbInitgC[777]; // idb
-char aIbCompC[777]; // idb
-char aIbAutmaskC[777]; // idb
-char aIbMbC[777]; // idb
-char aIbFootC_pcx[777]; // idb
-char aIbLC_pcx[777]; // idb
-char aIbTC_pcx[777]; // idb
-char aIbBC_pcx[11]; // weak
-char aIbRC_pcx[777]; // idb
-char a10i10iS[777]; // idb
-char aSizeIII[777]; // idb
-char aDwavailvirtual[777]; // idb
-char aDwtotalvirtual[777]; // idb
-char aDwavailpagefil[777]; // idb
-char aDwtotalpagefil[777]; // idb
-char aDwavailphysD[777]; // idb
-char aDwtotalphysD[777]; // idb
-char aDwmemoryloadD[777]; // idb
-char aDwlengthD[777]; // idb
char Format[777]; // idb
char aMem03i_txt[777]; // idb
char aMemory[777]; // idb
char aIdSSizeI[16]; // idb
__int16 word_4E3C66[777]; // idb
-char aSpell96[777]; // idb
-char aNothing[777]; // idb
-char aS_22[5]; // weak
-char aDGold[777]; // idb
-char aSAndDGold[777]; // idb
-char aD05_blv[777]; // idb
-char aSpell11[777]; // idb
-char aAframe1[777]; // idb
-char aTurnstart[777]; // idb
-char aTurnhour[777]; // idb
-char aTurnstop[777]; // idb
-char aTurn4[777]; // idb
-char aTurn3[777]; // idb
-char aTurn2[777]; // idb
-char aTurn1[777]; // idb
-char aTurn0[777]; // idb
int dword_4E455C; // weak
int dword_4E4560[6];
int dword_4E4578[6];
@@ -818,7 +561,7 @@
char aButtexi1[777]; // idb
char aCanTJumpToThat[777]; // idb
char aNoMapFoundForS[777]; // idb
-char a2[777]; // idb
+char global_a2[777]; // idb
char aSSS[777]; // idb
char aNotInMapStats[17]; // weak
char aD47_blv[777]; // idb
@@ -1396,9 +1139,10 @@
char aInvalidLight_0[777]; // idb
char aUknownStripTyp[777]; // idb
char aInvalidLightma[777]; // idb
-char byte_4E94D0; // weak
-char byte_4E94D2; // weak
-char byte_4E94D3; // weak
+char byte_4E94D0 = 5; // weak
+char byte_4E94D1 = 9; // weak
+char _4E94D2_light_type = 6; // weak
+char byte_4E94D3 = 10; // weak
unsigned int saveload_dlg_xs[2] = {82, 0};
unsigned int saveload_dlg_ys[2] = {60, 0};
unsigned int saveload_dlg_zs[2] = {460, 640};
@@ -1943,25 +1687,66 @@
"pc21-", "pc22-", "pc23", "pc24-", "pc25-"
};
-const char *dlad_texnames_by_face[25];
-const char *dlau_texnames_by_face[25];
-const char *dbod_texnames_by_face[25];
-const char *drh_texnames_by_face[25];
-const char *dlh_texnames_by_face[25];
-const char *dlhu_texnames_by_face[25];
+const char *dlad_texnames_by_face[25] =
+{
+ "pc01lad", "pc02lad", "pc03lad", "pc04lad", "pc05lad", "pc06lad",
+ "pc07lad", "pc08lad", "pc09lad", "pc10lad", "pc11lad", "pc12lad",
+ "pc13lad", "pc14lad", "pc15lad", "pc16lad", "pc17lad", "pc18lad",
+ "pc19lad", "pc20lad", "pc21lad", "pc22lad", "pc23lad", "pc24lad",
+ "pc25lad"
+};
+const char *dlau_texnames_by_face[25] =
+{
+ "pc01lau", "pc02lau", "pc03lau", "pc04lau", "pc05lau", "pc06lau",
+ "pc07lau", "pc08lau", "pc09lau", "pc10lau", "pc11lau", "pc12lau",
+ "pc13lau", "pc14lau", "pc15lau", "pc16lau", "pc17lau", "pc18lau",
+ "pc19lau", "pc20lau", "pc21lau", "pc22lau", "pc23lau", "pc24lau",
+ "pc25lau"
+};
+const char *dbod_texnames_by_face[25] =
+{
+ "pc01bod", "pc02bod", "pc03bod", "pc04bod", "pc05bod", "pc06bod",
+ "pc07bod", "pc08bod", "pc09bod", "pc10bod", "pc11bod", "pc12bod",
+ "pc13bod", "pc14bod", "pc15bod", "pc16bod", "pc17bod", "pc18bod",
+ "pc19bod", "pc20bod", "pc21bod", "pc22bod", "pc23bod", "pc24bod",
+ "pc25bod"
+};
+const char *drh_texnames_by_face[25] =
+{
+
+ "pc01rh", "pc02rh", "pc03rh", "pc04rh", "pc05rh", "pc06rh",
+ "pc07rh", "pc08rh", "pc09rh", "pc10rh", "pc11rh", "pc12rh",
+ "pc13rh", "pc14rh", "pc15rh", "pc16rh", "pc17rh", "pc18rh",
+ "pc19rh", "pc20rh", "pc21rh", "pc22rh", "pc23rh", "pc24rh",
+ "pc25rh"
+};
+const char *dlh_texnames_by_face[25] =
+{
+ "pc01lh", "pc02lh", "pc03lh", "pc04lh", "pc05lh", "pc06lh",
+ "pc07lh", "pc08lh", "pc09lh", "pc10lh", "pc11lh", "pc12lh",
+ "pc13lh", "pc14lh", "pc15lh", "pc16lh", "pc17lh", "pc18lh",
+ "pc19lh", "pc20lh", "pc21lh", "pc22lh", "pc23lh", "pc24lh",
+ "pc25lh"
+};
+const char *dlhu_texnames_by_face[25] =
+{
+ "pc01lhu", "pc02lhu", "pc03lhu", "pc04lhu", "pc05lhu", "pc06lhu",
+ "pc07lhu", "pc08lhu", "pc09lhu", "pc10lhu", "pc11lhu", "pc12lhu",
+ "pc13lhu", "pc14lhu", "pc15lhu", "pc16lhu", "pc17lhu", "pc18lhu",
+ "pc19lhu", "pc20lhu", "pc21lhu", "pc22lhu", "pc23lhu", "pc24lhu",
+ "pc25lhu"
+};
_UNKNOWN unk_4ED3D8; // weak
unsigned char byte_4ED498 = 15; // weak
-__int16 pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing__negindex[777]; // weak
-__int16 pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[4];
+__int16 pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[4] = {34, 149, 264, 379};
char byte_4ED970_skill_learn_ability_by_class_table[32][37];
int dword_4EDEA0[777]; // weak
int dword_4EDEB4[777]; // weak
int dword_4EDEC4[777]; // weak
-__int16 word_4EDED8[777]; // weak
-__int16 word_4EDEDC; // weak
+__int16 word_4EDED8[16] = {100, 90, 60, 100, 80, 100, 80, 30, 10, 10, 20, 30, 100, 0, 0, 0};
_UNKNOWN unk_4EDF40; // weak
-unsigned int pHiredNPCsIconsOffsetsX[2];
-unsigned int pHiredNPCsIconsOffsetsY[2];
+unsigned int pHiredNPCsIconsOffsetsX[2] = {489, 559};
+unsigned int pHiredNPCsIconsOffsetsY[2] = {152, 152};
int dword_4EE07C[2]; // weak
_UNKNOWN unk_4EE084; // weak
__int16 word_4EE088_sound_ids[100] =
@@ -1985,81 +1770,6 @@
char aDD[777]; // idb
char off_4EE75C[777]; // idb
-char aFacemask[777]; // idb
-char aDead_0[777]; // idb
-char aEradcate[777]; // idb
-char aS02d[777]; // idb
-char aUnableToSaveDp[777]; // idb
-char aDataDpft_bin[777]; // idb
-char aPlayerframet_1[777]; // idb
-char aPlayerframet_0[777]; // idb
-char aPlayerframetab[777]; // idb
-char aUnableToSaveDi[777]; // idb
-char aDataDift_bin[777]; // idb
-char aIFrames[777]; // idb
-char aIconframetab_0[777]; // idb
-char aIconframetable[777]; // idb
-char aInvalidStrin_1[22]; // weak
-char a03uS[777]; // idb
-char aS03dD[777]; // idb
-char aCchar_fnt[777]; // idb
-char aArrowrD[777]; // idb
-char aArrowlD[777]; // idb
-char aPresleft[777]; // idb
-char aPresrigh[777]; // idb
-char aButtplus[777]; // idb
-char aButtminu[777]; // idb
-char aS01[777]; // idb
-char aMakesky[777]; // idb
-char aMaketop[777]; // idb
-char aIc_sorc[777]; // idb
-char aIc_druid[777]; // idb
-char aIc_cler[777]; // idb
-char aIc_ranger[777]; // idb
-char aIc_arch[777]; // idb
-char aIc_palad[777]; // idb
-char aIc_monk[777]; // idb
-char aIc_thief[777]; // idb
-char aIc_knight[777]; // idb
-char aScrollermap[777]; // idb
-char aCredits_txt[777]; // idb
-char aMm6title_pcx[13]; // weak
-char aQuick_fnt[777]; // idb
-char aL_map[777]; // idb
-char aL_bsp[777]; // idb
-char aL_d[777]; // idb
-char aL_l[777]; // idb
-char aL_r[777]; // idb
-char aL_fx[777]; // idb
-char aL_f[777]; // idb
-char aL_v[777]; // idb
-char aD29_dlv[777]; // idb
-char a_dlv[777]; // idb
-char aEWorkMsdevM_20[777]; // idb
-char a_blv[777]; // idb
-char aL_ddata[777]; // idb
-char aL_rldata[777]; // idb
-char aL_rdata[777]; // idb
-char aL_fdata[777]; // idb
-char aHwsplat04[777]; // idb
-char aErrorFailedT_0[777]; // idb
-char aEWorkMsdevM_21[777]; // idb
-char aReferenceRaste[777]; // idb
-char aRgbEmulation[777]; // idb
-char aInitFailedTo_7[777]; // idb
-char aInitFailedTo_6[777]; // idb
-char aInitFailedToAt[777]; // idb
-char aInitFailedTo_5[777]; // idb
-char aInitFailedToGe[37]; // weak
-char aInitFailedTo_4[39]; // weak
-char aInitFailedTo_3[36]; // weak
-char aInitFailedToEn[46]; // weak
-char aInitFailedTo_2[34]; // weak
-char aInitFailedTo_1[38]; // weak
-char aInitDesktopIsn[777]; // idb
-char aInitFailedToSe[777]; // idb
-char aInitFailedTo_0[777]; // idb
-char aInitFailedToCr[777]; // idb
int dword_4EED78; // weak
_UNKNOWN unk_4EED80; // weak
int dword_4EFA80; // weak
@@ -2248,9 +1958,7 @@
int ai_arrays_size; // weak
int ai_array_4F75E0[500];
unsigned int ai_array_4F7DB0_actor_ids[500];
-int dword_4F8580[777]; // weak
-int dword_4F8584[777]; // weak
-int dword_4F8588[777]; // weak
+int dword_4F8580[182]; // weak
int dword_4FA9B0[777]; // weak
int dword_4FA9B4[777]; // weak
char byte_4FAA00; // weak
@@ -2332,7 +2040,6 @@
int dword_506408[777]; // weak
int dword_50640C[777]; // weak
unsigned int uTextureID_506438;
-_UNKNOWN unk_506494; // weak
int dword_50651C; // weak
int dword_506520; // weak
int dword_506524; // weak
@@ -2407,19 +2114,18 @@
int dword_50B638[777]; // weak
int dword_50B700; // weak
int dword_50B738[777]; // idb
-int _50B744_view_transformed_ys_minus1[777]; // weak
int _50B744_view_transformed_ys[43];
int dword_50B828[777];
-int _50B834_view_transformed_zs_minus1[777]; // weak
int _50B834_view_transformed_zs[43];
int dword_50B918[777];
-int _50B924_view_transformed_xs_minus1[777]; // idb
int _50B924_view_transformed_xs[43];
int unk_50B9D4[777]; // idb
int dword_50B9D8_ys[777];
int dword_50B9E0_ys[777]; // idb
int dword_50B9EC[777]; // idb
int dword_50B9F0[2]; // idb
+int dword_50BAE8_xs[777];
+int dword_50BAF4_xs[777];
int dword_50B9F8[777]; // idb
int dword_50BA08[777]; // idb
int dword_50BAC4[777]; // weak
@@ -2609,9 +2315,8 @@
int _6807E8_level_decorations_ids[777]; // idb
int _6836C8_num_decorations_6807E8; // weak
int dword_69B010[64];
-int dword_69B138; // weak
+float flt_69B138_dist; // weak
char byte_69BD41_unused; // weak
-std::string stru_69BD44; // idb
unsigned int uTextureID_x_u;
unsigned int uTextureID_LS_saveU;
unsigned int uTextureID_LS_loadU;
@@ -2671,7 +2376,7 @@
int dword_6BE138; // weak
int dword_6BE13C_uCurrentlyLoadedLocationID; // weak
float fWalkSpeedMultiplier = 1.0f; // weak
-float fBackwardMovementSlowdownMultiplier = 1.0f; // weak
+float fBackwardWalkSpeedMultiplier = 1.0f; // weak
float fTurnSpeedMultiplier = 1.0f; // weak
float flt_6BE150_look_up_down_dangle = 1.0f; // weak
HWND hWnd; // idb
@@ -2722,11 +2427,11 @@
int uTextureID_720980; // weak
int _720984_unused; // weak
char _72098C_unused; // weak
-std::string std__string_720990; // idb
__int16 word_7209A0_intercepts_ys_plus_ys[104];
__int16 word_720A70_intercepts_xs_plus_xs[104];
__int16 word_720B40_intercepts_zs[104];
-__int16 word_720C10_intercepts_xs[104];
+__int16 word_720C10_intercepts_xs[102];
+int dword_720CDC;
__int16 word_720CE0_ys[777]; // idb
__int16 word_720DB0_xs[777]; // idb
int dword_720E80[20];
@@ -2739,8 +2444,8 @@
int dword_7211B0[777]; // idb
int dword_721200[777]; // idb
int dword_7212C8[777]; // idb
-__int16 word_721390[777]; // idb
-__int16 word_721460[777]; // idb
+__int16 word_721390[104]; // idb
+__int16 word_721460[104]; // idb
int blv_prev_party_x; // weak
int blv_prev_party_z; // weak
int blv_prev_party_y; // weak
@@ -2829,7 +2534,6 @@
struct Texture *pTexture_PlayerFaceMask;
struct Texture *pTexture_PlayerFaceEradicated;
struct Texture *pTexture_PlayerFaceDead;
-int A74CEC_player_faces_minus1_indexing[777]; // weak
struct Texture *pTextures_PlayerFaces[4][56];
int dword_A75070; // weak
struct Player *pPlayers[5];
@@ -2845,12 +2549,7 @@
char byte_AE336B; // weak
int dword_AE336C; // weak
int dword_AE3370; // weak
-Vec3_float_ stru_AE4F64; // idb
-Vec3_float_ stru_AE4F70; // idb
-Vec3_float_ stru_AE4F7C; // idb
-int dword_AE4F88; // weak
char byte_AE5B91; // weak
-std::string std__string_AE5B94; // idb
int dword_F1B430[32]; // weak
int dword_F8B144; // idb
char byte_F8B148[16];
@@ -2889,5 +2588,4 @@
//int crt_F94004; // weak
//int crtdword_F9400C; // weak
-FARPROC lpfn; // idb
-float flt_F942B0; // weak
\ No newline at end of file
+FARPROC lpfn; // idb
\ No newline at end of file
diff -r c83d06692295 -r c0cf9393af64 mm7_data.h
--- a/mm7_data.h Mon Oct 22 09:20:49 2012 +0600
+++ b/mm7_data.h Mon Oct 29 09:28:08 2012 +0600
@@ -317,9 +317,8 @@
extern int dword_4C9920[16]; // weak
extern _UNKNOWN unk_4D8548; // weak
extern char byte_4D864C; // weak
-extern int dword_4D86CC; // weak
+extern float flt_4D86CC; // weak
extern int dword_4D86D8; // weak
-extern int dword_4D86F0; // weak
extern int dword_4DAFCC; // weak
extern int (__stdcall *off_4DAFDC)(char); // weak
extern char asc_4DB724[]; // idb
@@ -338,6 +337,7 @@
extern int amuint_4E1870; // weak
extern int dword_4E1874; // weak
extern int dword_4E1878; // weak
+extern float flt_4D84E8;
extern int dword_4E187C; // weak
extern int dword_4E1880; // weak
extern int dword_4E1884; // weak
@@ -377,9 +377,9 @@
extern char byte_4E2430[]; // weak
extern char byte_4E2431[]; // weak
extern unsigned int pLloydsBeaconsPreviewXs[5];
-extern int pLloydsBeaconsPreviewYs[5];
+extern unsigned int pLloydsBeaconsPreviewYs[5];
extern unsigned int pLloydsBeacons_SomeXs[5];
-extern int pLloydsBeacons_SomeYs[]; // idb
+extern unsigned int pLloydsBeacons_SomeYs[5]; // idb
extern char aSbwb00[7]; // weak
extern char aW[2]; // idb
extern char aA[2]; // idb
@@ -457,7 +457,7 @@
extern char aS100110D[]; // idb
extern char aS100110DS[]; // idb
extern char aS100110D02dSS[]; // idb
-extern int uGame_if_0_else_ui_id__11_save__else_load__8_drawSpellInfoPopup__22_final_window__26_keymapOptions__2_options__28_videoOptions; // weak
+extern int pCurrentScreen; // weak
extern char byte_4E28FC; // weak
extern unsigned int uGammaPos;
extern int dword_4E2910[]; // weak
@@ -530,270 +530,12 @@
extern char aSS_0[]; // idb
extern char aS_5[4]; // idb
extern _UNKNOWN unk_4E2EB8; // weak
-extern char aS_4[2]; // idb
-extern char aS_0[2]; // idb
-extern char byte_4E2F14; // idb
-extern char aFr_stats[]; // idb
-extern char aS1772d[]; // idb
-extern char aS_10[3]; // idb
-extern char aS177S[]; // idb
-extern char aS4002d[]; // idb
-extern char aS_9[3]; // idb
-extern char aS400S[]; // idb
-extern char aS_8[38];
-extern char aFr_skill[]; // idb
-extern char byte_4E2FD4[7];
-extern char aS_11[3]; // idb
-extern char aFr_award[]; // idb
-extern char aSptext01[]; // idb
-extern char aSp28a[6]; // weak
-extern char aSp30a[6]; // weak
-extern char aSp91a[6]; // weak
-extern char aFr_strip[]; // idb
-extern char a261SD[]; // idb
-extern char aS_12[4]; // idb
-extern char aD_2[4];
-extern char aLu[4];
-extern char aQuikref[]; // idb
-extern char aIbCd1D[]; // idb
-extern char aIbCd2D[]; // idb
-extern char aIbCd4D[]; // idb
-extern char aIbCd3D[]; // idb
-extern char a028Lu[]; // idb
-extern char a087Lu[]; // idb
-extern char aComic_fnt[]; // idb
-extern char aSmallnum_fnt[]; // idb
-extern char aCreate_fnt[]; // idb
-extern char aLucida_fnt[]; // idb
-extern char aArrus_fnt[]; // idb
-extern char aIbTd5A[]; // idb
-extern char aIbTd4A[]; // idb
-extern char aIbTd3A[]; // idb
-extern char aIbTd2A[]; // idb
-extern char aIbTd1A[]; // idb
-extern char aButtmake2[]; // idb
-extern char aButtmake[]; // idb
-extern char aButtyes2[]; // idb
-extern char aX_ok_u[]; // idb
-extern char aButtesc2[]; // idb
-extern char aX_x_u[]; // idb
-extern char aIbground[]; // idb
-extern char aLeather[]; // idb
-extern char aMhp_yel[]; // idb
-extern char aMhp_red[]; // idb
-extern char aMhp_grn[]; // idb
-extern char aMhp_capr[]; // idb
-extern char aMhp_capl[]; // idb
-extern char aMhp_bg[]; // idb
-extern char aIbStatr[]; // idb
-extern char aIbStaty[]; // idb
-extern char aIbStatg[]; // idb
-extern char aIbStatb[]; // idb
-extern char aMapdir7[]; // idb
-extern char aMapdir6[]; // idb
-extern char aMapdir5[]; // idb
-extern char aMapdir4[]; // idb
-extern char aMapdir3[]; // idb
-extern char aMapdir2[]; // idb
-extern char aMapdir1[]; // idb
-extern char aMapdir8[]; // idb
-extern char aTorcha[]; // idb
-extern char aTorchb[]; // idb
-extern char aTorchc[]; // idb
-extern char aWizeyea[]; // idb
-extern char aWizeyeb[]; // idb
-extern char aWizeyec[]; // idb
-extern char aTest[]; // idb
-extern char aMicon2[]; // idb
-extern char aButton[]; // idb
-extern char aDS[]; // idb
-extern char a020[]; // idb
-extern char aS_14[4]; // idb
-extern char aS_13[5]; // idb
extern char string_4E3294[8];
-extern char aDMn[]; // idb
-extern char aDHr[]; // idb
-extern char aDDy[]; // idb
-extern char aDMo[]; // idb
-extern char aDYr[]; // idb
-extern char aDuration[]; // idb
-extern char aSLu[]; // idb
-extern char aSSD[]; // idb
-extern char aSD_1[]; // idb
-extern char aD_0[]; // idb
-extern char aSDSDdD[]; // idb
-extern char aS_21[2]; // idb
-extern char byte_4E3318; // idb
-extern char aS_20[2]; // idb
-extern char aS_19[2]; // idb
-extern char aS_18[2]; // idb
-extern char aS_17[2]; // idb
-extern char aS_16[2]; // idb
-extern char aS_15[2]; // idb
-extern char aTerra03d[]; // idb
-extern char aRestexit[]; // idb
-extern char aRestb4[]; // idb
-extern char aRestb3[]; // idb
-extern char aRestb2[]; // idb
-extern char aRestb1[]; // idb
-extern char aRestmain[]; // idb
-extern char aD29_blv[]; // idb
-extern char aS190D[]; // idb
-extern char aD02dS[]; // idb
-extern char a408D[]; // idb
-extern char aHglas03d[]; // idb
-extern char aChest02d[]; // idb
-extern char aMicon1[]; // idb
-extern char aEndcapB[]; // idb
-extern char aEdge_topB[]; // idb
-extern char aEdge_rtB[]; // idb
-extern char aEdge_lfB[]; // idb
-extern char aEdge_btmB[]; // idb
-extern char aCornr_urB[]; // idb
-extern char aCornr_ulB[]; // idb
-extern char aCornr_lrB[]; // idb
-extern char aCornr_llB[]; // idb
-extern char aFr_invenB[]; // idb
-extern char aEvtnpcB[]; // idb
-extern char aIbBcuB[]; // idb
-extern char aIsg04B[]; // idb
-extern char aIsg03B[]; // idb
-extern char aIsg02B[]; // idb
-extern char aIsg01B[]; // idb
-extern char aIbM4dB[]; // idb
-extern char aIbM3dB[]; // idb
-extern char aIbM2dB[]; // idb
-extern char aIbM1dB[]; // idb
-extern char aIbSelecB[]; // idb
-extern char aIbAutinB[]; // idb
-extern char aIbAutoutB[]; // idb
-extern char aIbNpcrdB[]; // idb
-extern char aIbNpcldB[]; // idb
-extern char aIbInitrB[]; // idb
-extern char aIbInityB[]; // idb
-extern char aIbInitgB[]; // idb
-extern char aIbCompB[]; // idb
-extern char aIbAutmaskB[]; // idb
-extern char aIbMbB[]; // idb
-extern char aIbFootB_pcx[]; // idb
-extern char aIbLB_pcx[]; // idb
-extern char aIbTB_pcx[]; // idb
-extern char aIbBB_pcx[]; // idb
-extern char aIbRB_pcx[]; // idb
-extern char aIbSelecA_0[]; // idb
-extern char aIbNpcrdA_0[]; // idb
-extern char aIbNpcldA_0[]; // idb
-extern char aIbCompA_0[]; // idb
-extern char aIbMbA_0[]; // idb
-extern char aIbLA_pcx_0[]; // idb
-extern char aIbTA_pcx_0[]; // idb
-extern char aIbBA_pcx_0[]; // idb
-extern char aIbRA_pcx_0[]; // idb
-extern char aEndcap[]; // idb
-extern char aEdge_top[]; // idb
-extern char aEdge_rt[]; // idb
-extern char aEdge_lf[]; // idb
-extern char aEdge_btm[]; // idb
-extern char aCornr_ur[]; // idb
-extern char aCornr_ul[]; // idb
-extern char aCornr_lr[]; // idb
-extern char aCornr_ll[]; // idb
-extern char aEvtnpc[]; // idb
-extern char aIsg04A[]; // idb
-extern char aIsg03A[]; // idb
-extern char aIsg02A[]; // idb
-extern char aIsg01A[]; // idb
-extern char aIbBcuA[]; // idb
-extern char aIbAutinA[]; // idb
-extern char aIbAutoutA[]; // idb
-extern char aIbM4dA[]; // idb
-extern char aIbM3dA[]; // idb
-extern char aIbM2dA[]; // idb
-extern char aIbM1dA[]; // idb
-extern char aIbSelecA[]; // idb
-extern char aIbNpcrdA[]; // idb
-extern char aIbNpcldA[]; // idb
-extern char aIbInitrA[]; // idb
-extern char aIbInityA[]; // idb
-extern char aIbInitgA[]; // idb
-extern char aIbCompA[]; // idb
-extern char aIbAutmaskA[]; // idb
-extern char aIbMbA[]; // idb
-extern char aIbFootA_pcx[]; // idb
-extern char aIbLA_pcx[11]; // weak
-extern char aIbTA_pcx[11]; // weak
-extern char aIbBA_pcx[11]; // weak
-extern char aIbRA_pcx[11]; // weak
-extern char aEndcapC[]; // idb
-extern char aEdge_topC[]; // idb
-extern char aEdge_rtC[]; // idb
-extern char aEdge_lfC[]; // idb
-extern char aEdge_btmC[]; // idb
-extern char aCornr_urC[]; // idb
-extern char aCornr_ulC[]; // idb
-extern char aCornr_lrC[]; // idb
-extern char aCornr_llC[]; // idb
-extern char aParchment[]; // idb
-extern char pContainer[]; // idb
-extern char aIbBC_pcx_0[]; // idb
-extern char aFr_inven[]; // idb
-extern char aEvtnpcC[]; // idb
-extern char aIsg04C[]; // idb
-extern char aIsg03C[]; // idb
-extern char aIsg02C[]; // idb
-extern char aIsg01C[]; // idb
-extern char aIbBcuC[]; // idb
-extern char aIbM4dC[]; // idb
-extern char aIbM3dC[]; // idb
-extern char aIbM2dC[]; // idb
-extern char aIbM1dC[]; // idb
-extern char aIbSelecC[]; // idb
-extern char aIbAutinC[]; // idb
-extern char aIbAutoutC[]; // idb
-extern char aIbNpcrdC[]; // idb
-extern char aIbNpcldC[]; // idb
-extern char aIbInitrC[]; // idb
-extern char aIbInityC[]; // idb
-extern char aIbInitgC[]; // idb
-extern char aIbCompC[]; // idb
-extern char aIbAutmaskC[]; // idb
-extern char aIbMbC[]; // idb
-extern char aIbFootC_pcx[]; // idb
-extern char aIbLC_pcx[]; // idb
-extern char aIbTC_pcx[]; // idb
-extern char aIbBC_pcx[11]; // weak
-extern char aIbRC_pcx[]; // idb
-extern char a10i10iS[]; // idb
-extern char aSizeIII[]; // idb
-extern char aDwavailvirtual[]; // idb
-extern char aDwtotalvirtual[]; // idb
-extern char aDwavailpagefil[]; // idb
-extern char aDwtotalpagefil[]; // idb
-extern char aDwavailphysD[]; // idb
-extern char aDwtotalphysD[]; // idb
-extern char aDwmemoryloadD[]; // idb
-extern char aDwlengthD[]; // idb
extern char Format[]; // idb
extern char aMem03i_txt[]; // idb
extern char aMemory[]; // idb
extern char aIdSSizeI[16]; // idb
extern __int16 word_4E3C66[]; // idb
-extern char aSpell96[]; // idb
-extern char aNothing[]; // idb
-extern char aS_22[5]; // weak
-extern char aDGold[]; // idb
-extern char aSAndDGold[]; // idb
-extern char aD05_blv[]; // idb
-extern char aSpell11[]; // idb
-extern char aAframe1[]; // idb
-extern char aTurnstart[]; // idb
-extern char aTurnhour[]; // idb
-extern char aTurnstop[]; // idb
-extern char aTurn4[]; // idb
-extern char aTurn3[]; // idb
-extern char aTurn2[]; // idb
-extern char aTurn1[]; // idb
-extern char aTurn0[]; // idb
extern int dword_4E455C; // weak
extern int dword_4E4560[6];
extern int dword_4E4578[6];
@@ -805,7 +547,7 @@
extern char aButtexi1[]; // idb
extern char aCanTJumpToThat[]; // idb
extern char aNoMapFoundForS[]; // idb
-extern char a2[]; // idb
+extern char global_a2[]; // idb
extern char aSSS[]; // idb
extern char aNotInMapStats[17]; // weak
extern char aD47_blv[]; // idb
@@ -1374,7 +1116,7 @@
extern char aUknownStripTyp[]; // idb
extern char aInvalidLightma[]; // idb
extern char byte_4E94D0; // weak
-extern char byte_4E94D2; // weak
+extern char _4E94D2_light_type; // weak
extern char byte_4E94D3; // weak
extern unsigned int saveload_dlg_xs[2];
extern unsigned int saveload_dlg_ys[2];
@@ -1920,14 +1662,12 @@
extern const char *dlhu_texnames_by_face[25];
extern _UNKNOWN unk_4ED3D8; // weak
extern unsigned char byte_4ED498; // weak
-extern __int16 pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing__negindex[]; // weak
extern __int16 pPlayerPortraitsXCoords_For_PlayerBuffAnimsDrawing[4];
extern char byte_4ED970_skill_learn_ability_by_class_table[32][37];
extern int dword_4EDEA0[]; // weak
extern int dword_4EDEB4[]; // weak
extern int dword_4EDEC4[]; // weak
extern __int16 word_4EDED8[]; // weak
-extern __int16 word_4EDEDC; // weak
extern _UNKNOWN unk_4EDF40; // weak
extern unsigned int pHiredNPCsIconsOffsetsX[2];
extern unsigned int pHiredNPCsIconsOffsetsY[2];
@@ -1937,81 +1677,6 @@
extern short word_4EE150[];
extern char aDD[]; // idb
extern char off_4EE75C[]; // idb
-extern char aFacemask[]; // idb
-extern char aDead_0[]; // idb
-extern char aEradcate[]; // idb
-extern char aS02d[]; // idb
-extern char aUnableToSaveDp[]; // idb
-extern char aDataDpft_bin[]; // idb
-extern char aPlayerframet_1[]; // idb
-extern char aPlayerframet_0[]; // idb
-extern char aPlayerframetab[]; // idb
-extern char aUnableToSaveDi[]; // idb
-extern char aDataDift_bin[]; // idb
-extern char aIFrames[]; // idb
-extern char aIconframetab_0[]; // idb
-extern char aIconframetable[]; // idb
-extern char aInvalidStrin_1[22]; // weak
-extern char a03uS[]; // idb
-extern char aS03dD[]; // idb
-extern char aCchar_fnt[]; // idb
-extern char aArrowrD[]; // idb
-extern char aArrowlD[]; // idb
-extern char aPresleft[]; // idb
-extern char aPresrigh[]; // idb
-extern char aButtplus[]; // idb
-extern char aButtminu[]; // idb
-extern char aS01[]; // idb
-extern char aMakesky[]; // idb
-extern char aMaketop[]; // idb
-extern char aIc_sorc[]; // idb
-extern char aIc_druid[]; // idb
-extern char aIc_cler[]; // idb
-extern char aIc_ranger[]; // idb
-extern char aIc_arch[]; // idb
-extern char aIc_palad[]; // idb
-extern char aIc_monk[]; // idb
-extern char aIc_thief[]; // idb
-extern char aIc_knight[]; // idb
-extern char aScrollermap[]; // idb
-extern char aCredits_txt[]; // idb
-extern char aMm6title_pcx[13]; // weak
-extern char aQuick_fnt[]; // idb
-extern char aL_map[]; // idb
-extern char aL_bsp[]; // idb
-extern char aL_d[]; // idb
-extern char aL_l[]; // idb
-extern char aL_r[]; // idb
-extern char aL_fx[]; // idb
-extern char aL_f[]; // idb
-extern char aL_v[]; // idb
-extern char aD29_dlv[]; // idb
-extern char a_dlv[]; // idb
-extern char aEWorkMsdevM_20[]; // idb
-extern char a_blv[]; // idb
-extern char aL_ddata[]; // idb
-extern char aL_rldata[]; // idb
-extern char aL_rdata[]; // idb
-extern char aL_fdata[]; // idb
-extern char aHwsplat04[]; // idb
-extern char aErrorFailedT_0[]; // idb
-extern char aEWorkMsdevM_21[]; // idb
-extern char aReferenceRaste[]; // idb
-extern char aRgbEmulation[]; // idb
-extern char aInitFailedTo_7[]; // idb
-extern char aInitFailedTo_6[]; // idb
-extern char aInitFailedToAt[]; // idb
-extern char aInitFailedTo_5[]; // idb
-extern char aInitFailedToGe[37]; // weak
-extern char aInitFailedTo_4[39]; // weak
-extern char aInitFailedTo_3[36]; // weak
-extern char aInitFailedToEn[46]; // weak
-extern char aInitFailedTo_2[34]; // weak
-extern char aInitFailedTo_1[38]; // weak
-extern char aInitDesktopIsn[]; // idb
-extern char aInitFailedToSe[]; // idb
-extern char aInitFailedTo_0[]; // idb
-extern char aInitFailedToCr[]; // idb
extern int dword_4EED78; // weak
extern _UNKNOWN unk_4EED80; // weak
extern int dword_4EFA80; // weak
@@ -2201,8 +1866,6 @@
extern int ai_array_4F75E0[500];
extern unsigned int ai_array_4F7DB0_actor_ids[500];
extern int dword_4F8580[]; // weak
-extern int dword_4F8584[]; // weak
-extern int dword_4F8588[]; // weak
extern int dword_4FA9B0[]; // weak
extern int dword_4FA9B4[]; // weak
extern char byte_4FAA00; // weak
@@ -2284,7 +1947,6 @@
extern int dword_506408[]; // weak
extern int dword_50640C[]; // weak
extern unsigned int uTextureID_506438;
-extern _UNKNOWN unk_506494; // weak
extern int dword_50651C; // weak
extern int dword_506520; // weak
extern int dword_506524; // weak
@@ -2302,7 +1964,6 @@
extern char *aMoonPhaseNames[5];
extern int dword_506568; // weak
extern char bRecallingBeacon; // weak
-extern char nullstring[];
extern int uLastPointedObjectID; // weak
//extern unsigned __int8 bMonsterInfoUI_bDollInitialized;
extern char *aSpellNames[44];
@@ -2360,19 +2021,18 @@
extern int dword_50B638[]; // weak
extern int dword_50B700; // weak
extern int dword_50B738[]; // idb
-extern int _50B744_view_transformed_ys_minus1[]; // weak
extern int _50B744_view_transformed_ys[43];
extern int dword_50B828[];
-extern int _50B834_view_transformed_zs_minus1[]; // weak
extern int _50B834_view_transformed_zs[43];
extern int dword_50B918[];
-extern int _50B924_view_transformed_xs_minus1[]; // idb
extern int _50B924_view_transformed_xs[43];
extern int unk_50B9D4[]; // idb
extern int dword_50B9D8_ys[];
extern int dword_50B9E0_ys[]; // idb
extern int dword_50B9EC[]; // idb
extern int dword_50B9F0[2]; // idb
+extern int dword_50BAE8_xs[];
+extern int dword_50BAF4_xs[];
extern int dword_50B9F8[]; // idb
extern int dword_50BA08[]; // idb
extern int dword_50BAC4[]; // weak
@@ -2562,9 +2222,8 @@
extern int _6807E8_level_decorations_ids[]; // idb
extern int _6836C8_num_decorations_6807E8; // weak
extern int dword_69B010[64];
-extern int dword_69B138; // weak
+extern float flt_69B138_dist; // weak
extern char byte_69BD41_unused; // weak
-extern std::string stru_69BD44; // idb
extern struct SavegameHeader *pSavegameHeader;
extern unsigned int uTextureID_x_u;
extern unsigned int uTextureID_LS_saveU;
@@ -2625,7 +2284,7 @@
extern int dword_6BE138; // weak
extern int dword_6BE13C_uCurrentlyLoadedLocationID; // weak
extern float fWalkSpeedMultiplier; // weak
-extern float fBackwardMovementSlowdownMultiplier; // weak
+extern float fBackwardWalkSpeedMultiplier; // weak
extern float fTurnSpeedMultiplier; // weak
extern float flt_6BE150_look_up_down_dangle; // weak
//extern char pMM7WindowClassName[]; // idb
@@ -2679,11 +2338,11 @@
extern int uTextureID_720980; // weak
extern int _720984_unused; // weak
extern char _72098C_unused; // weak
-extern std::string std__string_720990; // idb
extern __int16 word_7209A0_intercepts_ys_plus_ys[104];
extern __int16 word_720A70_intercepts_xs_plus_xs[104];
extern __int16 word_720B40_intercepts_zs[104];
-extern __int16 word_720C10_intercepts_xs[104];
+extern __int16 word_720C10_intercepts_xs[102];
+extern int dword_720CDC;
extern __int16 word_720CE0_ys[]; // idb
extern __int16 word_720DB0_xs[]; // idb
extern int dword_720E80[20];
@@ -2785,7 +2444,6 @@
extern struct Texture *pTexture_PlayerFaceMask;
extern struct Texture *pTexture_PlayerFaceEradicated;
extern struct Texture *pTexture_PlayerFaceDead;
-extern int A74CEC_player_faces_minus1_indexing[]; // weak
extern struct Texture *pTextures_PlayerFaces[4][56];
extern int dword_A75070; // weak
extern struct Player *pPlayers[5];
@@ -2801,12 +2459,7 @@
extern char byte_AE336B; // weak
extern int dword_AE336C; // weak
extern int dword_AE3370; // weak
-extern Vec3_float_ stru_AE4F64; // idb
-extern Vec3_float_ stru_AE4F70; // idb
-extern Vec3_float_ stru_AE4F7C; // idb
-extern int dword_AE4F88; // weak
extern char byte_AE5B91; // weak
-extern std::string std__string_AE5B94; // idb
extern int dword_F1B430[32]; // weak
extern int dword_F8B144; // idb
extern char byte_F8B148[16];
@@ -2849,7 +2502,6 @@
//extern int crt_F94004; // weak
//extern int crtdword_F9400C; // weak
extern FARPROC lpfn; // idb
-extern float flt_F942B0; // weak
//extern int crt_F944EC; // weak
//extern int crtdword_F944F0; // weak
//extern void *crt_F944F4; // idb
@@ -2885,8 +2537,8 @@
bool __fastcall sub_4075DB(int a1, int a2, int a3, struct BLVFace *a4);
bool __fastcall sub_4077F1(int a1, int a2, int a3, struct ODMFace *a4, struct BSPVertexBuffer *a5);
bool __fastcall sub_407A1C(int x, int z, int y, struct Vec3_int_ v); // idb
-char __cdecl UpdateActors();
-char *__cdecl UpdateLayingItems();
+char UpdateActors();
+void UpdateLayingItems();
int __fastcall sub_4088E9(int a1, int a2, int a3, int a4, int a5, int a6);
unsigned int __thiscall SearchAliveActors(unsigned int *pTotalActors);
unsigned int __fastcall SearchActorByMonsterID(unsigned int *pTotalActors, int uMonsterID);
@@ -2987,7 +2639,7 @@
void __thiscall sub_417871(int *pXY);
void __cdecl sub_4178C4();
void __cdecl sub_4178E1();
-unsigned int __fastcall sub_4178FE(signed int a1, signed int a2);
+unsigned int __fastcall UI_GetHealthManaStringColor(signed int a1, signed int a2);
signed int __thiscall GetConditionDrawColor(unsigned int uConditionIdx); // idb
char __fastcall sub_4179BC_draw_tooltip(const char *a1, const char *a2); // idb
unsigned int __fastcall sub_417AD4(unsigned int uPlayerClass, enum PLAYER_SKILL_TYPE uPlayerSkillType, signed int a3);
@@ -3078,7 +2730,7 @@
void __cdecl GUI_MainMenuMessageProc();
double __cdecl get_shading_dist_mist();
double __cdecl GetPickDepth();
-void __thiscall Vec3_short__to_RenderVertexSoft(struct RenderVertexSoft *_this, struct Vec3_short_ *a2);
+void Vec3_short__to_RenderVertexSoft(struct RenderVertexSoft *_this, struct Vec3_short_ *a2);
void __cdecl nullsub_4(); // idb
void __cdecl nullsub_5(); // idb
void __cdecl nullsub_6(); // idb
@@ -3100,7 +2752,7 @@
int __fastcall _43C91D_FormItemTextureFilename(char *a1, signed int a2, int a3, int a4);
void __fastcall CharacterUI_DrawPaperdoll(unsigned int uPlayerID); // idb
void __fastcall CharacterUI_DrawPaperdollWithRingOverlay(unsigned int uPlayerID); // idb
-bool __thiscall sub_43ED6F_get_some_race_sex_relation(unsigned int a1);
+bool _43ED6F_check_party_races(bool b);
bool __thiscall sub_43EDB9_get_some_race_sex_relation_2(unsigned int _this);
bool __fastcall sub_43EE15_player_has_item(unsigned int uItemID, struct Player *pPlayer, char a3);
bool __fastcall sub_43EE77_ProbablyIfUnderwaterSuitIsEquipped(signed int a1);
@@ -3110,22 +2762,22 @@
int /*__usercall*/ sr_sub_4D6FB0/**/(struct stru315 *a1/**/);
int /*__usercall*/ sr_sub_4D705A/**/(struct stru315 *a1/**/);
void __cdecl MessWithBillboards_BLV();
-signed int __fastcall sub_43F55F(struct RenderBillboard *a1, signed int a2);
-signed int __fastcall sub_43F5C8(signed int a1, int a2, float a3, float a4, float a5);
-int __cdecl PrepareWallsRenderList_BLV();
+int __fastcall _43F55F_get_billboard_light_level(struct RenderBillboard *a1, int uBaseLightLevel);
+int __fastcall _43F5C8_get_point_light_level_with_respect_to_lights(unsigned int uBaseLightLevel, int uSectorID, float x, float y, float z);
+void PrepareWallsRenderList_BLV();
void __fastcall PrepareDecorationsRenderList_BLV(unsigned int uDecorationID, unsigned int uSectorID);
-unsigned int __cdecl PrepareActorRenderList_BLV();
-void __cdecl PrepareItemsRenderList_BLV();
+void PrepareActorRenderList_BLV();
+void PrepareItemsRenderList_BLV();
void __fastcall sub_440639(int a1);
void __fastcall sub_4406BC(int a1, unsigned int uFirstNode); // idb
void __fastcall sub_440BED(struct IndoorLocation_drawstru *_this);
-bool __cdecl sub_44100D();
-void __cdecl GameUI_DrawTorchlightAndWizardEye();
-void __cdecl GameUI_DrawCharacterSelectionFrame();
-void __cdecl Load_isn_spells_21_27();
-void __cdecl GameUI_DrawPartySpells();
+bool sub_44100D();
+void GameUI_DrawTorchlightAndWizardEye();
+void GameUI_DrawCharacterSelectionFrame();
+void Load_isn_spells_21_27();
+void GameUI_DrawPartySpells();
__int16 __fastcall sub_441A4E(int a1);
-void __fastcall GameUI_DrawMinimap(unsigned int uX, unsigned int uY, unsigned int uZ, unsigned int uW, unsigned int uZoom, unsigned int flags);
+void GameUI_DrawMinimap(unsigned int uX, unsigned int uY, unsigned int uZ, unsigned int uW, unsigned int uZoom, unsigned int flags);
int __fastcall DrawSpellbook_Map_sub(unsigned int x, unsigned int y, unsigned int a4, int a5, int _48074); // idb
int __cdecl Initialize2DA();
unsigned int __fastcall LoadEventsToBuffer(const char *pContainerName, char *a2, unsigned int uBufferSize);
@@ -3212,9 +2864,6 @@
int __fastcall ParseMissleAttackType(const char *Str1);
unsigned int __fastcall SkillToMastery(unsigned __int16 a1);
unsigned int __fastcall GetSpellColor(signed int a1);
-int __thiscall sub_45BAA5(int _this);
-std::string *__fastcall sub_45BAB6(int a1);
-// void __cdecl crt_45BAE9(); idb
void *__thiscall unknown_vdtor_6(void *_this, bool a2);
unsigned __int16 *__fastcall MakeScreenshot(signed int width, signed int height);
void __thiscall SaveScreenshot(const char *pFilename);
@@ -3229,7 +2878,7 @@
void __cdecl TryLoadLevelFromLOD();
void __cdecl sub_46080D();
bool __cdecl Initialize_GamesLOD_NewLOD();
-int __cdecl MaybeDoAutosave();
+bool Autosave();
void __thiscall PrepareToLoadBLV(unsigned int bLoading);
void __fastcall PrepareToLoadODM(unsigned int bLoading, struct OutdoorCamera *a2);
void __cdecl sub_461103();
@@ -3281,17 +2930,14 @@
int __fastcall sub_46A7C8(int a1, int a2, signed int a3);
int __fastcall sub_46A89E(int a1, int a2, signed int a3);
int __cdecl sub_46A99B();
-// int __thiscall crt_construct_46AC48_ptr_720990(int this);
-std::string *__fastcall crt_intit_global_46AC59(int a1);
void *__thiscall unknown_libname_8(void *_this, char a2);
-// void __cdecl crt_init_globals_46BD9F();
unsigned int __cdecl GetGravityStrength();
void __cdecl sub_46BDC0_UpdateUserInput_and_MapSpecificStuff();
void __cdecl BLV_UpdateUserInputAndOther();
void __cdecl ODM_UpdateUserInputAndOther();
bool __fastcall _46BFFA_check_object_intercept(unsigned int uLayingItemID, signed int a2);
void __cdecl _46CC4B_check_event_triggers();
-int __fastcall _46CEC3_get_floor_level(signed int a1, signed int a2, int a3, unsigned int uSectorID, int *a5);
+int _46CEC3_get_floor_level(int x, int y, int z, unsigned int uSectorID, unsigned int *pFaceID);
int __fastcall sub_46D49E_prolly_get_world_y_under_party(int a1, signed int a2, int a3, int a4, int *a5, int *a6, int a7);
int __fastcall sub_46D8E3(int a1, signed int a2, int a3, int a4);
signed __int64 __fastcall _46DCC8_get_gravity_direction_outdoor(int a1, int a2, Vec3_int_ *a3);
@@ -3301,7 +2947,7 @@
void __fastcall _46E26D_collide_against_sprites(signed int a1, signed int a2);
int __thiscall _46E44E_collide_against_faces_and_portals(unsigned int b1); // idb
int __fastcall _46E889_collide_against_bmodels(unsigned int ecx0);
-int __fastcall _46ED1B_collide_against_floor(signed int a1, signed int a2, int a3, unsigned int *pSectorID, int *a5); // idb
+int _46ED1B_collide_against_floor(int x, int y, int z, unsigned int *pSectorID, unsigned int *pFaceID); // idb
void __fastcall _46ED8A_collide_against_layingItems(unsigned int _this);
int __thiscall _46EF01_collision_chech_player(int a1); // idb
signed int __cdecl _46F04E_collide_against_portals();
@@ -3309,7 +2955,7 @@
void __cdecl UpdateActors_BLV();
void __cdecl UpdateActors_ODM();
void __cdecl UpdateObjects();
-int __fastcall _47272C_collide_agains_some_secotors_floors(int x, int y, int z, unsigned int *pSectorID, int *a5); // idb
+int _47272C_collide_agains_some_secotors_floors(int x, int y, int z, unsigned int *pSectorID, unsigned int *pFaceID); // idb
void __cdecl BLV_ProcessPartyActions();
void __cdecl ODM_ProcessPartyActions();
bool __fastcall sub_47531C(int a1, int *a2, int a3, int a4, int a5, int a6, int a7, int a8, BLVFace *a9, int a10);
@@ -3332,7 +2978,7 @@
void __cdecl loc_4789D4(); // idb
void __cdecl loc_47907F(); // idb
bool __fastcall IsBModelVisible(unsigned int uModelID, int *unused);
-void __fastcall sub_479A53(unsigned int uNumVertices, unsigned int uFaceID); // idb
+void __fastcall _479A53_draw_some_blv_poly(unsigned int uNumVertices, unsigned int uFaceID); // idb
void __thiscall ODM_LoadAndInitialize(const char *pLevelFilename, struct OutdoorCamera *thisa);
unsigned __int16 *__fastcall GetBillboardPalette(struct RenderBillboard *a1, int a2, signed int a3, int a4);
int __fastcall sr_sub_47BEB1(signed int a1, stru148 *a2, int terrain_gamma, int a4, int *a5, int *a6, int a7, int a8);
@@ -3383,7 +3029,7 @@
int __stdcall loc_489BB3(struct stru320 *a2, int thisa, unsigned int uNumVertices, RenderVertexSoft *a5, float a6, char uClipFlag); // weak
bool __fastcall HSV2RGB(float *a1, float *a2, float *a3, float a4, float a5, float a6);
void __fastcall RGB2HSV(float *a1, float *a2, float a3, float a4, float a5, float *a6);
-unsigned int __thiscall sub_48A959(int _this, float a2, float a3, float a4);
+unsigned int ReplaceHSV(unsigned int uColor, float a2, float gamma, float a4);
int _48B561_mess_with_scaling_along_z(/*int a1, */float a2);
signed int __cdecl sub_4908DE();
signed int __cdecl PlayerCreation_ComputeAttributeBonus();
@@ -3411,8 +3057,7 @@
bool __cdecl AreRenderSurfacesOk();
int __fastcall sub_4A19D8(unsigned int, unsigned int); // weak
void __cdecl DoRenderBillboards_D3D();
-void __fastcall SetBillboardBlendOptions(signed int a1);
-int __fastcall sub_4A46E6(unsigned int x, signed int y, signed int a3, int a4, unsigned int a5);
+int __fastcall sr_4A46E6_draw_particle_segment(unsigned int x, signed int y, signed int z, int a4, unsigned int lightColor);
void __cdecl Present_ColorKey();
void __cdecl Present_NoColorKey();
int __thiscall sub_4A7063(unsigned int uDiffuse, float a2); // idb
diff -r c83d06692295 -r c0cf9393af64 stru10.cpp
--- a/stru10.cpp Mon Oct 22 09:20:49 2012 +0600
+++ b/stru10.cpp Mon Oct 29 09:28:08 2012 +0600
@@ -94,7 +94,7 @@
--v6;
}
while ( v6 );
- stru10::_49D379(pFace, a2a);
+ stru10::CalcPolygonBoundingBox(pFace, a2a);
v7 = pFace->uAttributes;
if ( v7 & 0x100 )
{
@@ -417,674 +417,312 @@
}
//----- (0049D379) --------------------------------------------------------
-int stru10::_49D379(BLVFace *pFace, RenderVertexSoft *pVertices)
+void stru10::CalcPolygonBoundingBox(BLVFace *pFace, RenderVertexSoft *pOutVertices)
{
- BLVFace *v3; // edx@1
- Vec3_short_ *v4; // ecx@1
- int v5; // eax@2
- unsigned __int16 *v6; // esi@3
- char *v7; // eax@3
- int v8; // ebx@4
- int v9; // edi@4
- int v10; // ebx@4
- int v11; // edi@4
- double v12; // st7@4
- int v13; // edi@4
- unsigned __int16 *v14; // esi@7
- char *v15; // eax@7
- int v16; // ebx@8
- int v17; // edi@8
- int v18; // ebx@8
- int v19; // edi@8
- double v20; // st7@8
- int v21; // edi@8
- unsigned __int16 *v22; // esi@11
- char *v23; // eax@11
- int v24; // ebx@12
- int v25; // edi@12
- int v26; // ebx@12
- int v27; // edi@12
- double v28; // st7@12
- int v29; // edi@12
- int v30; // eax@13
- double v31; // st7@13
- char *v32; // esi@14
- int v33; // edi@14
- int v34; // eax@24
- Vec3_short_ *v35; // eax@24
- signed int v36; // ecx@24
- signed int v37; // eax@24
- Vec3_short_ *v38; // eax@24
- signed int v39; // ecx@24
- signed int v40; // eax@24
- Vec3_short_ *v41; // eax@24
- signed int v42; // ecx@24
- signed int v43; // eax@24
- Vec3_short_ *v44; // eax@24
- signed int v45; // ecx@24
- signed int result; // eax@24
- char v47; // [sp+10h] [bp-350h]@3
- RenderVertexSoft v48; // [sp+30Ch] [bp-54h]@24
- int v49; // [sp+33Ch] [bp-24h]@16
- int v50; // [sp+340h] [bp-20h]@20
- int v51; // [sp+344h] [bp-1Ch]@18
- int v52; // [sp+348h] [bp-18h]@22
- unsigned __int16 *v53; // [sp+34Ch] [bp-14h]@3
- Vec3_short_ *v54; // [sp+350h] [bp-10h]@3
- float v55; // [sp+354h] [bp-Ch]@1
- float v56; // [sp+358h] [bp-8h]@4
- Vec3_short_ *v57; // [sp+35Ch] [bp-4h]@4
- int pFacea; // [sp+368h] [bp+8h]@2
- int pFaceb; // [sp+368h] [bp+8h]@6
- int pFacec; // [sp+368h] [bp+8h]@10
- float pFaced; // [sp+368h] [bp+8h]@13
- signed int pFacee; // [sp+368h] [bp+8h]@24
- signed int pFacef; // [sp+368h] [bp+8h]@24
- signed int pFaceg; // [sp+368h] [bp+8h]@24
- signed int pFaceh; // [sp+368h] [bp+8h]@24
+ struct
+ {
+ float x;
+ float y;
+ int c;
+ } v46[40]; //[sp+0C];
- v3 = pFace;
- v4 = pIndoor->pVertices;
- LODWORD(v55) = pFace->uAttributes;
- if ( BYTE1(v55) & 1 )
+ if (pFace->uAttributes & 0x0100)
{
- v5 = pFace->uNumVertices;
- pFacea = 0;
- if ( v5 > 0 )
+ for (uint i = 0; i < pFace->uNumVertices; ++i)
+ {
+ v46[i].x = pIndoor->pVertices[pFace->pVertexIDs[i]].x + pFace->pXInterceptDisplacements[i];
+ v46[i].y = pIndoor->pVertices[pFace->pVertexIDs[i]].y + pFace->pYInterceptDisplacements[i];
+ v46[i].c = i;
+ }
+ }
+ if (pFace->uAttributes & 0x0200)
+ {
+ for (uint i = 0; i < pFace->uNumVertices; ++i)
{
- v6 = v3->pVertexIDs;
- v7 = &v47;
- v53 = (unsigned short *)((char *)v3->pXInterceptDisplacements - (char *)v6);
- v54 = (Vec3_short_ *)((char *)v3->pYInterceptDisplacements - (char *)v6);
- do
- {
- v8 = *(unsigned __int16 *)((char *)v53 + (int)v6);
- v57 = &v4[*v6];
- LODWORD(v56) = v57->x + v8;
- v9 = *(__int16 *)((char *)&v54->x + (int)v6);
- v10 = v57->y;
- *((float *)v7 - 1) = (double)SLODWORD(v56);
- v57 = (Vec3_short_ *)(v10 + v9);
- v11 = pFacea;
- v12 = (double)(signed int)v57;
- ++pFacea;
- *((int *)v7 + 1) = v11;
- v13 = v3->uNumVertices;
- *(float *)v7 = v12;
- v7 += 12;
- ++v6;
- }
- while ( pFacea < v13 );
+ v46[i].x = pIndoor->pVertices[pFace->pVertexIDs[i]].x + pFace->pXInterceptDisplacements[i];
+ v46[i].y = pIndoor->pVertices[pFace->pVertexIDs[i]].y + pFace->pZInterceptDisplacements[i];
+ v46[i].c = i;
+ }
+ }
+ if (pFace->uAttributes & 0x0400)
+ {
+ for (uint i = 0; i < pFace->uNumVertices; ++i)
+ {
+ v46[i].x = pIndoor->pVertices[pFace->pVertexIDs[i]].x + pFace->pYInterceptDisplacements[i];
+ v46[i].y = pIndoor->pVertices[pFace->pVertexIDs[i]].y + pFace->pZInterceptDisplacements[i];
+ v46[i].c = i;
}
}
- if ( BYTE1(v55) & 2 )
+
+ float x_min = FLT_MAX;
+ uint x_min_idx = 0;
+
+ float x_max = FLT_MIN;
+ uint x_max_idx = 0;
+
+ float y_min = FLT_MAX;
+ uint y_min_idx = 0;
+
+ float y_max = FLT_MIN;
+ uint y_max_idx = 0;
+
+ for (uint i = 0; i < pFace->uNumVertices; ++i)
{
- pFaceb = 0;
- if ( (signed int)v3->uNumVertices > 0 )
+ if (v46[i].x < x_min)
{
- v14 = v3->pVertexIDs;
- v15 = &v47;
- v53 = (unsigned short *)((char *)v3->pXInterceptDisplacements - (char *)v14);
- LODWORD(v56) = (char *)v3->pZInterceptDisplacements - (char *)v14;
- do
- {
- v16 = *(unsigned __int16 *)((char *)v53 + (int)v14);
- v54 = &v4[*v14];
- v57 = (Vec3_short_ *)(v54->x + v16);
- v17 = *(signed __int16 *)((char *)v14 + LODWORD(v56));
- v18 = v54->z;
- *((float *)v15 - 1) = (double)(signed int)v57;
- v57 = (Vec3_short_ *)(v18 + v17);
- v19 = pFaceb;
- v20 = (double)(signed int)v57;
- ++pFaceb;
- *((int *)v15 + 1) = v19;
- v21 = v3->uNumVertices;
- *(float *)v15 = v20;
- v15 += 12;
- ++v14;
- }
- while ( pFaceb < v21 );
+ x_min = v46[i].x;
+ x_min_idx = v46[i].c;
}
- }
- if ( BYTE1(v55) & 4 )
- {
- pFacec = 0;
- if ( (signed int)v3->uNumVertices > 0 )
+ if (v46[i].x > x_max)
+ {
+ x_max = v46[i].x;
+ x_max_idx = v46[i].c;
+ }
+
+ if (v46[i].y < y_min)
{
- v22 = v3->pVertexIDs;
- v23 = &v47;
- v54 = (Vec3_short_ *)((char *)v3->pYInterceptDisplacements - (char *)v22);
- LODWORD(v56) = (char *)v3->pZInterceptDisplacements - (char *)v22;
- do
- {
- v24 = *(__int16 *)((char *)&v54->x + (int)v22);
- LODWORD(v55) = (unsigned int)&v4[*v22];
- v57 = (Vec3_short_ *)(*(short *)(LODWORD(v55) + 2) + v24);
- v25 = *(signed __int16 *)((char *)v22 + LODWORD(v56));
- v26 = *(short *)(LODWORD(v55) + 4);
- *((float *)v23 - 1) = (double)(signed int)v57;
- v57 = (Vec3_short_ *)(v26 + v25);
- v27 = pFacec;
- v28 = (double)(signed int)v57;
- ++pFacec;
- *((int *)v23 + 1) = v27;
- v29 = v3->uNumVertices;
- *(float *)v23 = v28;
- v23 += 12;
- ++v22;
- }
- while ( pFacec < v29 );
+ y_min = v46[i].y;
+ y_min_idx = v46[i].c;
+ }
+ if (v46[i].y > y_max)
+ {
+ y_max = v46[i].y;
+ y_max_idx = v46[i].c;
}
}
- v30 = v3->uNumVertices;
- pFaced = 3.4028235e38;
- v56 = 3.4028235e38;
- v31 = -3.4028235e38;
- v55 = -3.4028235e38;
- if ( v30 > 0 )
- {
- v32 = &v47;
- v33 = v30;
- do
- {
- if ( *((float *)v32 - 1) < (double)pFaced )
- {
- LODWORD(pFaced) = *((int *)v32 - 1);
- v49 = *((int *)v32 + 1);
- }
- if ( *((float *)v32 - 1) > (double)v55 )
- {
- LODWORD(v55) = *((int *)v32 - 1);
- v51 = *((int *)v32 + 1);
- }
- if ( *(float *)v32 < (double)v56 )
- {
- LODWORD(v56) = *(int *)v32;
- v50 = *((int *)v32 + 1);
- }
- if ( v31 < *(float *)v32 )
- {
- v31 = *(float *)v32;
- v52 = *((int *)v32 + 1);
- }
- v32 += 12;
- --v33;
- }
- while ( v33 );
- }
- v34 = v3->pVertexIDs[v49];
- v48.flt_2C = 0.0;
- v35 = &v4[v34];
- pFacee = v35->x;
- v36 = v35->y;
- v37 = v35->z;
- v48.vWorldPosition.x = (double)pFacee;
- v48.vWorldPosition.y = (double)v36;
- v48.vWorldPosition.z = (double)v37;
- memcpy(pVertices, &v48, 0x30u);
- v48.flt_2C = 0.0;
- v38 = &pIndoor->pVertices[v3->pVertexIDs[v50]];
- pFacef = v38->x;
- v39 = v38->y;
- v40 = v38->z;
- v48.vWorldPosition.x = (double)pFacef;
- v48.vWorldPosition.y = (double)v39;
- v48.vWorldPosition.z = (double)v40;
- memcpy(&pVertices[1], &v48, sizeof(pVertices[1]));
- v48.flt_2C = 0.0;
- v41 = &pIndoor->pVertices[v3->pVertexIDs[v51]];
- pFaceg = v41->x;
- v42 = v41->y;
- v43 = v41->z;
- v48.vWorldPosition.x = (double)pFaceg;
- v48.vWorldPosition.y = (double)v42;
- v48.vWorldPosition.z = (double)v43;
- memcpy(&pVertices[2], &v48, sizeof(pVertices[2]));
- v48.flt_2C = 0.0;
- v44 = &pIndoor->pVertices[v3->pVertexIDs[v52]];
- pFaceh = v44->x;
- v45 = v44->y;
- result = v44->z;
- v48.vWorldPosition.x = (double)pFaceh;
- v48.vWorldPosition.y = (double)v45;
- v48.vWorldPosition.z = (double)result;
- memcpy(&pVertices[3], &v48, sizeof(pVertices[3]));
- return result;
+
+
+
+ auto p1 = &pIndoor->pVertices[pFace->pVertexIDs[x_min_idx]];
+ RenderVertexSoft v1; // [sp+30Ch] [bp-54h]@24
+ v1.vWorldPosition.x = (float)p1->x;
+ v1.vWorldPosition.y = (float)p1->y;
+ v1.vWorldPosition.z = (float)p1->z;
+ memcpy(pOutVertices + 0, &v1, sizeof(RenderVertexSoft));
+
+ auto p2 = &pIndoor->pVertices[pFace->pVertexIDs[y_min_idx]];
+ RenderVertexSoft v2; // [sp+30Ch] [bp-54h]@24
+ v2.vWorldPosition.x = (float)p2->x;
+ v2.vWorldPosition.y = (float)p2->y;
+ v2.vWorldPosition.z = (float)p2->z;
+ memcpy(pOutVertices + 1, &v2, sizeof(RenderVertexSoft));
+
+ auto p3 = &pIndoor->pVertices[pFace->pVertexIDs[x_max_idx]];
+ RenderVertexSoft v3; // [sp+30Ch] [bp-54h]@24
+ v3.vWorldPosition.x = (float)p3->x;
+ v3.vWorldPosition.y = (float)p3->y;
+ v3.vWorldPosition.z = (float)p3->z;
+ memcpy(pOutVertices + 2, &v3, sizeof(RenderVertexSoft));
+
+ auto p4 = &pIndoor->pVertices[pFace->pVertexIDs[y_max_idx]];
+ RenderVertexSoft v4; // [sp+30Ch] [bp-54h]@24
+ v4.vWorldPosition.x = (double)p4->x;
+ v4.vWorldPosition.y = (double)p4->y;
+ v4.vWorldPosition.z = (double)p4->z;
+ memcpy(pOutVertices + 3, &v4, sizeof(RenderVertexSoft));
}
//----- (0049C9E3) --------------------------------------------------------
-bool stru10::_49C9E3(BLVFace *a3, RenderVertexSoft *arg4, unsigned int uNumVertices, RenderVertexSoft *arg0)
+bool stru10::_49C9E3(BLVFace *pFace, RenderVertexSoft *pFaceBounding, unsigned int uNumVertices, RenderVertexSoft *arg0)
{
- __debugbreak();
- return 0;
- /*IndoorCameraD3D *v6; // edi@1
- PolygonType v7; // al@1
- unsigned int v8; // edx@7
- char v10; // zf@10
- float v13; // ST14_4@20
- stru10 *v15; // ecx@21
- RenderVertexSoft *v16; // ST0C_4@21
- bool result; // eax@21
- float v18; // ST14_4@24
- stru10 *v19; // edi@29
- float v20; // ST14_4@30
- float v21; // ST14_4@30
- float v22; // ST14_4@30
- float v23; // ST14_4@30
- float v24; // ST14_4@31
- RenderVertexSoft v25; // [sp+10h] [bp-90h]@24
- RenderVertexSoft v26; // [sp+40h] [bp-60h]@20
- IndoorCameraD3D *thisa; // [sp+70h] [bp-30h]@1
- stru10 *v31; // [sp+84h] [bp-1Ch]@1
+ //IndoorCameraD3D *v6; // edi@1
+ //PolygonType v7; // al@1
+ //unsigned int v8; // edx@7
+ //char v10; // zf@10
+ //float v13; // ST14_4@20
+ //stru10 *v15; // ecx@21
+ //RenderVertexSoft *v16; // ST0C_4@21
+ //bool result; // eax@21
+ //float v18; // ST14_4@24
+ //stru10 *v19; // edi@29
+ //float v20; // ST14_4@30
+ //float v21; // ST14_4@30
+ //float v22; // ST14_4@30
+ //float v23; // ST14_4@30
+ //float v24; // ST14_4@31
+ //RenderVertexSoft v25; // [sp+10h] [bp-90h]@24
+ //RenderVertexSoft v26; // [sp+40h] [bp-60h]@20
+ //IndoorCameraD3D *thisa; // [sp+70h] [bp-30h]@1
+ //stru10 *v31; // [sp+84h] [bp-1Ch]@1
float v32; // [sp+88h] [bp-18h]@8
Vec3_float_ a1; // [sp+8Ch] [bp-14h]@1
float v35; // [sp+9Ch] [bp-4h]@8
- _ESI = a3;
- v31 = this;
- __asm
- {
- fld dword ptr [esi]
- fld dword ptr [esi+4]
- fldz
- }
- v6 = pGame->pIndoorCameraD3D;
- v7 = a3->uPolygonType;
- __asm
- {
- fstp [ebp+var_28]
- fldz
- }
- thisa = v6;
- __asm
+ //auto a3 = pFace;
+ //auto arg4 = pFaceBounding;
+
+ //_ESI = a3;
+ //v31 = this;
+ //v6 = pGame->pIndoorCameraD3D;
+ //v7 = a3->uPolygonType;
+
+ a1.x = 0.0f;
+ a1.y = 0.0f;
+ a1.z = 0.0f;
+
+ float var_28;
+ float var_24;
+ if (pFace->uPolygonType == POLYGON_VerticalWall)
{
- fstp [ebp+var_24]
- fldz
- fstp [ebp+a1.x]
- fldz
- fstp [ebp+a1.y]
- fldz
- fstp [ebp+a1.z]
+ a1.x = -pFace->pFacePlane.vNormal.y;
+ a1.y = pFace->pFacePlane.vNormal.x;
+ a1.z = 0.0f;
+ a1.Normalize();
+
+ var_28 = 0;
+ var_24 = 1;
}
- if ( v7 == 1 )
+ else if (pFace->uPolygonType == POLYGON_Floor ||
+ pFace->uPolygonType == POLYGON_Ceiling)
{
- __asm
- {
- fchs
- fstp [ebp+a1.x]
- fstp [ebp+a1.y]
- fldz
- fstp [ebp+a1.z]
- }
- a1.Normalize();
- __asm
- {
- fldz
- fstp [ebp+var_28]
- fld1
- }
-LABEL_6:
- __asm { fstp [ebp+var_24] }
- goto LABEL_7;
+ a1.x = 1;
+ a1.y = 0;
+ a1.z = 0.0f;
+
+ var_28 = 1;
+ var_24 = 0;
}
- __asm
- {
- fstp st
- fstp st
- }
- if ( v7 == 3 || v7 == 5 )
+
+
+ float arg_4;
+ float var_18;
+ float var_4;
+ float a3;
+ float var_8;
+ //v8 = _ESI->uAttributes;
+ //_ECX = pFaceBounding;
+ //__asm { fld 0.5 }
+ if (pFace->uAttributes & 0x0100)
{
- __asm
- {
- fld1
- fstp [ebp+a1.x]
- fldz
- fstp [ebp+a1.y]
- fldz
- fstp [ebp+a1.z]
- fld1
- fstp [ebp+var_28]
- fldz
- }
- goto LABEL_6;
+ arg_4 = (pFaceBounding[0].vWorldPosition.x + pFaceBounding[2].vWorldPosition.x) / 2;
+ var_18 = (pFaceBounding[3].vWorldPosition.y + pFaceBounding[1].vWorldPosition.y) / 2;
+ var_4 = (pFaceBounding[0].vWorldPosition.z + pFaceBounding[2].vWorldPosition.z) / 2;
+
+ a3 = arg_4 - pFaceBounding[0].vWorldPosition.x;
+ var_8 = var_18 - pFaceBounding[1].vWorldPosition.y;
}
-LABEL_7:
- v8 = _ESI->uAttributes;
- _ECX = arg4;
- __asm { fld ds:flt_4D84F0 }
- if ( BYTE1(v8) & 1 )
+ if (pFace->uAttributes & 0x0200)
{
- __asm
+ arg_4 = (pFaceBounding[0].vWorldPosition.x + pFaceBounding[2].vWorldPosition.x) / 2;
+ var_18 = (pFaceBounding[0].vWorldPosition.y + pFaceBounding[2].vWorldPosition.y) / 2;
+ var_4 = (pFaceBounding[1].vWorldPosition.z + pFaceBounding[3].vWorldPosition.z) / 2;
+
+ a3 = arg_4 - pFaceBounding[0].vWorldPosition.x;
+ var_8 = var_4 - pFaceBounding[1].vWorldPosition.z;
+
+ if (pFace->uPolygonType == POLYGON_VerticalWall)
+ a3 /= a1.x;
+ }
+ if (pFace->uAttributes & 0x0400)
+ {
+ arg_4 = (pFaceBounding[0].vWorldPosition.x + pFaceBounding[2].vWorldPosition.x) / 2;
+ var_18 = (pFaceBounding[0].vWorldPosition.y + pFaceBounding[2].vWorldPosition.y) / 2;
+ var_4 = (pFaceBounding[1].vWorldPosition.z + pFaceBounding[3].vWorldPosition.z) / 2;
+
+ a3 = var_18 - pFaceBounding[0].vWorldPosition.y;
+ var_8 = var_4 - pFaceBounding[1].vWorldPosition.z;
+ // [0.5]
+ if (pFace->uPolygonType == POLYGON_VerticalWall)
{
- fld dword ptr [ecx+60h]
- fadd dword ptr [ecx]
- fmul st, st(1)
- fstp [ebp+arg4]
- fld dword ptr [ecx+94h]
- fadd dword ptr [ecx+34h]
- fmul st, st(1)
- fstp [ebp+var_18]
- fld dword ptr [ecx+68h]
- fadd dword ptr [ecx+8]
- fmul st, st(1)
- fstp [ebp+var_4]
- fld [ebp+arg4]
- fsub dword ptr [ecx]
- fstp [ebp+a3]
- fld [ebp+var_18]
- fsub dword ptr [ecx+34h]
- fstp [ebp+var_8]
+ if (a1.x != 1.0f)
+ a3 /= a1.y;
}
}
- if ( BYTE1(v8) & 2 )
- {
- __asm
- {
- fld dword ptr [ecx+60h]
- fadd dword ptr [ecx]
- }
- v10 = _ESI->uPolygonType == 1;
- __asm
- {
- fmul st, st(1)
- fstp [ebp+arg4]
- fld dword ptr [ecx+64h]
- fadd dword ptr [ecx+4]
- fmul st, st(1)
- fstp [ebp+var_18]
- fld dword ptr [ecx+98h]
- fadd dword ptr [ecx+38h]
- fmul st, st(1)
- fstp [ebp+var_4]
- fld [ebp+arg4]
- fsub dword ptr [ecx]
- fstp [ebp+a3]
- fld [ebp+var_4]
- fsub dword ptr [ecx+38h]
- fstp [ebp+var_8]
- }
- if ( v10 )
- {
- __asm
- {
- fld [ebp+a1.x]
- fcomp ds:dword_4D84A8
- fnstsw ax
- }
- if ( __SETP__(HIBYTE(_AX) & 0x44, 0) )
- {
- __asm
- {
- fld [ebp+a3]
- fdiv [ebp+a1.x]
- fstp [ebp+a3]
- }
- }
- }
- }
- if ( BYTE1(v8) & 4 )
- {
- __asm
- {
- fld dword ptr [ecx+60h]
- fadd dword ptr [ecx]
- }
- v10 = _ESI->uPolygonType == 1;
- __asm
- {
- fmul st, st(1)
- fstp [ebp+arg4]
- fld dword ptr [ecx+64h]
- fadd dword ptr [ecx+4]
- fmul st, st(1)
- fstp [ebp+var_18]
- fld dword ptr [ecx+98h]
- fadd dword ptr [ecx+38h]
- fmul st, st(1)
- fstp [ebp+var_4]
- fstp st
- fld [ebp+var_18]
- fsub dword ptr [ecx+4]
- fstp [ebp+a3]
- fld [ebp+var_4]
- fsub dword ptr [ecx+38h]
- fstp [ebp+var_8]
- }
- if ( v10 )
- {
- __asm
- {
- fld [ebp+a1.x]
- fcomp ds:dword_4D84A8
- fnstsw ax
- }
- if ( __SETP__(HIBYTE(_AX) & 0x44, 0) )
- {
- __asm
- {
- fld [ebp+a3]
- fdiv [ebp+a1.y]
- fstp [ebp+a3]
- }
- }
- }
- }
- else
- {
- __asm { fstp st }
- }
+
+
if ( byte_4D864C && pGame->uFlags & 8 )
{
- __asm { fldz }
- LODWORD(v26.vWorldPosition.x) = arg4;
- __asm { fstp [ebp+var_60.flt_2C] }
+ RenderVertexSoft v26; // [sp+40h] [bp-60h]@20
+ v26.vWorldPosition.x = arg_4;
v26.vWorldPosition.y = v32;
- __asm { fldz }
v26.vWorldPosition.z = v35;
- __asm { fstp [esp+0A0h+var_A0] }
- v6->do_draw_debug_line_sw(_ECX, 0xFF00u, &v26, 0xFF0000u, 0, v13);
+
+ pGame->pIndoorCameraD3D->do_draw_debug_line_sw(pFaceBounding, 0xFF00u, &v26, 0xFF0000u, 0, 0);
}
- __asm
- {
- fld [ebp+var_8]
- fmul ds:flt_4D84E8
- fld [ebp+var_8]
- fmul [ebp+var_28]
- fld [ebp+var_8]
- fmul [ebp+var_24]
- }
- _EBX = arg0;
- v15 = v31;
- __asm
- {
- fst [ebp+var_20]
- fld [ebp+a3]
- fmul [ebp+a1.x]
- fld [ebp+a3]
- fmul [ebp+a1.y]
- fld [ebp+a3]
- fmul [ebp+a1.z]
- }
- v16 = arg0;
- __asm
+
+ //_EBX = arg0;
+ //v15 = v31;
+ //v16 = arg0;
+ float var_20 = var_8 * var_24;
+ var_8 = a3 * a1.z;
+ float arg_0 = var_8 + var_4;
+
+ arg0[0].vWorldPosition.x = arg_4 - a3 * a1.x + var_8 * flt_4D84E8;
+ arg0[0].vWorldPosition.y = var_18 - a3 * a1.y + var_8 * var_28;
+ arg0[0].vWorldPosition.z = var_4 - var_8 + var_8 * var_24;
+ arg0[1].vWorldPosition.x = arg_4 - a3 * a1.x - var_8 * flt_4D84E8;
+ arg0[1].vWorldPosition.y = var_18 - a3 * a1.y - var_8 * var_28;
+ arg0[1].vWorldPosition.z = (var_4 - var_8) - var_8 * var_24;
+ arg0[2].vWorldPosition.x = a3 * a1.x + arg_4 - var_8 * flt_4D84E8;
+ arg0[2].vWorldPosition.y = a3 * a1.y + var_18 - var_8 * var_28;
+ arg0[2].vWorldPosition.z = var_8 + var_4 - var_20;
+ arg0[3].vWorldPosition.x = (a3 * a1.x + arg_4) + var_8 * flt_4D84E8;
+ arg0[3].vWorldPosition.y = a3 * a1.y + var_18 + var_8 * var_28;
+ arg0[3].vWorldPosition.z = arg_0 + var_20;
+
+ a3 = (var_4 - var_8);
+ a3 = (a3 * a1.x + arg_4);
+
+ a1.x = 0.0f;
+ a1.y = 0.0f;
+ a1.z = 0.0f;
+
+ if (!_49C8DC(arg0, &a1, &a3))
+ return false;
+
+
+ if ( byte_4D864C )
{
- fstp [ebp+var_8]
- fld [ebp+arg4]
- fsub st, st(2)
- fld st
- fadd st, st(6)
- fstp dword ptr [ebx]
- fld [ebp+var_18]
- fsub st, st(2)
- fld st
- fadd st, st(6)
- fstp dword ptr [ebx+4]
- fld [ebp+var_4]
- fsub [ebp+var_8]
- fst [ebp+a3]
- fadd st, st(5)
- fstp dword ptr [ebx+8]
- fld st(1)
- fsub st, st(7)
- fstp dword ptr [ebx+30h]
- fsub st, st(5)
- fstp dword ptr [ebx+34h]
- fstp st
- fld [ebp+a3]
- fsub st, st(3)
- fstp dword ptr [ebx+38h]
- fld st(1)
- fadd [ebp+arg4]
- fst [ebp+a3]
- fsub st, st(5)
- fstp dword ptr [ebx+60h]
- fadd [ebp+var_18]
- fstp st(2)
- fstp st
- fld st
- fsub st, st(2)
- fstp dword ptr [ebx+64h]
- fld [ebp+var_8]
- fadd [ebp+var_4]
- fst [ebp+arg0]
- fsub [ebp+var_20]
- fstp dword ptr [ebx+68h]
- fld [ebp+a3]
- fadd st, st(3)
- fstp dword ptr [ebx+90h]
- fadd st, st(1)
- fstp dword ptr [ebx+94h]
- fstp st
- fstp st
- fld [ebp+arg0]
- fadd [ebp+var_20]
- fstp dword ptr [ebx+98h]
- fldz
- fstp [ebp+a1.x]
- fldz
- fstp [ebp+a1.y]
- fldz
- fstp [ebp+a1.z]
- }
- result = this->_49C8DC(v16, &a1, (float *)&a3);
- if ( result )
- {
- if ( byte_4D864C )
- {
- HIWORD(result) = HIWORD(pGame);
if ( pGame->uFlags & 8 )
{
- __asm
- {
- fldz
- fstp [ebp+var_60.flt_2C]
- fld ds:flt_4D8770
- fld [ebp+a1.x]
- fmul st, st(1)
- }
- LODWORD(v25.vWorldPosition.x) = (uint)arg4;
+ RenderVertexSoft v25; // [sp+10h] [bp-90h]@20
+ RenderVertexSoft v26; // [sp+40h] [bp-60h]@20
+
+ v25.vWorldPosition.x = arg_4;
v25.vWorldPosition.y = v32;
- __asm
- {
- fstp [ebp+var_60.vWorldPosition.x]
- fld [ebp+a1.y]
- fmul st, st(1)
- }
v25.vWorldPosition.z = v35;
- __asm
- {
- fstp [ebp+var_60.vWorldPosition.y]
- fld [ebp+a1.z]
- fmul st, st(1)
- fstp [ebp+var_60.vWorldPosition.z]
- fstp st
- fldz
- fstp [ebp+var_90.flt_2C]
- fldz
- fstp [esp+0A0h+var_A0]
- }
- pGame->pIndoorCameraD3D->do_draw_debug_line_sw(&v25, 0xFFFFFFFFu, &v26, 0xFFFF00u, 0, v18);
+
+ v26.vWorldPosition.x = a1.x * 30.0f;
+ v26.vWorldPosition.y = a1.y * 30.0f;
+ v26.vWorldPosition.z = a1.z * 30.0f;
+
+ pGame->pIndoorCameraD3D->do_draw_debug_line_sw(&v25, 0xFFFFFFFFu, &v26, 0xFFFF00u, 0, 0);
}
- }
- __asm { fild pBLVRenderParams->vPartyPos.z }
- memcpy(&v25, _EBX, sizeof(v25));
- __asm
- {
- fsubr [ebp+var_90.vWorldPosition.z]
- fmul [ebp+a1.z]
- fild pBLVRenderParams->vPartyPos.y
- fsubr [ebp+var_90.vWorldPosition.y]
- fmul [ebp+a1.y]
- faddp st(1), st
- fild pBLVRenderParams->vPartyPos.x
- fsubr [ebp+var_90.vWorldPosition.x]
- fmul [ebp+a1.x]
- faddp st(1), st
- fcomp ds:flt_4D84E8
- fnstsw ax
- }
- if ( !__SETP__(BYTE1(result) & 5, 0) )
- {
- result = (bool)&_EBX[1];
- memcpy(&v25, &_EBX[1], sizeof(v25));
- memcpy(&_EBX[1], &_EBX[3], sizeof(_EBX[1]));
- memcpy(&_EBX[3], &v25, sizeof(_EBX[3]));
- }
+ }
+
+
+ RenderVertexSoft v25; // [sp+10h] [bp-90h]@20
+ memcpy(&v25, arg0, sizeof(RenderVertexSoft));
+
+ float _dp = (v25.vWorldPosition.x - pBLVRenderParams->vPartyPos.x) * a1.x +
+ (v25.vWorldPosition.y - pBLVRenderParams->vPartyPos.y) * a1.y +
+ (v25.vWorldPosition.z - pBLVRenderParams->vPartyPos.z) * a1.z;
+ if (fabs(_dp) < 1e-6f)
+ {
+ memcpy(&v25, arg0 + 1, sizeof(RenderVertexSoft));
+ memcpy(arg0 + 1, arg0 + 3, sizeof(RenderVertexSoft));
+ memcpy(arg0 + 3, &v25, sizeof(RenderVertexSoft));
+ }
+
if ( byte_4D864C && pGame->uFlags & 8 )
{
- v19 = v31;
- if ( !LOBYTE(v31->field_4) )
+ RenderVertexSoft v26; // [sp+40h] [bp-60h]@20
+ if ( !LOBYTE(field_4) )
{
- __asm
- {
- fldz
- fstp [ebp+var_60.flt_2C]
- fild pParty->vPosition.x
- }
- a3 = (BLVFace *)(pParty->vPosition.y + pParty->sEyelevel);
- __asm
- {
- fstp [ebp+var_60.vWorldPosition.x]
- fild pParty->vPosition.z
- fstp [ebp+var_60.vWorldPosition.y]
- fild [ebp+a3]
- fstp [ebp+var_60.vWorldPosition.z]
- fldz
- fstp [esp+0A0h+var_A0]
- }
- IndoorCameraD3D::do_draw_debug_line_sw(pGame->pIndoorCameraD3D, &v26, 0xFF0000u, _EBX, 0xFF0000u, 0, v20);
- __asm
- {
- fldz
- fstp [esp+0A0h+var_A0]
- }
- IndoorCameraD3D::do_draw_debug_line_sw(pGame->pIndoorCameraD3D, &v26, 0xFF00u, _EBX + 1, 0xFF00u, 0, v21);
- __asm
- {
- fldz
- fstp [esp+0A0h+var_A0]
- }
- IndoorCameraD3D::do_draw_debug_line_sw(pGame->pIndoorCameraD3D, &v26, 0xFFu, _EBX + 2, 0xFFu, 0, v22);
- __asm
- {
- fldz
- fstp [esp+0A0h+var_A0]
- }
- IndoorCameraD3D::do_draw_debug_line_sw(pGame->pIndoorCameraD3D, &v26, 0xFFFFFFu, _EBX + 3, 0xFFFFFFu, 0, v23);
- LOBYTE(v19->field_4) = 1;
+ v26.vWorldPosition.x = pParty->vPosition.x;
+ v26.vWorldPosition.y = pParty->vPosition.y;
+ v26.vWorldPosition.z = pParty->vPosition.z + pParty->sEyelevel;
+
+ pGame->pIndoorCameraD3D->do_draw_debug_line_sw(&v26, 0xFF0000u, arg0, 0xFF0000u, 0, 0);
+ pGame->pIndoorCameraD3D->do_draw_debug_line_sw(&v26, 0xFF00u, arg0 + 1, 0xFF00u, 0, 0);
+ pGame->pIndoorCameraD3D->do_draw_debug_line_sw(&v26, 0xFFu, arg0 + 2, 0xFFu, 0, 0);
+ pGame->pIndoorCameraD3D->do_draw_debug_line_sw(&v26, 0xFFFFFFu, arg0 + 3, 0xFFFFFFu, 0, 0);
+ LOBYTE(field_4) = 1;
}
- __asm
- {
- fld ds:flt_4D86E8
- fstp [esp+0A0h+var_A0]
- }
- IndoorCameraD3D::debug_outline_sw(thisa, _EBX, uNumVertices, 0x1EFF1Eu, v24);
+ pGame->pIndoorCameraD3D->debug_outline_sw(arg0, uNumVertices, 0x1EFF1Eu, 0.00019999999);
}
- LOBYTE(result) = 1;
- }
- return result;*/
+ return true;
}
@@ -1132,33 +770,16 @@
// 4D864C: using guessed type char byte_4D864C;
//----- (0049C681) --------------------------------------------------------
-char stru10::_49C681(BLVFace *pFace, IndoorCameraD3D_Vec4 *a3, RenderVertexSoft *pArrayOf4)
+char stru10::_49C681_DrawDebugStuff(BLVFace *pFace, IndoorCameraD3D_Vec4 *a3, RenderVertexSoft *pArrayOf4)
{
- stru10 *v4; // edi@1
- char *v5; // eax@1
- signed int v6; // ecx@1
- IndoorCameraD3D *v7; // esi@3
- char result; // al@6
- RenderVertexSoft a2a[4]; // [sp+Ch] [bp-C0h]@1
+ RenderVertexSoft pBounding[4]; // [sp+Ch] [bp-C0h]@1
- v4 = this;
- v5 = (char *)&a2a[0].flt_2C;
- v6 = 4;
- do
- {
- *(float *)v5 = 0.0;
- v5 += 48;
- --v6;
- }
- while ( v6 );
- v7 = pGame->pIndoorCameraD3D;
- _49D379(pFace, a2a);
+ CalcPolygonBoundingBox(pFace, pBounding);
if ( byte_4D864C && pGame->uFlags & 8 )
- pGame->pIndoorCameraD3D->debug_outline_sw(a2a, 4u, 0xFF1E1Eu, 0.000099999997);
- result = _49C9E3(pFace, a2a, 4u, pArrayOf4);
- if ( result )
- result = _49C720(pArrayOf4, a3);
- return result;
+ pGame->pIndoorCameraD3D->debug_outline_sw(pBounding, 4, 0xFF1E1E, 0.000099999997);
+ if (_49C9E3(pFace, pBounding, 4, pArrayOf4))
+ return _49C720(pArrayOf4, a3);
+ return false;
}
// 4D864C: using guessed type char byte_4D864C;
@@ -1300,7 +921,7 @@
a1.z = result->z;
if ( a1.x != 0.0
|| a1.y != 0.0
- || (/*UNDEF(v8),*/ v9 = a1.z < 0.0, v10 = 0, v11 = a1.z == 0.0, BYTE1(result) = HIBYTE(v8), a1.z != 0.0) )
+ || (/*UNDEF(v8),*/ v9 = a1.z < 0.0, v10 = 0, v11 = a1.z == 0.0, /*BYTE1(result) = HIBYTE(v8),*/ a1.z != 0.0) )
{
a1.Normalize();
v12 = a1.y;
@@ -1311,11 +932,7 @@
a2->z = a1.z;
result = (Vec3_float_ *)a3;
*a3 = -(v13 + v14 + v19 * a1.x);
- LOBYTE(result) = 1;
+ return true;
}
- else
- {
- LOBYTE(result) = 0;
- }
- return (bool)result;
+ return false;
}
diff -r c83d06692295 -r c0cf9393af64 stru10.h
--- a/stru10.h Mon Oct 22 09:20:49 2012 +0600
+++ b/stru10.h Mon Oct 29 09:28:08 2012 +0600
@@ -8,12 +8,12 @@
stru10();
virtual ~stru10();
char _49C5DA(struct BLVFace *a2, struct RenderVertexSoft *a3, int *a4, struct IndoorCameraD3D_Vec4 *a5, struct RenderVertexSoft *a6);
- char _49C681(struct BLVFace *pFace, struct IndoorCameraD3D_Vec4 *a3, struct RenderVertexSoft *pArrayOf4);
+ char _49C681_DrawDebugStuff(struct BLVFace *pFace, struct IndoorCameraD3D_Vec4 *a3, struct RenderVertexSoft *pArrayOf4);
char _49C720(struct RenderVertexSoft *a2, struct IndoorCameraD3D_Vec4 *a4);
bool _49C7C5(struct RenderVertexSoft *a1, struct RenderVertexSoft *a2, struct Vec3_float_ *a3, struct IndoorCameraD3D_Vec4 *a4);
bool _49C8DC(struct RenderVertexSoft *arg0, struct Vec3_float_ *a2, float *a3);
bool _49C9E3(struct BLVFace *a3, struct RenderVertexSoft *arg4, unsigned int uNumVertices, struct RenderVertexSoft *arg0);
- int _49D379(struct BLVFace *pFace, struct RenderVertexSoft *pVertices);
+ void CalcPolygonBoundingBox(struct BLVFace *pFace, struct RenderVertexSoft pOutVertices[4]);
void _49CE9E(struct BLVFace *pFace, struct RenderVertexSoft *a2, signed int a3, RenderVertexSoft *a4);
diff -r c83d06692295 -r c0cf9393af64 stru314.h
--- a/stru314.h Mon Oct 22 09:20:49 2012 +0600
+++ b/stru314.h Mon Oct 29 09:28:08 2012 +0600
@@ -29,6 +29,6 @@
Vec3_float_ field_4;
Vec3_float_ field_10;
Vec3_float_ field_1C;
- int field_28;
+ float dist;
};
#pragma pack(pop)
diff -r c83d06692295 -r c0cf9393af64 stru346.h
--- a/stru346.h Mon Oct 22 09:20:49 2012 +0600
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-#pragma once
-
-
-/* 386 */
-#pragma pack(push, 1)
-struct stru346
-{
- int field_0;
- int field_4;
- int field_8;
- int field_C;
- int field_10;
- int field_14;
- int field_18;
- int field_1C;
- int field_20;
- int field_24;
- int field_28;
- int field_2C;
- int field_30;
- int field_34;
- int field_38;
- int field_3C;
- int field_40;
- int field_44;
- int uParentBillboardID;
-};
-#pragma pack(pop)
-
diff -r c83d06692295 -r c0cf9393af64 stru6.cpp
--- a/stru6.cpp Mon Oct 22 09:20:49 2012 +0600
+++ b/stru6.cpp Mon Oct 29 09:28:08 2012 +0600
@@ -88,92 +88,61 @@
{
int v8; // eax@1
- v8 = this->uNumProjectiles;
+ v8 = uNumProjectiles;
if ( v8 != 32 )
{
- this->pProjectiles[v8].srcX = srcX;
- *((float *)&this->array_0[0].uSpellAnimLength + 7 * (this->uNumProjectiles + 21)) = srcY;
- this->pProjectiles[this->uNumProjectiles].srcZ = srcZ;
- this->pProjectiles[this->uNumProjectiles].dstX = dstX;
- this->pProjectiles[this->uNumProjectiles].dstY = dstY;
- this->pProjectiles[this->uNumProjectiles].dstZ = dstZ;
- this->pProjectiles[this->uNumProjectiles++].uTextureID = uTextureID;
+ pProjectiles[v8].srcX = srcX;
+ *((float *)&this->array_0[0].uSpellAnimLength + 7 * (uNumProjectiles + 21)) = srcY;
+ pProjectiles[uNumProjectiles].srcZ = srcZ;
+ pProjectiles[uNumProjectiles].dstX = dstX;
+ pProjectiles[uNumProjectiles].dstY = dstY;
+ pProjectiles[uNumProjectiles].dstZ = dstZ;
+ pProjectiles[uNumProjectiles++].uTextureID = uTextureID;
}
}
//----- (004A7298) --------------------------------------------------------
-int stru6::DrawProjectiles()
+void stru6::DrawProjectiles()
{
- stru6 *v1; // ebx@1
- char *v2; // eax@1
- signed int v3; // ecx@1
- unsigned __int8 v4; // zf@3
- unsigned __int8 v5; // sf@3
- IndoorCameraD3D *v6; // edi@3
- int result; // eax@3
- int v8; // esi@4
- int v9; // eax@5
float v10; // ST1C_4@8
float v11; // ST0C_4@8
IDirect3DTexture2 *v12; // [sp+20h] [bp-78h]@6
- RenderVertexSoft v13[2]; // [sp+30h] [bp-68h]@1
- float v14; // [sp+90h] [bp-8h]@3
- int v15; // [sp+94h] [bp-4h]@3
-
- v1 = this;
- v2 = (char *)&v13[0].flt_2C;
- v3 = 2;
- do
- {
- *(float *)v2 = 0.0;
- v2 += 48;
- --v3;
- }
- while ( v3 );
- v15 = 0;
- v4 = v1->uNumProjectiles == 0;
- v5 = v1->uNumProjectiles < 0;
- v6 = pGame->pIndoorCameraD3D;
- result = LODWORD(v6->flt_D0);
- v14 = v6->flt_D0;
- if ( !(v5 | v4) )
+ RenderVertexSoft v[2]; // [sp+30h] [bp-68h]@1
+
+ for (uint i = 0; i < uNumProjectiles; ++i)
{
- v8 = (int)&v1->pProjectiles[0].srcY;
- do
- {
- v13[0].vWorldPosition.x = *(float *)(v8 - 4);
- v13[0].vWorldPosition.y = *(float *)v8;
- v13[0].vWorldPosition.z = *(float *)(v8 + 4);
- v13[1].vWorldPosition.x = *(float *)(v8 + 8);
- v13[1].vWorldPosition.y = *(float *)(v8 + 12);
- v13[1].vWorldPosition.z = *(float *)(v8 + 16);
- v6->ViewTransform(v13, 2u);
- sr_42620A(v13);
- v6->_436BB7_project_and_stuff(v13, 2u, 0);
- v9 = *(int *)(v8 + 20);
- if ( v9 == -1 )
- v12 = 0;
- else
- v12 = pBitmaps_LOD->pHardwareTextures[v9];
- v10 = v14 / v13[1].vWorldViewPosition.x * 20.0;
- v11 = v14 / v13[0].vWorldViewPosition.x * 20.0;
- pRenderer->DrawProjectile(
- v13[0].vWorldViewProjX,
- v13[0].vWorldViewProjY,
- v13[0].vWorldViewPosition.x,
- v11,
- v13[1].vWorldViewProjX,
- v13[1].vWorldViewProjY,
- v13[1].vWorldViewPosition.x,
- v10,
- v12);
- ++v15;
- v8 += 28;
- result = v15;
- }
- while ( v15 < v1->uNumProjectiles );
- }
- return result;
+ auto p = pProjectiles + i;
+
+ v[0].vWorldPosition.x = p->srcX;
+ v[0].vWorldPosition.y = p->srcY;
+ v[0].vWorldPosition.z = p->srcZ;
+ v[1].vWorldPosition.x = p->dstX;
+ v[1].vWorldPosition.y = p->dstY;
+ v[1].vWorldPosition.z = p->dstZ;
+ pGame->pIndoorCameraD3D->ViewTransform(v, 2);
+
+ sr_42620A(v);
+
+ pGame->pIndoorCameraD3D->Project(v, 2, 0);
+
+ if (p->uTextureID != -1)
+ v12 = pBitmaps_LOD->pHardwareTextures[p->uTextureID];
+ else
+ v12 = 0;
+
+ v10 = pGame->pIndoorCameraD3D->fov_x / v[1].vWorldViewPosition.x * 20.0;
+ v11 = pGame->pIndoorCameraD3D->fov_x / v[0].vWorldViewPosition.x * 20.0;
+ pRenderer->DrawProjectile(
+ v[0].vWorldViewProjX,
+ v[0].vWorldViewProjY,
+ v[0].vWorldViewPosition.x,
+ v11,
+ v[1].vWorldViewProjX,
+ v[1].vWorldViewProjY,
+ v[1].vWorldViewPosition.x,
+ v10,
+ v12);
+ }
}
//----- (004A73AA) --------------------------------------------------------
@@ -207,7 +176,7 @@
local_0.flt_10 = 0.0;
local_0.flt_14 = 0.0;
local_0.flt_18 = 0.0;
- local_0.field_20 = (rand() & 0x40) + 96;
+ local_0.timeToLive = (rand() & 0x40) + 96;
local_0.uTextureID = uTextureID;
local_0.flt_28 = 1.0;
pGame->pParticleEngine->AddParticle(&local_0);
@@ -239,7 +208,7 @@
local_0.flt_14 = 0.0;
local_0.flt_18 = 0.0;
local_0.flt_28 = 1.0;
- local_0.field_20 = (rand() & 0x7F) + 128;
+ local_0.timeToLive = (rand() & 0x7F) + 128;
local_0.uTextureID = uTextureID;
pGame->pParticleEngine->AddParticle(&local_0);
local_0.x = (double)a2->vPosition.x - 4.0;
@@ -262,7 +231,7 @@
local_0.uDiffuse = uDiffuse;
local_0.z = v4;
v5 = 10;
- local_0.field_20 = (rand() & 0x7F) + 128;
+ local_0.timeToLive = (rand() & 0x7F) + 128;
local_0.uTextureID = uTextureID;
local_0.flt_28 = 1.0;
do
@@ -312,7 +281,7 @@
local_0.x = v5;
local_0.y = (double)a2->vPosition.y;
local_0.z = (double)a2->vPosition.z;
- local_0.field_20 = (rand() & 0x7F) + 128;
+ local_0.timeToLive = (rand() & 0x7F) + 128;
local_0.uTextureID = pBitmaps_LOD->LoadTexture("effpar01", TEXTURE_DEFAULT);
i = 10;
local_0.flt_28 = 1.0;
@@ -388,7 +357,7 @@
v4 = (double)a1->vPosition.y;
local_0.bFree = 2048;
local_0.uDiffuse = 0x7F7F7Fu;
- local_0.field_20 = 1;
+ local_0.timeToLive = 1;
local_0.y = v4;
local_0.z = (double)a1->vPosition.z;
local_0.flt_10 = 0.0;
@@ -422,7 +391,7 @@
v5 = rand();
v6 = 10;
Dst.flt_28 = 1.0;
- Dst.field_20 = (v5 & 0x7F) + 128;
+ Dst.timeToLive = (v5 & 0x7F) + 128;
do
{
Dst.flt_10 = (double)(rand() & 0x1FF) - 255.0;
@@ -443,10 +412,10 @@
a1->vPosition.z,
a1->uSectorID,
uRadius,
- uDiffuse >> 16,
- BYTE1(uDiffuse),
- uDiffuse != 0,
- (int *)byte_4E94D3);
+ (uDiffuse & 0x00FF0000) >> 16,
+ (uDiffuse & 0x0000FF00) >> 8,
+ uDiffuse & 0x000000FF,
+ byte_4E94D3);
}
// 4E94D3: using guessed type char byte_4E94D3;
@@ -475,7 +444,7 @@
v6 = rand();
local_0.flt_28 = 1.0;
v7 = 0.0 * a4;
- local_0.field_20 = (v6 & 0x7F) + 128;
+ local_0.timeToLive = (v6 & 0x7F) + 128;
local_0.uTextureID = uTextureID;
a1a = v7;
local_0.flt_10 = v7;
@@ -557,7 +526,7 @@
local_0.flt_18 = 0.0;
v10 = rand();
LODWORD(local_0.flt_28) = 0x40400000u;
- local_0.field_20 = (v10 & 0x3F) + 64;
+ local_0.timeToLive = (v10 & 0x3F) + 64;
local_0.uTextureID = pSpriteFrameTable->GetFrame(v5->uSpriteID, v3->uSpriteFrameID)->pHwSpriteIDs[0];
pGame->pParticleEngine->AddParticle(&local_0);
v11 = (double)v3->vPosition.x;
@@ -565,7 +534,7 @@
local_0.x = v11;
local_0.y = (double)v3->vPosition.y;
local_0.z = (double)v3->vPosition.z;
- local_0.field_20 = (rand() & 0x3F) + 64;
+ local_0.timeToLive = (rand() & 0x3F) + 64;
pGame->pParticleEngine->AddParticle(&local_0);
v2->array_0[v3->field_54 & 0x1F].flt_4 = (double)v3->vPosition.x;
v2->array_0[v3->field_54 & 0x1F].flt_8 = (double)v3->vPosition.y;
@@ -587,7 +556,7 @@
local_0.flt_10 = 0.0;
local_0.flt_14 = 0.0;
local_0.flt_18 = 0.0;
- local_0.field_20 = (rand() & 0x3F) + 64;
+ local_0.timeToLive = (rand() & 0x3F) + 64;
local_0.uTextureID = pSpriteFrameTable->GetFrame(v5->uSpriteID, a2->uSpriteFrameID)->pHwSpriteIDs[0];
pGame->pParticleEngine->AddParticle(&local_0);
}
@@ -637,7 +606,7 @@
memset(&Dst, 0, 0x68u);
Dst.bFree = 1036;
- Dst.field_20 = (rand() & 0x7F) + 128;
+ Dst.timeToLive = (rand() & 0x7F) + 128;
v3 = pActor;
Dst.uTextureID = pBitmaps_LOD->LoadTexture("effpar02", TEXTURE_DEFAULT);
pActora = 50;
@@ -687,7 +656,7 @@
v5 = rand();
local_0.flt_28 = 1.0;
v6 = 8;
- local_0.field_20 = (v5 & 0x7F) + 128;
+ local_0.timeToLive = (v5 & 0x7F) + 128;
v7 = v4->uTextureID_effpar1;
v12 = (double)x;
local_0.uTextureID = v7;
@@ -752,7 +721,7 @@
memset(&local_0, 0, 0x68u);
local_0.bFree = 1029;
local_0.uDiffuse = 0x7E7E7Eu;
- local_0.field_20 = (rand() & 0x7F) + 128;
+ local_0.timeToLive = (rand() & 0x7F) + 128;
local_0.uTextureID = v2->uTextureID_effpar1;
v3 = 8;
local_0.flt_28 = 1.0;
@@ -1489,11 +1458,8 @@
}
//----- (004A8C27) --------------------------------------------------------
-HRESULT stru6::RenderSpecialEffects()
+void stru6::RenderSpecialEffects()
{
- stru6 *v1; // ebx@1
- int *v2; // edi@1
- HRESULT result; // eax@3
double v4; // st7@4
double v5; // st6@4
double v6; // st7@4
@@ -1518,41 +1484,36 @@
SpriteFrame *v70; // [sp+E4h] [bp-8h]@8
unsigned int v26; // [sp+E8h] [bp-4h]@3
- //by the time we first get in this function, dword_0005D4 is still not initialized in the original exe
- //maybe the following code in never executed at all
-
- v1 = this;
- v2 = &this->uNumProjectiles;
- if ( this->uNumProjectiles )
+ if (uNumProjectiles)
{
DrawProjectiles();
- *v2 = 0;
+ uNumProjectiles = 0;
}
- result = v1->uFadeTime;
- v1->field_204 = 0;
- v26 = result;
- if ( result > 0 )
+
+ field_204 = 0;
+ v26 = uFadeTime;
+ if ( v26 > 0 )
{
- v4 = (double)(signed int)v26 / (double)v1->uFadeTime2;
+ v4 = (double)(signed int)v26 / (double)uFadeTime2;
v5 = 1.0 - v4 * v4;
v6 = v5;
if ( v5 > 0.9 )
v6 = 1.0 - (v5 - 0.9) * 10.0;
v7 = v6;
- pRenderer->_4A52F1(v1->uFadeColor, v7);
- result = pEventTimer->uTimeElapsed;
- v1->uFadeTime -= pEventTimer->uTimeElapsed;
+ pRenderer->_4A52F1(uFadeColor, v7);
+ uFadeTime -= pEventTimer->uTimeElapsed;
}
- if ( v1->uAnimLength > 0 )
+
+ if (uAnimLength > 0)
{
v8 = 8
* pSpriteFrameTable->pSpriteSFrames[pSpriteFrameTable->FastFindSprite("spell84")].uAnimLength
- - v1->uAnimLength;
+ - uAnimLength;
v9 = pSpriteFrameTable->FastFindSprite("spell84");
v10 = pSpriteFrameTable->GetFrame(v9, v8);
v11 = v10->pHwSpriteIDs[0];
v70 = v10;
- v1->uAnimLength -= pEventTimer->uTimeElapsed;
+ uAnimLength -= pEventTimer->uTimeElapsed;
if ( pRenderer->pRenderD3D )
{
v12 = (double)(signed int)pViewport->uViewportX;
@@ -1604,7 +1565,7 @@
pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZFUNC, 8u);
pRenderer->pRenderD3D->pDevice->DrawPrimitive(
D3DPT_TRIANGLEFAN,
- 452,
+ D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1,
vd3d,
4,
28);
@@ -1615,15 +1576,15 @@
pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 0);
pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, true);
pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DITHERENABLE, true);
- result = pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZFUNC, 2);
+ pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZFUNC, 2);
}
else
{
vsr.pTarget = pRenderer->pTargetSurface;
vsr.uParentBillboardID = -1;
vsr.pTargetZ = pRenderer->pActiveZBuffer;
- vsr.field_8 = (signed int)(pViewport->uViewportZ - pViewport->uViewportX) / 2;
- vsr.field_C = pViewport->uViewportW;
+ vsr.uScreenSpaceX = (signed int)(pViewport->uViewportZ - pViewport->uViewportX) / 2;
+ vsr.uScreenSpaceY = pViewport->uViewportW;
v24 = 16777216;
LODWORD(v18) = 0;
HIDWORD(v18) = (signed __int16)(LOWORD(pViewport->uViewportZ) - LOWORD(pViewport->uViewportX));
@@ -1638,15 +1599,13 @@
vsr.uViewportX = pViewport->uViewportX;
vsr.uViewportZ = pViewport->uViewportZ;
vsr.uViewportY = pViewport->uViewportY;
- result = pViewport->uViewportW;
- vsr.field_28 = 0;
+ vsr.sZValue = 0;
vsr.uViewportW = pViewport->uViewportW;
vsr.uFlags = 0;
if ( v11 >= 0 )
- result = pSprites_LOD->pSpriteHeaders[v11]._4ACC38(&vsr, 1);
+ pSprites_LOD->pSpriteHeaders[v11]._4ACC38(&vsr, 1);
}
}
- return result;
}
//----- (004A902A) --------------------------------------------------------
diff -r c83d06692295 -r c0cf9393af64 stru6.h
--- a/stru6.h Mon Oct 22 09:20:49 2012 +0600
+++ b/stru6.h Mon Oct 29 09:28:08 2012 +0600
@@ -117,7 +117,7 @@
}
void DoAddProjectile(float srcX, float srcY, float srcZ, float dstX, float dstY, float dstZ, unsigned int uTextureID);
- int DrawProjectiles();
+ void DrawProjectiles();
void _4A73AA_hanging_trace_particles___like_fire_strike_ice_blast_etc(struct LayingItem *a2, unsigned int uDiffuse, unsigned int uTextureID);
void _4A75CC_single_spell_collision_particle(struct LayingItem *a1, unsigned int uDiffuse, unsigned int uTextureID);
void _4A7688_fireball_collision_particle(struct LayingItem *a2);
@@ -136,7 +136,7 @@
int SetPlayerBuffAnim(unsigned __int16 uSpellID, unsigned __int16 uPlayerID);
void FadeScreen__like_Turn_Undead_and_mb_Armageddon(unsigned int uDiffuseColor, unsigned int uFadeTime);
int _4A8BFC();
- HRESULT RenderSpecialEffects();
+ void RenderSpecialEffects();
void DrawPlayerBuffAnims();
void LoadAnimations();
diff -r c83d06692295 -r c0cf9393af64 stru9.cpp
--- a/stru9.cpp Mon Oct 22 09:20:49 2012 +0600
+++ b/stru9.cpp Mon Oct 29 09:28:08 2012 +0600
@@ -29,6 +29,8 @@
signed int a3a; // [sp+38h] [bp+10h]@12
int a3b; // [sp+38h] [bp+10h]@25
+ __debugbreak();
+
thisa = this;
static RenderVertexSoft static_AE3FB4;
@@ -78,11 +80,11 @@
v11 = *(float *)v8;
++v21;
result = 0;
- static_AE3FA4.flt_0 = *((float *)v8 - 1);
+ static_AE3FA4.x = *((float *)v8 - 1);
static_AE33A0.uNumVertices = 0;
a3a = 0;
- static_AE3FA4.flt_4 = v11;
- static_AE3FA4.flt_8 = v10;
+ static_AE3FA4.y = v11;
+ static_AE3FA4.z = v10;
if ( (signed int)*v7 <= 0 )
goto LABEL_32;
do
@@ -99,7 +101,7 @@
v19 = &pVertices[result];
}
v20 = v12;
- if ( _49895A(v12, a2, &static_AE3FA4) )
+ if ( AreVectorsCollinear(v12, a2, &static_AE3FA4) )
AddVertex(&static_AE33A0, v12);
v7 = pOutNumVertices;
result = a3a++ + 1;
@@ -155,10 +157,10 @@
{
RenderVertexSoft *v9; // ecx@1
Vec3_float_ *v10; // esi@1
- char *v11; // ebx@1
+ //char *v11; // ebx@1
RenderVertexSoft *v12; // edi@1
double v13; // st7@1
- bool result; // eax@4
+ //bool result; // eax@4
signed int v15; // edx@9
RenderVertexSoft *v16; // ecx@9
double v17; // st7@9
@@ -169,65 +171,63 @@
v9 = a1;
v10 = a5;
- v11 = (char *)&a1->vWorldPosition.z;
+ //v11 = (char *)&a1->vWorldPosition.z;
+ auto v11 = a1;
v12 = a3;
v13 = a1->vWorldPosition.y * a5->y + a5->x * a1->vWorldPosition.x + a1->vWorldPosition.z * a5->z;
v20 = v13;
v21 = v13 >= a6;
- result = 0;
+
*pOutNumVertices = 0;
if ( a2 <= 0 )
- goto LABEL_19;
+ return false;
+ v19 = 1;
while ( 1 )
{
- v19 = result + 1;
if ( v21 )
{
++a3;
- memcpy(v12, v11 - 8, 0x30u);
+ memcpy(v12, v11, sizeof(RenderVertexSoft));
++*pOutNumVertices;
v10 = a5;
v12 = a3;
v9 = a1;
}
v15 = 0;
- v16 = &v9[(result + 1) % a2];
+ v16 = &v9[v19 % a2];
v17 = v16->vWorldPosition.z * v10->z + v16->vWorldPosition.y * v10->y + v10->x * v16->vWorldPosition.x;
if ( v17 >= a6 )
v15 = 1;
if ( v21 != v15 )
{
v18 = (a6 - v20) / (v17 - v20);
- v12->vWorldPosition.x = (v16->vWorldPosition.x - *((float *)v11 - 2)) * v18 + *((float *)v11 - 2);
+ v12->vWorldPosition.x = (v16->vWorldPosition.x - v11->vWorldPosition.x) * v18 + v11->vWorldPosition.x;
+ v12->vWorldPosition.y = (v16->vWorldPosition.y - v11->vWorldPosition.y) * v18 + v11->vWorldPosition.y;
+ v12->vWorldPosition.z = (v16->vWorldPosition.z - v11->vWorldPosition.z) * v18 + v11->vWorldPosition.z;
+ v12->u = (v16->u - v11->u) * v18 + v11->u;
+ v12->v = (v16->v - v11->v) * v18 + v11->v;
++v12;
a3 = v12;
- *((float *)v12 - 11) = (v16->vWorldPosition.y - *((float *)v11 - 1)) * v18 + *((float *)v11 - 1);
- *((float *)v12 - 10) = (v16->vWorldPosition.z - *(float *)v11) * v18 + *(float *)v11;
- *((float *)v12 - 3) = (v16->u - *((float *)v11 + 7)) * v18 + *((float *)v11 + 7);
- *((float *)v12 - 2) = (v16->v - *((float *)v11 + 8)) * v18 + *((float *)v11 + 8);
++*pOutNumVertices;
*a7 = 1;
}
- ++result;
- v11 += 48;
+
+ v11++;
v21 = v15;
v20 = v17;
if ( v19 >= a2 )
break;
v9 = a1;
+ v19++;
}
- result = (bool)pOutNumVertices;
- if ( (signed int)*pOutNumVertices >= 3 )
- LOBYTE(result) = 1;
- else
-LABEL_19:
- LOBYTE(result) = 0;
- return result;
+
+ return *pOutNumVertices >= 3;
}
//----- (00498737) --------------------------------------------------------
void stru9::AddVertex(struct VertexBuffer *pVertexBuffer, struct RenderVertexSoft *pVertex)
{
+ __debugbreak();
RenderVertexSoft *v3; // eax@1
v3 = &pVertexBuffer->pVertices[pVertexBuffer->uNumVertices];
@@ -253,31 +253,22 @@
char v14; // c2@24
char v15; // c3@24
float a1a; // [sp+10h] [bp+8h]@5
+
+ __debugbreak();
static stru312 static_AE3388;
- /*if ( !(static_init_flag__AE3388_bit1__AE3378_bit2 & 1) )
- {
- static_init_flag__AE3388_bit1__AE3378_bit2 |= 1u;
- stru312::stru312(&static_AE3388);
- atexit(nullsub_16);
- }*/
static stru312 static_AE3378;
- /*if ( !(static_init_flag__AE3388_bit1__AE3378_bit2 & 2) )
- {
- static_init_flag__AE3388_bit1__AE3378_bit2 |= 2u;
- stru312::stru312(&static_AE3378);
- atexit(nullsub_15);
- }*/
+
v6 = a1;
- static_AE3378.flt_0 = a1->vWorldPosition.x - a3->vWorldPosition.x;
- static_AE3378.flt_4 = a1->vWorldPosition.y - a3->vWorldPosition.y;
+ static_AE3378.x = a1->vWorldPosition.x - a3->vWorldPosition.x;
+ static_AE3378.y = a1->vWorldPosition.y - a3->vWorldPosition.y;
HIWORD(result) = HIWORD(a4);
- static_AE3378.flt_8 = a1->vWorldPosition.z - a3->vWorldPosition.z;
- static_AE3388.flt_0 = a2->vWorldPosition.x - a1->vWorldPosition.x;
- static_AE3388.flt_4 = a2->vWorldPosition.y - a1->vWorldPosition.y;
- static_AE3388.flt_8 = a2->vWorldPosition.z - a1->vWorldPosition.z;
- a1a = static_AE3388.flt_0 * a4->flt_0 + static_AE3388.flt_8 * a4->flt_8 + static_AE3388.flt_4 * a4->flt_4;
- v8 = static_AE3378.flt_0 * a4->flt_0 + static_AE3378.flt_8 * a4->flt_8 + static_AE3378.flt_4 * a4->flt_4;
+ static_AE3378.z = a1->vWorldPosition.z - a3->vWorldPosition.z;
+ static_AE3388.x = a2->vWorldPosition.x - a1->vWorldPosition.x;
+ static_AE3388.y = a2->vWorldPosition.y - a1->vWorldPosition.y;
+ static_AE3388.z = a2->vWorldPosition.z - a1->vWorldPosition.z;
+ a1a = static_AE3388.x * a4->x + static_AE3388.z * a4->z + static_AE3388.y * a4->y;
+ v8 = static_AE3378.x * a4->x + static_AE3378.z * a4->z + static_AE3378.y * a4->y;
//UNDEF(v9);
if ( a1a != 0.0 )
{
@@ -338,39 +329,18 @@
// AE3398: using guessed type char static_init_flag__AE3388_bit1__AE3378_bit2;
//----- (0049895A) --------------------------------------------------------
-bool stru9::_49895A(struct RenderVertexSoft *a1, struct RenderVertexSoft *a2, struct stru312 *a3)
+bool stru9::AreVectorsCollinear(struct RenderVertexSoft *a1, struct RenderVertexSoft *a2, struct stru312 *a3)
{
- double v4; // st7@3
- double v5; // st7@3
- __int16 v6; // fps@3
- char v7; // c0@3
- char v8; // c2@3
- char v9; // c3@3
- bool result; // eax@3
-
static stru312 static_F942A0;
- /*static bool __init_flag1 = false;
- if (!__init_flag1)
- {
- __init_flag1 = true;
- stru312::stru312(&static_F942A0);
- }*/
+ static_F942A0.x = a1->vWorldPosition.x - a2->vWorldPosition.x;
+ static_F942A0.y = a1->vWorldPosition.y - a2->vWorldPosition.y;
+ static_F942A0.z = a1->vWorldPosition.z - a2->vWorldPosition.z;
- static_F942A0.flt_0 = a1->vWorldPosition.x - a2->vWorldPosition.x;
- static_F942A0.flt_4 = a1->vWorldPosition.y - a2->vWorldPosition.y;
- v4 = a1->vWorldPosition.z - a2->vWorldPosition.z;
- HIWORD(result) = HIWORD(a3);
- static_F942A0.flt_8 = v4;
- v5 = v4 * a3->flt_8 + static_F942A0.flt_4 * a3->flt_4 + static_F942A0.flt_0 * a3->flt_0;
- //UNDEF(v6);
- flt_F942B0 = v5;
- v7 = v5 < 0.0;
- v8 = 0;
- v9 = v5 == 0.0;
- BYTE1(result) = HIBYTE(v6);
- LOBYTE(result) = v5 >= 0.0;
- return result;
+ static float flt_F942B4 = static_F942A0.z * a3->z + static_F942A0.y * a3->y + static_F942A0.x * a3->x;
+ if (flt_F942B4 >= 0)
+ return true;
+ return false;
}
@@ -380,155 +350,88 @@
bool r1;
bool r2;
- r1 = _49895A(a1, a3, a4);
- r2 = _49895A(a2, a3, a4);
+ r1 = AreVectorsCollinear(a1, a3, a4);
+ r2 = AreVectorsCollinear(a2, a3, a4);
return !r1 && r2 == 1 ||
r1 == 1 && !r2;
}
//----- (004980B9) --------------------------------------------------------
-bool stru9::_4980B9(RenderVertexSoft *a1, signed int a2, float a3, float a4, float a5, RenderVertexSoft *a6, unsigned int *pOutNumVertices)
+bool stru9::_4980B9(RenderVertexSoft *a1, unsigned int uNumVertices, float a3, float a4, float a5, RenderVertexSoft *pOutVertices, unsigned int *pOutNumVertices)
{
- bool result; // eax@7
- unsigned int *v9; // ebx@7
- char *v10; // edi@8
- RenderVertexSoft *v11; // esi@9
RenderVertexSoft *v12; // ecx@9
double v13; // st7@12
double v14; // st6@12
double v15; // st5@12
- RenderVertexSoft *v16; // edi@13
- int v17; // ecx@25
- VertexBuffer *v18; // edx@26
- char *v19; // eax@26
- unsigned int i; // ecx@26
- bool v21; // [sp+0h] [bp-24h]@9
- char *v22; // [sp+Ch] [bp-18h]@8
- RenderVertexSoft *a2a; // [sp+10h] [bp-14h]@0
- RenderVertexSoft *a1a; // [sp+14h] [bp-10h]@0
signed int v25; // [sp+18h] [bp-Ch]@7
- signed int v26; // [sp+1Ch] [bp-8h]@12
- int v27; // [sp+1Ch] [bp-8h]@25
- stru9 *thisa; // [sp+20h] [bp-4h]@1
-
- thisa = this;
static RenderVertexSoft stru_AE4BFC;
- static bool __init_flag1 = false;
- if (!__init_flag1)
- {
- __init_flag1 = true;
+ static stru312 static_sub_4980B9_stru_AE4BEC; // idb
+ static VertexBuffer static_sub_4980B9_stru_AE3FE8; // idb
- stru_AE4BFC.flt_2C = 0.0;
- }
-
- static stru312 static_sub_4980B9_stru_AE4BEC; // idb
- static bool __init_flag2 = false;
- if (!__init_flag2)
+ v25 = 0;
+ if (uNumVertices <= 0)
{
- __init_flag2 = true;
-
- //stru312::stru312(&static_sub_4980B9_stru_AE4BEC);
- }
-
- static VertexBuffer static_sub_4980B9_stru_AE3FE8; // idb
- static bool __init_flag3 = false;
- if (!__init_flag3)
- {
- __init_flag3 = true;
-
- //VertexBuffer::VertexBuffer(&static_sub_4980B9_stru_AE3FE8);
+ *pOutNumVertices = 0;
+ return true;
}
- result = 0;
- v9 = pOutNumVertices;
- v25 = 0;
- if ( a2 <= 0 )
- goto LABEL_32;
- v10 = (char *)&a1->vWorldPosition.z;
- v22 = (char *)&a1->vWorldPosition.z;
- do
+ for (uint i = 0; i < uNumVertices; ++i)
{
- v11 = (RenderVertexSoft *)(v10 - 8);
- v21 = result + 1;
- v12 = &a1[(result + 1) % a2];
- if ( *((float *)v10 - 2) != v12->vWorldPosition.x
- || *((float *)v10 - 1) != v12->vWorldPosition.y
- || *(float *)v10 != v12->vWorldPosition.z )
+ v12 = &a1[(i + 1) % uNumVertices];
+ if (a1[i].vWorldPosition.x != v12->vWorldPosition.x ||
+ a1[i].vWorldPosition.y != v12->vWorldPosition.y ||
+ a1[i].vWorldPosition.z!= v12->vWorldPosition.z)
{
- v13 = v12->vWorldPosition.x - v11->vWorldPosition.x;
- v14 = v12->vWorldPosition.y - *((float *)v10 - 1);
- v15 = v12->vWorldPosition.z - *(float *)v10;
+ v13 = v12->vWorldPosition.x - a1[i].vWorldPosition.x;
+ v14 = v12->vWorldPosition.y - a1[i].vWorldPosition.y;
+ v15 = v12->vWorldPosition.z - a1[i].vWorldPosition.z;
++v25;
- result = 0;
+
static_sub_4980B9_stru_AE3FE8.uNumVertices = 0;
- v26 = 0;
- static_sub_4980B9_stru_AE4BEC.flt_0 = a4 * v15 - v14 * a5;
- static_sub_4980B9_stru_AE4BEC.flt_4 = v13 * a5 - v15 * a3;
- static_sub_4980B9_stru_AE4BEC.flt_8 = v14 * a3 - v13 * a4;
- if ( (signed int)*v9 <= 0 )
- goto LABEL_32;
- do
+ static_sub_4980B9_stru_AE4BEC.x = a4 * v15 - v14 * a5;
+ static_sub_4980B9_stru_AE4BEC.y = v13 * a5 - v15 * a3;
+ static_sub_4980B9_stru_AE4BEC.z = v14 * a3 - v13 * a4;
+ if (*pOutNumVertices == 0)
+ return true;
+
+ for (uint j = 0; j < *pOutNumVertices; ++j)
{
- v16 = &a6[result];
- if ( result )
+ if (j)
{
- if ( _4989E1(a1a, &a6[result], v11, &static_sub_4980B9_stru_AE4BEC)
- && _498774(a1a, v16, v11, &static_sub_4980B9_stru_AE4BEC, &stru_AE4BFC) )
- AddVertex(&static_sub_4980B9_stru_AE3FE8, &stru_AE4BFC);
- }
- else
- {
- a2a = &a6[result];
+ if (_4989E1(&pOutVertices[j - 1], &pOutVertices[j], &a1[i], &static_sub_4980B9_stru_AE4BEC) &&
+ _498774(&pOutVertices[j - 1], &pOutVertices[j], &a1[i], &static_sub_4980B9_stru_AE4BEC, &stru_AE4BFC))
+ AddVertex(&static_sub_4980B9_stru_AE3FE8, &stru_AE4BFC);
}
- a1a = v16;
- if ( _49895A(v16, v11, &static_sub_4980B9_stru_AE4BEC) )
- AddVertex(&static_sub_4980B9_stru_AE3FE8, v16);
- v9 = pOutNumVertices;
- result = v26++ + 1;
+
+ if (AreVectorsCollinear(&pOutVertices[j], &a1[i], &static_sub_4980B9_stru_AE4BEC))
+ AddVertex(&static_sub_4980B9_stru_AE3FE8, &pOutVertices[j]);
}
- while ( v26 < (signed int)*pOutNumVertices );
- if ( !static_sub_4980B9_stru_AE3FE8.uNumVertices )
- goto LABEL_32;
- if ( _4989E1(v16, a2a, v11, &static_sub_4980B9_stru_AE4BEC)
- && _498774(v16, a2a, v11, &static_sub_4980B9_stru_AE4BEC, &stru_AE4BFC) )
- AddVertex(&static_sub_4980B9_stru_AE3FE8, &stru_AE4BFC);
- v17 = static_sub_4980B9_stru_AE3FE8.uNumVertices;
- v27 = 0;
- if ( static_sub_4980B9_stru_AE3FE8.uNumVertices > 0 )
+
+ if (!static_sub_4980B9_stru_AE3FE8.uNumVertices)
{
- v18 = &static_sub_4980B9_stru_AE3FE8;
- v19 = (char *)&a6->vWorldPosition.y;
- for ( i = (char *)&static_sub_4980B9_stru_AE3FE8.pVertices[0].flt_20 - (char *)a6;
- ;
- i = (char *)&static_sub_4980B9_stru_AE3FE8.pVertices[0].flt_20 - (char *)a6 )
- {
- ++v27;
- *((int *)v19 - 1) = LODWORD(v18->pVertices[0].vWorldPosition.x);
- v18 = (VertexBuffer *)((char *)v18 + 48);
- *(float *)v19 = *(float *)&v19[(char *)&static_sub_4980B9_stru_AE3FE8 - (char *)a6];
- *((float *)v19 + 1) = *(float *)&v19[(char *)&static_sub_4980B9_stru_AE3FE8.pVertices[0].vWorldPosition.y
- - (char *)a6];
- *((float *)v19 + 8) = *(float *)&v19[i];
- *((float *)v19 + 9) = *(float *)&v19[(char *)&static_sub_4980B9_stru_AE3FE8.pVertices[0].u - (char *)a6];
- v17 = static_sub_4980B9_stru_AE3FE8.uNumVertices;
- v19 += 48;
- if ( v27 >= static_sub_4980B9_stru_AE3FE8.uNumVertices )
- break;
- }
+ *pOutNumVertices = 0;
+ return true;
}
- v9 = pOutNumVertices;
- v10 = v22;
- *pOutNumVertices = v17;
+ if (_4989E1(&pOutVertices[*pOutNumVertices - 1], &pOutVertices[0], &a1[i], &static_sub_4980B9_stru_AE4BEC) &&
+ _498774(&pOutVertices[*pOutNumVertices - 1], &pOutVertices[0], &a1[i], &static_sub_4980B9_stru_AE4BEC, &stru_AE4BFC) )
+ AddVertex(&static_sub_4980B9_stru_AE3FE8, &stru_AE4BFC);
+
+ for (uint j = 0; j < static_sub_4980B9_stru_AE3FE8.uNumVertices; ++j)
+ {
+ pOutVertices[j].vWorldPosition.y = static_sub_4980B9_stru_AE3FE8.pVertices[j].vWorldPosition.x;
+ pOutVertices[j].vWorldPosition.y = static_sub_4980B9_stru_AE3FE8.pVertices[j].vWorldPosition.y;
+ pOutVertices[j].vWorldPosition.z = static_sub_4980B9_stru_AE3FE8.pVertices[j].vWorldPosition.z;
+ pOutVertices[j].u = static_sub_4980B9_stru_AE3FE8.pVertices[j].u;
+ pOutVertices[j].v = static_sub_4980B9_stru_AE3FE8.pVertices[j].v;
+ }
+ *pOutNumVertices = static_sub_4980B9_stru_AE3FE8.uNumVertices;
}
- result = v21;
- v10 += 48;
- v22 = v10;
}
- while ( v21 < a2 );
- if ( v25 < 3 )
-LABEL_32:
- *v9 = 0;
- return 1;
+
+ if (v25 < 3)
+ *pOutNumVertices = 0;
+
+ return true;
}
// AE4C2C: using guessed type char static_sub_4980B9_byte_AE4C2C_init_flag;
\ No newline at end of file
diff -r c83d06692295 -r c0cf9393af64 stru9.h
--- a/stru9.h Mon Oct 22 09:20:49 2012 +0600
+++ b/stru9.h Mon Oct 29 09:28:08 2012 +0600
@@ -32,10 +32,11 @@
{
}
- float flt_0;
- float flt_4;
- float flt_8;
+ float x;
+ float y;
+ float z;
char field_C;
+ char pad[3];
};
#pragma pack(pop)
@@ -49,12 +50,12 @@
inline stru9()
{}
- bool _4980B9(struct RenderVertexSoft *a1, signed int a2, float a3, float a4, float a5, struct RenderVertexSoft *a6, unsigned int *pOutNumVertices);
+ bool _4980B9(struct RenderVertexSoft *a1, unsigned int uNumVertices, float a3, float a4, float a5, struct RenderVertexSoft *pOutVertices, unsigned int *pOutNumVertices);
bool _498377(struct RenderVertexSoft *a1, unsigned int uNumVertices, struct IndoorCameraD3D_Vec4 *a3, struct RenderVertexSoft *pVertices, unsigned int *pOutNumVertices);
bool _4985FB(struct RenderVertexSoft *a1, signed int a2, struct RenderVertexSoft *a3, unsigned int *pOutNumVertices, struct Vec3_float_ *a5, float a6, char *a7, int unused);
void AddVertex(struct VertexBuffer *pVertexBuffer, struct RenderVertexSoft *pVertex);
bool _498774(struct RenderVertexSoft *a1, struct RenderVertexSoft *a2, struct RenderVertexSoft *a3, struct stru312 *a4, struct RenderVertexSoft *a5);
- bool _49895A(struct RenderVertexSoft *a1, struct RenderVertexSoft *a2, struct stru312 *a3);
+ bool AreVectorsCollinear(struct RenderVertexSoft *a1, struct RenderVertexSoft *a2, struct stru312 *a3);
bool _4989E1(struct RenderVertexSoft *a1, struct RenderVertexSoft *a2, struct RenderVertexSoft *a3, struct stru312 *a4);
void (__thiscall ***vdestructor_ptr)(stru9 *, bool);