aboutsummaryrefslogtreecommitdiff
path: root/engines/dm/inventory.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/dm/inventory.cpp')
-rw-r--r--engines/dm/inventory.cpp79
1 files changed, 78 insertions, 1 deletions
diff --git a/engines/dm/inventory.cpp b/engines/dm/inventory.cpp
index 378d79839b..70359334b0 100644
--- a/engines/dm/inventory.cpp
+++ b/engines/dm/inventory.cpp
@@ -1,11 +1,88 @@
#include "inventory.h"
+#include "dungeonman.h"
+#include "eventman.h"
+#include "menus.h"
namespace DM {
-Viewport gViewportFloppyZzzCross = {174, 2}; // @ G0041_s_Graphic562_Box_ViewportFloppyZzzCross
+Box gBoxFloppyZzzCross = Box(174, 218, 2, 12); // @ G0041_s_Graphic562_Box_ViewportFloppyZzzCross
InventoryMan::InventoryMan(DMEngine *vm): _vm(vm) {}
+void InventoryMan::toggleInventory(ChampionIndex championIndex) {
+ ChampionMan &cm = *_vm->_championMan;
+ EventManager &em = *_vm->_eventMan;
+ DisplayMan &dm = *_vm->_displayMan;
+
+ if ((championIndex == kChmpionCloseInventory) && !cm._champions[championIndex]._currHealth)
+ return;
+ if (_vm->_pressingEye || _vm->_pressingMouth)
+ return;
+ _vm->_stopWaitingForPlayerInput = true;
+ int16 invChampOrdinal = _inventoryChampionOrdinal; // copy, as the original will be edited
+ if (indexToOrdinal(championIndex) == invChampOrdinal) {
+ championIndex = kChmpionCloseInventory;
+ }
+
+ Champion *champion;
+ if (invChampOrdinal) {
+ _inventoryChampionOrdinal = indexToOrdinal(kChampionNone);
+ warning("MISSING CODE: F0334_INVENTORY_CloseChest");
+ champion = &cm._champions[ordinalToIndex(kChampionNone)];
+ if (champion->_currHealth && !cm._candidateChampionOrdinal) {
+ champion->setAttributeFlag(kChampionAttributeStatusBox, true);
+ warning("MISSING CODE: F0292_CHAMPION_DrawState");
+ }
+ if (cm._partyIsSleeping) {
+ return;
+ }
+ if (championIndex == kChmpionCloseInventory) {
+ em._refreshMousePointerInMainLoop = true;
+ _vm->_menuMan->drawMovementArrows();
+ em._secondaryMouseInput = gSecondaryMouseInput_Movement;
+ warning("MISSING CODE: set G0444_ps_SecondaryKeyboardInput");
+ warning("MISSING CODE: F0357_COMMAND_DiscardAllInput");
+ return;
+ }
+ }
+
+ dm._useByteBoxCoordinates = false;
+ _inventoryChampionOrdinal = indexToOrdinal(championIndex);
+ if (!invChampOrdinal) {
+ warning("MISSING CODE: F0136_VIDEO_ShadeScreenBox");
+ }
+
+ champion = &cm._champions[championIndex];
+ int16 w = dm.getWidth(kInventoryGraphicIndice);
+ int16 h = dm.getHeight(kInventoryGraphicIndice);
+ dm.blitToScreen(dm.getBitmap(kInventoryGraphicIndice), w, 0, 0, 0, w, 0, h, kColorNoTransparency, gDungeonViewport);
+ if (cm._candidateChampionOrdinal) {
+ dm.clearScreenBox(kColorDarkestGray, gBoxFloppyZzzCross, gDungeonViewport);
+ } else {
+ static Box gBoxFloppy = Box(174, 182, 2, 12); // @ K0300_s_Box_ViewportFloppy
+ dm.clearScreenBox(kColorDarkestGray, gBoxFloppy, gDungeonViewport);
+ }
+ warning("MISSING CODE: F0052_TEXT_PrintToViewport -> HEALTH");
+ warning("MISSING CODE: F0052_TEXT_PrintToViewport -> STAMINA");
+ warning("MISSING CODE: F0052_TEXT_PrintToViewport -> MANA");
+
+ warning("MISSING CODE: F0291_CHAMPION_DrawSlot in LOOOOOOOOOOOOP");
+
+ champion->setAttributeFlag(kChampionAttributeViewport, true);
+ champion->setAttributeFlag(kChampionAttributeStatusBox, true);
+ champion->setAttributeFlag(kChampionAttributePanel, true);
+ champion->setAttributeFlag(kChampionAttributeLoad, true);
+ champion->setAttributeFlag(kChampionAttributeStatistics, true);
+ champion->setAttributeFlag(kChampionAttributeNameTitle, true);
+
+ warning("MISSING CODE: F0292_CHAMPION_DrawState");
+ em._mousePointerBitmapUpdated = true;
+ em._secondaryMouseInput = gSecondaryMouseInput_ChampionInventory;
+ warning("MISSING CODE: set G0444_ps_SecondaryKeyboardInput");
+ warning("MISSING CODE: F0357_COMMAND_DiscardAllInput");
+}
+
+
} \ No newline at end of file