From a7c8056d73accac3fa457cf6fc8374b144f7eca9 Mon Sep 17 00:00:00 2001 From: Cameron Cawley Date: Mon, 31 Jul 2023 13:07:37 +0100 Subject: [PATCH] ULTIMA: Split Ultima 8 resources into a separate archive --- Makefile.common | 2 +- devtools/create_project/xcode.cpp | 1 + .../create_ultima/files/ultima8/version.txt | 1 - .../files/ultima8 => create_ultima8}/Vera.ttf | Bin .../ultima8 => create_ultima8}/VeraBd.ttf | Bin .../Vera_copyright.txt | 0 .../ultima8 => create_ultima8}/pentagram.png | Bin .../regretweapons.ini | 0 .../ultima8 => create_ultima8}/remorse.ini | 0 .../remorsebindings.ini | 0 .../remorseweapons.ini | 0 .../files/ultima8 => create_ultima8}/u8.ini | 0 .../ultima8 => create_ultima8}/u8armour.ini | 0 .../ultima8 => create_ultima8}/u8english.ini | 0 .../ultima8 => create_ultima8}/u8french.ini | 0 .../ultima8 => create_ultima8}/u8german.ini | 0 .../ultima8 => create_ultima8}/u8japanese.ini | 0 .../ultima8 => create_ultima8}/u8monsters.ini | 0 .../ultima8 => create_ultima8}/u8spanish.ini | 0 .../ultima8 => create_ultima8}/u8weapons.ini | 0 devtools/release-checks.sh | 20 ++++++++++++ dists/engine-data/README | 3 ++ dists/irix/scummvm.idb | 1 + dists/scummvm.rc | 1 + dists/win32/migration.txt | 1 + engines/ultima/ultima8/games/game_data.cpp | 16 +++++----- .../ultima8/graphics/fonts/font_manager.cpp | 8 ++--- engines/ultima/ultima8/ultima8.cpp | 29 ++++-------------- engines/ultima/ultima8/ultima8.h | 5 --- 29 files changed, 45 insertions(+), 43 deletions(-) delete mode 100644 devtools/create_ultima/files/ultima8/version.txt rename devtools/{create_ultima/files/ultima8 => create_ultima8}/Vera.ttf (100%) rename devtools/{create_ultima/files/ultima8 => create_ultima8}/VeraBd.ttf (100%) rename devtools/{create_ultima/files/ultima8 => create_ultima8}/Vera_copyright.txt (100%) rename devtools/{create_ultima/files/ultima8 => create_ultima8}/pentagram.png (100%) rename devtools/{create_ultima/files/ultima8 => create_ultima8}/regretweapons.ini (100%) rename devtools/{create_ultima/files/ultima8 => create_ultima8}/remorse.ini (100%) rename devtools/{create_ultima/files/ultima8 => create_ultima8}/remorsebindings.ini (100%) rename devtools/{create_ultima/files/ultima8 => create_ultima8}/remorseweapons.ini (100%) rename devtools/{create_ultima/files/ultima8 => create_ultima8}/u8.ini (100%) rename devtools/{create_ultima/files/ultima8 => create_ultima8}/u8armour.ini (100%) rename devtools/{create_ultima/files/ultima8 => create_ultima8}/u8english.ini (100%) rename devtools/{create_ultima/files/ultima8 => create_ultima8}/u8french.ini (100%) rename devtools/{create_ultima/files/ultima8 => create_ultima8}/u8german.ini (100%) rename devtools/{create_ultima/files/ultima8 => create_ultima8}/u8japanese.ini (100%) rename devtools/{create_ultima/files/ultima8 => create_ultima8}/u8monsters.ini (100%) rename devtools/{create_ultima/files/ultima8 => create_ultima8}/u8spanish.ini (100%) rename devtools/{create_ultima/files/ultima8 => create_ultima8}/u8weapons.ini (100%) diff --git a/Makefile.common b/Makefile.common index ec80865d1c9..db52cf2f63b 100644 --- a/Makefile.common +++ b/Makefile.common @@ -468,7 +468,7 @@ ifdef ENABLE_TOON DIST_FILES_ENGINEDATA+=toon.dat endif ifdef ENABLE_ULTIMA -DIST_FILES_ENGINEDATA+=ultima.dat +DIST_FILES_ENGINEDATA+=ultima.dat ultima8.dat endif ifdef ENABLE_WINTERMUTE DIST_FILES_ENGINEDATA+=wintermute.zip diff --git a/devtools/create_project/xcode.cpp b/devtools/create_project/xcode.cpp index d8c540ccd56..783f035a584 100644 --- a/devtools/create_project/xcode.cpp +++ b/devtools/create_project/xcode.cpp @@ -1052,6 +1052,7 @@ XcodeProvider::ValueList& XcodeProvider::getResourceFiles(const BuildSetup &setu files.push_back("dists/engine-data/tony.dat"); files.push_back("dists/engine-data/toon.dat"); files.push_back("dists/engine-data/ultima.dat"); + files.push_back("dists/engine-data/ultima8.dat"); files.push_back("dists/engine-data/wintermute.zip"); files.push_back("dists/ios7/LaunchScreen_ios.storyboard"); files.push_back("dists/tvos/LaunchScreen_tvos.storyboard"); diff --git a/devtools/create_ultima/files/ultima8/version.txt b/devtools/create_ultima/files/ultima8/version.txt deleted file mode 100644 index cd5ac039d67..00000000000 --- a/devtools/create_ultima/files/ultima8/version.txt +++ /dev/null @@ -1 +0,0 @@ -2.0 diff --git a/devtools/create_ultima/files/ultima8/Vera.ttf b/devtools/create_ultima8/Vera.ttf similarity index 100% rename from devtools/create_ultima/files/ultima8/Vera.ttf rename to devtools/create_ultima8/Vera.ttf diff --git a/devtools/create_ultima/files/ultima8/VeraBd.ttf b/devtools/create_ultima8/VeraBd.ttf similarity index 100% rename from devtools/create_ultima/files/ultima8/VeraBd.ttf rename to devtools/create_ultima8/VeraBd.ttf diff --git a/devtools/create_ultima/files/ultima8/Vera_copyright.txt b/devtools/create_ultima8/Vera_copyright.txt similarity index 100% rename from devtools/create_ultima/files/ultima8/Vera_copyright.txt rename to devtools/create_ultima8/Vera_copyright.txt diff --git a/devtools/create_ultima/files/ultima8/pentagram.png b/devtools/create_ultima8/pentagram.png similarity index 100% rename from devtools/create_ultima/files/ultima8/pentagram.png rename to devtools/create_ultima8/pentagram.png diff --git a/devtools/create_ultima/files/ultima8/regretweapons.ini b/devtools/create_ultima8/regretweapons.ini similarity index 100% rename from devtools/create_ultima/files/ultima8/regretweapons.ini rename to devtools/create_ultima8/regretweapons.ini diff --git a/devtools/create_ultima/files/ultima8/remorse.ini b/devtools/create_ultima8/remorse.ini similarity index 100% rename from devtools/create_ultima/files/ultima8/remorse.ini rename to devtools/create_ultima8/remorse.ini diff --git a/devtools/create_ultima/files/ultima8/remorsebindings.ini b/devtools/create_ultima8/remorsebindings.ini similarity index 100% rename from devtools/create_ultima/files/ultima8/remorsebindings.ini rename to devtools/create_ultima8/remorsebindings.ini diff --git a/devtools/create_ultima/files/ultima8/remorseweapons.ini b/devtools/create_ultima8/remorseweapons.ini similarity index 100% rename from devtools/create_ultima/files/ultima8/remorseweapons.ini rename to devtools/create_ultima8/remorseweapons.ini diff --git a/devtools/create_ultima/files/ultima8/u8.ini b/devtools/create_ultima8/u8.ini similarity index 100% rename from devtools/create_ultima/files/ultima8/u8.ini rename to devtools/create_ultima8/u8.ini diff --git a/devtools/create_ultima/files/ultima8/u8armour.ini b/devtools/create_ultima8/u8armour.ini similarity index 100% rename from devtools/create_ultima/files/ultima8/u8armour.ini rename to devtools/create_ultima8/u8armour.ini diff --git a/devtools/create_ultima/files/ultima8/u8english.ini b/devtools/create_ultima8/u8english.ini similarity index 100% rename from devtools/create_ultima/files/ultima8/u8english.ini rename to devtools/create_ultima8/u8english.ini diff --git a/devtools/create_ultima/files/ultima8/u8french.ini b/devtools/create_ultima8/u8french.ini similarity index 100% rename from devtools/create_ultima/files/ultima8/u8french.ini rename to devtools/create_ultima8/u8french.ini diff --git a/devtools/create_ultima/files/ultima8/u8german.ini b/devtools/create_ultima8/u8german.ini similarity index 100% rename from devtools/create_ultima/files/ultima8/u8german.ini rename to devtools/create_ultima8/u8german.ini diff --git a/devtools/create_ultima/files/ultima8/u8japanese.ini b/devtools/create_ultima8/u8japanese.ini similarity index 100% rename from devtools/create_ultima/files/ultima8/u8japanese.ini rename to devtools/create_ultima8/u8japanese.ini diff --git a/devtools/create_ultima/files/ultima8/u8monsters.ini b/devtools/create_ultima8/u8monsters.ini similarity index 100% rename from devtools/create_ultima/files/ultima8/u8monsters.ini rename to devtools/create_ultima8/u8monsters.ini diff --git a/devtools/create_ultima/files/ultima8/u8spanish.ini b/devtools/create_ultima8/u8spanish.ini similarity index 100% rename from devtools/create_ultima/files/ultima8/u8spanish.ini rename to devtools/create_ultima8/u8spanish.ini diff --git a/devtools/create_ultima/files/ultima8/u8weapons.ini b/devtools/create_ultima8/u8weapons.ini similarity index 100% rename from devtools/create_ultima/files/ultima8/u8weapons.ini rename to devtools/create_ultima8/u8weapons.ini diff --git a/devtools/release-checks.sh b/devtools/release-checks.sh index b7e083e8e06..a02bb3f8883 100755 --- a/devtools/release-checks.sh +++ b/devtools/release-checks.sh @@ -441,6 +441,26 @@ fi +########### +# Ultima 8 engine +########### + +echo_n "Checking ultima8.dat..." + +fileDate=`git log -1 dists/engine-data/ultima8.dat | grep Date | sed 's/Date: //'` + +num_lines=`git -P log --oneline "--since=$fileDate" devtools/create_ultima8 | wc -l` + +if [ "$num_lines" -ne "0" ]; then + echo -e "$num_lines unprocessed commits. ${RED}Run 'cd devtools/create_ultima8; zip -r9 ../../../dists/engine-data/ultima8.dat .'${NC}" + + failPlus +else + echoOk +fi + + + ########### # Totals ########### diff --git a/dists/engine-data/README b/dists/engine-data/README index f1cda5aa572..4d3927c5591 100644 --- a/dists/engine-data/README +++ b/dists/engine-data/README @@ -110,6 +110,9 @@ This file contains all the strings hardcoded in the original executables. ultima.dat: This file contains scripts and game data used by the Ultima engine. +ultima8.dat: +This file contains scripts and game data used by the Ultima 8 engine. + wintermute.zip: This file contains additional graphics resources used by the Wintermute engine. diff --git a/dists/irix/scummvm.idb b/dists/irix/scummvm.idb index 4b36e474426..f5cafd0f570 100644 --- a/dists/irix/scummvm.idb +++ b/dists/irix/scummvm.idb @@ -44,6 +44,7 @@ f 0644 root sys usr/ScummVM/share/scummvm/titanic.dat titanic.dat scummvm.sw.eoe f 0644 root sys usr/ScummVM/share/scummvm/tony.dat tony.dat scummvm.sw.eoe f 0644 root sys usr/ScummVM/share/scummvm/toon.dat toon.dat scummvm.sw.eoe f 0644 root sys usr/ScummVM/share/scummvm/ultima.dat ultima.dat scummvm.sw.eoe +f 0644 root sys usr/ScummVM/share/scummvm/ultima8.dat ultima8.dat scummvm.sw.eoe f 0644 root sys usr/ScummVM/share/scummvm/freescape.dat freescape.dat scummvm.sw.eoe f 0644 root sys usr/ScummVM/share/scummvm/wintermute.zip wintermute.zip scummvm.sw.eoe f 0644 root sys usr/ScummVM/share/scummvm/mm.dat mm.dat scummvm.sw.eoe diff --git a/dists/scummvm.rc b/dists/scummvm.rc index 11456bb1c1a..0ac7dccec90 100644 --- a/dists/scummvm.rc +++ b/dists/scummvm.rc @@ -115,6 +115,7 @@ toon.dat FILE "dists/engine-data/toon.dat" #endif #if PLUGIN_ENABLED_STATIC(ULTIMA) ultima.dat FILE "dists/engine-data/ultima.dat" +ultima8.dat FILE "dists/engine-data/ultima8.dat" #endif #if PLUGIN_ENABLED_STATIC(WINTERMUTE) wintermute.zip FILE "dists/engine-data/wintermute.zip" diff --git a/dists/win32/migration.txt b/dists/win32/migration.txt index 6afece766d7..2dbed856508 100644 --- a/dists/win32/migration.txt +++ b/dists/win32/migration.txt @@ -59,6 +59,7 @@ toon.dat tony.dat translations.dat ultima.dat +ultima8.dat wintermute.zip unins000.dat unins000.exe diff --git a/engines/ultima/ultima8/games/game_data.cpp b/engines/ultima/ultima8/games/game_data.cpp index de949e79819..6729929ec28 100644 --- a/engines/ultima/ultima8/games/game_data.cpp +++ b/engines/ultima/ultima8/games/game_data.cpp @@ -171,8 +171,6 @@ void GameData::loadTranslation() { } if (!translationfile.empty()) { - translationfile = "data/" + translationfile; - debug(MM_INFO, "Loading translation: %s", translationfile.c_str()); config->readConfigFile(translationfile, "language"); @@ -263,10 +261,10 @@ void GameData::loadU8Data() { // Load weapon, armour info ConfigFileManager *config = ConfigFileManager::get_instance(); - config->readConfigFile("data/u8weapons.ini", "weapons"); - config->readConfigFile("data/u8armour.ini", "armour"); - config->readConfigFile("data/u8monsters.ini", "monsters"); - config->readConfigFile("data/u8.ini", "game"); + config->readConfigFile("u8weapons.ini", "weapons"); + config->readConfigFile("u8armour.ini", "armour"); + config->readConfigFile("u8monsters.ini", "monsters"); + config->readConfigFile("u8.ini", "game"); // Load typeflags Common::SeekableReadStream *tfs = filesystem->ReadFile("static/typeflag.dat"); @@ -540,11 +538,11 @@ void GameData::loadRemorseData() { ConfigFileManager *config = ConfigFileManager::get_instance(); // Load weapon, armour info if (_gameInfo->_type == GameInfo::GAME_REMORSE) - config->readConfigFile("data/remorseweapons.ini", "weapons"); + config->readConfigFile("remorseweapons.ini", "weapons"); else - config->readConfigFile("data/regretweapons.ini", "weapons"); + config->readConfigFile("regretweapons.ini", "weapons"); - config->readConfigFile("data/remorse.ini", "game"); + config->readConfigFile("remorse.ini", "game"); // Load typeflags Common::SeekableReadStream *tfs = filesystem->ReadFile("static/typeflag.dat"); diff --git a/engines/ultima/ultima8/graphics/fonts/font_manager.cpp b/engines/ultima/ultima8/graphics/fonts/font_manager.cpp index 8092eb47e35..b21101fc704 100644 --- a/engines/ultima/ultima8/graphics/fonts/font_manager.cpp +++ b/engines/ultima/ultima8/graphics/fonts/font_manager.cpp @@ -99,9 +99,9 @@ Graphics::Font *FontManager::getTTF_Font(const Std::string &filename, int points return iter->_value; Common::SeekableReadStream *fontids; - fontids = FileSystem::get_instance()->ReadFile("data/" + filename); + fontids = FileSystem::get_instance()->ReadFile(filename); if (!fontids) { - warning("Failed to open TTF: data/%s", filename.c_str()); + warning("Failed to open TTF: %s", filename.c_str()); return nullptr; } @@ -112,13 +112,13 @@ Graphics::Font *FontManager::getTTF_Font(const Std::string &filename, int points Graphics::Font *font = Graphics::loadTTFFont(*fontids, pointsize, Graphics::kTTFSizeModeCharacter, 0, mode, 0, false); if (!font) { - warning("Failed to open TTF: data/%s", filename.c_str()); + warning("Failed to open TTF: %s", filename.c_str()); return nullptr; } _ttfFonts[id] = font; - debugC(kDebugGraphics, "Opened TTF: data/%s.", filename.c_str()); + debugC(kDebugGraphics, "Opened TTF: %s.", filename.c_str()); return font; #else // !USE_FREETYPE2 return nullptr; diff --git a/engines/ultima/ultima8/ultima8.cpp b/engines/ultima/ultima8/ultima8.cpp index bc1bf8216db..0939e858b5f 100644 --- a/engines/ultima/ultima8/ultima8.cpp +++ b/engines/ultima/ultima8/ultima8.cpp @@ -21,6 +21,7 @@ #include "common/rational.h" #include "common/translation.h" +#include "common/compression/unzip.h" #include "gui/saveload.h" #include "image/png.h" #include "engines/dialogs.h" @@ -95,8 +96,6 @@ #include "ultima/ultima8/gumps/shape_viewer_gump.h" #include "ultima/ultima8/metaengine.h" -#include "ultima/shared/engine/data_archive.h" - //#define PAINT_TIMING 1 #define GAME_FRAME_TIME 50 @@ -175,23 +174,16 @@ Common::Error Ultima8Engine::run() { bool Ultima8Engine::initialize() { - Common::String folder; - int reqMajorVersion, reqMinorVersion; - // Call syncSoundSettings to get default volumes set syncSoundSettings(); - // Check if the game uses data from te ultima.dat archive - if (!isDataRequired(folder, reqMajorVersion, reqMinorVersion)) - return true; - // Try and set up the data archive - // TODO: Refactor this to use a separate archive - Common::U32String errorMsg; - if (!Shared::UltimaDataArchive::load(folder, reqMajorVersion, reqMinorVersion, errorMsg)) { - GUIErrorMessage(errorMsg); + Common::Archive *archive = Common::makeZipArchive("ultima8.dat"); + if (!archive) { + GUIErrorMessageFormat(_("Unable to locate the '%s' engine data file."), "ultima8.dat"); return false; } + SearchMan.add("data", archive); return true; } @@ -1598,15 +1590,6 @@ uint32 Ultima8Engine::I_moveKeyDownRecently(const uint8 *args, unsigned int /*ar return g->moveKeyDownRecently() ? 1 : 0; } -bool Ultima8Engine::isDataRequired(Common::String &folder, int &majorVersion, int &minorVersion) { - folder = "ultima8"; - // Version 1: Initial release - // Version 2: Add data for Crusader games - majorVersion = 2; - minorVersion = 0; - return true; -} - Graphics::Screen *Ultima8Engine::getScreen() const { Graphics::Screen *scr = dynamic_cast(_screen->getRawSurface()); assert(scr); @@ -1618,7 +1601,7 @@ void Ultima8Engine::showSplashScreen() { Common::File f; // Get splash _screen image - if (!f.open("data/pentagram.png") || !png.loadStream(f)) + if (!f.open("pentagram.png") || !png.loadStream(f)) return; // Blit the splash image to the _screen diff --git a/engines/ultima/ultima8/ultima8.h b/engines/ultima/ultima8/ultima8.h index 5af6d936423..58092fa86e7 100644 --- a/engines/ultima/ultima8/ultima8.h +++ b/engines/ultima/ultima8/ultima8.h @@ -174,11 +174,6 @@ protected: void pauseEngineIntern(bool pause) override; - /** - * Returns the data archive folder and version that's required - */ - bool isDataRequired(Common::String &folder, int &majorVersion, int &minorVersion); - public: Ultima8Engine(OSystem *syst, const Ultima::UltimaGameDescription *gameDesc); ~Ultima8Engine() override;