1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184
|
/* 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.
*
*/
#ifndef TOLTECS_SCRIPT_H
#define TOLTECS_SCRIPT_H
#include "common/func.h"
namespace Toltecs {
const int kMaxScriptSlots = 50;
const int kScriptStackSize = 4096 + 4;
enum VarType {
vtByte,
vtWord
};
typedef Common::Functor0<void> ScriptFunction;
class ScriptInterpreter {
public:
ScriptInterpreter(ToltecsEngine *vm);
~ScriptInterpreter();
void loadScript(uint resIndex, uint slotIndex);
void setMainScript(uint slotIndex);
void runScript();
byte *getSlotData(int slotIndex) const { return _slots[slotIndex].data; }
int16 getGameVar(uint variable);
void setGameVar(uint variable, int16 value);
void saveState(Common::WriteStream *out);
void loadState(Common::ReadStream *in);
void setSwitchLocalDataNear(bool newValue) { _switchLocalDataNear = newValue; }
protected:
struct ScriptRegs {
int16 reg0;
int16 reg1;
int16 reg2;
int16 reg3;
int16 reg4;
int16 reg5;
int16 reg6;
int16 sp;
int16 reg8;
};
struct ScriptSlot {
byte *data;
int32 size;
uint resIndex;
};
ToltecsEngine *_vm;
Common::Array<const ScriptFunction *> _scriptFuncs;
Common::Array<const char *> _scriptFuncNames;
byte *_stack;
byte *_code, *_subCode;
byte *_localData;
bool _switchLocalDataNear, _switchLocalDataFar, _switchLocalDataToStack;
bool _cmpBitTest;
ScriptSlot _slots[kMaxScriptSlots];
ScriptRegs _regs;
int16 _savedSp;
byte readByte();
int16 readInt16();
void execOpcode(byte opcode);
void setupScriptFunctions();
void execScriptFunction(uint16 index);
byte arg8(int16 offset);
int16 arg16(int16 offset);
void pushInt16(int16 value);
int16 popInt16();
void localWrite8(int16 offset, byte value);
byte localRead8(int16 offset);
void localWrite16(int16 offset, int16 value);
int16 localRead16(int16 offset);
byte *localPtr(int16 offset);
void sfNop();
void sfGetGameVar();
void sfSetGameVar();
void sfUpdateScreen();
void sfGetRandomNumber();
void sfDrawGuiTextMulti();
void sfUpdateVerbLine();
void sfSetFontColor();
void sfGetTalkTextDuration();
void sfTalk();
void sfFindPaletteFragment();
void sfClearPaletteFragments();
void sfAddPaletteFragment();
void sfSetDeltaAnimPalette();
void sfSetUnkPaletteEffect();
void sfBuildColorTransTable();
void sfSetDeltaMainPalette();
void sfLoadScript();
void sfRegisterFont();
void sfLoadAddPalette();
void sfLoadScene();
void sfSetGuiHeight();
void sfFindMouseInRectIndex1();
void sfFindMouseInRectIndex2();
void sfDrawGuiImage();
void sfAddAnimatedSpriteNoLoop();
void sfAddAnimatedSprite();
void sfAddStaticSprite();
void sfAddAnimatedSpriteScaled();
void sfFindPath();
void sfWalk();
void sfScrollCameraUp();
void sfScrollCameraDown();
void sfScrollCameraLeft();
void sfScrollCameraRight();
void sfScrollCameraUpEx();
void sfScrollCameraDownEx();
void sfScrollCameraLeftEx();
void sfScrollCameraRightEx();
void sfSetCamera();
void sfGetCameraChanged();
void sfGetRgbModifiertAtPoint();
void sfStartAnim();
void sfAnimNextFrame();
void sfGetAnimFrameNumber();
void sfGetAnimStatus();
void sfStartShakeScreen();
void sfStopShakeScreen();
void sfStartSequence();
void sfEndSequence();
void sfSetSequenceVolume();
void sfPlayPositionalSound();
void sfPlaySound2();
void sfClearScreen();
void sfHandleInput();
void sfRunOptionsScreen();
void sfPrecacheSprites();
void sfPrecacheSounds1();
void sfDeletePrecachedFiles();
void sfPrecacheSounds2();
void sfRestoreStackPtr();
void sfSaveStackPtr();
void sfPlayMovie();
};
} // End of namespace Toltecs
#endif /* TOLTECS_H */
|