2007-05-30 21:56:52 +00:00
|
|
|
/* 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.
|
2005-04-05 18:08:02 +00:00
|
|
|
*
|
|
|
|
* 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
|
2008-01-05 12:45:14 +00:00
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
2005-04-05 18:08:02 +00:00
|
|
|
* GNU General Public License for more details.
|
|
|
|
|
|
|
|
* You should have received a copy of the GNU General Public License
|
2005-04-09 19:19:54 +00:00
|
|
|
* along with this program; if not, write to the Free Software
|
2005-10-18 01:30:26 +00:00
|
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
2005-04-05 18:08:02 +00:00
|
|
|
*
|
2006-02-11 10:11:37 +00:00
|
|
|
* $URL$
|
|
|
|
* $Id$
|
2005-04-05 18:08:02 +00:00
|
|
|
*
|
|
|
|
*/
|
2007-03-20 14:51:57 +00:00
|
|
|
|
2007-04-05 13:37:20 +00:00
|
|
|
#ifndef GOB_INTER_H
|
|
|
|
#define GOB_INTER_H
|
2005-04-05 15:07:40 +00:00
|
|
|
|
2006-01-10 11:30:23 +00:00
|
|
|
#include "gob/goblin.h"
|
2008-05-28 21:15:11 +00:00
|
|
|
#include "gob/variables.h"
|
2006-01-10 11:30:23 +00:00
|
|
|
|
2005-04-05 15:07:40 +00:00
|
|
|
namespace Gob {
|
|
|
|
|
2006-01-05 16:06:55 +00:00
|
|
|
// This is to help devices with small memory (PDA, smartphones, ...)
|
|
|
|
// to save abit of memory used by opcode names in the Scumm engine.
|
|
|
|
#ifndef REDUCE_MEMORY_USAGE
|
|
|
|
# define _OPCODE(ver, x) { &ver::x, #x }
|
|
|
|
#else
|
|
|
|
# define _OPCODE(ver, x) { &ver::x, "" }
|
|
|
|
#endif
|
|
|
|
|
2006-01-03 23:14:39 +00:00
|
|
|
class Inter {
|
|
|
|
public:
|
2007-03-20 14:51:57 +00:00
|
|
|
uint8 _terminate;
|
|
|
|
|
2006-01-04 01:23:20 +00:00
|
|
|
int16 *_breakFromLevel;
|
|
|
|
int16 *_nestLevel;
|
2005-04-05 15:07:40 +00:00
|
|
|
|
2007-03-20 14:51:57 +00:00
|
|
|
uint32 _soundEndTimeKey;
|
|
|
|
int16 _soundStopVal;
|
2006-11-20 13:03:30 +00:00
|
|
|
|
2008-05-28 21:15:11 +00:00
|
|
|
Variables *_variables;
|
|
|
|
|
2007-03-20 14:51:57 +00:00
|
|
|
void initControlVars(char full);
|
|
|
|
int16 load16();
|
2006-01-03 23:14:39 +00:00
|
|
|
char evalExpr(int16 *pRes);
|
2007-03-20 14:51:57 +00:00
|
|
|
bool evalBoolResult();
|
|
|
|
void renewTimeInVars();
|
|
|
|
void storeMouse();
|
|
|
|
void storeKey(int16 key);
|
|
|
|
|
2008-12-28 18:00:19 +00:00
|
|
|
void writeVar(uint32 offset, uint16 type, uint32 value);
|
|
|
|
|
2006-01-03 23:14:39 +00:00
|
|
|
void funcBlock(int16 retFlag);
|
|
|
|
void callSub(int16 retFlag);
|
2007-03-20 14:51:57 +00:00
|
|
|
|
2008-05-28 21:15:11 +00:00
|
|
|
void allocateVars(uint32 count);
|
|
|
|
void delocateVars();
|
|
|
|
|
2006-02-24 21:58:03 +00:00
|
|
|
virtual int16 loadSound(int16 slot) = 0;
|
2007-03-20 14:51:57 +00:00
|
|
|
virtual void animPalette() = 0;
|
2006-01-03 23:14:39 +00:00
|
|
|
|
|
|
|
Inter(GobEngine *vm);
|
2008-05-28 21:15:11 +00:00
|
|
|
virtual ~Inter();
|
2006-01-03 23:14:39 +00:00
|
|
|
|
|
|
|
protected:
|
2007-03-20 14:51:57 +00:00
|
|
|
struct OpFuncParams {
|
2007-04-02 11:05:09 +00:00
|
|
|
byte cmdCount;
|
|
|
|
byte counter;
|
2007-03-20 14:51:57 +00:00
|
|
|
int16 retFlag;
|
|
|
|
};
|
|
|
|
struct OpGobParams {
|
|
|
|
int16 extraData;
|
2008-07-12 15:21:38 +00:00
|
|
|
VariableReference retVarPtr;
|
2007-03-20 14:51:57 +00:00
|
|
|
Goblin::Gob_Object *objDesc;
|
|
|
|
};
|
|
|
|
|
|
|
|
bool _break;
|
|
|
|
|
|
|
|
int16 _animPalLowIndex[8];
|
|
|
|
int16 _animPalHighIndex[8];
|
|
|
|
int16 _animPalDir[8];
|
|
|
|
|
2008-12-18 02:48:15 +00:00
|
|
|
byte _varStack[300];
|
|
|
|
byte _varSizesStack[300];
|
|
|
|
int16 _varStackPos;
|
2006-01-03 23:14:39 +00:00
|
|
|
|
2007-01-31 16:23:34 +00:00
|
|
|
// The busy-wait detection in o1_keyFunc breaks fast scrolling in Ween
|
|
|
|
bool _noBusyWait;
|
|
|
|
|
2007-03-20 14:51:57 +00:00
|
|
|
GobEngine *_vm;
|
|
|
|
|
|
|
|
virtual void setupOpcodes() = 0;
|
2006-01-05 16:06:55 +00:00
|
|
|
virtual void executeDrawOpcode(byte i) = 0;
|
2007-03-20 14:51:57 +00:00
|
|
|
virtual bool executeFuncOpcode(byte i, byte j, OpFuncParams ¶ms) = 0;
|
|
|
|
virtual void executeGoblinOpcode(int i, OpGobParams ¶ms) = 0;
|
2006-01-05 16:06:55 +00:00
|
|
|
virtual const char *getOpcodeDrawDesc(byte i) = 0;
|
|
|
|
virtual const char *getOpcodeFuncDesc(byte i, byte j) = 0;
|
2006-01-14 09:57:20 +00:00
|
|
|
virtual const char *getOpcodeGoblinDesc(int i) = 0;
|
2007-02-04 15:45:15 +00:00
|
|
|
|
2007-04-02 11:05:09 +00:00
|
|
|
virtual void checkSwitchTable(byte **ppExec) = 0;
|
2007-03-20 14:51:57 +00:00
|
|
|
|
|
|
|
void o_drawNOP() {}
|
|
|
|
bool o_funcNOP(OpFuncParams ¶ms) { return false; }
|
|
|
|
void o_gobNOP(OpGobParams ¶ms) {}
|
2006-01-05 16:06:55 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
class Inter_v1 : public Inter {
|
|
|
|
public:
|
|
|
|
Inter_v1(GobEngine *vm);
|
2007-04-25 19:52:26 +00:00
|
|
|
virtual ~Inter_v1() {}
|
2007-03-20 14:51:57 +00:00
|
|
|
|
2006-02-24 21:58:03 +00:00
|
|
|
virtual int16 loadSound(int16 slot);
|
2007-03-20 14:51:57 +00:00
|
|
|
virtual void animPalette();
|
2006-01-05 16:06:55 +00:00
|
|
|
|
|
|
|
protected:
|
2007-03-20 14:51:57 +00:00
|
|
|
typedef void (Inter_v1::*OpcodeDrawProcV1)();
|
|
|
|
typedef bool (Inter_v1::*OpcodeFuncProcV1)(OpFuncParams &);
|
|
|
|
typedef void (Inter_v1::*OpcodeGoblinProcV1)(OpGobParams &);
|
2007-03-29 20:53:37 +00:00
|
|
|
struct OpcodeDrawEntryV1 {
|
2006-01-05 16:06:55 +00:00
|
|
|
OpcodeDrawProcV1 proc;
|
|
|
|
const char *desc;
|
2007-03-20 14:51:57 +00:00
|
|
|
};
|
2007-03-29 20:53:37 +00:00
|
|
|
struct OpcodeFuncEntryV1 {
|
2006-01-05 16:06:55 +00:00
|
|
|
OpcodeFuncProcV1 proc;
|
|
|
|
const char *desc;
|
2007-03-20 14:51:57 +00:00
|
|
|
};
|
2007-03-29 20:53:37 +00:00
|
|
|
struct OpcodeGoblinEntryV1 {
|
2006-01-10 11:30:23 +00:00
|
|
|
OpcodeGoblinProcV1 proc;
|
|
|
|
const char *desc;
|
2007-03-20 14:51:57 +00:00
|
|
|
};
|
2006-01-05 16:06:55 +00:00
|
|
|
const OpcodeDrawEntryV1 *_opcodesDrawV1;
|
|
|
|
const OpcodeFuncEntryV1 *_opcodesFuncV1;
|
2006-01-10 11:30:23 +00:00
|
|
|
const OpcodeGoblinEntryV1 *_opcodesGoblinV1;
|
|
|
|
static const int _goblinFuncLookUp[][2];
|
2006-01-05 16:06:55 +00:00
|
|
|
|
2007-03-20 14:51:57 +00:00
|
|
|
virtual void setupOpcodes();
|
2006-01-05 16:06:55 +00:00
|
|
|
virtual void executeDrawOpcode(byte i);
|
2007-03-20 14:51:57 +00:00
|
|
|
virtual bool executeFuncOpcode(byte i, byte j, OpFuncParams ¶ms);
|
|
|
|
virtual void executeGoblinOpcode(int i, OpGobParams ¶ms);
|
2006-01-05 16:06:55 +00:00
|
|
|
virtual const char *getOpcodeDrawDesc(byte i);
|
|
|
|
virtual const char *getOpcodeFuncDesc(byte i, byte j);
|
2006-01-14 09:57:20 +00:00
|
|
|
virtual const char *getOpcodeGoblinDesc(int i);
|
2007-03-20 14:51:57 +00:00
|
|
|
|
2007-04-02 11:05:09 +00:00
|
|
|
virtual void checkSwitchTable(byte **ppExec);
|
2007-03-20 14:51:57 +00:00
|
|
|
|
|
|
|
void o1_loadMult();
|
|
|
|
void o1_playMult();
|
|
|
|
void o1_freeMultKeys();
|
|
|
|
void o1_initCursor();
|
|
|
|
void o1_initCursorAnim();
|
|
|
|
void o1_clearCursorAnim();
|
|
|
|
void o1_setRenderFlags();
|
|
|
|
void o1_loadAnim();
|
|
|
|
void o1_freeAnim();
|
|
|
|
void o1_updateAnim();
|
|
|
|
void o1_initMult();
|
|
|
|
void o1_freeMult();
|
|
|
|
void o1_animate();
|
|
|
|
void o1_loadMultObject();
|
|
|
|
void o1_getAnimLayerInfo();
|
|
|
|
void o1_getObjAnimSize();
|
|
|
|
void o1_loadStatic();
|
|
|
|
void o1_freeStatic();
|
|
|
|
void o1_renderStatic();
|
|
|
|
void o1_loadCurLayer();
|
|
|
|
void o1_playCDTrack();
|
|
|
|
void o1_getCDTrackPos();
|
|
|
|
void o1_stopCD();
|
|
|
|
void o1_loadFontToSprite();
|
|
|
|
void o1_freeFontToSprite();
|
|
|
|
bool o1_callSub(OpFuncParams ¶ms);
|
|
|
|
bool o1_printTotText(OpFuncParams ¶ms);
|
|
|
|
bool o1_loadCursor(OpFuncParams ¶ms);
|
|
|
|
bool o1_switch(OpFuncParams ¶ms);
|
|
|
|
bool o1_repeatUntil(OpFuncParams ¶ms);
|
|
|
|
bool o1_whileDo(OpFuncParams ¶ms);
|
|
|
|
bool o1_if(OpFuncParams ¶ms);
|
|
|
|
bool o1_evaluateStore(OpFuncParams ¶ms);
|
|
|
|
bool o1_loadSpriteToPos(OpFuncParams ¶ms);
|
|
|
|
bool o1_printText(OpFuncParams ¶ms);
|
|
|
|
bool o1_loadTot(OpFuncParams ¶ms);
|
|
|
|
bool o1_palLoad(OpFuncParams ¶ms);
|
|
|
|
bool o1_keyFunc(OpFuncParams ¶ms);
|
|
|
|
bool o1_capturePush(OpFuncParams ¶ms);
|
|
|
|
bool o1_capturePop(OpFuncParams ¶ms);
|
|
|
|
bool o1_animPalInit(OpFuncParams ¶ms);
|
|
|
|
bool o1_drawOperations(OpFuncParams ¶ms);
|
|
|
|
bool o1_setcmdCount(OpFuncParams ¶ms);
|
|
|
|
bool o1_return(OpFuncParams ¶ms);
|
|
|
|
bool o1_renewTimeInVars(OpFuncParams ¶ms);
|
|
|
|
bool o1_speakerOn(OpFuncParams ¶ms);
|
|
|
|
bool o1_speakerOff(OpFuncParams ¶ms);
|
|
|
|
bool o1_putPixel(OpFuncParams ¶ms);
|
|
|
|
bool o1_goblinFunc(OpFuncParams ¶ms);
|
|
|
|
bool o1_createSprite(OpFuncParams ¶ms);
|
|
|
|
bool o1_freeSprite(OpFuncParams ¶ms);
|
|
|
|
bool o1_returnTo(OpFuncParams ¶ms);
|
|
|
|
bool o1_loadSpriteContent(OpFuncParams ¶ms);
|
|
|
|
bool o1_copySprite(OpFuncParams ¶ms);
|
|
|
|
bool o1_fillRect(OpFuncParams ¶ms);
|
|
|
|
bool o1_drawLine(OpFuncParams ¶ms);
|
|
|
|
bool o1_strToLong(OpFuncParams ¶ms);
|
|
|
|
bool o1_invalidate(OpFuncParams ¶ms);
|
|
|
|
bool o1_setBackDelta(OpFuncParams ¶ms);
|
|
|
|
bool o1_playSound(OpFuncParams ¶ms);
|
|
|
|
bool o1_stopSound(OpFuncParams ¶ms);
|
|
|
|
bool o1_loadSound(OpFuncParams ¶ms);
|
|
|
|
bool o1_freeSoundSlot(OpFuncParams ¶ms);
|
|
|
|
bool o1_waitEndPlay(OpFuncParams ¶ms);
|
|
|
|
bool o1_playComposition(OpFuncParams ¶ms);
|
|
|
|
bool o1_getFreeMem(OpFuncParams ¶ms);
|
|
|
|
bool o1_checkData(OpFuncParams ¶ms);
|
|
|
|
bool o1_prepareStr(OpFuncParams ¶ms);
|
|
|
|
bool o1_insertStr(OpFuncParams ¶ms);
|
|
|
|
bool o1_cutStr(OpFuncParams ¶ms);
|
|
|
|
bool o1_strstr(OpFuncParams ¶ms);
|
|
|
|
bool o1_istrlen(OpFuncParams ¶ms);
|
|
|
|
bool o1_setMousePos(OpFuncParams ¶ms);
|
|
|
|
bool o1_setFrameRate(OpFuncParams ¶ms);
|
|
|
|
bool o1_animatePalette(OpFuncParams ¶ms);
|
|
|
|
bool o1_animateCursor(OpFuncParams ¶ms);
|
|
|
|
bool o1_blitCursor(OpFuncParams ¶ms);
|
|
|
|
bool o1_loadFont(OpFuncParams ¶ms);
|
|
|
|
bool o1_freeFont(OpFuncParams ¶ms);
|
|
|
|
bool o1_readData(OpFuncParams ¶ms);
|
|
|
|
bool o1_writeData(OpFuncParams ¶ms);
|
|
|
|
bool o1_manageDataFile(OpFuncParams ¶ms);
|
|
|
|
void o1_setState(OpGobParams ¶ms);
|
|
|
|
void o1_setCurFrame(OpGobParams ¶ms);
|
|
|
|
void o1_setNextState(OpGobParams ¶ms);
|
|
|
|
void o1_setMultState(OpGobParams ¶ms);
|
|
|
|
void o1_setOrder(OpGobParams ¶ms);
|
|
|
|
void o1_setActionStartState(OpGobParams ¶ms);
|
|
|
|
void o1_setCurLookDir(OpGobParams ¶ms);
|
|
|
|
void o1_setType(OpGobParams ¶ms);
|
|
|
|
void o1_setNoTick(OpGobParams ¶ms);
|
|
|
|
void o1_setPickable(OpGobParams ¶ms);
|
|
|
|
void o1_setXPos(OpGobParams ¶ms);
|
|
|
|
void o1_setYPos(OpGobParams ¶ms);
|
|
|
|
void o1_setDoAnim(OpGobParams ¶ms);
|
|
|
|
void o1_setRelaxTime(OpGobParams ¶ms);
|
|
|
|
void o1_setMaxTick(OpGobParams ¶ms);
|
|
|
|
void o1_getState(OpGobParams ¶ms);
|
|
|
|
void o1_getCurFrame(OpGobParams ¶ms);
|
|
|
|
void o1_getNextState(OpGobParams ¶ms);
|
|
|
|
void o1_getMultState(OpGobParams ¶ms);
|
|
|
|
void o1_getOrder(OpGobParams ¶ms);
|
|
|
|
void o1_getActionStartState(OpGobParams ¶ms);
|
|
|
|
void o1_getCurLookDir(OpGobParams ¶ms);
|
|
|
|
void o1_getType(OpGobParams ¶ms);
|
|
|
|
void o1_getNoTick(OpGobParams ¶ms);
|
|
|
|
void o1_getPickable(OpGobParams ¶ms);
|
|
|
|
void o1_getObjMaxFrame(OpGobParams ¶ms);
|
|
|
|
void o1_getXPos(OpGobParams ¶ms);
|
|
|
|
void o1_getYPos(OpGobParams ¶ms);
|
|
|
|
void o1_getDoAnim(OpGobParams ¶ms);
|
|
|
|
void o1_getRelaxTime(OpGobParams ¶ms);
|
|
|
|
void o1_getMaxTick(OpGobParams ¶ms);
|
|
|
|
void o1_manipulateMap(OpGobParams ¶ms);
|
|
|
|
void o1_getItem(OpGobParams ¶ms);
|
|
|
|
void o1_manipulateMapIndirect(OpGobParams ¶ms);
|
|
|
|
void o1_getItemIndirect(OpGobParams ¶ms);
|
|
|
|
void o1_setPassMap(OpGobParams ¶ms);
|
|
|
|
void o1_setGoblinPosH(OpGobParams ¶ms);
|
|
|
|
void o1_getGoblinPosXH(OpGobParams ¶ms);
|
|
|
|
void o1_getGoblinPosYH(OpGobParams ¶ms);
|
|
|
|
void o1_setGoblinMultState(OpGobParams ¶ms);
|
|
|
|
void o1_setGoblinUnk14(OpGobParams ¶ms);
|
|
|
|
void o1_setItemIdInPocket(OpGobParams ¶ms);
|
|
|
|
void o1_setItemIndInPocket(OpGobParams ¶ms);
|
|
|
|
void o1_getItemIdInPocket(OpGobParams ¶ms);
|
|
|
|
void o1_getItemIndInPocket(OpGobParams ¶ms);
|
|
|
|
void o1_setGoblinPos(OpGobParams ¶ms);
|
|
|
|
void o1_setGoblinState(OpGobParams ¶ms);
|
|
|
|
void o1_setGoblinStateRedraw(OpGobParams ¶ms);
|
|
|
|
void o1_decRelaxTime(OpGobParams ¶ms);
|
|
|
|
void o1_getGoblinPosX(OpGobParams ¶ms);
|
|
|
|
void o1_getGoblinPosY(OpGobParams ¶ms);
|
|
|
|
void o1_clearPathExistence(OpGobParams ¶ms);
|
|
|
|
void o1_setGoblinVisible(OpGobParams ¶ms);
|
|
|
|
void o1_setGoblinInvisible(OpGobParams ¶ms);
|
|
|
|
void o1_getObjectIntersect(OpGobParams ¶ms);
|
|
|
|
void o1_getGoblinIntersect(OpGobParams ¶ms);
|
|
|
|
void o1_setItemPos(OpGobParams ¶ms);
|
|
|
|
void o1_loadObjects(OpGobParams ¶ms);
|
|
|
|
void o1_freeObjects(OpGobParams ¶ms);
|
|
|
|
void o1_animateObjects(OpGobParams ¶ms);
|
|
|
|
void o1_drawObjects(OpGobParams ¶ms);
|
|
|
|
void o1_loadMap(OpGobParams ¶ms);
|
|
|
|
void o1_moveGoblin(OpGobParams ¶ms);
|
|
|
|
void o1_switchGoblin(OpGobParams ¶ms);
|
|
|
|
void o1_loadGoblin(OpGobParams ¶ms);
|
|
|
|
void o1_writeTreatItem(OpGobParams ¶ms);
|
|
|
|
void o1_moveGoblin0(OpGobParams ¶ms);
|
|
|
|
void o1_setGoblinTarget(OpGobParams ¶ms);
|
|
|
|
void o1_setGoblinObjectsPos(OpGobParams ¶ms);
|
|
|
|
void o1_initGoblin(OpGobParams ¶ms);
|
|
|
|
|
|
|
|
void manipulateMap(int16 xPos, int16 yPos, int16 item);
|
2006-01-05 16:06:55 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
class Inter_v2 : public Inter_v1 {
|
|
|
|
public:
|
|
|
|
Inter_v2(GobEngine *vm);
|
2007-04-25 19:52:26 +00:00
|
|
|
virtual ~Inter_v2() {}
|
2007-03-20 14:51:57 +00:00
|
|
|
|
2006-02-24 21:58:03 +00:00
|
|
|
virtual int16 loadSound(int16 search);
|
2007-03-20 14:51:57 +00:00
|
|
|
virtual void animPalette();
|
2006-01-05 16:06:55 +00:00
|
|
|
|
|
|
|
protected:
|
2007-03-20 14:51:57 +00:00
|
|
|
typedef void (Inter_v2::*OpcodeDrawProcV2)();
|
|
|
|
typedef bool (Inter_v2::*OpcodeFuncProcV2)(OpFuncParams &);
|
|
|
|
typedef void (Inter_v2::*OpcodeGoblinProcV2)(OpGobParams &);
|
2007-03-29 20:53:37 +00:00
|
|
|
struct OpcodeDrawEntryV2 {
|
2006-01-05 16:06:55 +00:00
|
|
|
OpcodeDrawProcV2 proc;
|
|
|
|
const char *desc;
|
2007-03-20 14:51:57 +00:00
|
|
|
};
|
2007-03-29 20:53:37 +00:00
|
|
|
struct OpcodeFuncEntryV2 {
|
2006-01-05 16:06:55 +00:00
|
|
|
OpcodeFuncProcV2 proc;
|
|
|
|
const char *desc;
|
2007-03-20 14:51:57 +00:00
|
|
|
};
|
2007-03-29 20:53:37 +00:00
|
|
|
struct OpcodeGoblinEntryV2 {
|
2006-01-10 11:30:23 +00:00
|
|
|
OpcodeGoblinProcV2 proc;
|
|
|
|
const char *desc;
|
2007-03-20 14:51:57 +00:00
|
|
|
};
|
2006-01-05 16:06:55 +00:00
|
|
|
const OpcodeDrawEntryV2 *_opcodesDrawV2;
|
|
|
|
const OpcodeFuncEntryV2 *_opcodesFuncV2;
|
2006-01-10 11:30:23 +00:00
|
|
|
const OpcodeGoblinEntryV2 *_opcodesGoblinV2;
|
|
|
|
static const int _goblinFuncLookUp[][2];
|
2006-01-05 16:06:55 +00:00
|
|
|
|
2007-03-20 14:51:57 +00:00
|
|
|
virtual void setupOpcodes();
|
2006-01-05 16:06:55 +00:00
|
|
|
virtual void executeDrawOpcode(byte i);
|
2007-03-20 14:51:57 +00:00
|
|
|
virtual bool executeFuncOpcode(byte i, byte j, OpFuncParams ¶ms);
|
|
|
|
virtual void executeGoblinOpcode(int i, OpGobParams ¶ms);
|
2006-01-05 16:06:55 +00:00
|
|
|
virtual const char *getOpcodeDrawDesc(byte i);
|
|
|
|
virtual const char *getOpcodeFuncDesc(byte i, byte j);
|
2006-01-14 09:57:20 +00:00
|
|
|
virtual const char *getOpcodeGoblinDesc(int i);
|
2007-03-20 14:51:57 +00:00
|
|
|
|
2007-04-02 11:05:09 +00:00
|
|
|
virtual void checkSwitchTable(byte **ppExec);
|
2007-03-20 14:51:57 +00:00
|
|
|
|
|
|
|
void o2_playMult();
|
2007-07-24 06:11:38 +00:00
|
|
|
void o2_freeMultKeys();
|
2007-03-20 14:51:57 +00:00
|
|
|
void o2_setRenderFlags();
|
|
|
|
void o2_multSub();
|
|
|
|
void o2_initMult();
|
|
|
|
void o2_loadMultObject();
|
|
|
|
void o2_renderStatic();
|
|
|
|
void o2_loadCurLayer();
|
|
|
|
void o2_playCDTrack();
|
|
|
|
void o2_waitCDTrackEnd();
|
|
|
|
void o2_stopCD();
|
|
|
|
void o2_readLIC();
|
|
|
|
void o2_freeLIC();
|
|
|
|
void o2_getCDTrackPos();
|
|
|
|
void o2_loadFontToSprite();
|
|
|
|
void o2_totSub();
|
|
|
|
void o2_switchTotSub();
|
2008-12-18 02:48:15 +00:00
|
|
|
void o2_pushVars();
|
|
|
|
void o2_popVars();
|
2007-03-20 14:51:57 +00:00
|
|
|
void o2_loadMapObjects();
|
|
|
|
void o2_freeGoblins();
|
|
|
|
void o2_moveGoblin();
|
|
|
|
void o2_writeGoblinPos();
|
|
|
|
void o2_stopGoblin();
|
|
|
|
void o2_setGoblinState();
|
|
|
|
void o2_placeGoblin();
|
|
|
|
void o2_initScreen();
|
|
|
|
void o2_scroll();
|
|
|
|
void o2_setScrollOffset();
|
|
|
|
void o2_playImd();
|
|
|
|
void o2_getImdInfo();
|
|
|
|
void o2_openItk();
|
|
|
|
void o2_closeItk();
|
|
|
|
void o2_setImdFrontSurf();
|
|
|
|
void o2_resetImdFrontSurf();
|
|
|
|
bool o2_evaluateStore(OpFuncParams ¶ms);
|
|
|
|
bool o2_printText(OpFuncParams ¶ms);
|
|
|
|
bool o2_animPalInit(OpFuncParams ¶ms);
|
2007-07-26 01:01:00 +00:00
|
|
|
bool o2_addCollision(OpFuncParams ¶ms);
|
|
|
|
bool o2_freeCollision(OpFuncParams ¶ms);
|
2007-03-20 14:51:57 +00:00
|
|
|
bool o2_goblinFunc(OpFuncParams ¶ms);
|
|
|
|
bool o2_stopSound(OpFuncParams ¶ms);
|
|
|
|
bool o2_loadSound(OpFuncParams ¶ms);
|
|
|
|
bool o2_getFreeMem(OpFuncParams ¶ms);
|
|
|
|
bool o2_checkData(OpFuncParams ¶ms);
|
|
|
|
bool o2_readData(OpFuncParams ¶ms);
|
|
|
|
bool o2_writeData(OpFuncParams ¶ms);
|
|
|
|
void o2_loadInfogramesIns(OpGobParams ¶ms);
|
|
|
|
void o2_playInfogrames(OpGobParams ¶ms);
|
2007-04-05 15:38:30 +00:00
|
|
|
void o2_startInfogrames(OpGobParams ¶ms);
|
|
|
|
void o2_stopInfogrames(OpGobParams ¶ms);
|
2007-03-20 14:51:57 +00:00
|
|
|
void o2_handleGoblins(OpGobParams ¶ms);
|
2006-01-03 23:14:39 +00:00
|
|
|
};
|
2005-04-05 15:07:40 +00:00
|
|
|
|
2007-02-04 15:45:15 +00:00
|
|
|
class Inter_Bargon : public Inter_v2 {
|
|
|
|
public:
|
|
|
|
Inter_Bargon(GobEngine *vm);
|
2007-04-25 19:52:26 +00:00
|
|
|
virtual ~Inter_Bargon() {}
|
2007-02-04 15:45:15 +00:00
|
|
|
|
|
|
|
protected:
|
2007-03-20 14:51:57 +00:00
|
|
|
typedef void (Inter_Bargon::*OpcodeDrawProcBargon)();
|
|
|
|
typedef bool (Inter_Bargon::*OpcodeFuncProcBargon)(OpFuncParams &);
|
|
|
|
typedef void (Inter_Bargon::*OpcodeGoblinProcBargon)(OpGobParams &);
|
2007-03-29 20:53:37 +00:00
|
|
|
struct OpcodeDrawEntryBargon {
|
2007-02-04 15:45:15 +00:00
|
|
|
OpcodeDrawProcBargon proc;
|
|
|
|
const char *desc;
|
2007-04-05 13:37:20 +00:00
|
|
|
};
|
2007-03-29 20:53:37 +00:00
|
|
|
struct OpcodeFuncEntryBargon {
|
2007-02-04 15:45:15 +00:00
|
|
|
OpcodeFuncProcBargon proc;
|
|
|
|
const char *desc;
|
2007-04-05 13:37:20 +00:00
|
|
|
};
|
2007-03-29 20:53:37 +00:00
|
|
|
struct OpcodeGoblinEntryBargon {
|
2007-02-04 15:45:15 +00:00
|
|
|
OpcodeGoblinProcBargon proc;
|
|
|
|
const char *desc;
|
2007-04-05 13:37:20 +00:00
|
|
|
};
|
2007-02-04 15:45:15 +00:00
|
|
|
const OpcodeDrawEntryBargon *_opcodesDrawBargon;
|
|
|
|
const OpcodeFuncEntryBargon *_opcodesFuncBargon;
|
|
|
|
const OpcodeGoblinEntryBargon *_opcodesGoblinBargon;
|
|
|
|
static const int _goblinFuncLookUp[][2];
|
|
|
|
|
2007-03-20 14:51:57 +00:00
|
|
|
virtual void setupOpcodes();
|
2007-02-04 15:45:15 +00:00
|
|
|
virtual void executeDrawOpcode(byte i);
|
2007-03-20 14:51:57 +00:00
|
|
|
virtual bool executeFuncOpcode(byte i, byte j, OpFuncParams ¶ms);
|
|
|
|
virtual void executeGoblinOpcode(int i, OpGobParams ¶ms);
|
2007-02-04 15:45:15 +00:00
|
|
|
virtual const char *getOpcodeDrawDesc(byte i);
|
|
|
|
virtual const char *getOpcodeFuncDesc(byte i, byte j);
|
|
|
|
virtual const char *getOpcodeGoblinDesc(int i);
|
|
|
|
|
2007-03-20 14:51:57 +00:00
|
|
|
void oBargon_intro0(OpGobParams ¶ms);
|
|
|
|
void oBargon_intro1(OpGobParams ¶ms);
|
|
|
|
void oBargon_intro2(OpGobParams ¶ms);
|
|
|
|
void oBargon_intro3(OpGobParams ¶ms);
|
|
|
|
void oBargon_intro4(OpGobParams ¶ms);
|
|
|
|
void oBargon_intro5(OpGobParams ¶ms);
|
|
|
|
void oBargon_intro6(OpGobParams ¶ms);
|
|
|
|
void oBargon_intro7(OpGobParams ¶ms);
|
|
|
|
void oBargon_intro8(OpGobParams ¶ms);
|
|
|
|
void oBargon_intro9(OpGobParams ¶ms);
|
2007-02-04 15:45:15 +00:00
|
|
|
};
|
|
|
|
|
2007-04-05 13:37:20 +00:00
|
|
|
class Inter_v3 : public Inter_v2 {
|
|
|
|
public:
|
|
|
|
Inter_v3(GobEngine *vm);
|
2007-04-25 19:52:26 +00:00
|
|
|
virtual ~Inter_v3() {}
|
2007-04-05 13:37:20 +00:00
|
|
|
|
|
|
|
protected:
|
|
|
|
typedef void (Inter_v3::*OpcodeDrawProcV3)();
|
|
|
|
typedef bool (Inter_v3::*OpcodeFuncProcV3)(OpFuncParams &);
|
|
|
|
typedef void (Inter_v3::*OpcodeGoblinProcV3)(OpGobParams &);
|
|
|
|
struct OpcodeDrawEntryV3 {
|
|
|
|
OpcodeDrawProcV3 proc;
|
|
|
|
const char *desc;
|
|
|
|
};
|
|
|
|
struct OpcodeFuncEntryV3 {
|
|
|
|
OpcodeFuncProcV3 proc;
|
|
|
|
const char *desc;
|
|
|
|
};
|
|
|
|
struct OpcodeGoblinEntryV3 {
|
|
|
|
OpcodeGoblinProcV3 proc;
|
|
|
|
const char *desc;
|
|
|
|
};
|
|
|
|
const OpcodeDrawEntryV3 *_opcodesDrawV3;
|
|
|
|
const OpcodeFuncEntryV3 *_opcodesFuncV3;
|
|
|
|
const OpcodeGoblinEntryV3 *_opcodesGoblinV3;
|
|
|
|
static const int _goblinFuncLookUp[][2];
|
|
|
|
|
|
|
|
virtual void setupOpcodes();
|
|
|
|
virtual void executeDrawOpcode(byte i);
|
|
|
|
virtual bool executeFuncOpcode(byte i, byte j, OpFuncParams ¶ms);
|
|
|
|
virtual void executeGoblinOpcode(int i, OpGobParams ¶ms);
|
|
|
|
virtual const char *getOpcodeDrawDesc(byte i);
|
|
|
|
virtual const char *getOpcodeFuncDesc(byte i, byte j);
|
|
|
|
virtual const char *getOpcodeGoblinDesc(int i);
|
|
|
|
|
|
|
|
bool o3_getTotTextItemPart(OpFuncParams ¶ms);
|
2007-04-06 13:30:09 +00:00
|
|
|
bool o3_copySprite(OpFuncParams ¶ms);
|
2007-04-05 16:04:59 +00:00
|
|
|
bool o3_checkData(OpFuncParams ¶ms);
|
|
|
|
bool o3_readData(OpFuncParams ¶ms);
|
|
|
|
bool o3_writeData(OpFuncParams ¶ms);
|
2007-08-03 15:18:00 +00:00
|
|
|
|
|
|
|
void o3_wobble(OpGobParams ¶ms);
|
2007-04-05 13:37:20 +00:00
|
|
|
};
|
|
|
|
|
2007-07-25 22:55:00 +00:00
|
|
|
class Inter_v4 : public Inter_v3 {
|
2007-07-25 21:48:47 +00:00
|
|
|
public:
|
2007-07-25 22:55:00 +00:00
|
|
|
Inter_v4(GobEngine *vm);
|
|
|
|
virtual ~Inter_v4() {}
|
2007-07-25 21:48:47 +00:00
|
|
|
|
|
|
|
protected:
|
2007-07-25 22:55:00 +00:00
|
|
|
typedef void (Inter_v4::*OpcodeDrawProcV4)();
|
|
|
|
typedef bool (Inter_v4::*OpcodeFuncProcV4)(OpFuncParams &);
|
|
|
|
typedef void (Inter_v4::*OpcodeGoblinProcV4)(OpGobParams &);
|
|
|
|
struct OpcodeDrawEntryV4 {
|
|
|
|
OpcodeDrawProcV4 proc;
|
2007-07-25 21:48:47 +00:00
|
|
|
const char *desc;
|
|
|
|
};
|
2007-07-25 22:55:00 +00:00
|
|
|
struct OpcodeFuncEntryV4 {
|
|
|
|
OpcodeFuncProcV4 proc;
|
2007-07-25 21:48:47 +00:00
|
|
|
const char *desc;
|
|
|
|
};
|
2007-07-25 22:55:00 +00:00
|
|
|
struct OpcodeGoblinEntryV4 {
|
|
|
|
OpcodeGoblinProcV4 proc;
|
2007-07-25 21:48:47 +00:00
|
|
|
const char *desc;
|
|
|
|
};
|
2007-07-25 22:55:00 +00:00
|
|
|
const OpcodeDrawEntryV4 *_opcodesDrawV4;
|
|
|
|
const OpcodeFuncEntryV4 *_opcodesFuncV4;
|
|
|
|
const OpcodeGoblinEntryV4 *_opcodesGoblinV4;
|
2007-07-25 21:48:47 +00:00
|
|
|
static const int _goblinFuncLookUp[][2];
|
|
|
|
|
|
|
|
virtual void setupOpcodes();
|
|
|
|
virtual void executeDrawOpcode(byte i);
|
|
|
|
virtual bool executeFuncOpcode(byte i, byte j, OpFuncParams ¶ms);
|
|
|
|
virtual void executeGoblinOpcode(int i, OpGobParams ¶ms);
|
|
|
|
virtual const char *getOpcodeDrawDesc(byte i);
|
|
|
|
virtual const char *getOpcodeFuncDesc(byte i, byte j);
|
|
|
|
virtual const char *getOpcodeGoblinDesc(int i);
|
2007-07-30 18:35:16 +00:00
|
|
|
|
2008-05-17 23:55:04 +00:00
|
|
|
void o4_initScreen();
|
2007-07-30 18:35:16 +00:00
|
|
|
void o4_playVmdOrMusic();
|
2007-07-25 21:48:47 +00:00
|
|
|
};
|
|
|
|
|
2008-08-30 23:59:46 +00:00
|
|
|
class Inter_v5 : public Inter_v4 {
|
|
|
|
public:
|
|
|
|
Inter_v5(GobEngine *vm);
|
|
|
|
virtual ~Inter_v5() {}
|
|
|
|
|
|
|
|
protected:
|
|
|
|
typedef void (Inter_v5::*OpcodeDrawProcV5)();
|
|
|
|
typedef bool (Inter_v5::*OpcodeFuncProcV5)(OpFuncParams &);
|
|
|
|
typedef void (Inter_v5::*OpcodeGoblinProcV5)(OpGobParams &);
|
|
|
|
struct OpcodeDrawEntryV5 {
|
|
|
|
OpcodeDrawProcV5 proc;
|
|
|
|
const char *desc;
|
|
|
|
};
|
|
|
|
struct OpcodeFuncEntryV5 {
|
|
|
|
OpcodeFuncProcV5 proc;
|
|
|
|
const char *desc;
|
|
|
|
};
|
|
|
|
struct OpcodeGoblinEntryV5 {
|
|
|
|
OpcodeGoblinProcV5 proc;
|
|
|
|
const char *desc;
|
|
|
|
};
|
|
|
|
const OpcodeDrawEntryV5 *_opcodesDrawV5;
|
|
|
|
const OpcodeFuncEntryV5 *_opcodesFuncV5;
|
|
|
|
const OpcodeGoblinEntryV5 *_opcodesGoblinV5;
|
|
|
|
static const int _goblinFuncLookUp[][2];
|
|
|
|
|
|
|
|
virtual void setupOpcodes();
|
|
|
|
virtual void executeDrawOpcode(byte i);
|
|
|
|
virtual bool executeFuncOpcode(byte i, byte j, OpFuncParams ¶ms);
|
|
|
|
virtual void executeGoblinOpcode(int i, OpGobParams ¶ms);
|
|
|
|
virtual const char *getOpcodeDrawDesc(byte i);
|
|
|
|
virtual const char *getOpcodeFuncDesc(byte i, byte j);
|
|
|
|
virtual const char *getOpcodeGoblinDesc(int i);
|
|
|
|
|
|
|
|
byte _byte_8AA14;
|
|
|
|
|
|
|
|
void o5_deleteFile();
|
2008-12-04 00:52:12 +00:00
|
|
|
void o5_initScreen();
|
2008-08-30 23:59:46 +00:00
|
|
|
|
|
|
|
bool o5_istrlen(OpFuncParams ¶ms);
|
|
|
|
|
|
|
|
void o5_spaceShooter(OpGobParams ¶ms);
|
|
|
|
void o5_getSystemCDSpeed(OpGobParams ¶ms);
|
|
|
|
void o5_getSystemRAM(OpGobParams ¶ms);
|
|
|
|
void o5_getSystemCPUSpeed(OpGobParams ¶ms);
|
|
|
|
void o5_getSystemDrawSpeed(OpGobParams ¶ms);
|
|
|
|
void o5_totalSystemSpecs(OpGobParams ¶ms);
|
|
|
|
void o5_saveSystemSpecs(OpGobParams ¶ms);
|
|
|
|
void o5_loadSystemSpecs(OpGobParams ¶ms);
|
|
|
|
|
|
|
|
void o5_gob92(OpGobParams ¶ms);
|
|
|
|
void o5_gob95(OpGobParams ¶ms);
|
|
|
|
void o5_gob96(OpGobParams ¶ms);
|
|
|
|
void o5_gob97(OpGobParams ¶ms);
|
|
|
|
void o5_gob98(OpGobParams ¶ms);
|
|
|
|
void o5_gob100(OpGobParams ¶ms);
|
|
|
|
void o5_gob200(OpGobParams ¶ms);
|
|
|
|
};
|
|
|
|
|
2008-09-02 20:15:42 +00:00
|
|
|
class Inter_v6 : public Inter_v5 {
|
|
|
|
public:
|
|
|
|
Inter_v6(GobEngine *vm);
|
|
|
|
virtual ~Inter_v6() {}
|
|
|
|
|
|
|
|
protected:
|
|
|
|
typedef void (Inter_v6::*OpcodeDrawProcV6)();
|
|
|
|
typedef bool (Inter_v6::*OpcodeFuncProcV6)(OpFuncParams &);
|
|
|
|
typedef void (Inter_v6::*OpcodeGoblinProcV6)(OpGobParams &);
|
|
|
|
struct OpcodeDrawEntryV6 {
|
|
|
|
OpcodeDrawProcV6 proc;
|
|
|
|
const char *desc;
|
|
|
|
};
|
|
|
|
struct OpcodeFuncEntryV6 {
|
|
|
|
OpcodeFuncProcV6 proc;
|
|
|
|
const char *desc;
|
|
|
|
};
|
|
|
|
struct OpcodeGoblinEntryV6 {
|
|
|
|
OpcodeGoblinProcV6 proc;
|
|
|
|
const char *desc;
|
|
|
|
};
|
|
|
|
const OpcodeDrawEntryV6 *_opcodesDrawV6;
|
|
|
|
const OpcodeFuncEntryV6 *_opcodesFuncV6;
|
|
|
|
const OpcodeGoblinEntryV6 *_opcodesGoblinV6;
|
|
|
|
static const int _goblinFuncLookUp[][2];
|
|
|
|
|
2008-12-12 02:44:34 +00:00
|
|
|
bool _gotFirstPalette;
|
|
|
|
|
2008-09-02 20:15:42 +00:00
|
|
|
virtual void setupOpcodes();
|
|
|
|
virtual void executeDrawOpcode(byte i);
|
|
|
|
virtual bool executeFuncOpcode(byte i, byte j, OpFuncParams ¶ms);
|
|
|
|
virtual void executeGoblinOpcode(int i, OpGobParams ¶ms);
|
|
|
|
virtual const char *getOpcodeDrawDesc(byte i);
|
|
|
|
virtual const char *getOpcodeFuncDesc(byte i, byte j);
|
|
|
|
virtual const char *getOpcodeGoblinDesc(int i);
|
|
|
|
|
2008-12-15 00:27:05 +00:00
|
|
|
void o6_totSub();
|
2008-12-14 03:08:02 +00:00
|
|
|
void o6_playVmdOrMusic();
|
2008-12-17 00:41:00 +00:00
|
|
|
void o6_openItk();
|
2008-12-14 03:08:02 +00:00
|
|
|
|
2008-09-02 20:15:42 +00:00
|
|
|
bool o6_loadCursor(OpFuncParams ¶ms);
|
|
|
|
bool o6_evaluateStore(OpFuncParams ¶ms);
|
2008-12-11 03:06:43 +00:00
|
|
|
bool o6_palLoad(OpFuncParams ¶ms);
|
2008-12-13 16:35:14 +00:00
|
|
|
bool o6_freeCollision(OpFuncParams ¶ms);
|
2008-12-16 23:27:35 +00:00
|
|
|
bool o6_fillRect(OpFuncParams ¶ms);
|
2008-12-14 04:13:48 +00:00
|
|
|
|
|
|
|
void probe16bitMusic(char *fileName);
|
2008-09-02 20:15:42 +00:00
|
|
|
};
|
|
|
|
|
2007-03-20 14:51:57 +00:00
|
|
|
} // End of namespace Gob
|
2005-04-05 15:07:40 +00:00
|
|
|
|
2007-04-05 13:37:20 +00:00
|
|
|
#endif // GOB_INTER_H
|