MCPcopy Create free account
hub / github.com/diasurgical/devilution / MAI_Fireman

Function MAI_Fireman

Source/monster.cpp:3315–3374  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3313}
3314
3315void MAI_Fireman(int i)
3316{
3317 int xd, yd;
3318 int md, pnum;
3319 int fx, fy;
3320 MonsterStruct *Monst;
3321
3322 if ((DWORD)i >= MAXMONSTERS)
3323 app_fatal("MAI_Fireman: Invalid monster %d", i);
3324
3325 Monst = &monster[i];
3326 if (monster[i]._mmode != MM_STAND || Monst->_msquelch == 0)
3327 return;
3328
3329 pnum = monster[i]._menemy;
3330 fx = monster[i]._menemyx;
3331 fy = monster[i]._menemyy;
3332 xd = monster[i]._mx - fx;
3333 yd = monster[i]._my - fy;
3334
3335 md = M_GetDir(i);
3336 if (Monst->_mgoal == MGOAL_NORMAL) {
3337 if (LineClear(Monst->_mx, Monst->_my, fx, fy)
3338 && AddMissile(Monst->_mx, Monst->_my, fx, fy, md, MIS_FIREMAN, pnum, i, 0, 0) != -1) {
3339 Monst->_mmode = MM_CHARGE;
3340 Monst->_mgoal = MGOAL_SHOOT;
3341 Monst->_mgoalvar1 = 0;
3342 }
3343 } else if (Monst->_mgoal == MGOAL_SHOOT) {
3344 if (Monst->_mgoalvar1 == 3) {
3345 Monst->_mgoal = MGOAL_NORMAL;
3346 M_StartFadeout(i, md, TRUE);
3347 } else if (LineClear(Monst->_mx, Monst->_my, fx, fy)) {
3348 M_StartRAttack(i, MIS_KRULL, 4);
3349 Monst->_mgoalvar1++;
3350 } else {
3351 M_StartDelay(i, random_(112, 10) + 5);
3352 Monst->_mgoalvar1++;
3353 }
3354 } else if (Monst->_mgoal == MGOAL_RETREAT) {
3355 M_StartFadein(i, md, FALSE);
3356 Monst->_mgoal = MGOAL_SHOOT;
3357 }
3358 Monst->_mdir = md;
3359 random_(112, 100);
3360 if (Monst->_mmode != MM_STAND)
3361 return;
3362
3363 if (abs(xd) < 2 && abs(yd) < 2 && Monst->_mgoal == MGOAL_NORMAL) {
3364 M_TryH2HHit(i, monster[i]._menemy, monster[i].mHit, monster[i].mMinDamage, monster[i].mMaxDamage);
3365 Monst->_mgoal = MGOAL_RETREAT;
3366 if (!M_CallWalk(i, opposite[md])) {
3367 M_StartFadein(i, md, FALSE);
3368 Monst->_mgoal = MGOAL_SHOOT;
3369 }
3370 } else if (!M_CallWalk(i, md) && (Monst->_mgoal == MGOAL_NORMAL || Monst->_mgoal == MGOAL_RETREAT)) {
3371 M_StartFadein(i, md, FALSE);
3372 Monst->_mgoal = MGOAL_SHOOT;

Callers

nothing calls this directly

Calls 11

app_fatalFunction · 0.85
M_GetDirFunction · 0.85
LineClearFunction · 0.85
AddMissileFunction · 0.85
M_StartFadeoutFunction · 0.85
M_StartRAttackFunction · 0.85
M_StartDelayFunction · 0.85
random_Function · 0.85
M_StartFadeinFunction · 0.85
M_TryH2HHitFunction · 0.85
M_CallWalkFunction · 0.85

Tested by

no test coverage detected