/* 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 XEEN_SCRIPTS_H #define XEEN_SCRIPTS_H #include "common/scummsys.h" #include "common/system.h" #include "common/serializer.h" #include "common/str-array.h" #include "xeen/files.h" namespace Xeen { enum Opcode { OP_None = 0x00, OP_Display0x01 = 0x01, OP_DoorTextSml = 0x02, OP_DoorTextLrg = 0x03, OP_SignText = 0x04, OP_NPC = 0x05, OP_PlayFX = 0x06, OP_TeleportAndExit = 0x07, OP_If_1 = 0x08, OP_If_2 = 0x09, OP_If3 = 0x0A, OP_MoveObj = 0x0B, OP_TakeOrGive = 0x0C, OP_NoAction = 0x0D, OP_Remove = 0x0E, OP_SetChar = 0x0F, OP_Spawn = 0x10, OP_DoTownEvent = 0x11, OP_Exit = 0x12, OP_AfterMap = 0x13, OP_GiveExtended = 0x14, OP_ConfirmWord = 0x15, OP_Damage = 0x16, OP_JumpRnd = 0x17, OP_AfterEvent = 0x18, OP_CallEvent = 0x19, OP_Return = 0x1A, OP_SetVar = 0x1B, OP_TakeOrGive_2 = 0x1C, OP_TakeOrGive_3 = 0x1D, OP_CutsceneEndClouds = 0x1E, OP_TeleportAndContinue = 0x1F, OP_WhoWill = 0x20, OP_RndDamage = 0x21, OP_MoveWallObj = 0x22, OP_AlterCellFlag= 0x23, OP_AlterHed = 0x24, OP_DisplayStat = 0x25, OP_TakeOrGive_4 = 0x26, OP_SeatTextSml = 0x27, OP_PlayEventVoc = 0x28, OP_DisplayBottom = 0x29, OP_IfMapFlag = 0x2A, OP_SelRndChar = 0x2B, OP_GiveEnchanted= 0x2C, OP_ItemType = 0x2D, OP_MakeNothingHere = 0x2E, OP_NoAction_2 = 0x2F, OP_ChooseNumeric= 0x30, OP_DisplayBottomTwoLines = 0x31, OP_DisplayLarge = 0x32, OP_ExchObj = 0x33, OP_FallToMap = 0x34, OP_DisplayMain = 0x35, OP_Goto = 0x36, OP_ConfirmWord_2= 0x37, OP_GotoRandom = 0x38, OP_CutsceneEndDarkside = 0x39, OP_CutsceneEdWorld = 0x3A, OP_FlipWorld = 0x3B, OP_PlayCD = 0x3C }; class XeenEngine; class MazeEvent { public: Common::Point _position; int _direction; int _line; Opcode _opcode; Common::Array _parameters; public: MazeEvent(); void synchronize(Common::Serializer &s); }; class MazeEvents : public Common::Array { public: Common::StringArray _text; public: void synchronize(XeenSerializer &s); }; class Scripts { private: XeenEngine *_vm; int _charFX[6]; int _itemType; int _treasureItems; int _treasureGold; int _treasureGems; int _lineNum; int _charIndex; int _v2; int _var4F; int _nEdamageType; Common::String _paramText; MazeEvent *_event; void doOpcode(MazeEvent &event); void cmdDisplay1(Common::Array ¶ms); void cmdDoorTextSml(Common::Array ¶ms); void cmdDoorTextLrg(Common::Array ¶ms); void cmdSignText(Common::Array ¶ms); void cmdNPC(Common::Array ¶ms); void cmdPlayFX(Common::Array ¶ms); void cmdTeleport(Common::Array ¶ms); void cmdIf(Common::Array ¶ms); void cmdMoveObj(Common::Array ¶ms); void cmdTakeOrGive(Common::Array ¶ms); void cmdNoAction(Common::Array ¶ms); void cmdRemove(Common::Array ¶ms); void cmdSetChar(Common::Array ¶ms); void cmdSpawn(Common::Array ¶ms); void cmdDoTownEvent(Common::Array ¶ms); void cmdExit(Common::Array ¶ms); void cmdAlterMap(Common::Array ¶ms); void cmdGiveExtended(Common::Array ¶ms); void cmdConfirmWord(Common::Array ¶ms); void cmdDamage(Common::Array ¶ms); void cmdJumpRnd(Common::Array ¶ms); void cmdAfterEvent(Common::Array ¶ms); void cmdCallEvent(Common::Array ¶ms); void cmdReturn(Common::Array ¶ms); void cmdSetVar(Common::Array ¶ms); void cmdCutsceneEndClouds(Common::Array ¶ms); void cmdWhoWill(Common::Array ¶ms); void cmdRndDamage(Common::Array ¶ms); void cmdMoveWallObj(Common::Array ¶ms); void cmdAlterCellFlag(Common::Array ¶ms); void cmdAlterHed(Common::Array ¶ms); void cmdDisplayStat(Common::Array ¶ms); void cmdSeatTextSml(Common::Array ¶ms); void cmdPlayEventVoc(Common::Array ¶ms); void cmdDisplayBottom(Common::Array ¶ms); void cmdIfMapFlag(Common::Array ¶ms); void cmdSelRndChar(Common::Array ¶ms); void cmdGiveEnchanted(Common::Array ¶ms); void cmdItemType(Common::Array ¶ms); void cmdMakeNothingHere(Common::Array ¶ms); void cmdNoAction2(Common::Array ¶ms); void cmdChooseNumeric(Common::Array ¶ms); void cmdDisplayBottomTwoLines(Common::Array ¶ms); void cmdDisplayLarge(Common::Array ¶ms); void cmdExchObj(Common::Array ¶ms); void cmdFallToMap(Common::Array ¶ms); void cmdDisplayMain(Common::Array ¶ms); void cmdGoto(Common::Array ¶ms); void cmdGotoRandom(Common::Array ¶ms); void cmdCutsceneEndDarkside(Common::Array ¶ms); void cmdCutsceneEdWorld(Common::Array ¶ms); void cmdFlipWorld(Common::Array ¶ms); void cmdPlayCD(Common::Array ¶ms); int whoWill(int v1, int v2, int v3); void doEndGame(); void doEndGame2(); void doWorldEnd(); void doEnding(const Common::String &endStr, int v2); public: int _animCounter; bool _eventSkipped; int _whoWill; public: Scripts(XeenEngine *vm); void checkEvents(); void giveTreasure(); void openGrate(int v1, int v2); }; } // End of namespace Xeen #endif /* XEEN_SCRIPTS_H */