Initial commit

This commit is contained in:
2026-02-02 04:50:13 +01:00
commit 5b11698731
22592 changed files with 7677434 additions and 0 deletions

View File

@@ -0,0 +1,242 @@
/* 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/>.
*
*/
#ifdef ENABLE_MADSV2
#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"
#include "mads/dragonsphere/dragonsphere_scenes1.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 Scene101(vm);
case 102: // queen's bedroom
return new Scene102(vm);
case 103: // outside king's bedroom
return new Scene103(vm);
case 104: // fireplace / bookshelf
return new Scene104(vm);
case 105: // dining room
return new Scene105(vm);
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::Path DragonsphereScene::formAnimName(char sepChar, int suffixNum) {
return Resources::formatName(_scene->_currentSceneId, sepChar, suffixNum,
EXT_NONE, "");
}
/*------------------------------------------------------------------------*/
void SceneInfoDragonsphere::loadCodes(BaseSurface &depthSurface, int variant) {
Common::String ext = Common::String::format(".WW%d", variant);
Common::Path fileName = Resources::formatName(RESPREFIX_RM, _sceneId, ext);
if (!Common::File::exists(fileName))
return;
File f(fileName);
MadsPack codesPack(&f);
Common::SeekableReadStream *stream = codesPack.getItemStream(0);
loadCodes(depthSurface, stream);
delete stream;
f.close();
}
void SceneInfoDragonsphere::loadCodes(BaseSurface &depthSurface, Common::SeekableReadStream *stream) {
byte *destP = (byte *)depthSurface.getPixels();
byte *walkMap = new byte[stream->size()];
stream->read(walkMap, stream->size());
for (int y = 0; y < 156; ++y) {
for (int x = 0; x < 320; ++x) {
int offset = x + (y * 320);
if ((walkMap[offset / 8] << (offset % 8)) & 0x80)
*destP++ = 1; // walkable
else
*destP++ = 0;
}
}
delete[] walkMap;
}
} // End of namespace Dragonsphere
} // End of namespace MADS
#endif

View File

@@ -0,0 +1,677 @@
/* 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/>.
*
*/
#ifdef ENABLE_MADSV2
#ifndef MADS_DRAGONSPHERE_SCENES_H
#define MADS_DRAGONSPHERE_SCENES_H
#include "mads/scene.h"
#include "mads/dragonsphere/game_dragonsphere.h"
//#include "mads/dragonsphere/globals_dragonsphere.h"
namespace MADS {
namespace Dragonsphere {
enum Verb {
VERB_LOOK = 0x3,
VERB_TAKE = 0x4,
VERB_PUSH = 0x5,
VERB_OPEN = 0x6,
VERB_PUT = 0x7,
VERB_TALK_TO = 0x8,
VERB_GIVE = 0x9,
VERB_PULL = 0xA,
VERB_CLOSE = 0xB,
VERB_THROW = 0xC,
VERB_WALK_TO = 0xD,
VERB_WALK_ACROSS = 0x11,
VERB_WALK_BEHIND = 0x1C,
VERB_LOOK_AT = 0x1E,
VERB_WALK_THROUGH = 0x25,
VERB_WALK_INTO = 0x27,
VERB_INVOKE = 0x2F,
VERB_ATTACK = 0x39,
VERB_CARVE_UP = 0x3A,
VERB_THRUST = 0x57,
VERB_POUR = 0x62,
VERB_POUR_CONTENTS_OF = 0x63,
VERB_DRINK = 0x64,
VERB_SHIFT_SELF = 0x73,
VERB_SHIFT_INTO_BEAR = 0x74,
VERB_SHIFT_INTO_SEAL = 0x75,
VERB_SHIFT_INTO_SNAKE = 0x76,
VERB_WALK_DOWN = 0xA9,
VERB_WALK = 0x1CB,
VERB_WALK_AROUND = 0x221
};
enum Noun {
NOUN_GAME = 0x1,
NOUN_QSAVE = 0x2,
NOUN_NOTHING = 0xE,
NOUN_ = 0xF,
NOUN_FLOOR = 0x10,
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_ROYAL_CREST = 0x1D,
NOUN_WASHBASIN = 0x1F,
NOUN_WASH_AT = 0x20,
NOUN_BOOK = 0x21,
NOUN_FIREPLACE = 0x22,
NOUN_FIREPLACE_SCREEN = 0x23,
NOUN_DOOR_TO_QUEENS_ROOM = 0x24,
NOUN_HALL_TO_SOUTH = 0x26,
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_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_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_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_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_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_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_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_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::Path 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:
void loadCodes(BaseSurface &depthSurface, int variant) override;
void loadCodes(BaseSurface &depthSurface, Common::SeekableReadStream *stream) override;
/**
* Constructor
*/
SceneInfoDragonsphere(MADSEngine *vm) : SceneInfo(vm) {}
};
// TODO: Temporary, remove once implemented properly
class DummyScene : public DragonsphereScene {
public:
DummyScene(MADSEngine *vm) : DragonsphereScene(vm) {
warning("Unimplemented scene");
}
void setup() override {}
void enter() override {}
void actions() override {}
};
} // End of namespace Dragonsphere
} // End of namespace MADS
#endif /* MADS_DRAGONSPHERE_SCENES_H */
#endif

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,188 @@
/* 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/>.
*
*/
#ifdef ENABLE_MADSV2
#ifndef MADS_DRAGON_SCENES1_H
#define MADS_DRAGON_SCENES1_H
#include "common/serializer.h"
#include "mads/dragonsphere/dragonsphere_scenes.h"
namespace MADS {
namespace Dragonsphere {
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) {}
};
class Scene101 : public Scene1xx {
public:
Scene101(MADSEngine *vm);
void synchronize(Common::Serializer &s) override;
void setup() override;
void enter() override;
void step() override;
void preActions() override;
void actions() override;
};
class Scene102 : public Scene1xx {
private:
int _diaryHotspotIdx1;
int _diaryHotspotIdx2;
int _diaryFrame;
int _animRunning;
public:
Scene102(MADSEngine *vm);
void synchronize(Common::Serializer &s) override;
void setup() override;
void enter() override;
void step() override;
void preActions() override;
void actions() override;
};
class Scene103 : public Scene1xx {
public:
Scene103(MADSEngine *vm);
void synchronize(Common::Serializer &s) override;
void setup() override;
void enter() override;
void step() override;
void preActions() override;
void actions() override;
};
class Scene104 : public Scene1xx {
private:
bool _anim0ActvFl;
bool _anim1ActvFl;
bool _anim2ActvFl;
bool _anim3ActvFl;
bool _anim4ActvFl;
bool _anim5ActvFl;
bool _anim6ActvFl;
bool _activateTimerFl;
bool _wasBearFl;
bool _amuletWorksFl;
bool _pidDrawnSword;
int _animationRunning;
int _deathTimer;
int _deathFrame;
int _doorwayHotspotId;
int _kingStatus;
int _kingFrame;
int _kingCount;
int _queenStatus;
int _queenFrame;
int _queenCount;
int _pidStatus;
int _pidFrame;
int _pidCount;
int _macStatus;
int _macFrame;
int _macCount;
int _twinklesStatus;
int _twinklesFrame;
int _twinklesCount;
int _tapestryFrame;
int32 _clock;
void handleFinalConversation();
void handleKingAnimation();
void handleMacAnimation1();
void handleMacAnimation2();
void handleQueenAnimation();
void handleTwinklesAnimation();
void handleDeathAnimation();
void handlePidAnimation();
public:
Scene104(MADSEngine *vm);
void synchronize(Common::Serializer &s) override;
void setup() override;
void enter() override;
void step() override;
void preActions() override;
void actions() override;
};
class Scene105 : public Scene1xx {
private:
bool _maidTalkingFl;
bool _sitUpFl;
bool _goodNumberFl;
int _maidFrame;
int _maidHotspotId1;
int _maidHotspotId2;
int _newStatus;
int _previousStatus;
int _bucketHotspotId;
int _boneHotspotId;
int _gobletHotspotId;
void setRandomStatus();
void setRandomWipebrow();
void handleConversation();
public:
Scene105(MADSEngine *vm);
void synchronize(Common::Serializer &s) override;
void setup() override;
void enter() override;
void step() override;
void preActions() override;
void actions() override;
};
} // End of namespace Dragonsphere
} // End of namespace MADS
#endif /* MADS_DRAGON_SCENES1_H */
#endif

View File

@@ -0,0 +1,165 @@
/* 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/>.
*
*/
#ifdef ENABLE_MADSV2
#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/dragonsphere/globals_dragonsphere.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() {
_scene._priorSceneId = 0;
_scene._currentSceneId = -1;
_scene._nextSceneId = 101;
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
#endif

View File

@@ -0,0 +1,144 @@
/* 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/>.
*
*/
#ifdef ENABLE_MADSV2
#ifndef MADS_GAME_DRAGONSPHERE_H
#define MADS_GAME_DRAGONSPHERE_H
#include "mads/game.h"
#include "mads/globals.h"
#include "mads/dragonsphere/globals_dragonsphere.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_MAGIC_MUSIC_BOX = 43,
OBJ_EMERALD = 44,
OBJ_PARCHMENT = 45,
OBJ_GAME = 46,
OBJ_GAME2 = 47,
OBJ_NEW_BUNDLE = 48
};
class GameDragonsphere : public Game {
friend class Game;
protected:
GameDragonsphere(MADSEngine *vm);
void startGame() override;
void initializeGlobals() override;
void setSectionHandler() override;
void checkShowDialog() override;
public:
DragonsphereGlobals _globals;
StoryMode _storyMode;
Globals &globals() override { return _globals; }
void doObjectAction() override;
void unhandledAction() override;
void step() override;
void synchronize(Common::Serializer &s, bool phase1) override;
};
class Section1Handler : public SectionHandler {
public:
Section1Handler(MADSEngine *vm) : SectionHandler(vm) {}
// TODO: Properly implement handler methods
void preLoadSection() override {}
void sectionPtr2() override {}
void postLoadSection() override {}
};
// 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 Dragonsphere
} // End of namespace MADS
#endif /* MADS_GAME_DRAGONSPHERE_H */
#endif

View File

@@ -0,0 +1,52 @@
/* 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/>.
*
*/
#ifdef ENABLE_MADSV2
#include "mads/dragonsphere/globals_dragonsphere.h"
namespace MADS {
namespace Dragonsphere {
DragonsphereGlobals::DragonsphereGlobals()
: Globals() {
// Initialize lists
resize(140);
_spriteIndexes.resize(30);
_sequenceIndexes.resize(30);
_animationIndexes.resize(30);
}
void DragonsphereGlobals::synchronize(Common::Serializer &s) {
Globals::synchronize(s);
_spriteIndexes.synchronize(s);
_sequenceIndexes.synchronize(s);
_animationIndexes.synchronize(s);
}
} // End of namespace Dragonsphere
} // End of namespace MADS
#endif

View File

@@ -0,0 +1,185 @@
/* 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/>.
*
*/
#ifdef ENABLE_MADSV2
#ifndef MADS_GLOBALS_DRAGONSPHERE_H
#define MADS_GLOBALS_DRAGONSPHERE_H
#include "mads/game.h"
#include "mads/resources.h"
namespace MADS {
namespace Dragonsphere {
enum GlobalId {
// Global variables
kWalkerTiming = 0,
kWalkerTiming2 = 1,
kPlayerPersona = 10,
kPlayerScore = 11,
kDragonHighScene = 12,
kDragonMyScene = 13,
kNoLoadWalker = 14,
kPlayerScoreFlags = 15,
kSorcerorDefeated = 16,
kPreRoom = 17,
kPerformDisplacements = 18,
kKingStatus = 20,
kWardStatus = 21,
kTalkedToSoptus = 22,
kTalkedToShifter = 23,
kAmuletStatus = 24,
kBooksStatus = 25,
kTapestryStatus = 26,
kTalkedToMerchant = 27,
kCanViewCrownHole = 28,
kTalkedToStatus = 29,
kGuardPidStatus = 30,
kCrawledOutOfBed101 = 31,
kStatueIsOnStairway114 = 32,
kDogIsAsleep = 33,
kCrystalBallDead = 34,
kThrewBone = 35,
kWoodenDoorOpen = 36,
kKingIsInStairwell = 37,
kLlanieStatus = 38,
kNoTalkToGuard = 39,
kObjectGiven201 = 40,
kKingGotStabbed = 41,
kGivenObjectBefore = 42,
kGuardsAreAsleep = 43,
kDomeUp = 44,
kTalkedToWise = 45,
kDollGiven = 46,
kResetConv = 47,
kTalkedToGreta = 48,
kSlimeHealed = 49,
kDanceMusicOn = 50,
kPlayerIsSeal = 51,
kVinesHavePlayer = 52,
kEndOfGame = 53,
kResetConv2 = 54,
kInvokedFrom111 = 55,
kSaveWinsInDesert = 60,
kBubblesUpIn301 = 61,
kBubbleWontAttack = 62,
kPidLookedAtDoll = 63,
kOasis = 80,
kFireHoles = 81,
kDesertRoom = 82,
kFromDirection = 83,
kDesertCounter = 84,
kMoveDirection409 = 85,
kHealVerbsVisible = 86,
kGrapesHaveGrown = 87,
kPidTalkShamon = 88,
kPidJustDied = 89,
kGrapesAreDead = 90,
kRocIsChewingDates = 91,
kWinsInDesert = 92,
kWinsTillPrize = 93,
kPidHasBeenHealedSop = 94,
kGamePoints = 95,
kDancePoints = 96,
kCluePoints = 97,
kPrizesOwedToPlayer = 98,
kObjectFlags = 99,
kWaterfallDiverted = 100,
kShakStatus = 101,
kMaxGridValue = 102,
kMoveDirection510 = 103,
kShak506Angry = 104,
kMonsterIsDead = 105,
kDoneTalkingLani502 = 106,
kFoundLani504 = 107,
kSaidUseSwordShak = 108,
kGobletFilledSoporific = 109,
kBeenIn504AsPid = 110,
kSeenLaniDeadFirstTime = 111,
kSaidPoemIn504 = 112,
kTriedToHealLlanie504 = 113,
kPutBundleOnLlanie504 = 114,
kMake504Empty = 115,
kHasTakenMud = 116,
kPlatformClicked606 = 117,
kHadSpiritBundle = 118,
kMudIsInEye603 = 120,
kRopeIsAlive = 121,
kRatCageIsOpen = 122,
kFlaskOnPlate = 123,
kFluidIsDripping = 124,
kHoleIsIn607 = 125,
kRopeIsHangingIn607 = 126,
kObjectIsInFreezer605 = 127,
kObjectImitated = 128,
kHasRed = 129,
kHasYellow = 130,
kHasBlue = 131,
kWizardDead = 132,
kVineWillGrab = 133,
kFloorIsCool = 134,
kRatMelted = 135,
kDoorIsCool = 136,
kUsedElevator = 137,
kBeenOnTopFloor = 138,
kTorchIsIn609 = 139,
kGridPosition = 140
};
class DragonsphereGlobals : public Globals {
public:
SynchronizedList _spriteIndexes;
SynchronizedList _sequenceIndexes;
SynchronizedList _animationIndexes;
public:
/**
* Constructor
*/
DragonsphereGlobals();
/**
* Synchronize the globals data
*/
virtual void synchronize(Common::Serializer &s);
};
} // End of namespace Dragonsphere
} // End of namespace MADS
#endif /* MADS_GLOBALS_DRAGONSPHERE_H */
#endif