@@ -3313,57 +3313,62 @@ void MAI_Sneak(int mnum)
33133313 }
33143314}*/
33153315
3316- void MAI_Fallen (int mnum)
3316+ void MonCallToArms (int mnum)
33173317{
33183318 MonsterStruct* mon = &monsters[mnum];
33193319 int x, y, mx, my, tx, ty, m, rad, amount;
33203320 const int MAX_RAD = 5 ;
3321- if (MON_RELAXED || MON_ACTIVE)
3322- return ;
3323-
3324- // assert(!(mon->_mFlags & MFLAG_CAN_OPEN_DOOR));
3325- if (mon->_mgoal == MGOAL_NORMAL) {
3326- if (random_ (113 , 48 ) == 0 ) {
3327- MonStartSpStand (mnum, mon->_mdir );
3328- rad = mon->_mAI .aiInt ;
3329- // if (!(mon->_mFlags & MFLAG_NOHEAL)) {
3330- amount = mon->_mhitpoints + 2 * rad + 2 ;
3331- mon->_mhitpoints = std::min (mon->_mmaxhp , amount);
3332- // }
3333- if (MON_HAS_ENEMY) {
3334- if (rad > MAX_RAD) {
3335- rad = MAX_RAD;
3336- }
3337- amount = 2 * rad + 8 ;
3338- rad = 2 * rad + 4 ;
3339- static_assert (DBORDERX == DBORDERY && DBORDERX >= 2 * MAX_RAD + 4 , " MAI_Fallen expects a large enough border." );
3340- mx = mon->_mx ;
3341- my = mon->_my ;
3342- tx = mon->_menemyx ;
3343- ty = mon->_menemyy ;
3344- for (y = -rad; y <= rad; y++) {
3345- for (x = -rad; x <= rad; x++) {
3346- m = dMonster[x + mx][y + my];
3347- if (m > 0 ) {
3348- mon = &monsters[m - 1 ];
3349- if (mon->_mAI .aiType == AI_FALLEN /* && !MON_RELAXED*/ && (mon->_mleader == MON_NO_LEADER || mon->_mleader == mnum) && LineClear (mx, my, mon->_mx , mon->_my )) {
3350- mon->_msquelch = SQUELCH_MAX; // prevent monster from getting in relaxed state
3321+ rad = mon->_mAI .aiInt ;
3322+ // if (!(mon->_mFlags & MFLAG_NOHEAL)) {
3323+ amount = mon->_mhitpoints + 2 * rad + 2 ;
3324+ mon->_mhitpoints = std::min (mon->_mmaxhp , amount);
3325+ // }
3326+ if (MON_HAS_ENEMY) {
3327+ if (rad > MAX_RAD) {
3328+ rad = MAX_RAD;
3329+ }
3330+ amount = 2 * rad + 8 ;
3331+ rad = 2 * rad + 4 ;
3332+ static_assert (DBORDERX == DBORDERY && DBORDERX >= 2 * MAX_RAD + 4 , " MonCallToArm expects a large enough border." );
3333+ mx = mon->_mx ;
3334+ my = mon->_my ;
3335+ tx = mon->_menemyx ;
3336+ ty = mon->_menemyy ;
3337+ for (y = -rad; y <= rad; y++) {
3338+ for (x = -rad; x <= rad; x++) {
3339+ m = dMonster[x + mx][y + my];
3340+ if (m > 0 ) {
3341+ mon = &monsters[m - 1 ];
3342+ if (mon->_mAI .aiType == AI_FALLEN /* && !MON_RELAXED*/ && (mon->_mleader == MON_NO_LEADER || mon->_mleader == mnum) && LineClear (mx, my, mon->_mx , mon->_my )) {
3343+ mon->_msquelch = SQUELCH_MAX; // prevent monster from getting in relaxed state
33513344#if DEBUG
3352- assert (mon->_mAnims [MA_WALK].maFrames * mon->_mAnims [MA_WALK].maFrameLen * (2 * MAX_RAD + 8 ) < SQUELCH_MAX - SQUELCH_LOW);
3353- assert (mon->_mAnims [MA_ATTACK].maFrames * mon->_mAnims [MA_ATTACK].maFrameLen * (2 * MAX_RAD + 8 ) < SQUELCH_MAX - SQUELCH_LOW);
3354- assert (amount * 13 < SQUELCH_MAX - SQUELCH_LOW);
3345+ assert (mon->_mAnims [MA_WALK].maFrames * mon->_mAnims [MA_WALK].maFrameLen * (2 * MAX_RAD + 8 ) < SQUELCH_MAX - SQUELCH_LOW);
3346+ assert (mon->_mAnims [MA_ATTACK].maFrames * mon->_mAnims [MA_ATTACK].maFrameLen * (2 * MAX_RAD + 8 ) < SQUELCH_MAX - SQUELCH_LOW);
3347+ assert (amount * 13 < SQUELCH_MAX - SQUELCH_LOW);
33553348#endif
3356- static_assert ((2 * MAX_RAD + 8 ) * 13 < SQUELCH_MAX - SQUELCH_LOW, " MAI_Fallen might relax with attack goal." );
3357- mon->_mgoal = MGOAL_ATTACK;
3358- mon->_mgoalvar1 = amount; // FALLEN_ATTACK_AMOUNT
3349+ static_assert ((2 * MAX_RAD + 8 ) * 13 < SQUELCH_MAX - SQUELCH_LOW, " MAI_Fallen might relax with attack goal." );
3350+ mon->_mgoal = MGOAL_ATTACK;
3351+ mon->_mgoalvar1 = amount; // FALLEN_ATTACK_AMOUNT
33593352
3360- mon->_mlastx = tx;
3361- mon->_mlasty = ty;
3362- }
3363- }
3353+ mon->_mlastx = tx;
3354+ mon->_mlasty = ty;
33643355 }
33653356 }
33663357 }
3358+ }
3359+ }
3360+ }
3361+
3362+ void MAI_Fallen (int mnum)
3363+ {
3364+ MonsterStruct* mon = &monsters[mnum];
3365+ if (MON_RELAXED || MON_ACTIVE)
3366+ return ;
3367+
3368+ // assert(!(mon->_mFlags & MFLAG_CAN_OPEN_DOOR));
3369+ if (mon->_mgoal == MGOAL_NORMAL) {
3370+ if (random_ (113 , 48 ) == 0 ) {
3371+ MonStartRSpAttack (mnum, MIS_CTA);
33673372 } else {
33683373 MAI_SkelSd (mnum);
33693374 }
@@ -3384,7 +3389,7 @@ void MAI_Fallen(int mnum)
33843389 } else {
33853390 if (!MonDestWalk (mnum)) {
33863391 // prevent isolated fallens from burnout
3387- m = 12 - 1 ; // mon->_mAnims[MA_WALK].maFrameLen * mon->_mAnims[MA_WALK].maFrames - 1;
3392+ int m = 12 - 1 ; // mon->_mAnims[MA_WALK].maFrameLen * mon->_mAnims[MA_WALK].maFrames - 1;
33883393 if (mon->_msquelch > (unsigned )m)
33893394 mon->_msquelch -= m;
33903395 }
0 commit comments