diff --git a/rogue/hit.c b/rogue/hit.c index 6b32d2d..e4aab42 100644 --- a/rogue/hit.c +++ b/rogue/hit.c @@ -114,42 +114,27 @@ mon_hit(object *monster) } void -rogue_hit(object *monster, boolean force_hit) -{ - short damage, hit_chance; +rogue_hit(object *monster, boolean force_hit){ - if (monster) { - if (check_imitator(monster)) { - return; - } - hit_chance = force_hit ? 100 : get_hit_chance(rogue.weapon); + if(check_imitator(monster)) + return; - if (wizard) { - hit_chance *= 2; - } - if (!rand_percent(hit_chance)) { - if (!fight_monster) { - (void)strlcpy(hit_message, "you miss ", - sizeof(hit_message)); - } - goto RET; - } - damage = get_weapon_damage(rogue.weapon); - if (wizard) { - damage *= 3; - } - if (con_mon) { + if(!rand_percent((force_hit ? 100 : get_hit_chance(rogue.weapon)) + * (1 + wizard) /* <- hit chance */) && !fight_monster){ + (void)strlcpy(hit_message, "you miss ", sizeof(hit_message)); + }else{ + if (con_mon) s_con_mon(monster); - } - if (mon_damage(monster, damage)) { /* still alive? */ - if (!fight_monster) { - (void)strlcpy(hit_message, "you hit ", - sizeof(hit_message)); - } - } -RET: check_gold_seeker(monster); - wake_up(monster); + + if(mon_damage(monster, get_weapon_damage(rogue.weapon) + * (1 + 2 * wizard) /* <- damage */) + && !fight_monster) /* still alive? */ + (void)strlcpy(hit_message, "you hit ", + sizeof(hit_message)); } + + check_gold_seeker(monster); + wake_up(monster); } void diff --git a/rogue/move.c b/rogue/move.c index 4f173a8..46b45c4 100644 --- a/rogue/move.c +++ b/rogue/move.c @@ -98,9 +98,13 @@ one_move_rogue(short dirch, short pickup) } } if (dungeon[row][col] & MONSTER) { - rogue_hit(object_at(&level_monsters, row, col), 0); + object *monster; + + if((monster = object_at(&level_monsters, row, col)) != NULL) + rogue_hit(monster, 0); (void)reg_move(); - return(MOVE_FAILED); + + return MOVE_FAILED; } if (dungeon[row][col] & DOOR) { if (cur_room == PASSAGE) { diff --git a/rogue/zap.c b/rogue/zap.c index 4b7b62d..9b4586f 100644 --- a/rogue/zap.c +++ b/rogue/zap.c @@ -178,7 +178,8 @@ zap_monster(object *monster, unsigned short kind) } break; case MAGIC_MISSILE: - rogue_hit(monster, 1); + if(monster != NULL) + rogue_hit(monster, 1); break; case CANCELLATION: if (monster->m_flags & HOLDS) {