1
0
Fork 0
devilution/Source/dead.cpp

162 lines
3.6 KiB
C++
Raw Normal View History

2018-06-07 02:25:54 +00:00
/*
* UNPUBLISHED -- Rights reserved under the copyright laws of the
* United States. Use of a copyright notice is precautionary only and
* does not imply publication or disclosure.
*
* THIS DOCUMENTATION CONTAINS CONFIDENTIAL AND PROPRIETARY INFORMATION
* OF BLIZZARD ENTERTAINMENT. ANY DUPLICATION, MODIFICATION,
* DISTRIBUTION, OR DISCLOSURE IS STRICTLY PROHIBITED WITHOUT THE PRIOR
* EXPRESS WRITTEN PERMISSION OF BLIZZARD ENTERTAINMENT.
*/
#include "../types.h"
int spurtndx; // weak
DeadStruct dead[31];
int stonendx;
//----- (004084A6) --------------------------------------------------------
void __cdecl InitDead()
{
int v0; // ebx
int *v1; // edx
int *v2; // eax
int v3; // ecx
int v4; // edx
int v5; // eax
int v6; // edx
int v7; // esi
int *v8; // eax
int v9; // edx
CMonster *v10; // ecx
char *v11; // edi
int *v12; // ebx
int mtypes[200]; // [esp+Ch] [ebp-330h]
int *v14; // [esp+32Ch] [ebp-10h]
int *v15; // [esp+330h] [ebp-Ch]
int v16; // [esp+334h] [ebp-8h]
int v17; // [esp+338h] [ebp-4h]
memset(mtypes, 0, sizeof(mtypes));
v0 = 0;
if ( nummtypes > 0 )
{
v1 = &dead[0]._deadFrame;
v2 = &Monsters[0].Anims[4].Rate;
v17 = nummtypes;
do
{
v15 = &mtypes[*((unsigned char *)v2 - 216)];
if ( !*v15 )
{
qmemcpy(v1 - 8, v2 - 8, 0x20u);
v3 = *v2;
*((_BYTE *)v1 + 12) = 0;
*v1 = v3;
v1[1] = v2[21];
v1[2] = v2[22];
*((_BYTE *)v2 + 101) = ++v0;
v1 += 12;
*v15 = v0;
}
v2 += 82;
--v17;
}
while ( v17 );
}
v16 = 0;
v4 = v0;
2018-06-11 01:03:15 +00:00
memset32(&dead[v0], misfiledata[16].mAnimData[0], 8u);
2018-06-07 02:25:54 +00:00
_LOBYTE(dead[v4]._deadtrans) = 0;
dead[v4]._deadFrame = 8;
2018-06-10 23:08:01 +00:00
v5 = misfiledata[18].mAnimData[0];
2018-06-07 02:25:54 +00:00
dead[v4].field_24 = 128;
dead[v4].field_28 = 32;
v6 = v0 + 1;
spurtndx = v0 + 1;
2018-06-11 01:03:15 +00:00
memset32(&dead[v6], v5, 8u);
2018-06-07 02:25:54 +00:00
_LOBYTE(dead[v6]._deadtrans) = 0;
stonendx = v0 + 2;
v7 = nummonsters;
dead[v6]._deadFrame = 12;
dead[v6].field_24 = 128;
dead[v6].field_28 = 32;
v17 = v0 + 2;
if ( v7 > 0 )
{
v8 = &dead[v0 + 2]._deadFrame;
do
{
v9 = monstactive[v16];
if ( monster[v9]._uniqtype )
{
v10 = monster[v9].MType;
v11 = (char *)(v8 - 8);
v15 = (int *)8;
2018-06-10 23:08:01 +00:00
v14 = v10->Anims[4].Frames;
2018-06-07 02:25:54 +00:00
do
{
v12 = v14;
++v14;
*(_DWORD *)v11 = *v12;
v11 += 4;
v15 = (int *)((char *)v15 - 1);
}
while ( v15 );
*v8 = v10->Anims[4].Rate;
v8[1] = v10->flags_1;
v8[2] = v10->flags_2;
*((_BYTE *)v8 + 12) = monster[v9]._uniqtrans + 4;
monster[v9]._udeadval = ++v17;
v8 += 12;
}
++v16;
}
while ( v16 < v7 );
}
}
// 4B8CD8: using guessed type int spurtndx;
//----- (0040865C) --------------------------------------------------------
void __fastcall AddDead(int dx, int dy, char dv, int ddir)
{
dDead[dx][dy] = (dv & 0x1F) + 32 * ddir;
}
//----- (0040867D) --------------------------------------------------------
void __cdecl SetDead()
{
int v0; // eax
int v1; // esi
int v2; // ebp
char (*v3)[112]; // ebx
int v4; // edi
int i; // [esp+0h] [ebp-4h]
v0 = 0;
for ( i = 0; i < nummonsters; ++i )
{
v1 = monstactive[v0];
if ( monster[v1]._uniqtype )
{
v2 = 0;
v3 = dDead;
do
{
v4 = 0;
do
{
if ( ((*v3)[v4] & 0x1F) == monster[v1]._udeadval )
ChangeLightXY((unsigned char)monster[v1].mlid, v2, v4);
++v4;
}
while ( v4 < 112 );
++v3;
++v2;
}
while ( (signed int)v3 < (signed int)&dDead[112][0] );
}
v0 = i + 1;
}
}