`mon' is hit by a sleep attack; return 1 if it's affected, 0 otherwise */
| 1220 | |
| 1221 | /* `mon' is hit by a sleep attack; return 1 if it's affected, 0 otherwise */ |
| 1222 | int |
| 1223 | sleep_monst(struct monst *mon, int amt, int how) |
| 1224 | { |
| 1225 | /* reveal mimic unless already asleep or paralyzed (won't be 'busy') */ |
| 1226 | if (how >= 0 && !mon->msleeping && !mon->mfrozen |
| 1227 | && mon->data->mlet == S_MIMIC && (M_AP_TYPE(mon) == M_AP_FURNITURE |
| 1228 | || M_AP_TYPE(mon) == M_AP_OBJECT)) |
| 1229 | seemimic(mon); |
| 1230 | |
| 1231 | if (resists_sleep(mon) || defended(mon, AD_SLEE) |
| 1232 | || (how >= 0 && resist(mon, (char) how, 0, NOTELL))) { |
| 1233 | shieldeff(mon->mx, mon->my); |
| 1234 | } else if (mon->mcanmove) { |
| 1235 | finish_meating(mon); /* terminate any meal-in-progress */ |
| 1236 | amt += (int) mon->mfrozen; |
| 1237 | if (amt > 0) { /* sleep for N turns */ |
| 1238 | mon->mcanmove = 0; |
| 1239 | mon->mfrozen = min(amt, 127); |
| 1240 | } else { /* sleep until awakened */ |
| 1241 | mon->msleeping = 1; |
| 1242 | } |
| 1243 | return 1; |
| 1244 | } |
| 1245 | return 0; |
| 1246 | } |
| 1247 | |
| 1248 | /* sleeping grabber releases, engulfer doesn't; don't use for paralysis! */ |
| 1249 | void |
no test coverage detected