/* 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 . * */ #ifndef DGDS_SCENE_OP_H #define DGDS_SCENE_OP_H #include "common/types.h" #include "common/array.h" #include "dgds/scene_condition.h" namespace Dgds { enum SceneOpCode { kSceneOpNone = 0, kSceneOpChangeScene = 1, // args: scene num kSceneOpNoop = 2, // args: none. Maybe should close dialogue? kSceneOpGlobal = 3, // args: array of uints kSceneOpSegmentStateOps = 4, // args: array of uint pairs [op seg, op seg], term with 0,0 that modify segment states kSceneOpSetItemAttr = 5, // args: [item num, item param 0x28, item param 0x2c]. set item attrs? kSceneOpSetDragItem = 6, // args: item num. give item? kSceneOpOpenInventory = 7, // args: none. kSceneOpShowDlg = 8, // args: dialogue number. kSceneOpShowInvButton = 9, // args: none. kSceneOpHideInvButton = 10, // args: none. kSceneOpEnableTrigger = 11, // args: trigger num kSceneOpChangeSceneToStored = 12, // args: none. Change scene to stored number kSceneOpAddFlagToDragItem = 13, // args: none. kSceneOpOpenInventoryZoom = 14, // args: none. kSceneOpMoveItemsBetweenScenes = 15, // args: none. kSceneOpShowClock = 16, // args: none. set clock script-visible. kSceneOpHideClock = 17, // args: none. set clock script-hidden. kSceneOpShowMouse = 18, // args: none. kSceneOpHideMouse = 19, // args: none. // Op 20 onward are common, but not in dragon kSceneOpLoadTalkDataAndSetFlags = 20, // args: tdsnum to load, headnum kSceneOpClearVisibleTalkHeads = 21, // args: none kSceneOpLoadTalkData = 22, // args: tds num to load kSceneOpLoadDDSData = 24, // args: dds num to load kSceneOpFreeDDSData = 25, // args: dds num to free kSceneOpFreeTalkData = 26, // args: tds num to free // Dragon-specific opcodes kSceneOpPasscode = 100, // args: none. kSceneOpMeanwhile = 101, // args: none. Clears screen and displays "meanwhile". kSceneOpOpenGameOverMenu = 102, // args: none. kSceneOpTiredDialog = 103, // args: none. Something about "boy am I tired"? kSceneOpArcadeTick = 104, // args: none. Called in arcade post-tick. kSceneOpDrawDragonCountdown1 = 105, // args: none. Draw special countdown number at 141, 56 kSceneOpDrawDragonCountdown2 = 106, // args: none. Draw some number at 250, 42 kSceneOpOpenPlaySkipIntroMenu = 107, // args: none. DRAGON: Show menu 50, the "Play Introduction" / "Skip Introduction" menu. kSceneOpOpenBetterSaveGameMenu = 108, // args: none. DRAGON: Show menu 46, the "Before arcade maybe you better save your game" menu. // China-specific opcodes kSceneOpChinaTankInit = 100, kSceneOpChinaTankEnd = 101, kSceneOpChinaTankTick = 102, kSceneOpChinaSetLanding = 103, kSceneOpChinaScrollIntro = 104, kSceneOpChinaScrollLeft = 105, kSceneOpChinaScrollRight = 107, kSceneOpShellGameInit = 108, kSceneOpShellGameEnd = 109, kSceneOpShellGameTick = 110, kSceneOpChinaTrainInit = 111, kSceneOpChinaTrainEnd = 112, kSceneOpChinaTrainTick = 113, kSceneOpChinaOpenGameOverMenu = 114, // args: none. kSceneOpChinaOpenSkipCreditsMenu = 115, // args: none. kSceneOpChinaOnIntroTick = 116, // args: none. kSceneOpChinaOnIntroInit = 117, // args: none. kSceneOpChinaOnIntroEnd = 118, // args: none. // Beamish-specific opcodes kSceneOpOpenBeamishGameOverMenu = 100, kSceneOpOpenBeamishOpenSkipCreditsMenu = 101, kSceneOpMaxCode = 255, // for checking file load kSceneOpHasConditionalOpsFlag = 0x8000, }; class SceneOp { public: Common::Array _conditionList; Common::Array _args; SceneOpCode _opCode; Common::String dump(const Common::String &indent) const; bool runOp() const; private: bool runCommonOp() const; bool runDragonOp() const; bool runChinaOp() const; bool runBeamishOp() const; }; class ConditionalSceneOp { public: SceneOpCode _opCode; Common::Array _conditionList; Common::Array _opList; Common::String dump(const Common::String &indent) const; }; } // end namespace Dgds #endif // DGDS_SCENE_OP_H