Browse Source

Clean up MAI_Sneak.

pull/109/head
Sergey Semushin 7 years ago committed by Anders Jenbo
parent
commit
47f747a560
  1. 103
      Source/monster.cpp

103
Source/monster.cpp

@ -3263,87 +3263,64 @@ void MAI_Fat(int i)
void MAI_Sneak(int i)
{
int v1; // edi
MonsterStruct *v2; // esi
int v3; // ebx
int v4; // ebx
int v6; // edi
int v7; // eax
//int v8; // ST04_4
int v9; // eax
//int v10; // ST04_4
int v11; // eax
int v12; // edi
signed int v13; // ecx
int v14; // eax
int v15; // [esp+Ch] [ebp-10h]
int arglist; // [esp+10h] [ebp-Ch]
int v17; // [esp+14h] [ebp-8h]
int md; // [esp+18h] [ebp-4h]
MonsterStruct *Monst;
int mx, my, md;
int dist, v;
v1 = i;
arglist = i;
if ((DWORD)i >= MAXMONSTERS) {
app_fatal("MAI_Sneak: Invalid monster %d", i);
}
v2 = &monster[v1];
if (v2->_mmode == MM_STAND) {
v3 = v2->_my;
if (dLight[v2->_mx][v3] != lightmax) {
v17 = v2->_mx - (unsigned char)v2->_menemyx;
v4 = v3 - (unsigned char)v2->_menemyy;
md = M_GetDir(v1);
v6 = 5 - (unsigned char)v2->_mint;
if (v2->_mVar1 == MM_GOTHIT) {
v2->_mgoalvar1 = 0;
_LOBYTE(v2->_mgoal) = MGOAL_RETREAT;
Monst = monster + i;
if (Monst->_mmode == MM_STAND) {
mx = Monst->_mx;
my = Monst->_my;
if (dLight[mx][my] != lightmax) {
mx -= Monst->_menemyx;
my -= Monst->_menemyy;
md = M_GetDir(i);
dist = 5 - Monst->_mint;
if (Monst->_mVar1 == MM_GOTHIT) {
Monst->_mgoalvar1 = 0;
Monst->_mgoal = MGOAL_RETREAT;
} else {
v7 = abs(v17);
//v5 = v8;
if (v7 >= v6 + 3 || (v9 = abs(v4), v9 >= v6 + 3) || v2->_mgoalvar1 > 8) /* v5 = v10, */
{
v2->_mgoalvar1 = 0;
_LOBYTE(v2->_mgoal) = MGOAL_NORMAL;
if (abs(mx) >= dist + 3 || abs(my) >= dist + 3 || Monst->_mgoalvar1 > 8) {
Monst->_mgoalvar1 = 0;
Monst->_mgoal = MGOAL_NORMAL;
}
}
if (_LOBYTE(v2->_mgoal) == MGOAL_RETREAT) {
if (v2->_mFlags & MFLAG_TARGETS_MONSTER)
md = GetDirection(v2->_mx, v2->_my, plr[v2->_menemy]._pownerx, plr[v2->_menemy]._pownery);
if (Monst->_mgoal == MGOAL_RETREAT) {
if (Monst->_mFlags & MFLAG_TARGETS_MONSTER)
md = GetDirection(Monst->_mx, Monst->_my, plr[Monst->_menemy]._pownerx, plr[Monst->_menemy]._pownery);
md = opposite[md];
if (v2->MType->mtype == MT_UNSEEN) {
if (Monst->MType->mtype == MT_UNSEEN) {
if (random(112, 2))
v11 = left[md];
md = left[md];
else
v11 = right[md];
md = v11;
md = right[md];
}
}
v2->_mdir = md;
v15 = random(112, 100);
if (abs(v17) < v6 && abs(v4) < v6 && v2->_mFlags & MFLAG_HIDDEN) {
M_StartFadein(arglist, md, FALSE);
Monst->_mdir = md;
v = random(112, 100);
if (abs(mx) < dist && abs(my) < dist && Monst->_mFlags & MFLAG_HIDDEN) {
M_StartFadein(i, md, FALSE);
} else {
v12 = v6 + 1;
if (abs(v17) < v12 && abs(v4) < v12 || v2->_mFlags & MFLAG_HIDDEN) {
if (_LOBYTE(v2->_mgoal) == MGOAL_RETREAT
|| (abs(v17) >= 2 || abs(v4) >= 2)
&& ((v13 = v2->_mVar2, v13 > 20) && v15 < 4 * (unsigned char)v2->_mint + 14
|| ((v14 = v2->_mVar1, v14 == MM_WALK) || v14 == MM_WALK2 || v14 == MM_WALK3)
&& !v13
&& v15 < 4 * (unsigned char)v2->_mint + 64)) {
++v2->_mgoalvar1;
M_CallWalk(arglist, md);
}
if ((abs(mx) >= dist + 1 || abs(my) >= dist + 1) && !(Monst->_mFlags & MFLAG_HIDDEN)) {
M_StartFadeout(i, md, TRUE);
} else {
M_StartFadeout(arglist, md, TRUE);
if (Monst->_mgoal == MGOAL_RETREAT
|| (abs(mx) >= 2 || abs(my) >= 2) && (Monst->_mVar2 > 20 && v < 4 * Monst->_mint + 14 || (Monst->_mVar1 == MM_WALK || Monst->_mVar1 == MM_WALK2 || Monst->_mVar1 == MM_WALK3) && Monst->_mVar2 == 0 && v < 4 * Monst->_mint + 64)) {
Monst->_mgoalvar1++;
M_CallWalk(i, md);
}
}
}
if (v2->_mmode == MM_STAND) {
if (abs(v17) >= 2 || abs(v4) >= 2 || v15 >= 4 * (unsigned char)v2->_mint + 10)
v2->_mAnimData = v2->MType->Anims[MA_STAND].Data[md];
if (Monst->_mmode == MM_STAND) {
if (abs(mx) >= 2 || abs(my) >= 2 || v >= 4 * Monst->_mint + 10)
Monst->_mAnimData = Monst->MType->Anims[MA_STAND].Data[md];
else
M_StartAttack(arglist);
M_StartAttack(i);
}
}
}

Loading…
Cancel
Save