OSDN Git Service

[Refactor] #37353 cmd4.c を cmd-dump.c に改名して関数整理.
[hengband/hengband.git] / src / trap.c
index aef866c..e75729f 100644 (file)
 #include "angband.h"
-#include "floor.h"
+#include "util.h"
+
+#include "cmd-dump.h"
 #include "trap.h"
 #include "player-damage.h"
 #include "player-move.h"
-#include "projection.h"
+#include "player-effects.h"
 #include "spells-summon.h"
 #include "quest.h"
 #include "artifact.h"
 #include "feature.h"
+#include "player-status.h"
+#include "grid.h"
+#include "spells.h"
+#include "floor.h"
+#include "floor-save.h"
+#include "init.h"
+#include "files.h"
+#include "dungeon.h"
+#include "world.h"
 
 static s16b normal_traps[MAX_NORMAL_TRAPS];
 
 
 /*!
+ * @brief 箱のトラップテーブル
+ * @details
+ * <pre>
+ * Each chest has a certain set of traps, determined by pval
+ * Each chest has a "pval" from 1 to the chest level (max 55)
+ * If the "pval" is negative then the trap has been disarmed
+ * The "pval" of a chest determines the quality of its treasure
+ * Note that disarming a trap on a chest also removes the lock.
+ * </pre>
+ */
+const int chest_traps[64] =
+{
+       0,                                      /* 0 == empty */
+       (CHEST_POISON),
+       (CHEST_LOSE_STR),
+       (CHEST_LOSE_CON),
+       (CHEST_LOSE_STR),
+       (CHEST_LOSE_CON),                       /* 5 == best small wooden */
+       0,
+       (CHEST_ALARM),
+       (CHEST_ALARM),
+       (CHEST_LOSE_STR),
+       (CHEST_LOSE_CON),
+       (CHEST_POISON),
+       (CHEST_SCATTER),
+       (CHEST_LOSE_STR | CHEST_LOSE_CON),
+       (CHEST_LOSE_STR | CHEST_LOSE_CON),
+       (CHEST_SUMMON),                 /* 15 == best large wooden */
+       0,
+       (CHEST_ALARM),
+       (CHEST_SCATTER),
+       (CHEST_PARALYZE),
+       (CHEST_LOSE_STR | CHEST_LOSE_CON),
+       (CHEST_SUMMON),
+       (CHEST_PARALYZE),
+       (CHEST_LOSE_STR),
+       (CHEST_LOSE_CON),
+       (CHEST_EXPLODE),                        /* 25 == best small iron */
+       0,
+       (CHEST_E_SUMMON),
+       (CHEST_POISON | CHEST_LOSE_CON),
+       (CHEST_LOSE_STR | CHEST_LOSE_CON),
+       (CHEST_EXPLODE | CHEST_SUMMON),
+       (CHEST_BIRD_STORM),
+       (CHEST_POISON | CHEST_SUMMON),
+       (CHEST_E_SUMMON | CHEST_ALARM),
+       (CHEST_EXPLODE),
+       (CHEST_EXPLODE | CHEST_SUMMON), /* 35 == best large iron */
+       0,
+       (CHEST_SUMMON | CHEST_ALARM),
+       (CHEST_EXPLODE),
+       (CHEST_EXPLODE | CHEST_SUMMON),
+       (CHEST_EXPLODE | CHEST_SUMMON),
+       (CHEST_POISON | CHEST_PARALYZE),
+       (CHEST_EXPLODE),
+       (CHEST_BIRD_STORM),
+       (CHEST_EXPLODE | CHEST_E_SUMMON | CHEST_ALARM),
+       (CHEST_H_SUMMON),        /* 45 == best small steel */
+       0,
+       (CHEST_EXPLODE | CHEST_SUMMON | CHEST_ALARM),
+       (CHEST_BIRD_STORM),
+       (CHEST_RUNES_OF_EVIL),
+       (CHEST_EXPLODE | CHEST_SUMMON | CHEST_ALARM),
+       (CHEST_BIRD_STORM | CHEST_ALARM),
+       (CHEST_H_SUMMON | CHEST_ALARM),
+       (CHEST_RUNES_OF_EVIL),
+       (CHEST_H_SUMMON | CHEST_SCATTER | CHEST_ALARM),
+       (CHEST_RUNES_OF_EVIL | CHEST_EXPLODE),  /* 55 == best large steel */
+       (CHEST_EXPLODE | CHEST_SUMMON),
+       (CHEST_EXPLODE | CHEST_SUMMON),
+       (CHEST_EXPLODE | CHEST_SUMMON),
+       (CHEST_EXPLODE | CHEST_SUMMON),
+       (CHEST_EXPLODE | CHEST_SUMMON),
+       (CHEST_EXPLODE | CHEST_SUMMON),
+       (CHEST_EXPLODE | CHEST_SUMMON),
+       (CHEST_EXPLODE | CHEST_SUMMON),
+};
+
+
+/*!
 * @brief タグに従って、基本トラップテーブルを初期化する / Initialize arrays for normal traps
 * @return なし
 */
@@ -324,7 +415,7 @@ void hit_trap(bool break_trap)
                else
                {
                        msg_print(_("落とし戸に落ちた!", "You have fallen through a trap door!"));
-                       if ((p_ptr->pseikaku == SEIKAKU_COMBAT) || (inventory[INVEN_BOW].name1 == ART_CRIMSON))
+                       if ((p_ptr->pseikaku == SEIKAKU_COMBAT) || (p_ptr->inventory_list[INVEN_BOW].name1 == ART_CRIMSON))
                                msg_print(_("くっそ~!", ""));
                        else if((p_ptr->pseikaku == SEIKAKU_CHARGEMAN))
                                msg_print(_("ジュラル星人の仕業に違いない!", ""));
@@ -342,8 +433,6 @@ void hit_trap(bool break_trap)
 
                        do_cmd_write_nikki(NIKKI_BUNSHOU, 0, _("落とし戸に落ちた", "You have fallen through a trap door!"));
                        prepare_change_floor_mode(CFM_SAVE_FLOORS | CFM_DOWN | CFM_RAND_PLACE | CFM_RAND_CONNECT);
-
-                       /* Leaving */
                        p_ptr->leaving = TRUE;
                }
                break;