#ifndef __CLIENT_DEFINES__
#define __CLIENT_DEFINES__

// Messages types in messbox
#define FOMB_GAME              int(0) // Default
#define FOMB_TALK              int(1)
#define FOMB_COMBAT_RESULT     int(2)
#define FOMB_VIEW              int(3)

// Generic descriptions types
#define DESC_INVENTORY_MAIN    (0)
#define DESC_INVENTORY_SPECIAL (1)
#define DESC_INVENTORY_STATS   (2)
#define DESC_INVENTORY_RESIST  (3)

// Item look types
#define ITEM_LOOK_DEFAULT      (0)
#define ITEM_LOOK_ONLY_NAME    (1)
#define ITEM_LOOK_MAP          (2)
#define ITEM_LOOK_BARTER       (3)
#define ITEM_LOOK_INVENTORY    (4)
#define ITEM_LOOK_WM_CAR       (5)

// Critter look types
#define CRITTER_ONLY_NAME      (0)
#define CRITTER_LOOK_SHORT     (1)
#define CRITTER_LOOK_FULL      (2)

// Paths
	// Client and mapper paths
#define PT_ROOT                (0)
#define PT_DATA                (1)
#define PT_ART                 (2)
#define PT_ART_CRITTERS        (3)
#define PT_ART_INTRFACE        (4)
#define PT_ART_INVEN           (5)
#define PT_ART_ITEMS           (6)
#define PT_ART_MISC            (7)
#define PT_ART_SCENERY         (8)
#define PT_ART_SKILLDEX        (9)
#define PT_ART_SPLASH          (10)
#define PT_ART_TILES           (11)
#define PT_ART_WALLS           (12)
#define PT_TEXTURES            (13)
#define PT_EFFECTS             (14)
#define PT_MAPS                (15)
#define PT_SND_MUSIC           (16)
#define PT_SND_SFX             (17)
#define PT_SCRIPTS             (18)
#define PT_VIDEO               (19)
#define PT_TEXTS               (20)
#define PT_SAVE                (21)
#define PT_FONTS               (22)
#define PT_CACHE               (23)
	// Server paths
#define PT_SERVER_ROOT         (30)
#define PT_SERVER_DATA         (31)
#define PT_SERVER_TEXTS        (32)
#define PT_SERVER_DIALOGS      (33)
#define PT_SERVER_MAPS         (34)
#define PT_SERVER_PRO_ITEMS    (35)
#define PT_SERVER_PRO_CRITTERS (36)
#define PT_SERVER_SCRIPTS      (37)
#define PT_SERVER_SAVE         (38)
#define PT_SERVER_CLIENTS      (39)
#define PT_SERVER_BANS         (40)

// Fonts
	// Standart fonts, loaded automatically
#define FONT_OLD_FO            (0)
#define FONT_NUM               (1)
#define FONT_BIG_NUM           (2)
#define FONT_SAND_NUM          (3)
#define FONT_SPECIAL           (4)
#define FONT_FALLOUT           (5)
#define FONT_THIN              (6)
#define FONT_FAT               (7)
#define FONT_BIG               (8)
	// User fonts, created in Bitmap Font Generator
#define FONT_COURIER_NEW_SMALL (10)

// Font flags
#define FT_NOBREAK             (0x0001)
#define FT_NOBREAK_LINE        (0x0002)
#define FT_CENTERX             (0x0004)
#define FT_CENTERY             (0x0008)
#define FT_CENTERXY            (0x000C)
#define FT_CENTERR             (0x0010)
#define FT_BOTTOM              (0x0020)
#define FT_UPPER               (0x0040)
#define FT_COLORIZE            (0x0080)
#define FT_ALIGN               (0x0100)
#define FT_BORDERED            (0x0200)
#define FT_SKIPLINES(l)        (0x0400|((l)<<16))
#define FT_SKIPLINES_END(l)    (0x0800|((l)<<16))

// Client screen types
#define CLIENT_SCREEN_NONE               (0) // Used in primary, secondary and additional screen types
	// Primary screens, hardcoded
#define CLIENT_MAIN_SCREEN_LOGIN         (1)
#define CLIENT_MAIN_SCREEN_REGISTRATION  (2)
#define CLIENT_MAIN_SCREEN_OPTIONS       (3)
#define CLIENT_MAIN_SCREEN_CREDITS       (4)
#define CLIENT_MAIN_SCREEN_GAME          (5)
#define CLIENT_MAIN_SCREEN_GLOBAL_MAP    (6)
#define CLIENT_MAIN_SCREEN_WAIT          (7)
	// Secondary screens, hardcoded
#define CLIENT_SCREEN_INVENTORY          (10)
#define CLIENT_SCREEN_PICKUP             (11)
#define CLIENT_SCREEN_MINIMAP            (12)
#define CLIENT_SCREEN_CHARACTER          (13)
#define CLIENT_SCREEN_DIALOG             (14)
#define CLIENT_SCREEN_BARTER             (15)
#define CLIENT_SCREEN_PIP_BOY            (16)
#define CLIENT_SCREEN_FIX_BOY            (17)
#define CLIENT_SCREEN_MENU               (18)
#define CLIENT_SCREEN_AIM                (19)
#define CLIENT_SCREEN_SPLIT              (20)
#define CLIENT_SCREEN_TIMER              (21)
#define CLIENT_SCREEN_DIALOGBOX          (22)
#define CLIENT_SCREEN_ELEVATOR           (23)
#define CLIENT_SCREEN_SAY                (24)
#define CLIENT_SCREEN_CHA_NAME           (25)
#define CLIENT_SCREEN_CHA_AGE            (26)
#define CLIENT_SCREEN_CHA_SEX            (27)
#define CLIENT_SCREEN_GM_TOWN            (28)
#define CLIENT_SCREEN_INPUT_BOX          (29)
#define CLIENT_SCREEN_SKILLBOX           (30)
#define CLIENT_SCREEN_USE                (31)
#define CLIENT_SCREEN_PERK               (32)
#define CLIENT_SCREEN_TOWN_VIEW          (33)
#define CLIENT_SCREEN_SAVE_LOAD          (34)
	// User screens
#define CLIENT_SCREEN_TEST               (40) // client_screen_test.fos
#define CLIENT_SCREEN_RADIO              (41) // radio.fos

// Cursors
#define CURSOR_DEFAULT         (0)
#define CURSOR_MOVE            (1)
#define CURSOR_USE_OBJECT      (2)
#define CURSOR_USE_WEAPON      (3)
#define CURSOR_USE_SKILL       (4)
#define CURSOR_WAIT            (5)
#define CURSOR_HAND            (6)

// Mouse click states
#define MOUSE_CLICK_LEFT       (0)
#define MOUSE_CLICK_RIGHT      (1)
#define MOUSE_CLICK_MIDDLE     (2)
#define MOUSE_CLICK_WHEEL_UP   (3) // Passed only in mouse_down
#define MOUSE_CLICK_WHEEL_DOWN (4) // Passed only in mouse_down
#define MOUSE_CLICK_EXT0       (5)
#define MOUSE_CLICK_EXT1       (6)
#define MOUSE_CLICK_EXT2       (7)
#define MOUSE_CLICK_EXT3       (8)
#define MOUSE_CLICK_EXT4       (9)

// Items collections
#define ITEMS_INVENTORY               (0)
#define ITEMS_USE                     (1)
#define ITEMS_BARTER                  (2)
#define ITEMS_BARTER_OFFER            (3)
#define ITEMS_BARTER_OPPONENT         (4)
#define ITEMS_BARTER_OPPONENT_OFFER   (5)
#define ITEMS_PICKUP                  (6)
#define ITEMS_PICKUP_FROM             (7)

// Scroll elements
#define SCROLL_MESSBOX                (0)
#define SCROLL_INVENTORY              (1)
#define SCROLL_INVENTORY_ITEM_INFO    (2)
#define SCROLL_PICKUP                 (3)
#define SCROLL_PICKUP_FROM            (4)
#define SCROLL_USE                    (5)
#define SCROLL_BARTER                 (6)
#define SCROLL_BARTER_OFFER           (7)
#define SCROLL_BARTER_OPPONENT        (8)
#define SCROLL_BARTER_OPPONENT_OFFER  (9)
#define SCROLL_GLOBAL_MAP_CITIES_X    (10)
#define SCROLL_GLOBAL_MAP_CITIES_Y    (11)
#define SCROLL_SPLIT_VALUE            (12)
#define SCROLL_TIMER_VALUE            (13)
#define SCROLL_PERK                   (14)
#define SCROLL_DIALOG_TEXT            (15)
#define SCROLL_MAP_ZOOM_VALUE         (16)
#define SCROLL_CHARACTER_PERKS        (17)
#define SCROLL_CHARACTER_KARMA        (18)
#define SCROLL_CHARACTER_KILLS        (19)
#define SCROLL_PIPBOY_STATUS          (20)
#define SCROLL_PIPBOY_STATUS_QUESTS   (21)
#define SCROLL_PIPBOY_STATUS_SCORES   (22)
#define SCROLL_PIPBOY_AUTOMAPS        (23)
#define SCROLL_PIPBOY_ARCHIVES        (24)
#define SCROLL_PIPBOY_ARCHIVES_INFO   (25)

// DirectInput keyboard scan codes
#define DIK_ESCAPE          0x01
#define DIK_1               0x02
#define DIK_2               0x03
#define DIK_3               0x04
#define DIK_4               0x05
#define DIK_5               0x06
#define DIK_6               0x07
#define DIK_7               0x08
#define DIK_8               0x09
#define DIK_9               0x0A
#define DIK_0               0x0B
#define DIK_MINUS           0x0C    /* - on main keyboard */
#define DIK_EQUALS          0x0D
#define DIK_BACK            0x0E    /* backspace */
#define DIK_TAB             0x0F
#define DIK_Q               0x10
#define DIK_W               0x11
#define DIK_E               0x12
#define DIK_R               0x13
#define DIK_T               0x14
#define DIK_Y               0x15
#define DIK_U               0x16
#define DIK_I               0x17
#define DIK_O               0x18
#define DIK_P               0x19
#define DIK_LBRACKET        0x1A
#define DIK_RBRACKET        0x1B
#define DIK_RETURN          0x1C    /* Enter on main keyboard */
#define DIK_LCONTROL        0x1D
#define DIK_A               0x1E
#define DIK_S               0x1F
#define DIK_D               0x20
#define DIK_F               0x21
#define DIK_G               0x22
#define DIK_H               0x23
#define DIK_J               0x24
#define DIK_K               0x25
#define DIK_L               0x26
#define DIK_SEMICOLON       0x27
#define DIK_APOSTROPHE      0x28
#define DIK_GRAVE           0x29    /* accent grave */
#define DIK_LSHIFT          0x2A
#define DIK_BACKSLASH       0x2B
#define DIK_Z               0x2C
#define DIK_X               0x2D
#define DIK_C               0x2E
#define DIK_V               0x2F
#define DIK_B               0x30
#define DIK_N               0x31
#define DIK_M               0x32
#define DIK_COMMA           0x33
#define DIK_PERIOD          0x34    /* . on main keyboard */
#define DIK_SLASH           0x35    /* / on main keyboard */
#define DIK_RSHIFT          0x36
#define DIK_MULTIPLY        0x37    /* * on numeric keypad */
#define DIK_LMENU           0x38    /* left Alt */
#define DIK_SPACE           0x39
#define DIK_CAPITAL         0x3A
#define DIK_F1              0x3B
#define DIK_F2              0x3C
#define DIK_F3              0x3D
#define DIK_F4              0x3E
#define DIK_F5              0x3F
#define DIK_F6              0x40
#define DIK_F7              0x41
#define DIK_F8              0x42
#define DIK_F9              0x43
#define DIK_F10             0x44
#define DIK_NUMLOCK         0x45
#define DIK_SCROLL          0x46    /* Scroll Lock */
#define DIK_NUMPAD7         0x47
#define DIK_NUMPAD8         0x48
#define DIK_NUMPAD9         0x49
#define DIK_SUBTRACT        0x4A    /* - on numeric keypad */
#define DIK_NUMPAD4         0x4B
#define DIK_NUMPAD5         0x4C
#define DIK_NUMPAD6         0x4D
#define DIK_ADD             0x4E    /* + on numeric keypad */
#define DIK_NUMPAD1         0x4F
#define DIK_NUMPAD2         0x50
#define DIK_NUMPAD3         0x51
#define DIK_NUMPAD0         0x52
#define DIK_DECIMAL         0x53    /* . on numeric keypad */
#define DIK_OEM_102         0x56    /* <> or \| on RT 102-key keyboard (Non-U.S.) */
#define DIK_F11             0x57
#define DIK_F12             0x58
#define DIK_F13             0x64    /*                     (NEC PC98) */
#define DIK_F14             0x65    /*                     (NEC PC98) */
#define DIK_F15             0x66    /*                     (NEC PC98) */
#define DIK_KANA            0x70    /* (Japanese keyboard)            */
#define DIK_ABNT_C1         0x73    /* /? on Brazilian keyboard */
#define DIK_CONVERT         0x79    /* (Japanese keyboard)            */
#define DIK_NOCONVERT       0x7B    /* (Japanese keyboard)            */
#define DIK_YEN             0x7D    /* (Japanese keyboard)            */
#define DIK_ABNT_C2         0x7E    /* Numpad . on Brazilian keyboard */
#define DIK_NUMPADEQUALS    0x8D    /* = on numeric keypad (NEC PC98) */
#define DIK_PREVTRACK       0x90    /* Previous Track (DIK_CIRCUMFLEX on Japanese keyboard) */
#define DIK_AT              0x91    /*                     (NEC PC98) */
#define DIK_COLON           0x92    /*                     (NEC PC98) */
#define DIK_UNDERLINE       0x93    /*                     (NEC PC98) */
#define DIK_KANJI           0x94    /* (Japanese keyboard)            */
#define DIK_STOP            0x95    /*                     (NEC PC98) */
#define DIK_AX              0x96    /*                     (Japan AX) */
#define DIK_UNLABELED       0x97    /*                        (J3100) */
#define DIK_NEXTTRACK       0x99    /* Next Track */
#define DIK_NUMPADENTER     0x9C    /* Enter on numeric keypad */
#define DIK_RCONTROL        0x9D
#define DIK_MUTE            0xA0    /* Mute */
#define DIK_CALCULATOR      0xA1    /* Calculator */
#define DIK_PLAYPAUSE       0xA2    /* Play / Pause */
#define DIK_MEDIASTOP       0xA4    /* Media Stop */
#define DIK_VOLUMEDOWN      0xAE    /* Volume - */
#define DIK_VOLUMEUP        0xB0    /* Volume + */
#define DIK_WEBHOME         0xB2    /* Web home */
#define DIK_NUMPADCOMMA     0xB3    /* , on numeric keypad (NEC PC98) */
#define DIK_DIVIDE          0xB5    /* / on numeric keypad */
#define DIK_SYSRQ           0xB7
#define DIK_RMENU           0xB8    /* right Alt */
#define DIK_PAUSE           0xC5    /* Pause */
#define DIK_HOME            0xC7    /* Home on arrow keypad */
#define DIK_UP              0xC8    /* UpArrow on arrow keypad */
#define DIK_PRIOR           0xC9    /* PgUp on arrow keypad */
#define DIK_LEFT            0xCB    /* LeftArrow on arrow keypad */
#define DIK_RIGHT           0xCD    /* RightArrow on arrow keypad */
#define DIK_END             0xCF    /* End on arrow keypad */
#define DIK_DOWN            0xD0    /* DownArrow on arrow keypad */
#define DIK_NEXT            0xD1    /* PgDn on arrow keypad */
#define DIK_INSERT          0xD2    /* Insert on arrow keypad */
#define DIK_DELETE          0xD3    /* Delete on arrow keypad */
#define DIK_LWIN            0xDB    /* Left Windows key */
#define DIK_RWIN            0xDC    /* Right Windows key */
#define DIK_APPS            0xDD    /* AppMenu key */
#define DIK_POWER           0xDE    /* System Power */
#define DIK_SLEEP           0xDF    /* System Sleep */
#define DIK_WAKE            0xE3    /* System Wake */
#define DIK_WEBSEARCH       0xE5    /* Web Search */
#define DIK_WEBFAVORITES    0xE6    /* Web Favorites */
#define DIK_WEBREFRESH      0xE7    /* Web Refresh */
#define DIK_WEBSTOP         0xE8    /* Web Stop */
#define DIK_WEBFORWARD      0xE9    /* Web Forward */
#define DIK_WEBBACK         0xEA    /* Web Back */
#define DIK_MYCOMPUTER      0xEB    /* My Computer */
#define DIK_MAIL            0xEC    /* Mail */
#define DIK_MEDIASELECT     0xED    /* Media Select */

// Draw primitive types
#define DRAW_PRIMITIVE_POINTLIST     (0)
#define DRAW_PRIMITIVE_LINELIST      (1)
#define DRAW_PRIMITIVE_LINESTRIP     (2)
#define DRAW_PRIMITIVE_TRIANGLELIST  (3)
#define DRAW_PRIMITIVE_TRIANGLESTRIP (4)
#define DRAW_PRIMITIVE_TRIANGLEFAN   (5)

// Combat messages
#define HF_KNOCKOUT                     (0x00000001)
#define HF_KNOCKDOWN                    (0x00000002)
#define HF_CRIPPLED_LEFT_LEG            (0x00000004)
#define HF_CRIPPLED_RIGHT_LEG           (0x00000008)
#define HF_CRIPPLED_LEFT_ARM            (0x00000010)
#define HF_CRIPPLED_RIGHT_ARM           (0x00000020)
#define HF_BLINDED                      (0x00000040)
#define HF_DEATH                        (0x00000080)
#define HF_ON_FIRE                      (0x00000400)
#define HF_BYPASS_ARMOR                 (0x00000800)
#define HF_DROPPED_WEAPON               (0x00004000)
#define HF_LOST_NEXT_TURN               (0x00008000)
#define HF_RANDOM                       (0x00200000)
#define MF_KNOCKED_DOWN                 (0x00000002)
#define MF_ON_FIRE                      (0x00000400)
#define MF_WEAPON_EXPLODED              (0x00001000)
#define MF_WEAPON_DESTROYED             (0x00002000)
#define MF_WEAPON_DROPPED               (0x00004000)
#define MF_LOST_NEXT_TURN               (0x00008000)
#define MF_HIT_SELF                     (0x00010000)
#define MF_LOST_REST_OF_AMMO            (0x00020000)
#define MF_FIRED_DUD_SHOT               (0x00040000)
#define MF_HURT_SELF                    (0x00080000)
#define MF_HIT_RANDOMLY                 (0x00100000)
#define MF_CRIPPLED_RANDOM_LIMB         (0x00200000)
#define MF_WAS_KILLED                   (0x10000000)
#define CMSG_MISS                       (1)   // length 2: 1   WHO_ID
#define CMSG_CRIT_MISS                  (2)   // length 3: 2   WHO_ID  EFF
#define CMSG_CRIT_MISS_DAMAGE           (3)   // length 4: 3   WHO_ID  EFF     DAMAGE
#define CMSG_HIT                        (4)   // length 3: 4   WHO_ID  DAMAGE
#define CMSG_AIMED_HIT                  (5)   // length 4: 5   WHO_ID  LOC     DAMAGE
#define CMSG_CRIT_HIT                   (6)   // length 5: 6   WHO_ID  DAMAGE  EFF     MESSAGE
#define CMSG_CRIT_AIMED_HIT             (7)   // length 6: 7   WHO_ID  LOC     DAMAGE  EFF      MESSAGE
#define CMSG_HIT_DEAD                   (8)   // length 3: 8   WHO_ID  DAMAGE
#define CMSG_AIMED_HIT_DEAD             (9)   // length 4: 9   WHO_ID  LOC     DAMAGE
#define CMSG_CRIT_HIT_DEAD              (10)  // length 4: 10  WHO_ID  DAMAGE  MESSAGE
#define CMSG_CRIT_AIMED_HIT_DEAD        (11)  // length 5: 11  WHO_ID  LOC     DAMAGE  MESSAGE
#define CMSG_OOPS                       (12)  // length 3: 12  WH1_ID  WH2_ID
#define CMSG_HIT_RANDOMLY               (13)  // length 2: 13  WHO_ID
// HIT = 4, CRIT = 2, AIMED = 1
// DEAD = +4
// any type of hit: >=4, <=11

// Effect types and subtypes
#define EFFECT_2D              (0)  // 2D_Default.fx
#define EFFECT_2D_GENERIC       (1)
#define EFFECT_2D_TILE          (2)
#define EFFECT_2D_ROOF          (4)
#define EFFECT_3D              (1)  // 3D_Default.fx
#define EFFECT_INTERFACE       (2)  // Interface_Default.fx
#define EFFECT_FONT            (3)  // Font_Default.fx
	// Subtype for fonts used font type
#define EFFECT_PRIMITIVE       (4)  // Primitive_Default.fx

// Chosen actions
// 6 uint parameters, separated by commas
#define CHOSEN_NONE               (0)  //
#define CHOSEN_MOVE               (1)  // HexX, HexY, Is run, Cut path, Wait double click, Double click tick
#define CHOSEN_MOVE_TO_CRIT       (2)  // Critter id, None, Is run, Cut path, Wait double click, Double click tick
#define CHOSEN_DIR                (3)  // 0 (CW) or 1 (CCW)
#define CHOSEN_SHOW_ITEM          (4)  // Item id
#define CHOSEN_HIDE_ITEM          (5)  // Item id
#define CHOSEN_USE_ITEM           (6)  // Item id, Item pid, Target type (see below), Target id, Item mode (see below), Some param (timer)
#define CHOSEN_MOVE_ITEM          (7)  // Item id, Item count, To slot
#define CHOSEN_MOVE_ITEM_CONT     (8)  // From container, Item id, Count
#define CHOSEN_TAKE_ALL           (9)  //
#define CHOSEN_USE_SKL_ON_CRITTER (10) // Skill, Critter id
#define CHOSEN_USE_SKL_ON_ITEM    (11) // Is inventory, Skill index (SK_*), Item id
#define CHOSEN_USE_SKL_ON_SCEN    (12) // Skill, Pid, HexX, HexY
#define CHOSEN_TALK_NPC           (13) // Critter id
#define CHOSEN_PICK_ITEM          (14) // Pid, HexX, HexY
#define CHOSEN_PICK_CRIT          (15) // Critter id, (loot - 0, push - 1)
#define CHOSEN_WRITE_HOLO         (16) // Holodisk id

// Item modes
#define ITEM_MODE_PRIMARY         (0)
#define ITEM_MODE_SECONDARY       (1)
#define ITEM_MODE_THIRD           (2)
#define ITEM_MODE_RELOAD          (3)
#define ITEM_MODE_USE             (4)

// Target types
#define TARGET_SELF               (0)
#define TARGET_SELF_ITEM          (1)
#define TARGET_CRITTER            (2)
#define TARGET_ITEM               (3)
#define TARGET_SCENERY            (4)

#endif // __CLIENT_DEFINES__














