[Scummvm-git-logs] scummvm master -> 98294f582f075cc7d608f846c71fd2e5a6da35a6
dreammaster
paulfgilbert at gmail.com
Sat Apr 25 22:33:46 UTC 2020
This automated email contains information about 6 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
14b3cefc2f ULTIMA4: Move hawkwindText global to engine class
8da128e909 ULTIMA4: Moved armors array to engine field
eb885e9da1 ULTIMA4: Janitorial
8efbf33f95 ULTIMA4: Move moongates array to an engine field
aa5c6ad809 ULTIMA4: Move Weapons array to engine field
98294f582f ULTIMA4: Refactoring shrine statics to engine local
Commit: 14b3cefc2f1fde928482049d04c2e2791b01fbc5
https://github.com/scummvm/scummvm/commit/14b3cefc2f1fde928482049d04c2e2791b01fbc5
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-04-25T11:51:57-07:00
Commit Message:
ULTIMA4: Move hawkwindText global to engine class
Changed paths:
engines/ultima/ultima4/conversation/dialogueloader_hw.cpp
engines/ultima/ultima4/ultima4.h
diff --git a/engines/ultima/ultima4/conversation/dialogueloader_hw.cpp b/engines/ultima/ultima4/conversation/dialogueloader_hw.cpp
index 56ec4d6aa0..1b633668d0 100644
--- a/engines/ultima/ultima4/conversation/dialogueloader_hw.cpp
+++ b/engines/ultima/ultima4/conversation/dialogueloader_hw.cpp
@@ -27,14 +27,12 @@
#include "ultima/ultima4/filesys/savegame.h"
#include "ultima/ultima4/filesys/u4file.h"
#include "ultima/ultima4/core/utils.h"
+#include "ultima/ultima4/ultima4.h"
#include "ultima/shared/std/containers.h"
namespace Ultima {
namespace Ultima4 {
-using Common::String;
-using Std::vector;
-
Response *hawkwindGetAdvice(const DynamicResponse *kw);
Response *hawkwindGetIntro(const DynamicResponse *dynResp);
@@ -51,8 +49,6 @@ Response *hawkwindGetIntro(const DynamicResponse *dynResp);
#define HW_GOTOSHRINE 51
#define HW_BYE 52
-vector<Common::String> hawkwindText;
-
/**
* A special case dialogue loader for Hawkwind.
*/
@@ -61,6 +57,7 @@ Dialogue *U4HWDialogueLoader::load(void *source) {
if (!avatar)
return nullptr;
+ Std::vector<Common::String> &hawkwindText = g_ultima->_hawkwindText;
hawkwindText = u4read_stringtable(avatar, 74729, 53);
Dialogue *dlg = new Dialogue();
@@ -99,6 +96,7 @@ Dialogue *U4HWDialogueLoader::load(void *source) {
Response *hawkwindGetAdvice(const DynamicResponse *dynResp) {
Common::String text;
int virtue = -1, virtueLevel = -1;
+ Std::vector<Common::String> &hawkwindText = g_ultima->_hawkwindText;
/* check if asking about a virtue */
for (int v = 0; v < VIRT_MAX; v++) {
@@ -127,21 +125,20 @@ Response *hawkwindGetAdvice(const DynamicResponse *dynResp) {
Response *hawkwindGetIntro(const DynamicResponse *dynResp) {
Response *intro = new Response("");
+ Std::vector<Common::String> &hawkwindText = g_ultima->_hawkwindText;
if (g_context->_party->member(0)->getStatus() == STAT_SLEEPING ||
g_context->_party->member(0)->getStatus() == STAT_DEAD) {
intro->add(hawkwindText[HW_SPEAKONLYWITH] + g_context->_party->member(0)->getName() +
- hawkwindText[HW_RETURNWHEN] + g_context->_party->member(0)->getName() +
- hawkwindText[HW_ISREVIVED]);
+ hawkwindText[HW_RETURNWHEN] + g_context->_party->member(0)->getName() +
+ hawkwindText[HW_ISREVIVED]);
intro->add(ResponsePart::END);
- }
-
- else {
+ } else {
intro->add(ResponsePart::STARTMUSIC_HW);
intro->add(ResponsePart::HAWKWIND);
intro->add(hawkwindText[HW_WELCOME] + g_context->_party->member(0)->getName() +
- hawkwindText[HW_GREETING1] + hawkwindText[HW_GREETING2]);
+ hawkwindText[HW_GREETING1] + hawkwindText[HW_GREETING2]);
}
return intro;
diff --git a/engines/ultima/ultima4/ultima4.h b/engines/ultima/ultima4/ultima4.h
index df2df21e16..54719f41ee 100644
--- a/engines/ultima/ultima4/ultima4.h
+++ b/engines/ultima/ultima4/ultima4.h
@@ -24,6 +24,7 @@
#define ULTIMA4_H
#include "ultima/shared/engine/ultima.h"
+#include "ultima/shared/std/containers.h"
namespace Ultima {
namespace Ultima4 {
@@ -67,6 +68,7 @@ public:
TileMaps *_tileMaps;
TileRules *_tileRules;
TileSets *_tileSets;
+ Std::vector<Common::String> _hawkwindText;
public:
Ultima4Engine(OSystem *syst, const Ultima::UltimaGameDescription *gameDesc);
~Ultima4Engine() override;
Commit: 8da128e90906643028a93a97bca30e0393ee3256
https://github.com/scummvm/scummvm/commit/8da128e90906643028a93a97bca30e0393ee3256
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-04-25T14:22:14-07:00
Commit Message:
ULTIMA4: Moved armors array to engine field
Changed paths:
engines/ultima/ultima4/core/debugger.cpp
engines/ultima/ultima4/game/armor.cpp
engines/ultima/ultima4/game/armor.h
engines/ultima/ultima4/game/player.cpp
engines/ultima/ultima4/game/stats.cpp
engines/ultima/ultima4/ultima4.cpp
engines/ultima/ultima4/ultima4.h
diff --git a/engines/ultima/ultima4/core/debugger.cpp b/engines/ultima/ultima4/core/debugger.cpp
index c80eb9f42e..a1ba1aa831 100644
--- a/engines/ultima/ultima4/core/debugger.cpp
+++ b/engines/ultima/ultima4/core/debugger.cpp
@@ -1120,7 +1120,7 @@ bool Debugger::cmdWearArmor(int argc, const char **argv) {
if (armor == -1)
return isDebuggerActive();
- const Armor *a = Armor::get((ArmorType)armor);
+ const Armor *a = g_armors->get((ArmorType)armor);
PartyMember *p = g_context->_party->member(player);
if (!a) {
diff --git a/engines/ultima/ultima4/game/armor.cpp b/engines/ultima/ultima4/game/armor.cpp
index e7b6fdc97c..194452c4ed 100644
--- a/engines/ultima/ultima4/game/armor.cpp
+++ b/engines/ultima/ultima4/game/armor.cpp
@@ -29,40 +29,63 @@
namespace Ultima {
namespace Ultima4 {
-using Std::vector;
-using Common::String;
+Armors *g_armors;
-bool Armor::_confLoaded = false;
-vector<Armor *> Armor::_armors;
+Armors::Armors() : _confLoaded(false) {
+ g_armors = this;
+}
+
+Armors::~Armors() {
+ g_armors = nullptr;
+}
-const Armor *Armor::get(ArmorType a) {
+const Armor *Armors::get(ArmorType a) {
// Load in XML if it hasn't been already
loadConf();
- if (static_cast<unsigned>(a) >= _armors.size())
+ if (static_cast<unsigned>(a) >= size())
return nullptr;
- return _armors[a];
+ return (*this)[a];
}
-const Armor *Armor::get(const string &name) {
+const Armor *Armors::get(const Common::String &name) {
// Load in XML if it hasn't been already
loadConf();
- for (unsigned i = 0; i < _armors.size(); i++) {
- if (scumm_stricmp(name.c_str(), _armors[i]->_name.c_str()) == 0)
- return _armors[i];
+ for (unsigned i = 0; i < size(); i++) {
+ if (scumm_stricmp(name.c_str(), (*this)[i]->_name.c_str()) == 0)
+ return (*this)[i];
}
return nullptr;
}
-Armor::Armor(const ConfigElement &conf) {
- _type = static_cast<ArmorType>(_armors.size());
+
+void Armors::loadConf() {
+ if (!_confLoaded)
+ _confLoaded = true;
+ else
+ return;
+
+ const Config *config = Config::getInstance();
+
+ Std::vector<ConfigElement> armorConfs = config->getElement("armors").getChildren();
+ for (Std::vector<ConfigElement>::iterator i = armorConfs.begin(); i != armorConfs.end(); i++) {
+ if (i->getName() != "armor")
+ continue;
+
+ ArmorType armorType = static_cast<ArmorType>(size());
+ push_back(new Armor(armorType, *i));
+ }
+}
+
+/*-------------------------------------------------------------------*/
+
+Armor::Armor(ArmorType armorType, const ConfigElement &conf) :
+ _type(armorType), _canUse(0xff), _mask(0) {
_name = conf.getString("name");
- _canUse = 0xFF;
_defense = conf.getInt("defense");
- _mask = 0;
- vector<ConfigElement> contraintConfs = conf.getChildren();
+ Std::vector<ConfigElement> contraintConfs = conf.getChildren();
for (Std::vector<ConfigElement>::iterator i = contraintConfs.begin(); i != contraintConfs.end(); i++) {
byte useMask = 0;
@@ -86,22 +109,5 @@ Armor::Armor(const ConfigElement &conf) {
}
}
-void Armor::loadConf() {
- if (!_confLoaded)
- _confLoaded = true;
- else
- return;
-
- const Config *config = Config::getInstance();
-
- vector<ConfigElement> armorConfs = config->getElement("armors").getChildren();
- for (Std::vector<ConfigElement>::iterator i = armorConfs.begin(); i != armorConfs.end(); i++) {
- if (i->getName() != "armor")
- continue;
-
- _armors.push_back(new Armor(*i));
- }
-}
-
} // End of namespace Ultima4
} // End of namespace Ultima
diff --git a/engines/ultima/ultima4/game/armor.h b/engines/ultima/ultima4/game/armor.h
index 7ceb380193..23d6162823 100644
--- a/engines/ultima/ultima4/game/armor.h
+++ b/engines/ultima/ultima4/game/armor.h
@@ -31,26 +31,16 @@ namespace Ultima {
namespace Ultima4 {
class ConfigElement;
+class Armors;
class Armor {
+ friend class Armors;
public:
- typedef Common::String string;
-
- /**
- * Returns armor by ArmorType.
- */
- static const Armor *get(ArmorType a);
-
- /**
- * Returns armor that has the given name
- */
- static const Armor *get(const string &name);
-
// Getters
ArmorType getType() const {
return _type; /**< Returns the ArmorType of the armor */
}
- const string &getName() const {
+ const Common::String &getName() const {
return _name; /**< Returns the name of the armor */
}
int getDefense() const {
@@ -62,19 +52,43 @@ public:
}
private:
- Armor(const ConfigElement &conf);
-
- static void loadConf();
- static bool _confLoaded;
- static Std::vector<Armor *> _armors;
+ Armor(ArmorType armorType, const ConfigElement &conf);
ArmorType _type;
- string _name;
+ Common::String _name;
byte _canUse;
int _defense;
unsigned short _mask;
};
+class Armors : public Std::vector<Armor *> {
+private:
+ void loadConf();
+ bool _confLoaded;
+public:
+ /**
+ * Constructor
+ */
+ Armors();
+
+ /**
+ * Destructor
+ */
+ ~Armors();
+
+ /**
+ * Returns armor by ArmorType.
+ */
+ const Armor *get(ArmorType a);
+
+ /**
+ * Returns armor that has the given name
+ */
+ const Armor *get(const Common::String &name);
+};
+
+extern Armors *g_armors;
+
} // End of namespace Ultima4
} // End of namespace Ultima
diff --git a/engines/ultima/ultima4/game/player.cpp b/engines/ultima/ultima4/game/player.cpp
index e883f05bee..cb6d4cc8d0 100644
--- a/engines/ultima/ultima4/game/player.cpp
+++ b/engines/ultima/ultima4/game/player.cpp
@@ -165,7 +165,7 @@ const Weapon *PartyMember::getWeapon() const {
}
const Armor *PartyMember::getArmor() const {
- return Armor::get(_player->armor);
+ return g_armors->get(_player->armor);
}
Common::String PartyMember::getName() const {
@@ -437,7 +437,7 @@ int PartyMember::getAttackBonus() const {
}
int PartyMember::getDefense() const {
- return Armor::get(_player->armor)->getDefense();
+ return g_armors->get(_player->armor)->getDefense();
}
bool PartyMember::dealDamage(Creature *m, int damage) {
@@ -629,7 +629,7 @@ Common::String Party::translate(Std::vector<Common::String> &parts) {
if (w)
return xu4_to_string(_saveGame->_weapons[w->getType()]);
} else if (parts[0] == "armor") {
- const Armor *a = Armor::get(parts[1]);
+ const Armor *a = g_armors->get(parts[1]);
if (a)
return xu4_to_string(_saveGame->_armor[a->getType()]);
}
diff --git a/engines/ultima/ultima4/game/stats.cpp b/engines/ultima/ultima4/game/stats.cpp
index 8402e99271..b12aaaefe3 100644
--- a/engines/ultima/ultima4/game/stats.cpp
+++ b/engines/ultima/ultima4/game/stats.cpp
@@ -275,7 +275,7 @@ void StatsArea::showArmor() {
if (g_ultima->_saveGame->_armor[a] > 0) {
const char *format = (g_ultima->_saveGame->_armor[a] >= 10) ? "%c%d-%s" : "%c-%d-%s";
- _mainArea.textAt(0, line++, format, a - ARMR_NONE + 'A', g_ultima->_saveGame->_armor[a], Armor::get((ArmorType) a)->getName().c_str());
+ _mainArea.textAt(0, line++, format, a - ARMR_NONE + 'A', g_ultima->_saveGame->_armor[a], g_armors->get((ArmorType) a)->getName().c_str());
}
}
}
diff --git a/engines/ultima/ultima4/ultima4.cpp b/engines/ultima/ultima4/ultima4.cpp
index 1067424164..e6a344ea09 100644
--- a/engines/ultima/ultima4/ultima4.cpp
+++ b/engines/ultima/ultima4/ultima4.cpp
@@ -29,6 +29,7 @@
#include "ultima/ultima4/core/utils.h"
#include "ultima/ultima4/events/event_handler.h"
#include "ultima/ultima4/filesys/savegame.h"
+#include "ultima/ultima4/game/armor.h"
#include "ultima/ultima4/game/context.h"
#include "ultima/ultima4/game/game.h"
#include "ultima/ultima4/game/person.h"
@@ -48,11 +49,12 @@ namespace Ultima4 {
Ultima4Engine *g_ultima;
Ultima4Engine::Ultima4Engine(OSystem *syst, const Ultima::UltimaGameDescription *gameDesc) :
- Shared::UltimaEngine(syst, gameDesc), _saveSlotToLoad(-1), _config(nullptr),
- _context(nullptr), _dialogueLoaders(nullptr), _game(nullptr), _music(nullptr),
- _imageLoaders(nullptr), _saveGame(nullptr), _screen(nullptr), _tileMaps(nullptr),
- _tileRules(nullptr), _tileSets(nullptr) {
+ Shared::UltimaEngine(syst, gameDesc), _saveSlotToLoad(-1), _armors(nullptr),
+ _config(nullptr), _context(nullptr), _dialogueLoaders(nullptr), _game(nullptr),
+ _music(nullptr), _imageLoaders(nullptr), _saveGame(nullptr), _screen(nullptr),
+ _tileMaps(nullptr), _tileRules(nullptr), _tileSets(nullptr) {
g_ultima = this;
+ g_armors = nullptr;
g_context = nullptr;
g_game = nullptr;
g_screen = nullptr;
@@ -62,6 +64,7 @@ Ultima4Engine::Ultima4Engine(OSystem *syst, const Ultima::UltimaGameDescription
}
Ultima4Engine::~Ultima4Engine() {
+ delete _armors;
delete _config;
delete _context;
delete _dialogueLoaders;
@@ -86,6 +89,7 @@ bool Ultima4Engine::initialize() {
// Initialize the sub-systems
_config = new Config();
+ _armors = new Armors();
_context = new Context();
_dialogueLoaders = new DialogueLoaders();
_screen = new Screen();
diff --git a/engines/ultima/ultima4/ultima4.h b/engines/ultima/ultima4/ultima4.h
index 54719f41ee..f18ea0be20 100644
--- a/engines/ultima/ultima4/ultima4.h
+++ b/engines/ultima/ultima4/ultima4.h
@@ -29,6 +29,7 @@
namespace Ultima {
namespace Ultima4 {
+class Armors;
class Config;
class Context;
class DialogueLoaders;
@@ -57,6 +58,7 @@ protected:
*/
bool isDataRequired(Common::String &folder, int &majorVersion, int &minorVersion) override;
public:
+ Armors *_armors;
Config *_config;
Context *_context;
DialogueLoaders *_dialogueLoaders;
Commit: eb885e9da1517d411ea5b145a474d155bac287c2
https://github.com/scummvm/scummvm/commit/eb885e9da1517d411ea5b145a474d155bac287c2
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-04-25T14:29:02-07:00
Commit Message:
ULTIMA4: Janitorial
Changed paths:
engines/ultima/ultima4/controllers/combat_controller.cpp
engines/ultima/ultima4/controllers/combat_controller.h
engines/ultima/ultima4/conversation/conversation.h
engines/ultima/ultima4/events/event_handler.cpp
engines/ultima/ultima4/filesys/filesystem.cpp
engines/ultima/ultima4/filesys/filesystem.h
engines/ultima/ultima4/game/armor.h
engines/ultima/ultima4/game/aura.h
engines/ultima/ultima4/game/creature.cpp
engines/ultima/ultima4/game/game.cpp
engines/ultima/ultima4/game/menuitem.cpp
engines/ultima/ultima4/game/player.cpp
engines/ultima/ultima4/game/script.cpp
engines/ultima/ultima4/game/weapon.h
engines/ultima/ultima4/gfx/imageloader_fmtowns.cpp
engines/ultima/ultima4/map/dungeonview.cpp
engines/ultima/ultima4/map/tile.h
engines/ultima/ultima4/sound/music.h
engines/ultima/ultima4/sound/sound_p.h
diff --git a/engines/ultima/ultima4/controllers/combat_controller.cpp b/engines/ultima/ultima4/controllers/combat_controller.cpp
index d7f451bf52..ecac605b18 100644
--- a/engines/ultima/ultima4/controllers/combat_controller.cpp
+++ b/engines/ultima/ultima4/controllers/combat_controller.cpp
@@ -106,41 +106,41 @@ CombatController::~CombatController() {
}
// Accessor Methods
-bool CombatController::isCamping() const {
+bool CombatController::isCamping() const {
return _camping;
}
-bool CombatController::isWinOrLose() const {
+bool CombatController::isWinOrLose() const {
return _winOrLose;
}
-Direction CombatController::getExitDir() const {
+Direction CombatController::getExitDir() const {
return _exitDir;
}
-byte CombatController::getFocus() const {
+byte CombatController::getFocus() const {
return _focus;
}
-CombatMap *CombatController::getMap() const {
+CombatMap *CombatController::getMap() const {
return _map;
}
-Creature *CombatController::getCreature() const {
+Creature *CombatController::getCreature() const {
return _creature;
}
-PartyMemberVector *CombatController::getParty() {
+PartyMemberVector *CombatController::getParty() {
return &_party;
}
-PartyMember *CombatController::getCurrentPlayer() {
+PartyMember *CombatController::getCurrentPlayer() {
return _party[_focus];
}
-void CombatController::setExitDir(Direction d) {
+void CombatController::setExitDir(Direction d) {
_exitDir = d;
}
-void CombatController::setCreature(Creature *m) {
+void CombatController::setCreature(Creature *m) {
_creature = m;
}
-void CombatController::setWinOrLose(bool worl) {
+void CombatController::setWinOrLose(bool worl) {
_winOrLose = worl;
}
-void CombatController::showCombatMessage(bool show) {
+void CombatController::showCombatMessage(bool show) {
_showMessage = show;
}
diff --git a/engines/ultima/ultima4/controllers/combat_controller.h b/engines/ultima/ultima4/controllers/combat_controller.h
index 8f9b92f51b..5e2494fc95 100644
--- a/engines/ultima/ultima4/controllers/combat_controller.h
+++ b/engines/ultima/ultima4/controllers/combat_controller.h
@@ -237,13 +237,13 @@ public:
static MapId mapForTile(const Tile *ground, const Tile *transport, Object *obj);
// Getters
- bool isDungeonRoom() const {
+ bool isDungeonRoom() const {
return _dungeonRoom;
}
- bool isAltarRoom() const {
+ bool isAltarRoom() const {
return _altarRoom != VIRT_NONE;
}
- bool isContextual() const {
+ bool isContextual() const {
return _contextual;
}
BaseVirtue getAltarRoom() const {
@@ -254,10 +254,10 @@ public:
void setAltarRoom(BaseVirtue ar) {
_altarRoom = ar;
}
- void setDungeonRoom(bool d) {
+ void setDungeonRoom(bool d) {
_dungeonRoom = d;
}
- void setContextual(bool c) {
+ void setContextual(bool c) {
_contextual = c;
}
diff --git a/engines/ultima/ultima4/conversation/conversation.h b/engines/ultima/ultima4/conversation/conversation.h
index 3b72b5e930..68c3ebe68f 100644
--- a/engines/ultima/ultima4/conversation/conversation.h
+++ b/engines/ultima/ultima4/conversation/conversation.h
@@ -148,10 +148,10 @@ public:
/*
* Accessor methods
*/
- const Common::String &getKeyword() {
+ const Common::String &getKeyword() {
return _keyword;
}
- Response *getResponse() {
+ Response *getResponse() {
return _response;
}
@@ -174,53 +174,53 @@ public:
/*
* Accessor methods
*/
- const Common::String &getName() const {
+ const Common::String &getName() const {
return _name;
}
- const Common::String &getPronoun() const {
+ const Common::String &getPronoun() const {
return _pronoun;
}
- const Common::String &getPrompt() const {
+ const Common::String &getPrompt() const {
return _prompt;
}
- Response *getIntro(bool familiar = false) {
+ Response *getIntro(bool familiar = false) {
return _intro;
}
- Response *getLongIntro(bool familiar = false) {
+ Response *getLongIntro(bool familiar = false) {
return _longIntro;
}
- Response *getDefaultAnswer() {
+ Response *getDefaultAnswer() {
return _defaultAnswer;
}
- Dialogue::Question *getQuestion() {
+ Dialogue::Question *getQuestion() {
return _question;
}
/*
* Getters
*/
- void setName(const Common::String &n) {
+ void setName(const Common::String &n) {
_name = n;
}
- void setPronoun(const Common::String &pn) {
+ void setPronoun(const Common::String &pn) {
_pronoun = pn;
}
void setPrompt(const Common::String &prompt) {
this->_prompt = prompt;
}
- void setIntro(Response *i) {
+ void setIntro(Response *i) {
_intro = i;
}
- void setLongIntro(Response *i) {
+ void setLongIntro(Response *i) {
_longIntro = i;
}
- void setDefaultAnswer(Response *a) {
+ void setDefaultAnswer(Response *a) {
_defaultAnswer = a;
}
- void setTurnAwayProb(int prob) {
+ void setTurnAwayProb(int prob) {
_turnAwayProb = prob;
}
- void setQuestion(Question *q) {
+ void setQuestion(Question *q) {
_question = q;
}
void addKeyword(const Common::String &kw, Response *response);
diff --git a/engines/ultima/ultima4/events/event_handler.cpp b/engines/ultima/ultima4/events/event_handler.cpp
index b9997946f7..08ec2f2333 100644
--- a/engines/ultima/ultima4/events/event_handler.cpp
+++ b/engines/ultima/ultima4/events/event_handler.cpp
@@ -92,7 +92,7 @@ void EventHandler::end() {
_ended = true;
}
-TimedEventMgr *EventHandler::getTimer() {
+TimedEventMgr *EventHandler::getTimer() {
return &_timer;
}
diff --git a/engines/ultima/ultima4/filesys/filesystem.cpp b/engines/ultima/ultima4/filesys/filesystem.cpp
index b6eb55965c..97cd37ff32 100644
--- a/engines/ultima/ultima4/filesys/filesystem.cpp
+++ b/engines/ultima/ultima4/filesys/filesystem.cpp
@@ -77,15 +77,15 @@ Common::String Path::getDir() const {
return !node.exists() || node.isDirectory() ? node.getPath() : node.getParent().getPath();
}
-Common::String Path::getFilename() const {
+Common::String Path::getFilename() const {
return (ext.empty()) ? file : file + Common::String(".") + ext;
}
-Common::String Path::getBaseFilename() const {
+Common::String Path::getBaseFilename() const {
return file;
}
-Common::String Path::getExt() const {
+Common::String Path::getExt() const {
return ext;
}
diff --git a/engines/ultima/ultima4/filesys/filesystem.h b/engines/ultima/ultima4/filesys/filesystem.h
index 5648d43b28..6a9b14f0f2 100644
--- a/engines/ultima/ultima4/filesys/filesystem.h
+++ b/engines/ultima/ultima4/filesys/filesystem.h
@@ -60,7 +60,7 @@ public:
/**
* Returns the full translated path
*/
- Common::String getPath() const {
+ Common::String getPath() const {
return path;
}
diff --git a/engines/ultima/ultima4/game/armor.h b/engines/ultima/ultima4/game/armor.h
index 23d6162823..ae676b41a1 100644
--- a/engines/ultima/ultima4/game/armor.h
+++ b/engines/ultima/ultima4/game/armor.h
@@ -37,13 +37,13 @@ class Armor {
friend class Armors;
public:
// Getters
- ArmorType getType() const {
+ ArmorType getType() const {
return _type; /**< Returns the ArmorType of the armor */
}
- const Common::String &getName() const {
+ const Common::String &getName() const {
return _name; /**< Returns the name of the armor */
}
- int getDefense() const {
+ int getDefense() const {
return _defense; /**< Returns the defense value of the armor */
}
/** Returns true if the class given can wear the armor */
diff --git a/engines/ultima/ultima4/game/aura.h b/engines/ultima/ultima4/game/aura.h
index 14617b8423..29fc6c9fe4 100644
--- a/engines/ultima/ultima4/game/aura.h
+++ b/engines/ultima/ultima4/game/aura.h
@@ -44,13 +44,13 @@ public:
Aura();
- int getDuration() const {
+ int getDuration() const {
return _duration;
}
- Aura::Type getType() const {
+ Aura::Type getType() const {
return _type;
}
- bool isActive() const {
+ bool isActive() const {
return _duration > 0;
}
@@ -58,10 +58,10 @@ public:
void set(Type = NONE, int d = 0);
void setType(Type t);
- bool operator==(const Type &t) const {
+ bool operator==(const Type &t) const {
return _type == t;
}
- bool operator!=(const Type &t) const {
+ bool operator!=(const Type &t) const {
return !operator==(t);
}
diff --git a/engines/ultima/ultima4/game/creature.cpp b/engines/ultima/ultima4/game/creature.cpp
index 5bb2a6c82f..c65cb105fc 100644
--- a/engines/ultima/ultima4/game/creature.cpp
+++ b/engines/ultima/ultima4/game/creature.cpp
@@ -237,7 +237,7 @@ void Creature::load(const ConfigElement &conf) {
_slowedType = SLOWED_BY_NOTHING;
}
-bool Creature::isAttackable() const {
+bool Creature::isAttackable() const {
if (_mAttr & MATTR_NONATTACKABLE)
return false;
/* can't attack horse transport */
diff --git a/engines/ultima/ultima4/game/game.cpp b/engines/ultima/ultima4/game/game.cpp
index 4e6762aecc..3e242b7a0c 100644
--- a/engines/ultima/ultima4/game/game.cpp
+++ b/engines/ultima/ultima4/game/game.cpp
@@ -794,7 +794,7 @@ void mixReagentsSuper() {
ReagentShop shops[] = {
{ "BuccDen", {6, 7, 9, 9, 9, 1} },
{ "Moonglo", {2, 5, 6, 3, 6, 9} },
- { "Paws", {3, 4, 2, 8, 6, 7} },
+ { "Paws", {3, 4, 2, 8, 6, 7} },
{ "SkaraBr", {2, 4, 9, 6, 4, 8} },
};
const int shopcount = sizeof(shops) / sizeof(shops[0]);
diff --git a/engines/ultima/ultima4/game/menuitem.cpp b/engines/ultima/ultima4/game/menuitem.cpp
index f4dda8eb63..a8b11d0ce1 100644
--- a/engines/ultima/ultima4/game/menuitem.cpp
+++ b/engines/ultima/ultima4/game/menuitem.cpp
@@ -36,34 +36,34 @@ MenuItem::MenuItem(Common::String t, short xp, short yp, int sc) :
if (sc != -1) addShortcutKey(tolower(_text[sc]));
}
-int MenuItem::getId() const {
+int MenuItem::getId() const {
return _id;
}
-short MenuItem::getX() const {
+short MenuItem::getX() const {
return x;
}
-short MenuItem::getY() const {
+short MenuItem::getY() const {
return y;
}
-int MenuItem::getScOffset() const {
+int MenuItem::getScOffset() const {
return _scOffset;
}
-Common::String MenuItem::getText() const {
+Common::String MenuItem::getText() const {
return _text;
}
-bool MenuItem::isHighlighted() const {
+bool MenuItem::isHighlighted() const {
return _highlighted;
}
-bool MenuItem::isSelected() const {
+bool MenuItem::isSelected() const {
return _selected;
}
-bool MenuItem::isVisible() const {
+bool MenuItem::isVisible() const {
return _visible;
}
-const Std::set<int> &MenuItem::getShortcutKeys() const {
+const Std::set<int> &MenuItem::getShortcutKeys() const {
return _shortcutKeys;
}
-bool MenuItem::getClosesMenu() const {
+bool MenuItem::getClosesMenu() const {
return _closesMenu;
}
diff --git a/engines/ultima/ultima4/game/player.cpp b/engines/ultima/ultima4/game/player.cpp
index cb6d4cc8d0..550a1d58ba 100644
--- a/engines/ultima/ultima4/game/player.cpp
+++ b/engines/ultima/ultima4/game/player.cpp
@@ -118,7 +118,7 @@ Common::String PartyMember::translate(Std::vector<Common::String> &parts) {
return "";
}
-int PartyMember::getHp() const {
+int PartyMember::getHp() const {
return _player->_hp;
}
@@ -164,19 +164,19 @@ const Weapon *PartyMember::getWeapon() const {
return Weapon::get(_player->_weapon);
}
-const Armor *PartyMember::getArmor() const {
+const Armor *PartyMember::getArmor() const {
return g_armors->get(_player->armor);
}
-Common::String PartyMember::getName() const {
+Common::String PartyMember::getName() const {
return _player->name;
}
-SexType PartyMember::getSex() const {
+SexType PartyMember::getSex() const {
return _player->_sex;
}
-ClassType PartyMember::getClass() const {
+ClassType PartyMember::getClass() const {
return _player->_class;
}
diff --git a/engines/ultima/ultima4/game/script.cpp b/engines/ultima/ultima4/game/script.cpp
index d3cb708b85..9fc86e7153 100644
--- a/engines/ultima/ultima4/game/script.cpp
+++ b/engines/ultima/ultima4/game/script.cpp
@@ -444,28 +444,28 @@ void Script::_continue() {
else run(_target);
}
-void Script::resetState() {
+void Script::resetState() {
_state = STATE_NORMAL;
}
-void Script::setState(Script::State s) {
+void Script::setState(Script::State s) {
_state = s;
}
-void Script::setTarget(const Common::String &val) {
+void Script::setTarget(const Common::String &val) {
_target = val;
}
-void Script::setChoices(const Common::String &val) {
+void Script::setChoices(const Common::String &val) {
_choices = val;
}
-void Script::setVar(const Common::String &name, const Common::String &val) {
+void Script::setVar(const Common::String &name, const Common::String &val) {
removeCurrentVariable(name);
_variables[name] = new Variable(val);
}
-void Script::setVar(const Common::String &name, int val) {
+void Script::setVar(const Common::String &name, int val) {
removeCurrentVariable(name);
_variables[name] = new Variable(val);
}
@@ -477,11 +477,11 @@ void Script::unsetVar(const Common::String &name) {
else _variables[name] = new Variable();
}
-Script::State Script::getState() {
+Script::State Script::getState() {
return _state;
}
-Common::String Script::getTarget() {
+Common::String Script::getTarget() {
return _target;
}
@@ -489,15 +489,15 @@ Script::InputType Script::getInputType() {
return _inputType;
}
-Common::String Script::getChoices() {
+Common::String Script::getChoices() {
return _choices;
}
-Common::String Script::getInputName() {
+Common::String Script::getInputName() {
return _inputName;
}
-int Script::getInputMaxLen() {
+int Script::getInputMaxLen() {
return _inputMaxLen;
}
diff --git a/engines/ultima/ultima4/game/weapon.h b/engines/ultima/ultima4/game/weapon.h
index fbb09a77da..14e5ffc3f4 100644
--- a/engines/ultima/ultima4/game/weapon.h
+++ b/engines/ultima/ultima4/game/weapon.h
@@ -57,62 +57,62 @@ public:
*/
static const Weapon *get(const Common::String &name);
- WeaponType getType() const {
+ WeaponType getType() const {
return _type;
}
- const Common::String &getName() const {
+ const Common::String &getName() const {
return _name;
}
- const Common::String &getAbbrev() const {
+ const Common::String &getAbbrev() const {
return _abbr;
}
bool canReady(ClassType klass) const {
return (_canUse & (1 << klass)) != 0;
}
- int getRange() const {
+ int getRange() const {
return _range;
}
- int getDamage() const {
+ int getDamage() const {
return _damage;
}
- const Common::String &getHitTile() const {
+ const Common::String &getHitTile() const {
return _hitTile;
}
- const Common::String &getMissTile() const {
+ const Common::String &getMissTile() const {
return _missTile;
}
- const Common::String &leavesTile() const {
+ const Common::String &leavesTile() const {
return _leaveTile;
}
- unsigned short getFlags() const {
+ unsigned short getFlags() const {
return _flags;
}
- bool loseWhenUsed() const {
+ bool loseWhenUsed() const {
return _flags & WEAP_LOSE;
}
- bool loseWhenRanged() const {
+ bool loseWhenRanged() const {
return _flags & WEAP_LOSEWHENRANGED;
}
- bool canChooseDistance() const {
+ bool canChooseDistance() const {
return _flags & WEAP_CHOOSEDISTANCE;
}
- bool alwaysHits() const {
+ bool alwaysHits() const {
return _flags & WEAP_ALWAYSHITS;
}
- bool isMagic() const {
+ bool isMagic() const {
return _flags & WEAP_MAGIC;
}
bool canAttackThroughObjects() const {
return _flags & WEAP_ATTACKTHROUGHOBJECTS;
}
- bool rangeAbsolute() const {
+ bool rangeAbsolute() const {
return _flags & WEAP_ABSOLUTERANGE;
}
- bool returns() const {
+ bool returns() const {
return _flags & WEAP_RETURNS;
}
- bool showTravel() const {
+ bool showTravel() const {
return !(_flags & WEAP_DONTSHOWTRAVEL);
}
diff --git a/engines/ultima/ultima4/gfx/imageloader_fmtowns.cpp b/engines/ultima/ultima4/gfx/imageloader_fmtowns.cpp
index ffddbf1f2d..da5215b3d2 100644
--- a/engines/ultima/ultima4/gfx/imageloader_fmtowns.cpp
+++ b/engines/ultima/ultima4/gfx/imageloader_fmtowns.cpp
@@ -67,9 +67,9 @@ Image *FMTOWNSImageLoader::load(Common::File *file, int width, int height, int b
// error("FMTOWNS 4bit images cannot handle widths not divisible by 2!");
// byte nibble_mask = 0x0F;
// for (int y = 0; y < height; y++)
-// {
+// {
// for (int x = 0; x < width; x+=2)
-// {
+// {
// int byte = raw[(y * width + x) / 2];
// image->putPixelIndex(x ,y,(byte & nibble_mask) << 4);
// image->putPixelIndex(x+1,y,(byte ) );
diff --git a/engines/ultima/ultima4/map/dungeonview.cpp b/engines/ultima/ultima4/map/dungeonview.cpp
index f5976cc1ca..50327e6bbf 100644
--- a/engines/ultima/ultima4/map/dungeonview.cpp
+++ b/engines/ultima/ultima4/map/dungeonview.cpp
@@ -41,7 +41,7 @@ DungeonView::DungeonView(int x, int y, int columns, int rows) : TileView(x, y, r
}
DungeonView *DungeonView::getInstance() {
- if (!_instance) {
+ if (!_instance) {
_instance = new DungeonView(BORDER_WIDTH, BORDER_HEIGHT, VIEWPORT_W, VIEWPORT_H);
}
return _instance;
diff --git a/engines/ultima/ultima4/map/tile.h b/engines/ultima/ultima4/map/tile.h
index 8f30e97a67..8706b46361 100644
--- a/engines/ultima/ultima4/map/tile.h
+++ b/engines/ultima/ultima4/map/tile.h
@@ -72,46 +72,46 @@ public:
*/
void loadProperties(const ConfigElement &conf);
- TileId getId() const {
+ TileId getId() const {
return _id;
}
- const Common::String &getName() const {
+ const Common::String &getName() const {
return _name;
}
- int getWidth() const {
+ int getWidth() const {
return _w;
}
- int getHeight() const {
+ int getHeight() const {
return _h;
}
- int getFrames() const {
+ int getFrames() const {
return _frames;
}
- int getScale() const {
+ int getScale() const {
return _scale;
}
- TileAnim *getAnim() const {
+ TileAnim *getAnim() const {
return _anim;
}
Image *getImage();
- const Common::String &getLooksLike() const {
+ const Common::String &getLooksLike() const {
return _looksLike;
}
- bool isTiledInDungeon() const {
+ bool isTiledInDungeon() const {
return _tiledInDungeon;
}
- bool isLandForeground() const {
+ bool isLandForeground() const {
return _foreground;
}
- bool isWaterForeground() const {
+ bool isWaterForeground() const {
return _waterForeground;
}
- int canWalkOn(Direction d) const {
+ int canWalkOn(Direction d) const {
return DIR_IN_MASK(d, rule->_walkOnDirs);
}
- int canWalkOff(Direction d) const {
+ int canWalkOff(Direction d) const {
return DIR_IN_MASK(d, rule->_walkOffDirs);
}
@@ -119,23 +119,23 @@ public:
* All tiles that you can walk, swim, or sail on, can be attacked over. All others must declare
* themselves
*/
- int canAttackOver() const {
+ int canAttackOver() const {
return isWalkable() || isSwimable() || isSailable() || (rule->_mask & MASK_ATTACKOVER);
}
- int canLandBalloon() const {
+ int canLandBalloon() const {
return rule->_mask & MASK_CANLANDBALLOON;
}
- int isLivingObject() const {
+ int isLivingObject() const {
return rule->_mask & MASK_LIVING_THING;
}
- int isReplacement() const {
+ int isReplacement() const {
return rule->_mask & MASK_REPLACEMENT;
}
int isWaterReplacement() const {
return rule->_mask & MASK_WATER_REPLACEMENT;
}
- int isWalkable() const {
+ int isWalkable() const {
return rule->_walkOnDirs > 0;
}
bool isCreatureWalkable() const {
@@ -143,49 +143,49 @@ public:
}
bool isDungeonWalkable() const;
bool isDungeonFloor() const;
- int isSwimable() const {
+ int isSwimable() const {
return rule->_movementMask & MASK_SWIMABLE;
}
- int isSailable() const {
+ int isSailable() const {
return rule->_movementMask & MASK_SAILABLE;
}
- bool isWater() const {
+ bool isWater() const {
return (isSwimable() || isSailable());
}
- int isFlyable() const {
+ int isFlyable() const {
return !(rule->_movementMask & MASK_UNFLYABLE);
}
- int isDoor() const {
+ int isDoor() const {
return rule->_mask & MASK_DOOR;
}
- int isLockedDoor() const {
+ int isLockedDoor() const {
return rule->_mask & MASK_LOCKEDDOOR;
}
- int isChest() const {
+ int isChest() const {
return rule->_mask & MASK_CHEST;
}
- int isShip() const {
+ int isShip() const {
return rule->_mask & MASK_SHIP;
}
- bool isPirateShip() const {
+ bool isPirateShip() const {
return _name == "pirate_ship";
}
- int isHorse() const {
+ int isHorse() const {
return rule->_mask & MASK_HORSE;
}
- int isBalloon() const {
+ int isBalloon() const {
return rule->_mask & MASK_BALLOON;
}
- int canDispel() const {
+ int canDispel() const {
return rule->_mask & MASK_DISPEL;
}
- int canTalkOver() const {
+ int canTalkOver() const {
return rule->_mask & MASK_TALKOVER;
}
- TileSpeed getSpeed() const {
+ TileSpeed getSpeed() const {
return rule->_speed;
}
- TileEffect getEffect() const {
+ TileEffect getEffect() const {
return rule->_effect;
}
@@ -199,10 +199,10 @@ public:
Direction directionForFrame(int frame) const;
int frameForDirection(Direction d) const;
- static void resetNextId() {
+ static void resetNextId() {
_nextId = 0;
}
- static bool canTalkOverTile(const Tile *tile) {
+ static bool canTalkOverTile(const Tile *tile) {
return tile->canTalkOver() != 0;
}
static bool canAttackOverTile(const Tile *tile) {
diff --git a/engines/ultima/ultima4/sound/music.h b/engines/ultima/ultima4/sound/music.h
index 4225e62b89..e6a9a3e37c 100644
--- a/engines/ultima/ultima4/sound/music.h
+++ b/engines/ultima/ultima4/sound/music.h
@@ -95,7 +95,7 @@ public:
/**
* Stop playing music
*/
- void stop() {
+ void stop() {
_on = false;
stopMid();
}
@@ -113,28 +113,28 @@ public:
/**
* Music when you talk to Lord British
*/
- void lordBritish() {
+ void lordBritish() {
playMid(RULEBRIT);
}
/**
* Music when you talk to Hawkwind
*/
- void hawkwind() {
+ void hawkwind() {
playMid(SHOPPING);
}
/**
* Music that plays while camping
*/
- void camp() {
+ void camp() {
fadeOut(1000);
}
/**
* Music when talking to a vendor
*/
- void shopping() {
+ void shopping() {
playMid(SHOPPING);
}
void intro() {
diff --git a/engines/ultima/ultima4/sound/sound_p.h b/engines/ultima/ultima4/sound/sound_p.h
index 6abe336c2c..3cd37488d7 100644
--- a/engines/ultima/ultima4/sound/sound_p.h
+++ b/engines/ultima/ultima4/sound/sound_p.h
@@ -43,7 +43,7 @@ public:
private:
bool load(Sound sound);
int init_sys();
- void del() {
+ void del() {
del_sys();
}
void del_sys();
Commit: 8efbf33f95eacdb4430e11ef7fed185cbd9e765d
https://github.com/scummvm/scummvm/commit/8efbf33f95eacdb4430e11ef7fed185cbd9e765d
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-04-25T14:47:09-07:00
Commit Message:
ULTIMA4: Move moongates array to an engine field
Changed paths:
engines/ultima/ultima4/controllers/game_controller.cpp
engines/ultima/ultima4/core/debugger.cpp
engines/ultima/ultima4/game/moongate.cpp
engines/ultima/ultima4/game/moongate.h
engines/ultima/ultima4/game/spell.cpp
engines/ultima/ultima4/map/mapmgr.cpp
engines/ultima/ultima4/ultima4.cpp
engines/ultima/ultima4/ultima4.h
diff --git a/engines/ultima/ultima4/controllers/game_controller.cpp b/engines/ultima/ultima4/controllers/game_controller.cpp
index 8fa6632bf2..d203fa2c28 100644
--- a/engines/ultima/ultima4/controllers/game_controller.cpp
+++ b/engines/ultima/ultima4/controllers/game_controller.cpp
@@ -386,50 +386,50 @@ void GameController::updateMoons(bool showmoongates) {
if (showmoongates) {
/* update the moongates if trammel changed */
if (trammelSubphase == 0) {
- gate = moongateGetGateCoordsForPhase(oldTrammel);
+ gate = g_moongates->getGateCoordsForPhase(oldTrammel);
if (gate)
g_context->_location->_map->_annotations->remove(*gate, g_context->_location->_map->translateFromRawTileIndex(0x40));
- gate = moongateGetGateCoordsForPhase(g_ultima->_saveGame->_trammelPhase);
+ gate = g_moongates->getGateCoordsForPhase(g_ultima->_saveGame->_trammelPhase);
if (gate)
g_context->_location->_map->_annotations->add(*gate, g_context->_location->_map->translateFromRawTileIndex(0x40));
} else if (trammelSubphase == 1) {
- gate = moongateGetGateCoordsForPhase(g_ultima->_saveGame->_trammelPhase);
+ gate = g_moongates->getGateCoordsForPhase(g_ultima->_saveGame->_trammelPhase);
if (gate) {
g_context->_location->_map->_annotations->remove(*gate, g_context->_location->_map->translateFromRawTileIndex(0x40));
g_context->_location->_map->_annotations->add(*gate, g_context->_location->_map->translateFromRawTileIndex(0x41));
}
} else if (trammelSubphase == 2) {
- gate = moongateGetGateCoordsForPhase(g_ultima->_saveGame->_trammelPhase);
+ gate = g_moongates->getGateCoordsForPhase(g_ultima->_saveGame->_trammelPhase);
if (gate) {
g_context->_location->_map->_annotations->remove(*gate, g_context->_location->_map->translateFromRawTileIndex(0x41));
g_context->_location->_map->_annotations->add(*gate, g_context->_location->_map->translateFromRawTileIndex(0x42));
}
} else if (trammelSubphase == 3) {
- gate = moongateGetGateCoordsForPhase(g_ultima->_saveGame->_trammelPhase);
+ gate = g_moongates->getGateCoordsForPhase(g_ultima->_saveGame->_trammelPhase);
if (gate) {
g_context->_location->_map->_annotations->remove(*gate, g_context->_location->_map->translateFromRawTileIndex(0x42));
g_context->_location->_map->_annotations->add(*gate, g_context->_location->_map->translateFromRawTileIndex(0x43));
}
} else if ((trammelSubphase > 3) && (trammelSubphase < (MOON_SECONDS_PER_PHASE * 4 * 3) - 3)) {
- gate = moongateGetGateCoordsForPhase(g_ultima->_saveGame->_trammelPhase);
+ gate = g_moongates->getGateCoordsForPhase(g_ultima->_saveGame->_trammelPhase);
if (gate) {
g_context->_location->_map->_annotations->remove(*gate, g_context->_location->_map->translateFromRawTileIndex(0x43));
g_context->_location->_map->_annotations->add(*gate, g_context->_location->_map->translateFromRawTileIndex(0x43));
}
} else if (trammelSubphase == (MOON_SECONDS_PER_PHASE * 4 * 3) - 3) {
- gate = moongateGetGateCoordsForPhase(g_ultima->_saveGame->_trammelPhase);
+ gate = g_moongates->getGateCoordsForPhase(g_ultima->_saveGame->_trammelPhase);
if (gate) {
g_context->_location->_map->_annotations->remove(*gate, g_context->_location->_map->translateFromRawTileIndex(0x43));
g_context->_location->_map->_annotations->add(*gate, g_context->_location->_map->translateFromRawTileIndex(0x42));
}
} else if (trammelSubphase == (MOON_SECONDS_PER_PHASE * 4 * 3) - 2) {
- gate = moongateGetGateCoordsForPhase(g_ultima->_saveGame->_trammelPhase);
+ gate = g_moongates->getGateCoordsForPhase(g_ultima->_saveGame->_trammelPhase);
if (gate) {
g_context->_location->_map->_annotations->remove(*gate, g_context->_location->_map->translateFromRawTileIndex(0x42));
g_context->_location->_map->_annotations->add(*gate, g_context->_location->_map->translateFromRawTileIndex(0x41));
}
} else if (trammelSubphase == (MOON_SECONDS_PER_PHASE * 4 * 3) - 1) {
- gate = moongateGetGateCoordsForPhase(g_ultima->_saveGame->_trammelPhase);
+ gate = g_moongates->getGateCoordsForPhase(g_ultima->_saveGame->_trammelPhase);
if (gate) {
g_context->_location->_map->_annotations->remove(*gate, g_context->_location->_map->translateFromRawTileIndex(0x41));
g_context->_location->_map->_annotations->add(*gate, g_context->_location->_map->translateFromRawTileIndex(0x40));
@@ -670,7 +670,7 @@ void GameController::checkSpecialCreatures(Direction dir) {
bool GameController::checkMoongates() {
Coords dest;
- if (moongateFindActiveGateAt(g_ultima->_saveGame->_trammelPhase, g_ultima->_saveGame->_feluccaPhase, g_context->_location->_coords, dest)) {
+ if (g_moongates->findActiveGateAt(g_ultima->_saveGame->_trammelPhase, g_ultima->_saveGame->_feluccaPhase, g_context->_location->_coords, dest)) {
gameSpellEffect(-1, -1, SOUND_MOONGATE); // Default spell effect (screen inversion without 'spell' sound effects)
@@ -679,7 +679,7 @@ bool GameController::checkMoongates() {
gameSpellEffect(-1, -1, SOUND_MOONGATE); // Again, after arriving
}
- if (moongateIsEntryToShrineOfSpirituality(g_ultima->_saveGame->_trammelPhase, g_ultima->_saveGame->_feluccaPhase)) {
+ if (g_moongates->isEntryToShrineOfSpirituality(g_ultima->_saveGame->_trammelPhase, g_ultima->_saveGame->_feluccaPhase)) {
Shrine *shrine_spirituality;
shrine_spirituality = dynamic_cast<Shrine *>(mapMgr->get(MAP_SHRINE_SPIRITUALITY));
diff --git a/engines/ultima/ultima4/core/debugger.cpp b/engines/ultima/ultima4/core/debugger.cpp
index a1ba1aa831..e66b78db98 100644
--- a/engines/ultima/ultima4/core/debugger.cpp
+++ b/engines/ultima/ultima4/core/debugger.cpp
@@ -1299,7 +1299,7 @@ bool Debugger::cmdGate(int argc, const char **argv) {
print("Gate %d!", gateNum);
if (g_context->_location->_map->isWorldMap()) {
- const Coords *moongate = moongateGetGateCoordsForPhase(gateNum - 1);
+ const Coords *moongate = g_moongates->getGateCoordsForPhase(gateNum - 1);
if (moongate) {
g_context->_location->_coords = *moongate;
return false;
diff --git a/engines/ultima/ultima4/game/moongate.cpp b/engines/ultima/ultima4/game/moongate.cpp
index 0e5fe6187e..2c5524beb6 100644
--- a/engines/ultima/ultima4/game/moongate.cpp
+++ b/engines/ultima/ultima4/game/moongate.cpp
@@ -28,41 +28,49 @@
namespace Ultima {
namespace Ultima4 {
-typedef Std::map<int, Coords> MoongateList; /* map moon phase to map coordinates */
+Moongates *g_moongates;
-MoongateList gates;
+Moongates::Moongates() {
+ g_moongates = this;
+}
+
+Moongates::~Moongates() {
+ g_moongates = nullptr;
+}
-void moongateAdd(int phase, const Coords &coords) {
- if (gates.contains(phase))
+void Moongates::add(int phase, const Coords &coords) {
+ if (contains(phase))
error("Error: A moongate for phase %d already exists", phase);
- gates[phase] = coords;
+ (*this)[phase] = coords;
}
-const Coords *moongateGetGateCoordsForPhase(int phase) {
- MoongateList::iterator moongate;
+const Coords *Moongates::getGateCoordsForPhase(int phase) {
+ iterator moongate;
- moongate = gates.find(phase);
- if (moongate != gates.end())
+ moongate = find(phase);
+ if (moongate != end())
return &moongate->_value;
+
return nullptr;
}
-bool moongateFindActiveGateAt(int trammel, int felucca, const Coords &src, Coords &dest) {
+bool Moongates::findActiveGateAt(int trammel, int felucca, const Coords &src, Coords &dest) {
const Coords *moongate_coords;
- moongate_coords = moongateGetGateCoordsForPhase(trammel);
+ moongate_coords = getGateCoordsForPhase(trammel);
if (moongate_coords && (src == *moongate_coords)) {
- moongate_coords = moongateGetGateCoordsForPhase(felucca);
+ moongate_coords = getGateCoordsForPhase(felucca);
if (moongate_coords) {
dest = *moongate_coords;
return true;
}
}
+
return false;
}
-bool moongateIsEntryToShrineOfSpirituality(int trammel, int felucca) {
+bool Moongates::isEntryToShrineOfSpirituality(int trammel, int felucca) {
return (trammel == 4 && felucca == 4) ? true : false;
}
diff --git a/engines/ultima/ultima4/game/moongate.h b/engines/ultima/ultima4/game/moongate.h
index 2cb4f1dc5d..c17edd15d8 100644
--- a/engines/ultima/ultima4/game/moongate.h
+++ b/engines/ultima/ultima4/game/moongate.h
@@ -23,15 +23,31 @@
#ifndef ULTIMA4_GAME_MOONGATE_H
#define ULTIMA4_GAME_MOONGATE_H
+#include "ultima/ultima4/core/coords.h"
+#include "common/hashmap.h"
+
namespace Ultima {
namespace Ultima4 {
-class Coords;
+class Moongates : public Common::HashMap<int, Coords> {
+public:
+ /**
+ * Constructor
+ */
+ Moongates();
+
+ /**
+ * Destructor
+ */
+ ~Moongates();
+
+ void add(int phase, const Coords &coords);
+ const Coords *getGateCoordsForPhase(int phase);
+ bool findActiveGateAt(int trammel, int felucca, const Coords &src, Coords &dest);
+ bool isEntryToShrineOfSpirituality(int trammel, int felucca);
+};
-void moongateAdd(int phase, const Coords &coords);
-const Coords *moongateGetGateCoordsForPhase(int phase);
-bool moongateFindActiveGateAt(int trammel, int felucca, const Coords &src, Coords &dest);
-bool moongateIsEntryToShrineOfSpirituality(int trammel, int felucca);
+extern Moongates *g_moongates;
} // End of namespace Ultima4
} // End of namespace Ultima
diff --git a/engines/ultima/ultima4/game/spell.cpp b/engines/ultima/ultima4/game/spell.cpp
index 1ac96c08a9..6c75b35347 100644
--- a/engines/ultima/ultima4/game/spell.cpp
+++ b/engines/ultima/ultima4/game/spell.cpp
@@ -613,7 +613,7 @@ static int spellGate(int phase) {
GameController::flashTile(g_context->_location->_coords, "moongate", 2);
- moongate = moongateGetGateCoordsForPhase(phase);
+ moongate = g_moongates->getGateCoordsForPhase(phase);
if (moongate)
g_context->_location->_coords = *moongate;
diff --git a/engines/ultima/ultima4/map/mapmgr.cpp b/engines/ultima/ultima4/map/mapmgr.cpp
index 78c6be1fda..4fea26bbd1 100644
--- a/engines/ultima/ultima4/map/mapmgr.cpp
+++ b/engines/ultima/ultima4/map/mapmgr.cpp
@@ -336,7 +336,7 @@ void MapMgr::createMoongateFromConf(const ConfigElement &moongateConf) {
int phase = moongateConf.getInt("phase");
Coords coords(moongateConf.getInt("x"), moongateConf.getInt("y"));
- moongateAdd(phase, coords);
+ g_moongates->add(phase, coords);
}
int MapMgr::initCompressedChunkFromConf(const ConfigElement &compressedChunkConf) {
diff --git a/engines/ultima/ultima4/ultima4.cpp b/engines/ultima/ultima4/ultima4.cpp
index e6a344ea09..be5edffc41 100644
--- a/engines/ultima/ultima4/ultima4.cpp
+++ b/engines/ultima/ultima4/ultima4.cpp
@@ -32,6 +32,7 @@
#include "ultima/ultima4/game/armor.h"
#include "ultima/ultima4/game/context.h"
#include "ultima/ultima4/game/game.h"
+#include "ultima/ultima4/game/moongate.h"
#include "ultima/ultima4/game/person.h"
#include "ultima/ultima4/gfx/screen.h"
#include "ultima/ultima4/gfx/imageloader.h"
@@ -51,12 +52,13 @@ Ultima4Engine *g_ultima;
Ultima4Engine::Ultima4Engine(OSystem *syst, const Ultima::UltimaGameDescription *gameDesc) :
Shared::UltimaEngine(syst, gameDesc), _saveSlotToLoad(-1), _armors(nullptr),
_config(nullptr), _context(nullptr), _dialogueLoaders(nullptr), _game(nullptr),
- _music(nullptr), _imageLoaders(nullptr), _saveGame(nullptr), _screen(nullptr),
- _tileMaps(nullptr), _tileRules(nullptr), _tileSets(nullptr) {
+ _music(nullptr), _imageLoaders(nullptr), _moongates(nullptr), _saveGame(nullptr),
+ _screen(nullptr), _tileMaps(nullptr), _tileRules(nullptr), _tileSets(nullptr) {
g_ultima = this;
g_armors = nullptr;
g_context = nullptr;
g_game = nullptr;
+ g_moongates = nullptr;
g_screen = nullptr;
g_tileMaps = nullptr;
g_tileRules = nullptr;
@@ -70,6 +72,7 @@ Ultima4Engine::~Ultima4Engine() {
delete _dialogueLoaders;
delete _game;
delete _imageLoaders;
+ delete _moongates;
delete _music;
delete _saveGame;
delete _screen;
@@ -92,6 +95,7 @@ bool Ultima4Engine::initialize() {
_armors = new Armors();
_context = new Context();
_dialogueLoaders = new DialogueLoaders();
+ _moongates = new Moongates();
_screen = new Screen();
_screen->init();
_tileRules = new TileRules();
@@ -108,7 +112,6 @@ bool Ultima4Engine::initialize() {
_saveSlotToLoad = ConfMan.hasKey("save_slot") ? ConfMan.getInt("save_slot") : -1;
-
return true;
}
diff --git a/engines/ultima/ultima4/ultima4.h b/engines/ultima/ultima4/ultima4.h
index f18ea0be20..3d5ae76089 100644
--- a/engines/ultima/ultima4/ultima4.h
+++ b/engines/ultima/ultima4/ultima4.h
@@ -35,6 +35,7 @@ class Context;
class DialogueLoaders;
class ImageLoaders;
class GameController;
+class Moongates;
class Music;
struct SaveGame;
class Screen;
@@ -64,6 +65,7 @@ public:
DialogueLoaders *_dialogueLoaders;
ImageLoaders *_imageLoaders;
GameController *_game;
+ Moongates *_moongates;
Music *_music;
SaveGame *_saveGame;
Screen *_screen;
Commit: aa5c6ad809661d269d294ee86e782cbb9cb0b463
https://github.com/scummvm/scummvm/commit/aa5c6ad809661d269d294ee86e782cbb9cb0b463
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-04-25T15:03:21-07:00
Commit Message:
ULTIMA4: Move Weapons array to engine field
Changed paths:
engines/ultima/ultima4/core/debugger.cpp
engines/ultima/ultima4/game/player.cpp
engines/ultima/ultima4/game/stats.cpp
engines/ultima/ultima4/game/weapon.cpp
engines/ultima/ultima4/game/weapon.h
engines/ultima/ultima4/ultima4.cpp
engines/ultima/ultima4/ultima4.h
diff --git a/engines/ultima/ultima4/core/debugger.cpp b/engines/ultima/ultima4/core/debugger.cpp
index e66b78db98..11f1de6319 100644
--- a/engines/ultima/ultima4/core/debugger.cpp
+++ b/engines/ultima/ultima4/core/debugger.cpp
@@ -935,7 +935,7 @@ bool Debugger::cmdReadyWeapon(int argc, const char **argv) {
return isDebuggerActive();
PartyMember *p = g_context->_party->member(player);
- const Weapon *w = Weapon::get(weapon);
+ const Weapon *w = g_weapons->get(weapon);
if (!w) {
@@ -1278,7 +1278,7 @@ bool Debugger::cmdEquipment(int argc, const char **argv) {
g_ultima->_saveGame->_armor[i] = 8;
for (i = WEAP_HANDS + 1; i < WEAP_MAX; ++i) {
- const Weapon *weapon = Weapon::get(static_cast<WeaponType>(i));
+ const Weapon *weapon = g_weapons->get(static_cast<WeaponType>(i));
if (weapon->loseWhenUsed() || weapon->loseWhenRanged())
g_ultima->_saveGame->_weapons[i] = 99;
else
diff --git a/engines/ultima/ultima4/game/player.cpp b/engines/ultima/ultima4/game/player.cpp
index 550a1d58ba..4f551aa9e1 100644
--- a/engines/ultima/ultima4/game/player.cpp
+++ b/engines/ultima/ultima4/game/player.cpp
@@ -52,7 +52,7 @@ PartyMember::PartyMember(Party *p, SaveGamePlayerRecord *pr) :
_party(p) {
/* FIXME: we need to rename movement behaviors */
setMovementBehavior(MOVEMENT_ATTACK_AVATAR);
- this->_ranged = Weapon::get(pr->_weapon)->getRange() ? 1 : 0;
+ this->_ranged = g_weapons->get(pr->_weapon)->getRange() ? 1 : 0;
setStatus(pr->_status);
}
@@ -161,7 +161,7 @@ int PartyMember::getMaxMp() const {
}
const Weapon *PartyMember::getWeapon() const {
- return Weapon::get(_player->_weapon);
+ return g_weapons->get(_player->_weapon);
}
const Armor *PartyMember::getArmor() const {
@@ -431,7 +431,7 @@ bool PartyMember::applyDamage(int damage, bool) {
}
int PartyMember::getAttackBonus() const {
- if (Weapon::get(_player->_weapon)->alwaysHits() || _player->_dex >= 40)
+ if (g_weapons->get(_player->_weapon)->alwaysHits() || _player->_dex >= 40)
return 255;
return _player->_dex;
}
@@ -456,7 +456,7 @@ bool PartyMember::dealDamage(Creature *m, int damage) {
int PartyMember::getDamage() {
int maxDamage;
- maxDamage = Weapon::get(_player->_weapon)->getDamage();
+ maxDamage = g_weapons->get(_player->_weapon)->getDamage();
maxDamage += _player->_str;
if (maxDamage > 255)
maxDamage = 255;
@@ -625,7 +625,7 @@ Common::String Party::translate(Std::vector<Common::String> &parts) {
else if (parts.size() == 2) {
if (parts[0] == "weapon") {
- const Weapon *w = Weapon::get(parts[1]);
+ const Weapon *w = g_weapons->get(parts[1]);
if (w)
return xu4_to_string(_saveGame->_weapons[w->getType()]);
} else if (parts[0] == "armor") {
diff --git a/engines/ultima/ultima4/game/stats.cpp b/engines/ultima/ultima4/game/stats.cpp
index b12aaaefe3..adc569b5fc 100644
--- a/engines/ultima/ultima4/game/stats.cpp
+++ b/engines/ultima/ultima4/game/stats.cpp
@@ -249,7 +249,7 @@ void StatsArea::showWeapons() {
int line = 0;
int col = 0;
- _mainArea.textAt(0, line++, "A-%s", Weapon::get(WEAP_HANDS)->getName().c_str());
+ _mainArea.textAt(0, line++, "A-%s", g_weapons->get(WEAP_HANDS)->getName().c_str());
for (int w = WEAP_HANDS + 1; w < WEAP_MAX; w++) {
int n = g_ultima->_saveGame->_weapons[w];
if (n >= 100)
@@ -257,7 +257,7 @@ void StatsArea::showWeapons() {
if (n >= 1) {
const char *format = (n >= 10) ? "%c%d-%s" : "%c-%d-%s";
- _mainArea.textAt(col, line++, format, w - WEAP_HANDS + 'A', n, Weapon::get((WeaponType) w)->getAbbrev().c_str());
+ _mainArea.textAt(col, line++, format, w - WEAP_HANDS + 'A', n, g_weapons->get((WeaponType) w)->getAbbrev().c_str());
if (line >= (STATS_AREA_HEIGHT)) {
line = 0;
col += 8;
diff --git a/engines/ultima/ultima4/game/weapon.cpp b/engines/ultima/ultima4/game/weapon.cpp
index 602329cbcc..11b397af25 100644
--- a/engines/ultima/ultima4/game/weapon.cpp
+++ b/engines/ultima/ultima4/game/weapon.cpp
@@ -27,31 +27,58 @@
namespace Ultima {
namespace Ultima4 {
-bool Weapon::_confLoaded = false;
-Std::vector<Weapon *> Weapon::_weapons;
+Weapons *g_weapons;
-const Weapon *Weapon::get(WeaponType w) {
+Weapons::Weapons() : _confLoaded(false) {
+ g_weapons = this;
+}
+
+Weapons::~Weapons() {
+ g_weapons = nullptr;
+}
+
+const Weapon *Weapons::get(WeaponType w) {
// Load in XML if it hasn't been already
loadConf();
- if (static_cast<unsigned>(w) >= _weapons.size())
+ if (static_cast<unsigned>(w) >= size())
return nullptr;
- return _weapons[w];
+ return (*this)[w];
}
-const Weapon *Weapon::get(const Common::String &name) {
+const Weapon *Weapons::get(const Common::String &name) {
// Load in XML if it hasn't been already
loadConf();
- for (unsigned i = 0; i < _weapons.size(); i++) {
- if (scumm_stricmp(name.c_str(), _weapons[i]->_name.c_str()) == 0)
- return _weapons[i];
+ for (uint i = 0; i < size(); i++) {
+ if (scumm_stricmp(name.c_str(), (*this)[i]->_name.c_str()) == 0)
+ return (*this)[i];
}
+
return nullptr;
}
-Weapon::Weapon(const ConfigElement &conf)
- : _type(static_cast<WeaponType>(_weapons.size()))
+void Weapons::loadConf() {
+ if (_confLoaded)
+ return;
+
+ _confLoaded = true;
+ const Config *config = Config::getInstance();
+
+ Std::vector<ConfigElement> weaponConfs = config->getElement("weapons").getChildren();
+ for (Std::vector<ConfigElement>::iterator i = weaponConfs.begin(); i != weaponConfs.end(); i++) {
+ if (i->getName() != "weapon")
+ continue;
+
+ WeaponType weaponType = static_cast<WeaponType>(size());
+ push_back(new Weapon(weaponType, *i));
+ }
+}
+
+/*-------------------------------------------------------------------*/
+
+Weapon::Weapon(WeaponType weaponType, const ConfigElement &conf)
+ : _type(weaponType)
, _name(conf.getString("name"))
, _abbr(conf.getString("abbr"))
, _canUse(0xFF)
@@ -131,21 +158,5 @@ Weapon::Weapon(const ConfigElement &conf)
}
}
-void Weapon::loadConf() {
- if (_confLoaded)
- return;
-
- _confLoaded = true;
- const Config *config = Config::getInstance();
-
- Std::vector<ConfigElement> weaponConfs = config->getElement("weapons").getChildren();
- for (Std::vector<ConfigElement>::iterator i = weaponConfs.begin(); i != weaponConfs.end(); i++) {
- if (i->getName() != "weapon")
- continue;
-
- _weapons.push_back(new Weapon(*i));
- }
-}
-
} // End of namespace Ultima4
} // End of namespace Ultima
diff --git a/engines/ultima/ultima4/game/weapon.h b/engines/ultima/ultima4/game/weapon.h
index 14e5ffc3f4..70030cd38f 100644
--- a/engines/ultima/ultima4/game/weapon.h
+++ b/engines/ultima/ultima4/game/weapon.h
@@ -30,8 +30,10 @@ namespace Ultima {
namespace Ultima4 {
class ConfigElement;
+class Weapons;
class Weapon {
+ friend class Weapons;
public:
/**< Flags affecting weapon's behavior. @see Weapon::flags */
enum Flags {
@@ -47,16 +49,6 @@ public:
};
public:
- /**
- * Returns weapon by WeaponType.
- */
- static const Weapon *get(WeaponType w);
-
- /**
- * Returns weapon that has the given name
- */
- static const Weapon *get(const Common::String &name);
-
WeaponType getType() const {
return _type;
}
@@ -117,11 +109,7 @@ public:
}
private:
- Weapon(const ConfigElement &conf);
-
- static void loadConf();
- static bool _confLoaded;
- static Std::vector<Weapon *> _weapons;
+ Weapon(WeaponType weaponType, const ConfigElement &conf);
WeaponType _type;
Common::String _name;
@@ -135,6 +123,35 @@ private:
unsigned short _flags;
};
+class Weapons : public Common::Array<Weapon *> {
+private:
+ bool _confLoaded;
+
+ void loadConf();
+public:
+ /**
+ * Constructor
+ */
+ Weapons();
+
+ /**
+ * Destructor
+ */
+ ~Weapons();
+
+ /**
+ * Returns weapon by WeaponType.
+ */
+ const Weapon *get(WeaponType w);
+
+ /**
+ * Returns weapon that has the given name
+ */
+ const Weapon *get(const Common::String &name);
+};
+
+extern Weapons *g_weapons;
+
} // End of namespace Ultima4
} // End of namespace Ultima
diff --git a/engines/ultima/ultima4/ultima4.cpp b/engines/ultima/ultima4/ultima4.cpp
index be5edffc41..d10446f8f4 100644
--- a/engines/ultima/ultima4/ultima4.cpp
+++ b/engines/ultima/ultima4/ultima4.cpp
@@ -34,6 +34,7 @@
#include "ultima/ultima4/game/game.h"
#include "ultima/ultima4/game/moongate.h"
#include "ultima/ultima4/game/person.h"
+#include "ultima/ultima4/game/weapon.h"
#include "ultima/ultima4/gfx/screen.h"
#include "ultima/ultima4/gfx/imageloader.h"
#include "ultima/ultima4/gfx/imagemgr.h"
@@ -53,7 +54,8 @@ Ultima4Engine::Ultima4Engine(OSystem *syst, const Ultima::UltimaGameDescription
Shared::UltimaEngine(syst, gameDesc), _saveSlotToLoad(-1), _armors(nullptr),
_config(nullptr), _context(nullptr), _dialogueLoaders(nullptr), _game(nullptr),
_music(nullptr), _imageLoaders(nullptr), _moongates(nullptr), _saveGame(nullptr),
- _screen(nullptr), _tileMaps(nullptr), _tileRules(nullptr), _tileSets(nullptr) {
+ _screen(nullptr), _tileMaps(nullptr), _tileRules(nullptr), _tileSets(nullptr),
+ _weapons(nullptr) {
g_ultima = this;
g_armors = nullptr;
g_context = nullptr;
@@ -63,6 +65,7 @@ Ultima4Engine::Ultima4Engine(OSystem *syst, const Ultima::UltimaGameDescription
g_tileMaps = nullptr;
g_tileRules = nullptr;
g_tileSets = nullptr;
+ g_weapons = nullptr;
}
Ultima4Engine::~Ultima4Engine() {
@@ -79,6 +82,7 @@ Ultima4Engine::~Ultima4Engine() {
delete _tileMaps;
delete _tileRules;
delete _tileSets;
+ delete _weapons;
ImageMgr::destroy();
@@ -105,6 +109,7 @@ bool Ultima4Engine::initialize() {
_imageLoaders = new ImageLoaders();
_music = new Music();
_saveGame = new SaveGame();
+ _weapons = new Weapons();
setDebugger(new Debugger());
soundInit();
diff --git a/engines/ultima/ultima4/ultima4.h b/engines/ultima/ultima4/ultima4.h
index 3d5ae76089..ecc59d8f78 100644
--- a/engines/ultima/ultima4/ultima4.h
+++ b/engines/ultima/ultima4/ultima4.h
@@ -42,6 +42,7 @@ class Screen;
class TileMaps;
class TileRules;
class TileSets;
+class Weapons;
class Ultima4Engine : public Shared::UltimaEngine {
private:
@@ -72,6 +73,7 @@ public:
TileMaps *_tileMaps;
TileRules *_tileRules;
TileSets *_tileSets;
+ Weapons *_weapons;
Std::vector<Common::String> _hawkwindText;
public:
Ultima4Engine(OSystem *syst, const Ultima::UltimaGameDescription *gameDesc);
Commit: 98294f582f075cc7d608f846c71fd2e5a6da35a6
https://github.com/scummvm/scummvm/commit/98294f582f075cc7d608f846c71fd2e5a6da35a6
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-04-25T15:32:46-07:00
Commit Message:
ULTIMA4: Refactoring shrine statics to engine local
Changed paths:
engines/ultima/ultima4/game/portal.h
engines/ultima/ultima4/map/shrine.cpp
engines/ultima/ultima4/map/shrine.h
engines/ultima/ultima4/ultima4.cpp
engines/ultima/ultima4/ultima4.h
diff --git a/engines/ultima/ultima4/game/portal.h b/engines/ultima/ultima4/game/portal.h
index 72d131a883..0a6f372893 100644
--- a/engines/ultima/ultima4/game/portal.h
+++ b/engines/ultima/ultima4/game/portal.h
@@ -31,7 +31,7 @@ namespace Ultima4 {
class Map;
class Location;
-struct _Portal;
+struct Portal;
typedef enum {
ACTION_NONE = 0x0,
diff --git a/engines/ultima/ultima4/map/shrine.cpp b/engines/ultima/ultima4/map/shrine.cpp
index f685a51975..f72d5bb369 100644
--- a/engines/ultima/ultima4/map/shrine.cpp
+++ b/engines/ultima/ultima4/map/shrine.cpp
@@ -46,11 +46,26 @@
namespace Ultima {
namespace Ultima4 {
-using Common::String;
-using Std::vector;
+Shrines *g_shrines;
-int cycles, completedCycles;
-Std::vector<Common::String> shrineAdvice;
+Shrines::Shrines() : _cycles(0), _completedCycles(0) {
+ g_shrines = this;
+}
+
+Shrines::~Shrines() {
+ g_shrines = nullptr;
+}
+
+void Shrines::loadAdvice() {
+ Common::File *avatar = u4fopen("avatar.exe");
+ if (!avatar)
+ return;
+
+ _advice = u4read_stringtable(avatar, 93682, 24);
+ u4fclose(avatar);
+}
+
+/*-------------------------------------------------------------------*/
bool shrineCanEnter(const Portal *p) {
Shrine *shrine = dynamic_cast<Shrine *>(mapMgr->get(p->_destid));
@@ -69,6 +84,7 @@ bool isShrine(Map *punknown) {
return false;
}
+/*-------------------------------------------------------------------*/
Shrine::Shrine() {}
@@ -97,13 +113,9 @@ void Shrine::setMantra(Common::String m) {
}
void Shrine::enter() {
- if (shrineAdvice.empty()) {
- Common::File *avatar = u4fopen("avatar.exe");
- if (!avatar)
- return;
- shrineAdvice = u4read_stringtable(avatar, 93682, 24);
- u4fclose(avatar);
- }
+ if (!g_shrines->isAdviceLoaded())
+ g_shrines->loadAdvice();
+
#ifdef IOS_ULTIMA4
U4IOS::IOSHideGameControllerHelper hideControllsHelper;
#endif
@@ -136,15 +148,15 @@ void Shrine::enter() {
}
#endif
if (choice == '\033' || choice == '\015')
- cycles = 0;
+ g_shrines->_cycles = 0;
else
- cycles = choice - '0';
- completedCycles = 0;
+ g_shrines->_cycles = choice - '0';
+ g_shrines->_completedCycles = 0;
g_screen->screenMessage("\n\n");
// ensure the player chose the right virtue and entered a valid number for cycles
- if (scumm_strnicmp(virtue.c_str(), getVirtueName(getVirtue()), 6) != 0 || cycles == 0) {
+ if (scumm_strnicmp(virtue.c_str(), getVirtueName(getVirtue()), 6) != 0 || g_shrines->_cycles == 0) {
g_screen->screenMessage("Thou art unable to focus thy thoughts on this subject!\n");
eject();
return;
@@ -235,15 +247,15 @@ void Shrine::askMantra() {
g_context->_party->adjustKarma(KA_BAD_MANTRA);
g_screen->screenMessage("Thou art not able to focus thy thoughts with that Mantra!\n");
eject();
- } else if (--cycles > 0) {
- completedCycles++;
+ } else if (--g_shrines->_cycles > 0) {
+ g_shrines->_completedCycles++;
g_context->_party->adjustKarma(KA_MEDITATION);
meditationCycle();
} else {
- completedCycles++;
+ g_shrines->_completedCycles++;
g_context->_party->adjustKarma(KA_MEDITATION);
- bool elevated = completedCycles == 3 && g_context->_party->attemptElevation(getVirtue());
+ bool elevated = g_shrines->_completedCycles == 3 && g_context->_party->attemptElevation(getVirtue());
if (elevated)
g_screen->screenMessage("\nThou hast achieved partial Avatarhood in the Virtue of %s\n\n",
getVirtueName(getVirtue()));
@@ -276,7 +288,8 @@ void Shrine::showVision(bool elevated) {
gameSetViewMode(VIEW_RUNE);
g_screen->screenDrawImageInMapArea(visionImageNames[getVirtue()]);
} else {
- g_screen->screenMessage("\n%s", shrineAdvice[getVirtue() * 3 + completedCycles - 1].c_str());
+ g_screen->screenMessage("\n%s", g_shrines->_advice[
+ getVirtue() * 3 + g_shrines->_completedCycles - 1].c_str());
}
}
diff --git a/engines/ultima/ultima4/map/shrine.h b/engines/ultima/ultima4/map/shrine.h
index 155f41f3c6..629e8bad71 100644
--- a/engines/ultima/ultima4/map/shrine.h
+++ b/engines/ultima/ultima4/map/shrine.h
@@ -61,10 +61,40 @@ private:
Common::String _mantra;
};
+class Shrines {
+public:
+ int _cycles, _completedCycles;
+ Std::vector<Common::String> _advice;
+public:
+ /**
+ * Constructor
+ */
+ Shrines();
+
+ /**
+ * Destructor
+ */
+ ~Shrines();
+
+ /**
+ * Returns true if advice data has been loaded
+ */
+ bool isAdviceLoaded() const {
+ return !_advice.empty();
+ }
+
+ /**
+ * Load advice
+ */
+ void loadAdvice();
+};
+
+extern Shrines *g_shrines;
+
/**
* Returns true if the player can use the portal to the shrine
*/
-bool shrineCanEnter(const struct _Portal *p);
+bool shrineCanEnter(const Portal *p);
/**
* Returns true if 'map' points to a Shrine map
diff --git a/engines/ultima/ultima4/ultima4.cpp b/engines/ultima/ultima4/ultima4.cpp
index d10446f8f4..d85310fefe 100644
--- a/engines/ultima/ultima4/ultima4.cpp
+++ b/engines/ultima/ultima4/ultima4.cpp
@@ -38,6 +38,7 @@
#include "ultima/ultima4/gfx/screen.h"
#include "ultima/ultima4/gfx/imageloader.h"
#include "ultima/ultima4/gfx/imagemgr.h"
+#include "ultima/ultima4/map/shrine.h"
#include "ultima/ultima4/map/tilemap.h"
#include "ultima/ultima4/map/tileset.h"
#include "ultima/ultima4/sound/music.h"
@@ -54,14 +55,15 @@ Ultima4Engine::Ultima4Engine(OSystem *syst, const Ultima::UltimaGameDescription
Shared::UltimaEngine(syst, gameDesc), _saveSlotToLoad(-1), _armors(nullptr),
_config(nullptr), _context(nullptr), _dialogueLoaders(nullptr), _game(nullptr),
_music(nullptr), _imageLoaders(nullptr), _moongates(nullptr), _saveGame(nullptr),
- _screen(nullptr), _tileMaps(nullptr), _tileRules(nullptr), _tileSets(nullptr),
- _weapons(nullptr) {
+ _screen(nullptr), _shrines(nullptr), _tileMaps(nullptr), _tileRules(nullptr),
+ _tileSets(nullptr), _weapons(nullptr) {
g_ultima = this;
g_armors = nullptr;
g_context = nullptr;
g_game = nullptr;
g_moongates = nullptr;
g_screen = nullptr;
+ g_shrines = nullptr;
g_tileMaps = nullptr;
g_tileRules = nullptr;
g_tileSets = nullptr;
@@ -79,6 +81,7 @@ Ultima4Engine::~Ultima4Engine() {
delete _music;
delete _saveGame;
delete _screen;
+ delete _shrines;
delete _tileMaps;
delete _tileRules;
delete _tileSets;
@@ -102,6 +105,7 @@ bool Ultima4Engine::initialize() {
_moongates = new Moongates();
_screen = new Screen();
_screen->init();
+ _shrines = new Shrines();
_tileRules = new TileRules();
_tileSets = new TileSets();
_tileMaps = new TileMaps();
diff --git a/engines/ultima/ultima4/ultima4.h b/engines/ultima/ultima4/ultima4.h
index ecc59d8f78..b2beaab043 100644
--- a/engines/ultima/ultima4/ultima4.h
+++ b/engines/ultima/ultima4/ultima4.h
@@ -39,6 +39,7 @@ class Moongates;
class Music;
struct SaveGame;
class Screen;
+class Shrines;
class TileMaps;
class TileRules;
class TileSets;
@@ -70,6 +71,7 @@ public:
Music *_music;
SaveGame *_saveGame;
Screen *_screen;
+ Shrines *_shrines;
TileMaps *_tileMaps;
TileRules *_tileRules;
TileSets *_tileSets;
More information about the Scummvm-git-logs
mailing list