aboutsummaryrefslogtreecommitdiff
path: root/engines/titanic
diff options
context:
space:
mode:
Diffstat (limited to 'engines/titanic')
-rw-r--r--engines/titanic/pet_control/pet_control_sub10.cpp4
-rw-r--r--engines/titanic/pet_control/pet_control_sub10.h15
-rw-r--r--engines/titanic/pet_control/pet_control_sub12.cpp41
-rw-r--r--engines/titanic/pet_control/pet_control_sub12.h22
-rw-r--r--engines/titanic/pet_control/pet_inventory.cpp46
-rw-r--r--engines/titanic/pet_control/pet_inventory.h22
-rw-r--r--engines/titanic/titanic.cpp8
-rw-r--r--engines/titanic/titanic.h7
8 files changed, 138 insertions, 27 deletions
diff --git a/engines/titanic/pet_control/pet_control_sub10.cpp b/engines/titanic/pet_control/pet_control_sub10.cpp
index 226ac4ec8b..59b9648fc1 100644
--- a/engines/titanic/pet_control/pet_control_sub10.cpp
+++ b/engines/titanic/pet_control/pet_control_sub10.cpp
@@ -33,8 +33,8 @@ void CPetControlSub10::proc8() {
error("TODO");
}
-void CPetControlSub10::proc9() {
- error("TODO");
+void CPetControlSub10::setup() {
+ warning("TODO: CPetControlSub10::setup");
}
void CPetControlSub10::proc10() {
diff --git a/engines/titanic/pet_control/pet_control_sub10.h b/engines/titanic/pet_control/pet_control_sub10.h
index e31937865b..625100a25f 100644
--- a/engines/titanic/pet_control/pet_control_sub10.h
+++ b/engines/titanic/pet_control/pet_control_sub10.h
@@ -37,16 +37,23 @@ protected:
int _field1C;
int _field20;
int _field24;
- CPetGfxElement _val1;
- CPetGfxElement _val2;
- CPetGfxElement _val3;
+ CPetGfxElement _selection;
+ CPetGfxElement _scrollLeft;
+ CPetGfxElement _scrollRight;
public:
CPetControlSub10();
virtual void proc8();
- virtual void proc9();
+
+ /**
+ * Set up the control
+ */
+ virtual void setup();
+
virtual void proc10();
virtual void proc11();
+
+ void set20(int val) { _field20 = val; }
};
} // End of namespace Titanic
diff --git a/engines/titanic/pet_control/pet_control_sub12.cpp b/engines/titanic/pet_control/pet_control_sub12.cpp
index 5daf826ae6..2bba6747b9 100644
--- a/engines/titanic/pet_control/pet_control_sub12.cpp
+++ b/engines/titanic/pet_control/pet_control_sub12.cpp
@@ -25,8 +25,7 @@
namespace Titanic {
CPetControlSub12::CPetControlSub12(int count) :
- _field18(0), _field1C(0), _field20(0), _field24(0),
- _field28(0), _field30(-1), _field34(0), _field38(-1),
+ _field18(0), _field30(-1), _field34(0), _field38(-1),
_field3C(0), _field40(0), _field44(0), _field48(0xff),
_field4C(0xff), _field50(0xff), _field54(0), _field58(0),
_field5C(200), _field60(0), _field64(0), _field68(0),
@@ -46,15 +45,44 @@ void CPetControlSub12::freeArrays() {
_array.clear();
}
+void CPetControlSub12::setup() {
+ for (int idx = 0; idx < (int)_array.size(); ++idx) {
+ _array[idx]._string1.clear();
+ setArrayStr2(idx, _field54, _field58, _field5C);
+ _array[idx]._string3.clear();
+ }
+
+ _field34 = 0;
+ _field18 = 0;
+}
+
+void CPetControlSub12::setArrayStr2(uint idx, int val1, int val2, int val3) {
+ char buffer[6];
+ if (!val1)
+ val1 = 1;
+ if (!val2)
+ val2 = 1;
+ if (!val3)
+ val3 = 1;
+
+ buffer[0] = 27;
+ buffer[1] = val1;
+ buffer[2] = val2;
+ buffer[3] = val3;
+ buffer[4] = 27;
+ buffer[5] = '\0';
+ _array[idx]._string2 = buffer;
+}
+
void CPetControlSub12::load(SimpleFile *file, int param) {
if (!param) {
int var1 = file->readNumber();
int var2 = file->readNumber();
uint count = file->readNumber();
- _field1C = file->readNumber();
- _field20 = file->readNumber();
- _field24 = file->readNumber();
- _field28 = file->readNumber();
+ _bounds.left = file->readNumber();
+ _bounds.top = file->readNumber();
+ _bounds.right = file->readNumber();
+ _bounds.bottom = file->readNumber();
_field3C = file->readNumber();
_field40 = file->readNumber();
_field44 = file->readNumber();
@@ -77,5 +105,4 @@ void CPetControlSub12::load(SimpleFile *file, int param) {
}
}
-
} // End of namespace Titanic
diff --git a/engines/titanic/pet_control/pet_control_sub12.h b/engines/titanic/pet_control/pet_control_sub12.h
index 5c0f0b397c..b5ff1b0663 100644
--- a/engines/titanic/pet_control/pet_control_sub12.h
+++ b/engines/titanic/pet_control/pet_control_sub12.h
@@ -37,10 +37,7 @@ private:
Common::Array<ArrayEntry> _array;
CString _string1;
int _field18;
- int _field1C;
- int _field20;
- int _field24;
- int _field28;
+ Rect _bounds;
int _field30;
int _field34;
int _field38;
@@ -65,10 +62,27 @@ private:
void setupArrays(int count);
void freeArrays();
+
+ void setArrayStr2(uint idx, int val1, int val2, int val3);
public:
CPetControlSub12(int count = 10);
+ /**
+ * Set up the control
+ */
+ void setup();
+
+ /**
+ * Load the data for the control
+ */
void load(SimpleFile *file, int param);
+
+ /**
+ * Set the bounds for the control
+ */
+ void setBounds(const Rect &bounds) { _bounds = bounds; }
+
+ void set70(int val) { _field70 = val; }
};
} // End of namespace Titanic
diff --git a/engines/titanic/pet_control/pet_inventory.cpp b/engines/titanic/pet_control/pet_inventory.cpp
index c0a93fa23b..0417092ea4 100644
--- a/engines/titanic/pet_control/pet_inventory.cpp
+++ b/engines/titanic/pet_control/pet_inventory.cpp
@@ -21,16 +21,58 @@
*/
#include "titanic/pet_control/pet_inventory.h"
+#include "titanic/pet_control/pet_control.h"
+#include "titanic/titanic.h"
namespace Titanic {
CPetInventory::CPetInventory() : CPetSection(),
_field28C(0), _field290(0), _field294(0), _field298(0) {
- for (int idx = 0; idx < 46; ++idx) {
- _valArray1[idx] = _valArray2[idx] = 0;
+ for (int idx = 0; idx < TOTAL_ITEMS; ++idx) {
+ _itemBackgrounds[idx] = _itemGlyphs[idx] = nullptr;
}
}
+bool CPetInventory::setup(CPetControl *petControl) {
+ return setPetControl(petControl) && setup();
+}
+
+bool CPetInventory::setup() {
+ _sub10.setup();
+ _sub12.setup();
+
+ // TODO
+ return true;
+}
+
+bool CPetInventory::setPetControl(CPetControl *petControl) {
+ if (!petControl)
+ return false;
+
+ _petControl = petControl;
+ _sub10.proc8();
+ _sub10.set20(28);
+
+ Rect tempRect(0, 0, 52, 52);
+ for (uint idx = 0; idx < TOTAL_ITEMS; ++idx) {
+ if (!g_vm->_itemNames[idx].empty()) {
+ CString name = "3Pet" + g_vm->_itemNames[idx];
+ _itemBackgrounds[idx] = petControl->getHiddenObject(name);
+ }
+
+ if (!g_vm->_itemObjects[idx].empty()) {
+ _itemGlyphs[idx] = petControl->getHiddenObject(g_vm->_itemObjects[idx]);
+ }
+ }
+
+ tempRect = Rect(0, 0, 580, 15);
+ tempRect.translate(32, 445);
+ _sub12.setBounds(tempRect);
+ _sub12.set70(0);
+
+ return true;
+}
+
void CPetInventory::save(SimpleFile *file, int indent) const {
file->writeNumberLine(_field298, indent);
}
diff --git a/engines/titanic/pet_control/pet_inventory.h b/engines/titanic/pet_control/pet_inventory.h
index ef295f1507..6f3fd62c78 100644
--- a/engines/titanic/pet_control/pet_inventory.h
+++ b/engines/titanic/pet_control/pet_inventory.h
@@ -30,20 +30,38 @@
namespace Titanic {
+/**
+ * Handles displaying the player's inventory in the PET
+ */
class CPetInventory : public CPetSection {
private:
CPetControlSub12 _sub12;
CPetControlSub10 _sub10;
- int _valArray1[46];
- int _valArray2[46];
+ CGameObject *_itemBackgrounds[46];
+ CGameObject *_itemGlyphs[46];
int _field28C;
int _field290;
int _field294;
int _field298;
+private:
+ /**
+ * Handles initial setup
+ */
+ bool setPetControl(CPetControl *petControl);
public:
CPetInventory();
/**
+ * Sets up the section
+ */
+ virtual bool setup(CPetControl *petControl);
+
+ /**
+ * Sets up the section
+ */
+ virtual bool setup();
+
+ /**
* Save the data for the class to file
*/
virtual void save(SimpleFile *file, int indent) const;
diff --git a/engines/titanic/titanic.cpp b/engines/titanic/titanic.cpp
index 9e24bbd4e9..03d50f6153 100644
--- a/engines/titanic/titanic.cpp
+++ b/engines/titanic/titanic.cpp
@@ -120,7 +120,7 @@ Common::Error TitanicEngine::run() {
}
void TitanicEngine::setItemNames() {
- static const char *const NAMES[46] = {
+ static const char *const NAMES[TOTAL_ITEMS] = {
"LeftArmWith", "LeftArmWithout", "RightArmWith", "RightArmWithout", "BridgeRed",
"BridgeYellow", "BridgeBlue", "BridgeGreen", "Parrot", "CentralCore", "BrainGreen",
"BrainYellow", "BrainRed", "BrainBlue", "ChickenGreasy", "ChickenPlain", "ChickenPurple",
@@ -130,11 +130,11 @@ void TitanicEngine::setItemNames() {
"Nose", "Perch", "PhonoCylinder", "PhonoCylinder1", "PhonoCylinder2", "PhonoCylinder3",
"Photo"
};
- for (uint idx = 0; idx < 46; ++idx)
+ for (uint idx = 0; idx < TOTAL_ITEMS; ++idx)
_itemNames[idx] = NAMES[idx];
// Item descriptions
- static const char *const DESCRIPTIONS[46] = {
+ static const char *const DESCRIPTIONS[TOTAL_ITEMS] = {
"The Maitre d'Bot's left arm holding a key", "The Maitre d'Bot's left arm",
"The Maitre d'Bot's right arm holding Titania's auditory center",
"The Maitre d'Bot's right arm", "Red Fuse", "Yellow Fuse", "Blue Fuse",
@@ -153,7 +153,7 @@ void TitanicEngine::setItemNames() {
"A phonograph cylinder", "A phonograph cylinder", "A phonograph cylinder",
"A photograph"
};
- for (uint idx = 0; idx < 46; ++idx)
+ for (uint idx = 0; idx < TOTAL_ITEMS; ++idx)
_itemDescriptions[idx] = DESCRIPTIONS[idx];
// Short descriptions.. maybe?
diff --git a/engines/titanic/titanic.h b/engines/titanic/titanic.h
index fff8865f15..6b85211194 100644
--- a/engines/titanic/titanic.h
+++ b/engines/titanic/titanic.h
@@ -64,6 +64,8 @@ enum TitanicDebugChannels {
#define ERROR_INTERMEDIATE 2
#define ERROR_DETAILED 3
+#define TOTAL_ITEMS 46
+
struct TitanicGameDescription;
class TitanicEngine;
@@ -109,8 +111,9 @@ public:
CMainGameWindow *_window;
Common::RandomSource _randomSource;
CGlobalMovies _movieList;
- CString _itemNames[46];
- CString _itemDescriptions[46];
+ CString _itemNames[TOTAL_ITEMS];
+ CString _itemDescriptions[TOTAL_ITEMS];
+ CString _itemObjects[TOTAL_ITEMS];
CString _itemShortDesc[40];
public:
TitanicEngine(OSystem *syst, const TitanicGameDescription *gameDesc);