aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSven Hesse2011-01-18 11:52:24 +0000
committerSven Hesse2011-01-18 11:52:24 +0000
commitd4357c5c3f37237094869f601cfaa07da310223d (patch)
tree33b6cc3e6d53d690182fac9aac74e51a55c408d3
parent1c63862f2bd13606899c28e556645f95bd374c72 (diff)
downloadscummvm-rg350-d4357c5c3f37237094869f601cfaa07da310223d.tar.gz
scummvm-rg350-d4357c5c3f37237094869f601cfaa07da310223d.tar.bz2
scummvm-rg350-d4357c5c3f37237094869f601cfaa07da310223d.zip
GOB: Give Inca2 its own Inter class
svn-id: r55296
-rw-r--r--engines/gob/gob.cpp13
-rw-r--r--engines/gob/inter.h13
-rw-r--r--engines/gob/inter_inca2.cpp66
-rw-r--r--engines/gob/inter_v2.cpp12
-rw-r--r--engines/gob/module.mk1
5 files changed, 92 insertions, 13 deletions
diff --git a/engines/gob/gob.cpp b/engines/gob/gob.cpp
index 5effa9bd90..4d093695d3 100644
--- a/engines/gob/gob.cpp
+++ b/engines/gob/gob.cpp
@@ -456,7 +456,6 @@ bool GobEngine::initGameParts() {
break;
case kGameTypeGob3:
- case kGameTypeInca2:
_init = new Init_v3(this);
_video = new Video_v2(this);
_inter = new Inter_v3(this);
@@ -468,6 +467,18 @@ bool GobEngine::initGameParts() {
_saveLoad = new SaveLoad_v3(this, _targetName.c_str(), SaveLoad_v3::kScreenshotTypeGob3);
break;
+ case kGameTypeInca2:
+ _init = new Init_v3(this);
+ _video = new Video_v2(this);
+ _inter = new Inter_Inca2(this);
+ _mult = new Mult_v2(this);
+ _draw = new Draw_v2(this);
+ _map = new Map_v2(this);
+ _goblin = new Goblin_v3(this);
+ _scenery = new Scenery_v2(this);
+ _saveLoad = new SaveLoad_v3(this, _targetName.c_str(), SaveLoad_v3::kScreenshotTypeGob3);
+ break;
+
case kGameTypeLostInTime:
_init = new Init_v3(this);
_video = new Video_v2(this);
diff --git a/engines/gob/inter.h b/engines/gob/inter.h
index c3567ce7ce..9254768055 100644
--- a/engines/gob/inter.h
+++ b/engines/gob/inter.h
@@ -474,6 +474,19 @@ protected:
void o3_wobble(OpGobParams &params);
};
+class Inter_Inca2 : public Inter_v3 {
+public:
+ Inter_Inca2(GobEngine *vm);
+ virtual ~Inter_Inca2() {}
+
+protected:
+ virtual void setupOpcodesDraw();
+ virtual void setupOpcodesFunc();
+ virtual void setupOpcodesGob();
+
+ bool oInca2_spaceShooter(OpFuncParams &params);
+};
+
class Inter_v4 : public Inter_v3 {
public:
Inter_v4(GobEngine *vm);
diff --git a/engines/gob/inter_inca2.cpp b/engines/gob/inter_inca2.cpp
new file mode 100644
index 0000000000..f90fb3f9da
--- /dev/null
+++ b/engines/gob/inter_inca2.cpp
@@ -0,0 +1,66 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#include "common/endian.h"
+
+#include "gob/gob.h"
+#include "gob/inter.h"
+#include "gob/game.h"
+#include "gob/script.h"
+
+namespace Gob {
+
+#define OPCODEVER Inter_Inca2
+#define OPCODEDRAW(i, x) _opcodesDraw[i]._OPCODEDRAW(OPCODEVER, x)
+#define OPCODEFUNC(i, x) _opcodesFunc[i]._OPCODEFUNC(OPCODEVER, x)
+#define OPCODEGOB(i, x) _opcodesGob[i]._OPCODEGOB(OPCODEVER, x)
+
+Inter_Inca2::Inter_Inca2(GobEngine *vm) : Inter_v3(vm) {
+}
+
+void Inter_Inca2::setupOpcodesDraw() {
+ Inter_v3::setupOpcodesDraw();
+}
+
+void Inter_Inca2::setupOpcodesFunc() {
+ Inter_v3::setupOpcodesFunc();
+
+ OPCODEFUNC(0x25, oInca2_spaceShooter);
+}
+
+void Inter_Inca2::setupOpcodesGob() {
+}
+
+bool Inter_Inca2::oInca2_spaceShooter(OpFuncParams &params) {
+ // TODO: Not yet implemented. We'll pretend we won the match for now
+ _vm->_game->_script->skip(4);
+ uint16 resVar = _vm->_game->_script->readUint16();
+ _vm->_game->_script->skip(4);
+
+ WRITE_VAR(resVar, 1);
+ return false;
+}
+
+} // End of namespace Gob
diff --git a/engines/gob/inter_v2.cpp b/engines/gob/inter_v2.cpp
index ad37f15abb..a2eceb96ba 100644
--- a/engines/gob/inter_v2.cpp
+++ b/engines/gob/inter_v2.cpp
@@ -1219,18 +1219,6 @@ bool Inter_v2::o2_removeHotspot(OpFuncParams &params) {
}
bool Inter_v2::o2_goblinFunc(OpFuncParams &params) {
- // TODO: In Inca 2, this is the big SpaceShoot0rz()-Opcode.
- // It's not yet implemented, so we fudge our way through
- // and pretend we've won.
- if (_vm->getGameType() == kGameTypeInca2) {
- _vm->_game->_script->skip(4);
- uint16 resVar = _vm->_game->_script->readUint16();
- _vm->_game->_script->skip(4);
-
- WRITE_VAR(resVar, 1);
- return false;
- }
-
OpGobParams gobParams;
int16 cmd;
diff --git a/engines/gob/module.mk b/engines/gob/module.mk
index 882a67bd45..20940adee6 100644
--- a/engines/gob/module.mk
+++ b/engines/gob/module.mk
@@ -32,6 +32,7 @@ MODULE_OBJS := \
inter_v2.o \
inter_bargon.o \
inter_fascin.o \
+ inter_inca2.o \
inter_playtoons.o \
inter_v3.o \
inter_v4.o \