X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fcmd%2Fcmd-read.c;h=1bfe1cafaa928f823d3a70b6024dc967d3842155;hb=738fd652c9f50ec7faa3cfa11bb28790dda8922a;hp=7841a778a05cadfa8657a02ec0845c35bceec2a7;hpb=a1e8e737d54ea0c63c0b0780fa905c8302533730;p=hengband%2Fhengband.git diff --git a/src/cmd/cmd-read.c b/src/cmd/cmd-read.c index 7841a778a..1bfe1cafa 100644 --- a/src/cmd/cmd-read.c +++ b/src/cmd/cmd-read.c @@ -8,6 +8,7 @@ #include "angband.h" #include "util.h" +#include "main/sound-definitions-table.h" #include "object-flavor.h" #include "object-hook.h" @@ -19,20 +20,22 @@ #include "player-effects.h" #include "player-inventory.h" #include "rumor.h" -#include "realm-hex.h" +#include "realm/realm-hex.h" -#include "spells.h" #include "spells-object.h" #include "spells-floor.h" #include "spells-summon.h" #include "spells-status.h" -#include "cmd-basic.h" +#include "cmd/cmd-basic.h" +#include "core/show-file.h" #include "files.h" -#include "floor.h" -#include "objectkind.h" -#include "realm-song.h" -#include "view-mainwindow.h" +#include "floor/floor.h" +#include "object/object-kind.h" +#include "view/display-main-window.h" +#include "spell/spells-type.h" +#include "spell/spells2.h" +#include "spell/spells3.h" /*! * @brief 巻物を読むコマンドのサブルーチン @@ -87,7 +90,7 @@ void exe_read(player_type *creature_ptr, INVENTORY_IDX item, bool known) { (void)set_blind(creature_ptr, creature_ptr->blind + 3 + randint1(5)); } - if (unlite_area(10, 3)) ident = TRUE; + if (unlite_area(creature_ptr, 10, 3)) ident = TRUE; break; } @@ -122,7 +125,7 @@ void exe_read(player_type *creature_ptr, INVENTORY_IDX item, bool known) { for (k = 0; k < randint1(3); k++) { - if (summon_specific(0, creature_ptr->y, creature_ptr->x, creature_ptr->current_floor_ptr->dun_level, 0, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET))) + if (summon_specific(creature_ptr, 0, creature_ptr->y, creature_ptr->x, creature_ptr->current_floor_ptr->dun_level, 0, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET))) { ident = TRUE; } @@ -134,7 +137,7 @@ void exe_read(player_type *creature_ptr, INVENTORY_IDX item, bool known) { for (k = 0; k < randint1(3); k++) { - if (summon_specific(0, creature_ptr->y, creature_ptr->x, creature_ptr->current_floor_ptr->dun_level, SUMMON_UNDEAD, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET))) + if (summon_specific(creature_ptr, 0, creature_ptr->y, creature_ptr->x, creature_ptr->current_floor_ptr->dun_level, SUMMON_UNDEAD, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET))) { ident = TRUE; } @@ -144,7 +147,7 @@ void exe_read(player_type *creature_ptr, INVENTORY_IDX item, bool known) case SV_SCROLL_SUMMON_PET: { - if (summon_specific(-1, creature_ptr->y, creature_ptr->x, creature_ptr->current_floor_ptr->dun_level, 0, (PM_ALLOW_GROUP | PM_FORCE_PET))) + if (summon_specific(creature_ptr, -1, creature_ptr->y, creature_ptr->x, creature_ptr->current_floor_ptr->dun_level, 0, (PM_ALLOW_GROUP | PM_FORCE_PET))) { ident = TRUE; } @@ -153,7 +156,7 @@ void exe_read(player_type *creature_ptr, INVENTORY_IDX item, bool known) case SV_SCROLL_SUMMON_KIN: { - if (summon_kin_player(creature_ptr->lev, creature_ptr->y, creature_ptr->x, (PM_FORCE_PET | PM_ALLOW_GROUP))) + if (summon_kin_player(creature_ptr, creature_ptr->lev, creature_ptr->y, creature_ptr->x, (PM_FORCE_PET | PM_ALLOW_GROUP))) { ident = TRUE; } @@ -168,14 +171,14 @@ void exe_read(player_type *creature_ptr, INVENTORY_IDX item, bool known) case SV_SCROLL_PHASE_DOOR: { - teleport_player(creature_ptr, 10, 0L); + teleport_player(creature_ptr, 10, TELEPORT_SPONTANEOUS); ident = TRUE; break; } case SV_SCROLL_TELEPORT: { - teleport_player(creature_ptr, 100, 0L); + teleport_player(creature_ptr, 100, TELEPORT_SPONTANEOUS); ident = TRUE; break; } @@ -196,14 +199,14 @@ void exe_read(player_type *creature_ptr, INVENTORY_IDX item, bool known) case SV_SCROLL_IDENTIFY: { - if (!ident_spell(creature_ptr, FALSE)) used_up = FALSE; + if (!ident_spell(creature_ptr, FALSE, 0)) used_up = FALSE; ident = TRUE; break; } case SV_SCROLL_STAR_IDENTIFY: { - if (!identify_fully(FALSE)) used_up = FALSE; + if (!identify_fully(creature_ptr, FALSE, 0)) used_up = FALSE; ident = TRUE; break; } @@ -277,7 +280,7 @@ void exe_read(player_type *creature_ptr, INVENTORY_IDX item, bool known) case SV_SCROLL_LIGHT: { - if (lite_area(damroll(2, 8), 2)) ident = TRUE; + if (lite_area(creature_ptr, damroll(2, 8), 2)) ident = TRUE; break; } @@ -372,13 +375,13 @@ void exe_read(player_type *creature_ptr, INVENTORY_IDX item, bool known) case SV_SCROLL_TRAP_DOOR_DESTRUCTION: { - if (destroy_doors_touch()) ident = TRUE; + if (destroy_doors_touch(creature_ptr)) ident = TRUE; break; } case SV_SCROLL_STAR_DESTRUCTION: { - if (destroy_area(creature_ptr->current_floor_ptr, creature_ptr->y, creature_ptr->x, 13 + randint0(5), FALSE)) + if (destroy_area(creature_ptr, creature_ptr->y, creature_ptr->x, 13 + randint0(5), FALSE)) ident = TRUE; else msg_print(_("ダンジョンが揺れた...", "The dungeon trembles...")); @@ -431,14 +434,14 @@ void exe_read(player_type *creature_ptr, INVENTORY_IDX item, bool known) case SV_SCROLL_ACQUIREMENT: { - acquirement(creature_ptr->y, creature_ptr->x, 1, TRUE, FALSE, FALSE); + acquirement(creature_ptr, creature_ptr->y, creature_ptr->x, 1, TRUE, FALSE, FALSE); ident = TRUE; break; } case SV_SCROLL_STAR_ACQUIREMENT: { - acquirement(creature_ptr->y, creature_ptr->x, randint1(2) + 1, TRUE, FALSE, FALSE); + acquirement(creature_ptr, creature_ptr->y, creature_ptr->x, randint1(2) + 1, TRUE, FALSE, FALSE); ident = TRUE; break; } @@ -448,7 +451,7 @@ void exe_read(player_type *creature_ptr, INVENTORY_IDX item, bool known) { fire_ball(creature_ptr, GF_FIRE, 0, 666, 4); /* Note: "Double" damage since it is centered on the player ... */ - if (!(IS_OPPOSE_FIRE() || creature_ptr->resist_fire || creature_ptr->immune_fire)) + if (!(is_oppose_fire(creature_ptr) || creature_ptr->resist_fire || creature_ptr->immune_fire)) take_hit(creature_ptr, DAMAGE_NOESCAPE, 50+randint1(50), _("炎の巻物", "a Scroll of Fire"), -1); ident = TRUE; @@ -459,7 +462,7 @@ void exe_read(player_type *creature_ptr, INVENTORY_IDX item, bool known) case SV_SCROLL_ICE: { fire_ball(creature_ptr, GF_ICE, 0, 777, 4); - if (!(IS_OPPOSE_COLD() || creature_ptr->resist_cold || creature_ptr->immune_cold)) + if (!(is_oppose_cold(creature_ptr) || creature_ptr->resist_cold || creature_ptr->immune_cold)) take_hit(creature_ptr, DAMAGE_NOESCAPE, 100+randint1(100), _("氷の巻物", "a Scroll of Ice"), -1); ident = TRUE; @@ -480,7 +483,7 @@ void exe_read(player_type *creature_ptr, INVENTORY_IDX item, bool known) { msg_print(_("巻物にはメッセージが書かれている:", "There is message on the scroll. It says:")); msg_print(NULL); - display_rumor(TRUE); + display_rumor(creature_ptr, TRUE); msg_print(NULL); msg_print(_("巻物は煙を立てて消え去った!", "The scroll disappears in a puff of smoke!")); @@ -491,28 +494,28 @@ void exe_read(player_type *creature_ptr, INVENTORY_IDX item, bool known) case SV_SCROLL_ARTIFACT: { ident = TRUE; - if (!artifact_scroll()) used_up = FALSE; + if (!artifact_scroll(creature_ptr)) used_up = FALSE; break; } case SV_SCROLL_RESET_RECALL: { ident = TRUE; - if (!reset_recall()) used_up = FALSE; + if (!reset_recall(creature_ptr)) used_up = FALSE; break; } case SV_SCROLL_AMUSEMENT: { ident = TRUE; - amusement(creature_ptr->y, creature_ptr->x, 1, FALSE); + amusement(creature_ptr, creature_ptr->y, creature_ptr->x, 1, FALSE); break; } case SV_SCROLL_STAR_AMUSEMENT: { ident = TRUE; - amusement(creature_ptr->y, creature_ptr->x, randint1(2) + 1, FALSE); + amusement(creature_ptr, creature_ptr->y, creature_ptr->x, randint1(2) + 1, FALSE); break; } } @@ -544,17 +547,24 @@ void exe_read(player_type *creature_ptr, INVENTORY_IDX item, bool known) q=format("book-%d_jp.txt",o_ptr->sval); /* Display object description */ - object_desc(o_name, o_ptr, OD_NAME_ONLY); + object_desc(creature_ptr, o_name, o_ptr, OD_NAME_ONLY); path_build(buf, sizeof(buf), ANGBAND_DIR_FILE, q); /* Peruse the help file */ - (void)show_file(TRUE, buf, o_name, 0, 0); + (void)show_file(creature_ptr, TRUE, buf, o_name, 0, 0); screen_load(); used_up=FALSE; } - creature_ptr->update |= (PU_COMBINE | PU_REORDER); + /* + * Store what may have to be updated for the inventory (including + * autodestroy if set by something else). Then turn off those flags + * so that updates triggered by calling gain_exp() below do not + * rearrange the inventory before destroying the scroll in the pack. + */ + BIT_FLAGS inventory_flags = (PU_COMBINE | PU_REORDER | (creature_ptr->update & PU_AUTODESTROY)); + creature_ptr->update &= ~(PU_COMBINE | PU_REORDER | PU_AUTODESTROY); if (!(object_is_aware(o_ptr))) { @@ -569,12 +579,12 @@ void exe_read(player_type *creature_ptr, INVENTORY_IDX item, bool known) /* An identification was made */ if (ident && !object_is_aware(o_ptr)) { - object_aware(o_ptr); + object_aware(creature_ptr, o_ptr); gain_exp(creature_ptr, (lev + (creature_ptr->lev >> 1)) / creature_ptr->lev); } creature_ptr->window |= (PW_INVEN | PW_EQUIP | PW_PLAYER); - + creature_ptr->update |= inventory_flags; /* Hack -- allow certain scrolls to be "preserved" */ if (!used_up) @@ -583,9 +593,10 @@ void exe_read(player_type *creature_ptr, INVENTORY_IDX item, bool known) } sound(SOUND_SCROLL); - vary_item(item, -1); + vary_item(creature_ptr, item, -1); } + /*! * @brief 読むコマンドのメインルーチン / * Eat some food (from the pack or floor)