is trap ttmp harmless to monster mtmp? */
| 1103 | |
| 1104 | /* is trap ttmp harmless to monster mtmp? */ |
| 1105 | boolean |
| 1106 | m_harmless_trap(struct monst *mtmp, struct trap *ttmp) |
| 1107 | { |
| 1108 | struct permonst *mdat = mtmp->data; |
| 1109 | |
| 1110 | /* this handles most of the traps, but those are still included |
| 1111 | in the switch case below for completeness */ |
| 1112 | if (!Sokoban && floor_trigger(ttmp->ttyp) && check_in_air(mtmp, 0L)) |
| 1113 | return TRUE; |
| 1114 | |
| 1115 | switch (ttmp->ttyp) { |
| 1116 | case ARROW_TRAP: |
| 1117 | break; |
| 1118 | case DART_TRAP: |
| 1119 | break; |
| 1120 | case ROCKTRAP: |
| 1121 | break; |
| 1122 | case SQKY_BOARD: |
| 1123 | break; |
| 1124 | case BEAR_TRAP: |
| 1125 | if (mdat->msize <= MZ_SMALL || amorphous(mdat) |
| 1126 | || is_whirly(mdat) || unsolid(mdat)) |
| 1127 | return TRUE; |
| 1128 | break; |
| 1129 | case LANDMINE: |
| 1130 | break; |
| 1131 | case ROLLING_BOULDER_TRAP: |
| 1132 | break; |
| 1133 | case SLP_GAS_TRAP: |
| 1134 | if (resists_sleep(mtmp) || defended(mtmp, AD_SLEE)) |
| 1135 | return TRUE; |
| 1136 | break; |
| 1137 | case RUST_TRAP: |
| 1138 | if (mdat != &mons[PM_IRON_GOLEM]) |
| 1139 | return TRUE; |
| 1140 | break; |
| 1141 | case FIRE_TRAP: |
| 1142 | if (resists_fire(mtmp) || defended(mtmp, AD_FIRE)) |
| 1143 | return TRUE; |
| 1144 | break; |
| 1145 | case PIT: |
| 1146 | FALLTHROUGH; |
| 1147 | /*FALLTHRU*/ |
| 1148 | case SPIKED_PIT: |
| 1149 | FALLTHROUGH; |
| 1150 | /*FALLTHRU*/ |
| 1151 | case HOLE: |
| 1152 | FALLTHROUGH; |
| 1153 | /*FALLTHRU*/ |
| 1154 | case TRAPDOOR: |
| 1155 | if (is_clinger(mdat) && !Sokoban) |
| 1156 | return TRUE; |
| 1157 | break; |
| 1158 | case TELEP_TRAP: |
| 1159 | break; |
| 1160 | case LEVEL_TELEP: |
| 1161 | break; |
| 1162 | case MAGIC_PORTAL: |
no test coverage detected