aboutsummaryrefslogtreecommitdiff
path: root/engines/mads/dragonsphere
diff options
context:
space:
mode:
authorMarisa-Chan2014-06-13 21:43:04 +0700
committerMarisa-Chan2014-06-13 21:43:04 +0700
commit45589950c0fb1a449351e6a00ef10d42290d8bae (patch)
tree44e4eedcb7e69d5fc386155b000ed038af07251d /engines/mads/dragonsphere
parent48360645dcd5f8fddb135b6e31ae5cae4be8d77f (diff)
parent5c005ad3a3f1df0bc968c85c1cf0fc48e36ab0b2 (diff)
downloadscummvm-rg350-45589950c0fb1a449351e6a00ef10d42290d8bae.tar.gz
scummvm-rg350-45589950c0fb1a449351e6a00ef10d42290d8bae.tar.bz2
scummvm-rg350-45589950c0fb1a449351e6a00ef10d42290d8bae.zip
Merge remote-tracking branch 'upstream/master' into zvision
Conflicts: engines/zvision/animation/rlf_animation.cpp engines/zvision/animation_control.h engines/zvision/core/console.cpp engines/zvision/core/events.cpp engines/zvision/cursors/cursor.cpp engines/zvision/cursors/cursor_manager.cpp engines/zvision/cursors/cursor_manager.h engines/zvision/fonts/truetype_font.cpp engines/zvision/graphics/render_manager.cpp engines/zvision/graphics/render_manager.h engines/zvision/inventory/inventory_manager.h engines/zvision/inventory_manager.h engines/zvision/meta_animation.h engines/zvision/module.mk engines/zvision/scripting/actions.cpp engines/zvision/scripting/control.h engines/zvision/scripting/controls/animation_control.cpp engines/zvision/scripting/controls/animation_control.h engines/zvision/scripting/controls/input_control.cpp engines/zvision/scripting/controls/lever_control.cpp engines/zvision/scripting/controls/timer_node.cpp engines/zvision/scripting/controls/timer_node.h engines/zvision/scripting/puzzle.h engines/zvision/scripting/scr_file_handling.cpp engines/zvision/scripting/script_manager.cpp engines/zvision/scripting/script_manager.h engines/zvision/sidefx.cpp engines/zvision/sound/zork_raw.cpp engines/zvision/sound/zork_raw.h engines/zvision/video/video.cpp engines/zvision/video/zork_avi_decoder.h engines/zvision/zvision.cpp engines/zvision/zvision.h
Diffstat (limited to 'engines/mads/dragonsphere')
-rw-r--r--engines/mads/dragonsphere/dragonsphere_scenes.cpp236
-rw-r--r--engines/mads/dragonsphere/dragonsphere_scenes.h695
-rw-r--r--engines/mads/dragonsphere/game_dragonsphere.cpp159
-rw-r--r--engines/mads/dragonsphere/game_dragonsphere.h151
4 files changed, 1241 insertions, 0 deletions
diff --git a/engines/mads/dragonsphere/dragonsphere_scenes.cpp b/engines/mads/dragonsphere/dragonsphere_scenes.cpp
new file mode 100644
index 0000000000..59d7914378
--- /dev/null
+++ b/engines/mads/dragonsphere/dragonsphere_scenes.cpp
@@ -0,0 +1,236 @@
+/* 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.
+ *
+ */
+
+#include "common/scummsys.h"
+#include "common/config-manager.h"
+#include "mads/mads.h"
+#include "mads/compression.h"
+#include "mads/resources.h"
+#include "mads/scene.h"
+#include "mads/dragonsphere/game_dragonsphere.h"
+#include "mads/dragonsphere/dragonsphere_scenes.h"
+
+namespace MADS {
+
+namespace Dragonsphere {
+
+SceneLogic *SceneFactory::createScene(MADSEngine *vm) {
+ Scene &scene = vm->_game->_scene;
+
+ // TODO
+ //scene.addActiveVocab(NOUN_DROP);
+
+ switch (scene._nextSceneId) {
+ // Scene group #1 (Castle, river and caves)
+ case 101: // king's bedroom
+ return new DummyScene(vm); // TODO
+ case 102: // queen's bedroom
+ return new DummyScene(vm); // TODO
+ case 103: // outside king's bedroom
+ return new DummyScene(vm); // TODO
+ case 104: // fireplace / bookshelf
+ return new DummyScene(vm); // TODO
+ case 105: // dining room
+ return new DummyScene(vm); // TODO
+ case 106: // throne room
+ return new DummyScene(vm); // TODO
+ case 107: // council chamber
+ return new DummyScene(vm); // TODO
+ case 108: // dungeon, cell entrance
+ return new DummyScene(vm); // TODO
+ case 109: // cell
+ return new DummyScene(vm); // TODO
+ case 110: // outside castle, merchants and well
+ return new DummyScene(vm); // TODO
+ case 111: // Dragonsphere closeup
+ return new DummyScene(vm); // TODO
+ case 112: // well descend
+ return new DummyScene(vm); // TODO
+ case 113: // bottom of well, river and trap door
+ return new DummyScene(vm); // TODO
+ case 114: // cave
+ return new DummyScene(vm); // TODO
+ case 115: // cave with passageway to west
+ return new DummyScene(vm); // TODO
+ case 116: // cave with pedestral
+ return new DummyScene(vm); // TODO
+ case 117: // river
+ return new DummyScene(vm); // TODO
+ case 118: // castle courtyard and gate
+ return new DummyScene(vm); // TODO
+ case 119: // castle stairs
+ return new DummyScene(vm); // TODO
+ case 120: // map
+ return new DummyScene(vm); // TODO
+
+ // Scene group #2 (Slathan ni Patan, land of shapeshifters)
+ case 201: // guardhouse, entrance to Slathan ni Patan
+ return new DummyScene(vm); // TODO
+ case 203: // forest
+ return new DummyScene(vm); // TODO
+ case 204: // cave
+ return new DummyScene(vm); // TODO
+ case 205: // outside village
+ return new DummyScene(vm); // TODO
+ case 206: // village
+ return new DummyScene(vm); // TODO
+
+ // Scene group #3 (Brynn-Fann, Land of faeries)
+ case 301: // maze entrance
+ return new DummyScene(vm); // TODO
+ case 302: // maze
+ return new DummyScene(vm); // TODO
+ case 303: // toads
+ return new DummyScene(vm); // TODO
+
+ // Scene group #4 (The Desert)
+ case 401: // desert
+ return new DummyScene(vm); // TODO
+ case 402: // desert
+ return new DummyScene(vm); // TODO
+ case 403: // desert
+ return new DummyScene(vm); // TODO
+ case 404: // desert with dunes
+ return new DummyScene(vm); // TODO
+ case 405: // oasis
+ return new DummyScene(vm); // TODO
+ case 406: // inside tent
+ return new DummyScene(vm); // TODO
+ case 407: // gem sack closeup
+ return new DummyScene(vm); // TODO
+ case 408: // spirit plane
+ return new DummyScene(vm); // TODO
+ case 409: // spirit plane top down view, disks
+ return new DummyScene(vm); // TODO
+ case 410: // snake pit and spirit tree
+ return new DummyScene(vm); // TODO
+ case 411: // nest
+ return new DummyScene(vm); // TODO
+ case 412: // desert
+ return new DummyScene(vm); // TODO
+ case 454: // cutscene
+ return new DummyScene(vm); // TODO
+
+ // Scene group #5 (The Mountain)
+ case 501: // base of mountain / wall
+ return new DummyScene(vm); // TODO
+ case 502: // base of mountain
+ return new DummyScene(vm); // TODO
+ case 503: // waterfall
+ return new DummyScene(vm); // TODO
+ case 504: // hermit's cave
+ return new DummyScene(vm); // TODO
+ case 505: // rock trees
+ return new DummyScene(vm); // TODO
+ case 506: // nest
+ return new DummyScene(vm); // TODO
+ case 507: // above nest
+ return new DummyScene(vm); // TODO
+ case 508: // ledge, right
+ return new DummyScene(vm); // TODO
+ case 509: // ledge, left
+ return new DummyScene(vm); // TODO
+ case 510: // nest top down view and pillars
+ return new DummyScene(vm); // TODO
+ case 511: // pillars
+ return new DummyScene(vm); // TODO
+ case 512: // nest
+ return new DummyScene(vm); // TODO
+ case 557: // cutscene
+ return new DummyScene(vm); // TODO
+
+ // Scene group #6 (The Tower)
+ case 601: // ??? (tile count mismatch)
+ return new DummyScene(vm); // TODO
+ case 603: // eye chamber
+ return new DummyScene(vm); // TODO
+ case 604: // room of magic
+ return new DummyScene(vm); // TODO
+ case 605: // science room
+ return new DummyScene(vm); // TODO
+ case 606: // doorway
+ return new DummyScene(vm); // TODO
+ case 607: // prison
+ return new DummyScene(vm); // TODO
+ case 609: // stone pedestral chamber
+ return new DummyScene(vm); // TODO
+ case 612: // infernal machine room
+ return new DummyScene(vm); // TODO
+ case 613: // room with lava floor
+ return new DummyScene(vm); // TODO
+ case 614: // sorcerer's room
+ return new DummyScene(vm); // TODO
+
+ default:
+ error("Invalid scene %d called", scene._nextSceneId);
+ }
+}
+
+/*------------------------------------------------------------------------*/
+
+DragonsphereScene::DragonsphereScene(MADSEngine *vm) : SceneLogic(vm),
+ _globals(static_cast<GameDragonsphere *>(vm->_game)->_globals),
+ _game(*static_cast<GameDragonsphere *>(vm->_game)),
+ _action(vm->_game->_scene._action) {
+}
+
+Common::String DragonsphereScene::formAnimName(char sepChar, int suffixNum) {
+ return Resources::formatName(_scene->_currentSceneId, sepChar, suffixNum,
+ EXT_NONE, "");
+}
+
+/*------------------------------------------------------------------------*/
+
+void SceneInfoDragonsphere::loadCodes(MSurface &depthSurface, int variant) {
+ File f(Resources::formatName(RESPREFIX_RM, _sceneId, ".DAT"));
+ MadsPack codesPack(&f);
+ Common::SeekableReadStream *stream = codesPack.getItemStream(variant + 1);
+
+ loadCodes(depthSurface, stream);
+
+ delete stream;
+ f.close();
+}
+
+void SceneInfoDragonsphere::loadCodes(MSurface &depthSurface, Common::SeekableReadStream *stream) {
+ byte *destP = depthSurface.getData();
+ byte *endP = depthSurface.getBasePtr(0, depthSurface.h);
+
+ byte runLength = stream->readByte();
+ while (destP < endP && runLength > 0) {
+ byte runValue = stream->readByte();
+
+ // Write out the run length
+ Common::fill(destP, destP + runLength, runValue);
+ destP += runLength;
+
+ // Get the next run length
+ runLength = stream->readByte();
+ }
+
+ if (destP < endP)
+ Common::fill(destP, endP, 0);
+}
+
+} // End of namespace Dragonsphere
+
+} // End of namespace MADS
diff --git a/engines/mads/dragonsphere/dragonsphere_scenes.h b/engines/mads/dragonsphere/dragonsphere_scenes.h
new file mode 100644
index 0000000000..a6c778eca7
--- /dev/null
+++ b/engines/mads/dragonsphere/dragonsphere_scenes.h
@@ -0,0 +1,695 @@
+/* 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 MADS_DRAGONSPHERE_SCENES_H
+#define MADS_DRAGONSPHERE_SCENES_H
+
+#include "common/scummsys.h"
+#include "mads/game.h"
+#include "mads/scene.h"
+#include "mads/dragonsphere/game_dragonsphere.h"
+//#include "mads/dragonsphere/globals_dragonsphere.h"
+
+
+namespace MADS {
+
+namespace Dragonsphere {
+
+enum Noun {
+ NOUN_GAME = 0x1,
+ NOUN_QSAVE = 0x2,
+ NOUN_LOOK = 0x3,
+ NOUN_TAKE = 0x4,
+ NOUN_PUSH = 0x5,
+ NOUN_OPEN = 0x6,
+ NOUN_PUT = 0x7,
+ NOUN_TALK_TO = 0x8,
+ NOUN_GIVE = 0x9,
+ NOUN_PULL = 0xA,
+ NOUN_CLOSE = 0xB,
+ NOUN_THROW = 0xC,
+ NOUN_WALK_TO = 0xD,
+ NOUN_NOTHING = 0xE,
+ NOUN_ = 0xF,
+ NOUN_FLOOR = 0x10,
+ NOUN_WALK_ACROSS = 0x11,
+ NOUN_RUG = 0x12,
+ NOUN_CARPET = 0x13,
+ NOUN_WALL = 0x14,
+ NOUN_BED = 0x15,
+ NOUN_PILLOW = 0x16,
+ NOUN_CHEST = 0x17,
+ NOUN_WINDOW = 0x18,
+ NOUN_NIGHTSTAND = 0x19,
+ NOUN_TAPESTRY = 0x1A,
+ NOUN_DRESSING_SCREEN = 0x1B,
+ NOUN_WALK_BEHIND = 0x1C,
+ NOUN_ROYAL_CREST = 0x1D,
+ NOUN_LOOK_AT = 0x1E,
+ NOUN_WASHBASIN = 0x1F,
+ NOUN_WASH_AT = 0x20,
+ NOUN_BOOK = 0x21,
+ NOUN_FIREPLACE = 0x22,
+ NOUN_FIREPLACE_SCREEN = 0x23,
+ NOUN_DOOR_TO_QUEENS_ROOM = 0x24,
+ NOUN_WALK_THROUGH = 0x25,
+ NOUN_HALL_TO_SOUTH = 0x26,
+ NOUN_WALK_INTO = 0x27,
+ NOUN_WALL_PLAQUE = 0x28,
+ NOUN_DECORATION = 0x29,
+ NOUN_SWORDS = 0x2A,
+ NOUN_WALL_SCONCE = 0x2B,
+ NOUN_BUST_ON_WALL = 0x2C,
+ NOUN_WALL_ARCH = 0x2D,
+ NOUN_SIGNET_RING = 0x2E,
+ NOUN_INVOKE = 0x2F,
+ NOUN_POLISH = 0x30,
+ NOUN_GANGBANG = 0x31,
+ NOUN_BIRD_FIGURINE = 0x32,
+ NOUN_RUB = 0x33,
+ NOUN_BIRDCALL = 0x34,
+ NOUN_USE = 0x35,
+ NOUN_MAKE_NOISE = 0x36,
+ NOUN_SHIELDSTONE = 0x37,
+ NOUN_SWORD = 0x38,
+ NOUN_ATTACK = 0x39,
+ NOUN_CARVE_UP = 0x3A,
+ NOUN_GOBLET = 0x3B,
+ NOUN_FILL = 0x3C,
+ NOUN_DRINK_FROM = 0x3D,
+ NOUN_BONE = 0x3E,
+ NOUN_GNAW = 0x3F,
+ NOUN_FRUIT = 0x40,
+ NOUN_EAT = 0x41,
+ NOUN_DOLL = 0x42,
+ NOUN_PLAY_WITH = 0x43,
+ NOUN_HEAL = 0x44,
+ NOUN_HEAL_THYSELF = 0x45,
+ NOUN_HEAL_SELF = 0x46,
+ NOUN_POLYSTONE = 0x47,
+ NOUN_MIMIC = 0x48,
+ NOUN_RED_POWERSTONE = 0x49,
+ NOUN_YELLOW_POWERSTONE = 0x4A,
+ NOUN_BLUE_POWERSTONE = 0x4B,
+ NOUN_KEY_CROWN = 0x4C,
+ NOUN_WEAR = 0x4D,
+ NOUN_DATES = 0x4E,
+ NOUN_STATUE = 0x4F,
+ NOUN_BOTTLE_OF_FLIES = 0x50,
+ NOUN_LISTEN_TO = 0x51,
+ NOUN_SOUL_EGG = 0x52,
+ NOUN_BREAK = 0x53,
+ NOUN_MAGIC_BELT = 0x54,
+ NOUN_ADJUST = 0x55,
+ NOUN_AMULET = 0x56,
+ NOUN_THRUST = 0x57,
+ NOUN_MUD = 0x58,
+ NOUN_FEEL = 0x59,
+ NOUN_TASTE = 0x5A,
+ NOUN_FEATHERS = 0x5B,
+ NOUN_TICKLE = 0x5C,
+ NOUN_TORCH = 0x5D,
+ NOUN_WAVE = 0x5E,
+ NOUN_FLASK = 0x5F,
+ NOUN_FLASK_FULL_OF_ACID = 0x60,
+ NOUN_POUR_CONTENTS = 0x61,
+ NOUN_POUR = 0x62,
+ NOUN_POUR_CONTENTS_OF = 0x63,
+ NOUN_DRINK = 0x64,
+ NOUN_ROPE = 0x65,
+ NOUN_TIE = 0x66,
+ NOUN_POWER_VACUUM_STONE = 0x67,
+ NOUN_TAKE_MAGIC_FROM = 0x68,
+ NOUN_DEAD_RAT = 0x69,
+ NOUN_PET = 0x6A,
+ NOUN_MAP = 0x6B,
+ NOUN_FOLD = 0x6C,
+ NOUN_CRYSTAL_BALL = 0x6D,
+ NOUN_GAZE_INTO = 0x6E,
+ NOUN_INVOKE_POWER_OF = 0x6F,
+ NOUN_BLACK_SPHERE = 0x70,
+ NOUN_SOPTUS_SOPORIFIC = 0x71,
+ NOUN_SHIFTER_RING = 0x72,
+ NOUN_SHIFT_SELF = 0x73,
+ NOUN_SHIFT_INTO_BEAR = 0x74,
+ NOUN_SHIFT_INTO_SEAL = 0x75,
+ NOUN_SHIFT_INTO_SNAKE = 0x76,
+ NOUN_REVERT = 0x77,
+ NOUN_MEDICINE_BUNDLE = 0x78,
+ NOUN_SHAKE = 0x79,
+ NOUN_PARTLY_BUILT_BUNDLE = 0x7A,
+ NOUN_RATSICLE = 0x7B,
+ NOUN_LICK = 0x7C,
+ NOUN_TENTACLE_PARTS = 0x7D,
+ NOUN_CHEW = 0x7E,
+ NOUN_TELEPORT_DOOR = 0x7F,
+ NOUN_UNROLL = 0x80,
+ NOUN_RARE_COIN = 0x81,
+ NOUN_ADMIRE = 0x82,
+ NOUN_CRYSTAL_FLOWER = 0x83,
+ NOUN_DIAMOND_DUST = 0x84,
+ NOUN_RUBY_RING = 0x85,
+ NOUN_GOLD_NUGGET = 0x86,
+ NOUN_MAGIC_MUSIC_BOX = 0x87,
+ NOUN_EMERALD = 0x88,
+ NOUN_PIECE_OF_PAPER = 0x89,
+ NOUN_SPEAK_WORDS_ON = 0x8A,
+ NOUN_VORTEX_STONE = 0x8B,
+ NOUN_RUG2 = 0x8C,
+ NOUN_FIREPLACE_SCREEN2 = 0x8D,
+ NOUN_BUST_ON_WALL2 = 0x8E,
+ NOUN_LOOK_AT2 = 0x8F,
+ NOUN_DRAGON = 0x90,
+ NOUN_DRAGONSPHERE = 0x91,
+ NOUN_TOUCH = 0x92,
+ NOUN_THRONE_ROOM = 0x93,
+ NOUN_RETURN_TO = 0x94,
+ NOUN_CAVE = 0x95,
+ NOUN_PASSAGEWAY_TO_WEST = 0x96,
+ NOUN_PASSAGEWAY_TO_EAST = 0x97,
+ NOUN_CAVE_FLOOR = 0x98,
+ NOUN_STONE_COLUMN = 0x99,
+ NOUN_ABYSS = 0x9A,
+ NOUN_LOOK_INTO = 0x9B,
+ NOUN_CASTLE = 0x9C,
+ NOUN_CASTLE_GATE = 0x9D,
+ NOUN_GROUND = 0x9E,
+ NOUN_BARREL = 0x9F,
+ NOUN_BARRELS = 0xA0,
+ NOUN_HAYSTACK = 0xA1,
+ NOUN_ROOT_THROUGH = 0xA2,
+ NOUN_BATTLEMENTS = 0xA3,
+ NOUN_GATE_TO_THRONE_ROOM = 0xA4,
+ NOUN_CASTLE_WALL = 0xA5,
+ NOUN_DOOR = 0xA6,
+ NOUN_WALL_SWITCH = 0xA7,
+ NOUN_STAIRS = 0xA8,
+ NOUN_WALK_DOWN = 0xA9,
+ NOUN_EDGE_OF_ABYSS = 0xAA,
+ NOUN_COURTYARD = 0xAB,
+ NOUN_ROCK = 0xAC,
+ NOUN_CAVE_CEILING = 0xAD,
+ NOUN_CAVE_WALL = 0xAE,
+ NOUN_BRAZIER = 0xAF,
+ NOUN_DOOR_TO_THRONE_ROOM = 0xB0,
+ NOUN_GO_THROUGH = 0xB1,
+ NOUN_DINING_TABLE = 0xB2,
+ NOUN_ACTIVATE = 0xB3,
+ NOUN_BATTLEMENT = 0xB4,
+ NOUN_DOOR_TO_GAURDROOM = 0xB5,
+ NOUN_DUNGEON_FLOOR = 0xB6,
+ NOUN_DUNGEON_WALLS = 0xB7,
+ NOUN_DUNGEON_CEILING = 0xB8,
+ NOUN_BEDDING = 0xB9,
+ NOUN_FLOOR_GRATE = 0xBA,
+ NOUN_MANACLES = 0xBB,
+ NOUN_CALENDAR = 0xBC,
+ NOUN_DOOR_TO_GUARDROOM = 0xBD,
+ NOUN_DOOR_TO_COUNCIL_ROOM = 0xBE,
+ NOUN_GUARD_STATION = 0xBF,
+ NOUN_DOOR_TO_DUNGEON_CELL = 0xC0,
+ NOUN_DOORWAY_TO_CELL = 0xC1,
+ NOUN_DUNGEON_DOOR = 0xC2,
+ NOUN_DUNGEON_WALL = 0xC3,
+ NOUN_CEILING = 0xC4,
+ NOUN_DOOR_TO_HALLWAY = 0xC5,
+ NOUN_TABLE = 0xC6,
+ NOUN_BOOKSHELF = 0xC7,
+ NOUN_TROPHY = 0xC8,
+ NOUN_READING_BENCH = 0xC9,
+ NOUN_CHAIR = 0xCA,
+ NOUN_LOVESEAT = 0xCB,
+ NOUN_WOOD_BASKET = 0xCC,
+ NOUN_STOOL = 0xCD,
+ NOUN_GUARD_STOOL = 0xCE,
+ NOUN_ROCKS = 0xCF,
+ NOUN_DIVIDING_WALL = 0xD0,
+ NOUN_ARCHWAY = 0xD1,
+ NOUN_MARKET_GROUNDS = 0xD2,
+ NOUN_HEDGE = 0xD3,
+ NOUN_SKY = 0xD4,
+ NOUN_PLAINS = 0xD5,
+ NOUN_FIELDS = 0xD6,
+ NOUN_GATE_TO_COURTYARD = 0xD7,
+ NOUN_ROAD_TO_EAST = 0xD8,
+ NOUN_TREES = 0xD9,
+ NOUN_CLOUDS = 0xDA,
+ NOUN_MERCHANTS_STALL = 0xDB,
+ NOUN_WELL = 0xDC,
+ NOUN_DOWN_WELL = 0xDD,
+ NOUN_GO = 0xDE,
+ NOUN_GO_DOWN = 0xDF,
+ NOUN_CRANK = 0xE0,
+ NOUN_BUCKET = 0xE1,
+ NOUN_JUMP_DOWN = 0xE2,
+ NOUN_WALLS = 0xE3,
+ NOUN_DOORWAY_TO_SOUTH = 0xE4,
+ NOUN_PEDESTAL = 0xE5,
+ NOUN_DOOR_TO_NORTH = 0xE6,
+ NOUN_PAINTING = 0xE7,
+ NOUN_DOCUMENT = 0xE8,
+ NOUN_INK_BOTTLE = 0xE9,
+ NOUN_QUILL_PEN = 0xEA,
+ NOUN_CHANDELIER = 0xEB,
+ NOUN_COUNCIL_TABLE = 0xEC,
+ NOUN_CANDLESTICK = 0xED,
+ NOUN_DESK = 0xEE,
+ NOUN_TURN = 0xEF,
+ NOUN_POLE = 0xF0,
+ NOUN_THE_SCENE = 0xF1,
+ NOUN_LEAVE = 0xF2,
+ NOUN_END_TABLE = 0xF3,
+ NOUN_BATTLE_AXES = 0xF4,
+ NOUN_DOOR_TO_KINGS_ROOM = 0xF5,
+ NOUN_COAT_OF_ARMS = 0xF6,
+ NOUN_LARGE_WINDOW = 0xF7,
+ NOUN_SMALL_WINDOW = 0xF8,
+ NOUN_DOOR_TO_MEETING_ROOM = 0xF9,
+ NOUN_DOOR_TO_BALLROOM = 0xFA,
+ NOUN_FLOWERS = 0xFB,
+ NOUN_SHUTTERS = 0xFC,
+ NOUN_BOOKCASE = 0xFD,
+ NOUN_DOOR_TO_COURTYARD = 0xFE,
+ NOUN_PLATFORM = 0xFF,
+ NOUN_STEP = 0x100,
+ NOUN_RED_CARPET = 0x101,
+ NOUN_KINGS_THRONE = 0x102,
+ NOUN_SIT_IN = 0x103,
+ NOUN_QUEENS_THRONE = 0x104,
+ NOUN_TRAPDOOR = 0x105,
+ NOUN_GRATE = 0x106,
+ NOUN_RIVER = 0x107,
+ NOUN_DIARIES = 0x108,
+ NOUN_SWIM_DOWN = 0x109,
+ NOUN_SCULLERY_MAID = 0x10A,
+ NOUN_DOORWAY_TO_DUNGEON = 0x10B,
+ NOUN_WARD = 0x10C,
+ NOUN_DARKNESS_BEAST = 0x10D,
+ NOUN_BEAST = 0x10E,
+ NOUN_PUT_MAGIC_INTO = 0x10F,
+ NOUN_GUARD = 0x110,
+ NOUN_CROWN = 0x111,
+ NOUN_BOOKS = 0x112,
+ NOUN_SECRET_DOOR = 0x113,
+ NOUN_WALL_PANEL = 0x114,
+ NOUN_DOORWAY = 0x115,
+ NOUN_FAERIE = 0x116,
+ NOUN_SOPTUS_ECLIPTUS = 0x117,
+ NOUN_GUARD_CAPTAIN = 0x118,
+ NOUN_MERCHANT = 0x119,
+ NOUN_SHAPECHANGER = 0x11A,
+ NOUN_RED_STONE = 0x11B,
+ NOUN_YELLOW_STONE = 0x11C,
+ NOUN_BLUE_STONE = 0x11D,
+ NOUN_FLIES = 0x11E,
+ NOUN_FLASK_OF_ACID = 0x11F,
+ NOUN_PARTIAL_BUNDLE = 0x120,
+ NOUN_SOPORIFIC = 0x121,
+ NOUN_PARCHMENT = 0x122,
+ NOUN_KING = 0x123,
+ NOUN_MACMORN = 0x124,
+ NOUN_MOUNTAINSIDE = 0x125,
+ NOUN_PATH_TO_SOUTH = 0x126,
+ NOUN_ROUGH_STONE = 0x127,
+ NOUN_CLIMB_UP = 0x128,
+ NOUN_LARGE_ROCK = 0x129,
+ NOUN_SMALL_ROCK = 0x12A,
+ NOUN_PATH_TO_WEST = 0x12B,
+ NOUN_CAVE_ENTRANCE = 0x12C,
+ NOUN_PALLET = 0x12D,
+ NOUN_BLANKET = 0x12E,
+ NOUN_FIREPIT = 0x12F,
+ NOUN_FLAT_STONE = 0x130,
+ NOUN_MOVE = 0x131,
+ NOUN_SPIRIT_BUNDLE = 0x132,
+ NOUN_TRAIL_LEADING_UP = 0x133,
+ NOUN_FOLLOW = 0x134,
+ NOUN_TRAIL_LEADING_DOWN = 0x135,
+ NOUN_NEST = 0x136,
+ NOUN_REACH_IN = 0x137,
+ NOUN_TRAIL_LEADING_WEST = 0x138,
+ NOUN_PATH_TO_EAST = 0x139,
+ NOUN_WATERFALL = 0x13A,
+ NOUN_PUDDLE = 0x13B,
+ NOUN_EDGE_OF_CLIFF = 0x13C,
+ NOUN_LEDGE = 0x13D,
+ NOUN_CLIMB_DOWN = 0x13E,
+ NOUN_LANDING = 0x13F,
+ NOUN_BOULDERS = 0x140,
+ NOUN_ROCK_TUMBLE = 0x141,
+ NOUN_ROCK_TREE = 0x142,
+ NOUN_PILLAR = 0x143,
+ NOUN_JUMP_TO = 0x144,
+ NOUN_CLIFF = 0x145,
+ NOUN_PILLARS = 0x146,
+ NOUN_SPECIAL_ROCK = 0x147,
+ NOUN_GAZE_UPON = 0x148,
+ NOUN_SCONCE = 0x149,
+ NOUN_LADDER = 0x14A,
+ NOUN_STAIRWAY = 0x14B,
+ NOUN_MECHANISM = 0x14C,
+ NOUN_SPEARHEADS = 0x14D,
+ NOUN_TRAP_DOOR = 0x14E,
+ NOUN_SWIM = 0x14F,
+ NOUN_DOWN_RIVER = 0x150,
+ NOUN_SWIM_UP = 0x151,
+ NOUN_UP_RIVER = 0x152,
+ NOUN_SHORE = 0x153,
+ NOUN_SWIM_TO = 0x154,
+ NOUN_SWIM_TOWARDS = 0x155,
+ NOUN_KING_CALLASH = 0x156,
+ NOUN_KINGS_THRONE2 = 0x157,
+ NOUN_KING2 = 0x158,
+ NOUN_GROTTO = 0x159,
+ NOUN_CLIMB_THROUGH = 0x15A,
+ NOUN_QUEEN_MOTHER = 0x15B,
+ NOUN_MACMORN2 = 0x15C,
+ NOUN_SMALL_LEDGE = 0x15D,
+ NOUN_MACMORN3 = 0x15E,
+ NOUN_TO_110 = 0x15F,
+ NOUN_TO_KITTY_HEAVEN = 0x160,
+ NOUN_KITTY_HEAVEN = 0x161,
+ NOUN_ROOM_110 = 0x162,
+ NOUN_LLANIE = 0x163,
+ NOUN_CW = 0x164,
+ NOUN_HERMIT = 0x165,
+ NOUN_TROU = 0x166,
+ NOUN_SHAK = 0x167,
+ NOUN_ROOM_501 = 0x168,
+ NOUN_MOON = 0x169,
+ NOUN_UFO = 0x16A,
+ NOUN_SIT_ON = 0x16B,
+ NOUN_STRANGER = 0x16C,
+ NOUN_TOWER_DOOR = 0x16D,
+ NOUN_DOOR_TO_EAST = 0x16E,
+ NOUN_DOOR_TO_WEST = 0x16F,
+ NOUN_EYE = 0x170,
+ NOUN_DOORWAY_TO_EAST = 0x171,
+ NOUN_DOORWAY_TO_WEST = 0x172,
+ NOUN_SKULL = 0x173,
+ NOUN_DOOR_TO_MAGIC_ROOM = 0x174,
+ NOUN_ANCIENT_BARREL = 0x175,
+ NOUN_COBWEBS = 0x176,
+ NOUN_SHELF = 0x177,
+ NOUN_MUSTY_CHART = 0x178,
+ NOUN_LAB_TABLE = 0x179,
+ NOUN_PETCOCK = 0x17A,
+ NOUN_NOZZLE = 0x17B,
+ NOUN_TUBING = 0x17C,
+ NOUN_BEAKER = 0x17D,
+ NOUN_FLAME = 0x17E,
+ NOUN_METAL_PLATE = 0x17F,
+ NOUN_SHAFT_OF_LIGHT = 0x180,
+ NOUN_CABINET = 0x181,
+ NOUN_BALANCE = 0x182,
+ NOUN_CAGE = 0x183,
+ NOUN_FREEZER = 0x184,
+ NOUN_CONTENTS_OF_FREEZER = 0x185,
+ NOUN_CAGE_WITH_RATS = 0x186,
+ NOUN_DOOR_TO_SOUTH = 0x187,
+ NOUN_TRAIL_OF_GREEN_SLIME = 0x188,
+ NOUN_NECK_LOCK = 0x189,
+ NOUN_BENCH = 0x18A,
+ NOUN_SKELETON = 0x18B,
+ NOUN_LEG_CLAMPS = 0x18C,
+ NOUN_LEG_LOCK = 0x18D,
+ NOUN_WAIST_LOCK = 0x18E,
+ NOUN_NER_TOM = 0x18F,
+ NOUN_BELT = 0x190,
+ NOUN_JUMP_INTO = 0x191,
+ NOUN_CLOSET = 0x192,
+ NOUN_DOOR_TO_EYE_CHAMBER = 0x193,
+ NOUN_DRESSER = 0x194,
+ NOUN_SCROLL = 0x195,
+ NOUN_WITCH_PARAPHERNALIA = 0x196,
+ NOUN_SHELVES = 0x197,
+ NOUN_MAGIC_TOMES = 0x198,
+ NOUN_MAGIC_PARAPHERNALIA = 0x199,
+ NOUN_BOOK_OF_MAGIC = 0x19A,
+ NOUN_HOURGLASS = 0x19B,
+ NOUN_STONE_SPHERE = 0x19C,
+ NOUN_SHADOW_OF_WINDOW = 0x19D,
+ NOUN_MUSIC_BOX = 0x19E,
+ NOUN_LARGE_SPIDER_WEB = 0x19F,
+ NOUN_INFERNAL_MACHINE = 0x1A0,
+ NOUN_WATER_SOURCE = 0x1A1,
+ NOUN_FLOW_OF_WATER = 0x1A2,
+ NOUN_RETORT = 0x1A3,
+ NOUN_DOORWAY_TO_CORRIDOR = 0x1A4,
+ NOUN_TELESCOPE = 0x1A5,
+ NOUN_STRANGE_MAP = 0x1A6,
+ NOUN_CIRCLE_OF_SPHERES = 0x1A7,
+ NOUN_STONE_BED = 0x1A8,
+ NOUN_DRAGON_SCULPTURE = 0x1A9,
+ NOUN_RAT = 0x1AA,
+ NOUN_RAT_CAGE = 0x1AB,
+ NOUN_DOWN_BUTTON = 0x1AC,
+ NOUN_DOOR_TO_MACHINE_ROOM = 0x1AD,
+ NOUN_STRANGE_PORTAL = 0x1AE,
+ NOUN_DOOR_FRAME = 0x1AF,
+ NOUN_ELEVATOR_HOLE = 0x1B0,
+ NOUN_UP_BUTTON = 0x1B1,
+ NOUN_DOORWAY_TO_DARK_ROOM = 0x1B2,
+ NOUN_BIG_SKULL = 0x1B3,
+ NOUN_ELEVATOR_PLATFORM = 0x1B4,
+ NOUN_BUTTON = 0x1B5,
+ NOUN_TOP_BUTTON = 0x1B6,
+ NOUN_BOTTOM_BUTTON = 0x1B7,
+ NOUN_TELEPORTAL = 0x1B8,
+ NOUN_EYE_CHAMBER_DOORWAY = 0x1B9,
+ NOUN_MACHINE_ROOM_DOORWAY = 0x1BA,
+ NOUN_GLOWING_FLOOR = 0x1BB,
+ NOUN_BRYNN_FANN = 0x1BC,
+ NOUN_GRAN_CALLAHACH = 0x1BD,
+ NOUN_SLATHAN_NI_PATAN = 0x1BE,
+ NOUN_HIGHTOWER = 0x1BF,
+ NOUN_SOPTUS_ECLIPTUS2 = 0x1C0,
+ NOUN_TOWER = 0x1C1,
+ NOUN_MOUNTAIN_PATH = 0x1C2,
+ NOUN_PATH_BEHIND_TOWER = 0x1C3,
+ NOUN_VINES = 0x1C4,
+ NOUN_SLATHAN_NI_PATAN2 = 0x1C5,
+ NOUN_SICK = 0x1C6,
+ NOUN_PATH_AROUND_TOWER = 0x1C7,
+ NOUN_PATH_TO_HIGHTOWER = 0x1C8,
+ NOUN_SPIRIT_PLANE = 0x1C9,
+ NOUN_SPIRIT_TREE = 0x1CA,
+ NOUN_WALK = 0x1CB,
+ NOUN_REMAINS = 0x1CC,
+ NOUN_DOORWAY_TO_ELEVATOR = 0x1CD,
+ NOUN_DRAGON_DOOR = 0x1CE,
+ NOUN_DRAGON_BONES = 0x1CF,
+ NOUN_IRON_FLOOR = 0x1D0,
+ NOUN_HOLE = 0x1D1,
+ NOUN_STONE = 0x1D2,
+ NOUN_HOMEMADE_BUNDLE = 0x1D3,
+ NOUN_LEFT = 0x1D4,
+ NOUN_RIGHT = 0x1D5,
+ NOUN_UP = 0x1D6,
+ NOUN_DOWN = 0x1D7,
+ NOUN_WEST = 0x1D8,
+ NOUN_DESERT_TO_WEST = 0x1D9,
+ NOUN_CROSS = 0x1DA,
+ NOUN_DESERT_TO_EAST = 0x1DB,
+ NOUN_DESERT_TO_SOUTH = 0x1DC,
+ NOUN_DESERT_TO_NORTH = 0x1DD,
+ NOUN_DESERT = 0x1DE,
+ NOUN_POWERSTONE = 0x1DF,
+ NOUN_BONES = 0x1E0,
+ NOUN_TENT = 0x1E1,
+ NOUN_BUSH = 0x1E2,
+ NOUN_SANWE = 0x1E3,
+ NOUN_TANGLE = 0x1E4,
+ NOUN_SAND = 0x1E5,
+ NOUN_MAGIC_GRAPES = 0x1E6,
+ NOUN_ROCS_NEST = 0x1E7,
+ NOUN_GRAPE_VINE = 0x1E8,
+ NOUN_STRANGE_SQUARE = 0x1E9,
+ NOUN_WATER_SPHERE = 0x1EA,
+ NOUN_EAST_END_OF_ISLAND = 0x1EB,
+ NOUN_ISLAND = 0x1EC,
+ NOUN_SECRET_MESSAGE = 0x1ED,
+ NOUN_FIND = 0x1EE,
+ NOUN_SAND_NEAR_STONES = 0x1EF,
+ NOUN_DESERT_SKY = 0x1F0,
+ NOUN_POOL = 0x1F1,
+ NOUN_PALM_TREE = 0x1F2,
+ NOUN_OASIS = 0x1F3,
+ NOUN_LEAN_TO = 0x1F4,
+ NOUN_TRADER = 0x1F5,
+ NOUN_SIGN = 0x1F6,
+ NOUN_WATER_FLOW = 0x1F7,
+ NOUN_FLOATING_DISK = 0x1F8,
+ NOUN_GNARLED_ROOT = 0x1F9,
+ NOUN_SNAKE_PIT = 0x1FA,
+ NOUN_MARKER = 0x1FB,
+ NOUN_SHAMAN = 0x1FC,
+ NOUN_GUARDHOUSE = 0x1FD,
+ NOUN_BONE_TREE = 0x1FE,
+ NOUN_EAR_ROCK = 0x1FF,
+ NOUN_MOUTH_ROCK = 0x200,
+ NOUN_NOSE_ROCK = 0x201,
+ NOUN_NEW_BUNDLE = 0x202,
+ NOUN_LIZARD = 0x203,
+ NOUN_ROC = 0x204,
+ NOUN_ROCS_NEST2 = 0x205,
+ NOUN_SELECT = 0x206,
+ NOUN_PURPLE_GEM = 0x207,
+ NOUN_PURPLE_STONE = 0x208,
+ NOUN_GREEN_STONE = 0x209,
+ NOUN_PATH = 0x20A,
+ NOUN_GUARDS = 0x20B,
+ NOUN_LAMP = 0x20C,
+ NOUN_SCIMITAR = 0x20D,
+ NOUN_SITTING_PILLOW = 0x20E,
+ NOUN_WATER_GOURD = 0x20F,
+ NOUN_JAR = 0x210,
+ NOUN_TENT_POLE = 0x211,
+ NOUN_EXIT = 0x212,
+ NOUN_PARAPHERNALIA = 0x213,
+ NOUN_SLATHAN_NI_PATAN3 = 0x214,
+ NOUN_EYE_ROCK = 0x215,
+ NOUN_BODY_TREE = 0x216,
+ NOUN_CLEARING = 0x217,
+ NOUN_TENTACLES = 0x218,
+ NOUN_SPELL_SHIELD = 0x219,
+ NOUN_POOL_MONSTER = 0x21A,
+ NOUN_SHIFTER_BOULDER = 0x21B,
+ NOUN_DEAD_TREE = 0x21C,
+ NOUN_PIT = 0x21D,
+ NOUN_SHIFTER_VILLAGE = 0x21E,
+ NOUN_SLATHAN_SKY = 0x21F,
+ NOUN_SHIFTER = 0x220,
+ NOUN_WALK_AROUND = 0x221,
+ NOUN_WRECKED_BRIDGE = 0x222,
+ NOUN_SHACK = 0x223,
+ NOUN_WRECKED_SHACK = 0x224,
+ NOUN_WISE_SHIFTER = 0x225,
+ NOUN_GRASS = 0x226,
+ NOUN_ENTRANCE_TO_MAZE = 0x227,
+ NOUN_TOPIARY_TOAD = 0x228,
+ NOUN_BOULDER = 0x229,
+ NOUN_MUSHROOM = 0x22A,
+ NOUN_SLATHAN_SKY2 = 0x22B,
+ NOUN_GRETA = 0x22C,
+ NOUN_TREE_STUMP = 0x22D,
+ NOUN_SANCTUARY_WOODS = 0x22E,
+ NOUN_TOADS = 0x22F,
+ NOUN_DOOFUS = 0x230,
+ NOUN_SHIFTING_MONSTER = 0x231,
+ NOUN_SPRITE = 0x232,
+ NOUN_MAZE = 0x233,
+ NOUN_TOPIARY_TOADSTOOL = 0x234,
+ NOUN_TOPIARY_GARGOYLE = 0x235,
+ NOUN_TOPIARY_DRAGON = 0x236,
+ NOUN_GUARDIAN = 0x237,
+ NOUN_BUTTERFLY_KING = 0x238,
+ NOUN_ROBE = 0x239,
+ NOUN_CEDAR_CHEST = 0x23A,
+ NOUN_DRAGONSPHERE2 = 0x23B,
+ NOUN_PATH_TO_HIGHTOWER2 = 0x23C,
+ NOUN_CALIPH = 0x23D
+};
+
+class SceneFactory {
+public:
+ static SceneLogic *createScene(MADSEngine *vm);
+};
+
+/**
+ * Specialized base class for Dragonsphere game scenes
+ */
+class DragonsphereScene : public SceneLogic {
+protected:
+ DragonsphereGlobals &_globals;
+ GameDragonsphere &_game;
+ MADSAction &_action;
+
+ /**
+ * Forms an animation resource name
+ */
+ Common::String formAnimName(char sepChar, int suffixNum);
+
+ /**
+ * Plays appropriate sound for entering varous rooms
+ */
+ void lowRoomsEntrySound();
+public:
+ /**
+ * Constructor
+ */
+ DragonsphereScene(MADSEngine *vm);
+
+ void sub7178C();
+};
+
+class SceneInfoDragonsphere : public SceneInfo {
+ friend class SceneInfo;
+protected:
+ virtual void loadCodes(MSurface &depthSurface, int variant);
+
+ virtual void loadCodes(MSurface &depthSurface, Common::SeekableReadStream *stream);
+
+ /**
+ * Constructor
+ */
+ SceneInfoDragonsphere(MADSEngine *vm) : SceneInfo(vm) {}
+};
+
+// TODO: Temporary, remove once implemented properly
+class Scene1xx : public DragonsphereScene {
+protected:
+ /**
+ * Plays an appropriate sound when entering a scene
+ */
+ void sceneEntrySound() {}
+
+ /**
+ *Sets the AA file to use for the scene
+ */
+ void setAAName() {}
+
+ /**
+ * Updates the prefix used for getting player sprites for the scene
+ */
+ void setPlayerSpritesPrefix() {}
+public:
+ Scene1xx(MADSEngine *vm) : DragonsphereScene(vm) {}
+};
+
+// TODO: Temporary, remove once implemented properly
+class DummyScene : public DragonsphereScene {
+public:
+ DummyScene(MADSEngine *vm) : DragonsphereScene(vm) {
+ warning("Unimplemented scene");
+ }
+
+ virtual void setup() {}
+ virtual void enter() {}
+ virtual void actions() {}
+};
+
+} // End of namespace Dragonsphere
+
+} // End of namespace MADS
+
+#endif /* MADS_DRAGONSPHERE_SCENES_H */
diff --git a/engines/mads/dragonsphere/game_dragonsphere.cpp b/engines/mads/dragonsphere/game_dragonsphere.cpp
new file mode 100644
index 0000000000..9d9b48dd66
--- /dev/null
+++ b/engines/mads/dragonsphere/game_dragonsphere.cpp
@@ -0,0 +1,159 @@
+/* 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.
+ *
+ */
+
+#include "common/scummsys.h"
+#include "common/config-manager.h"
+#include "mads/mads.h"
+#include "mads/game.h"
+#include "mads/screen.h"
+#include "mads/msurface.h"
+#include "mads/dragonsphere/game_dragonsphere.h"
+//#include "mads/nebular/dialogs_nebular.h"
+//#include "mads/nebular/globals_nebular.h"
+#include "mads/dragonsphere/dragonsphere_scenes.h"
+
+namespace MADS {
+
+namespace Dragonsphere {
+
+GameDragonsphere::GameDragonsphere(MADSEngine *vm)
+ : Game(vm) {
+ _surface = new MSurface(MADS_SCREEN_WIDTH, MADS_SCENE_HEIGHT);
+ _storyMode = STORYMODE_NAUGHTY;
+}
+
+void GameDragonsphere::startGame() {
+ initializeGlobals();
+}
+
+void GameDragonsphere::initializeGlobals() {
+ //int count, count2;
+ //int bad;
+
+ _globals.reset();
+ //_globals[kTalkInanimateCount] = 8;
+
+ /* Section #1 variables */
+ // TODO
+
+ /* Section #2 variables */
+ // TODO
+
+ /* Section #3 variables */
+ // TODO
+
+ /* Section #4 variables */
+ // TODO
+
+ /* Section #5 variables */
+ // TODO
+
+ /* Section #6 variables */
+ // TODO
+
+ /* Section #9 variables */
+ // TODO
+
+ _player._facing = FACING_NORTH;
+ _player._turnToFacing = FACING_NORTH;
+
+ //Player::preloadSequences("RXM", 1);
+ //Player::preloadSequences("ROX", 1);
+}
+
+void GameDragonsphere::setSectionHandler() {
+ delete _sectionHandler;
+
+ switch (_sectionNumber) {
+ case 1:
+ _sectionHandler = new Section1Handler(_vm);
+ break;
+ case 2:
+ _sectionHandler = new Section2Handler(_vm);
+ break;
+ case 3:
+ _sectionHandler = new Section3Handler(_vm);
+ break;
+ case 4:
+ _sectionHandler = new Section4Handler(_vm);
+ break;
+ case 5:
+ _sectionHandler = new Section5Handler(_vm);
+ break;
+ case 6:
+ _sectionHandler = new Section6Handler(_vm);
+ break;
+ case 7:
+ _sectionHandler = new Section7Handler(_vm);
+ break;
+ case 8:
+ _sectionHandler = new Section8Handler(_vm);
+ break;
+ default:
+ break;
+ }
+}
+
+void GameDragonsphere::checkShowDialog() {
+ // TODO: Copied from Nebular
+ if (_vm->_dialogs->_pendingDialog && _player._stepEnabled && !_globals[5]) {
+ _player.releasePlayerSprites();
+ _vm->_dialogs->showDialog();
+ _vm->_dialogs->_pendingDialog = DIALOG_NONE;
+ }
+}
+
+void GameDragonsphere::doObjectAction() {
+ // TODO: Copied from Nebular
+ //Scene &scene = _scene;
+ MADSAction &action = _scene._action;
+ //Dialogs &dialogs = *_vm->_dialogs;
+ //int id;
+
+ action._inProgress = false;
+}
+
+void GameDragonsphere::unhandledAction() {
+ // TODO
+}
+
+void GameDragonsphere::step() {
+ if (_player._visible && _player._stepEnabled && !_player._moving &&
+ (_player._facing == _player._turnToFacing)) {
+
+ // TODO
+ }
+
+}
+
+void GameDragonsphere::synchronize(Common::Serializer &s, bool phase1) {
+ Game::synchronize(s, phase1);
+
+ // TODO: Copied from Nebular
+ if (!phase1) {
+ _globals.synchronize(s);
+ }
+}
+
+} // End of namespace Dragonsphere
+
+} // End of namespace MADS
diff --git a/engines/mads/dragonsphere/game_dragonsphere.h b/engines/mads/dragonsphere/game_dragonsphere.h
new file mode 100644
index 0000000000..7869dc87b4
--- /dev/null
+++ b/engines/mads/dragonsphere/game_dragonsphere.h
@@ -0,0 +1,151 @@
+/* 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 MADS_GAME_DRAGONSPHERE_H
+#define MADS_GAME_DRAGONSPHERE_H
+
+#include "common/scummsys.h"
+#include "mads/game.h"
+#include "mads/globals.h"
+//#include "mads/nebular/globals_nebular.h"
+
+namespace MADS {
+
+namespace Dragonsphere {
+
+// TODO: Adapt for Dragonsphere's difficulty setting
+enum StoryMode { STORYMODE_NAUGHTY = 1, STORYMODE_NICE = 2 };
+
+enum InventoryObject {
+ OBJ_NONE = -1,
+ OBJ_SIGNET_RING = 0,
+ OBJ_BIRD_FIGURINE = 1,
+ OBJ_BIRDCALL = 2,
+ OBJ_SHIELDSTONE = 3,
+ OBJ_SWORD = 4,
+ OBJ_GOBLET = 5,
+ OBJ_BONE = 6,
+ OBJ_FRUIT = 7,
+ OBJ_DOLL = 8,
+ OBJ_POLYSTONE = 9,
+ OBJ_RED_STONE = 10,
+ OBJ_YELLOW_STONE = 11,
+ OBJ_BLUE_STONE = 12,
+ OBJ_KEY_CROWN = 13,
+ OBJ_DATES = 14,
+ OBJ_STATUE = 15,
+ OBJ_FLIES = 16,
+ OBJ_SOUL_EGG = 17,
+ OBJ_MAGIC_BELT = 18,
+ OBJ_AMULET = 19,
+ OBJ_MUD = 20,
+ OBJ_FEATHERS = 21,
+ OBJ_TORCH = 22,
+ OBJ_FLASK = 23,
+ OBJ_FLASK_OF_ACID = 24,
+ OBJ_ROPE = 25,
+ OBJ_VORTEX_STONE = 26,
+ OBJ_DEAD_RAT = 27,
+ OBJ_MAP = 28,
+ OBJ_CRYSTAL_BALL = 29,
+ OBJ_BLACK_SPHERE = 30,
+ OBJ_SOPORIFIC = 31,
+ OBJ_SHIFTER_RING = 32,
+ OBJ_SPIRIT_BUNDLE = 33,
+ OBJ_PARTIAL_BUNDLE = 34,
+ OBJ_RATSICLE = 35,
+ OBJ_TENTACLE_PARTS = 36,
+ OBJ_TELEPORT_DOOR = 37,
+ OBJ_RARE_COIN = 38,
+ OBJ_CRYSTAL_FLOWER = 39,
+ OBJ_DIAMOND_DUST = 40,
+ OBJ_RUBY_RING = 41,
+ OBJ_GOLD_NUGGET = 42,
+ OBJ_MUSIC_BOX = 43,
+ OBJ_EMERALD = 44,
+ OBJ_PARCHMENT = 45,
+ OBJ_GAME = 46,
+ OBJ_GAME2 = 47,
+ OBJ_NEW_BUNDLE = 48
+};
+
+// HACK: A stub for now, remove from here once it's implemented properly
+class DragonsphereGlobals : public Globals {
+public:
+ DragonsphereGlobals() {
+ resize(210); // Rex has 210 globals
+ }
+ virtual ~DragonsphereGlobals() {}
+};
+
+class GameDragonsphere : public Game {
+ friend class Game;
+protected:
+ GameDragonsphere(MADSEngine *vm);
+
+ virtual void startGame();
+
+ virtual void initializeGlobals();
+
+ virtual void setSectionHandler();
+
+ virtual void checkShowDialog();
+public:
+ DragonsphereGlobals _globals;
+ StoryMode _storyMode;
+
+ virtual Globals &globals() { return _globals; }
+
+ virtual void doObjectAction();
+
+ virtual void unhandledAction();
+
+ virtual void step();
+
+ virtual void synchronize(Common::Serializer &s, bool phase1);
+};
+
+
+class Section1Handler : public SectionHandler {
+public:
+ Section1Handler(MADSEngine *vm) : SectionHandler(vm) {}
+
+ // TODO: Properly implement handler methods
+ virtual void preLoadSection() {}
+ virtual void sectionPtr2() {}
+ virtual void postLoadSection() {}
+};
+
+// TODO: Properly implement handler classes
+typedef Section1Handler Section2Handler;
+typedef Section1Handler Section3Handler;
+typedef Section1Handler Section4Handler;
+typedef Section1Handler Section5Handler;
+typedef Section1Handler Section6Handler;
+typedef Section1Handler Section7Handler;
+typedef Section1Handler Section8Handler;
+
+} // End of namespace Nebular
+
+} // End of namespace MADS
+
+#endif /* MADS_GAME_DRAGONSPHERE_H */