[Scummvm-git-logs] scummvm master -> 709526444385cbd9b0af011740a1bd4ce30ee511
OMGPizzaGuy
48367439+OMGPizzaGuy at users.noreply.github.com
Sat Feb 13 04:44:07 UTC 2021
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
7095264443 ULTIMA8: Move remaining CoreApp code into Ultima8Engine
Commit: 709526444385cbd9b0af011740a1bd4ce30ee511
https://github.com/scummvm/scummvm/commit/709526444385cbd9b0af011740a1bd4ce30ee511
Author: Matthew Jimenez (matthew.jimenez at outlook.com)
Date: 2021-02-12T22:43:51-06:00
Commit Message:
ULTIMA8: Move remaining CoreApp code into Ultima8Engine
Changed paths:
R engines/ultima/ultima8/kernel/core_app.cpp
R engines/ultima/ultima8/kernel/core_app.h
engines/ultima/module.mk
engines/ultima/ultima8/audio/audio_mixer.cpp
engines/ultima/ultima8/games/u8_game.cpp
engines/ultima/ultima8/graphics/anim_dat.cpp
engines/ultima/ultima8/graphics/fonts/shape_font.cpp
engines/ultima/ultima8/graphics/palette_fader_process.cpp
engines/ultima/ultima8/graphics/shape_info.cpp
engines/ultima/ultima8/graphics/type_flags.cpp
engines/ultima/ultima8/gumps/readable_gump.cpp
engines/ultima/ultima8/kernel/process.cpp
engines/ultima/ultima8/meta_engine.cpp
engines/ultima/ultima8/ultima8.cpp
engines/ultima/ultima8/ultima8.h
engines/ultima/ultima8/usecode/uc_machine.cpp
engines/ultima/ultima8/usecode/usecode.cpp
engines/ultima/ultima8/usecode/usecode_flex.cpp
engines/ultima/ultima8/world/actors/anim_action.cpp
engines/ultima/ultima8/world/actors/animation.cpp
engines/ultima/ultima8/world/actors/avatar_death_process.cpp
engines/ultima/ultima8/world/actors/loiter_process.cpp
engines/ultima/ultima8/world/camera_process.cpp
engines/ultima/ultima8/world/container.cpp
engines/ultima/ultima8/world/glob_egg.cpp
engines/ultima/ultima8/world/gravity_process.cpp
engines/ultima/ultima8/world/item_factory.cpp
engines/ultima/ultima8/world/item_selection_process.cpp
engines/ultima/ultima8/world/map.cpp
engines/ultima/ultima8/world/sprite_process.cpp
diff --git a/engines/ultima/module.mk b/engines/ultima/module.mk
index 0a9bffa7f6..690c7c02f8 100644
--- a/engines/ultima/module.mk
+++ b/engines/ultima/module.mk
@@ -492,7 +492,6 @@ MODULE_OBJS := \
ultima8/gumps/widgets/edit_widget.o \
ultima8/gumps/widgets/sliding_widget.o \
ultima8/gumps/widgets/text_widget.o \
- ultima8/kernel/core_app.o \
ultima8/kernel/delay_process.o \
ultima8/kernel/kernel.o \
ultima8/kernel/mouse.o \
diff --git a/engines/ultima/ultima8/audio/audio_mixer.cpp b/engines/ultima/ultima8/audio/audio_mixer.cpp
index 0cab5a165e..5b3658bff4 100644
--- a/engines/ultima/ultima8/audio/audio_mixer.cpp
+++ b/engines/ultima/ultima8/audio/audio_mixer.cpp
@@ -27,7 +27,7 @@
#include "ultima/ultima8/audio/audio_channel.h"
#include "ultima/ultima8/audio/midi_player.h"
#include "ultima/ultima8/kernel/kernel.h"
-#include "ultima/ultima8/kernel/core_app.h"
+#include "ultima/ultima8/ultima8.h"
namespace Ultima {
namespace Ultima8 {
diff --git a/engines/ultima/ultima8/games/u8_game.cpp b/engines/ultima/ultima8/games/u8_game.cpp
index b692941347..85491967f8 100644
--- a/engines/ultima/ultima8/games/u8_game.cpp
+++ b/engines/ultima/ultima8/games/u8_game.cpp
@@ -156,7 +156,7 @@ bool U8Game::startInitialUsecode(int saveSlot) {
ProcId U8Game::playIntroMovie(bool fade) {
- const GameInfo *gameinfo = CoreApp::get_instance()->getGameInfo();
+ const GameInfo *gameinfo = Ultima8Engine::get_instance()->getGameInfo();
char langletter = gameinfo->getLanguageFileLetter();
if (!langletter) {
perr << "U8Game::playIntro: Unknown language." << Std::endl;
@@ -190,7 +190,7 @@ ProcId U8Game::playEndgameMovie(bool fade) {
}
void U8Game::playCredits() {
- const GameInfo *gameinfo = CoreApp::get_instance()->getGameInfo();
+ const GameInfo *gameinfo = Ultima8Engine::get_instance()->getGameInfo();
char langletter = gameinfo->getLanguageFileLetter();
if (!langletter) {
perr << "U8Game::playCredits: Unknown language." << Std::endl;
diff --git a/engines/ultima/ultima8/graphics/anim_dat.cpp b/engines/ultima/ultima8/graphics/anim_dat.cpp
index 6dff0009b2..ab9b81f14d 100644
--- a/engines/ultima/ultima8/graphics/anim_dat.cpp
+++ b/engines/ultima/ultima8/graphics/anim_dat.cpp
@@ -27,7 +27,7 @@
#include "ultima/ultima8/world/actors/actor_anim.h"
#include "ultima/ultima8/world/actors/actor.h"
#include "ultima/ultima8/world/get_object.h"
-#include "ultima/ultima8/kernel/core_app.h"
+#include "ultima/ultima8/ultima8.h"
namespace Ultima {
namespace Ultima8 {
diff --git a/engines/ultima/ultima8/graphics/fonts/shape_font.cpp b/engines/ultima/ultima8/graphics/fonts/shape_font.cpp
index 69928019ee..014f1f5704 100644
--- a/engines/ultima/ultima8/graphics/fonts/shape_font.cpp
+++ b/engines/ultima/ultima8/graphics/fonts/shape_font.cpp
@@ -21,7 +21,7 @@
*/
#include "ultima/ultima8/misc/pent_include.h"
-#include "ultima/ultima8/kernel/core_app.h"
+#include "ultima/ultima8/ultima8.h"
#include "ultima/ultima8/graphics/fonts/shape_font.h"
#include "ultima/ultima8/graphics/shape_frame.h"
#include "ultima/ultima8/graphics/fonts/shape_rendered_text.h"
diff --git a/engines/ultima/ultima8/graphics/palette_fader_process.cpp b/engines/ultima/ultima8/graphics/palette_fader_process.cpp
index f6efb2ea11..0524d8ef25 100644
--- a/engines/ultima/ultima8/graphics/palette_fader_process.cpp
+++ b/engines/ultima/ultima8/graphics/palette_fader_process.cpp
@@ -22,7 +22,7 @@
#include "ultima/ultima8/graphics/palette_fader_process.h"
#include "ultima/ultima8/kernel/kernel.h"
-#include "ultima/ultima8/kernel/core_app.h"
+#include "ultima/ultima8/ultima8.h"
namespace Ultima {
namespace Ultima8 {
diff --git a/engines/ultima/ultima8/graphics/shape_info.cpp b/engines/ultima/ultima8/graphics/shape_info.cpp
index e1d43f1e6d..cdcb89190c 100644
--- a/engines/ultima/ultima8/graphics/shape_info.cpp
+++ b/engines/ultima/ultima8/graphics/shape_info.cpp
@@ -23,7 +23,7 @@
#include "ultima/ultima8/misc/pent_include.h"
#include "ultima/ultima8/graphics/shape_info.h"
-#include "ultima/ultima8/kernel/core_app.h"
+#include "ultima/ultima8/ultima8.h"
namespace Ultima {
namespace Ultima8 {
diff --git a/engines/ultima/ultima8/graphics/type_flags.cpp b/engines/ultima/ultima8/graphics/type_flags.cpp
index 3f77238831..d58a45a86e 100644
--- a/engines/ultima/ultima8/graphics/type_flags.cpp
+++ b/engines/ultima/ultima8/graphics/type_flags.cpp
@@ -24,7 +24,7 @@
#include "ultima/ultima8/graphics/type_flags.h"
#include "ultima/ultima8/conf/config_file_manager.h"
-#include "ultima/ultima8/kernel/core_app.h"
+#include "ultima/ultima8/ultima8.h"
#include "ultima/ultima8/games/game_data.h"
#include "ultima/ultima8/graphics/main_shape_archive.h"
#include "ultima/ultima8/graphics/shape.h"
diff --git a/engines/ultima/ultima8/gumps/readable_gump.cpp b/engines/ultima/ultima8/gumps/readable_gump.cpp
index 6457f69f71..2e3ebff2dc 100644
--- a/engines/ultima/ultima8/gumps/readable_gump.cpp
+++ b/engines/ultima/ultima8/gumps/readable_gump.cpp
@@ -28,7 +28,7 @@
#include "ultima/ultima8/gumps/gump_notify_process.h"
#include "ultima/ultima8/world/item.h"
#include "ultima/ultima8/world/get_object.h"
-#include "ultima/ultima8/kernel/core_app.h"
+#include "ultima/ultima8/ultima8.h"
namespace Ultima {
namespace Ultima8 {
@@ -58,7 +58,7 @@ void ReadableGump::InitGump(Gump *newparent, bool take_focus) {
UpdateDimsFromShape();
- if (CoreApp::get_instance()->getGameInfo()->_language ==
+ if (Ultima8Engine::get_instance()->getGameInfo()->_language ==
GameInfo::GAMELANG_JAPANESE) {
// Japanese subtitles
Std::string::size_type pos;
diff --git a/engines/ultima/ultima8/kernel/core_app.cpp b/engines/ultima/ultima8/kernel/core_app.cpp
deleted file mode 100644
index d991987540..0000000000
--- a/engines/ultima/ultima8/kernel/core_app.cpp
+++ /dev/null
@@ -1,143 +0,0 @@
-/* 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/config-manager.h"
-#include "ultima/ultima8/misc/pent_include.h"
-#include "ultima/ultima8/kernel/core_app.h"
-#include "ultima/ultima8/filesys/file_system.h"
-#include "ultima/ultima8/conf/config_file_manager.h"
-
-namespace Ultima {
-namespace Ultima8 {
-
-using Std::string;
-
-CoreApp *CoreApp::_application = nullptr;
-
-CoreApp::CoreApp(const Ultima::UltimaGameDescription *gameDesc)
- : _gameDesc(gameDesc), _gameInfo(nullptr), _fileSystem(nullptr),
- _configFileMan(nullptr) {
- _application = this;
-}
-
-CoreApp::~CoreApp() {
- FORGET_OBJECT(_fileSystem);
- FORGET_OBJECT(_configFileMan);
- FORGET_OBJECT(_gameInfo);
-
- _application = nullptr;
-}
-
-void CoreApp::startup() {
- _gameInfo = nullptr;
-
- _fileSystem = new FileSystem;
-
- _configFileMan = new ConfigFileManager();
-
-}
-
-bool CoreApp::setupGame() {
- istring gamename = _gameDesc->desc.gameId;
- GameInfo *info = new GameInfo;
- bool detected = getGameInfo(gamename, info);
-
- // output detected game info
- debugN(MM_INFO, "%s: ", gamename.c_str());
- if (detected) {
- // add game to games map
- Std::string details = info->getPrintDetails();
- debugN(MM_INFO, "%s", details.c_str());
- } else {
- debugN(MM_INFO, "unknown, skipping");
- return false;
- }
-
- _gameInfo = info;
-
- pout << "Selected game: " << info->_name << Std::endl;
- pout << info->getPrintDetails() << Std::endl;
-
- // load main game data path - it needs to be empty
- //Std::string gpath = ConfMan.get("path");
- _fileSystem->AddVirtualPath("@game", "");
-
- return true;
-}
-
-void CoreApp::killGame() {
- _fileSystem->RemoveVirtualPath("@game");
-
- _configFileMan->clearRoot("bindings");
- _configFileMan->clearRoot("language");
- _configFileMan->clearRoot("weapons");
- _configFileMan->clearRoot("armour");
- _configFileMan->clearRoot("monsters");
- _configFileMan->clearRoot("game");
- _gameInfo = nullptr;
-}
-
-
-bool CoreApp::getGameInfo(const istring &game, GameInfo *ginfo) {
- // first try getting the information from the config file
- // if that fails, try to autodetect it
-
- ginfo->_name = game;
- ginfo->_type = GameInfo::GAME_UNKNOWN;
- ginfo->version = 0;
- ginfo->_language = GameInfo::GAMELANG_UNKNOWN;
-
- assert(game == "ultima8" || game == "remorse" || game == "regret");
-
- if (game == "ultima8")
- ginfo->_type = GameInfo::GAME_U8;
- else if (game == "remorse")
- ginfo->_type = GameInfo::GAME_REMORSE;
- else if (game == "regret")
- ginfo->_type = GameInfo::GAME_REGRET;
-
- switch (_gameDesc->desc.language) {
- case Common::EN_ANY:
- ginfo->_language = GameInfo::GAMELANG_ENGLISH;
- break;
- case Common::FR_FRA:
- ginfo->_language = GameInfo::GAMELANG_FRENCH;
- break;
- case Common::DE_DEU:
- ginfo->_language = GameInfo::GAMELANG_GERMAN;
- break;
- case Common::ES_ESP:
- ginfo->_language = GameInfo::GAMELANG_SPANISH;
- break;
- case Common::JA_JPN:
- ginfo->_language = GameInfo::GAMELANG_JAPANESE;
- break;
- default:
- error("Unknown language");
- break;
- }
-
- return ginfo->_type != GameInfo::GAME_UNKNOWN;
-}
-
-} // End of namespace Ultima8
-} // End of namespace Ultima
diff --git a/engines/ultima/ultima8/kernel/core_app.h b/engines/ultima/ultima8/kernel/core_app.h
deleted file mode 100644
index 1cb89d09da..0000000000
--- a/engines/ultima/ultima8/kernel/core_app.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/* 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 ULTIMA8_KERNEL_COREAPP_H
-#define ULTIMA8_KERNEL_COREAPP_H
-
-#include "ultima/ultima8/games/game_info.h"
-#include "ultima/detection.h"
-
-namespace Ultima {
-namespace Ultima8 {
-
-class FileSystem;
-class ConfigFileManager;
-struct GameInfo;
-
-
-#define GAME_IS_U8 (CoreApp::get_instance()->getGameInfo()->_type == GameInfo::GAME_U8)
-#define GAME_IS_REMORSE (CoreApp::get_instance()->getGameInfo()->_type == GameInfo::GAME_REMORSE)
-#define GAME_IS_REGRET (CoreApp::get_instance()->getGameInfo()->_type == GameInfo::GAME_REGRET)
-#define GAME_IS_CRUSADER (GAME_IS_REMORSE || GAME_IS_REGRET)
-
-
-class CoreApp {
-public:
- CoreApp(const Ultima::UltimaGameDescription *gameDesc);
- virtual ~CoreApp();
-
- static CoreApp *get_instance() {
- return _application;
- };
-
- //! Startup the application. This will prepare the application for run().
- //! Should call parent class' startup().
- void startup();
-
- //! Get current GameInfo struct
- const GameInfo *getGameInfo() const {
- return _gameInfo;
- }
-
-protected:
- GameInfo *_gameInfo;
-
- // minimal system
- FileSystem *_fileSystem;
- ConfigFileManager *_configFileMan;
-
- static CoreApp *_application;
-
-private:
- const Ultima::UltimaGameDescription *_gameDesc;
-
- //! Fill a GameInfo struct for the give game name
- //! \param game The id of the game to check (from pentagram.cfg)
- //! \param gameinfo The GameInfo struct to fill
- //! \return true if detected all the fields, false if detection failed
- bool getGameInfo(const istring &game, GameInfo *gameinfo);
-
-protected:
- //! Setup up a game
- //! \return false if failed
- bool setupGame();
-
- //! kill current gameinfo
- void killGame();
-};
-
-} // End of namespace Ultima8
-} // End of namespace Ultima
-
-#endif
diff --git a/engines/ultima/ultima8/kernel/process.cpp b/engines/ultima/ultima8/kernel/process.cpp
index ed6fd217a4..d4fffc0330 100644
--- a/engines/ultima/ultima8/kernel/process.cpp
+++ b/engines/ultima/ultima8/kernel/process.cpp
@@ -22,7 +22,7 @@
#include "ultima/ultima8/kernel/process.h"
#include "ultima/ultima8/kernel/kernel.h"
-#include "ultima/ultima8/kernel/core_app.h"
+#include "ultima/ultima8/ultima8.h"
namespace Ultima {
namespace Ultima8 {
diff --git a/engines/ultima/ultima8/meta_engine.cpp b/engines/ultima/ultima8/meta_engine.cpp
index 6a77732d88..00ed723cf7 100644
--- a/engines/ultima/ultima8/meta_engine.cpp
+++ b/engines/ultima/ultima8/meta_engine.cpp
@@ -219,7 +219,7 @@ void MetaEngine::setGameMenuActive(bool isActive) {
Common::Keymapper *const mapper = g_engine->getEventManager()->getKeymapper();
mapper->cleanupGameKeymaps();
- const Common::String gameId = CoreApp::get_instance()->getGameInfo()->_name;
+ const Common::String gameId = Ultima8Engine::get_instance()->getGameInfo()->_name;
Common::KeymapArray arr = initKeymaps(gameId, isActive);
diff --git a/engines/ultima/ultima8/ultima8.cpp b/engines/ultima/ultima8/ultima8.cpp
index 83985e2c8e..e1d95c756d 100644
--- a/engines/ultima/ultima8/ultima8.cpp
+++ b/engines/ultima/ultima8/ultima8.cpp
@@ -25,6 +25,7 @@
#include "image/png.h"
// TODO: !! a lot of these includes are just for some hacks... clean up sometime
+#include "ultima/ultima8/conf/config_file_manager.h"
#include "ultima/ultima8/filesys/file_system.h"
#include "ultima/ultima8/kernel/object_manager.h"
#include "ultima/ultima8/games/start_u8_process.h"
@@ -110,9 +111,12 @@ struct ProcessLoader {
inline bool HasPreventSaveFlag(const Gump *g) { return g->hasFlags(Gump::FLAG_PREVENT_SAVE); }
+Ultima8Engine *Ultima8Engine::_instance = nullptr;
+
Ultima8Engine::Ultima8Engine(OSystem *syst, const Ultima::UltimaGameDescription *gameDesc) :
- Shared::UltimaEngine(syst, gameDesc), CoreApp(gameDesc),
- _isRunning(false), _saveCount(0), _game(nullptr),
+ Shared::UltimaEngine(syst, gameDesc),
+ _isRunning(false), _gameInfo(nullptr), _fileSystem(nullptr),
+ _configFileMan(nullptr), _saveCount(0), _game(nullptr),
_kernel(nullptr), _objectManager(nullptr), _mouse(nullptr), _ucMachine(nullptr),
_screen(nullptr), _fontManager(nullptr), _paletteManager(nullptr), _gameData(nullptr),
_world(nullptr), _desktopGump(nullptr), _gameMapGump(nullptr), _avatarMoverProcess(nullptr),
@@ -121,7 +125,7 @@ Ultima8Engine::Ultima8Engine(OSystem *syst, const Ultima::UltimaGameDescription
_showTouching(false), _timeOffset(0), _hasCheated(false), _cheatsEnabled(false),
_ttfOverrides(false), _audioMixer(0), _inverterGump(nullptr), _lerpFactor(256),
_inBetweenFrame(false), _unkCrusaderFlag(false), _moveKeyFrame(0) {
- _application = this;
+ _instance = this;
}
Ultima8Engine::~Ultima8Engine() {
@@ -137,6 +141,11 @@ Ultima8Engine::~Ultima8Engine() {
FORGET_OBJECT(_ucMachine);
FORGET_OBJECT(_fontManager);
FORGET_OBJECT(_screen);
+ FORGET_OBJECT(_fileSystem);
+ FORGET_OBJECT(_configFileMan);
+ FORGET_OBJECT(_gameInfo);
+
+ _instance = nullptr;
}
Common::Error Ultima8Engine::run() {
@@ -182,9 +191,9 @@ bool Ultima8Engine::startup() {
setDebugger(new Debugger());
pout << "-- Initializing Pentagram -- " << Std::endl;
- // parent's startup first
- CoreApp::startup();
-
+ _gameInfo = nullptr;
+ _fileSystem = new FileSystem;
+ _configFileMan = new ConfigFileManager();
_kernel = new Kernel();
//!! move this elsewhere
@@ -305,6 +314,34 @@ bool Ultima8Engine::startup() {
return true;
}
+bool Ultima8Engine::setupGame() {
+ istring gamename = _gameDescription->desc.gameId;
+ GameInfo *info = new GameInfo;
+ bool detected = getGameInfo(gamename, info);
+
+ // output detected game info
+ debugN(MM_INFO, "%s: ", gamename.c_str());
+ if (detected) {
+ // add game to games map
+ Std::string details = info->getPrintDetails();
+ debugN(MM_INFO, "%s", details.c_str());
+ } else {
+ debugN(MM_INFO, "unknown, skipping");
+ return false;
+ }
+
+ _gameInfo = info;
+
+ pout << "Selected game: " << info->_name << Std::endl;
+ pout << info->getPrintDetails() << Std::endl;
+
+ // load main game data path - it needs to be empty
+ //Std::string gpath = ConfMan.get("path");
+ _fileSystem->AddVirtualPath("@game", "");
+
+ return true;
+}
+
bool Ultima8Engine::startupGame() {
pout << Std::endl << "-- Initializing Game: " << _gameInfo->_name << " --" << Std::endl;
@@ -404,8 +441,15 @@ void Ultima8Engine::shutdownGame(bool reloading) {
_saveCount = 0;
_hasCheated = false;
- // Kill Game
- CoreApp::killGame();
+ _fileSystem->RemoveVirtualPath("@game");
+
+ _configFileMan->clearRoot("bindings");
+ _configFileMan->clearRoot("language");
+ _configFileMan->clearRoot("weapons");
+ _configFileMan->clearRoot("armour");
+ _configFileMan->clearRoot("monsters");
+ _configFileMan->clearRoot("game");
+ _gameInfo = nullptr;
pout << "-- Game Shutdown -- " << Std::endl;
@@ -768,6 +812,48 @@ void Ultima8Engine::handleDelayedEvents() {
_mouse->handleDelayedEvents();
}
+bool Ultima8Engine::getGameInfo(const istring &game, GameInfo *ginfo) {
+ // first try getting the information from the config file
+ // if that fails, try to autodetect it
+
+ ginfo->_name = game;
+ ginfo->_type = GameInfo::GAME_UNKNOWN;
+ ginfo->version = 0;
+ ginfo->_language = GameInfo::GAMELANG_UNKNOWN;
+
+ assert(game == "ultima8" || game == "remorse" || game == "regret");
+
+ if (game == "ultima8")
+ ginfo->_type = GameInfo::GAME_U8;
+ else if (game == "remorse")
+ ginfo->_type = GameInfo::GAME_REMORSE;
+ else if (game == "regret")
+ ginfo->_type = GameInfo::GAME_REGRET;
+
+ switch (_gameDescription->desc.language) {
+ case Common::EN_ANY:
+ ginfo->_language = GameInfo::GAMELANG_ENGLISH;
+ break;
+ case Common::FR_FRA:
+ ginfo->_language = GameInfo::GAMELANG_FRENCH;
+ break;
+ case Common::DE_DEU:
+ ginfo->_language = GameInfo::GAMELANG_GERMAN;
+ break;
+ case Common::ES_ESP:
+ ginfo->_language = GameInfo::GAMELANG_SPANISH;
+ break;
+ case Common::JA_JPN:
+ ginfo->_language = GameInfo::GAMELANG_JAPANESE;
+ break;
+ default:
+ error("Unknown language");
+ break;
+ }
+
+ return ginfo->_type != GameInfo::GAME_UNKNOWN;
+}
+
void Ultima8Engine::writeSaveInfo(Common::WriteStream *ws) {
TimeDate timeInfo;
g_system->getTimeAndDate(timeInfo);
diff --git a/engines/ultima/ultima8/ultima8.h b/engines/ultima/ultima8/ultima8.h
index 3399d7d045..7a86ff8cc4 100644
--- a/engines/ultima/ultima8/ultima8.h
+++ b/engines/ultima/ultima8/ultima8.h
@@ -29,7 +29,8 @@
#include "ultima/shared/engine/ultima.h"
#include "ultima/ultima8/usecode/intrinsics.h"
#include "ultima/ultima8/misc/common_types.h"
-#include "ultima/ultima8/kernel/core_app.h"
+#include "ultima/ultima8/games/game_info.h"
+#include "ultima/detection.h"
namespace Ultima {
namespace Ultima8 {
@@ -52,11 +53,26 @@ class Mouse;
class AvatarMoverProcess;
class Texture;
class AudioMixer;
+class FileSystem;
+class ConfigFileManager;
+struct GameInfo;
-class Ultima8Engine : public Shared::UltimaEngine, public CoreApp {
+#define GAME_IS_U8 (Ultima8Engine::get_instance()->getGameInfo()->_type == GameInfo::GAME_U8)
+#define GAME_IS_REMORSE (Ultima8Engine::get_instance()->getGameInfo()->_type == GameInfo::GAME_REMORSE)
+#define GAME_IS_REGRET (Ultima8Engine::get_instance()->getGameInfo()->_type == GameInfo::GAME_REGRET)
+#define GAME_IS_CRUSADER (GAME_IS_REMORSE || GAME_IS_REGRET)
+
+class Ultima8Engine : public Shared::UltimaEngine {
friend class Debugger;
private:
bool _isRunning;
+ GameInfo *_gameInfo;
+
+ // minimal system
+ FileSystem *_fileSystem;
+ ConfigFileManager *_configFileMan;
+
+ static Ultima8Engine *_instance;
Std::list<ObjId> _textModes; //!< Gumps that want text mode
bool _ttfOverrides;
@@ -140,6 +156,13 @@ private:
void GraphicSysInit(); // starts/restarts the graphics subsystem
void handleDelayedEvents();
+
+ //! Fill a GameInfo struct for the give game name
+ //! \param game The id of the game to check (from pentagram.cfg)
+ //! \param gameinfo The GameInfo struct to fill
+ //! \return true if detected all the fields, false if detection failed
+ bool getGameInfo(const istring &game, GameInfo *gameinfo);
+
protected:
// Engine APIs
Common::Error run() override;
@@ -156,7 +179,7 @@ public:
~Ultima8Engine() override;
static Ultima8Engine *get_instance() {
- return dynamic_cast<Ultima8Engine *>(_application);
+ return _instance;
}
bool hasFeature(EngineFeature f) const override;
@@ -164,11 +187,17 @@ public:
bool startup();
void shutdown();
+ bool setupGame();
bool startupGame();
void shutdownGame(bool reloading = true);
void changeVideoMode(int width, int height);
+ //! Get current GameInfo struct
+ const GameInfo *getGameInfo() const {
+ return _gameInfo;
+ }
+
RenderSurface *getRenderScreen() {
return _screen;
}
diff --git a/engines/ultima/ultima8/usecode/uc_machine.cpp b/engines/ultima/ultima8/usecode/uc_machine.cpp
index 69baee4bf4..fe493e17e1 100644
--- a/engines/ultima/ultima8/usecode/uc_machine.cpp
+++ b/engines/ultima/ultima8/usecode/uc_machine.cpp
@@ -26,7 +26,7 @@
#include "ultima/ultima8/usecode/usecode.h"
#include "ultima/ultima8/kernel/kernel.h"
#include "ultima/ultima8/kernel/delay_process.h"
-#include "ultima/ultima8/kernel/core_app.h"
+#include "ultima/ultima8/ultima8.h"
#include "ultima/ultima8/world/current_map.h"
#include "ultima/ultima8/world/world.h"
#include "ultima/ultima8/usecode/bit_set.h"
diff --git a/engines/ultima/ultima8/usecode/usecode.cpp b/engines/ultima/ultima8/usecode/usecode.cpp
index fd272c1e14..32d0134052 100644
--- a/engines/ultima/ultima8/usecode/usecode.cpp
+++ b/engines/ultima/ultima8/usecode/usecode.cpp
@@ -23,7 +23,7 @@
#include "ultima/ultima8/misc/pent_include.h"
#include "ultima/ultima8/usecode/usecode.h"
-#include "ultima/ultima8/kernel/core_app.h"
+#include "ultima/ultima8/ultima8.h"
namespace Ultima {
namespace Ultima8 {
diff --git a/engines/ultima/ultima8/usecode/usecode_flex.cpp b/engines/ultima/ultima8/usecode/usecode_flex.cpp
index 86ba5d05f4..ca55dba608 100644
--- a/engines/ultima/ultima8/usecode/usecode_flex.cpp
+++ b/engines/ultima/ultima8/usecode/usecode_flex.cpp
@@ -23,7 +23,7 @@
#include "ultima/ultima8/misc/pent_include.h"
#include "ultima/ultima8/usecode/usecode_flex.h"
-#include "ultima/ultima8/kernel/core_app.h"
+#include "ultima/ultima8/ultima8.h"
namespace Ultima {
namespace Ultima8 {
diff --git a/engines/ultima/ultima8/world/actors/anim_action.cpp b/engines/ultima/ultima8/world/actors/anim_action.cpp
index 0771441f3f..1532b5ff8d 100644
--- a/engines/ultima/ultima8/world/actors/anim_action.cpp
+++ b/engines/ultima/ultima8/world/actors/anim_action.cpp
@@ -22,7 +22,7 @@
#include "ultima/ultima8/world/actors/anim_action.h"
#include "ultima/ultima8/world/actors/actor.h"
-#include "ultima/ultima8/kernel/core_app.h"
+#include "ultima/ultima8/ultima8.h"
namespace Ultima {
namespace Ultima8 {
diff --git a/engines/ultima/ultima8/world/actors/animation.cpp b/engines/ultima/ultima8/world/actors/animation.cpp
index e7b0da2a2a..44e053dfd1 100644
--- a/engines/ultima/ultima8/world/actors/animation.cpp
+++ b/engines/ultima/ultima8/world/actors/animation.cpp
@@ -22,7 +22,7 @@
#include "ultima/ultima8/misc/pent_include.h"
#include "ultima/ultima8/world/actors/animation.h"
-#include "ultima/ultima8/kernel/core_app.h"
+#include "ultima/ultima8/ultima8.h"
namespace Ultima {
namespace Ultima8 {
diff --git a/engines/ultima/ultima8/world/actors/avatar_death_process.cpp b/engines/ultima/ultima8/world/actors/avatar_death_process.cpp
index 3335388d70..56146ac706 100644
--- a/engines/ultima/ultima8/world/actors/avatar_death_process.cpp
+++ b/engines/ultima/ultima8/world/actors/avatar_death_process.cpp
@@ -26,7 +26,7 @@
#include "ultima/ultima8/gumps/readable_gump.h"
#include "ultima/ultima8/games/game_data.h"
#include "ultima/ultima8/kernel/kernel.h"
-#include "ultima/ultima8/kernel/core_app.h"
+#include "ultima/ultima8/ultima8.h"
#include "ultima/ultima8/kernel/delay_process.h"
#include "ultima/ultima8/gumps/main_menu_process.h"
#include "ultima/ultima8/gumps/gump_notify_process.h"
diff --git a/engines/ultima/ultima8/world/actors/loiter_process.cpp b/engines/ultima/ultima8/world/actors/loiter_process.cpp
index 6dc38796c2..16223e9b24 100644
--- a/engines/ultima/ultima8/world/actors/loiter_process.cpp
+++ b/engines/ultima/ultima8/world/actors/loiter_process.cpp
@@ -25,7 +25,7 @@
#include "ultima/ultima8/world/actors/pathfinder_process.h"
#include "ultima/ultima8/kernel/kernel.h"
#include "ultima/ultima8/kernel/delay_process.h"
-#include "ultima/ultima8/kernel/core_app.h"
+#include "ultima/ultima8/ultima8.h"
#include "ultima/ultima8/world/get_object.h"
namespace Ultima {
diff --git a/engines/ultima/ultima8/world/camera_process.cpp b/engines/ultima/ultima8/world/camera_process.cpp
index 9be8214f70..07c3f1c1f1 100644
--- a/engines/ultima/ultima8/world/camera_process.cpp
+++ b/engines/ultima/ultima8/world/camera_process.cpp
@@ -25,7 +25,7 @@
#include "ultima/ultima8/world/current_map.h"
#include "ultima/ultima8/world/actors/actor.h"
#include "ultima/ultima8/kernel/kernel.h"
-#include "ultima/ultima8/kernel/core_app.h"
+#include "ultima/ultima8/ultima8.h"
#include "ultima/ultima8/world/get_object.h"
namespace Ultima {
diff --git a/engines/ultima/ultima8/world/container.cpp b/engines/ultima/ultima8/world/container.cpp
index 3e9aabcd0c..5117999a51 100644
--- a/engines/ultima/ultima8/world/container.cpp
+++ b/engines/ultima/ultima8/world/container.cpp
@@ -28,7 +28,7 @@
#include "ultima/ultima8/usecode/uc_list.h"
#include "ultima/ultima8/world/actors/main_actor.h"
#include "ultima/ultima8/world/get_object.h"
-#include "ultima/ultima8/kernel/core_app.h"
+#include "ultima/ultima8/ultima8.h"
namespace Ultima {
diff --git a/engines/ultima/ultima8/world/glob_egg.cpp b/engines/ultima/ultima8/world/glob_egg.cpp
index ceefcd1c3d..3774f754ca 100644
--- a/engines/ultima/ultima8/world/glob_egg.cpp
+++ b/engines/ultima/ultima8/world/glob_egg.cpp
@@ -25,7 +25,7 @@
#include "ultima/ultima8/world/map_glob.h"
#include "ultima/ultima8/games/game_data.h"
#include "ultima/ultima8/world/item_factory.h"
-#include "ultima/ultima8/kernel/core_app.h"
+#include "ultima/ultima8/ultima8.h"
namespace Ultima {
namespace Ultima8 {
diff --git a/engines/ultima/ultima8/world/gravity_process.cpp b/engines/ultima/ultima8/world/gravity_process.cpp
index dc1c3d5ddd..8327cb1bc7 100644
--- a/engines/ultima/ultima8/world/gravity_process.cpp
+++ b/engines/ultima/ultima8/world/gravity_process.cpp
@@ -24,7 +24,7 @@
#include "ultima/ultima8/audio/audio_process.h"
#include "ultima/ultima8/kernel/kernel.h"
-#include "ultima/ultima8/kernel/core_app.h"
+#include "ultima/ultima8/ultima8.h"
#include "ultima/ultima8/world/actors/actor.h"
#include "ultima/ultima8/world/actors/actor_anim_process.h"
#include "ultima/ultima8/world/get_object.h"
diff --git a/engines/ultima/ultima8/world/item_factory.cpp b/engines/ultima/ultima8/world/item_factory.cpp
index fdbebdebd1..f33420d735 100644
--- a/engines/ultima/ultima8/world/item_factory.cpp
+++ b/engines/ultima/ultima8/world/item_factory.cpp
@@ -29,7 +29,7 @@
#include "ultima/ultima8/world/glob_egg.h"
#include "ultima/ultima8/world/monster_egg.h"
#include "ultima/ultima8/world/teleport_egg.h"
-#include "ultima/ultima8/kernel/core_app.h"
+#include "ultima/ultima8/ultima8.h"
namespace Ultima {
namespace Ultima8 {
diff --git a/engines/ultima/ultima8/world/item_selection_process.cpp b/engines/ultima/ultima8/world/item_selection_process.cpp
index f8cd238c32..b6f8b5f07a 100644
--- a/engines/ultima/ultima8/world/item_selection_process.cpp
+++ b/engines/ultima/ultima8/world/item_selection_process.cpp
@@ -22,7 +22,7 @@
#include "ultima/ultima8/audio/audio_process.h"
-#include "ultima/ultima8/kernel/core_app.h"
+#include "ultima/ultima8/ultima8.h"
#include "ultima/ultima8/world/actors/main_actor.h"
#include "ultima/ultima8/world/item_selection_process.h"
#include "ultima/ultima8/world/item_factory.h"
diff --git a/engines/ultima/ultima8/world/map.cpp b/engines/ultima/ultima8/world/map.cpp
index 03a24a0e06..789900116c 100644
--- a/engines/ultima/ultima8/world/map.cpp
+++ b/engines/ultima/ultima8/world/map.cpp
@@ -25,7 +25,7 @@
#include "ultima/ultima8/world/item_factory.h"
#include "ultima/ultima8/world/container.h"
#include "ultima/ultima8/kernel/object_manager.h"
-#include "ultima/ultima8/kernel/core_app.h"
+#include "ultima/ultima8/ultima8.h"
#include "ultima/ultima8/games/game_data.h"
#include "ultima/ultima8/graphics/main_shape_archive.h"
diff --git a/engines/ultima/ultima8/world/sprite_process.cpp b/engines/ultima/ultima8/world/sprite_process.cpp
index 35bd0d8c8a..6393152a86 100644
--- a/engines/ultima/ultima8/world/sprite_process.cpp
+++ b/engines/ultima/ultima8/world/sprite_process.cpp
@@ -24,7 +24,7 @@
#include "ultima/ultima8/world/item_factory.h"
#include "ultima/ultima8/world/item.h"
#include "ultima/ultima8/kernel/kernel.h"
-#include "ultima/ultima8/kernel/core_app.h"
+#include "ultima/ultima8/ultima8.h"
#include "ultima/ultima8/world/get_object.h"
namespace Ultima {
More information about the Scummvm-git-logs
mailing list