Skip to content

Commit

Permalink
ULTIMA: Split the games up into sub-engines
Browse files Browse the repository at this point in the history
  • Loading branch information
dreammaster committed Nov 18, 2023
1 parent b7d9e78 commit 473cf8d
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 8 deletions.
6 changes: 5 additions & 1 deletion engines/ultima/configure.engine
@@ -1,3 +1,7 @@
# This file is included from the main "configure" script
# add_engine [name] [desc] [build-by-default] [subengines] [base games] [deps]
add_engine ultima "Ultima" yes "" "" "highres 16bit lua"
add_engine ultima "Ultima" no "ultima1 ultima4 ultima6 ultima8"
add_engine ultima1 "Ultima I - The First Age of Darkness" no "" "" ""
add_engine ultima4 "Ultima IV - Quest of the Avatar" yes "" "" ""
add_engine ultima6 "Ultima VI = The False Prophet" yes "" "" "highres 16bit lua"
add_engine ultima8 "Ultima VIII - Pagan" yes "" "" "highres 16bit"
10 changes: 9 additions & 1 deletion engines/ultima/detection_tables.h
Expand Up @@ -32,7 +32,7 @@ namespace Ultima {
#define GUI_OPTIONS_SAVAGE_EMPIRE GUIO0()

static const UltimaGameDescription GAME_DESCRIPTIONS[] = {
#ifndef RELEASE_BUILD
#ifdef ENABLE_ULTIMA1
{
// Ultima I - The First Age of Darkness
{
Expand Down Expand Up @@ -85,6 +85,7 @@ static const UltimaGameDescription GAME_DESCRIPTIONS[] = {
},
#endif

#ifdef ENABLE_ULTIMA4
{
// Ultima IV - Quest of the Avatar
{
Expand Down Expand Up @@ -114,7 +115,9 @@ static const UltimaGameDescription GAME_DESCRIPTIONS[] = {
GAME_ULTIMA4,
GF_VGA_ENHANCED
},
#endif

#ifdef ENABLE_ULTIMA6
// GOG Ultima VI
{
{
Expand Down Expand Up @@ -297,7 +300,9 @@ static const UltimaGameDescription GAME_DESCRIPTIONS[] = {
GAME_ULTIMA6,
GF_VGA_ENHANCED
},
#endif

#ifdef ENABLE_ULTIMA8
// Ultima VIII - CD (provided by ddeluca1com, bug #11944)
{
{
Expand Down Expand Up @@ -626,7 +631,9 @@ static const UltimaGameDescription GAME_DESCRIPTIONS[] = {
GAME_CRUSADER_REG,
0
},
#endif

#ifdef ENABLE_ULTIMA6
// GOG Martian Dreams
{
{
Expand Down Expand Up @@ -747,6 +754,7 @@ static const UltimaGameDescription GAME_DESCRIPTIONS[] = {
GAME_SAVAGE_EMPIRE,
GF_VGA_ENHANCED
},
#endif

{ AD_TABLE_END_MARKER, (GameId)0, 0 }
};
Expand Down
28 changes: 26 additions & 2 deletions engines/ultima/metaengine.cpp
Expand Up @@ -27,13 +27,21 @@
#include "common/str-array.h"
#include "common/memstream.h"
#include "common/translation.h"
#ifdef ENABLE_ULTIMA1
#include "ultima/shared/early/ultima_early.h"
#endif
#ifdef ENABLE_ULTIMA4
#include "ultima/ultima4/ultima4.h"
#include "ultima/ultima4/metaengine.h"
#endif
#ifdef ENABLE_ULTIMA6
#include "ultima/nuvie/metaengine.h"
#include "ultima/nuvie/nuvie.h"
#endif
#ifdef ENABLE_ULTIMA8
#include "ultima/ultima8/ultima8.h"
#include "ultima/ultima8/metaengine.h"
#endif

#include "ultima/metaengine.h"

Expand Down Expand Up @@ -174,24 +182,30 @@ const ADExtraGuiOptionsMap *UltimaMetaEngine::getAdvancedExtraGuiOptions() const
Common::Error UltimaMetaEngine::createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const {
const Ultima::UltimaGameDescription *gd = (const Ultima::UltimaGameDescription *)desc;
switch (gd->gameId) {
#ifndef RELEASE_BUILD
#ifdef ENABLE_ULTIMA1
case Ultima::GAME_ULTIMA1:
*engine = new Ultima::Shared::UltimaEarlyEngine(syst, gd);
break;
#endif
#ifdef ENABLE_ULTIMA4
case Ultima::GAME_ULTIMA4:
*engine = new Ultima::Ultima4::Ultima4Engine(syst, gd);
break;
#endif
#ifdef ENABLE_ULTIMA6
case Ultima::GAME_ULTIMA6:
case Ultima::GAME_MARTIAN_DREAMS:
case Ultima::GAME_SAVAGE_EMPIRE:
*engine = new Ultima::Nuvie::NuvieEngine(syst, gd);
break;
#endif
#ifdef ENABLE_ULTIMA8
case Ultima::GAME_ULTIMA8:
case Ultima::GAME_CRUSADER_REG:
case Ultima::GAME_CRUSADER_REM:
*engine = new Ultima::Ultima8::Ultima8Engine(syst, gd);
break;
#endif

default:
return Common::kUnsupportedGameidError;
Expand All @@ -206,35 +220,45 @@ int UltimaMetaEngine::getMaximumSaveSlot() const {
SaveStateList UltimaMetaEngine::listSaves(const char *target) const {
SaveStateList saveList = AdvancedMetaEngine::listSaves(target);

#ifdef ENABLE_ULTIMA6
Common::String gameId = getGameId(target);
if (gameId == "ultima6" || gameId == "ultima6_enh")
Ultima::Nuvie::MetaEngine::listSaves(saveList);
#endif

return saveList;
}

SaveStateDescriptor UltimaMetaEngine::querySaveMetaInfos(const char *target, int slot) const {
SaveStateDescriptor desc = AdvancedMetaEngine::querySaveMetaInfos(target, slot);
if (!desc.isValid() && slot > 0) {
#ifdef ENABLE_ULTIMA8
Common::String gameId = getGameId(target);
if (gameId == "ultima8") {
Common::String filename = getSavegameFile(slot, target);
desc = SaveStateDescriptor(this, slot, Common::U32String());
if (!Ultima::Ultima8::MetaEngine::querySaveMetaInfos(filename, desc))
return SaveStateDescriptor();
}
#endif
}

return desc;
}

Common::KeymapArray UltimaMetaEngine::initKeymaps(const char *target) const {
#if defined(ENABLE_ULTIMA4) || defined(ENABLE_ULTIMA8)
const Common::String gameId = getGameId(target);
#endif

#ifdef ENABLE_ULTIMA4
if (gameId == "ultima4" || gameId == "ultima4_enh")
return Ultima::Ultima4::MetaEngine::initKeymaps();
#endif
#ifdef ENABLE_ULTIMA8
if (gameId == "ultima8" || gameId == "remorse" || gameId == "regret")
return Ultima::Ultima8::MetaEngine::initKeymaps(gameId);

#endif
return Common::KeymapArray();
}

Expand Down
24 changes: 20 additions & 4 deletions engines/ultima/module.mk
Expand Up @@ -52,7 +52,10 @@ MODULE_OBJS := \
shared/maps/map_tile.o \
shared/maps/map_widget.o \
shared/maps/creature.o \
shared/std/string.o \
shared/std/string.o

ifdef ENABLE_ULTIMA1
MODULE_OBJS += \
ultima0/core/resources.o \
ultima0/game.o \
ultima0/resources.o \
Expand Down Expand Up @@ -132,7 +135,11 @@ MODULE_OBJS := \
ultima1/widgets/urban_player.o \
ultima1/widgets/urban_widget.o \
ultima1/widgets/wench.o \
ultima1/game.o \
ultima1/game.o
endif

ifdef ENABLE_ULTIMA4
MODULE_OBJS += \
ultima4/controllers/alpha_action_controller.o \
ultima4/controllers/camp_controller.o \
ultima4/controllers/combat_controller.o \
Expand Down Expand Up @@ -219,7 +226,11 @@ MODULE_OBJS := \
ultima4/views/tileview.o \
ultima4/views/view.o \
ultima4/metaengine.o \
ultima4/ultima4.o \
ultima4/ultima4.o
endif

ifdef ENABLE_ULTIMA6
MODULE_OBJS += \
nuvie/metaengine.o \
nuvie/nuvie.o \
nuvie/actors/actor.o \
Expand Down Expand Up @@ -380,7 +391,11 @@ MODULE_OBJS := \
nuvie/views/sun_moon_ribbon.o \
nuvie/views/sun_moon_strip_widget.o \
nuvie/views/view.o \
nuvie/views/view_manager.o \
nuvie/views/view_manager.o
endif

ifdef ENABLE_ULTIMA8
MODULE_OBJS += \
ultima8/metaengine.o \
ultima8/ultima8.o \
ultima8/audio/audio_channel.o \
Expand Down Expand Up @@ -584,6 +599,7 @@ MODULE_OBJS := \
ultima8/world/actors/targeted_anim_process.o \
ultima8/world/actors/teleport_to_egg_process.o \
ultima8/world/actors/u8_avatar_mover_process.o
endif

# This module can be built as a plugin
ifeq ($(ENABLE_ULTIMA), DYNAMIC_PLUGIN)
Expand Down

0 comments on commit 473cf8d

Please sign in to comment.