aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/scumm/he/intern_he.h26
-rw-r--r--engines/scumm/he/logic/moonbase_logic.cpp29
-rw-r--r--engines/scumm/he/logic_he.cpp2
-rw-r--r--engines/scumm/he/logic_he.h2
-rw-r--r--engines/scumm/he/moonbase/ai_main.h6
-rw-r--r--engines/scumm/he/wiz_he.cpp6
-rw-r--r--engines/scumm/scumm.h2
-rw-r--r--engines/scumm/scumm_v2.h1
-rw-r--r--engines/scumm/vars.cpp5
9 files changed, 45 insertions, 34 deletions
diff --git a/engines/scumm/he/intern_he.h b/engines/scumm/he/intern_he.h
index cce76319f8..7f7babc604 100644
--- a/engines/scumm/he/intern_he.h
+++ b/engines/scumm/he/intern_he.h
@@ -455,9 +455,6 @@ protected:
Sprite *_sprite;
public:
- Moonbase *_moonbase;
-
-public:
ScummEngine_v90he(OSystem *syst, const DetectorResult &dr);
~ScummEngine_v90he();
@@ -553,15 +550,8 @@ protected:
byte VAR_NUM_PALETTES;
byte VAR_NUM_UNK;
-public: // FIXME. TODO. Should be protected. Used by Moonbase
byte VAR_U32_VERSION;
byte VAR_U32_ARRAY_UNK;
- byte VAR_U32_USER_VAR_A;
- byte VAR_U32_USER_VAR_B;
- byte VAR_U32_USER_VAR_C;
- byte VAR_U32_USER_VAR_D;
- byte VAR_U32_USER_VAR_E;
- byte VAR_U32_USER_VAR_F;
};
class ScummEngine_v99he : public ScummEngine_v90he {
@@ -585,17 +575,25 @@ protected:
};
class ScummEngine_v100he : public ScummEngine_v99he {
+friend class AI;
+
protected:
ResType _heResType;
int32 _heResId;
byte _debugInputBuffer[256];
+
+public:
+ Moonbase *_moonbase;
+
public:
ScummEngine_v100he(OSystem *syst, const DetectorResult &dr);
~ScummEngine_v100he();
virtual void resetScumm();
+ virtual void setupScummVars();
+
protected:
virtual void setupOpcodes();
@@ -641,6 +639,14 @@ protected:
void o100_getSpriteInfo();
void o100_getWizData();
void o100_getVideoData();
+
+protected:
+ byte VAR_U32_USER_VAR_A;
+ byte VAR_U32_USER_VAR_B;
+ byte VAR_U32_USER_VAR_C;
+ byte VAR_U32_USER_VAR_D;
+ byte VAR_U32_USER_VAR_E;
+ byte VAR_U32_USER_VAR_F;
};
class ScummEngine_vCUPhe : public Engine {
diff --git a/engines/scumm/he/logic/moonbase_logic.cpp b/engines/scumm/he/logic/moonbase_logic.cpp
index ce5009f72e..9d9561abd1 100644
--- a/engines/scumm/he/logic/moonbase_logic.cpp
+++ b/engines/scumm/he/logic/moonbase_logic.cpp
@@ -33,7 +33,7 @@ namespace Scumm {
*/
class LogicHEmoonbase : public LogicHE {
public:
- LogicHEmoonbase(ScummEngine_v90he *vm) : LogicHE(vm) {}
+ LogicHEmoonbase(ScummEngine_v100he *vm) : LogicHE(vm) { _vm1 = vm; }
int versionID();
@@ -53,12 +53,15 @@ private:
void op_ai_reset(int op, int numArgs, int32 *args);
void op_ai_set_type(int op, int numArgs, int32 *args);
void op_ai_clean_up(int op, int numArgs, int32 *args);
+
+private:
+ ScummEngine_v100he *_vm1;
};
int LogicHEmoonbase::versionID() {
- if (_vm->_game.features & GF_DEMO)
+ if (_vm1->_game.features & GF_DEMO)
return -100;
- else if (strcmp(_vm->_game.variant, "1.1") == 0)
+ else if (strcmp(_vm1->_game.variant, "1.1") == 0)
return 110;
else
return 100;
@@ -184,9 +187,9 @@ void LogicHEmoonbase::op_dos_command(int op, int numArgs, int32 *args) {
void LogicHEmoonbase::op_set_fow_sentinel(int32 *args) {
debug(2, "op_set_fow_sentinel(%d, %d, %d)", args[0], args[1], args[2]);
- _vm->_moonbase->_fowSentinelImage = args[0];
- _vm->_moonbase->_fowSentinelState = args[1];
- _vm->_moonbase->_fowSentinelConditionBits = args[2];
+ _vm1->_moonbase->_fowSentinelImage = args[0];
+ _vm1->_moonbase->_fowSentinelState = args[1];
+ _vm1->_moonbase->_fowSentinelConditionBits = args[2];
}
void LogicHEmoonbase::op_set_fow_information(int op, int numArgs, int32 *args) {
@@ -200,7 +203,7 @@ void LogicHEmoonbase::op_set_fow_information(int op, int numArgs, int32 *args) {
debug(2, "%s", str.c_str());
- _vm->_moonbase->setFOWInfo(
+ _vm1->_moonbase->setFOWInfo(
args[0], // array
args[1], // array down dimension
args[2], // array across dimension
@@ -217,7 +220,7 @@ void LogicHEmoonbase::op_set_fow_information(int op, int numArgs, int32 *args) {
int LogicHEmoonbase::op_set_fow_image(int op, int numArgs, int32 *args) {
debug(2, "op_set_fow_image(%d)", args[0]);
- return _vm->_moonbase->setFOWImage(args[0]) ? 1 : 0;
+ return _vm1->_moonbase->setFOWImage(args[0]) ? 1 : 0;
}
void LogicHEmoonbase::op_ai_test_kludge(int op, int numArgs, int32 *args) {
@@ -227,25 +230,25 @@ void LogicHEmoonbase::op_ai_test_kludge(int op, int numArgs, int32 *args) {
int LogicHEmoonbase::op_ai_master_control_program(int op, int numArgs, int32 *args) {
warning("op_ai_master_control_program()");
- return _vm->_moonbase->_ai->masterControlProgram(numArgs, args);
+ return _vm1->_moonbase->_ai->masterControlProgram(numArgs, args);
}
void LogicHEmoonbase::op_ai_reset(int op, int numArgs, int32 *args) {
warning("op_ai_reset())");
- _vm->_moonbase->_ai->resetAI();
+ _vm1->_moonbase->_ai->resetAI();
}
void LogicHEmoonbase::op_ai_set_type(int op, int numArgs, int32 *args) {
warning("op_ai_set_type()");
- _vm->_moonbase->_ai->setAIType(numArgs, args);
+ _vm1->_moonbase->_ai->setAIType(numArgs, args);
}
void LogicHEmoonbase::op_ai_clean_up(int op, int numArgs, int32 *args) {
warning("op_ai_clean_up()");
- _vm->_moonbase->_ai->cleanUpAI();
+ _vm1->_moonbase->_ai->cleanUpAI();
}
-LogicHE *makeLogicHEmoonbase(ScummEngine_v90he *vm) {
+LogicHE *makeLogicHEmoonbase(ScummEngine_v100he *vm) {
return new LogicHEmoonbase(vm);
}
diff --git a/engines/scumm/he/logic_he.cpp b/engines/scumm/he/logic_he.cpp
index 366cd3be26..33f5c40464 100644
--- a/engines/scumm/he/logic_he.cpp
+++ b/engines/scumm/he/logic_he.cpp
@@ -102,7 +102,7 @@ LogicHE *LogicHE::makeLogicHE(ScummEngine_v90he *vm) {
return makeLogicHEbasketball(vm);
case GID_MOONBASE:
- return makeLogicHEmoonbase(vm);
+ return makeLogicHEmoonbase((ScummEngine_v100he *)vm);
default:
return new LogicHE(vm);
diff --git a/engines/scumm/he/logic_he.h b/engines/scumm/he/logic_he.h
index cd547f1616..5002ee9434 100644
--- a/engines/scumm/he/logic_he.h
+++ b/engines/scumm/he/logic_he.h
@@ -65,7 +65,7 @@ LogicHE *makeLogicHEfootball2002(ScummEngine_v90he *vm);
LogicHE *makeLogicHEsoccer(ScummEngine_v90he *vm);
LogicHE *makeLogicHEbaseball2001(ScummEngine_v90he *vm);
LogicHE *makeLogicHEbasketball(ScummEngine_v90he *vm);
-LogicHE *makeLogicHEmoonbase(ScummEngine_v90he *vm);
+LogicHE *makeLogicHEmoonbase(ScummEngine_v100he *vm);
} // End of namespace Scumm
diff --git a/engines/scumm/he/moonbase/ai_main.h b/engines/scumm/he/moonbase/ai_main.h
index 619ff1610a..b750ed0e21 100644
--- a/engines/scumm/he/moonbase/ai_main.h
+++ b/engines/scumm/he/moonbase/ai_main.h
@@ -28,7 +28,7 @@
namespace Scumm {
-class ScummEngine_v90he;
+class ScummEngine_v100he;
enum {
TERRAIN_TYPE_GOOD = 0,
@@ -83,7 +83,7 @@ enum {
class AI {
public:
- AI(ScummEngine_v90he *vm) : _vm(vm) {}
+ AI(ScummEngine_v100he *vm) : _vm(vm) {}
void resetAI();
void cleanUpAI();
@@ -191,7 +191,7 @@ public:
Common::Array<int> lastXCoord[5];
Common::Array<int> lastYCoord[5];
- ScummEngine_v90he *_vm;
+ ScummEngine_v100he *_vm;
};
} // End of namespace Scumm
diff --git a/engines/scumm/he/wiz_he.cpp b/engines/scumm/he/wiz_he.cpp
index 0ebfe67245..428960f673 100644
--- a/engines/scumm/he/wiz_he.cpp
+++ b/engines/scumm/he/wiz_he.cpp
@@ -1573,8 +1573,8 @@ uint8 *Wiz::drawWizImage(int resNum, int state, int maskNum, int maskState, int
}
if (_vm->_game.id == GID_MOONBASE &&
- ((ScummEngine_v90he *)_vm)->_moonbase->isFOW(resNum, state, conditionBits)) {
- ((ScummEngine_v90he *)_vm)->_moonbase->renderFOW(dst, dstPitch, dstType, cw, ch, flags);
+ ((ScummEngine_v100he *)_vm)->_moonbase->isFOW(resNum, state, conditionBits)) {
+ ((ScummEngine_v100he *)_vm)->_moonbase->renderFOW(dst, dstPitch, dstType, cw, ch, flags);
x1 = 0;
y1 = 0;
width = rScreen.width();
@@ -1814,7 +1814,7 @@ void Wiz::copy555WizImage(uint8 *dst, uint8 *wizd, int dstPitch, int dstType,
uint32 compID = READ_LE_UINT32(wizd);
if (compID == 0x12340102) {
- ((ScummEngine_v90he *)_vm)->_moonbase->blitT14WizImage(dst, dstw, dsth, dstPitch, clipBox, wizd, srcx, srcy, rawROP, paramROP);
+ ((ScummEngine_v100he *)_vm)->_moonbase->blitT14WizImage(dst, dstw, dsth, dstPitch, clipBox, wizd, srcx, srcy, rawROP, paramROP);
} else if (compID == 0x12340802) {
warning("Distorion codec");
} else if (compID == 0x12340902) {
diff --git a/engines/scumm/scumm.h b/engines/scumm/scumm.h
index a3fa329728..f9758aec33 100644
--- a/engines/scumm/scumm.h
+++ b/engines/scumm/scumm.h
@@ -700,8 +700,6 @@ protected:
void ignoreScriptWord() { fetchScriptWord(); }
void ignoreScriptByte() { fetchScriptByte(); }
void push(int a);
-
-public: // TODO. FIXME should be protected. Used by Moonbase
int pop();
virtual int readVar(uint var);
virtual void writeVar(uint var, int value);
diff --git a/engines/scumm/scumm_v2.h b/engines/scumm/scumm_v2.h
index 763bbc061c..2a9e7a96e6 100644
--- a/engines/scumm/scumm_v2.h
+++ b/engines/scumm/scumm_v2.h
@@ -78,7 +78,6 @@ protected:
void getResultPosIndirect();
virtual void getResultPos();
-public: // TODO. FIXME. Should be protected. Used by Moonbase
virtual int readVar(uint var);
virtual void writeVar(uint var, int value);
diff --git a/engines/scumm/vars.cpp b/engines/scumm/vars.cpp
index 5254aa4af2..e5ba4a68ee 100644
--- a/engines/scumm/vars.cpp
+++ b/engines/scumm/vars.cpp
@@ -340,6 +340,11 @@ void ScummEngine_v90he::setupScummVars() {
VAR_NUM_PALETTES = 130;
VAR_NUM_UNK = 131;
}
+}
+
+void ScummEngine_v100he::setupScummVars() {
+ ScummEngine_v90he::setupScummVars();
+
if (_game.id == GID_MOONBASE) {
VAR_U32_USER_VAR_A = 108;
VAR_U32_USER_VAR_B = 109;