aboutsummaryrefslogtreecommitdiff
path: root/engines/fullpipe
diff options
context:
space:
mode:
Diffstat (limited to 'engines/fullpipe')
-rw-r--r--engines/fullpipe/fullpipe.cpp3
-rw-r--r--engines/fullpipe/fullpipe.h9
-rw-r--r--engines/fullpipe/gfx.cpp4
-rw-r--r--engines/fullpipe/statics.cpp8
-rw-r--r--engines/fullpipe/utils.cpp39
5 files changed, 57 insertions, 6 deletions
diff --git a/engines/fullpipe/fullpipe.cpp b/engines/fullpipe/fullpipe.cpp
index fef896d663..48dff107c8 100644
--- a/engines/fullpipe/fullpipe.cpp
+++ b/engines/fullpipe/fullpipe.cpp
@@ -269,6 +269,9 @@ Common::Error FullpipeEngine::run() {
_isSaveAllowed = false;
+ if (debugChannelSet(-1, kDebugXML))
+ loadGameObjH();
+
int scene = 0;
if (ConfMan.hasKey("boot_param"))
scene = convertScene(ConfMan.getInt("boot_param"));
diff --git a/engines/fullpipe/fullpipe.h b/engines/fullpipe/fullpipe.h
index 08c6de2621..ff843fe537 100644
--- a/engines/fullpipe/fullpipe.h
+++ b/engines/fullpipe/fullpipe.h
@@ -63,6 +63,8 @@ enum {
kDebugXML = 1 << 10
};
+#define MAXGAMEOBJH 10000
+
class BehaviorManager;
class BaseModalObject;
class GameLoader;
@@ -90,6 +92,8 @@ typedef Common::Array<int16> MovTable;
typedef Common::Array<int32> Palette;
typedef Common::Array<Common::Point> PointList;
+typedef Common::HashMap<uint16, Common::String> GameObjHMap;
+
int global_messageHandler1(ExCommand *cmd);
int global_messageHandler2(ExCommand *cmd);
int global_messageHandler3(ExCommand *cmd);
@@ -135,6 +139,9 @@ public:
GameProject *_gameProject;
bool loadGam(const char *fname, int scene = 0);
+ void loadGameObjH();
+ Common::String gameIdToStr(uint16 id);
+
GameVar *getGameLoaderGameVar();
InputController *getGameLoaderInputController();
@@ -347,6 +354,8 @@ public:
bool _stream2playing;
+ GameObjHMap _gameObjH;
+
public:
bool _isSaveAllowed;
diff --git a/engines/fullpipe/gfx.cpp b/engines/fullpipe/gfx.cpp
index 31e5c219c4..8407009679 100644
--- a/engines/fullpipe/gfx.cpp
+++ b/engines/fullpipe/gfx.cpp
@@ -235,8 +235,8 @@ GameObject::GameObject(GameObject *src) {
}
Common::String GameObject::toXML() {
- return Common::String::format("id=%d name=\"%s\" x=%d y=%d priority=%d f8=%d",
- _id, transCyrillic(_objectName), _ox, _oy, _priority, _field_8);
+ return Common::String::format("id=\"%s\" name=\"%s\" x=%d y=%d priority=%d f8=%d",
+ g_fp->gameIdToStr(_id).c_str(), transCyrillic(_objectName), _ox, _oy, _priority, _field_8);
}
bool GameObject::load(MfcArchive &file) {
diff --git a/engines/fullpipe/statics.cpp b/engines/fullpipe/statics.cpp
index 49cb3fde1f..4cee1c167f 100644
--- a/engines/fullpipe/statics.cpp
+++ b/engines/fullpipe/statics.cpp
@@ -1375,8 +1375,8 @@ bool Statics::load(MfcArchive &file) {
_staticsId = file.readUint16LE();
_staticsName = file.readPascalString();
- debugC(6, kDebugXML, "%% <STATICS id=%d name=\"%s\" %s />",
- _staticsId, transCyrillic(_staticsName), DynamicPhase::toXML().c_str());
+ debugC(6, kDebugXML, "%% <STATICS id=\"%s\" name=\"%s\" %s />",
+ g_fp->gameIdToStr(_staticsId).c_str(), transCyrillic(_staticsName), DynamicPhase::toXML().c_str());
_picture.load(file);
@@ -1622,8 +1622,8 @@ bool Movement::load(MfcArchive &file, StaticANIObject *ani) {
_framePosOffsets[_dynamicPhases.size() - 1].y = _m2y;
}
- debugC(6, kDebugXML, "%% <MOVEMENT %s staticsId=%d mX=%d my=%d staticsId2=%d m2x=%d m2y=%d>",
- GameObject::toXML().c_str(), staticsid, _mx, _my, staticsid2, _m2x, _m2y);
+ debugC(6, kDebugXML, "%% <MOVEMENT %s staticsId=\"%s\" mX=%d my=%d staticsId2=\"%s\" m2x=%d m2y=%d>",
+ GameObject::toXML().c_str(), g_fp->gameIdToStr(staticsid).c_str(), _mx, _my, g_fp->gameIdToStr(staticsid2).c_str(), _m2x, _m2y);
for (int i = 0; i < dynCount; i++)
debugC(6, kDebugXML, "%% <PHASE %s />", _dynamicPhases[i]->toXML().c_str());
diff --git a/engines/fullpipe/utils.cpp b/engines/fullpipe/utils.cpp
index f3f07b0514..c1cf912de6 100644
--- a/engines/fullpipe/utils.cpp
+++ b/engines/fullpipe/utils.cpp
@@ -546,4 +546,43 @@ byte *transCyrillic(const Common::String &str) {
return tmp;
}
+void FullpipeEngine::loadGameObjH() {
+ Common::File file;
+
+ if (!file.open("gameobj.h"))
+ return;
+
+ while(true) {
+ Common::String s = file.readLine();
+
+ if (file.eos())
+ break;
+
+ if (!s.hasPrefix("#define ")) {
+ warning("Bad read: <%s>", s.c_str());
+ continue;
+ }
+
+ int cnt = 0;
+ const char *ptr = &s.c_str()[8]; // Skip '#define ''
+
+ while (*ptr && *ptr != ' ') {
+ cnt++;
+ ptr++;
+ }
+
+ Common::String val(&s.c_str()[8], cnt);
+ int key = strtol(ptr, NULL, 10);
+
+ _gameObjH[(uint16)key] = val;
+ }
+}
+
+Common::String FullpipeEngine::gameIdToStr(uint16 id) {
+ if (_gameObjH.contains(id))
+ return _gameObjH[id];
+
+ return Common::String::format("%d", id);
+}
+
} // End of namespace Fullpipe