/* * Perform the basic "bash" command * * Assume there is no monster blocking the destination * * Returns TRUE if repeated commands may continue */ static bool do_cmd_bash_aux(int y, int x) { int bash, temp; bool more = FALSE; /* Verify legality */ if (!do_cmd_bash_test(y, x)) return (FALSE); /* Message */ msg_print("You smash into the door!"); /* Make a lot of noise. */ add_wakeup_chance = 9000; /* Hack -- Bash power based on strength */ /* (Ranges from 14 to 40 to 90 to 110) */ bash = 10 + adj_str_hold[p_ptr->stat_ind[A_STR]]; /* Extract door power */ temp = ((cave_feat[y][x] - FEAT_DOOR_HEAD) & 0x07); /* Compare bash power to door power XXX XXX XXX */ temp = (bash - (temp * 8)); /* Hack -- always have a chance */ if (temp < 1) temp = 1; /* Hack -- attempt to bash down the door */ if (randint0(100) < temp) { /* Message */ msgt(MSG_OPENDOOR, "The door crashes open!"); /* Break down the door */ if (randint0(100) < 50) { cave_set_feat(y, x, FEAT_BROKEN); } /* Open the door */ else { cave_set_feat(y, x, FEAT_OPEN); } /* Sound */ sound(SOUND_OPENDOOR); /* Update the visuals */ p_ptr->update |= (PU_UPDATE_VIEW | PU_MONSTERS); } /* Saving throw against stun */ else if (randint0(100) < adj_dex_safe[p_ptr->stat_ind[A_DEX]] + p_ptr->lev) { /* Message */ msg_print("The door holds firm."); /* Allow repeated bashing */ more = TRUE; } /* High dexterity yields coolness */ else { /* Message */ msg_print("You are off-balance."); /* Hack -- Lose balance ala paralysis */ (void)set_paralyzed(p_ptr->paralyzed + 2 + randint0(2)); } /* Result */ return (more); }
/* * Perform the basic "bash" command * * Assume there is no monster blocking the destination * * Returns TRUE if repeated commands may continue */ static bool do_cmd_bash_aux(int y, int x) { int bash, temp; bool more = FALSE; /* Verify legality */ if (!do_cmd_bash_test(y, x)) return (FALSE); /* Message */ msg("You smash into the door!"); /* Hack -- Bash power based on strength */ /* (Ranges from 3 to 20 to 100 to 200) */ bash = adj_str_blow[p_ptr->state.stat_ind[A_STR]]; /* Extract door power */ temp = ((cave->feat[y][x] - FEAT_DOOR_HEAD) & 0x07); /* Compare bash power to door power */ temp = (bash - (temp * 10)); /* Hack -- always have a chance */ if (temp < 1) temp = 1; /* Hack -- attempt to bash down the door */ if (randint0(100) < temp) { /* Break down the door */ if (randint0(100) < 50) { cave_set_feat(cave, y, x, FEAT_BROKEN); } /* Open the door */ else { cave_set_feat(cave, y, x, FEAT_OPEN); } msgt(MSG_OPENDOOR, "The door crashes open!"); /* Update the visuals */ p_ptr->update |= (PU_UPDATE_VIEW | PU_MONSTERS); } /* Saving throw against stun */ else if (randint0(100) < adj_dex_safe[p_ptr->state.stat_ind[A_DEX]] + p_ptr->lev) { msg("The door holds firm."); /* Allow repeated bashing */ more = TRUE; } /* Low dexterity has bad consequences */ else { msg("You are off-balance."); /* Lose balance ala stun */ (void)player_inc_timed(p_ptr, TMD_STUN, 2 + randint0(2), TRUE, FALSE); } /* Result */ return more; }