| 3213 | } |
| 3214 | |
| 3215 | void MAI_Fat(int i) |
| 3216 | { |
| 3217 | MonsterStruct *Monst; |
| 3218 | int mx, my, md, v; |
| 3219 | |
| 3220 | if ((DWORD)i >= MAXMONSTERS) |
| 3221 | app_fatal("MAI_Fat: Invalid monster %d", i); |
| 3222 | |
| 3223 | Monst = &monster[i]; |
| 3224 | if (Monst->_mmode != MM_STAND || Monst->_msquelch == 0) { |
| 3225 | return; |
| 3226 | } |
| 3227 | |
| 3228 | mx = Monst->_mx - Monst->_menemyx; |
| 3229 | my = Monst->_my - Monst->_menemyy; |
| 3230 | md = M_GetDir(i); |
| 3231 | Monst->_mdir = md; |
| 3232 | v = random_(111, 100); |
| 3233 | if (abs(mx) >= 2 || abs(my) >= 2) { |
| 3234 | if (Monst->_mVar2 > 20 && v < 4 * Monst->_mint + 20 |
| 3235 | || (Monst->_mVar1 == MM_WALK || Monst->_mVar1 == MM_WALK2 || Monst->_mVar1 == MM_WALK3) |
| 3236 | && Monst->_mVar2 == 0 |
| 3237 | && v < 4 * Monst->_mint + 70) { |
| 3238 | M_CallWalk(i, md); |
| 3239 | } |
| 3240 | } else if (v < 4 * Monst->_mint + 15) { |
| 3241 | M_StartAttack(i); |
| 3242 | } else if (v < 4 * Monst->_mint + 20) { |
| 3243 | M_StartSpAttack(i); |
| 3244 | } |
| 3245 | |
| 3246 | if (Monst->_mmode == MM_STAND) |
| 3247 | Monst->_mAnimData = Monst->MType->Anims[MA_STAND].Data[md]; |
| 3248 | } |
| 3249 | |
| 3250 | void MAI_Sneak(int i) |
| 3251 | { |
nothing calls this directly
no test coverage detected