X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fwizard2.c;h=ca8ab1b51fa80639c10fd03f3888af205adbc16f;hb=78de0f717ae1fd335608f1d54d974f44e0aad109;hp=fb9fbbdf90623e0cd7eb218d3bbbe44a17d2fe09;hpb=7c1e0f92a83932194fcb56c208aa10ba8d7471a6;p=hengband%2Fhengband.git diff --git a/src/wizard2.c b/src/wizard2.c index fb9fbbdf9..ca8ab1b51 100644 --- a/src/wizard2.c +++ b/src/wizard2.c @@ -11,7 +11,13 @@ */ #include "angband.h" +#include "floor.h" #include "selfinfo.h" +#include "spells-summon.h" +#include "patron.h" +#include "mutation.h" +#include "quest.h" +#include "artifact.h" /*! @@ -21,10 +27,10 @@ void do_cmd_rerate_aux(void) { /* Minimum hitpoints at highest level */ - int min_value = p_ptr->hitdie + ((PY_MAX_LEVEL + 2) * (p_ptr->hitdie + 1)) * 3 / 8; + HIT_POINT min_value = p_ptr->hitdie + ((PY_MAX_LEVEL + 2) * (p_ptr->hitdie + 1)) * 3 / 8; /* Maximum hitpoints at highest level */ - int max_value = p_ptr->hitdie + ((PY_MAX_LEVEL + 2) * (p_ptr->hitdie + 1)) * 5 / 8; + HIT_POINT max_value = p_ptr->hitdie + ((PY_MAX_LEVEL + 2) * (p_ptr->hitdie + 1)) * 5 / 8; int i; @@ -65,14 +71,12 @@ void do_cmd_rerate(bool display) do_cmd_rerate_aux(); percent = (int)(((long)p_ptr->player_hp[PY_MAX_LEVEL - 1] * 200L) / - (2 * p_ptr->hitdie + - ((PY_MAX_LEVEL - 1+3) * (p_ptr->hitdie + 1)))); + (2 * p_ptr->hitdie + ((PY_MAX_LEVEL - 1+3) * (p_ptr->hitdie + 1)))); /* Update and redraw hitpoints */ p_ptr->update |= (PU_HP); p_ptr->redraw |= (PR_HP); - p_ptr->window |= (PW_PLAYER); handle_stuff(); @@ -113,16 +117,9 @@ static bool set_gametime(void) int tmp_int = 0; char ppp[80], tmp_val[40]; - /* Prompt */ sprintf(ppp, "Dungeon Turn (0-%ld): ", (long)dungeon_turn_limit); - - /* Default */ sprintf(tmp_val, "%ld", (long)dungeon_turn); - - /* Query */ if (!get_string(ppp, tmp_val, 10)) return (FALSE); - - /* Extract */ tmp_int = atoi(tmp_val); /* Verify */ @@ -231,7 +228,7 @@ static void prt_alloc(OBJECT_TYPE_VALUE tval, OBJECT_SUBTYPE_VALUE sval, TERM_LE u32b rarity[K_MAX_DEPTH]; u32b total[K_MAX_DEPTH]; s32b display[22]; - cptr r = "+---Rate---+"; + concptr r = "+---Rate---+"; object_kind *k_ptr; @@ -379,7 +376,7 @@ static void do_cmd_wiz_change_aux(void) /* Query the stats */ - for (i = 0; i < 6; i++) + for (i = 0; i < A_MAX; i++) { /* Prompt */ sprintf(ppp, "%s (3-%d): ", stat_names[i], p_ptr->stat_max_max[i]); @@ -398,7 +395,7 @@ static void do_cmd_wiz_change_aux(void) else if (tmp_int < 3) tmp_int = 3; /* Save it */ - p_ptr->stat_cur[i] = p_ptr->stat_max[i] = (s16b)tmp_int; + p_ptr->stat_cur[i] = p_ptr->stat_max[i] = (BASE_STATUS)tmp_int; } @@ -450,7 +447,6 @@ static void do_cmd_wiz_change_aux(void) /* Save */ p_ptr->au = tmp_long; - /* Default */ sprintf(tmp_val, "%ld", (long)(p_ptr->max_exp)); @@ -556,8 +552,6 @@ static void wiz_display_item(object_type *o_ptr) int i, j = 13; BIT_FLAGS flgs[TR_FLAG_SIZE]; char buf[256]; - - /* Extract the flags */ object_flags(o_ptr, flgs); /* Clear the screen */ @@ -630,7 +624,7 @@ static void wiz_display_item(object_type *o_ptr) typedef struct tval_desc { int tval; /*!< 大項目のID */ - cptr desc; /*!< 大項目名 */ + concptr desc; /*!< 大項目名 */ } tval_desc; /*! @@ -705,7 +699,7 @@ void strip_name(char *buf, KIND_OBJECT_IDX k_idx) object_kind *k_ptr = &k_info[k_idx]; - cptr str = (k_name + k_ptr->name); + concptr str = (k_name + k_ptr->name); /* Skip past leading characters */ @@ -741,7 +735,7 @@ static KIND_OBJECT_IDX wiz_create_itemtype(void) TERM_LEN col, row; OBJECT_TYPE_VALUE tval; - cptr tval_desc; + concptr tval_desc; char ch; KIND_OBJECT_IDX choice[80]; @@ -834,7 +828,7 @@ static KIND_OBJECT_IDX wiz_create_itemtype(void) */ static void wiz_tweak_item(object_type *o_ptr) { - cptr p; + concptr p; char tmp_val[80]; /* Hack -- leave artifacts alone */ @@ -985,12 +979,8 @@ static void wiz_reroll_item(object_type *o_ptr) { /* Apply changes */ object_copy(o_ptr, q_ptr); - - /* Recalculate bonuses */ p_ptr->update |= (PU_BONUS); - - /* Combine / Reorder the pack (later) */ - p_ptr->notice |= (PN_COMBINE | PN_REORDER); + p_ptr->update |= (PU_COMBINE | PU_REORDER); p_ptr->window |= (PW_INVEN | PW_EQUIP | PW_SPELL | PW_PLAYER); } @@ -1016,16 +1006,16 @@ static void wiz_statistics(object_type *o_ptr) u32b test_roll = 1000000; char ch; - cptr quality; + concptr quality; BIT_FLAGS mode; object_type forge; object_type *q_ptr; - cptr q = "Rolls: %ld Correct: %ld Matches: %ld Better: %ld Worse: %ld Other: %ld"; + concptr q = "Rolls: %ld Correct: %ld Matches: %ld Better: %ld Worse: %ld Other: %ld"; - cptr p = "Enter number of items to roll: "; + concptr p = "Enter number of items to roll: "; char tmp_val[80]; @@ -1036,7 +1026,7 @@ static void wiz_statistics(object_type *o_ptr) /* Interact */ while (TRUE) { - cptr pmt = "Roll for [n]ormal, [g]ood, or [e]xcellent treasure? "; + concptr pmt = "Roll for [n]ormal, [g]ood, or [e]xcellent treasure? "; /* Display item */ wiz_display_item(o_ptr); @@ -1213,7 +1203,7 @@ static void do_cmd_wiz_blue_mage(void) int j = 0; BIT_FLAGS f4 = 0L, f5 = 0L, f6 = 0L; - for (j = 1; j < 6; j++) + for (j = 1; j < A_MAX; j++) { set_rf_masks(&f4, &f5, &f6, j); @@ -1249,28 +1239,16 @@ static void do_cmd_wiz_play(void) object_type forge; object_type *q_ptr; object_type *o_ptr; - char ch; - bool changed; - - cptr q, s; + concptr q, s; q = "Play with which object? "; s = "You have nothing to play with."; - if (!get_item(&item, q, s, (USE_EQUIP | USE_INVEN | USE_FLOOR | IGNORE_BOTHHAND_SLOT))) return; - /* Get the item (in the pack) */ - if (item >= 0) - { - o_ptr = &inventory[item]; - } + o_ptr = choose_object(&item, q, s, (USE_EQUIP | USE_INVEN | USE_FLOOR | IGNORE_BOTHHAND_SLOT)); - /* Get the item (on the floor) */ - else - { - o_ptr = &o_list[0 - item]; - } + if (!o_ptr) return; /* The item was not changed */ changed = FALSE; @@ -1278,8 +1256,6 @@ static void do_cmd_wiz_play(void) screen_save(); q_ptr = &forge; - - /* Copy object */ object_copy(q_ptr, o_ptr); @@ -1341,12 +1317,8 @@ static void do_cmd_wiz_play(void) /* Change */ object_copy(o_ptr, q_ptr); - - /* Recalculate bonuses */ p_ptr->update |= (PU_BONUS); - - /* Combine / Reorder the pack (later) */ - p_ptr->notice |= (PN_COMBINE | PN_REORDER); + p_ptr->update |= (PU_COMBINE | PU_REORDER); p_ptr->window |= (PW_INVEN | PW_EQUIP | PW_SPELL | PW_PLAYER); } @@ -1555,7 +1527,7 @@ static void do_cmd_wiz_summon(int num) int i; for (i = 0; i < num; i++) { - (void)summon_specific(0, p_ptr->y, p_ptr->x, dun_level, 0, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE)); + (void)summon_specific(0, p_ptr->y, p_ptr->x, dun_level, 0, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE), '\0'); } } @@ -1615,7 +1587,7 @@ static void do_cmd_wiz_zap(void) { if (record_named_pet && is_pet(m_ptr) && m_ptr->nickname) { - GAME_TEXT m_name[80]; + GAME_TEXT m_name[MAX_NLEN]; monster_desc(m_name, m_ptr, MD_INDEF_VISIBLE); do_cmd_write_nikki(NIKKI_NAMED_PET, RECORD_NAMED_PET_WIZ_ZAP, m_name); @@ -1649,7 +1621,7 @@ static void do_cmd_wiz_zap_all(void) if (record_named_pet && is_pet(m_ptr) && m_ptr->nickname) { - GAME_TEXT m_name[80]; + GAME_TEXT m_name[MAX_NLEN]; monster_desc(m_name, m_ptr, MD_INDEF_VISIBLE); do_cmd_write_nikki(NIKKI_NAMED_PET, RECORD_NAMED_PET_WIZ_ZAP, m_name); @@ -2117,6 +2089,10 @@ void do_cmd_debug(void) break; } + case 'V': + do_cmd_wiz_reset_class(); + break; + /* Not a Wizard Command */ default: msg_print("That is not a valid debug command."); @@ -2124,6 +2100,111 @@ void do_cmd_debug(void) } } +void cheat_death(player_type *creature_ptr) +{ + /* Mark social class, reset age, if needed */ + if (creature_ptr->sc) creature_ptr->sc = creature_ptr->age = 0; + + /* Increase age */ + creature_ptr->age++; + + /* Mark savefile */ + creature_ptr->noscore |= 0x0001; + + msg_print(_("ウィザードモードに念を送り、死を欺いた。", "You invoke wizard mode and cheat death.")); + msg_print(NULL); + + (void)life_stream(FALSE, FALSE); + + if (creature_ptr->pclass == CLASS_MAGIC_EATER) + { + int magic_idx; + for (magic_idx = 0; magic_idx < EATER_EXT * 2; magic_idx++) + { + creature_ptr->magic_num1[magic_idx] = creature_ptr->magic_num2[magic_idx] * EATER_CHARGE; + } + for (; magic_idx < EATER_EXT * 3; magic_idx++) + { + creature_ptr->magic_num1[magic_idx] = 0; + } + } + + /* Restore spell points */ + creature_ptr->csp = creature_ptr->msp; + creature_ptr->csp_frac = 0; + + /* Hack -- cancel recall */ + if (creature_ptr->word_recall) + { + msg_print(_("張りつめた大気が流れ去った...", "A tension leaves the air around you...")); + msg_print(NULL); + + /* Hack -- Prevent recall */ + creature_ptr->word_recall = 0; + creature_ptr->redraw |= (PR_STATUS); + } + + /* Hack -- cancel alter */ + if (creature_ptr->alter_reality) + { + /* Hack -- Prevent alter */ + creature_ptr->alter_reality = 0; + creature_ptr->redraw |= (PR_STATUS); + } + + /* Note cause of death */ + (void)strcpy(creature_ptr->died_from, _("死の欺き", "Cheating death")); + + /* Do not die */ + creature_ptr->is_dead = FALSE; + + /* Hack -- Prevent starvation */ + (void)set_food(PY_FOOD_MAX - 1); + + dun_level = 0; + creature_ptr->inside_arena = FALSE; + creature_ptr->inside_battle = FALSE; + leaving_quest = 0; + creature_ptr->inside_quest = 0; + if (dungeon_type) creature_ptr->recall_dungeon = dungeon_type; + dungeon_type = 0; + if (lite_town || vanilla_town) + { + creature_ptr->wilderness_y = 1; + creature_ptr->wilderness_x = 1; + if (vanilla_town) + { + creature_ptr->oldpy = 10; + creature_ptr->oldpx = 34; + } + else + { + creature_ptr->oldpy = 33; + creature_ptr->oldpx = 131; + } + } + else + { + creature_ptr->wilderness_y = 48; + creature_ptr->wilderness_x = 5; + creature_ptr->oldpy = 33; + creature_ptr->oldpx = 131; + } + + /* Leaving */ + creature_ptr->wild_mode = FALSE; + creature_ptr->leaving = TRUE; + + do_cmd_write_nikki(NIKKI_BUNSHOU, 1, + _(" しかし、生き返った。", + " but revived.")); + + /* Prepare next floor */ + leave_floor(); + wipe_m_list(); + +} + #else