diff options
-rw-r--r-- | engines/gob/gob.cpp | 13 | ||||
-rw-r--r-- | engines/gob/inter.h | 13 | ||||
-rw-r--r-- | engines/gob/inter_inca2.cpp | 66 | ||||
-rw-r--r-- | engines/gob/inter_v2.cpp | 12 | ||||
-rw-r--r-- | engines/gob/module.mk | 1 |
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 ¶ms); }; +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 ¶ms); +}; + 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 ¶ms) { + // 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 ¶ms) { } bool Inter_v2::o2_goblinFunc(OpFuncParams ¶ms) { - // 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 \ |