Browse Source

Monster.cpp (#402)

* Clean up DeleteMonster

* AddMonster

* Clean up NewMonsterAnim

* Clean up M_Ranged, M_Talker and M_GetDir

* Clean up M_StartDelay

* Clean up M_StartSpStand

* Clean M_StartSpStand

* Add enum to monster Anim
pull/25/head
Anders Jenbo 8 years ago committed by Robin Eklind
parent
commit
c878a630f5
  1. 10
      Source/dead.cpp
  2. 16
      Source/missiles.cpp
  3. 307
      Source/monster.cpp
  4. 4
      Source/monster.h
  5. 9
      enums.h

10
Source/dead.cpp

@ -13,7 +13,7 @@ void __cdecl InitDead()
int i, j;
int mtypes[MAXMONSTERS];
int idx;
for ( i = 0; i < MAXMONSTERS; i++ )
mtypes[i] = 0;
@ -21,8 +21,8 @@ void __cdecl InitDead()
for (i=0; i < nummtypes; i++) {
if (!mtypes[Monsters[i].mtype]) {
for ( j=0; j < 8; j++)
dead[idx]._deadData[j] = Monsters[i].Anims[4].Frames[j];
dead[idx]._deadFrame = Monsters[i].Anims[4].Rate;
dead[idx]._deadData[j] = Monsters[i].Anims[MA_DEATH].Frames[j];
dead[idx]._deadFrame = Monsters[i].Anims[MA_DEATH].Rate;
dead[idx]._deadWidth = Monsters[i].flags_1;
dead[idx]._deadWidth2 = Monsters[i].flags_2;
dead[idx]._deadtrans = 0;
@ -53,8 +53,8 @@ void __cdecl InitDead()
int ii = monstactive[i];
if ( monster[ii]._uniqtype ) {
for (j=0; j < 8; j++)
dead[idx]._deadData[j] = monster[ii].MType->Anims[4].Frames[j];
dead[idx]._deadFrame = monster[ii].MType->Anims[4].Rate;
dead[idx]._deadData[j] = monster[ii].MType->Anims[MA_DEATH].Frames[j];
dead[idx]._deadFrame = monster[ii].MType->Anims[MA_DEATH].Rate;
dead[idx]._deadWidth = monster[ii].MType->flags_1;
dead[idx]._deadWidth2 = monster[ii].MType->flags_2;
dead[idx]._deadtrans = monster[ii]._uniqtrans + 4;

16
Source/missiles.cpp

@ -3373,12 +3373,12 @@ void __fastcall AddRhino(int mi, int sx, int sy, int dx, int dy, int midir, int
v11 = v10->mtype;
if ( v10->mtype < MT_HORNED || v11 > MT_OBLORD )
{
if ( v11 < MT_NSNAKE || (v12 = &v10->Anims[2], v11 > MT_GSNAKE) )
v12 = &v10->Anims[1];
if ( v11 < MT_NSNAKE || (v12 = &v10->Anims[MA_ATTACK], v11 > MT_GSNAKE) )
v12 = &v10->Anims[MA_WALK];
}
else
{
v12 = &v10->Anims[5];
v12 = &v10->Anims[MA_SPECIAL];
}
GetMissileVel(i, sx, sy, dx, dy, 18);
v13 = i;
@ -3419,7 +3419,7 @@ void __fastcall miss_null_32(int mi, int sx, int sy, int dx, int dy, int midir,
v9 = id;
v10 = mi;
v11 = &monster[id].MType->Anims[1];
v11 = &monster[id].MType->Anims[MA_WALK];
GetMissileVel(mi, sx, sy, dx, dy, 16);
v12 = v10;
missile[v12]._mimfnum = midir;
@ -6439,7 +6439,7 @@ void __fastcall mi_null_32(int i)
missile[v2]._miyvel = -missile[v2]._miyvel;
v14 = opposite[v13];
missile[v2]._mimfnum = v14;
v15 = monster[v4].MType->Anims[1].Frames[v14];
v15 = monster[v4].MType->Anims[MA_WALK].Frames[v14];
++missile[v2]._miVar2;
missile[v2]._miAnimData = v15;
if ( v10 > 0 )
@ -7399,13 +7399,13 @@ void __cdecl missiles_process_charge()
if ( v5->mtype < MT_HORNED || v6 > MT_OBLORD )
{
if ( v6 < MT_NSNAKE || v6 > MT_GSNAKE )
v7 = &v5->Anims[1];
v7 = &v5->Anims[MA_WALK];
else
v7 = &v5->Anims[2];
v7 = &v5->Anims[MA_ATTACK];
}
else
{
v7 = &v5->Anims[5];
v7 = &v5->Anims[MA_SPECIAL];
}
missile[v2]._miAnimData = v7->Frames[v3];
}

307
Source/monster.cpp

@ -702,11 +702,11 @@ void __fastcall InitMonster(int i, int rd, int mtype, int x, int y)
monster[i].mName = monst->MData->mName;
monster[i].MType = monst;
monster[i].MData = monst->MData;
monster[i]._mAnimData = monst->Anims[0].Frames[rd];
monster[i]._mAnimDelay = monst->Anims[0].Delay;
monster[i]._mAnimCnt = random(88, monst->Anims[0].Delay - 1);
monster[i]._mAnimLen = monst->Anims[0].Rate;
monster[i]._mAnimFrame = random(88, monst->Anims[0].Rate - 1) + 1;
monster[i]._mAnimData = monst->Anims[MA_STAND].Frames[rd];
monster[i]._mAnimDelay = monst->Anims[MA_STAND].Delay;
monster[i]._mAnimCnt = random(88, monst->Anims[MA_STAND].Delay - 1);
monster[i]._mAnimLen = monst->Anims[MA_STAND].Rate;
monster[i]._mAnimFrame = random(88, monst->Anims[MA_STAND].Rate - 1) + 1;
if ( monst->mtype == MT_DIABLO )
{
@ -758,7 +758,7 @@ void __fastcall InitMonster(int i, int rd, int mtype, int x, int y)
if ( monster[i]._mAi == AI_GARG )
{
monster[i]._mAnimData = monst->Anims[5].Frames[rd];
monster[i]._mAnimData = monst->Anims[MA_SPECIAL].Frames[rd];
monster[i]._mAnimFrame = 1;
monster[i]._mFlags |= 4u;
monster[i]._mmode = MM_SATTACK;
@ -800,7 +800,7 @@ void __cdecl ClrAllMonsters()
{
MonsterStruct *Monst;
for ( int i = 0; i < 200; i++ )
for ( int i = 0; i < MAXMONSTERS; i++ )
{
Monst = &monster[i];
ClearMVars(i);
@ -1107,7 +1107,7 @@ void __fastcall PlaceUniqueMonst(int uniqindex, int miniontype, int unpackfilesi
if ( Monst->_mAi != AI_GARG )
{
Monst->_mAnimData = Monst->MType->Anims[0].Frames[Monst->_mdir];
Monst->_mAnimData = Monst->MType->Anims[MA_STAND].Frames[Monst->_mdir];
Monst->_mAnimFrame = random(88, Monst->_mAnimLen - 1) + 1;
Monst->_mFlags &= 0xFFFFFFFB;
Monst->_mmode = MM_STAND;
@ -1271,7 +1271,7 @@ void __fastcall PlaceGroup(int mtype, int num, int leaderf, int leader)
if ( monster[nummonsters]._mAi != AI_GARG )
{
monster[nummonsters]._mAnimData = monster[nummonsters].MType->Anims[0].Frames[monster[nummonsters]._mdir];
monster[nummonsters]._mAnimData = monster[nummonsters].MType->Anims[MA_STAND].Frames[monster[nummonsters]._mdir];
monster[nummonsters]._mAnimFrame = random(88, monster[nummonsters]._mAnimLen - 1) + 1;
monster[nummonsters]._mFlags &= 0xFFFFFFFB;
monster[nummonsters]._mmode = MM_STAND;
@ -1621,69 +1621,52 @@ void __fastcall SetMapMonsters(unsigned char *pMap, int startx, int starty)
void __fastcall DeleteMonster(int i)
{
int *v1; // ecx
int *v2; // eax
int v3; // edx
--nummonsters;
v1 = &monstactive[i];
v2 = &monstactive[nummonsters];
v3 = *v2;
*v2 = *v1;
*v1 = v3;
nummonsters--;
int temp = monstactive[nummonsters];
monstactive[nummonsters] = monstactive[i];
monstactive[i] = temp;
}
int __fastcall AddMonster(int x, int y, int dir, int mtype, int InMap)
{
int i; // esi
if ( nummonsters < MAXMONSTERS ) {
int i = monstactive[nummonsters++];
if ( InMap )
dMonster[x][y] = i + 1;
InitMonster(i, dir, mtype, x, y);
return i;
}
if ( nummonsters >= MAXMONSTERS )
return -1;
i = monstactive[nummonsters++];
if ( InMap )
dMonster[x][y] = i + 1;
InitMonster(i, dir, mtype, x, y);
return i;
return -1;
}
void __fastcall NewMonsterAnim(int i, AnimStruct *anim, int md)
{
MonsterStruct *v3; // eax
int v4; // esi
int v5; // edx
v3 = &monster[i];
v3->_mAnimData = anim->Frames[md];
v4 = anim->Rate;
v3->_mAnimCnt = 0;
v3->_mAnimLen = v4;
v3->_mAnimFrame = 1;
v5 = anim->Delay;
v3->_mFlags &= 0xFFFFFFF9;
v3->_mAnimDelay = v5;
v3->_mdir = md;
monster[i]._mAnimData = anim->Frames[md];
monster[i]._mAnimCnt = 0;
monster[i]._mAnimLen = anim->Rate;
monster[i]._mAnimFrame = 1;
monster[i]._mFlags &= 0xFFFFFFF9;
monster[i]._mAnimDelay = anim->Delay;
monster[i]._mdir = md;
}
bool __fastcall M_Ranged(int i)
BOOL __fastcall M_Ranged(int i)
{
char v1; // cl
v1 = monster[i]._mAi;
return v1 == AI_SKELBOW || v1 == AI_GOATBOW || v1 == AI_SUCC || v1 == AI_LAZHELP;
char ai = monster[i]._mAi;
return ai == AI_SKELBOW || ai == AI_GOATBOW || ai == AI_SUCC || ai == AI_LAZHELP;
}
bool __fastcall M_Talker(int i)
BOOL __fastcall M_Talker(int i)
{
char v1; // cl
v1 = monster[i]._mAi;
return v1 == AI_LAZURUS
|| v1 == AI_WARLORD
|| v1 == AI_GARBUD
|| v1 == AI_ZHAR
|| v1 == AI_SNOTSPIL
|| v1 == AI_LACHDAN
|| v1 == AI_LAZHELP;
char ai = monster[i]._mAi;
return ai == AI_LAZURUS
|| ai == AI_WARLORD
|| ai == AI_GARBUD
|| ai == AI_ZHAR
|| ai == AI_SNOTSPIL
|| ai == AI_LACHDAN
|| ai == AI_LAZHELP;
}
void __fastcall M_Enemy(int i)
@ -1832,11 +1815,7 @@ void __fastcall M_Enemy(int i)
int __fastcall M_GetDir(int i)
{
return GetDirection(
monster[i]._mx,
monster[i]._my,
(unsigned char)monster[i]._menemyx,
(unsigned char)monster[i]._menemyy);
return GetDirection(monster[i]._mx, monster[i]._my, monster[i]._menemyx, monster[i]._menemyy);
}
void __fastcall M_CheckEFlag(int i)
@ -1877,9 +1856,9 @@ void __fastcall M_StartStand(int i, int md)
ClearMVars(i);
v4 = v3;
v5 = monster[v3].MType;
v6 = &v5->Anims[1];
v6 = &v5->Anims[MA_WALK];
if ( v5->mtype != MT_GOLEM )
v6 = v5->Anims;
v6 = &v5->Anims[MA_STAND];
NewMonsterAnim(v3, v6, v2);
monster[v4]._mdir = v2;
monster[v4]._mVar1 = monster[v4]._mmode;
@ -1899,74 +1878,52 @@ void __fastcall M_StartStand(int i, int md)
void __fastcall M_StartDelay(int i, int len)
{
int v2; // eax
if ( len <= 0 ) {
return;
}
if ( len > 0 )
{
v2 = i;
if ( monster[i]._mAi != AI_LAZURUS )
{
monster[v2]._mVar2 = len;
monster[v2]._mmode = MM_DELAY;
}
if ( monster[i]._mAi != AI_LAZURUS ) {
monster[i]._mVar2 = len;
monster[i]._mmode = MM_DELAY;
}
}
void __fastcall M_StartSpStand(int i, int md)
{
int v2; // ebx
int v3; // esi
int v4; // edi
int v5; // eax
int v6; // ecx
v2 = i;
v3 = i;
v4 = md;
NewMonsterAnim(i, &monster[i].MType->Anims[5], md);
v5 = monster[v3]._mx;
v6 = monster[v3]._my;
monster[v3]._mxoff = 0;
monster[v3]._myoff = 0;
monster[v3]._mdir = v4;
monster[v3]._mmode = MM_SPSTAND;
monster[v3]._mfutx = v5;
monster[v3]._mfuty = v6;
monster[v3]._moldx = v5;
monster[v3]._moldy = v6;
M_CheckEFlag(v2);
NewMonsterAnim(i, &monster[i].MType->Anims[MA_SPECIAL], md);
monster[i]._mmode = MM_SPSTAND;
monster[i]._mxoff = 0;
monster[i]._myoff = 0;
monster[i]._mfutx = monster[i]._mx;
monster[i]._mfuty = monster[i]._my;
monster[i]._moldx = monster[i]._mx;
monster[i]._moldy = monster[i]._my;
monster[i]._mdir = md;
M_CheckEFlag(i);
}
void __fastcall M_StartWalk(int i, int xvel, int yvel, int xadd, int yadd, int EndDir)
{
int v6; // ST18_4
int v7; // esi
int v8; // eax
int v9; // ecx
CMonster *v10; // edx
v6 = i;
v7 = i;
v8 = monster[i]._mx;
monster[v7]._moldx = v8;
v9 = monster[i]._my;
monster[v7]._mfuty = v9 + yadd;
monster[v7]._mxvel = xvel;
monster[v7]._myvel = yvel;
monster[v7]._mVar1 = xadd;
monster[v7]._mVar2 = yadd;
dMonster[0][v9 + yadd + 112 * (v8 + xadd)] = -1 - v6;
v10 = monster[v7].MType;
monster[v7]._moldy = v9;
monster[v7]._mmode = MM_WALK;
monster[v7]._mfutx = v8 + xadd;
monster[v7]._mVar3 = EndDir;
monster[v7]._mdir = EndDir;
NewMonsterAnim(v6, &v10->Anims[1], EndDir);
monster[v7]._mVar6 = 0;
monster[v7]._mVar7 = 0;
monster[v7]._mVar8 = 0;
M_CheckEFlag(v6);
int fx = xadd + monster[i]._mx;
int fy = yadd + monster[i]._my;
dMonster[fx][fy] = -(i + 1);
monster[i]._mmode = MM_WALK;
monster[i]._moldx = monster[i]._mx;
monster[i]._moldy = monster[i]._my;
monster[i]._mfutx = fx;
monster[i]._mfuty = fy;
monster[i]._mxvel = xvel;
monster[i]._myvel = yvel;
monster[i]._mVar1 = xadd;
monster[i]._mVar2 = yadd;
monster[i]._mVar3 = EndDir;
monster[i]._mdir = EndDir;
NewMonsterAnim(i, &monster[i].MType->Anims[MA_WALK], EndDir);
monster[i]._mVar6 = 0;
monster[i]._mVar7 = 0;
monster[i]._mVar8 = 0;
M_CheckEFlag(i);
}
void __fastcall M_StartWalk2(int i, int xvel, int yvel, int xoff, int yoff, int xadd, int yadd, int EndDir)
@ -2011,7 +1968,7 @@ void __fastcall M_StartWalk2(int i, int xvel, int yvel, int xoff, int yoff, int
monster[v8]._mmode = MM_WALK2;
monster[v8]._mVar3 = EndDir;
monster[v8]._mdir = EndDir;
NewMonsterAnim(ia, &v14->Anims[1], EndDir);
NewMonsterAnim(ia, &v14->Anims[MA_WALK], EndDir);
monster[v8]._mVar8 = 0;
monster[v8]._mVar6 = 16 * xoff;
monster[v8]._mVar7 = 16 * yoff;
@ -2063,7 +2020,7 @@ void __fastcall M_StartWalk3(int i, int xvel, int yvel, int xoff, int yoff, int
monster[v10]._mmode = MM_WALK3;
monster[v10]._mVar3 = EndDir;
monster[v10]._mdir = EndDir;
NewMonsterAnim(ia, &v16->Anims[1], EndDir);
NewMonsterAnim(ia, &v16->Anims[MA_WALK], EndDir);
monster[v10]._mVar8 = 0;
monster[v10]._mVar6 = 16 * xoff;
monster[v10]._mVar7 = 16 * yoff;
@ -2081,7 +2038,7 @@ void __fastcall M_StartAttack(int i)
v1 = i;
v2 = M_GetDir(i);
v3 = v1;
NewMonsterAnim(v1, &monster[v1].MType->Anims[2], v2);
NewMonsterAnim(v1, &monster[v1].MType->Anims[MA_ATTACK], v2);
v4 = monster[v1]._my;
v5 = monster[v1]._mx;
monster[v3]._mxoff = 0;
@ -2108,7 +2065,7 @@ void __fastcall M_StartRAttack(int i, int missile_type, int dam)
v4 = i;
v5 = M_GetDir(i);
v6 = v4;
NewMonsterAnim(v4, &monster[v4].MType->Anims[2], v5);
NewMonsterAnim(v4, &monster[v4].MType->Anims[MA_ATTACK], v5);
v7 = monster[v4]._my;
monster[v6]._mxoff = 0;
monster[v6]._myoff = 0;
@ -2137,7 +2094,7 @@ void __fastcall M_StartRSpAttack(int i, int missile_type, int dam)
v4 = i;
v5 = M_GetDir(i);
v6 = v4;
NewMonsterAnim(v4, &monster[v4].MType->Anims[5], v5);
NewMonsterAnim(v4, &monster[v4].MType->Anims[MA_SPECIAL], v5);
monster[v6]._mmode = MM_RSPATTACK;
monster[v6]._mVar2 = 0;
monster[v6]._mVar3 = dam;
@ -2165,7 +2122,7 @@ void __fastcall M_StartSpAttack(int i)
v1 = i;
v2 = M_GetDir(i);
v3 = v1;
NewMonsterAnim(v1, &monster[v1].MType->Anims[5], v2);
NewMonsterAnim(v1, &monster[v1].MType->Anims[MA_SPECIAL], v2);
v4 = monster[v1]._my;
v5 = monster[v1]._mx;
monster[v3]._mxoff = 0;
@ -2188,7 +2145,7 @@ void __fastcall M_StartEat(int i)
v1 = i;
v2 = i;
NewMonsterAnim(i, &monster[i].MType->Anims[5], monster[i]._mdir);
NewMonsterAnim(i, &monster[i].MType->Anims[MA_SPECIAL], monster[i]._mdir);
v3 = monster[v2]._my;
v4 = monster[v2]._mx;
monster[v2]._mxoff = 0;
@ -2269,7 +2226,7 @@ void __fastcall M_GetKnockback(int i)
{
M_ClearSquares(v1);
v5 = monster[v2]._mdir;
v6 = &monster[v2].MType->Anims[3];
v6 = &monster[v2].MType->Anims[MA_GOTHIT];
v7 = offset_y[v3];
monster[v2]._moldx += offset_x[v3];
monster[v2]._moldy += v7;
@ -2334,7 +2291,7 @@ void __fastcall M_StartHit(int i, int pnum, int dam)
}
if ( monster[v5]._mmode != MM_STONE )
{
NewMonsterAnim(v4, &monster[v5].MType->Anims[3], monster[v5]._mdir);
NewMonsterAnim(v4, &monster[v5].MType->Anims[MA_GOTHIT], monster[v5]._mdir);
v9 = monster[v5]._moldy;
v10 = monster[v5]._moldx;
monster[v5]._mxoff = 0;
@ -2386,7 +2343,7 @@ void __fastcall M_DiabloDeath(int i, BOOL sendmsg)
if ( v5 != v15 && monster[v3]._msquelch )
{
v6 = v5;
NewMonsterAnim(monstactive[v4], &monster[v5].MType->Anims[4], monster[v5]._mdir);
NewMonsterAnim(monstactive[v4], &monster[v5].MType->Anims[MA_DEATH], monster[v5]._mdir);
v7 = monster[v5]._moldy;
monster[v6]._mxoff = 0;
monster[v6]._myoff = 0;
@ -2470,7 +2427,7 @@ void __fastcall M2MStartHit(int mid, int i, int dam)
v8 = monster[v5].MType;
if ( v8->mtype != MT_GOLEM )
{
NewMonsterAnim(v3, &v8->Anims[3], monster[v5]._mdir);
NewMonsterAnim(v3, &v8->Anims[MA_GOTHIT], monster[v5]._mdir);
monster[v5]._mmode = MM_GOTHIT;
}
v9 = monster[v5]._moldy;
@ -2535,7 +2492,7 @@ void __fastcall MonstStartKill(int i, int pnum, BOOL sendmsg)
v9 = monster[v5]._mdir;
else
v9 = M_GetDir(v3);
v10 = &monster[v5].MType->Anims[4];
v10 = &monster[v5].MType->Anims[MA_DEATH];
monster[v5]._mdir = v9;
NewMonsterAnim(v3, v10, v9);
v11 = monster[v5]._moldy;
@ -2603,7 +2560,7 @@ void __fastcall M2MStartKill(int i, int mid)
if ( v7->mtype == MT_GOLEM )
v8 = 0;
monster[v4]._mdir = v8;
NewMonsterAnim(v3, &v7->Anims[4], v8);
NewMonsterAnim(v3, &v7->Anims[MA_DEATH], v8);
v9 = monster[v4]._moldy;
v10 = monster[v4]._moldx;
monster[v4]._my = v9;
@ -2696,7 +2653,7 @@ void __fastcall M_StartFadein(int i, int md, BOOL backwards)
v5 = v3;
if ( !monster[v5].MType )
TermMsg("M_StartFadein: Monster %d \"%s\" MType NULL", arglist, monster[v5].mName);
NewMonsterAnim(arglist, &monster[v5].MType->Anims[5], v4);
NewMonsterAnim(arglist, &monster[v5].MType->Anims[MA_SPECIAL], v4);
v6 = monster[v5]._my;
v7 = monster[v5]._mx;
monster[v5]._mfuty = v6;
@ -2735,7 +2692,7 @@ void __fastcall M_StartFadeout(int i, int md, BOOL backwards)
v5 = &monster[v3].MType;
if ( !*v5 )
TermMsg("M_StartFadeout: Monster %d \"%s\" MType NULL", v3, monster[v4].mName);
NewMonsterAnim(v3, &(*v5)->Anims[5], mda);
NewMonsterAnim(v3, &(*v5)->Anims[MA_SPECIAL], mda);
v6 = monster[v4]._my;
v7 = monster[v4]._mx;
monster[v4]._mfuty = v6;
@ -2770,9 +2727,9 @@ void __fastcall M_StartHeal(int i)
if ( !monster[v1].MType )
TermMsg("M_StartHeal: Monster %d \"%s\" MType NULL", v1, monster[v2].mName);
v3 = monster[v2].MType;
v4 = v3->Anims[5].Frames[monster[v2]._mdir];
v4 = v3->Anims[MA_SPECIAL].Frames[monster[v2]._mdir];
monster[v2]._mAnimData = v4;
v5 = v3->Anims[5].Rate;
v5 = v3->Anims[MA_SPECIAL].Rate;
monster[v2]._mFlags |= 2u;
monster[v2]._mAnimFrame = v5;
monster[v2]._mmode = MM_HEAL;
@ -2839,9 +2796,9 @@ int __fastcall M_DoStand(int i)
v3 = monster[v2].MType;
v4 = monster[v2]._mdir;
if ( v3->mtype == MT_GOLEM )
v5 = v3->Anims[1].Frames[v4];
v5 = v3->Anims[MA_WALK].Frames[v4];
else
v5 = v3->Anims[0].Frames[v4];
v5 = v3->Anims[MA_STAND].Frames[v4];
monster[v2]._mAnimData = v5;
if ( monster[v2]._mAnimFrame == monster[v2]._mAnimLen )
M_Enemy(v1);
@ -2873,7 +2830,7 @@ int __fastcall M_DoWalk(int i)
if ( !monster[v1].MType )
TermMsg("M_DoWalk: Monster %d \"%s\" MType NULL", v1, monster[v2].mName);
v4 = monster[v2]._mVar8;
if ( v4 == monster[v2].MType->Anims[1].Rate )
if ( v4 == monster[v2].MType->Anims[MA_WALK].Rate )
{
v5 = monster[v2]._my;
v6 = monster[v2]._mx;
@ -2925,7 +2882,7 @@ int __fastcall M_DoWalk2(int i)
if ( !monster[v1].MType )
TermMsg("M_DoWalk2: Monster %d \"%s\" MType NULL", v1, monster[v2].mName);
v3 = monster[v2]._mVar8;
if ( v3 == monster[v2].MType->Anims[1].Rate )
if ( v3 == monster[v2].MType->Anims[MA_WALK].Rate )
{
v4 = monster[v2]._uniqtype == 0;
dMonster[0][monster[v2]._mVar2 + 112 * monster[v2]._mVar1] = 0;
@ -2979,7 +2936,7 @@ int __fastcall M_DoWalk3(int i)
if ( !monster[v1].MType )
TermMsg("M_DoWalk3: Monster %d \"%s\" MType NULL", v1, monster[v2].mName);
v3 = monster[v2]._mVar8;
if ( v3 == monster[v2].MType->Anims[1].Rate )
if ( v3 == monster[v2].MType->Anims[MA_WALK].Rate )
{
v4 = monster[v2]._mVar2;
v5 = monster[v2]._my + 112 * monster[v2]._mx;
@ -3983,7 +3940,7 @@ int __fastcall M_DoDelay(int i)
TermMsg("M_DoDelay: Monster %d \"%s\" MType NULL", v1, monster[v2].mName);
v3 = M_GetDir(v1);
v4 = monster[v2]._mAi == AI_LAZURUS;
monster[v2]._mAnimData = monster[v2].MType->Anims[0].Frames[v3];
monster[v2]._mAnimData = monster[v2].MType->Anims[MA_STAND].Frames[v3];
if ( v4 )
{
v5 = monster[v2]._mVar2;
@ -4042,7 +3999,7 @@ void __fastcall M_WalkDir(int i, int md)
v3 = md;
if ( (DWORD)i >= MAXMONSTERS )
TermMsg("M_WalkDir: Invalid monster %d", i);
v4 = monster[v2].MType->Anims[1].Rate - 1;
v4 = monster[v2].MType->Anims[MA_WALK].Rate - 1;
switch ( v3 )
{
case DIR_S:
@ -4499,7 +4456,7 @@ void __fastcall MAI_Zombie(int i)
M_StartAttack(arglist);
}
if ( v3->_mmode == MM_STAND )
v3->_mAnimData = v3->MType->Anims[0].Frames[v3->_mdir];
v3->_mAnimData = v3->MType->Anims[MA_STAND].Frames[v3->_mdir];
}
}
}
@ -4571,7 +4528,7 @@ void __fastcall MAI_SkelSd(int i)
}
LABEL_16:
if ( v2->_mmode == MM_STAND )
v2->_mAnimData = v2->MType->Anims[0].Frames[v7];
v2->_mAnimData = v2->MType->Anims[MA_STAND].Frames[v7];
}
}
@ -4701,7 +4658,7 @@ void __fastcall MAI_Snake(int i)
M_StartAttack(arglist);
LABEL_49:
if ( esi3->_mmode == MM_STAND )
esi3->_mAnimData = esi3->MType->Anims[0].Frames[esi3->_mdir];
esi3->_mAnimData = esi3->MType->Anims[MA_STAND].Frames[esi3->_mdir];
return;
}
v17 = 10 - (unsigned char)esi3->_mint + random(105, 10);
@ -4921,7 +4878,7 @@ void __fastcall MAI_Bat(int i)
}
}
if ( esi3->_mmode == MM_STAND )
esi3->_mAnimData = esi3->MType->Anims[0].Frames[midir];
esi3->_mAnimData = esi3->MType->Anims[MA_STAND].Frames[midir];
}
}
}
@ -4992,7 +4949,7 @@ void __fastcall MAI_SkelBow(int i)
}
}
if ( v2->_mmode == MM_STAND )
v2->_mAnimData = v2->MType->Anims[0].Frames[v17];
v2->_mAnimData = v2->MType->Anims[MA_STAND].Frames[v17];
}
}
@ -5046,7 +5003,7 @@ void __fastcall MAI_Fat(int i)
}
}
if ( v2->_mmode == MM_STAND )
v2->_mAnimData = v2->MType->Anims[0].Frames[md];
v2->_mAnimData = v2->MType->Anims[MA_STAND].Frames[md];
}
}
@ -5142,7 +5099,7 @@ void __fastcall MAI_Sneak(int i)
if ( v2->_mmode == MM_STAND )
{
if ( abs(v17) >= 2 || abs(v4) >= 2 || v15 >= 4 * (unsigned char)v2->_mint + 10 )
v2->_mAnimData = v2->MType->Anims[0].Frames[md];
v2->_mAnimData = v2->MType->Anims[MA_STAND].Frames[md];
else
M_StartAttack(arglist);
}
@ -5412,7 +5369,7 @@ void __fastcall MAI_Cleaver(int i)
else
M_StartAttack(arglist);
if ( v2->_mmode == MM_STAND )
v2->_mAnimData = v2->MType->Anims[0].Frames[v7];
v2->_mAnimData = v2->MType->Anims[MA_STAND].Frames[v7];
}
}
@ -5536,7 +5493,7 @@ void __fastcall MAI_Round(int i, unsigned char special)
}
}
if ( v3->_mmode == MM_STAND )
v3->_mAnimData = v3->MType->Anims[0].Frames[md];
v3->_mAnimData = v3->MType->Anims[MA_STAND].Frames[md];
}
}
@ -5613,7 +5570,7 @@ void __fastcall MAI_Ranged(int i, int missile_type, unsigned char special)
}
else
{
monster[v4]._mAnimData = monster[v4].MType->Anims[0].Frames[v20];
monster[v4]._mAnimData = monster[v4].MType->Anims[MA_STAND].Frames[v20];
}
}
}
@ -6460,7 +6417,7 @@ void __fastcall MAI_SkelKing(int i)
}
}
if ( v2->_mmode == MM_STAND )
v2->_mAnimData = v2->MType->Anims[0].Frames[md];
v2->_mAnimData = v2->MType->Anims[MA_STAND].Frames[md];
}
}
// 679660: using guessed type char gbMaxPlayers;
@ -6614,7 +6571,7 @@ void __fastcall MAI_Rhino(int i)
}
}
if ( esi3->_mmode == MM_STAND )
esi3->_mAnimData = esi3->MType->Anims[0].Frames[esi3->_mdir];
esi3->_mAnimData = esi3->MType->Anims[MA_STAND].Frames[esi3->_mdir];
}
}
@ -6839,7 +6796,7 @@ void __fastcall MAI_Garbud(int i)
MAI_Round(arglist, 1u);
monster[v2]._mdir = v8;
if ( monster[v2]._mmode == MM_STAND )
monster[v2]._mAnimData = monster[v2].MType->Anims[0].Frames[v8];
monster[v2]._mAnimData = monster[v2].MType->Anims[MA_STAND].Frames[v8];
}
}
@ -6897,7 +6854,7 @@ void __fastcall MAI_Zhar(int i)
MAI_Counselor(arglist);
monster[v2]._mdir = v11;
if ( monster[v2]._mmode == MM_STAND )
monster[v2]._mAnimData = monster[v2].MType->Anims[0].Frames[v11];
monster[v2]._mAnimData = monster[v2].MType->Anims[MA_STAND].Frames[v11];
}
}
@ -6956,7 +6913,7 @@ void __fastcall MAI_SnotSpil(int i)
}
monster[v2]._mdir = v5;
if ( monster[v2]._mmode == MM_STAND )
monster[v2]._mAnimData = monster[v2].MType->Anims[0].Frames[v5];
monster[v2]._mAnimData = monster[v2].MType->Anims[MA_STAND].Frames[v5];
}
}
// 5CF330: using guessed type int setpc_h;
@ -7026,7 +6983,7 @@ void __fastcall MAI_Lazurus(int i)
monster[v2]._mdir = v5;
v8 = monster[v2]._mmode;
if ( v8 == MM_STAND || v8 == MM_TALK )
monster[v2]._mAnimData = monster[v2].MType->Anims[0].Frames[v5];
monster[v2]._mAnimData = monster[v2].MType->Anims[MA_STAND].Frames[v5];
}
}
// 679660: using guessed type char gbMaxPlayers;
@ -7068,7 +7025,7 @@ void __fastcall MAI_Lazhelp(int i)
MAI_Succ(ia);
monster[v2]._mdir = v5;
if ( monster[v2]._mmode == MM_STAND )
monster[v2]._mAnimData = monster[v2].MType->Anims[0].Frames[v5];
monster[v2]._mAnimData = monster[v2].MType->Anims[MA_STAND].Frames[v5];
}
}
// 679660: using guessed type char gbMaxPlayers;
@ -7111,7 +7068,7 @@ void __fastcall MAI_Lachdanan(int i)
}
monster[v2]._mdir = v6;
if ( monster[v2]._mmode == MM_STAND )
monster[v2]._mAnimData = monster[v2].MType->Anims[0].Frames[v6];
monster[v2]._mAnimData = monster[v2].MType->Anims[MA_STAND].Frames[v6];
}
}
@ -7153,7 +7110,7 @@ void __fastcall MAI_Warlord(int i)
monster[v2]._mdir = v5;
v7 = monster[v2]._mmode;
if ( v7 == MM_STAND || v7 == MM_TALK )
monster[v2]._mAnimData = monster[v2].MType->Anims[0].Frames[v5];
monster[v2]._mAnimData = monster[v2].MType->Anims[MA_STAND].Frames[v5];
}
}
@ -7883,22 +7840,22 @@ void __fastcall SyncMonsterAnim(int i)
case MM_STAND:
case MM_DELAY:
case MM_TALK:
v10 = v5->Anims[0].Frames[v9];
v10 = v5->Anims[MA_STAND].Frames[v9];
goto LABEL_13;
case MM_WALK:
case MM_WALK2:
case MM_WALK3:
v10 = v5->Anims[1].Frames[v9];
v10 = v5->Anims[MA_WALK].Frames[v9];
goto LABEL_13;
case MM_ATTACK:
case MM_RATTACK:
v10 = v5->Anims[2].Frames[v9];
v10 = v5->Anims[MA_ATTACK].Frames[v9];
goto LABEL_13;
case MM_GOTHIT:
v10 = v5->Anims[3].Frames[v9];
v10 = v5->Anims[MA_GOTHIT].Frames[v9];
goto LABEL_13;
case MM_DEATH:
v10 = v5->Anims[4].Frames[v9];
v10 = v5->Anims[MA_DEATH].Frames[v9];
goto LABEL_13;
case MM_SATTACK:
case MM_FADEIN:
@ -7906,21 +7863,21 @@ void __fastcall SyncMonsterAnim(int i)
case MM_SPSTAND:
case MM_RSPATTACK:
case MM_HEAL:
v10 = v5->Anims[5].Frames[v9];
v10 = v5->Anims[MA_SPECIAL].Frames[v9];
LABEL_13:
monster[v2]._mAnimData = v10;
return;
case MM_CHARGE:
v11 = v5->Anims[2].Frames[v9];
v11 = v5->Anims[MA_ATTACK].Frames[v9];
monster[v2]._mAnimFrame = 1;
monster[v2]._mAnimData = v11;
v12 = v5->Anims[2].Rate;
v12 = v5->Anims[MA_ATTACK].Rate;
break;
default:
v13 = v5->Anims[0].Frames[v9];
v13 = v5->Anims[MA_STAND].Frames[v9];
monster[v2]._mAnimFrame = 1;
monster[v2]._mAnimData = v13;
v12 = v5->Anims[0].Rate;
v12 = v5->Anims[MA_STAND].Rate;
break;
}
monster[v2]._mAnimLen = v12;

4
Source/monster.h

@ -37,8 +37,8 @@ void __fastcall SetMapMonsters(unsigned char *pMap, int startx, int starty);
void __fastcall DeleteMonster(int i);
int __fastcall AddMonster(int x, int y, int dir, int mtype, int InMap);
void __fastcall NewMonsterAnim(int i, AnimStruct *anim, int md);
bool __fastcall M_Ranged(int i);
bool __fastcall M_Talker(int i);
BOOL __fastcall M_Ranged(int i);
BOOL __fastcall M_Talker(int i);
void __fastcall M_Enemy(int i);
int __fastcall M_GetDir(int i);
void __fastcall M_CheckEFlag(int i);

9
enums.h

@ -1863,6 +1863,15 @@ enum MON_MODE {
MM_TALK = 17,
};
enum MON_ANIM {
MA_STAND = 0,
MA_WALK = 1,
MA_ATTACK = 2,
MA_GOTHIT = 3,
MA_DEATH = 4,
MA_SPECIAL = 5,
};
enum PLR_MODE {
PM_STAND = 0,
PM_WALK = 1,

Loading…
Cancel
Save