parent
1267b8ddfb
commit
be81049ff5
283
src/inventory.cc
283
src/inventory.cc
|
@ -37,6 +37,78 @@
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#define INVENTORY_LARGE_SLOT_WIDTH 90
|
||||||
|
#define INVENTORY_LARGE_SLOT_HEIGHT 61
|
||||||
|
|
||||||
|
#define INVENTORY_SLOT_WIDTH 64
|
||||||
|
#define INVENTORY_SLOT_HEIGHT 48
|
||||||
|
|
||||||
|
#define INVENTORY_LEFT_HAND_SLOT_X 154
|
||||||
|
#define INVENTORY_LEFT_HAND_SLOT_Y 286
|
||||||
|
#define INVENTORY_LEFT_HAND_SLOT_MAX_X (INVENTORY_LEFT_HAND_SLOT_X + INVENTORY_LARGE_SLOT_WIDTH)
|
||||||
|
#define INVENTORY_LEFT_HAND_SLOT_MAX_Y (INVENTORY_LEFT_HAND_SLOT_Y + INVENTORY_LARGE_SLOT_HEIGHT)
|
||||||
|
|
||||||
|
#define INVENTORY_RIGHT_HAND_SLOT_X 245
|
||||||
|
#define INVENTORY_RIGHT_HAND_SLOT_Y 286
|
||||||
|
#define INVENTORY_RIGHT_HAND_SLOT_MAX_X (INVENTORY_RIGHT_HAND_SLOT_X + INVENTORY_LARGE_SLOT_WIDTH)
|
||||||
|
#define INVENTORY_RIGHT_HAND_SLOT_MAX_Y (INVENTORY_RIGHT_HAND_SLOT_Y + INVENTORY_LARGE_SLOT_HEIGHT)
|
||||||
|
|
||||||
|
#define INVENTORY_ARMOR_SLOT_X 154
|
||||||
|
#define INVENTORY_ARMOR_SLOT_Y 183
|
||||||
|
#define INVENTORY_ARMOR_SLOT_MAX_X (INVENTORY_ARMOR_SLOT_X + INVENTORY_LARGE_SLOT_WIDTH)
|
||||||
|
#define INVENTORY_ARMOR_SLOT_MAX_Y (INVENTORY_ARMOR_SLOT_Y + INVENTORY_LARGE_SLOT_HEIGHT)
|
||||||
|
|
||||||
|
#define INVENTORY_TRADE_LEFT_SCROLLER_X 29
|
||||||
|
#define INVENTORY_TRADE_RIGHT_SCROLLER_X 395
|
||||||
|
|
||||||
|
#define INVENTORY_TRADE_INNER_LEFT_SCROLLER_X 165
|
||||||
|
#define INVENTORY_TRADE_INNER_RIGHT_SCROLLER_X 250
|
||||||
|
|
||||||
|
#define INVENTORY_TRADE_OUTER_SCROLLER_Y 35
|
||||||
|
#define INVENTORY_TRADE_INNER_SCROLLER_Y 20
|
||||||
|
|
||||||
|
#define INVENTORY_TRADE_LEFT_SCROLLER_TRACKING_X 165
|
||||||
|
#define INVENTORY_TRADE_LEFT_SCROLLER_TRACKING_Y 10
|
||||||
|
#define INVENTORY_TRADE_LEFT_SCROLLER_TRACKING_MAX_X (INVENTORY_TRADE_LEFT_SCROLLER_TRACKING_X + INVENTORY_SLOT_WIDTH)
|
||||||
|
|
||||||
|
#define INVENTORY_TRADE_INNER_LEFT_SCROLLER_TRACKING_X 0
|
||||||
|
#define INVENTORY_TRADE_INNER_LEFT_SCROLLER_TRACKING_Y 10
|
||||||
|
#define INVENTORY_TRADE_INNER_LEFT_SCROLLER_TRACKING_MAX_X (INVENTORY_TRADE_INNER_LEFT_SCROLLER_TRACKING_X + INVENTORY_SLOT_WIDTH)
|
||||||
|
|
||||||
|
#define INVENTORY_TRADE_INNER_RIGHT_SCROLLER_TRACKING_X 250
|
||||||
|
#define INVENTORY_TRADE_INNER_RIGHT_SCROLLER_TRACKING_Y 10
|
||||||
|
#define INVENTORY_TRADE_INNER_RIGHT_SCROLLER_TRACKING_MAX_X (INVENTORY_TRADE_INNER_RIGHT_SCROLLER_TRACKING_X + INVENTORY_SLOT_WIDTH)
|
||||||
|
|
||||||
|
#define INVENTORY_TRADE_RIGHT_SCROLLER_TRACKING_X 395
|
||||||
|
#define INVENTORY_TRADE_RIGHT_SCROLLER_TRACKING_Y 10
|
||||||
|
#define INVENTORY_TRADE_RIGHT_SCROLLER_TRACKING_MAX_X (INVENTORY_TRADE_RIGHT_SCROLLER_TRACKING_X + INVENTORY_SLOT_WIDTH)
|
||||||
|
|
||||||
|
#define INVENTORY_LOOT_LEFT_SCROLLER_X 176
|
||||||
|
#define INVENTORY_LOOT_LEFT_SCROLLER_Y 37
|
||||||
|
#define INVENTORY_LOOT_LEFT_SCROLLER_MAX_X (INVENTORY_LOOT_LEFT_SCROLLER_X + INVENTORY_SLOT_WIDTH)
|
||||||
|
|
||||||
|
#define INVENTORY_LOOT_RIGHT_SCROLLER_X 297
|
||||||
|
#define INVENTORY_LOOT_RIGHT_SCROLLER_Y 37
|
||||||
|
#define INVENTORY_LOOT_RIGHT_SCROLLER_MAX_X (INVENTORY_LOOT_RIGHT_SCROLLER_X + INVENTORY_SLOT_WIDTH)
|
||||||
|
|
||||||
|
#define INVENTORY_SCROLLER_X 44
|
||||||
|
#define INVENTORY_SCROLLER_Y 35
|
||||||
|
#define INVENTORY_SCROLLER_MAX_X (INVENTORY_SCROLLER_X + INVENTORY_SLOT_WIDTH)
|
||||||
|
|
||||||
|
#define INVENTORY_BODY_VIEW_WIDTH 60
|
||||||
|
#define INVENTORY_BODY_VIEW_HEIGHT 100
|
||||||
|
|
||||||
|
#define INVENTORY_PC_BODY_VIEW_X 176
|
||||||
|
#define INVENTORY_PC_BODY_VIEW_Y 37
|
||||||
|
#define INVENTORY_PC_BODY_VIEW_MAX_X (INVENTORY_PC_BODY_VIEW_X + INVENTORY_BODY_VIEW_WIDTH)
|
||||||
|
#define INVENTORY_PC_BODY_VIEW_MAX_Y (INVENTORY_PC_BODY_VIEW_Y + INVENTORY_BODY_VIEW_HEIGHT)
|
||||||
|
|
||||||
|
#define INVENTORY_LOOT_RIGHT_BODY_VIEW_X 422
|
||||||
|
#define INVENTORY_LOOT_RIGHT_BODY_VIEW_Y 35
|
||||||
|
|
||||||
|
#define INVENTORY_LOOT_LEFT_BODY_VIEW_X 44
|
||||||
|
#define INVENTORY_LOOT_LEFT_BODY_VIEW_Y 35
|
||||||
|
|
||||||
// 0x46E6D0
|
// 0x46E6D0
|
||||||
const int dword_46E6D0[7] = {
|
const int dword_46E6D0[7] = {
|
||||||
STAT_CURRENT_HIT_POINTS,
|
STAT_CURRENT_HIT_POINTS,
|
||||||
|
@ -470,9 +542,22 @@ bool _setup_inventory(int inventoryWindowType)
|
||||||
|
|
||||||
if (inventoryWindowType <= INVENTORY_WINDOW_TYPE_LOOT) {
|
if (inventoryWindowType <= INVENTORY_WINDOW_TYPE_LOOT) {
|
||||||
const InventoryWindowDescription* windowDescription = &(gInventoryWindowDescriptions[inventoryWindowType]);
|
const InventoryWindowDescription* windowDescription = &(gInventoryWindowDescriptions[inventoryWindowType]);
|
||||||
gInventoryWindow = windowCreate(80, 0, windowDescription->width, windowDescription->height, 257, 20);
|
|
||||||
gInventoryWindowMaxX = windowDescription->width + 80;
|
// Maintain original position in original resolution, otherwise center it.
|
||||||
gInventoryWindowMaxY = windowDescription->height;
|
int inventoryWindowX = screenGetWidth() != 640
|
||||||
|
? (screenGetWidth() - windowDescription->width) / 2
|
||||||
|
: 80;
|
||||||
|
int inventoryWindowY = screenGetHeight() != 480
|
||||||
|
? (screenGetHeight() - windowDescription->height) / 2
|
||||||
|
: 0;
|
||||||
|
gInventoryWindow = windowCreate(inventoryWindowX,
|
||||||
|
inventoryWindowY,
|
||||||
|
windowDescription->width,
|
||||||
|
windowDescription->height,
|
||||||
|
257,
|
||||||
|
WINDOW_FLAG_0x10 | WINDOW_FLAG_0x04);
|
||||||
|
gInventoryWindowMaxX = windowDescription->width + inventoryWindowX;
|
||||||
|
gInventoryWindowMaxY = windowDescription->height + inventoryWindowY;
|
||||||
|
|
||||||
unsigned char* dest = windowGetBuffer(gInventoryWindow);
|
unsigned char* dest = windowGetBuffer(gInventoryWindow);
|
||||||
int backgroundFid = buildFid(6, windowDescription->field_0, 0, 0, 0);
|
int backgroundFid = buildFid(6, windowDescription->field_0, 0, 0, 0);
|
||||||
|
@ -492,13 +577,16 @@ bool _setup_inventory(int inventoryWindowType)
|
||||||
|
|
||||||
gInventorySlotsCount = 3;
|
gInventorySlotsCount = 3;
|
||||||
|
|
||||||
gInventoryWindow = windowCreate(80, 290, 480, 180, 257, 0);
|
// Trade inventory window is a part of game dialog, which is 640x480.
|
||||||
gInventoryWindowMaxX = 560;
|
int tradeWindowX = (screenGetWidth() - 640) / 2 + 80;
|
||||||
gInventoryWindowMaxY = 470;
|
int tradeWindowY = (screenGetHeight() - 480) / 2 + 290;
|
||||||
|
gInventoryWindow = windowCreate(tradeWindowX, tradeWindowY, 480, 180, 257, 0);
|
||||||
|
gInventoryWindowMaxX = tradeWindowX + 480;
|
||||||
|
gInventoryWindowMaxY = tradeWindowY + 180;
|
||||||
|
|
||||||
unsigned char* dest = windowGetBuffer(gInventoryWindow);
|
unsigned char* dest = windowGetBuffer(gInventoryWindow);
|
||||||
unsigned char* src = windowGetBuffer(_barter_back_win);
|
unsigned char* src = windowGetBuffer(_barter_back_win);
|
||||||
blitBufferToBuffer(src + 80, 480, 180, _scr_size.right - _scr_size.left + 1, dest, 480);
|
blitBufferToBuffer(src + 80, 480, 180, 640, dest, 480);
|
||||||
|
|
||||||
gInventoryPrintItemDescriptionHandler = gameDialogRenderSupplementaryMessage;
|
gInventoryPrintItemDescriptionHandler = gameDialogRenderSupplementaryMessage;
|
||||||
}
|
}
|
||||||
|
@ -507,14 +595,14 @@ bool _setup_inventory(int inventoryWindowType)
|
||||||
// Create invsibile buttons representing character's inventory item
|
// Create invsibile buttons representing character's inventory item
|
||||||
// slots.
|
// slots.
|
||||||
for (int index = 0; index < gInventorySlotsCount; index++) {
|
for (int index = 0; index < gInventorySlotsCount; index++) {
|
||||||
int btn = buttonCreate(gInventoryWindow, 176, 48 * (gInventorySlotsCount - index - 1) + 37, 64, 48, 999 + gInventorySlotsCount - index, -1, 999 + gInventorySlotsCount - index, -1, NULL, NULL, NULL, 0);
|
int btn = buttonCreate(gInventoryWindow, INVENTORY_LOOT_LEFT_SCROLLER_X, INVENTORY_SLOT_HEIGHT * (gInventorySlotsCount - index - 1) + INVENTORY_LOOT_LEFT_SCROLLER_Y, INVENTORY_SLOT_WIDTH, INVENTORY_SLOT_HEIGHT, 999 + gInventorySlotsCount - index, -1, 999 + gInventorySlotsCount - index, -1, NULL, NULL, NULL, 0);
|
||||||
if (btn != -1) {
|
if (btn != -1) {
|
||||||
buttonSetMouseCallbacks(btn, inventoryItemSlotOnMouseEnter, inventoryItemSlotOnMouseExit, NULL, NULL);
|
buttonSetMouseCallbacks(btn, inventoryItemSlotOnMouseEnter, inventoryItemSlotOnMouseExit, NULL, NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int eventCode = 2005;
|
int eventCode = 2005;
|
||||||
int y = 277;
|
int y = INVENTORY_SLOT_HEIGHT * 5 + INVENTORY_SLOT_HEIGHT;
|
||||||
|
|
||||||
// Create invisible buttons representing container's inventory item
|
// Create invisible buttons representing container's inventory item
|
||||||
// slots. For unknown reason it loops backwards and it's size is
|
// slots. For unknown reason it loops backwards and it's size is
|
||||||
|
@ -524,56 +612,56 @@ bool _setup_inventory(int inventoryWindowType)
|
||||||
// which is a bit awkward for a loop. Probably result of some
|
// which is a bit awkward for a loop. Probably result of some
|
||||||
// optimization.
|
// optimization.
|
||||||
for (int index = 0; index < 6; index++) {
|
for (int index = 0; index < 6; index++) {
|
||||||
int btn = buttonCreate(gInventoryWindow, 297, y, 64, 48, eventCode, -1, eventCode, -1, NULL, NULL, NULL, 0);
|
int btn = buttonCreate(gInventoryWindow, INVENTORY_LOOT_RIGHT_SCROLLER_X, y, INVENTORY_SLOT_WIDTH, INVENTORY_SLOT_HEIGHT, eventCode, -1, eventCode, -1, NULL, NULL, NULL, 0);
|
||||||
if (btn != -1) {
|
if (btn != -1) {
|
||||||
buttonSetMouseCallbacks(btn, inventoryItemSlotOnMouseEnter, inventoryItemSlotOnMouseExit, NULL, NULL);
|
buttonSetMouseCallbacks(btn, inventoryItemSlotOnMouseEnter, inventoryItemSlotOnMouseExit, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
eventCode -= 1;
|
eventCode -= 1;
|
||||||
y -= 48;
|
y -= INVENTORY_SLOT_HEIGHT;
|
||||||
}
|
}
|
||||||
} else if (inventoryWindowType == INVENTORY_WINDOW_TYPE_TRADE) {
|
} else if (inventoryWindowType == INVENTORY_WINDOW_TYPE_TRADE) {
|
||||||
int y1 = 35;
|
int y1 = INVENTORY_TRADE_OUTER_SCROLLER_Y;
|
||||||
int y2 = 20;
|
int y2 = INVENTORY_TRADE_INNER_SCROLLER_Y;
|
||||||
|
|
||||||
for (int index = 0; index < gInventorySlotsCount; index++) {
|
for (int index = 0; index < gInventorySlotsCount; index++) {
|
||||||
int btn;
|
int btn;
|
||||||
|
|
||||||
// Invsibile button representing left inventory slot.
|
// Invsibile button representing left inventory slot.
|
||||||
btn = buttonCreate(gInventoryWindow, 29, y1, 64, 48, 1000 + index, -1, 1000 + index, -1, NULL, NULL, NULL, 0);
|
btn = buttonCreate(gInventoryWindow, INVENTORY_TRADE_LEFT_SCROLLER_X, y1, INVENTORY_SLOT_WIDTH, INVENTORY_SLOT_HEIGHT, 1000 + index, -1, 1000 + index, -1, NULL, NULL, NULL, 0);
|
||||||
if (btn != -1) {
|
if (btn != -1) {
|
||||||
buttonSetMouseCallbacks(btn, inventoryItemSlotOnMouseEnter, inventoryItemSlotOnMouseExit, NULL, NULL);
|
buttonSetMouseCallbacks(btn, inventoryItemSlotOnMouseEnter, inventoryItemSlotOnMouseExit, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Invisible button representing right inventory slot.
|
// Invisible button representing right inventory slot.
|
||||||
btn = buttonCreate(gInventoryWindow, 395, y1, 64, 48, 2000 + index, -1, 2000 + index, -1, NULL, NULL, NULL, 0);
|
btn = buttonCreate(gInventoryWindow, INVENTORY_TRADE_RIGHT_SCROLLER_X, y1, INVENTORY_SLOT_WIDTH, INVENTORY_SLOT_HEIGHT, 2000 + index, -1, 2000 + index, -1, NULL, NULL, NULL, 0);
|
||||||
if (btn != -1) {
|
if (btn != -1) {
|
||||||
buttonSetMouseCallbacks(btn, inventoryItemSlotOnMouseEnter, inventoryItemSlotOnMouseExit, NULL, NULL);
|
buttonSetMouseCallbacks(btn, inventoryItemSlotOnMouseEnter, inventoryItemSlotOnMouseExit, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Invisible button representing left suggested slot.
|
// Invisible button representing left suggested slot.
|
||||||
btn = buttonCreate(gInventoryWindow, 165, y2, 64, 48, 2300 + index, -1, 2300 + index, -1, NULL, NULL, NULL, 0);
|
btn = buttonCreate(gInventoryWindow, INVENTORY_TRADE_INNER_LEFT_SCROLLER_X, y2, INVENTORY_SLOT_WIDTH, INVENTORY_SLOT_HEIGHT, 2300 + index, -1, 2300 + index, -1, NULL, NULL, NULL, 0);
|
||||||
if (btn != -1) {
|
if (btn != -1) {
|
||||||
buttonSetMouseCallbacks(btn, inventoryItemSlotOnMouseEnter, inventoryItemSlotOnMouseExit, NULL, NULL);
|
buttonSetMouseCallbacks(btn, inventoryItemSlotOnMouseEnter, inventoryItemSlotOnMouseExit, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Invisible button representing right suggested slot.
|
// Invisible button representing right suggested slot.
|
||||||
btn = buttonCreate(gInventoryWindow, 250, y2, 64, 48, 2400 + index, -1, 2400 + index, -1, NULL, NULL, NULL, 0);
|
btn = buttonCreate(gInventoryWindow, INVENTORY_TRADE_INNER_RIGHT_SCROLLER_X, y2, INVENTORY_SLOT_WIDTH, INVENTORY_SLOT_HEIGHT, 2400 + index, -1, 2400 + index, -1, NULL, NULL, NULL, 0);
|
||||||
if (btn != -1) {
|
if (btn != -1) {
|
||||||
buttonSetMouseCallbacks(btn, inventoryItemSlotOnMouseEnter, inventoryItemSlotOnMouseExit, NULL, NULL);
|
buttonSetMouseCallbacks(btn, inventoryItemSlotOnMouseEnter, inventoryItemSlotOnMouseExit, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
y1 += 48;
|
y1 += INVENTORY_SLOT_HEIGHT;
|
||||||
y2 += 48;
|
y2 += INVENTORY_SLOT_HEIGHT;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Create invisible buttons representing item slots.
|
// Create invisible buttons representing item slots.
|
||||||
for (int index = 0; index < gInventorySlotsCount; index++) {
|
for (int index = 0; index < gInventorySlotsCount; index++) {
|
||||||
int btn = buttonCreate(gInventoryWindow,
|
int btn = buttonCreate(gInventoryWindow,
|
||||||
44,
|
INVENTORY_SCROLLER_X,
|
||||||
48 * (gInventorySlotsCount - index - 1) + 35,
|
INVENTORY_SLOT_HEIGHT * (gInventorySlotsCount - index - 1) + INVENTORY_SCROLLER_Y,
|
||||||
64,
|
INVENTORY_SLOT_WIDTH,
|
||||||
48,
|
INVENTORY_SLOT_HEIGHT,
|
||||||
999 + gInventorySlotsCount - index,
|
999 + gInventorySlotsCount - index,
|
||||||
-1,
|
-1,
|
||||||
999 + gInventorySlotsCount - index,
|
999 + gInventorySlotsCount - index,
|
||||||
|
@ -592,19 +680,19 @@ bool _setup_inventory(int inventoryWindowType)
|
||||||
int btn;
|
int btn;
|
||||||
|
|
||||||
// Item2 slot
|
// Item2 slot
|
||||||
btn = buttonCreate(gInventoryWindow, 245, 286, 90, 61, 1006, -1, 1006, -1, NULL, NULL, NULL, 0);
|
btn = buttonCreate(gInventoryWindow, INVENTORY_RIGHT_HAND_SLOT_X, INVENTORY_RIGHT_HAND_SLOT_Y, INVENTORY_LARGE_SLOT_WIDTH, INVENTORY_LARGE_SLOT_HEIGHT, 1006, -1, 1006, -1, NULL, NULL, NULL, 0);
|
||||||
if (btn != -1) {
|
if (btn != -1) {
|
||||||
buttonSetMouseCallbacks(btn, inventoryItemSlotOnMouseEnter, inventoryItemSlotOnMouseExit, NULL, NULL);
|
buttonSetMouseCallbacks(btn, inventoryItemSlotOnMouseEnter, inventoryItemSlotOnMouseExit, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Item1 slot
|
// Item1 slot
|
||||||
btn = buttonCreate(gInventoryWindow, 154, 286, 90, 61, 1007, -1, 1007, -1, NULL, NULL, NULL, 0);
|
btn = buttonCreate(gInventoryWindow, INVENTORY_LEFT_HAND_SLOT_X, INVENTORY_LEFT_HAND_SLOT_Y, INVENTORY_LARGE_SLOT_WIDTH, INVENTORY_LARGE_SLOT_HEIGHT, 1007, -1, 1007, -1, NULL, NULL, NULL, 0);
|
||||||
if (btn != -1) {
|
if (btn != -1) {
|
||||||
buttonSetMouseCallbacks(btn, inventoryItemSlotOnMouseEnter, inventoryItemSlotOnMouseExit, NULL, NULL);
|
buttonSetMouseCallbacks(btn, inventoryItemSlotOnMouseEnter, inventoryItemSlotOnMouseExit, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Armor slot
|
// Armor slot
|
||||||
btn = buttonCreate(gInventoryWindow, 154, 183, 90, 61, 1008, -1, 1008, -1, NULL, NULL, NULL, 0);
|
btn = buttonCreate(gInventoryWindow, INVENTORY_ARMOR_SLOT_X, INVENTORY_ARMOR_SLOT_Y, INVENTORY_LARGE_SLOT_WIDTH, INVENTORY_LARGE_SLOT_HEIGHT, 1008, -1, 1008, -1, NULL, NULL, NULL, 0);
|
||||||
if (btn != -1) {
|
if (btn != -1) {
|
||||||
buttonSetMouseCallbacks(btn, inventoryItemSlotOnMouseEnter, inventoryItemSlotOnMouseExit, NULL, NULL);
|
buttonSetMouseCallbacks(btn, inventoryItemSlotOnMouseEnter, inventoryItemSlotOnMouseExit, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
@ -733,10 +821,10 @@ bool _setup_inventory(int inventoryWindowType)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Invisible button representing left character.
|
// Invisible button representing left character.
|
||||||
buttonCreate(_barter_back_win, 15, 25, 60, 100, -1, -1, 2500, -1, NULL, NULL, NULL, 0);
|
buttonCreate(_barter_back_win, 15, 25, INVENTORY_BODY_VIEW_WIDTH, INVENTORY_BODY_VIEW_HEIGHT, -1, -1, 2500, -1, NULL, NULL, NULL, 0);
|
||||||
|
|
||||||
// Invisible button representing right character.
|
// Invisible button representing right character.
|
||||||
buttonCreate(_barter_back_win, 560, 25, 60, 100, -1, -1, 2501, -1, NULL, NULL, NULL, 0);
|
buttonCreate(_barter_back_win, 560, 25, INVENTORY_BODY_VIEW_WIDTH, INVENTORY_BODY_VIEW_HEIGHT, -1, -1, 2501, -1, NULL, NULL, NULL, 0);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Large arrow down (normal).
|
// Large arrow down (normal).
|
||||||
|
@ -760,7 +848,7 @@ bool _setup_inventory(int inventoryWindowType)
|
||||||
|
|
||||||
if (inventoryWindowType == INVENTORY_WINDOW_TYPE_LOOT) {
|
if (inventoryWindowType == INVENTORY_WINDOW_TYPE_LOOT) {
|
||||||
// Invisible button representing left character.
|
// Invisible button representing left character.
|
||||||
buttonCreate(gInventoryWindow, 44, 35, 60, 100, -1, -1, 2500, -1, NULL, NULL, NULL, 0);
|
buttonCreate(gInventoryWindow, INVENTORY_LOOT_LEFT_BODY_VIEW_X, INVENTORY_LOOT_LEFT_BODY_VIEW_Y, INVENTORY_BODY_VIEW_WIDTH, INVENTORY_BODY_VIEW_HEIGHT, -1, -1, 2500, -1, NULL, NULL, NULL, 0);
|
||||||
|
|
||||||
// Right inventory down button.
|
// Right inventory down button.
|
||||||
gSecondaryInventoryScrollDownButton = buttonCreate(gInventoryWindow, 379, 62, 22, 23, -1, -1, KEY_CTRL_ARROW_DOWN, -1, buttonUpData, buttonDownData, 0, 0);
|
gSecondaryInventoryScrollDownButton = buttonCreate(gInventoryWindow, 379, 62, 22, 23, -1, -1, KEY_CTRL_ARROW_DOWN, -1, buttonUpData, buttonDownData, 0, 0);
|
||||||
|
@ -771,10 +859,10 @@ bool _setup_inventory(int inventoryWindowType)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Invisible button representing right character.
|
// Invisible button representing right character.
|
||||||
buttonCreate(gInventoryWindow, 422, 35, 60, 100, -1, -1, 2501, -1, NULL, NULL, NULL, 0);
|
buttonCreate(gInventoryWindow, INVENTORY_LOOT_RIGHT_BODY_VIEW_X, INVENTORY_LOOT_RIGHT_BODY_VIEW_Y, INVENTORY_BODY_VIEW_WIDTH, INVENTORY_BODY_VIEW_HEIGHT, -1, -1, 2501, -1, NULL, NULL, NULL, 0);
|
||||||
} else {
|
} else {
|
||||||
// Invisible button representing character (in inventory and use on dialogs).
|
// Invisible button representing character (in inventory and use on dialogs).
|
||||||
buttonCreate(gInventoryWindow, 176, 37, 60, 100, -1, -1, 2500, -1, NULL, NULL, NULL, 0);
|
buttonCreate(gInventoryWindow, INVENTORY_PC_BODY_VIEW_X, INVENTORY_PC_BODY_VIEW_Y, INVENTORY_BODY_VIEW_WIDTH, INVENTORY_BODY_VIEW_HEIGHT, -1, -1, 2500, -1, NULL, NULL, NULL, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -981,10 +1069,10 @@ void _display_inventory(int a1, int a2, int inventoryWindowType)
|
||||||
unsigned char* backgroundFrmData = artLockFrameData(backgroundFid, 0, 0, &backgroundFrmHandle);
|
unsigned char* backgroundFrmData = artLockFrameData(backgroundFid, 0, 0, &backgroundFrmHandle);
|
||||||
if (backgroundFrmData != NULL) {
|
if (backgroundFrmData != NULL) {
|
||||||
// Clear scroll view background.
|
// Clear scroll view background.
|
||||||
blitBufferToBuffer(backgroundFrmData + pitch * 35 + 44, 64, gInventorySlotsCount * 48, pitch, windowBuffer + pitch * 35 + 44, pitch);
|
blitBufferToBuffer(backgroundFrmData + pitch * 35 + 44, INVENTORY_SLOT_WIDTH, gInventorySlotsCount * INVENTORY_SLOT_HEIGHT, pitch, windowBuffer + pitch * 35 + 44, pitch);
|
||||||
|
|
||||||
// Clear armor button background.
|
// Clear armor button background.
|
||||||
blitBufferToBuffer(backgroundFrmData + pitch * 183 + 154, 90, 61, pitch, windowBuffer + pitch * 183 + 154, pitch);
|
blitBufferToBuffer(backgroundFrmData + pitch * INVENTORY_ARMOR_SLOT_Y + INVENTORY_ARMOR_SLOT_X, INVENTORY_LARGE_SLOT_WIDTH, INVENTORY_LARGE_SLOT_HEIGHT, pitch, windowBuffer + pitch * INVENTORY_ARMOR_SLOT_Y + INVENTORY_ARMOR_SLOT_X, pitch);
|
||||||
|
|
||||||
if (gInventoryLeftHandItem != NULL && gInventoryLeftHandItem == gInventoryRightHandItem) {
|
if (gInventoryLeftHandItem != NULL && gInventoryLeftHandItem == gInventoryRightHandItem) {
|
||||||
// Clear item1.
|
// Clear item1.
|
||||||
|
@ -1001,7 +1089,7 @@ void _display_inventory(int a1, int a2, int inventoryWindowType)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Clear both items in one go.
|
// Clear both items in one go.
|
||||||
blitBufferToBuffer(backgroundFrmData + pitch * 286 + 154, 180, 61, pitch, windowBuffer + pitch * 286 + 154, pitch);
|
blitBufferToBuffer(backgroundFrmData + pitch * INVENTORY_LEFT_HAND_SLOT_Y + INVENTORY_LEFT_HAND_SLOT_X, INVENTORY_LARGE_SLOT_WIDTH * 2, INVENTORY_LARGE_SLOT_HEIGHT, pitch, windowBuffer + pitch * INVENTORY_LEFT_HAND_SLOT_Y + INVENTORY_LEFT_HAND_SLOT_X, pitch);
|
||||||
}
|
}
|
||||||
|
|
||||||
artUnlock(backgroundFrmHandle);
|
artUnlock(backgroundFrmHandle);
|
||||||
|
@ -1035,7 +1123,7 @@ void _display_inventory(int a1, int a2, int inventoryWindowType)
|
||||||
|
|
||||||
windowBuffer = windowGetBuffer(gInventoryWindow);
|
windowBuffer = windowGetBuffer(gInventoryWindow);
|
||||||
|
|
||||||
blitBufferToBuffer(windowGetBuffer(_barter_back_win) + 35 * (_scr_size.right - _scr_size.left + 1) + 100, 64, 48 * gInventorySlotsCount, _scr_size.right - _scr_size.left + 1, windowBuffer + pitch * 35 + 20, pitch);
|
blitBufferToBuffer(windowGetBuffer(_barter_back_win) + 35 * 640 + 100, 64, 48 * gInventorySlotsCount, 640, windowBuffer + pitch * 35 + 20, pitch);
|
||||||
v49 = -20;
|
v49 = -20;
|
||||||
} else {
|
} else {
|
||||||
assert(false && "Should be unreachable");
|
assert(false && "Should be unreachable");
|
||||||
|
@ -1097,19 +1185,19 @@ void _display_inventory(int a1, int a2, int inventoryWindowType)
|
||||||
|
|
||||||
if (inventoryWindowType == INVENTORY_WINDOW_TYPE_NORMAL) {
|
if (inventoryWindowType == INVENTORY_WINDOW_TYPE_NORMAL) {
|
||||||
if (gInventoryRightHandItem != NULL) {
|
if (gInventoryRightHandItem != NULL) {
|
||||||
int width = gInventoryRightHandItem == gInventoryLeftHandItem ? 180 : 90;
|
int width = gInventoryRightHandItem == gInventoryLeftHandItem ? INVENTORY_LARGE_SLOT_WIDTH * 2 : INVENTORY_LARGE_SLOT_WIDTH;
|
||||||
int inventoryFid = itemGetInventoryFid(gInventoryRightHandItem);
|
int inventoryFid = itemGetInventoryFid(gInventoryRightHandItem);
|
||||||
artRender(inventoryFid, windowBuffer + 499 * 286 + 245, width, 61, 499);
|
artRender(inventoryFid, windowBuffer + 499 * INVENTORY_RIGHT_HAND_SLOT_Y + INVENTORY_RIGHT_HAND_SLOT_X, width, INVENTORY_LARGE_SLOT_HEIGHT, 499);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gInventoryLeftHandItem != NULL && gInventoryLeftHandItem != gInventoryRightHandItem) {
|
if (gInventoryLeftHandItem != NULL && gInventoryLeftHandItem != gInventoryRightHandItem) {
|
||||||
int inventoryFid = itemGetInventoryFid(gInventoryLeftHandItem);
|
int inventoryFid = itemGetInventoryFid(gInventoryLeftHandItem);
|
||||||
artRender(inventoryFid, windowBuffer + 499 * 286 + 154, 90, 61, 499);
|
artRender(inventoryFid, windowBuffer + 499 * INVENTORY_LEFT_HAND_SLOT_Y + INVENTORY_LEFT_HAND_SLOT_X, INVENTORY_LARGE_SLOT_WIDTH, INVENTORY_LARGE_SLOT_HEIGHT, 499);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gInventoryArmor != NULL) {
|
if (gInventoryArmor != NULL) {
|
||||||
int inventoryFid = itemGetInventoryFid(gInventoryArmor);
|
int inventoryFid = itemGetInventoryFid(gInventoryArmor);
|
||||||
artRender(inventoryFid, windowBuffer + 499 * 183 + 154, 90, 61, 499);
|
artRender(inventoryFid, windowBuffer + 499 * INVENTORY_ARMOR_SLOT_Y + INVENTORY_ARMOR_SLOT_X, INVENTORY_LARGE_SLOT_WIDTH, INVENTORY_LARGE_SLOT_HEIGHT, 499);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1142,7 +1230,7 @@ void _display_target_inventory(int a1, int a2, Inventory* inventory, int invento
|
||||||
pitch = 480;
|
pitch = 480;
|
||||||
|
|
||||||
unsigned char* src = windowGetBuffer(_barter_back_win);
|
unsigned char* src = windowGetBuffer(_barter_back_win);
|
||||||
blitBufferToBuffer(src + (_scr_size.right - _scr_size.left + 1) * 35 + 475, 64, 48 * gInventorySlotsCount, _scr_size.right - _scr_size.left + 1, windowBuffer + 480 * 35 + 395, 480);
|
blitBufferToBuffer(src + 640 * 35 + 475, 64, 48 * gInventorySlotsCount, 640, windowBuffer + 480 * 35 + 395, 480);
|
||||||
} else {
|
} else {
|
||||||
assert(false && "Should be unreachable");
|
assert(false && "Should be unreachable");
|
||||||
}
|
}
|
||||||
|
@ -1292,11 +1380,11 @@ void _display_body(int fid, int inventoryWindowType)
|
||||||
unsigned char* frameData = artGetFrameData(art, frame, rotation);
|
unsigned char* frameData = artGetFrameData(art, frame, rotation);
|
||||||
|
|
||||||
int framePitch = artGetWidth(art, frame, rotation);
|
int framePitch = artGetWidth(art, frame, rotation);
|
||||||
int frameWidth = min(framePitch, 60);
|
int frameWidth = min(framePitch, INVENTORY_BODY_VIEW_WIDTH);
|
||||||
|
|
||||||
int frameHeight = artGetHeight(art, frame, rotation);
|
int frameHeight = artGetHeight(art, frame, rotation);
|
||||||
if (frameHeight > 100) {
|
if (frameHeight > INVENTORY_BODY_VIEW_HEIGHT) {
|
||||||
frameHeight = 100;
|
frameHeight = INVENTORY_BODY_VIEW_HEIGHT;
|
||||||
}
|
}
|
||||||
|
|
||||||
int win;
|
int win;
|
||||||
|
@ -1314,24 +1402,24 @@ void _display_body(int fid, int inventoryWindowType)
|
||||||
rect.top = 25;
|
rect.top = 25;
|
||||||
}
|
}
|
||||||
|
|
||||||
rect.right = rect.left + 60 - 1;
|
rect.right = rect.left + INVENTORY_BODY_VIEW_WIDTH - 1;
|
||||||
rect.bottom = rect.top + 100 - 1;
|
rect.bottom = rect.top + INVENTORY_BODY_VIEW_HEIGHT - 1;
|
||||||
|
|
||||||
int frmId = gGameDialogSpeakerIsPartyMember ? 420 : 111;
|
int frmId = gGameDialogSpeakerIsPartyMember ? 420 : 111;
|
||||||
int backgroundFid = buildFid(6, frmId, 0, 0, 0);
|
int backgroundFid = buildFid(6, frmId, 0, 0, 0);
|
||||||
|
|
||||||
unsigned char* src = artLockFrameData(backgroundFid, 0, 0, &backrgroundFrmHandle);
|
unsigned char* src = artLockFrameData(backgroundFid, 0, 0, &backrgroundFrmHandle);
|
||||||
if (src != NULL) {
|
if (src != NULL) {
|
||||||
blitBufferToBuffer(src + rect.top * (_scr_size.right - _scr_size.left + 1) + rect.left,
|
blitBufferToBuffer(src + rect.top * 640 + rect.left,
|
||||||
60,
|
INVENTORY_BODY_VIEW_WIDTH,
|
||||||
100,
|
INVENTORY_BODY_VIEW_HEIGHT,
|
||||||
_scr_size.right - _scr_size.left + 1,
|
640,
|
||||||
windowBuffer + windowPitch * rect.top + rect.left,
|
windowBuffer + windowPitch * rect.top + rect.left,
|
||||||
windowPitch);
|
windowPitch);
|
||||||
}
|
}
|
||||||
|
|
||||||
blitBufferToBufferTrans(frameData, frameWidth, frameHeight, framePitch,
|
blitBufferToBufferTrans(frameData, frameWidth, frameHeight, framePitch,
|
||||||
windowBuffer + windowPitch * (rect.top + (100 - frameHeight) / 2) + (60 - frameWidth) / 2 + rect.left,
|
windowBuffer + windowPitch * (rect.top + (INVENTORY_BODY_VIEW_HEIGHT - frameHeight) / 2) + (INVENTORY_BODY_VIEW_WIDTH - frameWidth) / 2 + rect.left,
|
||||||
windowPitch);
|
windowPitch);
|
||||||
|
|
||||||
win = _barter_back_win;
|
win = _barter_back_win;
|
||||||
|
@ -1357,22 +1445,22 @@ void _display_body(int fid, int inventoryWindowType)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rect.right = rect.left + 60 - 1;
|
rect.right = rect.left + INVENTORY_BODY_VIEW_WIDTH - 1;
|
||||||
rect.bottom = rect.top + 100 - 1;
|
rect.bottom = rect.top + INVENTORY_BODY_VIEW_HEIGHT - 1;
|
||||||
|
|
||||||
int backgroundFid = buildFid(6, 114, 0, 0, 0);
|
int backgroundFid = buildFid(6, 114, 0, 0, 0);
|
||||||
unsigned char* src = artLockFrameData(backgroundFid, 0, 0, &backrgroundFrmHandle);
|
unsigned char* src = artLockFrameData(backgroundFid, 0, 0, &backrgroundFrmHandle);
|
||||||
if (src != NULL) {
|
if (src != NULL) {
|
||||||
blitBufferToBuffer(src + 537 * rect.top + rect.left,
|
blitBufferToBuffer(src + 537 * rect.top + rect.left,
|
||||||
60,
|
INVENTORY_BODY_VIEW_WIDTH,
|
||||||
100,
|
INVENTORY_BODY_VIEW_HEIGHT,
|
||||||
537,
|
537,
|
||||||
windowBuffer + windowPitch * rect.top + rect.left,
|
windowBuffer + windowPitch * rect.top + rect.left,
|
||||||
windowPitch);
|
windowPitch);
|
||||||
}
|
}
|
||||||
|
|
||||||
blitBufferToBufferTrans(frameData, frameWidth, frameHeight, framePitch,
|
blitBufferToBufferTrans(frameData, frameWidth, frameHeight, framePitch,
|
||||||
windowBuffer + windowPitch * (rect.top + (100 - frameHeight) / 2) + (60 - frameWidth) / 2 + rect.left,
|
windowBuffer + windowPitch * (rect.top + (INVENTORY_BODY_VIEW_HEIGHT - frameHeight) / 2) + (INVENTORY_BODY_VIEW_WIDTH - frameWidth) / 2 + rect.left,
|
||||||
windowPitch);
|
windowPitch);
|
||||||
|
|
||||||
win = gInventoryWindow;
|
win = gInventoryWindow;
|
||||||
|
@ -1478,7 +1566,7 @@ void inventoryItemSlotOnMouseEnter(int btn, int keyCode)
|
||||||
if (gInventoryCursor == INVENTORY_WINDOW_CURSOR_ARROW) {
|
if (gInventoryCursor == INVENTORY_WINDOW_CURSOR_ARROW) {
|
||||||
int x;
|
int x;
|
||||||
int y;
|
int y;
|
||||||
mouseGetPosition(&x, &y);
|
mouseGetPositionInWindow(gInventoryWindow, &x, &y);
|
||||||
|
|
||||||
Object* a2a = NULL;
|
Object* a2a = NULL;
|
||||||
if (_inven_from_button(keyCode, &a2a, NULL, NULL) != 0) {
|
if (_inven_from_button(keyCode, &a2a, NULL, NULL) != 0) {
|
||||||
|
@ -1581,11 +1669,11 @@ void _inven_pickup(int keyCode, int a2)
|
||||||
int height;
|
int height;
|
||||||
int width;
|
int width;
|
||||||
if (v3 == -1) {
|
if (v3 == -1) {
|
||||||
height = 61;
|
height = INVENTORY_LARGE_SLOT_HEIGHT;
|
||||||
width = 90;
|
width = INVENTORY_LARGE_SLOT_WIDTH;
|
||||||
} else {
|
} else {
|
||||||
height = 48;
|
height = INVENTORY_SLOT_HEIGHT;
|
||||||
width = 64;
|
width = INVENTORY_SLOT_WIDTH;
|
||||||
}
|
}
|
||||||
|
|
||||||
CacheEntry* backgroundFrmHandle;
|
CacheEntry* backgroundFrmHandle;
|
||||||
|
@ -1642,10 +1730,10 @@ void _inven_pickup(int keyCode, int a2)
|
||||||
soundPlayFile("iputdown");
|
soundPlayFile("iputdown");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_mouse_click_in(124, 35, 188, 48 * gInventorySlotsCount + 35)) {
|
if (mouseHitTestInWindow(gInventoryWindow, INVENTORY_SCROLLER_X, INVENTORY_SCROLLER_Y, INVENTORY_SCROLLER_MAX_X, INVENTORY_SLOT_HEIGHT * gInventorySlotsCount + INVENTORY_SCROLLER_Y)) {
|
||||||
int x;
|
int x;
|
||||||
int y;
|
int y;
|
||||||
mouseGetPosition(&x, &y);
|
mouseGetPositionInWindow(gInventoryWindow, &x, &y);
|
||||||
|
|
||||||
int v18 = (y - 39) / 48 + a2;
|
int v18 = (y - 39) / 48 + a2;
|
||||||
if (v18 < _pud->length) {
|
if (v18 < _pud->length) {
|
||||||
|
@ -1676,19 +1764,19 @@ void _inven_pickup(int keyCode, int a2)
|
||||||
gInventoryRightHandItem = NULL;
|
gInventoryRightHandItem = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (_mouse_click_in(234, 286, 324, 347)) {
|
} else if (mouseHitTestInWindow(gInventoryWindow, INVENTORY_LEFT_HAND_SLOT_X, INVENTORY_LEFT_HAND_SLOT_Y, INVENTORY_LEFT_HAND_SLOT_MAX_X, INVENTORY_LEFT_HAND_SLOT_MAX_Y)) {
|
||||||
if (gInventoryLeftHandItem != NULL && itemGetType(gInventoryLeftHandItem) == ITEM_TYPE_CONTAINER && gInventoryLeftHandItem != a1a) {
|
if (gInventoryLeftHandItem != NULL && itemGetType(gInventoryLeftHandItem) == ITEM_TYPE_CONTAINER && gInventoryLeftHandItem != a1a) {
|
||||||
_drop_into_container(gInventoryLeftHandItem, a1a, v3, v29, count);
|
_drop_into_container(gInventoryLeftHandItem, a1a, v3, v29, count);
|
||||||
} else if (gInventoryLeftHandItem == NULL || _drop_ammo_into_weapon(gInventoryLeftHandItem, a1a, v29, count, keyCode)) {
|
} else if (gInventoryLeftHandItem == NULL || _drop_ammo_into_weapon(gInventoryLeftHandItem, a1a, v29, count, keyCode)) {
|
||||||
_switch_hand(a1a, &gInventoryLeftHandItem, v29, keyCode);
|
_switch_hand(a1a, &gInventoryLeftHandItem, v29, keyCode);
|
||||||
}
|
}
|
||||||
} else if (_mouse_click_in(325, 286, 415, 347)) {
|
} else if (mouseHitTestInWindow(gInventoryWindow, INVENTORY_RIGHT_HAND_SLOT_X, INVENTORY_RIGHT_HAND_SLOT_Y, INVENTORY_RIGHT_HAND_SLOT_MAX_X, INVENTORY_RIGHT_HAND_SLOT_MAX_Y)) {
|
||||||
if (gInventoryRightHandItem != NULL && itemGetType(gInventoryRightHandItem) == ITEM_TYPE_CONTAINER && gInventoryRightHandItem != a1a) {
|
if (gInventoryRightHandItem != NULL && itemGetType(gInventoryRightHandItem) == ITEM_TYPE_CONTAINER && gInventoryRightHandItem != a1a) {
|
||||||
_drop_into_container(gInventoryRightHandItem, a1a, v3, v29, count);
|
_drop_into_container(gInventoryRightHandItem, a1a, v3, v29, count);
|
||||||
} else if (gInventoryRightHandItem == NULL || _drop_ammo_into_weapon(gInventoryRightHandItem, a1a, v29, count, keyCode)) {
|
} else if (gInventoryRightHandItem == NULL || _drop_ammo_into_weapon(gInventoryRightHandItem, a1a, v29, count, keyCode)) {
|
||||||
_switch_hand(a1a, &gInventoryRightHandItem, v29, v3);
|
_switch_hand(a1a, &gInventoryRightHandItem, v29, v3);
|
||||||
}
|
}
|
||||||
} else if (_mouse_click_in(234, 183, 324, 244)) {
|
} else if (mouseHitTestInWindow(gInventoryWindow, INVENTORY_ARMOR_SLOT_X, INVENTORY_ARMOR_SLOT_Y, INVENTORY_ARMOR_SLOT_MAX_X, INVENTORY_ARMOR_SLOT_MAX_Y)) {
|
||||||
if (itemGetType(a1a) == ITEM_TYPE_ARMOR) {
|
if (itemGetType(a1a) == ITEM_TYPE_ARMOR) {
|
||||||
Object* v21 = gInventoryArmor;
|
Object* v21 = gInventoryArmor;
|
||||||
int v22 = 0;
|
int v22 = 0;
|
||||||
|
@ -1719,7 +1807,7 @@ void _inven_pickup(int keyCode, int a2)
|
||||||
gInventoryArmor = a1a;
|
gInventoryArmor = a1a;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (_mouse_click_in(256, 37, 316, 137)) {
|
} else if (mouseHitTestInWindow(gInventoryWindow, INVENTORY_PC_BODY_VIEW_X, INVENTORY_PC_BODY_VIEW_Y, INVENTORY_PC_BODY_VIEW_MAX_X, INVENTORY_PC_BODY_VIEW_MAX_Y)) {
|
||||||
if (_curr_stack != 0) {
|
if (_curr_stack != 0) {
|
||||||
// TODO: Check this _curr_stack - 1, not sure.
|
// TODO: Check this _curr_stack - 1, not sure.
|
||||||
_drop_into_container(_stack[_curr_stack - 1], a1a, v3, v29, count);
|
_drop_into_container(_stack[_curr_stack - 1], a1a, v3, v29, count);
|
||||||
|
@ -2897,7 +2985,7 @@ void inventoryWindowOpenContextMenu(int keyCode, int inventoryWindowType)
|
||||||
|
|
||||||
int x;
|
int x;
|
||||||
int y;
|
int y;
|
||||||
mouseGetPosition(&x, &y);
|
mouseGetPositionInWindow(gInventoryWindow, &x, &y);
|
||||||
|
|
||||||
int actionMenuItemsLength;
|
int actionMenuItemsLength;
|
||||||
const int* actionMenuItems;
|
const int* actionMenuItems;
|
||||||
|
@ -2992,7 +3080,7 @@ void inventoryWindowOpenContextMenu(int keyCode, int inventoryWindowType)
|
||||||
|
|
||||||
int x;
|
int x;
|
||||||
int y;
|
int y;
|
||||||
mouseGetPosition(&x, &y);
|
mouseGetPositionInWindow(gInventoryWindow, &x, &y);
|
||||||
if (y - previousMouseY > 10 || previousMouseY - y > 10) {
|
if (y - previousMouseY > 10 || previousMouseY - y > 10) {
|
||||||
if (y >= previousMouseY || menuItemIndex <= 0) {
|
if (y >= previousMouseY || menuItemIndex <= 0) {
|
||||||
if (previousMouseY < y && menuItemIndex < actionMenuItemsLength - 1) {
|
if (previousMouseY < y && menuItemIndex < actionMenuItemsLength - 1) {
|
||||||
|
@ -3011,7 +3099,7 @@ void inventoryWindowOpenContextMenu(int keyCode, int inventoryWindowType)
|
||||||
|
|
||||||
if (inventoryWindowType == INVENTORY_WINDOW_TYPE_TRADE) {
|
if (inventoryWindowType == INVENTORY_WINDOW_TYPE_TRADE) {
|
||||||
unsigned char* src = windowGetBuffer(_barter_back_win);
|
unsigned char* src = windowGetBuffer(_barter_back_win);
|
||||||
int pitch = _scr_size.right - _scr_size.left + 1;
|
int pitch = 640;
|
||||||
blitBufferToBuffer(src + pitch * rect.top + rect.left + 80,
|
blitBufferToBuffer(src + pitch * rect.top + rect.left + 80,
|
||||||
cursorData->width,
|
cursorData->width,
|
||||||
menuButtonHeight,
|
menuButtonHeight,
|
||||||
|
@ -3616,8 +3704,8 @@ int _move_inventory(Object* a1, int a2, Object* a3, bool a4)
|
||||||
|
|
||||||
int quantity;
|
int quantity;
|
||||||
if (a4) {
|
if (a4) {
|
||||||
rect.left = 176;
|
rect.left = INVENTORY_LOOT_LEFT_SCROLLER_X;
|
||||||
rect.top = 48 * a2 + 37;
|
rect.top = INVENTORY_SLOT_HEIGHT * a2 + INVENTORY_LOOT_LEFT_SCROLLER_Y;
|
||||||
|
|
||||||
InventoryItem* inventoryItem = &(_pud->items[_pud->length - (a2 + _stack_offset[_curr_stack] + 1)]);
|
InventoryItem* inventoryItem = &(_pud->items[_pud->length - (a2 + _stack_offset[_curr_stack] + 1)]);
|
||||||
quantity = inventoryItem->quantity;
|
quantity = inventoryItem->quantity;
|
||||||
|
@ -3626,8 +3714,8 @@ int _move_inventory(Object* a1, int a2, Object* a3, bool a4)
|
||||||
v38 = false;
|
v38 = false;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
rect.left = 297;
|
rect.left = INVENTORY_LOOT_RIGHT_SCROLLER_X;
|
||||||
rect.top = 48 * a2 + 37;
|
rect.top = INVENTORY_SLOT_HEIGHT * a2 + INVENTORY_LOOT_RIGHT_SCROLLER_Y;
|
||||||
|
|
||||||
InventoryItem* inventoryItem = &(_target_pud->items[_target_pud->length - (a2 + _target_stack_offset[_target_curr_stack] + 1)]);
|
InventoryItem* inventoryItem = &(_target_pud->items[_target_pud->length - (a2 + _target_stack_offset[_target_curr_stack] + 1)]);
|
||||||
quantity = inventoryItem->quantity;
|
quantity = inventoryItem->quantity;
|
||||||
|
@ -3645,12 +3733,12 @@ int _move_inventory(Object* a1, int a2, Object* a3, bool a4)
|
||||||
int fid = buildFid(6, 114, 0, 0, 0);
|
int fid = buildFid(6, 114, 0, 0, 0);
|
||||||
unsigned char* data = artLockFrameData(fid, 0, 0, &handle);
|
unsigned char* data = artLockFrameData(fid, 0, 0, &handle);
|
||||||
if (data != NULL) {
|
if (data != NULL) {
|
||||||
blitBufferToBuffer(data + 537 * rect.top + rect.left, 64, 48, 537, windowBuffer + 537 * rect.top + rect.left, 537);
|
blitBufferToBuffer(data + 537 * rect.top + rect.left, INVENTORY_SLOT_WIDTH, INVENTORY_SLOT_HEIGHT, 537, windowBuffer + 537 * rect.top + rect.left, 537);
|
||||||
artUnlock(handle);
|
artUnlock(handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
rect.right = rect.left + 64 - 1;
|
rect.right = rect.left + INVENTORY_SLOT_WIDTH - 1;
|
||||||
rect.bottom = rect.top + 48 - 1;
|
rect.bottom = rect.top + INVENTORY_SLOT_HEIGHT - 1;
|
||||||
windowRefreshRect(gInventoryWindow, &rect);
|
windowRefreshRect(gInventoryWindow, &rect);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3678,7 +3766,7 @@ int _move_inventory(Object* a1, int a2, Object* a3, bool a4)
|
||||||
MessageListItem messageListItem;
|
MessageListItem messageListItem;
|
||||||
|
|
||||||
if (a4) {
|
if (a4) {
|
||||||
if (_mouse_click_in(377, 37, 441, 48 * gInventorySlotsCount + 37)) {
|
if (mouseHitTestInWindow(gInventoryWindow, INVENTORY_LOOT_RIGHT_SCROLLER_X, INVENTORY_LOOT_RIGHT_SCROLLER_Y, INVENTORY_LOOT_RIGHT_SCROLLER_MAX_X, INVENTORY_SLOT_HEIGHT * gInventorySlotsCount + INVENTORY_LOOT_RIGHT_SCROLLER_Y)) {
|
||||||
int quantityToMove;
|
int quantityToMove;
|
||||||
if (quantity > 1) {
|
if (quantity > 1) {
|
||||||
quantityToMove = inventoryQuantitySelect(INVENTORY_WINDOW_TYPE_MOVE_ITEMS, a1, quantity);
|
quantityToMove = inventoryQuantitySelect(INVENTORY_WINDOW_TYPE_MOVE_ITEMS, a1, quantity);
|
||||||
|
@ -3707,7 +3795,7 @@ int _move_inventory(Object* a1, int a2, Object* a3, bool a4)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (_mouse_click_in(256, 37, 320, 48 * gInventorySlotsCount + 37)) {
|
if (mouseHitTestInWindow(gInventoryWindow, INVENTORY_LOOT_LEFT_SCROLLER_X, INVENTORY_LOOT_LEFT_SCROLLER_Y, INVENTORY_LOOT_LEFT_SCROLLER_MAX_X, INVENTORY_SLOT_HEIGHT * gInventorySlotsCount + INVENTORY_LOOT_LEFT_SCROLLER_Y)) {
|
||||||
int quantityToMove;
|
int quantityToMove;
|
||||||
if (quantity > 1) {
|
if (quantity > 1) {
|
||||||
quantityToMove = inventoryQuantitySelect(INVENTORY_WINDOW_TYPE_MOVE_ITEMS, a1, quantity);
|
quantityToMove = inventoryQuantitySelect(INVENTORY_WINDOW_TYPE_MOVE_ITEMS, a1, quantity);
|
||||||
|
@ -3862,11 +3950,11 @@ void _barter_move_inventory(Object* a1, int quantity, int a3, int a4, Object* a5
|
||||||
unsigned char* dest = windowGetBuffer(gInventoryWindow);
|
unsigned char* dest = windowGetBuffer(gInventoryWindow);
|
||||||
unsigned char* src = windowGetBuffer(_barter_back_win);
|
unsigned char* src = windowGetBuffer(_barter_back_win);
|
||||||
|
|
||||||
int pitch = _scr_size.right - _scr_size.left + 1;
|
int pitch = 640;
|
||||||
blitBufferToBuffer(src + pitch * rect.top + rect.left + 80, 64, 48, pitch, dest + 480 * rect.top + rect.left, 480);
|
blitBufferToBuffer(src + pitch * rect.top + rect.left + 80, INVENTORY_SLOT_WIDTH, INVENTORY_SLOT_HEIGHT, pitch, dest + 480 * rect.top + rect.left, 480);
|
||||||
|
|
||||||
rect.right = rect.left + 64 - 1;
|
rect.right = rect.left + INVENTORY_SLOT_WIDTH - 1;
|
||||||
rect.bottom = rect.top + 48 - 1;
|
rect.bottom = rect.top + INVENTORY_SLOT_HEIGHT - 1;
|
||||||
windowRefreshRect(gInventoryWindow, &rect);
|
windowRefreshRect(gInventoryWindow, &rect);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3893,7 +3981,7 @@ void _barter_move_inventory(Object* a1, int quantity, int a3, int a4, Object* a5
|
||||||
MessageListItem messageListItem;
|
MessageListItem messageListItem;
|
||||||
|
|
||||||
if (a7) {
|
if (a7) {
|
||||||
if (_mouse_click_in(245, 310, 309, 48 * gInventorySlotsCount + 310)) {
|
if (mouseHitTestInWindow(gInventoryWindow, INVENTORY_TRADE_LEFT_SCROLLER_TRACKING_X, INVENTORY_TRADE_LEFT_SCROLLER_TRACKING_Y, INVENTORY_TRADE_LEFT_SCROLLER_TRACKING_MAX_X, INVENTORY_SLOT_HEIGHT * gInventorySlotsCount + INVENTORY_TRADE_LEFT_SCROLLER_TRACKING_Y)) {
|
||||||
int quantityToMove = quantity > 1 ? inventoryQuantitySelect(INVENTORY_WINDOW_TYPE_MOVE_ITEMS, a1, quantity) : 1;
|
int quantityToMove = quantity > 1 ? inventoryQuantitySelect(INVENTORY_WINDOW_TYPE_MOVE_ITEMS, a1, quantity) : 1;
|
||||||
if (quantityToMove != -1) {
|
if (quantityToMove != -1) {
|
||||||
if (_item_move_force(_inven_dude, a6, a1, quantityToMove) == -1) {
|
if (_item_move_force(_inven_dude, a6, a1, quantityToMove) == -1) {
|
||||||
|
@ -3906,7 +3994,7 @@ void _barter_move_inventory(Object* a1, int quantity, int a3, int a4, Object* a5
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (_mouse_click_in(330, 310, 394, 48 * gInventorySlotsCount + 310)) {
|
if (mouseHitTestInWindow(gInventoryWindow, INVENTORY_TRADE_INNER_RIGHT_SCROLLER_TRACKING_X, INVENTORY_TRADE_INNER_RIGHT_SCROLLER_TRACKING_Y, INVENTORY_TRADE_INNER_RIGHT_SCROLLER_TRACKING_MAX_X, INVENTORY_SLOT_HEIGHT * gInventorySlotsCount + INVENTORY_TRADE_INNER_RIGHT_SCROLLER_TRACKING_Y)) {
|
||||||
int quantityToMove = quantity > 1 ? inventoryQuantitySelect(INVENTORY_WINDOW_TYPE_MOVE_ITEMS, a1, quantity) : 1;
|
int quantityToMove = quantity > 1 ? inventoryQuantitySelect(INVENTORY_WINDOW_TYPE_MOVE_ITEMS, a1, quantity) : 1;
|
||||||
if (quantityToMove != -1) {
|
if (quantityToMove != -1) {
|
||||||
if (_item_move_force(a5, a6, a1, quantityToMove) == -1) {
|
if (_item_move_force(a5, a6, a1, quantityToMove) == -1) {
|
||||||
|
@ -3945,11 +4033,11 @@ void _barter_move_from_table_inventory(Object* a1, int quantity, int a3, Object*
|
||||||
unsigned char* dest = windowGetBuffer(gInventoryWindow);
|
unsigned char* dest = windowGetBuffer(gInventoryWindow);
|
||||||
unsigned char* src = windowGetBuffer(_barter_back_win);
|
unsigned char* src = windowGetBuffer(_barter_back_win);
|
||||||
|
|
||||||
int pitch = _scr_size.right - _scr_size.left + 1;
|
int pitch = 640;
|
||||||
blitBufferToBuffer(src + pitch * rect.top + rect.left + 80, 64, 48, pitch, dest + 480 * rect.top + rect.left, 480);
|
blitBufferToBuffer(src + pitch * rect.top + rect.left + 80, INVENTORY_SLOT_WIDTH, INVENTORY_SLOT_HEIGHT, pitch, dest + 480 * rect.top + rect.left, 480);
|
||||||
|
|
||||||
rect.right = rect.left + 64 - 1;
|
rect.right = rect.left + INVENTORY_SLOT_WIDTH - 1;
|
||||||
rect.bottom = rect.top + 48 - 1;
|
rect.bottom = rect.top + INVENTORY_SLOT_HEIGHT - 1;
|
||||||
windowRefreshRect(gInventoryWindow, &rect);
|
windowRefreshRect(gInventoryWindow, &rect);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3976,7 +4064,7 @@ void _barter_move_from_table_inventory(Object* a1, int quantity, int a3, Object*
|
||||||
MessageListItem messageListItem;
|
MessageListItem messageListItem;
|
||||||
|
|
||||||
if (a6) {
|
if (a6) {
|
||||||
if (_mouse_click_in(80, 310, 144, 48 * gInventorySlotsCount + 310)) {
|
if (mouseHitTestInWindow(gInventoryWindow, INVENTORY_TRADE_INNER_LEFT_SCROLLER_TRACKING_X, INVENTORY_TRADE_INNER_LEFT_SCROLLER_TRACKING_Y, INVENTORY_TRADE_INNER_LEFT_SCROLLER_TRACKING_MAX_X, INVENTORY_SLOT_HEIGHT * gInventorySlotsCount + INVENTORY_TRADE_INNER_LEFT_SCROLLER_TRACKING_Y)) {
|
||||||
int quantityToMove = quantity > 1 ? inventoryQuantitySelect(INVENTORY_WINDOW_TYPE_MOVE_ITEMS, a1, quantity) : 1;
|
int quantityToMove = quantity > 1 ? inventoryQuantitySelect(INVENTORY_WINDOW_TYPE_MOVE_ITEMS, a1, quantity) : 1;
|
||||||
if (quantityToMove != -1) {
|
if (quantityToMove != -1) {
|
||||||
if (_item_move_force(a5, _inven_dude, a1, quantityToMove) == -1) {
|
if (_item_move_force(a5, _inven_dude, a1, quantityToMove) == -1) {
|
||||||
|
@ -3989,7 +4077,7 @@ void _barter_move_from_table_inventory(Object* a1, int quantity, int a3, Object*
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (_mouse_click_in(475, 310, 539, 48 * gInventorySlotsCount + 310)) {
|
if (mouseHitTestInWindow(gInventoryWindow, INVENTORY_TRADE_RIGHT_SCROLLER_TRACKING_X, INVENTORY_TRADE_RIGHT_SCROLLER_TRACKING_Y, INVENTORY_TRADE_RIGHT_SCROLLER_TRACKING_MAX_X, INVENTORY_SLOT_HEIGHT * gInventorySlotsCount + INVENTORY_TRADE_RIGHT_SCROLLER_TRACKING_Y)) {
|
||||||
int quantityToMove = quantity > 1 ? inventoryQuantitySelect(INVENTORY_WINDOW_TYPE_MOVE_ITEMS, a1, quantity) : 1;
|
int quantityToMove = quantity > 1 ? inventoryQuantitySelect(INVENTORY_WINDOW_TYPE_MOVE_ITEMS, a1, quantity) : 1;
|
||||||
if (quantityToMove != -1) {
|
if (quantityToMove != -1) {
|
||||||
if (_item_move_force(a5, a4, a1, quantityToMove) == -1) {
|
if (_item_move_force(a5, a4, a1, quantityToMove) == -1) {
|
||||||
|
@ -4019,7 +4107,7 @@ void inventoryWindowRenderInnerInventories(int win, Object* a2, Object* a3, int
|
||||||
|
|
||||||
if (a2 != NULL) {
|
if (a2 != NULL) {
|
||||||
unsigned char* src = windowGetBuffer(win);
|
unsigned char* src = windowGetBuffer(win);
|
||||||
blitBufferToBuffer(src + (_scr_size.right - _scr_size.left + 1) * 20 + 249, 64, v45 + 1, _scr_size.right - _scr_size.left + 1, windowBuffer + 480 * 20 + 169, 480);
|
blitBufferToBuffer(src + 640 * 20 + 249, 64, v45 + 1, 640, windowBuffer + 480 * 20 + 169, 480);
|
||||||
|
|
||||||
unsigned char* dest = windowBuffer + 480 * 24 + 169;
|
unsigned char* dest = windowBuffer + 480 * 24 + 169;
|
||||||
Inventory* inventory = &(a2->data.inventory);
|
Inventory* inventory = &(a2->data.inventory);
|
||||||
|
@ -4057,7 +4145,7 @@ void inventoryWindowRenderInnerInventories(int win, Object* a2, Object* a3, int
|
||||||
|
|
||||||
if (a3 != NULL) {
|
if (a3 != NULL) {
|
||||||
unsigned char* src = windowGetBuffer(win);
|
unsigned char* src = windowGetBuffer(win);
|
||||||
blitBufferToBuffer(src + (_scr_size.right - _scr_size.left + 1) * 20 + 334, 64, v45 + 1, _scr_size.right - _scr_size.left + 1, windowBuffer + 480 * 20 + 254, 480);
|
blitBufferToBuffer(src + 640 * 20 + 334, 64, v45 + 1, 640, windowBuffer + 480 * 20 + 254, 480);
|
||||||
|
|
||||||
unsigned char* dest = windowBuffer + 480 * 24 + 254;
|
unsigned char* dest = windowBuffer + 480 * 24 + 254;
|
||||||
Inventory* inventory = &(a3->data.inventory);
|
Inventory* inventory = &(a3->data.inventory);
|
||||||
|
@ -4729,7 +4817,14 @@ int inventoryQuantityWindowInit(int inventoryWindowType, Object* item)
|
||||||
|
|
||||||
const InventoryWindowDescription* windowDescription = &(gInventoryWindowDescriptions[inventoryWindowType]);
|
const InventoryWindowDescription* windowDescription = &(gInventoryWindowDescriptions[inventoryWindowType]);
|
||||||
|
|
||||||
_mt_wid = windowCreate(windowDescription->x, windowDescription->y, windowDescription->width, windowDescription->height, 257, WINDOW_FLAG_0x10 | WINDOW_FLAG_0x04);
|
// Maintain original position in original resolution, otherwise center it.
|
||||||
|
int quantityWindowX = screenGetWidth() != 640
|
||||||
|
? (screenGetWidth() - windowDescription->width) / 2
|
||||||
|
: windowDescription->x;
|
||||||
|
int quantityWindowY = screenGetHeight() != 480
|
||||||
|
? (screenGetHeight() - windowDescription->height) / 2
|
||||||
|
: windowDescription->y;
|
||||||
|
_mt_wid = windowCreate(quantityWindowX, quantityWindowY, windowDescription->width, windowDescription->height, 257, WINDOW_FLAG_0x10 | WINDOW_FLAG_0x04);
|
||||||
unsigned char* windowBuffer = windowGetBuffer(_mt_wid);
|
unsigned char* windowBuffer = windowGetBuffer(_mt_wid);
|
||||||
|
|
||||||
CacheEntry* backgroundHandle;
|
CacheEntry* backgroundHandle;
|
||||||
|
@ -4767,7 +4862,7 @@ int inventoryQuantityWindowInit(int inventoryWindowType, Object* item)
|
||||||
}
|
}
|
||||||
|
|
||||||
int inventoryFid = itemGetInventoryFid(item);
|
int inventoryFid = itemGetInventoryFid(item);
|
||||||
artRender(inventoryFid, windowBuffer + windowDescription->width * 46 + 16, 90, 61, windowDescription->width);
|
artRender(inventoryFid, windowBuffer + windowDescription->width * 46 + 16, INVENTORY_LARGE_SLOT_WIDTH, INVENTORY_LARGE_SLOT_HEIGHT, windowDescription->width);
|
||||||
|
|
||||||
int x;
|
int x;
|
||||||
int y;
|
int y;
|
||||||
|
|
Loading…
Reference in New Issue