Initial commit
This commit is contained in:
127
engines/got/game/script.h
Normal file
127
engines/got/game/script.h
Normal file
@@ -0,0 +1,127 @@
|
||||
/* 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 3 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, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GOT_GAME_SCRIPT_H
|
||||
#define GOT_GAME_SCRIPT_H
|
||||
|
||||
#include "got/data/defines.h"
|
||||
#include "got/gfx/gfx_pics.h"
|
||||
|
||||
namespace Got {
|
||||
|
||||
typedef void (*ScriptEndFn)();
|
||||
|
||||
enum ScriptPause {
|
||||
SCRIPT_READY, SCRIPT_PAUSED, SCRIPT_RESUMING
|
||||
};
|
||||
|
||||
class Scripts {
|
||||
public:
|
||||
Scripts();
|
||||
~Scripts();
|
||||
|
||||
void executeScript(long index, const Gfx::Pics &speakerIcon, ScriptEndFn endFn = nullptr);
|
||||
void pause();
|
||||
void resume();
|
||||
void setAskResponse(int option);
|
||||
void runIfResuming();
|
||||
|
||||
private:
|
||||
ScriptEndFn _endFn = nullptr;
|
||||
long _numVar[26] = {}; // numeric variables
|
||||
char _strVar[26][81] = {}; // string vars
|
||||
char _lineLabel[32][9] = {}; // line label look up table
|
||||
char *_linePtr[32] = {}; // line label pointers
|
||||
char *_newPtr = nullptr;
|
||||
int _numLabels = 0; // number of labels
|
||||
char *_gosubStack[32] = {}; // stack for GOSUB return addresses
|
||||
int _gosubPtr = 0; // GOSUB stack pointer
|
||||
char *_forStack[11] = {}; // FOR stack
|
||||
long _forVal[11] = {}; // current FOR value
|
||||
int8 _forVar[11] = {}; // ending FOR value (target var)
|
||||
int8 _forPtr = 0; // FOR stack pointer
|
||||
char *_buffPtr = nullptr; // pointer to current command
|
||||
char *_buffEnd = nullptr; // pointer to end of buffer
|
||||
char *_buffer = nullptr; // buffer space (alloc'ed)
|
||||
long _scrIndex = 0;
|
||||
Gfx::Pics _scrPic;
|
||||
long _lValue = 0;
|
||||
long _lTemp = 0;
|
||||
char _tempS[255] = {};
|
||||
ScriptPause _paused = SCRIPT_READY;
|
||||
int _askVar = -1;
|
||||
|
||||
private:
|
||||
int readScriptFile();
|
||||
void scriptError(int err_num);
|
||||
int getCommand();
|
||||
int skipColon();
|
||||
int calcValue();
|
||||
int getNextValue();
|
||||
int calcString(int mode);
|
||||
void getStr();
|
||||
int getInternalVariable();
|
||||
int execCommand(int num);
|
||||
int getLine(char *src, char *dst);
|
||||
void scriptEntry() {}
|
||||
void scriptExit();
|
||||
|
||||
int cmd_goto();
|
||||
int cmd_if();
|
||||
int cmd_run();
|
||||
int cmd_addJewels();
|
||||
int cmd_addHealth();
|
||||
int cmd_addMagic();
|
||||
int cmd_addKeys();
|
||||
int cmd_addScore();
|
||||
int cmd_say(int mode, int type);
|
||||
int cmd_ask();
|
||||
int cmd_sound();
|
||||
int cmd_setTile();
|
||||
int cmd_itemGive();
|
||||
int cmd_itemTake();
|
||||
int cmd_setFlag();
|
||||
int cmd_ltoa();
|
||||
int cmd_pause();
|
||||
int cmd_visible();
|
||||
int cmd_random();
|
||||
int cmd_exec();
|
||||
|
||||
void scr_func1();
|
||||
void scr_func2();
|
||||
void scr_func3();
|
||||
void scr_func4();
|
||||
void scr_func5();
|
||||
|
||||
typedef void (Scripts:: *ScrFunction)();
|
||||
static ScrFunction scr_func[5];
|
||||
|
||||
void runScript(bool firstTime = true);
|
||||
void scriptLoop();
|
||||
|
||||
};
|
||||
|
||||
extern void executeScript(long index, const Gfx::Pics &speakerIcon,
|
||||
ScriptEndFn endFn = nullptr);
|
||||
|
||||
} // namespace Got
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user