diff options
Diffstat (limited to 'engines/scumm/scumm_v5.h')
-rw-r--r-- | engines/scumm/scumm_v5.h | 207 |
1 files changed, 207 insertions, 0 deletions
diff --git a/engines/scumm/scumm_v5.h b/engines/scumm/scumm_v5.h new file mode 100644 index 0000000000..763a6ee2af --- /dev/null +++ b/engines/scumm/scumm_v5.h @@ -0,0 +1,207 @@ +/* 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$ + * + */ + +#ifndef SCUMM_SCRIPT_V5_H +#define SCUMM_SCRIPT_V5_H + +#include "scumm/scumm.h" + +namespace Scumm { + +class ScummEngine_v5 : public ScummEngine { +protected: + typedef void (ScummEngine_v5::*OpcodeProcV5)(); + struct OpcodeEntryV5 { + OpcodeProcV5 proc; + const char *desc; + }; + + const OpcodeEntryV5 *_opcodesV5; + + uint16 _cursorImages[4][17]; + byte _cursorHotspots[2 * 4]; + + struct { + int x, y, w, h; + byte *buffer; + uint16 xStrips, yStrips; + bool isDrawn; + } _flashlight; + + char _saveLoadVarsFilename[256]; + +public: + ScummEngine_v5(OSystem *syst, const DetectorResult &dr); + + void clearFlashlight(); + + virtual void resetCursors(); + +protected: + virtual void setupOpcodes(); + virtual void executeOpcode(byte i); + virtual const char *getOpcodeDesc(byte i); + + virtual void scummLoop_handleActors(); + + virtual void setupScummVars(); + virtual void resetScummVars(); + virtual void decodeParseString(); + + virtual void saveOrLoad(Serializer *s); + + virtual void readMAXS(int blockSize); + + int getWordVararg(int *ptr); + void saveVars(); + void loadVars(); + void saveIQPoints(); + void loadIQPoints(); + + virtual int getVar(); + virtual int getVarOrDirectByte(byte mask); + virtual int getVarOrDirectWord(byte mask); + + virtual void animateCursor(); + + virtual void setBuiltinCursor(int index); + void redefineBuiltinCursorFromChar(int index, int chr); + void redefineBuiltinCursorHotspot(int index, int x, int y); + + void drawFlashlight(); + + /* Version 5 script opcodes */ + void o5_actorFollowCamera(); + void o5_actorFromPos(); + void o5_actorOps(); + void o5_add(); + void o5_and(); + void o5_animateActor(); + void o5_breakHere(); + void o5_chainScript(); + void o5_cursorCommand(); + void o5_cutscene(); + void o5_debug(); + void o5_decrement(); + void o5_delay(); + void o5_delayVariable(); + void o5_divide(); + void o5_doSentence(); + void o5_drawBox(); + void o5_drawObject(); + void o5_endCutscene(); + void o5_equalZero(); + void o5_expression(); + void o5_faceActor(); + void o5_findInventory(); + void o5_findObject(); + void o5_freezeScripts(); + void o5_getActorCostume(); + void o5_getActorElevation(); + void o5_getActorFacing(); + void o5_getActorMoving(); + void o5_getActorRoom(); + void o5_getActorScale(); + void o5_getActorWalkBox(); + void o5_getActorWidth(); + void o5_getActorX(); + void o5_getActorY(); + void o5_getAnimCounter(); + void o5_getClosestObjActor(); + void o5_getDist(); + void o5_getInventoryCount(); + void o5_getObjectOwner(); + void o5_getObjectState(); + void o5_getRandomNr(); + void o5_getStringWidth(); + void o5_getVerbEntrypoint(); + void o5_ifClassOfIs(); + void o5_ifNotState(); + void o5_ifState(); + void o5_increment(); + void o5_isActorInBox(); + void o5_isEqual(); + void o5_isGreater(); + void o5_isGreaterEqual(); + void o5_isLess(); + void o5_isNotEqual(); + void o5_isScriptRunning(); + void o5_isSoundRunning(); + void o5_jumpRelative(); + void o5_lessOrEqual(); + void o5_lights(); + void o5_loadRoom(); + void o5_loadRoomWithEgo(); + void o5_matrixOps(); + void o5_move(); + void o5_multiply(); + void o5_notEqualZero(); + void o5_oldRoomEffect(); + void o5_or(); + void o5_beginOverride(); + void o5_panCameraTo(); + void o5_pickupObject(); + void o5_pickupObjectOld(); + void o5_print(); + void o5_printEgo(); + void o5_pseudoRoom(); + void o5_putActor(); + void o5_putActorAtObject(); + void o5_putActorInRoom(); + void o5_systemOps(); + void o5_resourceRoutines(); + void o5_roomOps(); + void o5_saveLoadGame(); + void o5_saveLoadVars(); + void o5_saveRestoreVerbs(); + void o5_setCameraAt(); + void o5_setClass(); + void o5_setObjectName(); + void o5_setOwnerOf(); + void o5_setState(); + void o5_setVarRange(); + void o5_soundKludge(); + void o5_startMusic(); + void o5_startObject(); + void o5_startScript(); + void o5_startSound(); + void o5_stopMusic(); + void o5_stopObjectCode(); + void o5_stopObjectScript(); + void o5_stopScript(); + void o5_stopSound(); + void o5_stringOps(); + void o5_subtract(); + void o5_verbOps(); + void o5_wait(); + void o5_walkActorTo(); + void o5_walkActorToActor(); + void o5_walkActorToObject(); +}; + + +} // End of namespace Scumm + +#endif |