Skip to content

Commit 71c6d23

Browse files
committed
improve the behavior of CTA of MAI_Fallen
- trigger other monsters (and itself) only if there is a visible enemy - trigger other monster even if it is relaxed - do not trigger other monster if it is not in line-of-sight - point the other monster to the enemy
1 parent 29af38d commit 71c6d23

File tree

1 file changed

+9
-2
lines changed

1 file changed

+9
-2
lines changed

Source/monster.cpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3316,7 +3316,7 @@ void MAI_Sneak(int mnum)
33163316
void MAI_Fallen(int mnum)
33173317
{
33183318
MonsterStruct* mon = &monsters[mnum];
3319-
int x, y, mx, my, m, rad, amount;
3319+
int x, y, mx, my, tx, ty, m, rad, amount;
33203320
if (MON_RELAXED || MON_ACTIVE)
33213321
return;
33223322

@@ -3329,6 +3329,7 @@ void MAI_Fallen(int mnum)
33293329
amount = mon->_mhitpoints + 2 * rad + 2;
33303330
mon->_mhitpoints = std::min(mon->_mmaxhp, amount);
33313331
//}
3332+
if (MON_HAS_ENEMY) {
33323333
#if DEBUG
33333334
assert(mon->_mAnims[MA_WALK].maFrames * mon->_mAnims[MA_WALK].maFrameLen * (2 * 5 + 8) < SQUELCH_MAX - SQUELCH_LOW);
33343335
assert(mon->_mAnims[MA_ATTACK].maFrames * mon->_mAnims[MA_ATTACK].maFrameLen * (2 * 5 + 8) < SQUELCH_MAX - SQUELCH_LOW);
@@ -3342,19 +3343,25 @@ void MAI_Fallen(int mnum)
33423343
static_assert(DBORDERX == DBORDERY && DBORDERX >= 2 * 5 + 4, "MAI_Fallen expects a large enough border.");
33433344
mx = mon->_mx;
33443345
my = mon->_my;
3346+
tx = mon->_menemyx;
3347+
ty = mon->_menemyy;
33453348
for (y = -rad; y <= rad; y++) {
33463349
for (x = -rad; x <= rad; x++) {
33473350
m = dMonster[x + mx][y + my];
33483351
if (m > 0) {
33493352
mon = &monsters[m - 1];
3350-
if (mon->_mAI.aiType == AI_FALLEN && !MON_RELAXED) {
3353+
if (mon->_mAI.aiType == AI_FALLEN /*&& !MON_RELAXED*/ && (mon->_mleader == MON_NO_LEADER || mon->_mleader == mnum) && LineClear(mx, my, mon->_mx, mon->_my)) {
33513354
mon->_msquelch = SQUELCH_MAX; // prevent monster from getting in relaxed state
33523355
mon->_mgoal = MGOAL_ATTACK;
33533356
mon->_mgoalvar1 = amount; // FALLEN_ATTACK_AMOUNT
3357+
3358+
mon->_mlastx = tx;
3359+
mon->_mlasty = ty;
33543360
}
33553361
}
33563362
}
33573363
}
3364+
}
33583365
} else {
33593366
MAI_SkelSd(mnum);
33603367
}

0 commit comments

Comments
 (0)