Implemented a few more harmless GPL2 commands

svn-id: r44958
This commit is contained in:
Robert Špalek 2009-10-11 23:28:40 +00:00
parent f71b32dd96
commit 62cebbb51e
4 changed files with 41 additions and 6 deletions

View file

@ -219,6 +219,7 @@ void Game::init() {
setRoomNum(kNoEscRoom); setRoomNum(kNoEscRoom);
rememberRoomNumAsPrevious(); rememberRoomNumAsPrevious();
scheduleEnteringRoomUsingGate(_info._startRoom, 0); scheduleEnteringRoomUsingGate(_info._startRoom, 0);
_pushedNewRoom = _pushedNewGate = -1;
} }
void Game::loop() { void Game::loop() {
@ -1426,6 +1427,18 @@ void Game::scheduleEnteringRoomUsingGate(int room, int gate) {
_newGate = gate; _newGate = gate;
} }
void Game::pushNewRoom() {
_pushedNewRoom = _newRoom;
_pushedNewGate = _newGate;
}
void Game::popNewRoom() {
if (_loopStatus != kStatusInventory && _pushedNewRoom >= 0) {
scheduleEnteringRoomUsingGate(_pushedNewRoom, _pushedNewGate);
_pushedNewRoom = _pushedNewGate = -1;
}
}
void Game::setLoopStatus(LoopStatus status) { void Game::setLoopStatus(LoopStatus status) {
_loopStatus = status; _loopStatus = status;
} }

View file

@ -281,6 +281,8 @@ public:
int getPreviousRoomNum() const; int getPreviousRoomNum() const;
void rememberRoomNumAsPrevious(); void rememberRoomNumAsPrevious();
void scheduleEnteringRoomUsingGate(int room, int gate); void scheduleEnteringRoomUsingGate(int room, int gate);
void pushNewRoom();
void popNewRoom();
double getPers0() const; double getPers0() const;
double getPersStep() const; double getPersStep() const;
@ -371,6 +373,8 @@ private:
int _newRoom; int _newRoom;
int _newGate; int _newGate;
int _previousRoom; int _previousRoom;
int _pushedNewRoom; // used in GPL programs
int _pushedNewGate;
uint *_dialogueOffsets; uint *_dialogueOffsets;
int _currentDialogue; int _currentDialogue;

View file

@ -70,9 +70,9 @@ void Script::setupCommandList() {
{ 15, 1, "ExecInit", 1, { 3 }, &Script::execInit }, { 15, 1, "ExecInit", 1, { 3 }, &Script::execInit },
{ 15, 2, "ExecLook", 1, { 3 }, &Script::execLook }, { 15, 2, "ExecLook", 1, { 3 }, &Script::execLook },
{ 15, 3, "ExecUse", 1, { 3 }, &Script::execUse }, { 15, 3, "ExecUse", 1, { 3 }, &Script::execUse },
{ 16, 1, "RepaintInventory", 0, { 0 }, NULL }, { 16, 1, "RepaintInventory", 0, { 0 }, NULL }, // not used in the original game files
{ 16, 2, "ExitInventory", 0, { 0 }, NULL }, { 16, 2, "ExitInventory", 0, { 0 }, NULL }, // not used in the original game files
{ 17, 1, "ExitMap", 0, { 0 }, NULL }, { 17, 1, "ExitMap", 0, { 0 }, NULL }, // not used in the original game files
{ 18, 1, "LoadMusic", 1, { 2 }, NULL }, { 18, 1, "LoadMusic", 1, { 2 }, NULL },
{ 18, 2, "StartMusic", 0, { 0 }, NULL }, { 18, 2, "StartMusic", 0, { 0 }, NULL },
{ 18, 3, "StopMusic", 0, { 0 }, NULL }, { 18, 3, "StopMusic", 0, { 0 }, NULL },
@ -87,9 +87,12 @@ void Script::setupCommandList() {
{ 22, 2, "EnableQuickHero", 0, { 0 }, NULL }, { 22, 2, "EnableQuickHero", 0, { 0 }, NULL },
{ 23, 1, "DisableSpeedText", 0, { 0 }, NULL }, { 23, 1, "DisableSpeedText", 0, { 0 }, NULL },
{ 23, 2, "EnableSpeedText", 0, { 0 }, NULL }, { 23, 2, "EnableSpeedText", 0, { 0 }, NULL },
{ 24, 1, "QuitGame", 0, { 0 }, NULL }, { 24, 1, "QuitGame", 0, { 0 }, &Script::quitGame },
{ 25, 1, "PushNewRoom", 0, { 0 }, NULL }, { 25, 1, "PushNewRoom", 0, { 0 }, &Script::pushNewRoom },
{ 25, 2, "PopNewRoom", 0, { 0 }, NULL }, { 25, 2, "PopNewRoom", 0, { 0 }, &Script::popNewRoom },
// The following commands are not even defined in the game
// sources, but their numbers are allocated for internal
// purposes of the old player.
{ 26, 1, "ShowCheat", 0, { 0 }, NULL }, { 26, 1, "ShowCheat", 0, { 0 }, NULL },
{ 26, 2, "HideCheat", 0, { 0 }, NULL }, { 26, 2, "HideCheat", 0, { 0 }, NULL },
{ 26, 3, "ClearCheat", 1, { 1 }, NULL }, { 26, 3, "ClearCheat", 1, { 1 }, NULL },
@ -823,6 +826,18 @@ void Script::endCurrentProgram() {
_endProgram = true; _endProgram = true;
} }
void Script::quitGame(Common::Queue<int> &params) {
_vm->_game->setQuit(true);
}
void Script::pushNewRoom(Common::Queue<int> &params) {
_vm->_game->pushNewRoom();
}
void Script::popNewRoom(Common::Queue<int> &params) {
_vm->_game->popNewRoom();
}
/** /**
* @brief Evaluates mathematical expressions * @brief Evaluates mathematical expressions
* @param reader Stream reader set to the beginning of the expression * @param reader Stream reader set to the beginning of the expression

View file

@ -133,6 +133,9 @@ private:
void setPalette(Common::Queue<int> &params); void setPalette(Common::Queue<int> &params);
void blackPalette(Common::Queue<int> &params); void blackPalette(Common::Queue<int> &params);
void loadPalette(Common::Queue<int> &params); void loadPalette(Common::Queue<int> &params);
void quitGame(Common::Queue<int> &params);
void pushNewRoom(Common::Queue<int> &params);
void popNewRoom(Common::Queue<int> &params);
int operAnd(int op1, int op2) const; int operAnd(int op1, int op2) const;
int operOr(int op1, int op2) const; int operOr(int op1, int op2) const;