parent
d047edca51
commit
c6bda58dce
|
@ -1,6 +1,7 @@
|
||||||
#include "actions.h"
|
#include "actions.h"
|
||||||
|
|
||||||
#include "animation.h"
|
#include "animation.h"
|
||||||
|
#include "art.h"
|
||||||
#include "color.h"
|
#include "color.h"
|
||||||
#include "combat.h"
|
#include "combat.h"
|
||||||
#include "combat_ai.h"
|
#include "combat_ai.h"
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#include "automap.h"
|
#include "automap.h"
|
||||||
|
|
||||||
|
#include "art.h"
|
||||||
#include "color.h"
|
#include "color.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "core.h"
|
#include "core.h"
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#include "character_selector.h"
|
#include "character_selector.h"
|
||||||
|
|
||||||
|
#include "art.h"
|
||||||
#include "character_editor.h"
|
#include "character_editor.h"
|
||||||
#include "color.h"
|
#include "color.h"
|
||||||
#include "core.h"
|
#include "core.h"
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
#include "actions.h"
|
#include "actions.h"
|
||||||
#include "animation.h"
|
#include "animation.h"
|
||||||
|
#include "art.h"
|
||||||
#include "combat.h"
|
#include "combat.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "core.h"
|
#include "core.h"
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#include "critter.h"
|
#include "critter.h"
|
||||||
|
|
||||||
#include "animation.h"
|
#include "animation.h"
|
||||||
|
#include "art.h"
|
||||||
#include "character_editor.h"
|
#include "character_editor.h"
|
||||||
#include "combat.h"
|
#include "combat.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
#include "actions.h"
|
#include "actions.h"
|
||||||
#include "animation.h"
|
#include "animation.h"
|
||||||
|
#include "art.h"
|
||||||
#include "color.h"
|
#include "color.h"
|
||||||
#include "combat.h"
|
#include "combat.h"
|
||||||
#include "combat_ai.h"
|
#include "combat_ai.h"
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
#include "actions.h"
|
#include "actions.h"
|
||||||
#include "animation.h"
|
#include "animation.h"
|
||||||
|
#include "art.h"
|
||||||
#include "color.h"
|
#include "color.h"
|
||||||
#include "combat.h"
|
#include "combat.h"
|
||||||
#include "core.h"
|
#include "core.h"
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#include "game_sound.h"
|
#include "game_sound.h"
|
||||||
|
|
||||||
#include "animation.h"
|
#include "animation.h"
|
||||||
|
#include "art.h"
|
||||||
#include "audio.h"
|
#include "audio.h"
|
||||||
#include "combat.h"
|
#include "combat.h"
|
||||||
#include "core.h"
|
#include "core.h"
|
||||||
|
|
286
src/inventory.cc
286
src/inventory.cc
|
@ -21,6 +21,7 @@
|
||||||
#include "item.h"
|
#include "item.h"
|
||||||
#include "light.h"
|
#include "light.h"
|
||||||
#include "map.h"
|
#include "map.h"
|
||||||
|
#include "message.h"
|
||||||
#include "object.h"
|
#include "object.h"
|
||||||
#include "party_member.h"
|
#include "party_member.h"
|
||||||
#include "perk.h"
|
#include "perk.h"
|
||||||
|
@ -122,8 +123,109 @@
|
||||||
#define INVENTORY_LOOT_LEFT_BODY_VIEW_X 44
|
#define INVENTORY_LOOT_LEFT_BODY_VIEW_X 44
|
||||||
#define INVENTORY_LOOT_LEFT_BODY_VIEW_Y 35
|
#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
|
// 0x46E6D0
|
||||||
const int dword_46E6D0[7] = {
|
static const int dword_46E6D0[7] = {
|
||||||
STAT_CURRENT_HIT_POINTS,
|
STAT_CURRENT_HIT_POINTS,
|
||||||
STAT_ARMOR_CLASS,
|
STAT_ARMOR_CLASS,
|
||||||
STAT_DAMAGE_THRESHOLD,
|
STAT_DAMAGE_THRESHOLD,
|
||||||
|
@ -134,7 +236,7 @@ const int dword_46E6D0[7] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
// 0x46E6EC
|
// 0x46E6EC
|
||||||
const int dword_46E6EC[7] = {
|
static const int dword_46E6EC[7] = {
|
||||||
STAT_MAXIMUM_HIT_POINTS,
|
STAT_MAXIMUM_HIT_POINTS,
|
||||||
-1,
|
-1,
|
||||||
STAT_DAMAGE_RESISTANCE,
|
STAT_DAMAGE_RESISTANCE,
|
||||||
|
@ -145,7 +247,7 @@ const int dword_46E6EC[7] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
// 0x46E708
|
// 0x46E708
|
||||||
const int gInventoryArrowFrmIds[INVENTORY_ARROW_FRM_COUNT] = {
|
static const int gInventoryArrowFrmIds[INVENTORY_ARROW_FRM_COUNT] = {
|
||||||
122, // left arrow up
|
122, // left arrow up
|
||||||
123, // left arrow down
|
123, // left arrow down
|
||||||
124, // right arrow up
|
124, // right arrow up
|
||||||
|
@ -155,24 +257,24 @@ const int gInventoryArrowFrmIds[INVENTORY_ARROW_FRM_COUNT] = {
|
||||||
// The number of items to show in scroller.
|
// The number of items to show in scroller.
|
||||||
//
|
//
|
||||||
// 0x519054
|
// 0x519054
|
||||||
int gInventorySlotsCount = 6;
|
static int gInventorySlotsCount = 6;
|
||||||
|
|
||||||
// 0x519058
|
// 0x519058
|
||||||
Object* _inven_dude = NULL;
|
static Object* _inven_dude = NULL;
|
||||||
|
|
||||||
// Probably fid of armor to display in inventory dialog.
|
// Probably fid of armor to display in inventory dialog.
|
||||||
//
|
//
|
||||||
// 0x51905C
|
// 0x51905C
|
||||||
int _inven_pid = -1;
|
static int _inven_pid = -1;
|
||||||
|
|
||||||
// 0x519060
|
// 0x519060
|
||||||
bool _inven_is_initialized = false;
|
static bool _inven_is_initialized = false;
|
||||||
|
|
||||||
// 0x519064
|
// 0x519064
|
||||||
int _inven_display_msg_line = 1;
|
static int _inven_display_msg_line = 1;
|
||||||
|
|
||||||
// 0x519068
|
// 0x519068
|
||||||
const InventoryWindowDescription gInventoryWindowDescriptions[INVENTORY_WINDOW_TYPE_COUNT] = {
|
static const InventoryWindowDescription gInventoryWindowDescriptions[INVENTORY_WINDOW_TYPE_COUNT] = {
|
||||||
{ 48, 499, 377, 80, 0 },
|
{ 48, 499, 377, 80, 0 },
|
||||||
{ 113, 292, 376, 80, 0 },
|
{ 113, 292, 376, 80, 0 },
|
||||||
{ 114, 537, 376, 80, 0 },
|
{ 114, 537, 376, 80, 0 },
|
||||||
|
@ -182,28 +284,28 @@ const InventoryWindowDescription gInventoryWindowDescriptions[INVENTORY_WINDOW_T
|
||||||
};
|
};
|
||||||
|
|
||||||
// 0x5190E0
|
// 0x5190E0
|
||||||
bool _dropped_explosive = false;
|
static bool _dropped_explosive = false;
|
||||||
|
|
||||||
// 0x5190E4
|
// 0x5190E4
|
||||||
int gInventoryScrollUpButton = -1;
|
static int gInventoryScrollUpButton = -1;
|
||||||
|
|
||||||
// 0x5190E8
|
// 0x5190E8
|
||||||
int gInventoryScrollDownButton = -1;
|
static int gInventoryScrollDownButton = -1;
|
||||||
|
|
||||||
// 0x5190EC
|
// 0x5190EC
|
||||||
int gSecondaryInventoryScrollUpButton = -1;
|
static int gSecondaryInventoryScrollUpButton = -1;
|
||||||
|
|
||||||
// 0x5190F0
|
// 0x5190F0
|
||||||
int gSecondaryInventoryScrollDownButton = -1;
|
static int gSecondaryInventoryScrollDownButton = -1;
|
||||||
|
|
||||||
// 0x5190F4
|
// 0x5190F4
|
||||||
unsigned int gInventoryWindowDudeRotationTimestamp = 0;
|
static unsigned int gInventoryWindowDudeRotationTimestamp = 0;
|
||||||
|
|
||||||
// 0x5190F8
|
// 0x5190F8
|
||||||
int gInventoryWindowDudeRotation = 0;
|
static int gInventoryWindowDudeRotation = 0;
|
||||||
|
|
||||||
// 0x5190FC
|
// 0x5190FC
|
||||||
const int gInventoryWindowCursorFrmIds[INVENTORY_WINDOW_CURSOR_COUNT] = {
|
static const int gInventoryWindowCursorFrmIds[INVENTORY_WINDOW_CURSOR_COUNT] = {
|
||||||
286, // pointing hand
|
286, // pointing hand
|
||||||
250, // action arrow
|
250, // action arrow
|
||||||
282, // action pick
|
282, // action pick
|
||||||
|
@ -212,10 +314,10 @@ const int gInventoryWindowCursorFrmIds[INVENTORY_WINDOW_CURSOR_COUNT] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
// 0x519110
|
// 0x519110
|
||||||
Object* _last_target = NULL;
|
static Object* _last_target = NULL;
|
||||||
|
|
||||||
// 0x519114
|
// 0x519114
|
||||||
const int _act_use[4] = {
|
static const int _act_use[4] = {
|
||||||
GAME_MOUSE_ACTION_MENU_ITEM_LOOK,
|
GAME_MOUSE_ACTION_MENU_ITEM_LOOK,
|
||||||
GAME_MOUSE_ACTION_MENU_ITEM_USE,
|
GAME_MOUSE_ACTION_MENU_ITEM_USE,
|
||||||
GAME_MOUSE_ACTION_MENU_ITEM_DROP,
|
GAME_MOUSE_ACTION_MENU_ITEM_DROP,
|
||||||
|
@ -223,27 +325,27 @@ const int _act_use[4] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
// 0x519124
|
// 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_LOOK,
|
||||||
GAME_MOUSE_ACTION_MENU_ITEM_DROP,
|
GAME_MOUSE_ACTION_MENU_ITEM_DROP,
|
||||||
GAME_MOUSE_ACTION_MENU_ITEM_CANCEL,
|
GAME_MOUSE_ACTION_MENU_ITEM_CANCEL,
|
||||||
};
|
};
|
||||||
|
|
||||||
// 0x519130
|
// 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_LOOK,
|
||||||
GAME_MOUSE_ACTION_MENU_ITEM_USE,
|
GAME_MOUSE_ACTION_MENU_ITEM_USE,
|
||||||
GAME_MOUSE_ACTION_MENU_ITEM_CANCEL,
|
GAME_MOUSE_ACTION_MENU_ITEM_CANCEL,
|
||||||
};
|
};
|
||||||
|
|
||||||
// 0x51913C
|
// 0x51913C
|
||||||
const int _act_nothing[2] = {
|
static const int _act_nothing[2] = {
|
||||||
GAME_MOUSE_ACTION_MENU_ITEM_LOOK,
|
GAME_MOUSE_ACTION_MENU_ITEM_LOOK,
|
||||||
GAME_MOUSE_ACTION_MENU_ITEM_CANCEL,
|
GAME_MOUSE_ACTION_MENU_ITEM_CANCEL,
|
||||||
};
|
};
|
||||||
|
|
||||||
// 0x519144
|
// 0x519144
|
||||||
const int _act_weap[4] = {
|
static const int _act_weap[4] = {
|
||||||
GAME_MOUSE_ACTION_MENU_ITEM_LOOK,
|
GAME_MOUSE_ACTION_MENU_ITEM_LOOK,
|
||||||
GAME_MOUSE_ACTION_MENU_ITEM_UNLOAD,
|
GAME_MOUSE_ACTION_MENU_ITEM_UNLOAD,
|
||||||
GAME_MOUSE_ACTION_MENU_ITEM_DROP,
|
GAME_MOUSE_ACTION_MENU_ITEM_DROP,
|
||||||
|
@ -251,112 +353,112 @@ const int _act_weap[4] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
// 0x519154
|
// 0x519154
|
||||||
const int _act_weap2[3] = {
|
static const int _act_weap2[3] = {
|
||||||
GAME_MOUSE_ACTION_MENU_ITEM_LOOK,
|
GAME_MOUSE_ACTION_MENU_ITEM_LOOK,
|
||||||
GAME_MOUSE_ACTION_MENU_ITEM_UNLOAD,
|
GAME_MOUSE_ACTION_MENU_ITEM_UNLOAD,
|
||||||
GAME_MOUSE_ACTION_MENU_ITEM_CANCEL,
|
GAME_MOUSE_ACTION_MENU_ITEM_CANCEL,
|
||||||
};
|
};
|
||||||
|
|
||||||
// 0x59E79C
|
// 0x59E79C
|
||||||
CacheEntry* _mt_key[8];
|
static CacheEntry* _mt_key[8];
|
||||||
|
|
||||||
// 0x59E7BC
|
// 0x59E7BC
|
||||||
CacheEntry* _ikey[OFF_59E7BC_COUNT];
|
static CacheEntry* _ikey[OFF_59E7BC_COUNT];
|
||||||
|
|
||||||
// 0x59E7EC
|
// 0x59E7EC
|
||||||
int _target_stack_offset[10];
|
static int _target_stack_offset[10];
|
||||||
|
|
||||||
// inventory.msg
|
// inventory.msg
|
||||||
//
|
//
|
||||||
// 0x59E814
|
// 0x59E814
|
||||||
MessageList gInventoryMessageList;
|
static MessageList gInventoryMessageList;
|
||||||
|
|
||||||
// 0x59E81C
|
// 0x59E81C
|
||||||
Object* _target_stack[10];
|
static Object* _target_stack[10];
|
||||||
|
|
||||||
// 0x59E844
|
// 0x59E844
|
||||||
int _stack_offset[10];
|
static int _stack_offset[10];
|
||||||
|
|
||||||
// 0x59E86C
|
// 0x59E86C
|
||||||
Object* _stack[10];
|
static Object* _stack[10];
|
||||||
|
|
||||||
// 0x59E894
|
// 0x59E894
|
||||||
int _mt_wid;
|
static int _mt_wid;
|
||||||
|
|
||||||
// 0x59E898
|
// 0x59E898
|
||||||
int _barter_mod;
|
static int _barter_mod;
|
||||||
|
|
||||||
// 0x59E89C
|
// 0x59E89C
|
||||||
int _btable_offset;
|
static int _btable_offset;
|
||||||
|
|
||||||
// 0x59E8A0
|
// 0x59E8A0
|
||||||
int _ptable_offset;
|
static int _ptable_offset;
|
||||||
|
|
||||||
// 0x59E8A4
|
// 0x59E8A4
|
||||||
Inventory* _ptable_pud;
|
static Inventory* _ptable_pud;
|
||||||
|
|
||||||
// 0x59E8A8
|
// 0x59E8A8
|
||||||
InventoryCursorData gInventoryCursorData[INVENTORY_WINDOW_CURSOR_COUNT];
|
static InventoryCursorData gInventoryCursorData[INVENTORY_WINDOW_CURSOR_COUNT];
|
||||||
|
|
||||||
// 0x59E934
|
// 0x59E934
|
||||||
Object* _ptable;
|
static Object* _ptable;
|
||||||
|
|
||||||
// 0x59E938
|
// 0x59E938
|
||||||
InventoryPrintItemDescriptionHandler* gInventoryPrintItemDescriptionHandler;
|
static InventoryPrintItemDescriptionHandler* gInventoryPrintItemDescriptionHandler;
|
||||||
|
|
||||||
// 0x59E93C
|
// 0x59E93C
|
||||||
int _im_value;
|
static int _im_value;
|
||||||
|
|
||||||
// 0x59E940
|
// 0x59E940
|
||||||
int gInventoryCursor;
|
static int gInventoryCursor;
|
||||||
|
|
||||||
// 0x59E944
|
// 0x59E944
|
||||||
Object* _btable;
|
static Object* _btable;
|
||||||
|
|
||||||
// 0x59E948
|
// 0x59E948
|
||||||
int _target_curr_stack;
|
static int _target_curr_stack;
|
||||||
|
|
||||||
// 0x59E94C
|
// 0x59E94C
|
||||||
Inventory* _btable_pud;
|
static Inventory* _btable_pud;
|
||||||
|
|
||||||
// 0x59E950
|
// 0x59E950
|
||||||
bool _inven_ui_was_disabled;
|
static bool _inven_ui_was_disabled;
|
||||||
|
|
||||||
// 0x59E954
|
// 0x59E954
|
||||||
Object* gInventoryArmor;
|
static Object* gInventoryArmor;
|
||||||
|
|
||||||
// 0x59E958
|
// 0x59E958
|
||||||
Object* gInventoryLeftHandItem;
|
static Object* gInventoryLeftHandItem;
|
||||||
|
|
||||||
// Rotating character's fid.
|
// Rotating character's fid.
|
||||||
//
|
//
|
||||||
// 0x59E95C
|
// 0x59E95C
|
||||||
int gInventoryWindowDudeFid;
|
static int gInventoryWindowDudeFid;
|
||||||
|
|
||||||
// 0x59E960
|
// 0x59E960
|
||||||
Inventory* _pud;
|
static Inventory* _pud;
|
||||||
|
|
||||||
// 0x59E964
|
// 0x59E964
|
||||||
int gInventoryWindow;
|
static int gInventoryWindow;
|
||||||
|
|
||||||
// item2
|
// item2
|
||||||
// 0x59E968
|
// 0x59E968
|
||||||
Object* gInventoryRightHandItem;
|
static Object* gInventoryRightHandItem;
|
||||||
|
|
||||||
// 0x59E96C
|
// 0x59E96C
|
||||||
int _curr_stack;
|
static int _curr_stack;
|
||||||
|
|
||||||
// 0x59E970
|
// 0x59E970
|
||||||
int gInventoryWindowMaxY;
|
static int gInventoryWindowMaxY;
|
||||||
|
|
||||||
// 0x59E974
|
// 0x59E974
|
||||||
int gInventoryWindowMaxX;
|
static int gInventoryWindowMaxX;
|
||||||
|
|
||||||
// 0x59E978
|
// 0x59E978
|
||||||
Inventory* _target_pud;
|
static Inventory* _target_pud;
|
||||||
|
|
||||||
// 0x59E97C
|
// 0x59E97C
|
||||||
int _barter_back_win;
|
static int _barter_back_win;
|
||||||
|
|
||||||
// 0x46E724
|
// 0x46E724
|
||||||
void _inven_reset_dude()
|
void _inven_reset_dude()
|
||||||
|
@ -367,7 +469,7 @@ void _inven_reset_dude()
|
||||||
|
|
||||||
// inventory_msg_init
|
// inventory_msg_init
|
||||||
// 0x46E73C
|
// 0x46E73C
|
||||||
int inventoryMessageListInit()
|
static int inventoryMessageListInit()
|
||||||
{
|
{
|
||||||
char path[COMPAT_MAX_PATH];
|
char path[COMPAT_MAX_PATH];
|
||||||
|
|
||||||
|
@ -383,7 +485,7 @@ int inventoryMessageListInit()
|
||||||
|
|
||||||
// inventory_msg_free
|
// inventory_msg_free
|
||||||
// 0x46E7A0
|
// 0x46E7A0
|
||||||
int inventoryMessageListFree()
|
static int inventoryMessageListFree()
|
||||||
{
|
{
|
||||||
messageListFree(&gInventoryMessageList);
|
messageListFree(&gInventoryMessageList);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -544,7 +646,7 @@ void inventoryOpen()
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x46EC90
|
// 0x46EC90
|
||||||
bool _setup_inventory(int inventoryWindowType)
|
static bool _setup_inventory(int inventoryWindowType)
|
||||||
{
|
{
|
||||||
_dropped_explosive = 0;
|
_dropped_explosive = 0;
|
||||||
_curr_stack = 0;
|
_curr_stack = 0;
|
||||||
|
@ -987,7 +1089,7 @@ bool _setup_inventory(int inventoryWindowType)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x46FBD8
|
// 0x46FBD8
|
||||||
void _exit_inventory(bool shouldEnableIso)
|
static void _exit_inventory(bool shouldEnableIso)
|
||||||
{
|
{
|
||||||
_inven_dude = _stack[0];
|
_inven_dude = _stack[0];
|
||||||
|
|
||||||
|
@ -1067,7 +1169,7 @@ void _exit_inventory(bool shouldEnableIso)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x46FDF4
|
// 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);
|
unsigned char* windowBuffer = windowGetBuffer(gInventoryWindow);
|
||||||
int pitch;
|
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).
|
// [a2] is likely an index of selected item or moving item (it decreases displayed number of items in inner functions).
|
||||||
//
|
//
|
||||||
// 0x47036C
|
// 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);
|
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.
|
// Renders inventory item quantity.
|
||||||
//
|
//
|
||||||
// 0x4705A0
|
// 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();
|
int oldFont = fontGetCurrent();
|
||||||
fontSetCurrent(101);
|
fontSetCurrent(101);
|
||||||
|
@ -1345,7 +1447,7 @@ void _display_inventory_info(Object* item, int quantity, unsigned char* dest, in
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x470650
|
// 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) {
|
if (getTicksSince(gInventoryWindowDudeRotationTimestamp) < INVENTORY_NORMAL_WINDOW_PC_ROTATION_DELAY) {
|
||||||
return;
|
return;
|
||||||
|
@ -1488,7 +1590,7 @@ void _display_body(int fid, int inventoryWindowType)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x470A2C
|
// 0x470A2C
|
||||||
int inventoryCommonInit()
|
static int inventoryCommonInit()
|
||||||
{
|
{
|
||||||
if (inventoryMessageListInit() == -1) {
|
if (inventoryMessageListInit() == -1) {
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -1544,7 +1646,7 @@ int inventoryCommonInit()
|
||||||
// NOTE: Inlined.
|
// NOTE: Inlined.
|
||||||
//
|
//
|
||||||
// 0x470B8C
|
// 0x470B8C
|
||||||
void inventoryCommonFree()
|
static void inventoryCommonFree()
|
||||||
{
|
{
|
||||||
for (int index = 0; index < INVENTORY_WINDOW_CURSOR_COUNT; index++) {
|
for (int index = 0; index < INVENTORY_WINDOW_CURSOR_COUNT; index++) {
|
||||||
artUnlock(gInventoryCursorData[index].frmHandle);
|
artUnlock(gInventoryCursorData[index].frmHandle);
|
||||||
|
@ -1561,7 +1663,7 @@ void inventoryCommonFree()
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x470BCC
|
// 0x470BCC
|
||||||
void inventorySetCursor(int cursor)
|
static void inventorySetCursor(int cursor)
|
||||||
{
|
{
|
||||||
gInventoryCursor = cursor;
|
gInventoryCursor = cursor;
|
||||||
|
|
||||||
|
@ -1574,7 +1676,7 @@ void inventorySetCursor(int cursor)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x470C2C
|
// 0x470C2C
|
||||||
void inventoryItemSlotOnMouseEnter(int btn, int keyCode)
|
static void inventoryItemSlotOnMouseEnter(int btn, int keyCode)
|
||||||
{
|
{
|
||||||
if (gInventoryCursor == INVENTORY_WINDOW_CURSOR_ARROW) {
|
if (gInventoryCursor == INVENTORY_WINDOW_CURSOR_ARROW) {
|
||||||
int x;
|
int x;
|
||||||
|
@ -1607,7 +1709,7 @@ void inventoryItemSlotOnMouseEnter(int btn, int keyCode)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x470D1C
|
// 0x470D1C
|
||||||
void inventoryItemSlotOnMouseExit(int btn, int keyCode)
|
static void inventoryItemSlotOnMouseExit(int btn, int keyCode)
|
||||||
{
|
{
|
||||||
if (gInventoryCursor == INVENTORY_WINDOW_CURSOR_ARROW) {
|
if (gInventoryCursor == INVENTORY_WINDOW_CURSOR_ARROW) {
|
||||||
InventoryCursorData* cursorData = &(gInventoryCursorData[INVENTORY_WINDOW_CURSOR_ARROW]);
|
InventoryCursorData* cursorData = &(gInventoryCursorData[INVENTORY_WINDOW_CURSOR_ARROW]);
|
||||||
|
@ -1618,7 +1720,7 @@ void inventoryItemSlotOnMouseExit(int btn, int keyCode)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x470D5C
|
// 0x470D5C
|
||||||
void _inven_update_lighting(Object* a1)
|
static void _inven_update_lighting(Object* a1)
|
||||||
{
|
{
|
||||||
if (gDude == _inven_dude) {
|
if (gDude == _inven_dude) {
|
||||||
int lightDistance;
|
int lightDistance;
|
||||||
|
@ -1635,7 +1737,7 @@ void _inven_update_lighting(Object* a1)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x470DB8
|
// 0x470DB8
|
||||||
void _inven_pickup(int keyCode, int a2)
|
static void _inven_pickup(int keyCode, int a2)
|
||||||
{
|
{
|
||||||
Object* a1a;
|
Object* a1a;
|
||||||
Object** v29 = NULL;
|
Object** v29 = NULL;
|
||||||
|
@ -1846,7 +1948,7 @@ void _inven_pickup(int keyCode, int a2)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x4714E0
|
// 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 (*a2 != NULL) {
|
||||||
if (itemGetType(*a2) == ITEM_TYPE_WEAPON && itemGetType(a1) == ITEM_TYPE_AMMO) {
|
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
|
// 0x4716E8
|
||||||
void _adjust_fid()
|
static void _adjust_fid()
|
||||||
{
|
{
|
||||||
int fid;
|
int fid;
|
||||||
if ((_inven_dude->fid & 0xF000000) >> 24 == OBJ_TYPE_CRITTER) {
|
if ((_inven_dude->fid & 0xF000000) >> 24 == OBJ_TYPE_CRITTER) {
|
||||||
|
@ -2208,7 +2310,7 @@ int objectGetCarriedQuantityByPid(Object* object, int pid)
|
||||||
// and weapon's damage/range.
|
// and weapon's damage/range.
|
||||||
//
|
//
|
||||||
// 0x471D5C
|
// 0x471D5C
|
||||||
void inventoryRenderSummary()
|
static void inventoryRenderSummary()
|
||||||
{
|
{
|
||||||
int v56[7];
|
int v56[7];
|
||||||
memcpy(v56, dword_46E6D0, sizeof(v56));
|
memcpy(v56, dword_46E6D0, sizeof(v56));
|
||||||
|
@ -2710,7 +2812,7 @@ int _invenUnwieldFunc(Object* obj, int a2, int a3)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x472B54
|
// 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** v6;
|
||||||
Object* v7;
|
Object* v7;
|
||||||
|
@ -2806,7 +2908,7 @@ int _inven_from_button(int keyCode, Object** a2, Object*** a3, Object** a4)
|
||||||
//
|
//
|
||||||
// inven_display_msg
|
// inven_display_msg
|
||||||
// 0x472D24
|
// 0x472D24
|
||||||
void inventoryRenderItemDescription(char* string)
|
static void inventoryRenderItemDescription(char* string)
|
||||||
{
|
{
|
||||||
int oldFont = fontGetCurrent();
|
int oldFont = fontGetCurrent();
|
||||||
fontSetCurrent(101);
|
fontSetCurrent(101);
|
||||||
|
@ -2893,7 +2995,7 @@ void inventoryRenderItemDescription(char* string)
|
||||||
// Examines inventory item.
|
// Examines inventory item.
|
||||||
//
|
//
|
||||||
// 0x472EB8
|
// 0x472EB8
|
||||||
void inventoryExamineItem(Object* critter, Object* item)
|
static void inventoryExamineItem(Object* critter, Object* item)
|
||||||
{
|
{
|
||||||
int oldFont = fontGetCurrent();
|
int oldFont = fontGetCurrent();
|
||||||
fontSetCurrent(101);
|
fontSetCurrent(101);
|
||||||
|
@ -2957,7 +3059,7 @@ void inventoryExamineItem(Object* critter, Object* item)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x47304C
|
// 0x47304C
|
||||||
void inventoryWindowOpenContextMenu(int keyCode, int inventoryWindowType)
|
static void inventoryWindowOpenContextMenu(int keyCode, int inventoryWindowType)
|
||||||
{
|
{
|
||||||
Object* item;
|
Object* item;
|
||||||
Object** v43;
|
Object** v43;
|
||||||
|
@ -3712,7 +3814,7 @@ int inventoryOpenStealing(Object* a1, Object* a2)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x474708
|
// 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;
|
bool v38 = true;
|
||||||
|
|
||||||
|
@ -3853,7 +3955,7 @@ int _move_inventory(Object* a1, int a2, Object* a3, bool a4)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x474B2C
|
// 0x474B2C
|
||||||
int _barter_compute_value(Object* a1, Object* a2)
|
static int _barter_compute_value(Object* a1, Object* a2)
|
||||||
{
|
{
|
||||||
if (gGameDialogSpeakerIsPartyMember) {
|
if (gGameDialogSpeakerIsPartyMember) {
|
||||||
return objectGetInventoryWeight(_btable);
|
return objectGetInventoryWeight(_btable);
|
||||||
|
@ -3886,7 +3988,7 @@ int _barter_compute_value(Object* a1, Object* a2)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x474C50
|
// 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;
|
MessageListItem messageListItem;
|
||||||
|
|
||||||
|
@ -3945,7 +4047,7 @@ int _barter_attempt_transaction(Object* a1, Object* a2, Object* a3, Object* a4)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x474DAC
|
// 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;
|
Rect rect;
|
||||||
if (a7) {
|
if (a7) {
|
||||||
|
@ -4028,7 +4130,7 @@ void _barter_move_inventory(Object* a1, int quantity, int a3, int a4, Object* a5
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x475070
|
// 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;
|
Rect rect;
|
||||||
if (a6) {
|
if (a6) {
|
||||||
|
@ -4111,7 +4213,7 @@ void _barter_move_from_table_inventory(Object* a1, int quantity, int a3, Object*
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x475334
|
// 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);
|
unsigned char* windowBuffer = windowGetBuffer(gInventoryWindow);
|
||||||
|
|
||||||
|
@ -4461,7 +4563,7 @@ void inventoryOpenTrade(int win, Object* a2, Object* a3, Object* a4, int a5)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x47620C
|
// 0x47620C
|
||||||
void _container_enter(int keyCode, int inventoryWindowType)
|
static void _container_enter(int keyCode, int inventoryWindowType)
|
||||||
{
|
{
|
||||||
if (keyCode >= 2000) {
|
if (keyCode >= 2000) {
|
||||||
int index = _target_pud->length - (_target_stack_offset[_target_curr_stack] + keyCode - 2000 + 1);
|
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
|
// 0x476394
|
||||||
void _container_exit(int keyCode, int inventoryWindowType)
|
static void _container_exit(int keyCode, int inventoryWindowType)
|
||||||
{
|
{
|
||||||
if (keyCode == 2500) {
|
if (keyCode == 2500) {
|
||||||
if (_curr_stack > 0) {
|
if (_curr_stack > 0) {
|
||||||
|
@ -4527,7 +4629,7 @@ void _container_exit(int keyCode, int inventoryWindowType)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x476464
|
// 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;
|
int quantityToMove;
|
||||||
if (quantity > 1) {
|
if (quantity > 1) {
|
||||||
|
@ -4564,7 +4666,7 @@ int _drop_into_container(Object* a1, Object* a2, int a3, Object** a4, int quanti
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x47650C
|
// 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) {
|
if (itemGetType(weapon) != ITEM_TYPE_WEAPON) {
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -4629,7 +4731,7 @@ int _drop_ammo_into_weapon(Object* weapon, Object* ammo, Object** a3, int quanti
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x47664C
|
// 0x47664C
|
||||||
void _draw_amount(int value, int inventoryWindowType)
|
static void _draw_amount(int value, int inventoryWindowType)
|
||||||
{
|
{
|
||||||
// BIGNUM.frm
|
// BIGNUM.frm
|
||||||
CacheEntry* handle;
|
CacheEntry* handle;
|
||||||
|
@ -4681,7 +4783,7 @@ void _draw_amount(int value, int inventoryWindowType)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x47688C
|
// 0x47688C
|
||||||
int inventoryQuantitySelect(int inventoryWindowType, Object* item, int max)
|
static int inventoryQuantitySelect(int inventoryWindowType, Object* item, int max)
|
||||||
{
|
{
|
||||||
inventoryQuantityWindowInit(inventoryWindowType, item);
|
inventoryQuantityWindowInit(inventoryWindowType, item);
|
||||||
|
|
||||||
|
@ -4823,7 +4925,7 @@ int inventoryQuantitySelect(int inventoryWindowType, Object* item, int max)
|
||||||
// Creates move items/set timer interface.
|
// Creates move items/set timer interface.
|
||||||
//
|
//
|
||||||
// 0x476AB8
|
// 0x476AB8
|
||||||
int inventoryQuantityWindowInit(int inventoryWindowType, Object* item)
|
static int inventoryQuantityWindowInit(int inventoryWindowType, Object* item)
|
||||||
{
|
{
|
||||||
const int oldFont = fontGetCurrent();
|
const int oldFont = fontGetCurrent();
|
||||||
fontSetCurrent(103);
|
fontSetCurrent(103);
|
||||||
|
@ -4977,7 +5079,7 @@ int inventoryQuantityWindowInit(int inventoryWindowType, Object* item)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x477030
|
// 0x477030
|
||||||
int inventoryQuantityWindowFree(int inventoryWindowType)
|
static int inventoryQuantityWindowFree(int inventoryWindowType)
|
||||||
{
|
{
|
||||||
int count = inventoryWindowType == INVENTORY_WINDOW_TYPE_MOVE_ITEMS ? 8 : 6;
|
int count = inventoryWindowType == INVENTORY_WINDOW_TYPE_MOVE_ITEMS ? 8 : 6;
|
||||||
|
|
||||||
|
|
162
src/inventory.h
162
src/inventory.h
|
@ -1,163 +1,19 @@
|
||||||
#ifndef INVENTORY_H
|
#ifndef INVENTORY_H
|
||||||
#define INVENTORY_H
|
#define INVENTORY_H
|
||||||
|
|
||||||
#include "art.h"
|
|
||||||
#include "cache.h"
|
|
||||||
#include "message.h"
|
|
||||||
#include "obj_types.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);
|
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();
|
void _inven_reset_dude();
|
||||||
int inventoryMessageListInit();
|
|
||||||
int inventoryMessageListFree();
|
|
||||||
void inventoryOpen();
|
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_ac(Object* critter, Object* oldArmor, Object* newArmor);
|
||||||
void _adjust_fid();
|
|
||||||
void inventoryOpenUseItemOn(Object* a1);
|
void inventoryOpenUseItemOn(Object* a1);
|
||||||
Object* critterGetItem2(Object* obj);
|
Object* critterGetItem2(Object* obj);
|
||||||
Object* critterGetItem1(Object* obj);
|
Object* critterGetItem1(Object* obj);
|
||||||
Object* critterGetArmor(Object* obj);
|
Object* critterGetArmor(Object* obj);
|
||||||
Object* objectGetCarriedObjectByPid(Object* obj, int pid);
|
Object* objectGetCarriedObjectByPid(Object* obj, int pid);
|
||||||
int objectGetCarriedQuantityByPid(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_type(Object* obj, int a2, int* inout_a3);
|
||||||
Object* _inven_find_id(Object* obj, int a2);
|
Object* _inven_find_id(Object* obj, int a2);
|
||||||
Object* _inven_index_ptr(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 _invenWieldFunc(Object* a1, Object* a2, int a3, bool a4);
|
||||||
int _inven_unwield(Object* critter_obj, int a2);
|
int _inven_unwield(Object* critter_obj, int a2);
|
||||||
int _invenUnwieldFunc(Object* obj, int a2, int a3);
|
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 inventoryOpenLooting(Object* a1, Object* a2);
|
||||||
int inventoryOpenStealing(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 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);
|
int _inven_set_timer(Object* a1);
|
||||||
|
|
||||||
#endif /* INVENTORY_H */
|
#endif /* INVENTORY_H */
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#include "item.h"
|
#include "item.h"
|
||||||
|
|
||||||
#include "animation.h"
|
#include "animation.h"
|
||||||
|
#include "art.h"
|
||||||
#include "automap.h"
|
#include "automap.h"
|
||||||
#include "combat.h"
|
#include "combat.h"
|
||||||
#include "critter.h"
|
#include "critter.h"
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#include "proto_instance.h"
|
#include "proto_instance.h"
|
||||||
|
|
||||||
#include "animation.h"
|
#include "animation.h"
|
||||||
|
#include "art.h"
|
||||||
#include "color.h"
|
#include "color.h"
|
||||||
#include "combat.h"
|
#include "combat.h"
|
||||||
#include "critter.h"
|
#include "critter.h"
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
#include "actions.h"
|
#include "actions.h"
|
||||||
#include "animation.h"
|
#include "animation.h"
|
||||||
|
#include "art.h"
|
||||||
#include "automap.h"
|
#include "automap.h"
|
||||||
#include "combat.h"
|
#include "combat.h"
|
||||||
#include "core.h"
|
#include "core.h"
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#include "stat.h"
|
#include "stat.h"
|
||||||
|
|
||||||
|
#include "art.h"
|
||||||
#include "combat.h"
|
#include "combat.h"
|
||||||
#include "core.h"
|
#include "core.h"
|
||||||
#include "critter.h"
|
#include "critter.h"
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#include "tile.h"
|
#include "tile.h"
|
||||||
|
|
||||||
|
#include "art.h"
|
||||||
#include "color.h"
|
#include "color.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "core.h"
|
#include "core.h"
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#include "world_map.h"
|
#include "world_map.h"
|
||||||
|
|
||||||
#include "animation.h"
|
#include "animation.h"
|
||||||
|
#include "art.h"
|
||||||
#include "color.h"
|
#include "color.h"
|
||||||
#include "combat.h"
|
#include "combat.h"
|
||||||
#include "combat_ai.h"
|
#include "combat_ai.h"
|
||||||
|
|
Loading…
Reference in New Issue