Skip to content

Commit 6366933

Browse files
committed
make CTA of MAI_Fallen a 'cast'
1 parent a22f8da commit 6366933

File tree

6 files changed

+60
-42
lines changed

6 files changed

+60
-42
lines changed

Source/misdat.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ const MissileData missiledata[] = {
108108
/*MIS_INFRA*/ { &AddInfra, &MI_Dummy, 0, MISR_NONE, MFILE_NONE, LS_INFRAVIS, SFX_NONE, 1, 1, 0, 0, ALIGN32 },
109109
/*MIS_RAGE*/ { &AddRage, &MI_Dummy, 0, MISR_NONE, MFILE_NONE, SFX_NONE, SFX_NONE, 1, 1, 0, 0, ALIGN32 },
110110
/*MIS_PULSE*/ { &AddPulse, &MI_Pulse, 0, MISR_LIGHTNING, MFILE_LGHNING, SFX_NONE, SFX_NONE, 1, 1, 0, 32, ALIGN32 },
111+
/*MIS_CTA*/ { &AddCallToArms, &MI_Dummy, 0, MISR_NONE, MFILE_NONE, SFX_NONE, SFX_NONE, 1, 1, 0, 0, ALIGN32 },
111112
#ifdef HELLFIRE
112113
/*MIS_LIGHTWALLC*/// { &AddWallC, &MI_WallC, 0, MISR_NONE, MFILE_NONE, SFX_NONE, SFX_NONE, 1, 1, 0, 0, ALIGN32 },
113114
/*MIS_LIGHTWALL*/// { &AddLightwall, &MI_Lightwall, MIF_AREA | MIF_DOT, MISR_LIGHTNING, MFILE_LGHNING, LS_LMAG, LS_ELECIMP1, 1, 1, 0, 0, ALIGN32 },

Source/misproc.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ int AddManashield(int mi, int sx, int sy, int dx, int dy, int midir, int micaste
8080
int AddInfra(int mi, int sx, int sy, int dx, int dy, int midir, int micaster, int misource, int spllvl);
8181
int AddRage(int mi, int sx, int sy, int dx, int dy, int midir, int micaster, int misource, int spllvl);
8282
int AddPulse(int mi, int sx, int sy, int dx, int dy, int midir, int micaster, int misource, int spllvl);
83+
int AddCallToArms(int mi, int sx, int sy, int dx, int dy, int midir, int micaster, int misource, int spllvl);
8384
void MI_Dummy(int mi);
8485
void MI_Arrow(int mi);
8586
void MI_AsArrow(int mi);

Source/missiles.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3412,6 +3412,15 @@ int AddPulse(int mi, int sx, int sy, int dx, int dy, int midir, int micaster, in
34123412
return MIRES_FAIL_DELETE;
34133413
}
34143414

3415+
int AddCallToArms(int mi, int sx, int sy, int dx, int dy, int midir, int micaster, int misource, int spllvl)
3416+
{
3417+
// assert(micaster == MST_MONSTER);
3418+
// assert((unsigned)misource < MAXMONSTERS);
3419+
MonCallToArms(misource);
3420+
3421+
return MIRES_DELETE;
3422+
}
3423+
34153424
int AddMissile(int sx, int sy, int dx, int dy, int midir, int mitype, int micaster, int misource, int spllvl)
34163425
{
34173426
MissileStruct* mis;

Source/monster.cpp

Lines changed: 47 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

Source/monster.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ void InitGolemStats(int mnum, int level);
7777
void SpawnGolem(int mnum, int x, int y, int level);
7878
bool CanTalkToMonst(int mnum);
7979
bool CheckMonsterHit(int mnum, bool* ret);
80+
void MonCallToArms(int mnum);
8081

8182
inline void SetMonsterLoc(MonsterStruct* mon, int x, int y)
8283
{

enums.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2035,6 +2035,7 @@ typedef enum missile_id {
20352035
MIS_INFRA,
20362036
MIS_RAGE,
20372037
MIS_PULSE,
2038+
MIS_CTA,
20382039
#ifdef HELLFIRE
20392040
//MIS_LIGHTWALLC,
20402041
//MIS_LIGHTWALL,

0 commit comments

Comments
 (0)