diff --git a/src/actions.cc b/src/actions.cc index 55d2e7b..f32e467 100644 --- a/src/actions.cc +++ b/src/actions.cc @@ -1,6 +1,7 @@ #include "actions.h" #include "animation.h" +#include "art.h" #include "color.h" #include "combat.h" #include "combat_ai.h" diff --git a/src/automap.cc b/src/automap.cc index a2ce8a7..98502c7 100644 --- a/src/automap.cc +++ b/src/automap.cc @@ -1,5 +1,6 @@ #include "automap.h" +#include "art.h" #include "color.h" #include "config.h" #include "core.h" diff --git a/src/character_selector.cc b/src/character_selector.cc index a8f8802..681abe7 100644 --- a/src/character_selector.cc +++ b/src/character_selector.cc @@ -1,5 +1,6 @@ #include "character_selector.h" +#include "art.h" #include "character_editor.h" #include "color.h" #include "core.h" diff --git a/src/combat_ai.cc b/src/combat_ai.cc index 20b5854..afa5812 100644 --- a/src/combat_ai.cc +++ b/src/combat_ai.cc @@ -2,6 +2,7 @@ #include "actions.h" #include "animation.h" +#include "art.h" #include "combat.h" #include "config.h" #include "core.h" diff --git a/src/critter.cc b/src/critter.cc index 776c309..7750bdb 100644 --- a/src/critter.cc +++ b/src/critter.cc @@ -1,6 +1,7 @@ #include "critter.h" #include "animation.h" +#include "art.h" #include "character_editor.h" #include "combat.h" #include "debug.h" diff --git a/src/game_dialog.cc b/src/game_dialog.cc index 8e51fb5..097eaa9 100644 --- a/src/game_dialog.cc +++ b/src/game_dialog.cc @@ -2,6 +2,7 @@ #include "actions.h" #include "animation.h" +#include "art.h" #include "color.h" #include "combat.h" #include "combat_ai.h" diff --git a/src/game_mouse.cc b/src/game_mouse.cc index e999f1f..bc72eb9 100644 --- a/src/game_mouse.cc +++ b/src/game_mouse.cc @@ -2,6 +2,7 @@ #include "actions.h" #include "animation.h" +#include "art.h" #include "color.h" #include "combat.h" #include "core.h" diff --git a/src/game_sound.cc b/src/game_sound.cc index 1e6b0b9..2626837 100644 --- a/src/game_sound.cc +++ b/src/game_sound.cc @@ -1,6 +1,7 @@ #include "game_sound.h" #include "animation.h" +#include "art.h" #include "audio.h" #include "combat.h" #include "core.h" diff --git a/src/inventory.cc b/src/inventory.cc index a264159..fbbaa95 100644 --- a/src/inventory.cc +++ b/src/inventory.cc @@ -21,6 +21,7 @@ #include "item.h" #include "light.h" #include "map.h" +#include "message.h" #include "object.h" #include "party_member.h" #include "perk.h" @@ -122,8 +123,109 @@ #define INVENTORY_LOOT_LEFT_BODY_VIEW_X 44 #define INVENTORY_LOOT_LEFT_BODY_VIEW_Y 35 +#define INVENTORY_NORMAL_WINDOW_PC_ROTATION_DELAY (1000U / ROTATION_COUNT) +#define OFF_59E7BC_COUNT 12 + +typedef enum InventoryArrowFrm { + INVENTORY_ARROW_FRM_LEFT_ARROW_UP, + INVENTORY_ARROW_FRM_LEFT_ARROW_DOWN, + INVENTORY_ARROW_FRM_RIGHT_ARROW_UP, + INVENTORY_ARROW_FRM_RIGHT_ARROW_DOWN, + INVENTORY_ARROW_FRM_COUNT, +} InventoryArrowFrm; + +typedef enum InventoryWindowCursor { + INVENTORY_WINDOW_CURSOR_HAND, + INVENTORY_WINDOW_CURSOR_ARROW, + INVENTORY_WINDOW_CURSOR_PICK, + INVENTORY_WINDOW_CURSOR_MENU, + INVENTORY_WINDOW_CURSOR_BLANK, + INVENTORY_WINDOW_CURSOR_COUNT, +} InventoryWindowCursor; + +typedef enum InventoryWindowType { + // Normal inventory window with quick character sheet. + INVENTORY_WINDOW_TYPE_NORMAL, + + // Narrow inventory window with just an item scroller that's shown when + // a "Use item on" is selected from context menu. + INVENTORY_WINDOW_TYPE_USE_ITEM_ON, + + // Looting/strealing interface. + INVENTORY_WINDOW_TYPE_LOOT, + + // Barter interface. + INVENTORY_WINDOW_TYPE_TRADE, + + // Supplementary "Move items" window. Used to set quantity of items when + // moving items between inventories. + INVENTORY_WINDOW_TYPE_MOVE_ITEMS, + + // Supplementary "Set timer" window. Internally it's implemented as "Move + // items" window but with timer overlay and slightly different adjustment + // mechanics. + INVENTORY_WINDOW_TYPE_SET_TIMER, + + INVENTORY_WINDOW_TYPE_COUNT, +} InventoryWindowType; + +typedef struct InventoryWindowConfiguration { + int field_0; // artId + int width; + int height; + int x; + int y; +} InventoryWindowDescription; + +typedef struct InventoryCursorData { + Art* frm; + unsigned char* frmData; + int width; + int height; + int offsetX; + int offsetY; + CacheEntry* frmHandle; +} InventoryCursorData; + +static int inventoryMessageListInit(); +static int inventoryMessageListFree(); +static bool _setup_inventory(int inventoryWindowType); +static void _exit_inventory(bool a1); +static void _display_inventory(int a1, int a2, int inventoryWindowType); +static void _display_target_inventory(int a1, int a2, Inventory* a3, int a4); +static void _display_inventory_info(Object* item, int quantity, unsigned char* dest, int pitch, bool a5); +static void _display_body(int fid, int inventoryWindowType); +static int inventoryCommonInit(); +static void inventoryCommonFree(); +static void inventorySetCursor(int cursor); +static void inventoryItemSlotOnMouseEnter(int btn, int keyCode); +static void inventoryItemSlotOnMouseExit(int btn, int keyCode); +static void _inven_update_lighting(Object* a1); +static void _inven_pickup(int keyCode, int a2); +static void _switch_hand(Object* a1, Object** a2, Object** a3, int a4); +static void _adjust_fid(); +static void inventoryRenderSummary(); +static int _inven_from_button(int a1, Object** a2, Object*** a3, Object** a4); +static void inventoryRenderItemDescription(char* string); +static void inventoryExamineItem(Object* critter, Object* item); +static void inventoryWindowOpenContextMenu(int eventCode, int inventoryWindowType); +static int _move_inventory(Object* a1, int a2, Object* a3, bool a4); +static int _barter_compute_value(Object* a1, Object* a2); +static int _barter_attempt_transaction(Object* a1, Object* a2, Object* a3, Object* a4); +static void _barter_move_inventory(Object* a1, int quantity, int a3, int a4, Object* a5, Object* a6, bool a7); +static void _barter_move_from_table_inventory(Object* a1, int quantity, int a3, Object* a4, Object* a5, bool a6); +static void inventoryWindowRenderInnerInventories(int win, Object* a2, Object* a3, int a4); +static void _container_enter(int a1, int a2); +static void _container_exit(int keyCode, int inventoryWindowType); +static int _drop_into_container(Object* a1, Object* a2, int a3, Object** a4, int quantity); +static int _drop_ammo_into_weapon(Object* weapon, Object* ammo, Object** a3, int quantity, int keyCode); +static void _draw_amount(int value, int inventoryWindowType); +static int inventoryQuantitySelect(int inventoryWindowType, Object* item, int a3); +static int inventoryQuantityWindowInit(int inventoryWindowType, Object* item); +static int inventoryQuantityWindowFree(int inventoryWindowType); + // 0x46E6D0 -const int dword_46E6D0[7] = { +static const int dword_46E6D0[7] = { STAT_CURRENT_HIT_POINTS, STAT_ARMOR_CLASS, STAT_DAMAGE_THRESHOLD, @@ -134,7 +236,7 @@ const int dword_46E6D0[7] = { }; // 0x46E6EC -const int dword_46E6EC[7] = { +static const int dword_46E6EC[7] = { STAT_MAXIMUM_HIT_POINTS, -1, STAT_DAMAGE_RESISTANCE, @@ -145,7 +247,7 @@ const int dword_46E6EC[7] = { }; // 0x46E708 -const int gInventoryArrowFrmIds[INVENTORY_ARROW_FRM_COUNT] = { +static const int gInventoryArrowFrmIds[INVENTORY_ARROW_FRM_COUNT] = { 122, // left arrow up 123, // left arrow down 124, // right arrow up @@ -155,24 +257,24 @@ const int gInventoryArrowFrmIds[INVENTORY_ARROW_FRM_COUNT] = { // The number of items to show in scroller. // // 0x519054 -int gInventorySlotsCount = 6; +static int gInventorySlotsCount = 6; // 0x519058 -Object* _inven_dude = NULL; +static Object* _inven_dude = NULL; // Probably fid of armor to display in inventory dialog. // // 0x51905C -int _inven_pid = -1; +static int _inven_pid = -1; // 0x519060 -bool _inven_is_initialized = false; +static bool _inven_is_initialized = false; // 0x519064 -int _inven_display_msg_line = 1; +static int _inven_display_msg_line = 1; // 0x519068 -const InventoryWindowDescription gInventoryWindowDescriptions[INVENTORY_WINDOW_TYPE_COUNT] = { +static const InventoryWindowDescription gInventoryWindowDescriptions[INVENTORY_WINDOW_TYPE_COUNT] = { { 48, 499, 377, 80, 0 }, { 113, 292, 376, 80, 0 }, { 114, 537, 376, 80, 0 }, @@ -182,28 +284,28 @@ const InventoryWindowDescription gInventoryWindowDescriptions[INVENTORY_WINDOW_T }; // 0x5190E0 -bool _dropped_explosive = false; +static bool _dropped_explosive = false; // 0x5190E4 -int gInventoryScrollUpButton = -1; +static int gInventoryScrollUpButton = -1; // 0x5190E8 -int gInventoryScrollDownButton = -1; +static int gInventoryScrollDownButton = -1; // 0x5190EC -int gSecondaryInventoryScrollUpButton = -1; +static int gSecondaryInventoryScrollUpButton = -1; // 0x5190F0 -int gSecondaryInventoryScrollDownButton = -1; +static int gSecondaryInventoryScrollDownButton = -1; // 0x5190F4 -unsigned int gInventoryWindowDudeRotationTimestamp = 0; +static unsigned int gInventoryWindowDudeRotationTimestamp = 0; // 0x5190F8 -int gInventoryWindowDudeRotation = 0; +static int gInventoryWindowDudeRotation = 0; // 0x5190FC -const int gInventoryWindowCursorFrmIds[INVENTORY_WINDOW_CURSOR_COUNT] = { +static const int gInventoryWindowCursorFrmIds[INVENTORY_WINDOW_CURSOR_COUNT] = { 286, // pointing hand 250, // action arrow 282, // action pick @@ -212,10 +314,10 @@ const int gInventoryWindowCursorFrmIds[INVENTORY_WINDOW_CURSOR_COUNT] = { }; // 0x519110 -Object* _last_target = NULL; +static Object* _last_target = NULL; // 0x519114 -const int _act_use[4] = { +static const int _act_use[4] = { GAME_MOUSE_ACTION_MENU_ITEM_LOOK, GAME_MOUSE_ACTION_MENU_ITEM_USE, GAME_MOUSE_ACTION_MENU_ITEM_DROP, @@ -223,27 +325,27 @@ const int _act_use[4] = { }; // 0x519124 -const int _act_no_use[3] = { +static const int _act_no_use[3] = { GAME_MOUSE_ACTION_MENU_ITEM_LOOK, GAME_MOUSE_ACTION_MENU_ITEM_DROP, GAME_MOUSE_ACTION_MENU_ITEM_CANCEL, }; // 0x519130 -const int _act_just_use[3] = { +static const int _act_just_use[3] = { GAME_MOUSE_ACTION_MENU_ITEM_LOOK, GAME_MOUSE_ACTION_MENU_ITEM_USE, GAME_MOUSE_ACTION_MENU_ITEM_CANCEL, }; // 0x51913C -const int _act_nothing[2] = { +static const int _act_nothing[2] = { GAME_MOUSE_ACTION_MENU_ITEM_LOOK, GAME_MOUSE_ACTION_MENU_ITEM_CANCEL, }; // 0x519144 -const int _act_weap[4] = { +static const int _act_weap[4] = { GAME_MOUSE_ACTION_MENU_ITEM_LOOK, GAME_MOUSE_ACTION_MENU_ITEM_UNLOAD, GAME_MOUSE_ACTION_MENU_ITEM_DROP, @@ -251,112 +353,112 @@ const int _act_weap[4] = { }; // 0x519154 -const int _act_weap2[3] = { +static const int _act_weap2[3] = { GAME_MOUSE_ACTION_MENU_ITEM_LOOK, GAME_MOUSE_ACTION_MENU_ITEM_UNLOAD, GAME_MOUSE_ACTION_MENU_ITEM_CANCEL, }; // 0x59E79C -CacheEntry* _mt_key[8]; +static CacheEntry* _mt_key[8]; // 0x59E7BC -CacheEntry* _ikey[OFF_59E7BC_COUNT]; +static CacheEntry* _ikey[OFF_59E7BC_COUNT]; // 0x59E7EC -int _target_stack_offset[10]; +static int _target_stack_offset[10]; // inventory.msg // // 0x59E814 -MessageList gInventoryMessageList; +static MessageList gInventoryMessageList; // 0x59E81C -Object* _target_stack[10]; +static Object* _target_stack[10]; // 0x59E844 -int _stack_offset[10]; +static int _stack_offset[10]; // 0x59E86C -Object* _stack[10]; +static Object* _stack[10]; // 0x59E894 -int _mt_wid; +static int _mt_wid; // 0x59E898 -int _barter_mod; +static int _barter_mod; // 0x59E89C -int _btable_offset; +static int _btable_offset; // 0x59E8A0 -int _ptable_offset; +static int _ptable_offset; // 0x59E8A4 -Inventory* _ptable_pud; +static Inventory* _ptable_pud; // 0x59E8A8 -InventoryCursorData gInventoryCursorData[INVENTORY_WINDOW_CURSOR_COUNT]; +static InventoryCursorData gInventoryCursorData[INVENTORY_WINDOW_CURSOR_COUNT]; // 0x59E934 -Object* _ptable; +static Object* _ptable; // 0x59E938 -InventoryPrintItemDescriptionHandler* gInventoryPrintItemDescriptionHandler; +static InventoryPrintItemDescriptionHandler* gInventoryPrintItemDescriptionHandler; // 0x59E93C -int _im_value; +static int _im_value; // 0x59E940 -int gInventoryCursor; +static int gInventoryCursor; // 0x59E944 -Object* _btable; +static Object* _btable; // 0x59E948 -int _target_curr_stack; +static int _target_curr_stack; // 0x59E94C -Inventory* _btable_pud; +static Inventory* _btable_pud; // 0x59E950 -bool _inven_ui_was_disabled; +static bool _inven_ui_was_disabled; // 0x59E954 -Object* gInventoryArmor; +static Object* gInventoryArmor; // 0x59E958 -Object* gInventoryLeftHandItem; +static Object* gInventoryLeftHandItem; // Rotating character's fid. // // 0x59E95C -int gInventoryWindowDudeFid; +static int gInventoryWindowDudeFid; // 0x59E960 -Inventory* _pud; +static Inventory* _pud; // 0x59E964 -int gInventoryWindow; +static int gInventoryWindow; // item2 // 0x59E968 -Object* gInventoryRightHandItem; +static Object* gInventoryRightHandItem; // 0x59E96C -int _curr_stack; +static int _curr_stack; // 0x59E970 -int gInventoryWindowMaxY; +static int gInventoryWindowMaxY; // 0x59E974 -int gInventoryWindowMaxX; +static int gInventoryWindowMaxX; // 0x59E978 -Inventory* _target_pud; +static Inventory* _target_pud; // 0x59E97C -int _barter_back_win; +static int _barter_back_win; // 0x46E724 void _inven_reset_dude() @@ -367,7 +469,7 @@ void _inven_reset_dude() // inventory_msg_init // 0x46E73C -int inventoryMessageListInit() +static int inventoryMessageListInit() { char path[COMPAT_MAX_PATH]; @@ -383,7 +485,7 @@ int inventoryMessageListInit() // inventory_msg_free // 0x46E7A0 -int inventoryMessageListFree() +static int inventoryMessageListFree() { messageListFree(&gInventoryMessageList); return 0; @@ -544,7 +646,7 @@ void inventoryOpen() } // 0x46EC90 -bool _setup_inventory(int inventoryWindowType) +static bool _setup_inventory(int inventoryWindowType) { _dropped_explosive = 0; _curr_stack = 0; @@ -987,7 +1089,7 @@ bool _setup_inventory(int inventoryWindowType) } // 0x46FBD8 -void _exit_inventory(bool shouldEnableIso) +static void _exit_inventory(bool shouldEnableIso) { _inven_dude = _stack[0]; @@ -1067,7 +1169,7 @@ void _exit_inventory(bool shouldEnableIso) } // 0x46FDF4 -void _display_inventory(int a1, int a2, int inventoryWindowType) +static void _display_inventory(int a1, int a2, int inventoryWindowType) { unsigned char* windowBuffer = windowGetBuffer(gInventoryWindow); int pitch; @@ -1223,7 +1325,7 @@ void _display_inventory(int a1, int a2, int inventoryWindowType) // [a2] is likely an index of selected item or moving item (it decreases displayed number of items in inner functions). // // 0x47036C -void _display_target_inventory(int a1, int a2, Inventory* inventory, int inventoryWindowType) +static void _display_target_inventory(int a1, int a2, Inventory* inventory, int inventoryWindowType) { unsigned char* windowBuffer = windowGetBuffer(gInventoryWindow); @@ -1294,7 +1396,7 @@ void _display_target_inventory(int a1, int a2, Inventory* inventory, int invento // Renders inventory item quantity. // // 0x4705A0 -void _display_inventory_info(Object* item, int quantity, unsigned char* dest, int pitch, bool a5) +static void _display_inventory_info(Object* item, int quantity, unsigned char* dest, int pitch, bool a5) { int oldFont = fontGetCurrent(); fontSetCurrent(101); @@ -1345,7 +1447,7 @@ void _display_inventory_info(Object* item, int quantity, unsigned char* dest, in } // 0x470650 -void _display_body(int fid, int inventoryWindowType) +static void _display_body(int fid, int inventoryWindowType) { if (getTicksSince(gInventoryWindowDudeRotationTimestamp) < INVENTORY_NORMAL_WINDOW_PC_ROTATION_DELAY) { return; @@ -1488,7 +1590,7 @@ void _display_body(int fid, int inventoryWindowType) } // 0x470A2C -int inventoryCommonInit() +static int inventoryCommonInit() { if (inventoryMessageListInit() == -1) { return -1; @@ -1544,7 +1646,7 @@ int inventoryCommonInit() // NOTE: Inlined. // // 0x470B8C -void inventoryCommonFree() +static void inventoryCommonFree() { for (int index = 0; index < INVENTORY_WINDOW_CURSOR_COUNT; index++) { artUnlock(gInventoryCursorData[index].frmHandle); @@ -1561,7 +1663,7 @@ void inventoryCommonFree() } // 0x470BCC -void inventorySetCursor(int cursor) +static void inventorySetCursor(int cursor) { gInventoryCursor = cursor; @@ -1574,7 +1676,7 @@ void inventorySetCursor(int cursor) } // 0x470C2C -void inventoryItemSlotOnMouseEnter(int btn, int keyCode) +static void inventoryItemSlotOnMouseEnter(int btn, int keyCode) { if (gInventoryCursor == INVENTORY_WINDOW_CURSOR_ARROW) { int x; @@ -1607,7 +1709,7 @@ void inventoryItemSlotOnMouseEnter(int btn, int keyCode) } // 0x470D1C -void inventoryItemSlotOnMouseExit(int btn, int keyCode) +static void inventoryItemSlotOnMouseExit(int btn, int keyCode) { if (gInventoryCursor == INVENTORY_WINDOW_CURSOR_ARROW) { InventoryCursorData* cursorData = &(gInventoryCursorData[INVENTORY_WINDOW_CURSOR_ARROW]); @@ -1618,7 +1720,7 @@ void inventoryItemSlotOnMouseExit(int btn, int keyCode) } // 0x470D5C -void _inven_update_lighting(Object* a1) +static void _inven_update_lighting(Object* a1) { if (gDude == _inven_dude) { int lightDistance; @@ -1635,7 +1737,7 @@ void _inven_update_lighting(Object* a1) } // 0x470DB8 -void _inven_pickup(int keyCode, int a2) +static void _inven_pickup(int keyCode, int a2) { Object* a1a; Object** v29 = NULL; @@ -1846,7 +1948,7 @@ void _inven_pickup(int keyCode, int a2) } // 0x4714E0 -void _switch_hand(Object* a1, Object** a2, Object** a3, int a4) +static void _switch_hand(Object* a1, Object** a2, Object** a3, int a4) { if (*a2 != NULL) { if (itemGetType(*a2) == ITEM_TYPE_WEAPON && itemGetType(a1) == ITEM_TYPE_AMMO) { @@ -1938,7 +2040,7 @@ void _adjust_ac(Object* critter, Object* oldArmor, Object* newArmor) } // 0x4716E8 -void _adjust_fid() +static void _adjust_fid() { int fid; if ((_inven_dude->fid & 0xF000000) >> 24 == OBJ_TYPE_CRITTER) { @@ -2208,7 +2310,7 @@ int objectGetCarriedQuantityByPid(Object* object, int pid) // and weapon's damage/range. // // 0x471D5C -void inventoryRenderSummary() +static void inventoryRenderSummary() { int v56[7]; memcpy(v56, dword_46E6D0, sizeof(v56)); @@ -2710,7 +2812,7 @@ int _invenUnwieldFunc(Object* obj, int a2, int a3) } // 0x472B54 -int _inven_from_button(int keyCode, Object** a2, Object*** a3, Object** a4) +static int _inven_from_button(int keyCode, Object** a2, Object*** a3, Object** a4) { Object** v6; Object* v7; @@ -2806,7 +2908,7 @@ int _inven_from_button(int keyCode, Object** a2, Object*** a3, Object** a4) // // inven_display_msg // 0x472D24 -void inventoryRenderItemDescription(char* string) +static void inventoryRenderItemDescription(char* string) { int oldFont = fontGetCurrent(); fontSetCurrent(101); @@ -2893,7 +2995,7 @@ void inventoryRenderItemDescription(char* string) // Examines inventory item. // // 0x472EB8 -void inventoryExamineItem(Object* critter, Object* item) +static void inventoryExamineItem(Object* critter, Object* item) { int oldFont = fontGetCurrent(); fontSetCurrent(101); @@ -2957,7 +3059,7 @@ void inventoryExamineItem(Object* critter, Object* item) } // 0x47304C -void inventoryWindowOpenContextMenu(int keyCode, int inventoryWindowType) +static void inventoryWindowOpenContextMenu(int keyCode, int inventoryWindowType) { Object* item; Object** v43; @@ -3712,7 +3814,7 @@ int inventoryOpenStealing(Object* a1, Object* a2) } // 0x474708 -int _move_inventory(Object* a1, int a2, Object* a3, bool a4) +static int _move_inventory(Object* a1, int a2, Object* a3, bool a4) { bool v38 = true; @@ -3853,7 +3955,7 @@ int _move_inventory(Object* a1, int a2, Object* a3, bool a4) } // 0x474B2C -int _barter_compute_value(Object* a1, Object* a2) +static int _barter_compute_value(Object* a1, Object* a2) { if (gGameDialogSpeakerIsPartyMember) { return objectGetInventoryWeight(_btable); @@ -3886,7 +3988,7 @@ int _barter_compute_value(Object* a1, Object* a2) } // 0x474C50 -int _barter_attempt_transaction(Object* a1, Object* a2, Object* a3, Object* a4) +static int _barter_attempt_transaction(Object* a1, Object* a2, Object* a3, Object* a4) { MessageListItem messageListItem; @@ -3945,7 +4047,7 @@ int _barter_attempt_transaction(Object* a1, Object* a2, Object* a3, Object* a4) } // 0x474DAC -void _barter_move_inventory(Object* a1, int quantity, int a3, int a4, Object* a5, Object* a6, bool a7) +static void _barter_move_inventory(Object* a1, int quantity, int a3, int a4, Object* a5, Object* a6, bool a7) { Rect rect; if (a7) { @@ -4028,7 +4130,7 @@ void _barter_move_inventory(Object* a1, int quantity, int a3, int a4, Object* a5 } // 0x475070 -void _barter_move_from_table_inventory(Object* a1, int quantity, int a3, Object* a4, Object* a5, bool a6) +static void _barter_move_from_table_inventory(Object* a1, int quantity, int a3, Object* a4, Object* a5, bool a6) { Rect rect; if (a6) { @@ -4111,7 +4213,7 @@ void _barter_move_from_table_inventory(Object* a1, int quantity, int a3, Object* } // 0x475334 -void inventoryWindowRenderInnerInventories(int win, Object* a2, Object* a3, int a4) +static void inventoryWindowRenderInnerInventories(int win, Object* a2, Object* a3, int a4) { unsigned char* windowBuffer = windowGetBuffer(gInventoryWindow); @@ -4461,7 +4563,7 @@ void inventoryOpenTrade(int win, Object* a2, Object* a3, Object* a4, int a5) } // 0x47620C -void _container_enter(int keyCode, int inventoryWindowType) +static void _container_enter(int keyCode, int inventoryWindowType) { if (keyCode >= 2000) { int index = _target_pud->length - (_target_stack_offset[_target_curr_stack] + keyCode - 2000 + 1); @@ -4503,7 +4605,7 @@ void _container_enter(int keyCode, int inventoryWindowType) } // 0x476394 -void _container_exit(int keyCode, int inventoryWindowType) +static void _container_exit(int keyCode, int inventoryWindowType) { if (keyCode == 2500) { if (_curr_stack > 0) { @@ -4527,7 +4629,7 @@ void _container_exit(int keyCode, int inventoryWindowType) } // 0x476464 -int _drop_into_container(Object* a1, Object* a2, int a3, Object** a4, int quantity) +static int _drop_into_container(Object* a1, Object* a2, int a3, Object** a4, int quantity) { int quantityToMove; if (quantity > 1) { @@ -4564,7 +4666,7 @@ int _drop_into_container(Object* a1, Object* a2, int a3, Object** a4, int quanti } // 0x47650C -int _drop_ammo_into_weapon(Object* weapon, Object* ammo, Object** a3, int quantity, int keyCode) +static int _drop_ammo_into_weapon(Object* weapon, Object* ammo, Object** a3, int quantity, int keyCode) { if (itemGetType(weapon) != ITEM_TYPE_WEAPON) { return -1; @@ -4629,7 +4731,7 @@ int _drop_ammo_into_weapon(Object* weapon, Object* ammo, Object** a3, int quanti } // 0x47664C -void _draw_amount(int value, int inventoryWindowType) +static void _draw_amount(int value, int inventoryWindowType) { // BIGNUM.frm CacheEntry* handle; @@ -4681,7 +4783,7 @@ void _draw_amount(int value, int inventoryWindowType) } // 0x47688C -int inventoryQuantitySelect(int inventoryWindowType, Object* item, int max) +static int inventoryQuantitySelect(int inventoryWindowType, Object* item, int max) { inventoryQuantityWindowInit(inventoryWindowType, item); @@ -4823,7 +4925,7 @@ int inventoryQuantitySelect(int inventoryWindowType, Object* item, int max) // Creates move items/set timer interface. // // 0x476AB8 -int inventoryQuantityWindowInit(int inventoryWindowType, Object* item) +static int inventoryQuantityWindowInit(int inventoryWindowType, Object* item) { const int oldFont = fontGetCurrent(); fontSetCurrent(103); @@ -4977,7 +5079,7 @@ int inventoryQuantityWindowInit(int inventoryWindowType, Object* item) } // 0x477030 -int inventoryQuantityWindowFree(int inventoryWindowType) +static int inventoryQuantityWindowFree(int inventoryWindowType) { int count = inventoryWindowType == INVENTORY_WINDOW_TYPE_MOVE_ITEMS ? 8 : 6; diff --git a/src/inventory.h b/src/inventory.h index 41ed42a..3afb6eb 100644 --- a/src/inventory.h +++ b/src/inventory.h @@ -1,163 +1,19 @@ #ifndef INVENTORY_H #define INVENTORY_H -#include "art.h" -#include "cache.h" -#include "message.h" #include "obj_types.h" -#define INVENTORY_NORMAL_WINDOW_PC_ROTATION_DELAY (1000U / ROTATION_COUNT) -#define OFF_59E7BC_COUNT 12 - -typedef enum InventoryArrowFrm { - INVENTORY_ARROW_FRM_LEFT_ARROW_UP, - INVENTORY_ARROW_FRM_LEFT_ARROW_DOWN, - INVENTORY_ARROW_FRM_RIGHT_ARROW_UP, - INVENTORY_ARROW_FRM_RIGHT_ARROW_DOWN, - INVENTORY_ARROW_FRM_COUNT, -} InventoryArrowFrm; - -typedef enum InventoryWindowCursor { - INVENTORY_WINDOW_CURSOR_HAND, - INVENTORY_WINDOW_CURSOR_ARROW, - INVENTORY_WINDOW_CURSOR_PICK, - INVENTORY_WINDOW_CURSOR_MENU, - INVENTORY_WINDOW_CURSOR_BLANK, - INVENTORY_WINDOW_CURSOR_COUNT, -} InventoryWindowCursor; - -typedef enum InventoryWindowType { - // Normal inventory window with quick character sheet. - INVENTORY_WINDOW_TYPE_NORMAL, - - // Narrow inventory window with just an item scroller that's shown when - // a "Use item on" is selected from context menu. - INVENTORY_WINDOW_TYPE_USE_ITEM_ON, - - // Looting/strealing interface. - INVENTORY_WINDOW_TYPE_LOOT, - - // Barter interface. - INVENTORY_WINDOW_TYPE_TRADE, - - // Supplementary "Move items" window. Used to set quantity of items when - // moving items between inventories. - INVENTORY_WINDOW_TYPE_MOVE_ITEMS, - - // Supplementary "Set timer" window. Internally it's implemented as "Move - // items" window but with timer overlay and slightly different adjustment - // mechanics. - INVENTORY_WINDOW_TYPE_SET_TIMER, - - INVENTORY_WINDOW_TYPE_COUNT, -} InventoryWindowType; - -typedef struct InventoryWindowConfiguration { - int field_0; // artId - int width; - int height; - int x; - int y; -} InventoryWindowDescription; - -typedef struct InventoryCursorData { - Art* frm; - unsigned char* frmData; - int width; - int height; - int offsetX; - int offsetY; - CacheEntry* frmHandle; -} InventoryCursorData; - typedef void InventoryPrintItemDescriptionHandler(char* string); -extern const int dword_46E6D0[7]; -extern const int dword_46E6EC[7]; -extern const int gInventoryArrowFrmIds[INVENTORY_ARROW_FRM_COUNT]; - -extern int gInventorySlotsCount; -extern Object* _inven_dude; -extern int _inven_pid; -extern bool _inven_is_initialized; -extern int _inven_display_msg_line; -extern const InventoryWindowDescription gInventoryWindowDescriptions[INVENTORY_WINDOW_TYPE_COUNT]; -extern bool _dropped_explosive; -extern int gInventoryScrollUpButton; -extern int gInventoryScrollDownButton; -extern int gSecondaryInventoryScrollUpButton; -extern int gSecondaryInventoryScrollDownButton; -extern unsigned int gInventoryWindowDudeRotationTimestamp; -extern int gInventoryWindowDudeRotation; -extern const int gInventoryWindowCursorFrmIds[INVENTORY_WINDOW_CURSOR_COUNT]; -extern Object* _last_target; -extern const int _act_use[4]; -extern const int _act_no_use[3]; -extern const int _act_just_use[3]; -extern const int _act_nothing[2]; -extern const int _act_weap[4]; -extern const int _act_weap2[3]; - -extern CacheEntry* _mt_key[8]; -extern CacheEntry* _ikey[OFF_59E7BC_COUNT]; -extern int _target_stack_offset[10]; -extern MessageList gInventoryMessageList; -extern Object* _target_stack[10]; -extern int _stack_offset[10]; -extern Object* _stack[10]; -extern int _mt_wid; -extern int _barter_mod; -extern int _btable_offset; -extern int _ptable_offset; -extern Inventory* _ptable_pud; -extern InventoryCursorData gInventoryCursorData[INVENTORY_WINDOW_CURSOR_COUNT]; -extern Object* _ptable; -extern InventoryPrintItemDescriptionHandler* gInventoryPrintItemDescriptionHandler; -extern int _im_value; -extern int gInventoryCursor; -extern Object* _btable; -extern int _target_curr_stack; -extern Inventory* _btable_pud; -extern bool _inven_ui_was_disabled; -extern Object* gInventoryArmor; -extern Object* gInventoryLeftHandItem; -extern int gInventoryWindowDudeFid; -extern Inventory* _pud; -extern int gInventoryWindow; -extern Object* gInventoryRightHandItem; -extern int _curr_stack; -extern int gInventoryWindowMaxY; -extern int gInventoryWindowMaxX; -extern Inventory* _target_pud; -extern int _barter_back_win; - void _inven_reset_dude(); -int inventoryMessageListInit(); -int inventoryMessageListFree(); void inventoryOpen(); -bool _setup_inventory(int inventoryWindowType); -void _exit_inventory(bool a1); -void _display_inventory(int a1, int a2, int inventoryWindowType); -void _display_target_inventory(int a1, int a2, Inventory* a3, int a4); -void _display_inventory_info(Object* item, int quantity, unsigned char* dest, int pitch, bool a5); -void _display_body(int fid, int inventoryWindowType); -int inventoryCommonInit(); -void inventoryCommonFree(); -void inventorySetCursor(int cursor); -void inventoryItemSlotOnMouseEnter(int btn, int keyCode); -void inventoryItemSlotOnMouseExit(int btn, int keyCode); -void _inven_update_lighting(Object* a1); -void _inven_pickup(int keyCode, int a2); -void _switch_hand(Object* a1, Object** a2, Object** a3, int a4); void _adjust_ac(Object* critter, Object* oldArmor, Object* newArmor); -void _adjust_fid(); void inventoryOpenUseItemOn(Object* a1); Object* critterGetItem2(Object* obj); Object* critterGetItem1(Object* obj); Object* critterGetArmor(Object* obj); Object* objectGetCarriedObjectByPid(Object* obj, int pid); int objectGetCarriedQuantityByPid(Object* obj, int pid); -void inventoryRenderSummary(); Object* _inven_find_type(Object* obj, int a2, int* inout_a3); Object* _inven_find_id(Object* obj, int a2); Object* _inven_index_ptr(Object* obj, int a2); @@ -165,27 +21,9 @@ int _inven_wield(Object* a1, Object* a2, int a3); int _invenWieldFunc(Object* a1, Object* a2, int a3, bool a4); int _inven_unwield(Object* critter_obj, int a2); int _invenUnwieldFunc(Object* obj, int a2, int a3); -int _inven_from_button(int a1, Object** a2, Object*** a3, Object** a4); -void inventoryRenderItemDescription(char* string); -void inventoryExamineItem(Object* critter, Object* item); -void inventoryWindowOpenContextMenu(int eventCode, int inventoryWindowType); int inventoryOpenLooting(Object* a1, Object* a2); int inventoryOpenStealing(Object* a1, Object* a2); -int _move_inventory(Object* a1, int a2, Object* a3, bool a4); -int _barter_compute_value(Object* a1, Object* a2); -int _barter_attempt_transaction(Object* a1, Object* a2, Object* a3, Object* a4); -void _barter_move_inventory(Object* a1, int quantity, int a3, int a4, Object* a5, Object* a6, bool a7); -void _barter_move_from_table_inventory(Object* a1, int quantity, int a3, Object* a4, Object* a5, bool a6); -void inventoryWindowRenderInnerInventories(int win, Object* a2, Object* a3, int a4); void inventoryOpenTrade(int win, Object* a2, Object* a3, Object* a4, int a5); -void _container_enter(int a1, int a2); -void _container_exit(int keyCode, int inventoryWindowType); -int _drop_into_container(Object* a1, Object* a2, int a3, Object** a4, int quantity); -int _drop_ammo_into_weapon(Object* weapon, Object* ammo, Object** a3, int quantity, int keyCode); -void _draw_amount(int value, int inventoryWindowType); -int inventoryQuantitySelect(int inventoryWindowType, Object* item, int a3); -int inventoryQuantityWindowInit(int inventoryWindowType, Object* item); -int inventoryQuantityWindowFree(int inventoryWindowType); int _inven_set_timer(Object* a1); #endif /* INVENTORY_H */ diff --git a/src/item.cc b/src/item.cc index e896dbf..ad9d516 100644 --- a/src/item.cc +++ b/src/item.cc @@ -1,6 +1,7 @@ #include "item.h" #include "animation.h" +#include "art.h" #include "automap.h" #include "combat.h" #include "critter.h" diff --git a/src/proto_instance.cc b/src/proto_instance.cc index 198da47..44cf7df 100644 --- a/src/proto_instance.cc +++ b/src/proto_instance.cc @@ -1,6 +1,7 @@ #include "proto_instance.h" #include "animation.h" +#include "art.h" #include "color.h" #include "combat.h" #include "critter.h" diff --git a/src/scripts.cc b/src/scripts.cc index e368afd..aeb928a 100644 --- a/src/scripts.cc +++ b/src/scripts.cc @@ -2,6 +2,7 @@ #include "actions.h" #include "animation.h" +#include "art.h" #include "automap.h" #include "combat.h" #include "core.h" diff --git a/src/stat.cc b/src/stat.cc index a82adaa..621c4ab 100644 --- a/src/stat.cc +++ b/src/stat.cc @@ -1,5 +1,6 @@ #include "stat.h" +#include "art.h" #include "combat.h" #include "core.h" #include "critter.h" diff --git a/src/tile.cc b/src/tile.cc index c62262b..e7f49d2 100644 --- a/src/tile.cc +++ b/src/tile.cc @@ -1,5 +1,6 @@ #include "tile.h" +#include "art.h" #include "color.h" #include "config.h" #include "core.h" diff --git a/src/world_map.cc b/src/world_map.cc index 3a48af3..4408c33 100644 --- a/src/world_map.cc +++ b/src/world_map.cc @@ -1,6 +1,7 @@ #include "world_map.h" #include "animation.h" +#include "art.h" #include "color.h" #include "combat.h" #include "combat_ai.h"