[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