aboutsummaryrefslogtreecommitdiff
path: root/engines/dm/objectman.cpp
diff options
context:
space:
mode:
authorBendegúz Nagy2016-06-28 18:04:32 +0200
committerBendegúz Nagy2016-08-26 23:02:22 +0200
commit1f73d771ce31223dc94743432ec8368905d408f1 (patch)
tree868486c65bc9deff2ccb4e48be06e2e53a98e83a /engines/dm/objectman.cpp
parent792f48858baec961fde793e5d80222e2bb03525d (diff)
downloadscummvm-rg350-1f73d771ce31223dc94743432ec8368905d408f1.tar.gz
scummvm-rg350-1f73d771ce31223dc94743432ec8368905d408f1.tar.bz2
scummvm-rg350-1f73d771ce31223dc94743432ec8368905d408f1.zip
DM: F0342_INVENTORY_DrawPanel_Object, F0031_OBJECT_LoadNames
Diffstat (limited to 'engines/dm/objectman.cpp')
-rw-r--r--engines/dm/objectman.cpp119
1 files changed, 74 insertions, 45 deletions
diff --git a/engines/dm/objectman.cpp b/engines/dm/objectman.cpp
index c92427bf4b..c83c16c9f6 100644
--- a/engines/dm/objectman.cpp
+++ b/engines/dm/objectman.cpp
@@ -43,52 +43,81 @@ int16 gIconGraphicFirstIndex[7] = { // G0026_ai_Graphic562_IconGraphicFirstIconI
ObjectMan::ObjectMan(DMEngine *vm) : _vm(vm) {
/* 8 for champion hands in status boxes, 30 for champion inventory, 8 for chest */
- _slotBoxes[0] = SlotBox(4, 10, 0); /* Champion Status Box 0 Ready Hand */
- _slotBoxes[1] = SlotBox(24, 10, 0); /* Champion Status Box 0 Action Hand */
- _slotBoxes[2] = SlotBox(73, 10, 0); /* Champion Status Box 1 Ready Hand */
- _slotBoxes[3] = SlotBox(93, 10, 0); /* Champion Status Box 1 Action Hand */
- _slotBoxes[4] = SlotBox(142, 10, 0); /* Champion Status Box 2 Ready Hand */
- _slotBoxes[5] = SlotBox(162, 10, 0); /* Champion Status Box 2 Action Hand */
- _slotBoxes[6] = SlotBox(211, 10, 0); /* Champion Status Box 3 Ready Hand */
- _slotBoxes[7] = SlotBox(231, 10, 0); /* Champion Status Box 3 Action Hand */
- _slotBoxes[8] = SlotBox(6, 53, 0); /* Ready Hand */
- _slotBoxes[9] = SlotBox(62, 53, 0); /* Action Hand */
- _slotBoxes[10] = SlotBox(34, 26, 0); /* Head */
- _slotBoxes[11] = SlotBox(34, 46, 0); /* Torso */
- _slotBoxes[12] = SlotBox(34, 66, 0); /* Legs */
- _slotBoxes[13] = SlotBox(34, 86, 0); /* Feet */
- _slotBoxes[14] = SlotBox(6, 90, 0); /* Pouch 2 */
- _slotBoxes[15] = SlotBox(79, 73, 0); /* Quiver Line2 1 */
- _slotBoxes[16] = SlotBox(62, 90, 0); /* Quiver Line1 2 */
- _slotBoxes[17] = SlotBox(79, 90, 0); /* Quiver Line2 2 */
- _slotBoxes[18] = SlotBox(6, 33, 0); /* Neck */
- _slotBoxes[19] = SlotBox(6, 73, 0); /* Pouch 1 */
- _slotBoxes[20] = SlotBox(62, 73, 0); /* Quiver Line1 1 */
- _slotBoxes[21] = SlotBox(66, 33, 0); /* Backpack Line1 1 */
- _slotBoxes[22] = SlotBox(83, 16, 0); /* Backpack Line2 2 */
- _slotBoxes[23] = SlotBox(100, 16, 0); /* Backpack Line2 3 */
- _slotBoxes[24] = SlotBox(117, 16, 0); /* Backpack Line2 4 */
- _slotBoxes[25] = SlotBox(134, 16, 0); /* Backpack Line2 5 */
- _slotBoxes[26] = SlotBox(151, 16, 0); /* Backpack Line2 6 */
- _slotBoxes[27] = SlotBox(168, 16, 0); /* Backpack Line2 7 */
- _slotBoxes[28] = SlotBox(185, 16, 0); /* Backpack Line2 8 */
- _slotBoxes[29] = SlotBox(202, 16, 0); /* Backpack Line2 9 */
- _slotBoxes[30] = SlotBox(83, 33, 0); /* Backpack Line1 2 */
- _slotBoxes[31] = SlotBox(100, 33, 0); /* Backpack Line1 3 */
- _slotBoxes[32] = SlotBox(117, 33, 0); /* Backpack Line1 4 */
- _slotBoxes[33] = SlotBox(134, 33, 0); /* Backpack Line1 5 */
- _slotBoxes[34] = SlotBox(151, 33, 0); /* Backpack Line1 6 */
- _slotBoxes[35] = SlotBox(168, 33, 0); /* Backpack Line1 7 */
- _slotBoxes[36] = SlotBox(185, 33, 0); /* Backpack Line1 8 */
- _slotBoxes[37] = SlotBox(202, 33, 0); /* Backpack Line1 9 */
- _slotBoxes[38] = SlotBox(117, 59, 0); /* Chest 1 */
- _slotBoxes[39] = SlotBox(106, 76, 0); /* Chest 2 */
- _slotBoxes[40] = SlotBox(111, 93, 0); /* Chest 3 */
- _slotBoxes[41] = SlotBox(128, 98, 0); /* Chest 4 */
+ _slotBoxes[0] = SlotBox(4, 10, 0); /* Champion Status Box 0 Ready Hand */
+ _slotBoxes[1] = SlotBox(24, 10, 0); /* Champion Status Box 0 Action Hand */
+ _slotBoxes[2] = SlotBox(73, 10, 0); /* Champion Status Box 1 Ready Hand */
+ _slotBoxes[3] = SlotBox(93, 10, 0); /* Champion Status Box 1 Action Hand */
+ _slotBoxes[4] = SlotBox(142, 10, 0); /* Champion Status Box 2 Ready Hand */
+ _slotBoxes[5] = SlotBox(162, 10, 0); /* Champion Status Box 2 Action Hand */
+ _slotBoxes[6] = SlotBox(211, 10, 0); /* Champion Status Box 3 Ready Hand */
+ _slotBoxes[7] = SlotBox(231, 10, 0); /* Champion Status Box 3 Action Hand */
+ _slotBoxes[8] = SlotBox(6, 53, 0); /* Ready Hand */
+ _slotBoxes[9] = SlotBox(62, 53, 0); /* Action Hand */
+ _slotBoxes[10] = SlotBox(34, 26, 0); /* Head */
+ _slotBoxes[11] = SlotBox(34, 46, 0); /* Torso */
+ _slotBoxes[12] = SlotBox(34, 66, 0); /* Legs */
+ _slotBoxes[13] = SlotBox(34, 86, 0); /* Feet */
+ _slotBoxes[14] = SlotBox(6, 90, 0); /* Pouch 2 */
+ _slotBoxes[15] = SlotBox(79, 73, 0); /* Quiver Line2 1 */
+ _slotBoxes[16] = SlotBox(62, 90, 0); /* Quiver Line1 2 */
+ _slotBoxes[17] = SlotBox(79, 90, 0); /* Quiver Line2 2 */
+ _slotBoxes[18] = SlotBox(6, 33, 0); /* Neck */
+ _slotBoxes[19] = SlotBox(6, 73, 0); /* Pouch 1 */
+ _slotBoxes[20] = SlotBox(62, 73, 0); /* Quiver Line1 1 */
+ _slotBoxes[21] = SlotBox(66, 33, 0); /* Backpack Line1 1 */
+ _slotBoxes[22] = SlotBox(83, 16, 0); /* Backpack Line2 2 */
+ _slotBoxes[23] = SlotBox(100, 16, 0); /* Backpack Line2 3 */
+ _slotBoxes[24] = SlotBox(117, 16, 0); /* Backpack Line2 4 */
+ _slotBoxes[25] = SlotBox(134, 16, 0); /* Backpack Line2 5 */
+ _slotBoxes[26] = SlotBox(151, 16, 0); /* Backpack Line2 6 */
+ _slotBoxes[27] = SlotBox(168, 16, 0); /* Backpack Line2 7 */
+ _slotBoxes[28] = SlotBox(185, 16, 0); /* Backpack Line2 8 */
+ _slotBoxes[29] = SlotBox(202, 16, 0); /* Backpack Line2 9 */
+ _slotBoxes[30] = SlotBox(83, 33, 0); /* Backpack Line1 2 */
+ _slotBoxes[31] = SlotBox(100, 33, 0); /* Backpack Line1 3 */
+ _slotBoxes[32] = SlotBox(117, 33, 0); /* Backpack Line1 4 */
+ _slotBoxes[33] = SlotBox(134, 33, 0); /* Backpack Line1 5 */
+ _slotBoxes[34] = SlotBox(151, 33, 0); /* Backpack Line1 6 */
+ _slotBoxes[35] = SlotBox(168, 33, 0); /* Backpack Line1 7 */
+ _slotBoxes[36] = SlotBox(185, 33, 0); /* Backpack Line1 8 */
+ _slotBoxes[37] = SlotBox(202, 33, 0); /* Backpack Line1 9 */
+ _slotBoxes[38] = SlotBox(117, 59, 0); /* Chest 1 */
+ _slotBoxes[39] = SlotBox(106, 76, 0); /* Chest 2 */
+ _slotBoxes[40] = SlotBox(111, 93, 0); /* Chest 3 */
+ _slotBoxes[41] = SlotBox(128, 98, 0); /* Chest 4 */
_slotBoxes[42] = SlotBox(145, 101, 0); /* Chest 5 */
_slotBoxes[43] = SlotBox(162, 103, 0); /* Chest 6 */
_slotBoxes[44] = SlotBox(179, 104, 0); /* Chest 7 */
_slotBoxes[45] = SlotBox(196, 105, 0); /* Chest 8 */
+
+ _objectIconForMousePointer = nullptr;
+}
+
+ObjectMan::~ObjectMan() {
+ delete[] _objectIconForMousePointer;
+ delete[] _objectNames[0];
+}
+
+#define kObjectNamesGraphicIndice 556 // @ C556_GRAPHIC_OBJECT_NAMES
+
+void ObjectMan::loadObjectNames() {
+ DisplayMan &dispMan = *_vm->_displayMan;
+
+ _objectIconForMousePointer = new byte[16 * 16];
+
+ char *objectNames = new char[dispMan.getCompressedDataSize(kObjectNamesGraphicIndice) + kObjectNameCount];
+ Common::MemoryReadStream stream = dispMan.getCompressedData(kObjectNamesGraphicIndice);
+
+ for (uint16 objNameIndex = 0; objNameIndex < kObjectNameCount; ++objNameIndex) {
+ _objectNames[objNameIndex] = objectNames;
+
+ byte tmpByte;
+ for (tmpByte = stream.readByte(); !(tmpByte & 0x80); tmpByte = stream.readByte()) // last char of object name has 7th bit on
+ *objectNames++ = tmpByte; // write while not last char
+
+ *objectNames++ = tmpByte & 0x7F; // write without the 7th bit
+ *objectNames++ = '\0'; // terminate string
+ }
}
IconIndice ObjectMan::getObjectType(Thing thing) {
@@ -109,7 +138,7 @@ IconIndice ObjectMan::getIconIndex(Thing thing) {
if ((iconIndex != kIconIndiceNone) &&
(((iconIndex < kIconIndiceWeaponDagger) && (iconIndex >= kIconIndiceJunkCompassNorth)) || // < instead of <= is no error
- ((iconIndex >= kIconIndicePotionMaPotionMonPotion) && (iconIndex <= kIconIndicePotionWaterFlask)) ||
+ ((iconIndex >= kIconIndicePotionMaPotionMonPotion) && (iconIndex <= kIconIndicePotionWaterFlask)) ||
(iconIndex == kIconIndicePotionEmptyFlask))
) {
uint16 *rawType = _vm->_dungeonMan->getThingData(thing);
@@ -178,9 +207,9 @@ void ObjectMan::drawIconInSlotBox(uint16 slotBoxIndex, int16 iconIndex) {
Box box;
box._x1 = slotBox->_x;
box._y1 = slotBox->_y;
- box._x2 = box._x1 + 15 + 1;
+ box._x2 = box._x1 + 15 + 1;
box._y2 = box._y1 + 15 + 1;
-
+
uint16 iconGraphicIndex;
for (iconGraphicIndex = 0; iconGraphicIndex < 7; ++iconGraphicIndex) {
if (gIconGraphicFirstIndex[iconGraphicIndex] > iconIndex) {