#include "core/player-update-types.h"
#include "core/stuff-handler.h"
#include "floor/floor.h"
+#include "floor/pattern-walk.h"
#include "game-option/input-options.h"
#include "grid/feature.h"
#include "grid/grid.h"
#include "core/window-redrawer.h"
#include "effect/spells-effect-util.h"
#include "floor/floor.h"
+#include "floor/pattern-walk.h"
#include "game-option/input-options.h"
#include "game-option/play-record-options.h"
#include "game-option/text-display-options.h"
#include "spell-kind/spells-teleport.h"
#include "status/bad-status-setter.h"
#include "status/experience.h"
+#include "util/bit-flags-calculator.h"
#include "view/display-messages.h"
+#include "world/world.h"
/*!
* @brief パターン終点到達時のテレポート処理を行う
return TRUE;
}
+
+/*!
+ * @brief パターンによる移動制限処理
+ * @param creature_ptr プレーヤーへの参照ポインタ
+ * @param c_y プレイヤーの移動元Y座標
+ * @param c_x プレイヤーの移動元X座標
+ * @param n_y プレイヤーの移動先Y座標
+ * @param n_x プレイヤーの移動先X座標
+ * @return 移動処理が可能である場合(可能な場合に選択した場合)TRUEを返す。
+ */
+bool pattern_seq(player_type *creature_ptr, POSITION c_y, POSITION c_x, POSITION n_y, POSITION n_x)
+{
+ feature_type *cur_f_ptr = &f_info[creature_ptr->current_floor_ptr->grid_array[c_y][c_x].feat];
+ feature_type *new_f_ptr = &f_info[creature_ptr->current_floor_ptr->grid_array[n_y][n_x].feat];
+ bool is_pattern_tile_cur = have_flag(cur_f_ptr->flags, FF_PATTERN);
+ bool is_pattern_tile_new = have_flag(new_f_ptr->flags, FF_PATTERN);
+ if (!is_pattern_tile_cur && !is_pattern_tile_new)
+ return TRUE;
+
+ int pattern_type_cur = is_pattern_tile_cur ? cur_f_ptr->subtype : NOT_PATTERN_TILE;
+ int pattern_type_new = is_pattern_tile_new ? new_f_ptr->subtype : NOT_PATTERN_TILE;
+ if (pattern_type_new == PATTERN_TILE_START) {
+ if (!is_pattern_tile_cur && !creature_ptr->confused && !creature_ptr->stun && !creature_ptr->image) {
+ if (get_check(_("パターンの上を歩き始めると、全てを歩かなければなりません。いいですか?",
+ "If you start walking the Pattern, you must walk the whole way. Ok? ")))
+ return TRUE;
+ else
+ return FALSE;
+ } else
+ return TRUE;
+ }
+
+ if ((pattern_type_new == PATTERN_TILE_OLD) || (pattern_type_new == PATTERN_TILE_END) || (pattern_type_new == PATTERN_TILE_WRECKED)) {
+ if (is_pattern_tile_cur) {
+ return TRUE;
+ } else {
+ msg_print(_("パターンの上を歩くにはスタート地点から歩き始めなくてはなりません。", "You must start walking the Pattern from the startpoint."));
+ return FALSE;
+ }
+ }
+
+ if ((pattern_type_new == PATTERN_TILE_TELEPORT) || (pattern_type_cur == PATTERN_TILE_TELEPORT))
+ return TRUE;
+
+ if (pattern_type_cur == PATTERN_TILE_START) {
+ if (is_pattern_tile_new)
+ return TRUE;
+ else {
+ msg_print(_("パターンの上は正しい順序で歩かねばなりません。", "You must walk the Pattern in correct order."));
+ return FALSE;
+ }
+ }
+
+ if ((pattern_type_cur == PATTERN_TILE_OLD) || (pattern_type_cur == PATTERN_TILE_END) || (pattern_type_cur == PATTERN_TILE_WRECKED)) {
+ if (!is_pattern_tile_new) {
+ msg_print(_("パターンを踏み外してはいけません。", "You may not step off from the Pattern."));
+ return FALSE;
+ } else {
+ return TRUE;
+ }
+ }
+
+ if (!is_pattern_tile_cur) {
+ msg_print(_("パターンの上を歩くにはスタート地点から歩き始めなくてはなりません。", "You must start walking the Pattern from the startpoint."));
+
+ return FALSE;
+ }
+
+ byte ok_move = PATTERN_TILE_START;
+ switch (pattern_type_cur) {
+ case PATTERN_TILE_1:
+ ok_move = PATTERN_TILE_2;
+ break;
+ case PATTERN_TILE_2:
+ ok_move = PATTERN_TILE_3;
+ break;
+ case PATTERN_TILE_3:
+ ok_move = PATTERN_TILE_4;
+ break;
+ case PATTERN_TILE_4:
+ ok_move = PATTERN_TILE_1;
+ break;
+ default:
+ if (current_world_ptr->wizard)
+ msg_format(_("おかしなパターン歩行、%d。", "Funny Pattern walking, %d."), pattern_type_cur);
+ return TRUE;
+ }
+
+ if ((pattern_type_new == ok_move) || (pattern_type_new == pattern_type_cur))
+ return TRUE;
+
+ if (!is_pattern_tile_new)
+ msg_print(_("パターンを踏み外してはいけません。", "You may not step off from the Pattern."));
+ else
+ msg_print(_("パターンの上は正しい順序で歩かねばなりません。", "You must walk the Pattern in correct order."));
+
+ return FALSE;
+}
#include "system/angband.h"
bool pattern_effect(player_type* creature_ptr);
+bool pattern_seq(player_type *creature_ptr, POSITION c_y, POSITION c_x, POSITION n_y, POSITION n_x);
}
/*!
- * @brief パターンによる移動制限処理
- * @param creature_ptr プレーヤーへの参照ポインタ
- * @param c_y プレイヤーの移動元Y座標
- * @param c_x プレイヤーの移動元X座標
- * @param n_y プレイヤーの移動先Y座標
- * @param n_x プレイヤーの移動先X座標
- * @return 移動処理が可能である場合(可能な場合に選択した場合)TRUEを返す。
- */
-bool pattern_seq(player_type *creature_ptr, POSITION c_y, POSITION c_x, POSITION n_y, POSITION n_x)
-{
- feature_type *cur_f_ptr = &f_info[creature_ptr->current_floor_ptr->grid_array[c_y][c_x].feat];
- feature_type *new_f_ptr = &f_info[creature_ptr->current_floor_ptr->grid_array[n_y][n_x].feat];
- bool is_pattern_tile_cur = have_flag(cur_f_ptr->flags, FF_PATTERN);
- bool is_pattern_tile_new = have_flag(new_f_ptr->flags, FF_PATTERN);
- if (!is_pattern_tile_cur && !is_pattern_tile_new)
- return TRUE;
-
- int pattern_type_cur = is_pattern_tile_cur ? cur_f_ptr->subtype : NOT_PATTERN_TILE;
- int pattern_type_new = is_pattern_tile_new ? new_f_ptr->subtype : NOT_PATTERN_TILE;
- if (pattern_type_new == PATTERN_TILE_START) {
- if (!is_pattern_tile_cur && !creature_ptr->confused && !creature_ptr->stun && !creature_ptr->image) {
- if (get_check(_("パターンの上を歩き始めると、全てを歩かなければなりません。いいですか?",
- "If you start walking the Pattern, you must walk the whole way. Ok? ")))
- return TRUE;
- else
- return FALSE;
- } else
- return TRUE;
- }
-
- if ((pattern_type_new == PATTERN_TILE_OLD) || (pattern_type_new == PATTERN_TILE_END) || (pattern_type_new == PATTERN_TILE_WRECKED)) {
- if (is_pattern_tile_cur) {
- return TRUE;
- } else {
- msg_print(_("パターンの上を歩くにはスタート地点から歩き始めなくてはなりません。", "You must start walking the Pattern from the startpoint."));
- return FALSE;
- }
- }
-
- if ((pattern_type_new == PATTERN_TILE_TELEPORT) || (pattern_type_cur == PATTERN_TILE_TELEPORT))
- return TRUE;
-
- if (pattern_type_cur == PATTERN_TILE_START) {
- if (is_pattern_tile_new)
- return TRUE;
- else {
- msg_print(_("パターンの上は正しい順序で歩かねばなりません。", "You must walk the Pattern in correct order."));
- return FALSE;
- }
- }
-
- if ((pattern_type_cur == PATTERN_TILE_OLD) || (pattern_type_cur == PATTERN_TILE_END) || (pattern_type_cur == PATTERN_TILE_WRECKED)) {
- if (!is_pattern_tile_new) {
- msg_print(_("パターンを踏み外してはいけません。", "You may not step off from the Pattern."));
- return FALSE;
- } else {
- return TRUE;
- }
- }
-
- if (!is_pattern_tile_cur) {
- msg_print(_("パターンの上を歩くにはスタート地点から歩き始めなくてはなりません。", "You must start walking the Pattern from the startpoint."));
-
- return FALSE;
- }
-
- byte ok_move = PATTERN_TILE_START;
- switch (pattern_type_cur) {
- case PATTERN_TILE_1:
- ok_move = PATTERN_TILE_2;
- break;
- case PATTERN_TILE_2:
- ok_move = PATTERN_TILE_3;
- break;
- case PATTERN_TILE_3:
- ok_move = PATTERN_TILE_4;
- break;
- case PATTERN_TILE_4:
- ok_move = PATTERN_TILE_1;
- break;
- default:
- if (current_world_ptr->wizard)
- msg_format(_("おかしなパターン歩行、%d。", "Funny Pattern walking, %d."), pattern_type_cur);
- return TRUE;
- }
-
- if ((pattern_type_new == ok_move) || (pattern_type_new == pattern_type_cur))
- return TRUE;
-
- if (!is_pattern_tile_new)
- msg_print(_("パターンを踏み外してはいけません。", "You may not step off from the Pattern."));
- else
- msg_print(_("パターンの上は正しい順序で歩かねばなりません。", "You must walk the Pattern in correct order."));
-
- return FALSE;
-}
-
-/*!
* @brief 移動に伴うプレイヤーのステータス変化処理
* @param creature_ptr プレーヤーへの参照ポインタ
* @param ny 移動先Y座標
extern POSITION temp2_y[MAX_SHORT];
bool move_player_effect(player_type *creature_ptr, POSITION ny, POSITION nx, BIT_FLAGS mpe_mode);
-bool pattern_seq(player_type *creature_ptr, POSITION c_y, POSITION c_x, POSITION n_y, POSITION n_x);
bool trap_can_be_ignored(player_type *creature_ptr, FEAT_IDX feat);
void search(player_type *creature_ptr);