#pragma once
+#include "floor.h"
+
/*
* Most of the "player" information goes here.
*
#define MAGIC_GAIN_EXP 0x0004
/*
+ * todo ここからp_ptrを消すと、object-hookにある大量の関数ポインタを全部修正する必要がある
+ * 影響範囲が広すぎるので保留
* Magic-books for the realms
*/
#define REALM1_BOOK (p_ptr->realm1 + TV_LIFE_BOOK - 1)
#define SEX_MALE 1
#define MAX_SEXES 2 /*!< 性別の定義最大数 / Maximum number of player "sex" types (see "table.c", etc) */
+extern const byte adj_mag_study[];
+extern const byte adj_mag_mana[];
+extern const byte adj_mag_fail[];
+extern const byte adj_mag_stat[];
+extern const byte adj_chr_gold[];
+extern const byte adj_int_dev[];
+extern const byte adj_wis_sav[];
+extern const byte adj_dex_dis[];
+extern const byte adj_int_dis[];
+extern const byte adj_dex_ta[];
+extern const byte adj_str_td[];
+extern const byte adj_dex_th[];
+extern const byte adj_str_th[];
+extern const byte adj_str_wgt[];
+extern const byte adj_str_hold[];
+extern const byte adj_str_dig[];
+extern const byte adj_dex_safe[];
+extern const byte adj_con_fix[];
+extern const byte adj_con_mhp[];
+extern const byte adj_chr_chm[];
+
+
extern const concptr stat_names[6];
extern const concptr stat_names_reduced[6];
typedef struct player_type player_type;
+struct floor_type;
struct player_type
{
int player_euid;
int player_egid;
+ floor_type *current_floor_ptr;
POSITION oldpy; /* Previous player location -KMW- */
POSITION oldpx; /* Previous player location -KMW- */
TOWN_IDX town_num; /* Current town number */
s16b arena_number; /* monster number in arena -KMW- */
- bool inside_arena; /* Is character inside arena? */
- QUEST_IDX inside_quest; /* Inside quest level */
- bool inside_battle; /* Is character inside tougijou? */
+ bool phase_out; /*!< フェイズアウト状態(闘技場観戦状態などに利用、NPCの処理の対象にならず自身もほとんどの行動ができない) */
DUNGEON_IDX dungeon_idx; /* current dungeon index */
POSITION wilderness_x; /* Coordinates in the wilderness */
#define MUT1_EAT_MAGIC 0x00400000L /*!< 突然変異: 魔力喰い */
#define MUT1_WEIGH_MAG 0x00800000L /*!< 突然変異: 魔力感知 */
#define MUT1_STERILITY 0x01000000L /*!< 突然変異: 増殖阻止 */
-#define MUT1_PANIC_HIT 0x02000000L /*!< 突然変異: ヒットアンドアウェイ */
+#define MUT1_HIT_AND_AWAY 0x02000000L /*!< 突然変異: ヒットアンドアウェイ */
#define MUT1_DAZZLE 0x04000000L /*!< 突然変異: 眩惑 */
#define MUT1_LASER_EYE 0x08000000L /*!< 突然変異: レーザー・アイ */
#define MUT1_RECALL 0x10000000L /*!< 突然変異: 帰還 */
SPELL_IDX mane_spell[MAX_MANE];
HIT_POINT mane_dam[MAX_MANE];
s16b mane_num;
+ bool new_mane;
#define CONCENT_RADAR_THRESHOLD 2
#define CONCENT_TELE_THRESHOLD 5
concptr last_message; /* Last message on death or retirement */
char history[4][60]; /* Textual "history" for the Player */
- u16b total_winner; /* Total winner */
u16b panic_save; /* Panic save */
- u16b noscore; /* Cheating flags */
-
bool wait_report_score; /* Waiting to report score */
bool is_dead; /* Player is dead */
bool now_damaged;
bool ambush_flag;
+ BIT_FLAGS change_floor_mode; /*!<フロア移行処理に関するフラグ / Mode flags for changing floor */
bool reset_concent; /* Concentration reset flag */
- bool wizard; /* Player is in wizard mode */
-
MONSTER_IDX riding; /* Riding on a monster of this index */
#define KNOW_STAT 0x01
#define PU_FLOW 0x10000000L /*!< ステータス更新フラグ: プレイヤーから各マスへの到達距離 / Update flow */
BIT_FLAGS redraw; /* Normal Redraws */
+#define PR_MISC 0x00000001L /*!< 再描画フラグ: 種族と職業 / Display Race/Class */
+#define PR_TITLE 0x00000002L /*!< 再描画フラグ: 称号 / Display Title */
+#define PR_LEV 0x00000004L /*!< 再描画フラグ: レベル / Display Level */
+#define PR_EXP 0x00000008L /*!< 再描画フラグ: 経験値 / Display Experience */
+#define PR_STATS 0x00000010L /*!< 再描画フラグ: ステータス / Display Stats */
+#define PR_ARMOR 0x00000020L /*!< 再描画フラグ: AC / Display Armor */
+#define PR_HP 0x00000040L /*!< 再描画フラグ: HP / Display Hitpoints */
+#define PR_MANA 0x00000080L /*!< 再描画フラグ: MP / Display Mana */
+#define PR_GOLD 0x00000100L /*!< 再描画フラグ: 所持金 / Display Gold */
+#define PR_DEPTH 0x00000200L /*!< 再描画フラグ: ダンジョンの階 / Display Depth */
+#define PR_EQUIPPY 0x00000400L /*!< 再描画フラグ: 装備シンボル / Display equippy chars */
+#define PR_HEALTH 0x00000800L /*!< 再描画フラグ: モンスターのステータス / Display Health Bar */
+#define PR_CUT 0x00001000L /*!< 再描画フラグ: 負傷度 / Display Extra (Cut) */
+#define PR_STUN 0x00002000L /*!< 再描画フラグ: 朦朧度 / Display Extra (Stun) */
+#define PR_HUNGER 0x00004000L /*!< 再描画フラグ: 空腹度 / Display Extra (Hunger) */
+#define PR_STATUS 0x00008000L /*!< 再描画フラグ: プレイヤーの付与状態 / Display Status Bar */
+#define PR_XXX0 0x00010000L /*!< (unused) */
+#define PR_UHEALTH 0x00020000L /*!< 再描画フラグ: ペットのステータス / Display Uma Health Bar */
+#define PR_XXX1 0x00040000L /*!< (unused) */
+#define PR_XXX2 0x00080000L /*!< (unused) */
+#define PR_STATE 0x00100000L /*!< 再描画フラグ: プレイヤーの行動状態 / Display Extra (State) */
+#define PR_SPEED 0x00200000L /*!< 再描画フラグ: 加速 / Display Extra (Speed) */
+#define PR_STUDY 0x00400000L /*!< 再描画フラグ: 学習 / Display Extra (Study) */
+#define PR_IMITATION 0x00800000L /*!< 再描画フラグ: ものまね / Display Extra (Imitation) */
+#define PR_EXTRA 0x01000000L /*!< 再描画フラグ: 拡張ステータス全体 / Display Extra Info */
+#define PR_BASIC 0x02000000L /*!< 再描画フラグ: 基本ステータス全体 / Display Basic Info */
+#define PR_MAP 0x04000000L /*!< 再描画フラグ: ゲームマップ / Display Map */
+#define PR_WIPE 0x08000000L /*!< 再描画フラグ: 画面消去 / Hack -- Total Redraw */
+
BIT_FLAGS window; /* Window Redraws */
+#define PW_INVEN 0x00000001L /*!<サブウィンドウ描画フラグ: 所持品-装備品 / Display inven/equip */
+#define PW_EQUIP 0x00000002L /*!<サブウィンドウ描画フラグ: 装備品-所持品 / Display equip/inven */
+#define PW_SPELL 0x00000004L /*!<サブウィンドウ描画フラグ: 魔法一覧 / Display spell list */
+#define PW_PLAYER 0x00000008L /*!<サブウィンドウ描画フラグ: プレイヤーのステータス / Display character */
+#define PW_MONSTER_LIST 0x00000010L /*!<サブウィンドウ描画フラグ: 視界内モンスターの一覧 / Display monster list */
+#define PW_MESSAGE 0x00000040L /*!<サブウィンドウ描画フラグ: メッセージログ / Display messages */
+#define PW_OVERHEAD 0x00000080L /*!<サブウィンドウ描画フラグ: 周辺の光景 / Display overhead view */
+#define PW_MONSTER 0x00000100L /*!<サブウィンドウ描画フラグ: モンスターの思い出 / Display monster recall */
+#define PW_OBJECT 0x00000200L /*!<サブウィンドウ描画フラグ: アイテムの知識 / Display object recall */
+#define PW_DUNGEON 0x00000400L /*!<サブウィンドウ描画フラグ: ダンジョンの地形 / Display dungeon view */
+#define PW_SNAPSHOT 0x00000800L /*!<サブウィンドウ描画フラグ: 記念写真 / Display snap-shot */
+#define PW_BORG_1 0x00004000L /*!<サブウィンドウ描画フラグ: ボーグメッセージ / Display borg messages */
+#define PW_BORG_2 0x00008000L /*!<サブウィンドウ描画フラグ: ボーグステータス / Display borg status */
s16b stat_use[A_MAX]; /* Current modified stats */
s16b stat_top[A_MAX]; /* Maximal modified stats */
POSITION run_px;
DIRECTION fishing_dir;
+ MONSTER_IDX pet_t_m_idx;
+ MONSTER_IDX riding_t_m_idx;
/*** Extracted fields ***/
byte pspeed; /* Current speed */
- ENERGY energy_use; /* Energy use this current_world_ptr->game_turn */
+ ENERGY energy_use; /* Energy use this turn */
POSITION y; /* Player location in dungeon */
POSITION x; /* Player location in dungeon */
char base_name[32]; /*!< Stripped version of "player_name" */
};
+extern player_type *p_ptr;
-extern concptr your_alignment(void);
+extern concptr your_alignment(player_type *creature_ptr);
extern int weapon_exp_level(int weapon_exp);
extern int riding_exp_level(int riding_exp);
extern int spell_exp_level(int spell_exp);
-extern s16b calc_num_fire(object_type *o_ptr);
-extern void calc_bonuses(void);
-extern WEIGHT weight_limit(void);
-extern bool has_melee_weapon(int i);
-extern bool is_heavy_shoot(object_type *o_ptr);
+extern s16b calc_num_fire(player_type *creature_ptr, object_type *o_ptr);
+extern void calc_bonuses(player_type *creature_ptr);
+extern WEIGHT weight_limit(player_type *creature_ptr);
+extern bool has_melee_weapon(player_type *creature_ptr, int i);
+extern bool is_heavy_shoot(player_type *creature_ptr, object_type *o_ptr);
-extern bool heavy_armor(void);
+extern bool heavy_armor(player_type *creature_ptr);
extern void update_creature(player_type *creature_ptr);
-extern BIT_FLAGS16 empty_hands(bool riding_control);
-extern bool player_has_no_spellbooks(void);
+extern BIT_FLAGS16 empty_hands(player_type *creature_ptr, bool riding_control);
+extern bool player_has_no_spellbooks(player_type *creature_ptr);
extern void take_turn(player_type *creature_ptr, PERCENTAGE need_cost);
extern void free_turn(player_type *creature_ptr);
-extern bool player_place(POSITION y, POSITION x);
-extern void sanity_blast(monster_type *m_ptr, bool necro);
+extern bool player_place(player_type *creature_ptr, POSITION y, POSITION x);
+extern void sanity_blast(player_type *creature_ptr, monster_type *m_ptr, bool necro);
-extern void check_experience(void);
-extern void wreck_the_pattern(void);
+extern void check_experience(player_type *creature_ptr);
+extern void wreck_the_pattern(player_type *creature_ptr);
extern void cnv_stat(int val, char *out_val);
extern s16b modify_stat_value(int value, int amount);
-extern long calc_score(void);
+extern long calc_score(player_type *creature_ptr);
extern const s32b player_exp[PY_MAX_LEVEL];
extern const s32b player_exp_a[PY_MAX_LEVEL];
/* Temporary flags macro */
-#define IS_FAST() (p_ptr->fast || music_singing(MUSIC_SPEED) || music_singing(MUSIC_SHERO))
-#define IS_INVULN() (p_ptr->invuln || music_singing(MUSIC_INVULN))
-#define IS_HERO() (p_ptr->hero || music_singing(MUSIC_HERO) || music_singing(MUSIC_SHERO))
-#define IS_BLESSED() (p_ptr->blessed || music_singing(MUSIC_BLESS) || hex_spelling(HEX_BLESS))
-#define IS_OPPOSE_ACID() (p_ptr->oppose_acid || music_singing(MUSIC_RESIST) || (p_ptr->special_defense & KATA_MUSOU))
-#define IS_OPPOSE_ELEC() (p_ptr->oppose_elec || music_singing(MUSIC_RESIST) || (p_ptr->special_defense & KATA_MUSOU))
-#define IS_OPPOSE_FIRE() (p_ptr->oppose_fire || music_singing(MUSIC_RESIST) || (p_ptr->special_defense & KATA_MUSOU))
-#define IS_OPPOSE_COLD() (p_ptr->oppose_cold || music_singing(MUSIC_RESIST) || (p_ptr->special_defense & KATA_MUSOU))
-#define IS_OPPOSE_POIS() (p_ptr->oppose_pois || music_singing(MUSIC_RESIST) || (p_ptr->special_defense & KATA_MUSOU))
-#define IS_TIM_ESP() (p_ptr->tim_esp || music_singing(MUSIC_MIND) || (p_ptr->concent >= CONCENT_TELE_THRESHOLD))
-#define IS_TIM_STEALTH() (p_ptr->tim_stealth || music_singing(MUSIC_STEALTH))
+#define IS_FAST(C) (C->fast || music_singing(C, MUSIC_SPEED) || music_singing(C, MUSIC_SHERO))
+#define IS_INVULN(C) (C->invuln || music_singing(C, MUSIC_INVULN))
+#define IS_HERO(C) (C->hero || music_singing(C, MUSIC_HERO) || music_singing(C, MUSIC_SHERO))
+#define IS_TIM_ESP() (p_ptr->tim_esp || music_singing(p_ptr, MUSIC_MIND) || (p_ptr->concent >= CONCENT_TELE_THRESHOLD))
+#define IS_TIM_STEALTH() (p_ptr->tim_stealth || music_singing(p_ptr, MUSIC_STEALTH))
#define P_PTR_KI (p_ptr->magic_num1[0])
+extern bool is_blessed(player_type *player_ptr);
+extern bool is_oppose_acid(player_type *player_ptr);
+extern bool is_oppose_elec(player_type *player_ptr);
+extern bool is_oppose_fire(player_type *player_ptr);
+extern bool is_oppose_cold(player_type *player_ptr);
+extern bool is_oppose_pois(player_type *player_ptr);
+
/*
* Player "food" crucial values
*/