aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/dm/TODOs/methodtree.txt4
-rw-r--r--engines/dm/gfx.h3
-rw-r--r--engines/dm/inventory.cpp40
-rw-r--r--engines/dm/inventory.h2
4 files changed, 44 insertions, 5 deletions
diff --git a/engines/dm/TODOs/methodtree.txt b/engines/dm/TODOs/methodtree.txt
index a672a8a9f3..a352403ccb 100644
--- a/engines/dm/TODOs/methodtree.txt
+++ b/engines/dm/TODOs/methodtree.txt
@@ -48,9 +48,9 @@ F0280_CHAMPION_AddCandidateChampionToParty // done, so-so
F0351_INVENTORY_DrawChampionSkillsAndStatistics // skip -----------------
F0347_INVENTORY_DrawPanel // done
F0342_INVENTORY_DrawPanel_Object
- F0341_INVENTORY_DrawPanel_Scroll
+ F0341_INVENTORY_DrawPanel_Scroll // done
F0340_INVENTORY_DrawPanel_ScrollTextLine // done
- F0333_INVENTORY_OpenAndDrawChest
+ F0333_INVENTORY_OpenAndDrawChest // done
F0303_CHAMPION_GetSkillLevel
F0332_INVENTORY_DrawIconToViewport
F0336_INVENTORY_DrawPanel_BuildObjectAttributesString
diff --git a/engines/dm/gfx.h b/engines/dm/gfx.h
index 3ff4bf5c33..25ffbb220e 100644
--- a/engines/dm/gfx.h
+++ b/engines/dm/gfx.h
@@ -75,7 +75,8 @@ enum GraphicIndice {
kMenuActionAreaIndice = 10, // @ C010_GRAPHIC_MENU_ACTION_AREA
kMenuSpellAreLinesIndice = 11, // @ C011_GRAPHIC_MENU_SPELL_AREA_LINES
kMenuSpellAreaBackground = 9, // @ C009_GRAPHIC_MENU_SPELL_AREA_BACKGROUND
- kPanelOpenScrollIndice = 23 // @ C023_GRAPHIC_PANEL_OPEN_SCROLL
+ kPanelOpenScrollIndice = 23, // @ C023_GRAPHIC_PANEL_OPEN_SCROLL
+ kPanelOpenChestIndice = 25 // @ C025_GRAPHIC_PANEL_OPEN_CHEST
};
extern uint16 gPalSwoosh[16];
diff --git a/engines/dm/inventory.cpp b/engines/dm/inventory.cpp
index eb3192aae1..a64c489f45 100644
--- a/engines/dm/inventory.cpp
+++ b/engines/dm/inventory.cpp
@@ -31,6 +31,7 @@
#include "menus.h"
#include "gfx.h"
#include "text.h"
+#include "objectman.h"
namespace DM {
@@ -254,7 +255,7 @@ void InventoryMan::drawPanelScroll(Scroll* scroll) {
_vm->_dungeonMan->decodeText(stringFirstLine, Thing(scroll->getTextStringThingIndex()), (TextType)(kTextTypeScroll | kDecodeEvenIfInvisible));
char *charRed = stringFirstLine;
while (*charRed && (*charRed != '\n')) {
- charRed++;
+ charRed++;
}
*charRed = '\0';
dispMan.blitToScreen(dispMan.getBitmap(kPanelOpenScrollIndice), 144, 0, 0, gBoxPanel, kColorRed, gDungeonViewport);
@@ -265,7 +266,7 @@ void InventoryMan::drawPanelScroll(Scroll* scroll) {
warning("BUG0_47");
/* BUG0_47 Graphical glitch when you open a scroll. If there is a single line of text in a scroll
(with no carriage return) then charGreen points to undefined data. This may result in a graphical
- glitch and also corrupt other memory. This is not an issue in the original dungeons where all
+ glitch and also corrupt other memory. This is not an issue in the original dungeons where all
scrolls contain at least one carriage return character */
if (*charGreen == '\n') {
lineCount++;
@@ -294,4 +295,39 @@ void InventoryMan::drawPanelScroll(Scroll* scroll) {
}
}
+void InventoryMan::openAndDrawChest(Thing thingToOpen, Container* chest, bool isPressingEye) {
+ DisplayMan &dispMan = *_vm->_displayMan;
+ ObjectMan &objMan = *_vm->_objectMan;
+
+ if (_openChest == thingToOpen)
+ return;
+
+ warning("CHANGE8_09_FIX");
+ if (_openChest != Thing::_thingNone)
+ closeChest(); // CHANGE8_09_FIX
+
+ _openChest = thingToOpen;
+ if (!isPressingEye) {
+ objMan.drawIconInSlotBox(kSlotBoxInventoryActionHand, kIconIndiceContainerChestOpen);
+ }
+ dispMan.blitToScreen(dispMan.getBitmap(kPanelOpenChestIndice), 144, 0, 0, gBoxPanel, kColorRed);
+
+ int16 chestSlotIndex = 0;
+ Thing thing = chest->getSlot();
+ int16 thingCount = 0;
+ while (thing != Thing::_thingEndOfList) {
+ warning("CHANGE8_08_FIX");
+ if (++thingCount > 8)
+ break; // CHANGE8_08_FIX, make sure that no more than the first 8 objects in a chest are drawn
+
+ objMan.drawIconInSlotBox(chestSlotIndex + kSlotBoxChestFirstSlot, objMan.getIconIndex(thing));
+ _chestSlots[chestSlotIndex++] = thing;
+ thing = _vm->_dungeonMan->getNextThing(thing);
+ }
+ while (chestSlotIndex < 8) {
+ objMan.drawIconInSlotBox(chestSlotIndex + kSlotBoxChestFirstSlot, kIconIndiceNone);
+ _chestSlots[chestSlotIndex++] = Thing::_thingNone;
+ }
+}
+
}
diff --git a/engines/dm/inventory.h b/engines/dm/inventory.h
index 3f6783b37c..3232ab5d1d 100644
--- a/engines/dm/inventory.h
+++ b/engines/dm/inventory.h
@@ -35,6 +35,7 @@
namespace DM {
#define kChampionStatusBoxSpacing 69 // @ C69_CHAMPION_STATUS_BOX_SPACING
+#define kSlotBoxChestFirstSlot 38 // @ C38_SLOT_BOX_CHEST_FIRST_SLOT
extern Box gBoxPanel; // @ G0032_s_Graphic562_Box_Panel
@@ -68,6 +69,7 @@ public:
void closeChest(); // @ F0334_INVENTORY_CloseChest
void drawPanelScrollTextLine(int16 yPos, char *text); // @ F0340_INVENTORY_DrawPanel_ScrollTextLine
void drawPanelScroll(Scroll *scoll); // @ F0341_INVENTORY_DrawPanel_Scroll
+ void openAndDrawChest(Thing thingToOpen, Container *chest, bool isPressingEye); // @ F0333_INVENTORY_OpenAndDrawChest
};