#pragma once

#include "resource.h"

#define GAME_TITLE "D'angband"
#define WINDOW_WIDTH 800
#define WINDOW_HEIGHT 480

#define CREATURE_MAX_SOUL 999999999L //!< 嵟戝僜僂儖抣
#define CREATURE_MAX_GOLD 999999999L //!< 嵟戝僑乕儖僪抣
#define CREATURE_MAX_MORTAL_LEVEL 30 //!< 掕柦嵟戝儗儀儖
#define CREATURE_MAX_DIVINE_LEVEL 30 //!< 恄奿嵟戝抣
#define CREATURE_MAX_LEVEL CREATURE_MAX_MORTAL_LEVEL+CREATURE_MAX_DIVINE_LEVEL //!< 恄奿崬傒嵟戝儗儀儖

#define SPECIAL_TAG_UNKNOWN "XXX_UNKNOWN"

/*!
 * 僎乕儉僐儅儞僪掕媊
 */
typedef enum GAME_COMMAND
{
	GAME_COMMAND_VIEW_PLAYER_STATUS,
	GAME_COMMAND_REDRAW,
	GAME_COMMAND_EXIT
} GAME_COMMAND;

/*!
 * 僾儗僀廔椆僐乕僪
 */
typedef enum PLAY_EXIT_CODE
{
	PLAY_EXIT_NONE,  //!<僾儗僀廔椆僐乕僪:側偟(僾儗僀宲懕)
	PLAY_EXIT_DEAD,  //!<僾儗僀廔椆僐乕僪:僎乕儉僆乕僶乕
	PLAY_EXIT_QUIT,  //!<僾儗僀廔椆僐乕僪:捠忢廔椆
	PLAY_EXIT_ERROR, //!<僾儗僀廔椆僐乕僪:堎忢廔椆
} PLAY_EXIT_CODE;

/*!
 * 憰旛晹埵
 */
typedef enum EQUIP_SLOT
{
	SLOT_ID_INVENTORY,  //!<憰旛晹埵: 強帩
	SLOT_ID_HAND,       //!<憰旛晹埵: 庤
	SLOT_ID_AMMO,       //!<憰旛晹埵: 抏栻
	SLOT_ID_RING,       //!<憰旛晹埵: 巜椫
	SLOT_ID_AMULET,     //!<憰旛晹埵: 傾儈儏儗僢僩
	SLOT_ID_BODY,       //!<憰旛晹埵: 懱
	SLOT_ID_OUTER,      //!<憰旛晹埵: 懱偺忋
	SLOT_ID_HEAD,       //!<憰旛晹埵: 摢晹
	SLOT_ID_ARMS,       //!<憰旛晹埵: 榬晹
	SLOT_ID_FEET,       //!<憰旛晹埵: 媟晹
	SLOT_ID_INSTRUMENT, //!<憰旛晹埵: 妝婍
	SLOT_ID_LITE,       //!<憰旛晹埵: 岝尮
	SLOT_ID_TAIL,       //!<憰旛晹埵: 旜晹
	SLOT_ID_INTAKE,     //!<憰旛晹埵: 庢崬
	SLOT_ID_ORGAN,      //!<憰旛晹埵: 婍姱
	MAX_SLOT_IDS        //!<憰旛晹埵悢
} EQUIP_SLOT;

/*!
 * 曽妏
 */
typedef enum DIRECTION
{
	DIRECTION_NORTH_EAST,
	DIRECTION_EAST,
	DIRECTION_SOUTH_EAST,
	DIRECTION_SOUTH,
	DIRECTION_SOUTH_WEST,
	DIRECTION_WEST,
	DIRECTION_NORTH_WEST,
	DIRECTION_NORTH,
	DIRECTION_STAY,
	MAX_DIRECTION        //!<憰旛晹埵悢
} DIRECTION;

class Creature;
class CreatureTemplate;
class Dungeon;
class Effect;
class GameElement;
class GameWorld;
class Feature;
class Floor;
class Square;
class Door;
class Trap;

typedef int BASE_STATUS; //!< 婎慴擻椡抣偺曄悢宆
typedef int LEVEL;  //!< LEVEL偺曄悢宆
typedef int HP;     //!< HP偺曄悢宆
typedef int MP;     //!< MP偺曄悢宆
typedef int FEED;     //!< 帬梴搙偺曄悢宆
typedef int64_t SOUL;   //!< 僜僂儖偺曄悢宆
typedef int DISCIPLINE_POINT; //!< 廋梴抣偺曄悢宆
typedef int AC;     //!< 婃寬惈
typedef int EV;     //!< 夞旔椡
typedef int VO;     //!< 堄巙椡
typedef int ID;     //!< 僎乕儉梫慺ID
typedef string TAG; //!< 僎乕儉梫慺暥帤楍ID
typedef int HEIGHT; //!< 挿偝
typedef int WEIGHT; //!< 廳検
typedef int DEPTH;  //!< 奒憌怺搙
typedef int NUMBER; //!< 屄悢
typedef int PPM;    //!< 昐枩暘棪
typedef int MAP_LENGTH;   //!<儅僢僾嫍棧
typedef int POWER;        //!<岠椡
typedef int BODY_SIZE;    //!<懱奿
