[Scummvm-git-logs] scummvm master -> 4515d7a1ac119edfa9bfce90655cab2d4d279582

dreammaster dreammaster at scummvm.org
Fri Sep 23 02:01:06 CEST 2016


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
4515d7a1ac XEEN: Create Resources class to encapsulate all the static resources


Commit: 4515d7a1ac119edfa9bfce90655cab2d4d279582
    https://github.com/scummvm/scummvm/commit/4515d7a1ac119edfa9bfce90655cab2d4d279582
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2016-09-22T20:00:04-04:00

Commit Message:
XEEN: Create Resources class to encapsulate all the static resources

This will make it easier later on to handle things like translations,
and if the other games have different values for some arrays

Changed paths:
    engines/xeen/character.cpp
    engines/xeen/combat.cpp
    engines/xeen/dialogs.cpp
    engines/xeen/dialogs_automap.cpp
    engines/xeen/dialogs_char_info.cpp
    engines/xeen/dialogs_dismiss.cpp
    engines/xeen/dialogs_error.cpp
    engines/xeen/dialogs_exchange.cpp
    engines/xeen/dialogs_info.cpp
    engines/xeen/dialogs_items.cpp
    engines/xeen/dialogs_options.cpp
    engines/xeen/dialogs_party.cpp
    engines/xeen/dialogs_quests.cpp
    engines/xeen/dialogs_quick_ref.cpp
    engines/xeen/dialogs_spells.cpp
    engines/xeen/dialogs_whowill.cpp
    engines/xeen/font.cpp
    engines/xeen/interface.cpp
    engines/xeen/interface_map.cpp
    engines/xeen/map.cpp
    engines/xeen/party.cpp
    engines/xeen/resources.cpp
    engines/xeen/resources.h
    engines/xeen/screen.cpp
    engines/xeen/scripts.cpp
    engines/xeen/spells.cpp
    engines/xeen/town.cpp
    engines/xeen/worldofxeen/clouds_cutscenes.cpp
    engines/xeen/worldofxeen/darkside_cutscenes.cpp



diff --git a/engines/xeen/character.cpp b/engines/xeen/character.cpp
index f47b6e2..4d791b9 100644
--- a/engines/xeen/character.cpp
+++ b/engines/xeen/character.cpp
@@ -46,7 +46,7 @@ void XeenItem::synchronize(Common::Serializer &s) {
 
 ElementalCategory XeenItem::getElementalCategory() const {
 	int idx;
-	for (idx = 0; ELEMENTAL_CATEGORIES[idx] < _material; ++idx)
+	for (idx = 0; Res.ELEMENTAL_CATEGORIES[idx] < _material; ++idx)
 		;
 
 	return (ElementalCategory)idx;
@@ -55,7 +55,7 @@ ElementalCategory XeenItem::getElementalCategory() const {
 AttributeCategory XeenItem::getAttributeCategory() const {
 	int m = _material - 59;
 	int idx;
-	for (idx = 0; ATTRIBUTE_CATEGORIES[idx] < m; ++idx)
+	for (idx = 0; Res.ATTRIBUTE_CATEGORIES[idx] < m; ++idx)
 		;
 
 	return (AttributeCategory)idx;
@@ -67,10 +67,7 @@ InventoryItems::InventoryItems(Character *character, ItemCategory category):
 		_character(character), _category(category) {
 	resize(INV_ITEMS_TOTAL);
 
-	static const char *const *NAMES[4] = { 
-		WEAPON_NAMES, ARMOR_NAMES, ACCESSORY_NAMES, MISC_NAMES 
-	};
-	_names = NAMES[category];
+	_names = Res.ITEM_NAMES[category];
 }
 
 void InventoryItems::clear() {
@@ -94,7 +91,7 @@ bool InventoryItems::passRestrictions(int itemId, bool showError) const {
 	case CLASS_BARBARIAN:
 	case CLASS_DRUID:
 	case CLASS_RANGER: {
-		if (!(ITEM_RESTRICTIONS[itemId + RESTRICTION_OFFSETS[_category]] &
+		if (!(Res.ITEM_RESTRICTIONS[itemId + Res.RESTRICTION_OFFSETS[_category]] &
 			(1 << (charClass - CLASS_ARCHER))))
 			return true;
 		break;
@@ -106,8 +103,8 @@ bool InventoryItems::passRestrictions(int itemId, bool showError) const {
 
 	Common::String name = _names[itemId];
 	if (showError) {
-		Common::String msg = Common::String::format(NOT_PROFICIENT,
-			CLASS_NAMES[charClass], name.c_str());
+		Common::String msg = Common::String::format(Res.NOT_PROFICIENT,
+			Res.CLASS_NAMES[charClass], name.c_str());
 		ErrorScroll::show(Party::_vm, msg, WT_FREEZE_WAIT);
 	}
 
@@ -125,14 +122,14 @@ Common::String InventoryItems::getIdentifiedDetails(int itemIndex) {
 	Common::String classes;
 	for (int charClass = CLASS_KNIGHT; charClass <= CLASS_RANGER; ++charClass) {
 		if (passRestrictions(charClass, true)) {
-			const char *const name = CLASS_NAMES[charClass];
+			const char *const name = Res.CLASS_NAMES[charClass];
 			classes += name[0];
 			classes += name[1];
 			classes += " ";
 		}
 	}
 	if (classes.size() == 30)
-		classes = ALL;
+		classes = Res.ALL;
 
 	return getAttributes(item, classes);
 }
@@ -142,10 +139,10 @@ bool InventoryItems::discardItem(int itemIndex) {
 	XeenEngine *vm = Party::_vm;
 
 	if (item._bonusFlags & ITEMFLAG_CURSED) {
-		ErrorScroll::show(vm, CANNOT_DISCARD_CURSED_ITEM);
+		ErrorScroll::show(vm, Res.CANNOT_DISCARD_CURSED_ITEM);
 	} else {
 		Common::String itemDesc = getFullDescription(itemIndex, 4);
-		Common::String msg = Common::String::format(PERMANENTLY_DISCARD, itemDesc.c_str());
+		Common::String msg = Common::String::format(Res.PERMANENTLY_DISCARD, itemDesc.c_str());
 
 		if (Confirm::show(vm, msg)) {
 			operator[](itemIndex).clear();
@@ -182,7 +179,7 @@ void InventoryItems::removeItem(int itemIndex) {
 	XeenEngine *vm = Party::_vm;
 
 	if (item._bonusFlags & ITEMFLAG_CURSED)
-		ErrorScroll::show(vm, CANNOT_REMOVE_CURSED_ITEM);
+		ErrorScroll::show(vm, Res.CANNOT_REMOVE_CURSED_ITEM);
 	else
 		item._frame = 0;
 }
@@ -199,18 +196,18 @@ void InventoryItems::equipError(int itemIndex1, ItemCategory category1, int item
 		Common::String itemName1 = _character->_items[category1].getName(itemIndex1);
 		Common::String itemName2 = _character->_items[category2].getName(itemIndex2);
 
-		ErrorDialog::show(vm, Common::String::format(REMOVE_X_TO_EQUIP_Y,
+		ErrorDialog::show(vm, Common::String::format(Res.REMOVE_X_TO_EQUIP_Y,
 			itemName1.c_str(), itemName2.c_str()));
 	} else {
-		ErrorDialog::show(vm, Common::String::format(EQUIPPED_ALL_YOU_CAN,
-			(itemIndex1 == -1) ? RING : MEDAL));
+		ErrorDialog::show(vm, Common::String::format(Res.EQUIPPED_ALL_YOU_CAN,
+			(itemIndex1 == -1) ? Res.RING : Res.MEDAL));
 	}
 }
 
 void InventoryItems::enchantItem(int itemIndex, int amount) {
 	XeenEngine *vm = Party::_vm;
 	vm->_sound->playFX(21);
-	ErrorScroll::show(vm, Common::String::format(NOT_ENCHANTABLE, SPELL_FAILED));
+	ErrorScroll::show(vm, Common::String::format(Res.NOT_ENCHANTABLE, Res.SPELL_FAILED));
 }
 
 bool InventoryItems::isFull() const {
@@ -275,11 +272,11 @@ Common::String WeaponItems::getFullDescription(int itemIndex, int displayNum) {
 
 	return Common::String::format("\f%02u%s%s%s\f%02u%s%s%s", displayNum,
 		!i._bonusFlags ? res._maeNames[i._material].c_str() : "",
-		(i._bonusFlags & ITEMFLAG_BROKEN) ? ITEM_BROKEN : "",
-		(i._bonusFlags & ITEMFLAG_CURSED) ? ITEM_CURSED : "",
+		(i._bonusFlags & ITEMFLAG_BROKEN) ? Res.ITEM_BROKEN : "",
+		(i._bonusFlags & ITEMFLAG_CURSED) ? Res.ITEM_CURSED : "",
 		displayNum,
-		WEAPON_NAMES[i._id],
-		!i._bonusFlags ? "" : BONUS_NAMES[i._bonusFlags & ITEMFLAG_BONUS_MASK],
+		Res.WEAPON_NAMES[i._id],
+		!i._bonusFlags ? "" : Res.BONUS_NAMES[i._bonusFlags & ITEMFLAG_BONUS_MASK],
 		(i._bonusFlags & (ITEMFLAG_BROKEN | ITEMFLAG_CURSED)) || 
 			!i._bonusFlags ? "\b " : ""
 	);
@@ -307,45 +304,45 @@ void WeaponItems::enchantItem(int itemIndex, int amount) {
  */
 Common::String WeaponItems::getAttributes(XeenItem &item, const Common::String &classes) {
 	Common::String attrBonus, elemDamage, physDamage, toHit, specialPower;
-	attrBonus = elemDamage = physDamage = toHit = specialPower = FIELD_NONE;
+	attrBonus = elemDamage = physDamage = toHit = specialPower = Res.FIELD_NONE;
 
 	// First calculate physical damage
-	int minVal = WEAPON_DAMAGE_BASE[item._id];
-	int maxVal = minVal * WEAPON_DAMAGE_MULTIPLIER[item._id];
+	int minVal = Res.WEAPON_DAMAGE_BASE[item._id];
+	int maxVal = minVal * Res.WEAPON_DAMAGE_MULTIPLIER[item._id];
 
 	if (item._material >= 37 && item._material <= 58) {
-		minVal += METAL_DAMAGE[item._material - 37];
-		maxVal += METAL_DAMAGE[item._material - 37];
-		toHit = Common::String::format("%+d", METAL_DAMAGE_PERCENT[item._material - 37]);
+		minVal += Res.METAL_DAMAGE[item._material - 37];
+		maxVal += Res.METAL_DAMAGE[item._material - 37];
+		toHit = Common::String::format("%+d", Res.METAL_DAMAGE_PERCENT[item._material - 37]);
 	}
 	
-	physDamage = Common::String::format(DAMAGE_X_TO_Y, minVal, maxVal);
+	physDamage = Common::String::format(Res.DAMAGE_X_TO_Y, minVal, maxVal);
 
 	// Next handle elemental/attribute damage
 	if (item._material < 37) {
-		int damage = ELEMENTAL_DAMAGE[item._material];
+		int damage = Res.ELEMENTAL_DAMAGE[item._material];
 		if (damage > 0) {
 			ElementalCategory elemCategory = item.getElementalCategory();
-			elemDamage = Common::String::format(ELEMENTAL_XY_DAMAGE,
-				damage, ELEMENTAL_NAMES[elemCategory]);
+			elemDamage = Common::String::format(Res.ELEMENTAL_XY_DAMAGE,
+				damage, Res.ELEMENTAL_NAMES[elemCategory]);
 		}
 	} else if (item._material >= 59) {
-		int bonus = ATTRIBUTE_BONUSES[item._material - 59];
+		int bonus = Res.ATTRIBUTE_BONUSES[item._material - 59];
 		AttributeCategory attrCategory = item.getAttributeCategory();
-		attrBonus = Common::String::format(ATTR_XY_BONUS, bonus,
-			ATTRIBUTE_NAMES[attrCategory]);
+		attrBonus = Common::String::format(Res.ATTR_XY_BONUS, bonus,
+			Res.ATTRIBUTE_NAMES[attrCategory]);
 	}
 
 	// Handle weapon effective against
 	int effective = item._bonusFlags & ITEMFLAG_BONUS_MASK;
 	if (effective) {
-		specialPower = Common::String::format(EFFECTIVE_AGAINST,
-			EFFECTIVENESS_NAMES[effective]);
+		specialPower = Common::String::format(Res.EFFECTIVE_AGAINST,
+			Res.EFFECTIVENESS_NAMES[effective]);
 	}
 
-	return Common::String::format(ITEM_DETAILS, classes.c_str(),
+	return Common::String::format(Res.ITEM_DETAILS, classes.c_str(),
 		toHit.c_str(), physDamage.c_str(), elemDamage.c_str(),
-		FIELD_NONE, FIELD_NONE, attrBonus.c_str(), specialPower.c_str()
+		Res.FIELD_NONE, Res.FIELD_NONE, attrBonus.c_str(), specialPower.c_str()
 	);
 }
 
@@ -435,10 +432,10 @@ Common::String ArmorItems::getFullDescription(int itemIndex, int displayNum) {
 
 	return Common::String::format("\f%02u%s%s%s\f%02u%s%s", displayNum,
 		!i._bonusFlags ? "" : res._maeNames[i._material].c_str(),
-		(i._bonusFlags & ITEMFLAG_BROKEN) ? ITEM_BROKEN : "",
-		(i._bonusFlags & ITEMFLAG_CURSED) ? ITEM_CURSED : "",
+		(i._bonusFlags & ITEMFLAG_BROKEN) ? Res.ITEM_BROKEN : "",
+		(i._bonusFlags & ITEMFLAG_CURSED) ? Res.ITEM_CURSED : "",
 		displayNum,
-		ARMOR_NAMES[i._id],
+		Res.ARMOR_NAMES[i._id],
 		(i._bonusFlags & (ITEMFLAG_BROKEN | ITEMFLAG_CURSED)) ||
 			!i._bonusFlags ? "\b " : ""
 	);
@@ -466,34 +463,34 @@ void ArmorItems::enchantItem(int itemIndex, int amount) {
 */
 Common::String ArmorItems::getAttributes(XeenItem &item, const Common::String &classes) {
 	Common::String elemResist, attrBonus, acBonus;
-	elemResist = attrBonus = acBonus = FIELD_NONE;
+	elemResist = attrBonus = acBonus = Res.FIELD_NONE;
 
 	if (item._material < 36) {
-		int resistence = ELEMENTAL_RESISTENCES[item._material];
+		int resistence = Res.ELEMENTAL_RESISTENCES[item._material];
 		if (resistence > 0) {
 			int eCategory = ELEM_FIRE;
-			while (eCategory < ELEM_MAGIC && ELEMENTAL_CATEGORIES[eCategory] < item._material)
+			while (eCategory < ELEM_MAGIC && Res.ELEMENTAL_CATEGORIES[eCategory] < item._material)
 				++eCategory;
 				
-			elemResist = Common::String::format(ATTR_XY_BONUS, resistence,
-				ELEMENTAL_NAMES[eCategory]);
+			elemResist = Common::String::format(Res.ATTR_XY_BONUS, resistence,
+				Res.ELEMENTAL_NAMES[eCategory]);
 		}
 	} else if (item._material >= 59) {
-		int bonus = ATTRIBUTE_BONUSES[item._material - 59];
+		int bonus = Res.ATTRIBUTE_BONUSES[item._material - 59];
 		AttributeCategory aCategory = item.getAttributeCategory();
-		attrBonus = Common::String::format(ATTR_XY_BONUS, bonus,
-			ATTRIBUTE_NAMES[aCategory]);
+		attrBonus = Common::String::format(Res.ATTR_XY_BONUS, bonus,
+			Res.ATTRIBUTE_NAMES[aCategory]);
 	}
 
-	int strength = ARMOR_STRENGTHS[item._id];
+	int strength = Res.ARMOR_STRENGTHS[item._id];
 	if (item._material >= 37 && item._material <= 58) {
-		strength += METAL_LAC[item._material - 37];
+		strength += Res.METAL_LAC[item._material - 37];
 	}
 	acBonus = Common::String::format("%+d", strength);
 
-	return Common::String::format(ITEM_DETAILS, classes.c_str(),
-		FIELD_NONE, FIELD_NONE, FIELD_NONE,
-		elemResist.c_str(), acBonus.c_str(), attrBonus.c_str(), FIELD_NONE);
+	return Common::String::format(Res.ITEM_DETAILS, classes.c_str(),
+		Res.FIELD_NONE, Res.FIELD_NONE, Res.FIELD_NONE,
+		elemResist.c_str(), acBonus.c_str(), attrBonus.c_str(), Res.FIELD_NONE);
 }
 
 /*------------------------------------------------------------------------*/
@@ -552,10 +549,10 @@ Common::String AccessoryItems::getFullDescription(int itemIndex, int displayNum)
 
 	return Common::String::format("\f%02u%s%s%s\f%02u%s%s", displayNum,
 		!i._bonusFlags ? "" : res._maeNames[i._material].c_str(),
-		(i._bonusFlags & ITEMFLAG_BROKEN) ? ITEM_BROKEN : "",
-		(i._bonusFlags & ITEMFLAG_CURSED) ? ITEM_CURSED : "",
+		(i._bonusFlags & ITEMFLAG_BROKEN) ? Res.ITEM_BROKEN : "",
+		(i._bonusFlags & ITEMFLAG_CURSED) ? Res.ITEM_CURSED : "",
 		displayNum,
-		ARMOR_NAMES[i._id],
+		Res.ARMOR_NAMES[i._id],
 		(i._bonusFlags & (ITEMFLAG_BROKEN | ITEMFLAG_CURSED)) ||
 			!i._bonusFlags ? "\b " : ""
 	);
@@ -566,28 +563,28 @@ Common::String AccessoryItems::getFullDescription(int itemIndex, int displayNum)
 */
 Common::String AccessoryItems::getAttributes(XeenItem &item, const Common::String &classes) {
 	Common::String elemResist, attrBonus;
-	elemResist = attrBonus = FIELD_NONE;
+	elemResist = attrBonus = Res.FIELD_NONE;
 
 	if (item._material < 36) {
-		int resistence = ELEMENTAL_RESISTENCES[item._material];
+		int resistence = Res.ELEMENTAL_RESISTENCES[item._material];
 		if (resistence > 0) {
 			int eCategory = ELEM_FIRE;
-			while (eCategory < ELEM_MAGIC && ELEMENTAL_CATEGORIES[eCategory] < item._material)
+			while (eCategory < ELEM_MAGIC && Res.ELEMENTAL_CATEGORIES[eCategory] < item._material)
 				++eCategory;
 
-			elemResist = Common::String::format(ATTR_XY_BONUS, resistence,
-				ELEMENTAL_NAMES[eCategory]);
+			elemResist = Common::String::format(Res.ATTR_XY_BONUS, resistence,
+				Res.ELEMENTAL_NAMES[eCategory]);
 		}
 	} else if (item._material >= 59) {
-		int bonus = ATTRIBUTE_BONUSES[item._material - 59];
+		int bonus = Res.ATTRIBUTE_BONUSES[item._material - 59];
 		AttributeCategory aCategory = item.getAttributeCategory();
-		attrBonus = Common::String::format(ATTR_XY_BONUS, bonus,
-			ATTRIBUTE_NAMES[aCategory]);
+		attrBonus = Common::String::format(Res.ATTR_XY_BONUS, bonus,
+			Res.ATTRIBUTE_NAMES[aCategory]);
 	}
 
-	return Common::String::format(ITEM_DETAILS, classes.c_str(),
-		FIELD_NONE, FIELD_NONE, FIELD_NONE,
-		elemResist.c_str(), FIELD_NONE, attrBonus.c_str(), FIELD_NONE);
+	return Common::String::format(Res.ITEM_DETAILS, classes.c_str(),
+		Res.FIELD_NONE, Res.FIELD_NONE, Res.FIELD_NONE,
+		elemResist.c_str(), Res.FIELD_NONE, attrBonus.c_str(), Res.FIELD_NONE);
 }
 
 /*------------------------------------------------------------------------*/
@@ -598,10 +595,10 @@ Common::String MiscItems::getFullDescription(int itemIndex, int displayNum) {
 
 	return Common::String::format("\f%02u%s%s%s\f%02u%s%s", displayNum,
 		!i._bonusFlags ? "" : res._maeNames[i._material].c_str(),
-		(i._bonusFlags & ITEMFLAG_BROKEN) ? ITEM_BROKEN : "",
-		(i._bonusFlags & ITEMFLAG_CURSED) ? ITEM_CURSED : "",
+		(i._bonusFlags & ITEMFLAG_BROKEN) ? Res.ITEM_BROKEN : "",
+		(i._bonusFlags & ITEMFLAG_CURSED) ? Res.ITEM_CURSED : "",
 		displayNum,
-		ARMOR_NAMES[i._id],
+		Res.ARMOR_NAMES[i._id],
 		(i._bonusFlags & (ITEMFLAG_BROKEN | ITEMFLAG_CURSED)) ||
 			!i._id ? "\b " : ""
 	);
@@ -612,16 +609,16 @@ Common::String MiscItems::getFullDescription(int itemIndex, int displayNum) {
 * Returns a text string listing all the stats/attributes of a given item
 */
 Common::String MiscItems::getAttributes(XeenItem &item, const Common::String &classes) {
-	Common::String specialPower = FIELD_NONE;
+	Common::String specialPower = Res.FIELD_NONE;
 	Spells &spells = *getVm()->_spells;
 
 	if (item._id) {
-		specialPower = spells._spellNames[MISC_SPELL_INDEX[item._id]];
+		specialPower = spells._spellNames[Res.MISC_SPELL_INDEX[item._id]];
 	}
 
-	return Common::String::format(ITEM_DETAILS, classes.c_str(),
-		FIELD_NONE, FIELD_NONE, FIELD_NONE, FIELD_NONE, FIELD_NONE, 
-		FIELD_NONE, specialPower.c_str());
+	return Common::String::format(Res.ITEM_DETAILS, classes.c_str(),
+		Res.FIELD_NONE, Res.FIELD_NONE, Res.FIELD_NONE, Res.FIELD_NONE, Res.FIELD_NONE, 
+		Res.FIELD_NONE, specialPower.c_str());
 }
 /*------------------------------------------------------------------------*/
 
@@ -836,9 +833,9 @@ int Character::getAge(bool ignoreTemp) const {
 }
 
 int Character::getMaxHP() const {
-	int hp = BASE_HP_BY_CLASS[_class];
+	int hp = Res.BASE_HP_BY_CLASS[_class];
 	hp += statBonus(getStat(ENDURANCE));
-	hp += RACE_HP_BONUSES[_race];
+	hp += Res.RACE_HP_BONUSES[_race];
 	if (_skills[BODYBUILDER])
 		++hp;
 	if (hp < 1)
@@ -873,7 +870,7 @@ int Character::getMaxSP() const {
 	for (;;) {
 		// Get the base number of spell points
 		result = statBonus(getStat(attrib)) + 3;
-		result += RACE_SP_BONUSES[_race][attrib - 1];
+		result += Res.RACE_SP_BONUSES[_race][attrib - 1];
 
 		if (_skills[skill])
 			result += 2;
@@ -942,10 +939,10 @@ uint Character::getStat(Attribute attrib, bool baseOnly) const {
 	if (mode < 2) {
 		int age = getAge(false);
 		int ageIndex = 0;
-		while (AGE_RANGES[ageIndex] <= age)
+		while (Res.AGE_RANGES[ageIndex] <= age)
 			++ageIndex;
 
-		attr._permanent += AGE_RANGES_ADJUST[mode][ageIndex];
+		attr._permanent += Res.AGE_RANGES_ADJUST[mode][ageIndex];
 	}
 
 
@@ -974,10 +971,10 @@ int Character::statColor(int amount, int threshold) {
 
 int Character::statBonus(uint statValue) const {
 	int idx;
-	for (idx = 0; STAT_VALUES[idx] <= statValue; ++idx)
+	for (idx = 0; Res.STAT_VALUES[idx] <= statValue; ++idx)
 		;
 
-	return STAT_BONUSES[idx];
+	return Res.STAT_BONUSES[idx];
 }
 
 bool Character::charSavingThrow(DamageType attackType) const {
@@ -1027,7 +1024,7 @@ bool Character::noActions() {
 	case INSANE:
 	case IN_LOVE:
 	case DRUNK: {
-		Common::String msg = Common::String::format(IN_NO_CONDITION, _name.c_str());
+		Common::String msg = Common::String::format(Res.IN_NO_CONDITION, _name.c_str());
 		ErrorScroll::show(Party::_vm, msg, 
 			Party::_vm->_mode == 17 ? WT_2 : WT_NONFREEZED_WAIT);
 		return true;
@@ -1119,7 +1116,7 @@ int Character::itemScan(int itemId) const {
 						++mIndex;
 
 					if (mIndex == itemId)
-						result += ATTRIBUTE_BONUSES[item._material - 59];
+						result += Res.ATTRIBUTE_BONUSES[item._material - 59];
 				}
 			}
 			break;
@@ -1135,22 +1132,22 @@ int Character::itemScan(int itemId) const {
 							++mIndex;
 
 						if (mIndex == itemId)
-							result += ATTRIBUTE_BONUSES[item._material - 59];
+							result += Res.ATTRIBUTE_BONUSES[item._material - 59];
 					}
 
 					if (itemId > 10 && item._material < 37) {
 						int mIndex = item.getElementalCategory() + 11;
 
 						if (mIndex == itemId) {
-							result += ELEMENTAL_RESISTENCES[item._material];
+							result += Res.ELEMENTAL_RESISTENCES[item._material];
 						}
 					}
 
 					if (itemId == 9) {
-						result += ARMOR_STRENGTHS[item._id];
+						result += Res.ARMOR_STRENGTHS[item._id];
 
 						if (item._material >= 37 && item._material <= 58)
-							result += METAL_LAC[item._material - 37];
+							result += Res.METAL_LAC[item._material - 37];
 					}
 				}
 			}
@@ -1167,7 +1164,7 @@ int Character::itemScan(int itemId) const {
 							++mIndex;
 
 						if (mIndex == itemId) {
-							result += ATTRIBUTE_BONUSES[item._material - 59];
+							result += Res.ATTRIBUTE_BONUSES[item._material - 59];
 						}
 					}
 
@@ -1175,7 +1172,7 @@ int Character::itemScan(int itemId) const {
 						int mIndex = item.getElementalCategory() + 11;
 						
 						if (mIndex == itemId)
-							result += ELEMENTAL_RESISTENCES[item._material];
+							result += Res.ELEMENTAL_RESISTENCES[item._material];
 					}
 				}
 			}
@@ -1469,7 +1466,7 @@ uint Character::nextExperienceLevel() const {
 		shift = _level._permanent - 1;
 	}
 
-	return (base * 1024000) + (CLASS_EXP_LEVELS[_class] << shift);
+	return (base * 1024000) + (Res.CLASS_EXP_LEVELS[_class] << shift);
 }
 
 uint Character::getCurrentExperience() const {
@@ -1487,7 +1484,7 @@ uint Character::getCurrentExperience() const {
 		shift = lev - 1;
 	}
 
-	return (base * 1024000) + (CLASS_EXP_LEVELS[_class] << shift) +
+	return (base * 1024000) + (Res.CLASS_EXP_LEVELS[_class] << shift) +
 		_experience;
 }
 
@@ -1679,8 +1676,8 @@ int Character::makeItem(int p1, int itemIndex, int p3) {
 				mult = 5;
 			}
 
-			v12 = MAKE_ITEM_ARR1[vm->getRandomNumber(MAKE_ITEM_ARR2[mult][p1][0],
-				MAKE_ITEM_ARR2[mult][p1][1])];
+			v12 = Res.MAKE_ITEM_ARR1[vm->getRandomNumber(Res.MAKE_ITEM_ARR2[mult][p1][0],
+				Res.MAKE_ITEM_ARR2[mult][p1][1])];
 			break;
 
 		case 2:
@@ -1707,18 +1704,18 @@ int Character::makeItem(int p1, int itemIndex, int p3) {
 				mult = 9;
 			}
 
-			v12 = MAKE_ITEM_ARR1[vm->getRandomNumber(MAKE_ITEM_ARR3[mult][p1][0],
-				MAKE_ITEM_ARR3[mult][p1][1])];
+			v12 = Res.MAKE_ITEM_ARR1[vm->getRandomNumber(Res.MAKE_ITEM_ARR3[mult][p1][0],
+				Res.MAKE_ITEM_ARR3[mult][p1][1])];
 			break;
 
 		case 3:
 			mult = p1 == 7 || vm->getRandomNumber(1, 100) > 70 ? 1 : 0;
-			v16 = vm->getRandomNumber(MAKE_ITEM_ARR4[mult][p1][0],
-				MAKE_ITEM_ARR4[mult][p1][1]);
+			v16 = vm->getRandomNumber(Res.MAKE_ITEM_ARR4[mult][p1][0],
+				Res.MAKE_ITEM_ARR4[mult][p1][1]);
 			break;
 
 		case 4:
-			miscBonus = vm->getRandomNumber(MAKE_ITEM_ARR5[p1][0], MAKE_ITEM_ARR5[p1][1]);
+			miscBonus = vm->getRandomNumber(Res.MAKE_ITEM_ARR5[p1][0], Res.MAKE_ITEM_ARR5[p1][1]);
 			break;
 
 		default:
diff --git a/engines/xeen/combat.cpp b/engines/xeen/combat.cpp
index c8e912c..9282b4e 100644
--- a/engines/xeen/combat.cpp
+++ b/engines/xeen/combat.cpp
@@ -218,7 +218,7 @@ void Combat::giveCharDamage(int damage, DamageType attackType, int charIndex) {
 			// Draw the attack effect on the character sprite
 			sound.playFX(fx);
 			_powSprites.draw(screen, frame,
-				Common::Point(CHAR_FACES_X[selectedIndex1], 150));
+				Common::Point(Res.CHAR_FACES_X[selectedIndex1], 150));
 			screen._windows[33].update();
 
 			// Reduce damage if power shield active, and set it zero
@@ -317,7 +317,7 @@ void Combat::doCharDamage(Character &c, int charNum, int monsterDataIndex) {
 	}
 
 	sound.playFX(fx);
-	intf._charPowSprites.draw(screen, frame, Common::Point(CHAR_FACES_X[charNum], 150));
+	intf._charPowSprites.draw(screen, frame, Common::Point(Res.CHAR_FACES_X[charNum], 150));
 	screen._windows[33].update();
 
 	damage -= party._powerShield;
@@ -485,12 +485,12 @@ void Combat::moveMonsters() {
 							switch (party._mazeDirection) {
 							case DIR_NORTH:
 							case DIR_SOUTH:
-								if (monsterCanMove(pt, MONSTER_GRID_BITMASK[MONSTER_GRID_BITINDEX1[arrIndex]],
+								if (monsterCanMove(pt, Res.MONSTER_GRID_BITMASK[MONSTER_GRID_BITINDEX1[arrIndex]],
 										MONSTER_GRID_X[arrIndex], MONSTER_GRID_Y[arrIndex], idx)) {
 									// Move the monster
 									moveMonster(idx, Common::Point(MONSTER_GRID_X[arrIndex], MONSTER_GRID_Y[arrIndex]));
 								} else {
-									if (monsterCanMove(pt, MONSTER_GRID_BITMASK[MONSTER_GRID_BITINDEX2[arrIndex]],
+									if (monsterCanMove(pt, Res.MONSTER_GRID_BITMASK[MONSTER_GRID_BITINDEX2[arrIndex]],
 										arrIndex >= 21 && arrIndex <= 27 ? MONSTER_GRID3[arrIndex] : 0,
 										arrIndex >= 21 && arrIndex <= 27 ? 0 : MONSTER_GRID3[arrIndex],
 										idx)) {
@@ -505,7 +505,7 @@ void Combat::moveMonsters() {
 
 							case DIR_EAST:
 							case DIR_WEST:
-								if (monsterCanMove(pt, MONSTER_GRID_BITMASK[MONSTER_GRID_BITINDEX2[arrIndex]],
+								if (monsterCanMove(pt, Res.MONSTER_GRID_BITMASK[MONSTER_GRID_BITINDEX2[arrIndex]],
 									arrIndex >= 21 && arrIndex <= 27 ? MONSTER_GRID3[arrIndex] : 0,
 									arrIndex >= 21 && arrIndex <= 27 ? 0 : MONSTER_GRID3[arrIndex],
 									idx)) {
@@ -514,7 +514,7 @@ void Combat::moveMonsters() {
 									} else {
 										moveMonster(idx, Common::Point(0, MONSTER_GRID3[arrIndex]));
 									}
-								} else if (monsterCanMove(pt, MONSTER_GRID_BITMASK[MONSTER_GRID_BITINDEX1[arrIndex]],
+								} else if (monsterCanMove(pt, Res.MONSTER_GRID_BITMASK[MONSTER_GRID_BITINDEX1[arrIndex]],
 										MONSTER_GRID_X[arrIndex], MONSTER_GRID_Y[arrIndex], idx)) {
 									moveMonster(idx, Common::Point(MONSTER_GRID_X[arrIndex], MONSTER_GRID_Y[arrIndex]));
 								}
@@ -1162,7 +1162,7 @@ Common::String Combat::getMonsterDescriptions() {
 		_monsterIndex = 0;
 	}
 
-	return Common::String::format(COMBAT_DETAILS, lines[0].c_str(),
+	return Common::String::format(Res.COMBAT_DETAILS, lines[0].c_str(),
 		lines[1].c_str(), lines[2].c_str());
 }
 
@@ -1575,7 +1575,7 @@ void Combat::quickFight() {
 		break;
 	case QUICK_SPELL:
 		if (c->_currentSpell != -1) {
-			spells.castSpell(c, (MagicSpell)SPELLS_ALLOWED[c->getClassCategory()][c->_currentSpell]);
+			spells.castSpell(c, (MagicSpell)Res.SPELLS_ALLOWED[c->getClassCategory()][c->_currentSpell]);
 		}
 		break;
 	case QUICK_BLOCK:
@@ -1673,15 +1673,15 @@ void Combat::getWeaponDamage(Character &c, RangeType rangeType) {
 				_attackWeapon = &c._weapons[idx];
 
 				if (c._weapons[idx]._material >= 37 && c._weapons[idx]._material < 59) {
-					_hitChanceBonus = METAL_DAMAGE_PERCENT[c._weapons[idx]._material - 37];
-					_weaponDamage = METAL_DAMAGE[c._weapons[idx]._material - 37];
+					_hitChanceBonus = Res.METAL_DAMAGE_PERCENT[c._weapons[idx]._material - 37];
+					_weaponDamage = Res.METAL_DAMAGE[c._weapons[idx]._material - 37];
 				}
 			}
 
 			_hitChanceBonus += party._heroism;
 			_attackWeaponId = c._weapons[idx]._id;
-			_weaponDice = WEAPON_DAMAGE_BASE[_attackWeaponId];
-			_weaponDie = WEAPON_DAMAGE_MULTIPLIER[_attackWeaponId];
+			_weaponDice = Res.WEAPON_DAMAGE_BASE[_attackWeaponId];
+			_weaponDie = Res.WEAPON_DAMAGE_MULTIPLIER[_attackWeaponId];
 
 			for (int diceIdx = 0; diceIdx < _weaponDice; ++diceIdx)
 				_weaponDamage += _vm->getRandomNumber(1, _weaponDie);
@@ -1744,7 +1744,7 @@ int Combat::getMonsterResistence(RangeType rangeType) {
 		}
 	} else {
 		int material = !_attackWeapon ? 0 : _attackWeapon->_material;
-		damage = ELEMENTAL_DAMAGE[material];
+		damage = Res.ELEMENTAL_DAMAGE[material];
 
 		if (material != 0) {
 			if (material < 9)
diff --git a/engines/xeen/dialogs.cpp b/engines/xeen/dialogs.cpp
index 1ea0811..1924c69 100644
--- a/engines/xeen/dialogs.cpp
+++ b/engines/xeen/dialogs.cpp
@@ -56,7 +56,7 @@ void ButtonContainer::addButton(const Common::Rect &bounds, int val) {
 
 void ButtonContainer::addPartyButtons(XeenEngine *vm) {
 	for (uint idx = 0; idx < MAX_ACTIVE_PARTY; ++idx) {
-		addButton(Common::Rect(CHAR_FACES_X[idx], 150, CHAR_FACES_X[idx] + 32, 182),
+		addButton(Common::Rect(Res.CHAR_FACES_X[idx], 150, Res.CHAR_FACES_X[idx] + 32, 182),
 			Common::KEYCODE_F1 + idx);
 	}
 }
@@ -143,7 +143,7 @@ void CreditsScreen::execute() {
 	screen._windows[GAME_WINDOW].close();
 
 	screen.loadBackground("marb.raw");
-	screen._windows[0].writeString(CREDITS);
+	screen._windows[0].writeString(Res.CREDITS);
 	doScroll(false, false);
 	
 	events.setCursor(0);
@@ -163,7 +163,7 @@ void PleaseWait::show(XeenEngine *vm) {
 	if (vm->_mode != MODE_0) {
 		Window &w = vm->_screen->_windows[9];
 		w.open();
-		w.writeString(PLEASE_WAIT);
+		w.writeString(Res.PLEASE_WAIT);
 		w.update();
 	}
 }
diff --git a/engines/xeen/dialogs_automap.cpp b/engines/xeen/dialogs_automap.cpp
index d9b7e8d..6524947 100644
--- a/engines/xeen/dialogs_automap.cpp
+++ b/engines/xeen/dialogs_automap.cpp
@@ -411,9 +411,9 @@ void AutoMapDialog::execute() {
 			events.updateGameCounter();
 		}
 
-		screen._windows[5].writeString(Common::String::format(MAP_TEXT,
+		screen._windows[5].writeString(Common::String::format(Res.MAP_TEXT,
 			map._mazeName.c_str(), party._mazePosition.x,
-			party._mazePosition.y, DIRECTION_TEXT[party._mazeDirection]));
+			party._mazePosition.y, Res.DIRECTION_TEXT[party._mazeDirection]));
 		screen._windows[5].update();
 		screen._windows[3].update();
 
diff --git a/engines/xeen/dialogs_char_info.cpp b/engines/xeen/dialogs_char_info.cpp
index 5a4e3cc..6dd7961 100644
--- a/engines/xeen/dialogs_char_info.cpp
+++ b/engines/xeen/dialogs_char_info.cpp
@@ -56,7 +56,7 @@ void CharacterInfo::execute(int charIndex) {
 	do {
 		if (redrawFlag) {
 			Common::String charDetails = loadCharacterDetails(*c);
-			w.writeString(Common::String::format(CHARACTER_TEMPLATE, charDetails.c_str()));
+			w.writeString(Common::String::format(Res.CHARACTER_TEMPLATE, charDetails.c_str()));
 			w.drawList(_drawList, 24);
 			w.update();
 			redrawFlag = false;
@@ -175,7 +175,7 @@ void CharacterInfo::execute(int charIndex) {
 
 		case Common::KEYCODE_e:
 			if (oldMode == MODE_COMBAT) {
-				ErrorScroll::show(_vm, EXCHANGING_IN_COMBAT, WT_FREEZE_WAIT);
+				ErrorScroll::show(_vm, Res.EXCHANGING_IN_COMBAT, WT_FREEZE_WAIT);
 			} else {
 				_vm->_mode = oldMode;
 				ExchangeDialog::show(_vm, c, charIndex);
@@ -285,9 +285,9 @@ Common::String CharacterInfo::loadCharacterDetails(const Character &c) {
 		c._energyResistence._permanent + c.itemScan(15) + c._energyResistence._temporary +
 		c._magicResistence._permanent + c.itemScan(16) + c._magicResistence._temporary;
 
-	return Common::String::format(CHARACTER_DETAILS,
-		PARTY_GOLD, c._name.c_str(), SEX_NAMES[c._sex],
-		RACE_NAMES[c._race], CLASS_NAMES[c._class],
+	return Common::String::format(Res.CHARACTER_DETAILS,
+		Res.PARTY_GOLD, c._name.c_str(), Res.SEX_NAMES[c._sex],
+		Res.RACE_NAMES[c._race], Res.CLASS_NAMES[c._class],
 		c.statColor(c.getStat(MIGHT), c.getStat(MIGHT, true)), c.getStat(MIGHT),
 		c.statColor(c.getStat(ACCURACY), c.getStat(ACCURACY, true)), c.getStat(ACCURACY),
 		c.statColor(c._currentHp, c.getMaxHP()), c._currentHp,
@@ -307,11 +307,11 @@ Common::String CharacterInfo::loadCharacterDetails(const Character &c) {
 		c.statColor(c.getStat(SPEED), c.getStat(SPEED, true)), c.getStat(SPEED),
 		c.statColor(c.getArmorClass(), c.getArmorClass(true)), c.getArmorClass(),
 		c.getNumAwards(),
-		CONDITION_COLORS[condition], CONDITION_NAMES[condition],
-		condition == NO_CONDITION && party._blessed ? PLUS_14 : "",
-		condition == NO_CONDITION && party._powerShield ? PLUS_14 : "",
-		condition == NO_CONDITION && party._holyBonus ? PLUS_14 : "",
-		condition == NO_CONDITION && party._heroism ? PLUS_14 : ""
+		Res.CONDITION_COLORS[condition], Res.CONDITION_NAMES[condition],
+		condition == NO_CONDITION && party._blessed ? Res.PLUS_14 : "",
+		condition == NO_CONDITION && party._powerShield ? Res.PLUS_14 : "",
+		condition == NO_CONDITION && party._holyBonus ? Res.PLUS_14 : "",
+		condition == NO_CONDITION && party._heroism ? Res.PLUS_14 : ""
 	);
 }
 
@@ -356,18 +356,18 @@ bool CharacterInfo::expandStat(int attrib, const Character &c) {
 		stat1 = c.getStat((Attribute)attrib, false);
 		stat2 = c.getStat((Attribute)attrib, true);
 		idx = 0;
-		while (STAT_VALUES[idx] <= stat1)
+		while (Res.STAT_VALUES[idx] <= stat1)
 			++idx;
 
-		msg = Common::String::format(CURRENT_MAXIMUM_RATING_TEXT, STAT_NAMES[attrib],
-			stat1, stat2, RATING_TEXT[idx]);
+		msg = Common::String::format(Res.CURRENT_MAXIMUM_RATING_TEXT, Res.STAT_NAMES[attrib],
+			stat1, stat2, Res.RATING_TEXT[idx]);
 		break;
 
 	case 7:
 		// Age
 		stat1 = c.getAge(false);
 		stat2 = c.getAge(true);
-		msg = Common::String::format(AGE_TEXT, STAT_NAMES[attrib],
+		msg = Common::String::format(Res.AGE_TEXT, Res.STAT_NAMES[attrib],
 			stat1, stat2, c._birthDay, c._birthYear);
 		break;
 
@@ -376,7 +376,7 @@ bool CharacterInfo::expandStat(int attrib, const Character &c) {
 		const int CLASS_ATTACK_GAINS[10] = { 5, 6, 6, 7, 8, 6, 5, 4, 7, 6 };
 		idx = c.getCurrentLevel() / CLASS_ATTACK_GAINS[c._class] + 1;
 
-		msg = Common::String::format(LEVEL_TEXT, STAT_NAMES[attrib], 
+		msg = Common::String::format(Res.LEVEL_TEXT, Res.STAT_NAMES[attrib],
 			c.getCurrentLevel(), c._level._permanent,
 			idx, idx > 1 ? "s" : "",
 			c._level._permanent);
@@ -387,7 +387,7 @@ bool CharacterInfo::expandStat(int attrib, const Character &c) {
 		// Armor Class
 		stat1 = c.getArmorClass(false);
 		stat2 = c.getArmorClass(true);
-		msg = Common::String::format(CURRENT_MAXIMUM_TEXT, STAT_NAMES[attrib], 
+		msg = Common::String::format(Res.CURRENT_MAXIMUM_TEXT, Res.STAT_NAMES[attrib],
 			stat1, stat2);
 		bounds.setHeight(42);
 		break;
@@ -396,7 +396,7 @@ bool CharacterInfo::expandStat(int attrib, const Character &c) {
 		// Hit Points
 		stat1 = c._currentHp;
 		stat2 = c.getMaxHP();
-		msg = Common::String::format(CURRENT_MAXIMUM_TEXT, STAT_NAMES[attrib], 
+		msg = Common::String::format(Res.CURRENT_MAXIMUM_TEXT, Res.STAT_NAMES[attrib],
 			stat1, stat2);
 		bounds.setHeight(42);
 		break;
@@ -405,14 +405,14 @@ bool CharacterInfo::expandStat(int attrib, const Character &c) {
 		// Spell Points
 		stat1 = c._currentSp;
 		stat2 = c.getMaxSP();
-		msg = Common::String::format(CURRENT_MAXIMUM_TEXT, STAT_NAMES[attrib], 
+		msg = Common::String::format(Res.CURRENT_MAXIMUM_TEXT, Res.STAT_NAMES[attrib],
 			stat1, stat2);
 		bounds.setHeight(42);
 		break;
 
 	case 12:
 		// Resistences
-		msg = Common::String::format(RESISTENCES_TEXT, STAT_NAMES[attrib],
+		msg = Common::String::format(Res.RESISTENCES_TEXT, Res.STAT_NAMES[attrib],
 			c._fireResistence._permanent + c.itemScan(11) + c._fireResistence._temporary,
 			c._coldResistence._permanent + c.itemScan(13) + c._coldResistence._temporary,
 			c._electricityResistence._permanent + c.itemScan(12) + c._electricityResistence._temporary,
@@ -431,19 +431,19 @@ bool CharacterInfo::expandStat(int attrib, const Character &c) {
 				if (c._skills[skill]) {
 					if (skill == THIEVERY) {
 						lines[0] = Common::String::format("\n\t020%s%u",
-							SKILL_NAMES[THIEVERY], c.getThievery());
+							Res.SKILL_NAMES[THIEVERY], c.getThievery());
 					} else {
-						lines[skill] = Common::String::format("\n\t020%s", SKILL_NAMES[skill]);
+						lines[skill] = Common::String::format("\n\t020%s", Res.SKILL_NAMES[skill]);
 					}
 				}
 			}
 		} else {
-			lines[0] = NONE;
+			lines[0] = Res.NONE;
 			numLines = 1;
 		}
 
 		msg = Common::String::format("\x2\x3""c%s\x3l%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s",
-			STAT_NAMES[attrib], lines[0].c_str(), lines[1].c_str(),
+			Res.STAT_NAMES[attrib], lines[0].c_str(), lines[1].c_str(),
 			lines[2].c_str(), lines[3].c_str(), lines[4].c_str(), lines[5].c_str(),
 			lines[17].c_str(), lines[6].c_str(), lines[7].c_str(), lines[8].c_str(),
 			lines[9].c_str(), lines[10].c_str(), lines[11].c_str(), lines[12].c_str(),
@@ -465,23 +465,23 @@ bool CharacterInfo::expandStat(int attrib, const Character &c) {
 		// Experience
 		stat1 = c.getCurrentExperience();
 		stat2 = c.experienceToNextLevel();
-		msg = Common::String::format(EXPERIENCE_TEXT,
-			STAT_NAMES[attrib], stat1,
-			stat2 == 0 ? ELIGIBLE : Common::String::format("%d", stat2).c_str()
+		msg = Common::String::format(Res.EXPERIENCE_TEXT,
+			Res.STAT_NAMES[attrib], stat1,
+			stat2 == 0 ? Res.ELIGIBLE : Common::String::format("%d", stat2).c_str()
 		);
 		bounds.setHeight(43);
 		break;
 
 	case 16:
 		// Gold
-		msg = Common::String::format(IN_PARTY_IN_BANK, CONSUMABLE_NAMES[0],
+		msg = Common::String::format(Res.IN_PARTY_IN_BANK, Res.CONSUMABLE_NAMES[0],
 			party._gold, party._bankGold);
 		bounds.setHeight(43);
 		break;
 
 	case 17:
 		// Gems
-		msg = Common::String::format(IN_PARTY_IN_BANK, CONSUMABLE_NAMES[1],
+		msg = Common::String::format(Res.IN_PARTY_IN_BANK, Res.CONSUMABLE_NAMES[1],
 			party._gems, party._bankGems);
 		bounds.setHeight(43);
 		break;
@@ -489,7 +489,7 @@ bool CharacterInfo::expandStat(int attrib, const Character &c) {
 	case 18: {
 		// Food
 		int food = (party._food / party._activeParty.size()) / 3;
-		msg = Common::String::format(FOOD_TEXT, CONSUMABLE_NAMES[2],
+		msg = Common::String::format(Res.FOOD_TEXT, Res.CONSUMABLE_NAMES[2],
 			party._food, food, food != 1 ? "s" : "");
 		break;
 	}
@@ -502,10 +502,10 @@ bool CharacterInfo::expandStat(int attrib, const Character &c) {
 			if (c._conditions[condition]) {
 				if (condition >= UNCONSCIOUS) {
 					lines[condition] = Common::String::format("\n\t020%s",
-						CONDITION_NAMES[condition]);
+						Res.CONDITION_NAMES[condition]);
 				} else {
 					lines[condition] = Common::String::format("\n\t020%s\t095-%d",
-						CONDITION_NAMES[condition], c._conditions[condition]);
+						Res.CONDITION_NAMES[condition], c._conditions[condition]);
 				}
 
 				++total;
@@ -514,21 +514,21 @@ bool CharacterInfo::expandStat(int attrib, const Character &c) {
 
 		Condition condition = c.worstCondition();
 		if (condition == NO_CONDITION) {
-			lines[0] = Common::String::format("\n\t020%s", GOOD);
+			lines[0] = Common::String::format("\n\t020%s", Res.GOOD);
 			++total;
 		}
 
 		if (party._blessed)
-			lines[16] = Common::String::format(BLESSED, party._blessed);
+			lines[16] = Common::String::format(Res.BLESSED, party._blessed);
 		if (party._powerShield)
-			lines[17] = Common::String::format(POWER_SHIELD, party._powerShield);
+			lines[17] = Common::String::format(Res.POWER_SHIELD, party._powerShield);
 		if (party._holyBonus)
-			lines[18] = Common::String::format(HOLY_BONUS, party._holyBonus);
+			lines[18] = Common::String::format(Res.HOLY_BONUS, party._holyBonus);
 		if (party._heroism)
-			lines[19] = Common::String::format(HEROISM, party._heroism);
+			lines[19] = Common::String::format(Res.HEROISM, party._heroism);
 
 		msg = Common::String::format("\x2\x3""c%s\x3l%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s\x1",
-			CONSUMABLE_NAMES[3], lines[0].c_str(), lines[1].c_str(),
+			Res.CONSUMABLE_NAMES[3], lines[0].c_str(), lines[1].c_str(),
 			lines[2].c_str(), lines[3].c_str(), lines[4].c_str(),
 			lines[5].c_str(), lines[6].c_str(), lines[7].c_str(),
 			lines[8].c_str(), lines[9].c_str(), lines[10].c_str(),
diff --git a/engines/xeen/dialogs_dismiss.cpp b/engines/xeen/dialogs_dismiss.cpp
index 9323b46..58936bd 100644
--- a/engines/xeen/dialogs_dismiss.cpp
+++ b/engines/xeen/dialogs_dismiss.cpp
@@ -68,7 +68,7 @@ void Dismiss::execute() {
 			if (_buttonValue < (int)party._activeParty.size()) {
 				if (party._activeParty.size() == 1) {
 					w.close();
-					ErrorScroll::show(_vm, CANT_DISMISS_LAST_CHAR, WT_NONFREEZED_WAIT);
+					ErrorScroll::show(_vm, Res.CANT_DISMISS_LAST_CHAR, WT_NONFREEZED_WAIT);
 					w.open();
 				} else {
 					// Remove the character from the party
diff --git a/engines/xeen/dialogs_error.cpp b/engines/xeen/dialogs_error.cpp
index 0cad2eb..f9269f5 100644
--- a/engines/xeen/dialogs_error.cpp
+++ b/engines/xeen/dialogs_error.cpp
@@ -100,8 +100,8 @@ void CantCast::execute(int spellId, int componentNum) {
 
 	sound.playFX(21);
 	w.open();
-	w.writeString(Common::String::format(NOT_ENOUGH_TO_CAST,
-		SPELL_CAST_COMPONENTS[componentNum - 1],
+	w.writeString(Common::String::format(Res.NOT_ENOUGH_TO_CAST,
+		Res.SPELL_CAST_COMPONENTS[componentNum - 1],
 		spells._spellNames[spellId].c_str()
 	));
 	w.update();
diff --git a/engines/xeen/dialogs_exchange.cpp b/engines/xeen/dialogs_exchange.cpp
index 37da4e0..0319552 100644
--- a/engines/xeen/dialogs_exchange.cpp
+++ b/engines/xeen/dialogs_exchange.cpp
@@ -41,7 +41,7 @@ void ExchangeDialog::execute(Character *&c, int &charIndex) {
 
 	Window &w = screen._windows[31];
 	w.open();
-	w.writeString(EXCHANGE_WITH_WHOM);
+	w.writeString(Res.EXCHANGE_WITH_WHOM);
 	_iconSprites.draw(w, 0, Common::Point(225, 120));
 	w.update();
 
diff --git a/engines/xeen/dialogs_info.cpp b/engines/xeen/dialogs_info.cpp
index f475d38..945567c 100644
--- a/engines/xeen/dialogs_info.cpp
+++ b/engines/xeen/dialogs_info.cpp
@@ -45,18 +45,18 @@ void InfoDialog::execute() {
 
 	Common::String gameName;
 	if (_vm->getGameID() == GType_Swords)
-		gameName = SWORDS_GAME_TEXT;
+		gameName = Res.SWORDS_GAME_TEXT;
 	else if (_vm->getGameID() == GType_Clouds)
-		gameName = CLOUDS_GAME_TEXT;
+		gameName = Res.CLOUDS_GAME_TEXT;
 	else if (_vm->getGameID() == GType_DarkSide)
-		gameName = DARKSIDE_GAME_TEXT;
+		gameName = Res.DARKSIDE_GAME_TEXT;
 	else
-		gameName = WORLD_GAME_TEXT;
+		gameName = Res.WORLD_GAME_TEXT;
 
 	// Form the display message
 	int hour = party._minutes / 60;
-	Common::String details = Common::String::format(GAME_INFORMATION,
-		gameName.c_str(), WEEK_DAY_STRINGS[party._day % 10],
+	Common::String details = Common::String::format(Res.GAME_INFORMATION,
+		gameName.c_str(), Res.WEEK_DAY_STRINGS[party._day % 10],
 		(hour > 12) ? hour - 12 : (!hour ? 12 : hour),
 		party._minutes % 60, (hour > 11) ? 'p' : 'a',
 		party._day, party._year, statusText.c_str());
@@ -86,41 +86,41 @@ void InfoDialog::protectionText() {
 	const char *const AA_R124 = "\x3r\x9""124";
 
 	if (party._lightCount) {
-		_lines.push_back(Common::String::format(LIGHT_COUNT_TEXT, party._lightCount));
+		_lines.push_back(Common::String::format(Res.LIGHT_COUNT_TEXT, party._lightCount));
 	}
 
 	if (party._fireResistence) {
-		_lines.push_back(Common::String::format(FIRE_RESISTENCE_TEXT,
+		_lines.push_back(Common::String::format(Res.FIRE_RESISTENCE_TEXT,
 			_lines.size() == 0 ? 10 : 1, AA_L024, AA_R124, party._fireResistence));
 	}
 
 	if (party._electricityResistence) {
-		_lines.push_back(Common::String::format(ELECRICITY_RESISTENCE_TEXT,
+		_lines.push_back(Common::String::format(Res.ELECRICITY_RESISTENCE_TEXT,
 			_lines.size() == 0 ? 10 : 1, AA_L024, AA_R124, party._electricityResistence));
 	}
 
 	if (party._coldResistence) {
-		_lines.push_back(Common::String::format(COLD_RESISTENCE_TEXT,
+		_lines.push_back(Common::String::format(Res.COLD_RESISTENCE_TEXT,
 			_lines.size() == 0 ? 10 : 1, AA_L024, AA_R124, party._coldResistence));
 	}
 
 	if (party._poisonResistence) {
-		_lines.push_back(Common::String::format(POISON_RESISTENCE_TEXT,
+		_lines.push_back(Common::String::format(Res.POISON_RESISTENCE_TEXT,
 			_lines.size() == 0 ? 10 : 1, AA_L024, AA_R124, party._poisonResistence));
 	}
 
 	if (party._clairvoyanceActive) {
-		_lines.push_back(Common::String::format(CLAIRVOYANCE_TEXT,
+		_lines.push_back(Common::String::format(Res.CLAIRVOYANCE_TEXT,
 			_lines.size() == 0 ? 10 : 1, AA_L024, AA_R124));
 	}
 
 	if (party._levitateActive) {
-		_lines.push_back(Common::String::format(LEVITATE_TEXT,
+		_lines.push_back(Common::String::format(Res.LEVITATE_TEXT,
 			_lines.size() == 0 ? 10 : 1, AA_L024, AA_R124));
 	}
 
 	if (party._walkOnWaterActive) {
-		_lines.push_back(Common::String::format(WALK_ON_WATER_TEXT,
+		_lines.push_back(Common::String::format(Res.WALK_ON_WATER_TEXT,
 			_lines.size() == 0 ? 10 : 1, AA_L024, AA_R124));
 	}
 }
diff --git a/engines/xeen/dialogs_items.cpp b/engines/xeen/dialogs_items.cpp
index 23d7071..0260ddc 100644
--- a/engines/xeen/dialogs_items.cpp
+++ b/engines/xeen/dialogs_items.cpp
@@ -84,18 +84,18 @@ Character *ItemsDialog::execute(Character *c, ItemsMode mode) {
 			Common::String msg;
 			if (mode != ITEMMODE_CHAR_INFO && mode != ITEMMODE_8 && mode != ITEMMODE_ENCHANT
 					&& mode != ITEMMODE_RECHARGE && mode != ITEMMODE_TO_GOLD) {
-				msg = Common::String::format(ITEMS_DIALOG_TEXT1,
-					BTN_SELL, BTN_IDENTIFY, BTN_FIX);
+				msg = Common::String::format(Res.ITEMS_DIALOG_TEXT1,
+					Res.BTN_SELL, Res.BTN_IDENTIFY, Res.BTN_FIX);
 			} else if (mode != ITEMMODE_ENCHANT  && mode != ITEMMODE_RECHARGE && mode != ITEMMODE_TO_GOLD) {
-				msg = Common::String::format(ITEMS_DIALOG_TEXT1,
-					category == 3 ? BTN_USE : BTN_EQUIP, 
-					BTN_REMOVE, BTN_DISCARD, BTN_QUEST);
+				msg = Common::String::format(Res.ITEMS_DIALOG_TEXT1,
+					category == 3 ? Res.BTN_USE : Res.BTN_EQUIP, 
+					Res.BTN_REMOVE, Res.BTN_DISCARD, Res.BTN_QUEST);
 			} else if (mode == ITEMMODE_ENCHANT) {
-				msg = Common::String::format(ITEMS_DIALOG_TEXT2, BTN_ENCHANT);
+				msg = Common::String::format(Res.ITEMS_DIALOG_TEXT2, Res.BTN_ENCHANT);
 			} else if (mode == ITEMMODE_RECHARGE) {
-				msg = Common::String::format(ITEMS_DIALOG_TEXT2, BTN_RECHARGE);
+				msg = Common::String::format(Res.ITEMS_DIALOG_TEXT2, Res.BTN_RECHARGE);
 			} else {
-				msg = Common::String::format(ITEMS_DIALOG_TEXT2, BTN_GOLD);
+				msg = Common::String::format(Res.ITEMS_DIALOG_TEXT2, Res.BTN_GOLD);
 			}
 
 			screen._windows[29].writeString(msg);
@@ -147,11 +147,11 @@ Character *ItemsDialog::execute(Character *c, ItemsMode mode) {
 					if (i._id) {
 						if (mode == ITEMMODE_CHAR_INFO || mode == ITEMMODE_8
 								|| mode == ITEMMODE_ENCHANT || mode == ITEMMODE_RECHARGE) {
-							lines.push_back(Common::String::format(ITEMS_DIALOG_LINE1, 
+							lines.push_back(Common::String::format(Res.ITEMS_DIALOG_LINE1, 
 								arr[idx], idx + 1,
 								c->_items[category].getFullDescription(idx, arr[idx]).c_str()));
 						} else {
-							lines.push_back(Common::String::format(ITEMS_DIALOG_LINE2,
+							lines.push_back(Common::String::format(Res.ITEMS_DIALOG_LINE2,
 								arr[idx], idx + 1,
 								c->_items[category].getFullDescription(idx, arr[idx]).c_str(),
 								calcItemCost(c, idx, mode,
@@ -167,7 +167,7 @@ Character *ItemsDialog::execute(Character *c, ItemsMode mode) {
 						else
 							ds._frame = 14;
 					} else if (_itemsDrawList[idx]._sprites == nullptr) {
-						lines.push_back(NO_ITEMS_AVAILABLE);
+						lines.push_back(Res.NO_ITEMS_AVAILABLE);
 					}
 					break;
 				}
@@ -179,7 +179,7 @@ Character *ItemsDialog::execute(Character *c, ItemsMode mode) {
 					if (i._material == 0) {
 						// No item
 						if (idx == 0) {
-							lines.push_back(NO_ITEMS_AVAILABLE);
+							lines.push_back(Res.NO_ITEMS_AVAILABLE);
 						}
 					} else {
 						ItemsMode tempMode = mode;
@@ -192,7 +192,7 @@ Character *ItemsDialog::execute(Character *c, ItemsMode mode) {
 							skill = 1;
 						}
 
-						lines.push_back(Common::String::format(ITEMS_DIALOG_LINE2,
+						lines.push_back(Common::String::format(Res.ITEMS_DIALOG_LINE2,
 							arr[idx], idx + 1,
 							c->_items[category].getFullDescription(idx, arr[idx]).c_str(),
 							calcItemCost(c, idx, tempMode, skill, category)
@@ -212,10 +212,10 @@ Character *ItemsDialog::execute(Character *c, ItemsMode mode) {
 			switch (mode) {
 			case ITEMMODE_CHAR_INFO:
 			case ITEMMODE_8:
-				screen._windows[30].writeString(Common::String::format(X_FOR_THE_Y,
+				screen._windows[30].writeString(Common::String::format(Res.X_FOR_THE_Y,
 					category == CATEGORY_MISC ? "\x3l" : "\x3c",
-					CATEGORY_NAMES[category], c->_name.c_str(), CLASS_NAMES[c->_class],
-					category == CATEGORY_MISC ? FMT_CHARGES : " ",
+					Res.CATEGORY_NAMES[category], c->_name.c_str(), Res.CLASS_NAMES[c->_class],
+					category == CATEGORY_MISC ? Res.FMT_CHARGES : " ",
 					lines[0].c_str(), lines[1].c_str(), lines[2].c_str(), lines[3].c_str(),
 					lines[4].c_str(), lines[5].c_str(), lines[6].c_str(), lines[7].c_str(),
 					lines[8].c_str()
@@ -224,8 +224,8 @@ Character *ItemsDialog::execute(Character *c, ItemsMode mode) {
 			case ITEMMODE_BLACKSMITH: {
 				// Original uses var in this block that's never set?!
 				const int v1 = 0;
-				screen._windows[30].writeString(Common::String::format(AVAILABLE_GOLD_COST,
-					CATEGORY_NAMES[category], 
+				screen._windows[30].writeString(Common::String::format(Res.AVAILABLE_GOLD_COST,
+					Res.CATEGORY_NAMES[category], 
 					v1 ? "" : "s", party._gold,
 					lines[0].c_str(), lines[1].c_str(), lines[2].c_str(), lines[3].c_str(),
 					lines[4].c_str(), lines[5].c_str(), lines[6].c_str(), lines[7].c_str(),
@@ -240,9 +240,9 @@ Character *ItemsDialog::execute(Character *c, ItemsMode mode) {
 			case ITEMMODE_REPAIR:
 			case ITEMMODE_IDENTIFY:
 			case ITEMMODE_TO_GOLD:
-				screen._windows[30].writeString(Common::String::format(X_FOR_Y,
-					CATEGORY_NAMES[category], startingChar->_name.c_str(),
-					(mode == ITEMMODE_RECHARGE || mode == ITEMMODE_ENCHANT) ? CHARGES : COST,
+				screen._windows[30].writeString(Common::String::format(Res.X_FOR_Y,
+					Res.CATEGORY_NAMES[category], startingChar->_name.c_str(),
+					(mode == ITEMMODE_RECHARGE || mode == ITEMMODE_ENCHANT) ? Res.CHARGES : Res.COST,
 					lines[0].c_str(), lines[1].c_str(), lines[2].c_str(), lines[3].c_str(),
 					lines[4].c_str(), lines[5].c_str(), lines[6].c_str(), lines[7].c_str(),
 					lines[8].c_str()
@@ -251,8 +251,8 @@ Character *ItemsDialog::execute(Character *c, ItemsMode mode) {
 
 			case ITEMMODE_3:
 			case ITEMMODE_5:
-				screen._windows[30].writeString(Common::String::format(X_FOR_Y_GOLD,
-					CATEGORY_NAMES[category], c->_name.c_str(), party._gold, CHARGES,
+				screen._windows[30].writeString(Common::String::format(Res.X_FOR_Y_GOLD,
+					Res.CATEGORY_NAMES[category], c->_name.c_str(), party._gold, Res.CHARGES,
 					lines[0].c_str(), lines[1].c_str(), lines[2].c_str(), lines[3].c_str(),
 					lines[4].c_str(), lines[5].c_str(), lines[6].c_str(), lines[7].c_str(),
 					lines[8].c_str()
@@ -356,10 +356,10 @@ Character *ItemsDialog::execute(Character *c, ItemsMode mode) {
 						XeenItem &srcItem = srcItems[itemIndex];
 
 						if (srcItem._bonusFlags & ITEMFLAG_CURSED)
-							ErrorScroll::show(_vm, CANNOT_REMOVE_CURSED_ITEM);
+							ErrorScroll::show(_vm, Res.CANNOT_REMOVE_CURSED_ITEM);
 						else if (destItems[INV_ITEMS_TOTAL - 1]._id)
 							ErrorScroll::show(_vm, Common::String::format(
-							CATEGORY_BACKPACK_IS_FULL[category], c->_name.c_str()));
+								Res.CATEGORY_BACKPACK_IS_FULL[category], c->_name.c_str()));
 						else {
 							destItem = srcItem;
 							srcItem.clear();
@@ -581,7 +581,7 @@ void ItemsDialog::blackData2CharData() {
 	Party &party = *_vm->_party;
 	bool isDarkCc = _vm->_files->_isDarkCc;
 	int slotIndex = 0;
-	while (party._mazeId != (int)BLACKSMITH_MAP_IDS[isDarkCc][slotIndex] && slotIndex < 4)
+	while (party._mazeId != (int)Res.BLACKSMITH_MAP_IDS[isDarkCc][slotIndex] && slotIndex < 4)
 		++slotIndex;
 	if (slotIndex == 4)
 		slotIndex = 0;
@@ -598,7 +598,7 @@ void ItemsDialog::charData2BlackData() {
 	Party &party = *_vm->_party;
 	bool isDarkCc = _vm->_files->_isDarkCc;
 	int slotIndex = 0;
-	while (party._mazeId != (int)BLACKSMITH_MAP_IDS[isDarkCc][slotIndex] && slotIndex < 4)
+	while (party._mazeId != (int)Res.BLACKSMITH_MAP_IDS[isDarkCc][slotIndex] && slotIndex < 4)
 		++slotIndex;
 	if (slotIndex == 4)
 		slotIndex = 0;
@@ -692,8 +692,8 @@ int ItemsDialog::calcItemCost(Character *c, int itemIndex, ItemsMode mode,
 		// 0=Weapons, 1=Armor, 2=Accessories
 		XeenItem &i = (mode == 0) ? c->_weapons[itemIndex] :
 			(mode == 1 ? c->_armor[itemIndex] : c->_accessories[itemIndex]);
-		amount1 = (mode == 0) ? WEAPON_BASE_COSTS[i._id] :
-			(mode == 1 ? ARMOR_BASE_COSTS[i._id] : ACCESSORY_BASE_COSTS[i._id]);
+		amount1 = (mode == 0) ? Res.WEAPON_BASE_COSTS[i._id] :
+			(mode == 1 ? Res.ARMOR_BASE_COSTS[i._id] : Res.ACCESSORY_BASE_COSTS[i._id]);
 		
 		if (i._material > 36 && i._material < 59) {
 			switch (i._material) {
@@ -710,15 +710,15 @@ int ItemsDialog::calcItemCost(Character *c, int itemIndex, ItemsMode mode,
 				amount1 /= 4;
 				break;
 			default:
-				amount1 *= METAL_BASE_MULTIPLIERS[i._material - 37];
+				amount1 *= Res.METAL_BASE_MULTIPLIERS[i._material - 37];
 				break;
 			}
 		}
 
 		if (i._material < 37)
-			amount2 = ELEMENTAL_DAMAGE[i._material] * 100;
+			amount2 = Res.ELEMENTAL_DAMAGE[i._material] * 100;
 		else if (i._material > 58)
-			amount3 = METAL_BASE_MULTIPLIERS[i._material - 37] * 100;
+			amount3 = Res.METAL_BASE_MULTIPLIERS[i._material - 37] * 100;
 		
 		switch (mode) {
 		case ITEMMODE_BLACKSMITH:
@@ -726,7 +726,7 @@ int ItemsDialog::calcItemCost(Character *c, int itemIndex, ItemsMode mode,
 		case ITEMMODE_REPAIR:
 		case ITEMMODE_IDENTIFY:
 		case ITEMMODE_TO_GOLD:
-			result = (amount1 + amount2 + amount3 + amount4) / ITEM_SKILL_DIVISORS[level];
+			result = (amount1 + amount2 + amount3 + amount4) / Res.ITEM_SKILL_DIVISORS[level];
 			if (!result)
 				result = 1;
 			break;
@@ -739,8 +739,8 @@ int ItemsDialog::calcItemCost(Character *c, int itemIndex, ItemsMode mode,
 	case 3: {
 		// Misc
 		XeenItem &i = c->_misc[itemIndex];
-		amount1 = MISC_MATERIAL_COSTS[i._material];
-		amount4 = MISC_BASE_COSTS[i._id];
+		amount1 = Res.MISC_MATERIAL_COSTS[i._material];
+		amount4 = Res.MISC_BASE_COSTS[i._id];
 		
 		switch (mode) {
 		case ITEMMODE_BLACKSMITH:
@@ -748,7 +748,7 @@ int ItemsDialog::calcItemCost(Character *c, int itemIndex, ItemsMode mode,
 		case ITEMMODE_REPAIR:
 		case ITEMMODE_IDENTIFY:
 		case ITEMMODE_TO_GOLD:
-			result = (amount1 + amount2 + amount3 + amount4) / ITEM_SKILL_DIVISORS[level];
+			result = (amount1 + amount2 + amount3 + amount4) / Res.ITEM_SKILL_DIVISORS[level];
 			if (!result)
 				result = 1;
 			break;
@@ -800,7 +800,7 @@ int ItemsDialog::doItemOptions(Character &c, int actionIndex, int itemIndex, Ite
 		addButton(Common::Rect(8, 92, 263, 100), Common::KEYCODE_9);
 
 		w.open();
-		w.writeString(Common::String::format(WHICH_ITEM, ITEM_ACTIONS[actionIndex]));
+		w.writeString(Common::String::format(Res.WHICH_ITEM, Res.ITEM_ACTIONS[actionIndex]));
 		_iconSprites.draw(screen, 0, Common::Point(235, 111));
 		w.update();
 
@@ -845,7 +845,7 @@ int ItemsDialog::doItemOptions(Character &c, int actionIndex, int itemIndex, Ite
 				break;
 			case 2:
 				if (!party._mazeId) {
-					ErrorScroll::show(_vm, WHATS_YOUR_HURRY);
+					ErrorScroll::show(_vm, Res.WHATS_YOUR_HURRY);
 				} else {
 					XeenItem &i = c._misc[itemIndex];
 
@@ -857,11 +857,11 @@ int ItemsDialog::doItemOptions(Character &c, int actionIndex, int itemIndex, Ite
 					case DEAD:
 					case STONED:
 					case ERADICATED:
-						ErrorScroll::show(_vm, Common::String::format(IN_NO_CONDITION, c._name.c_str()));
+						ErrorScroll::show(_vm, Common::String::format(Res.IN_NO_CONDITION, c._name.c_str()));
 						break;
 					default:
 						if (combat._itemFlag) {
-							ErrorScroll::show(_vm, USE_ITEM_IN_COMBAT);
+							ErrorScroll::show(_vm, Res.USE_ITEM_IN_COMBAT);
 						} else if (i._id && (i._bonusFlags & ITEMFLAG_BONUS_MASK)
 								&& !(i._bonusFlags & (ITEMFLAG_BROKEN | ITEMFLAG_CURSED))) {
 							int charges = (i._bonusFlags & ITEMFLAG_BONUS_MASK) - 1;
@@ -879,7 +879,7 @@ int ItemsDialog::doItemOptions(Character &c, int actionIndex, int itemIndex, Ite
 								c._items[category].sort();
 							}
 						} else {
-							ErrorScroll::show(_vm, Common::String::format(NO_SPECIAL_ABILITIES,
+							ErrorScroll::show(_vm, Common::String::format(Res.NO_SPECIAL_ABILITIES,
 								c._items[category].getFullDescription(itemIndex).c_str()
 							));
 						}
@@ -898,12 +898,12 @@ int ItemsDialog::doItemOptions(Character &c, int actionIndex, int itemIndex, Ite
 			InventoryItems &invItems = _oldCharacter->_items[category];
 			if (invItems[INV_ITEMS_TOTAL - 1]._id) {
 				// If the last slot is in use, it means the list is full
-				ErrorScroll::show(_vm, Common::String::format(BACKPACK_IS_FULL,
+				ErrorScroll::show(_vm, Common::String::format(Res.BACKPACK_IS_FULL,
 					_oldCharacter->_name.c_str()));
 			} else {
 				int cost = calcItemCost(_oldCharacter, itemIndex, mode, 0, category);
 				Common::String desc = c._items[category].getFullDescription(itemIndex);
-				if (Confirm::show(_vm, Common::String::format(BUY_X_FOR_Y_GOLD,
+				if (Confirm::show(_vm, Common::String::format(Res.BUY_X_FOR_Y_GOLD,
 						desc.c_str(), cost))) {
 					if (party.subtract(0, cost, 0, WT_FREEZE_WAIT)) {
 						if (isDarkCc) {
@@ -935,12 +935,12 @@ int ItemsDialog::doItemOptions(Character &c, int actionIndex, int itemIndex, Ite
 			}
 
 			if (noNeed) {
-				ErrorScroll::show(_vm, Common::String::format(NO_NEED_OF_THIS,
+				ErrorScroll::show(_vm, Common::String::format(Res.NO_NEED_OF_THIS,
 					c._items[category].getFullDescription(itemIndex).c_str()));
 			} else {
 				int cost = calcItemCost(&c, itemIndex, mode, c._skills[MERCHANT], category);
 				Common::String desc = c._items[category].getFullDescription(itemIndex);
-				Common::String msg = Common::String::format(SELL_X_FOR_Y_GOLD,
+				Common::String msg = Common::String::format(Res.SELL_X_FOR_Y_GOLD,
 					desc.c_str(), cost);
 
 				if (Confirm::show(_vm, msg)) {
@@ -958,7 +958,7 @@ int ItemsDialog::doItemOptions(Character &c, int actionIndex, int itemIndex, Ite
 			if (category != CATEGORY_MISC || c._misc[itemIndex]._material > 9
 					|| c._misc[itemIndex]._id == 53 || c._misc[itemIndex]._id == 0) {
 				sound.playFX(21);
-				ErrorScroll::show(_vm, Common::String::format(NOT_RECHARGABLE, SPELL_FAILED));
+				ErrorScroll::show(_vm, Common::String::format(Res.NOT_RECHARGABLE, Res.SPELL_FAILED));
 			} else {
 				int charges = MIN(63, _vm->getRandomNumber(1, 6) +
 					(c._misc[itemIndex]._bonusFlags & ITEMFLAG_BONUS_MASK));
@@ -978,11 +978,11 @@ int ItemsDialog::doItemOptions(Character &c, int actionIndex, int itemIndex, Ite
 
 		case ITEMMODE_REPAIR:
 			if (!(item._bonusFlags & ITEMFLAG_BROKEN)) {
-				ErrorScroll::show(_vm, ITEM_NOT_BROKEN);
+				ErrorScroll::show(_vm, Res.ITEM_NOT_BROKEN);
 			} else {
 				int cost = calcItemCost(&c, itemIndex, mode, actionIndex, category);
-				Common::String msg = Common::String::format(FIX_IDENTIFY_GOLD,
-					FIX_IDENTIFY[0],
+				Common::String msg = Common::String::format(Res.FIX_IDENTIFY_GOLD,
+					Res.FIX_IDENTIFY[0],
 					c._items[category].getFullDescription(itemIndex).c_str(),
 					cost);
 
@@ -994,15 +994,15 @@ int ItemsDialog::doItemOptions(Character &c, int actionIndex, int itemIndex, Ite
 
 		case ITEMMODE_IDENTIFY: {
 			int cost = calcItemCost(&c, itemIndex, mode, actionIndex, category);
-			Common::String msg = Common::String::format(FIX_IDENTIFY_GOLD,
-				FIX_IDENTIFY[1],
+			Common::String msg = Common::String::format(Res.FIX_IDENTIFY_GOLD,
+				Res.FIX_IDENTIFY[1],
 				c._items[category].getFullDescription(itemIndex).c_str(),
 				cost);
 
 			if (Confirm::show(_vm, msg) && party.subtract(0, cost, 0)) {
 				Common::String details = c._items[category].getIdentifiedDetails(itemIndex);
 				Common::String desc = c._items[category].getFullDescription(itemIndex);
-				Common::String str = Common::String::format(IDENTIFY_ITEM_MSG,
+				Common::String str = Common::String::format(Res.IDENTIFY_ITEM_MSG,
 					desc.c_str(), details.c_str());
 
 				Window &win = screen._windows[14];
@@ -1048,7 +1048,7 @@ void ItemsDialog::itemToGold(Character &c, int itemIndex, ItemCategory category,
 	if (category == CATEGORY_WEAPON && item._id == 34) {
 		sound.playFX(21);
 		ErrorScroll::show(_vm, Common::String::format("\v012\t000\x03c%s",
-			SPELL_FAILED));
+			Res.SPELL_FAILED));
 	} else if (item._id != 0) {
 		// There is a valid item present
 		// Calculate cost of item and add it to the party's total
diff --git a/engines/xeen/dialogs_options.cpp b/engines/xeen/dialogs_options.cpp
index 886c73d..a49b6d6 100644
--- a/engines/xeen/dialogs_options.cpp
+++ b/engines/xeen/dialogs_options.cpp
@@ -215,7 +215,7 @@ void WorldOptionsMenu::showContents(SpriteResource &title1, bool waitFlag) {
 
 	// Draw the basic frame for the optitons menu and title text
 	screen._windows[GAME_WINDOW].frame();
-	screen._windows[GAME_WINDOW].writeString(OPTIONS_TITLE);
+	screen._windows[GAME_WINDOW].writeString(Res.OPTIONS_TITLE);
 
 	drawButtons(&screen._windows[0]);
 
diff --git a/engines/xeen/dialogs_party.cpp b/engines/xeen/dialogs_party.cpp
index a297ed5..f370ac2 100644
--- a/engines/xeen/dialogs_party.cpp
+++ b/engines/xeen/dialogs_party.cpp
@@ -72,7 +72,7 @@ void PartyDialog::execute() {
 		Window &w = screen._windows[11];
 		w.open();
 		setupFaces(startingChar, false);
-		w.writeString(Common::String::format(PARTY_DIALOG_TEXT, _partyDetails.c_str()));
+		w.writeString(Common::String::format(Res.PARTY_DIALOG_TEXT, _partyDetails.c_str()));
 		w.drawList(&_faceDrawStructs[0], 4);
 
 		_uiSprites.draw(w, 0, Common::Point(16, 100));
@@ -114,7 +114,7 @@ void PartyDialog::execute() {
 			case Common::KEYCODE_e:
 			case Common::KEYCODE_x:
 				if (party._activeParty.size() == 0) {
-					ErrorScroll::show(_vm, NO_ONE_TO_ADVENTURE_WITH);
+					ErrorScroll::show(_vm, Res.NO_ONE_TO_ADVENTURE_WITH);
 				} else {
 					if (_vm->_mode != MODE_0) {
 						for (int idx = 4; idx >= 0; --idx) {
@@ -166,7 +166,7 @@ void PartyDialog::execute() {
 					if (idx == party._activeParty.size()) {
 						if (party._activeParty.size() == MAX_ACTIVE_PARTY) {
 							sound.playFX(21);
-							ErrorScroll::show(_vm, YOUR_PARTY_IS_FULL);
+							ErrorScroll::show(_vm, Res.YOUR_PARTY_IS_FULL);
 						} else {
 							// Add the character to the active party
 							party._activeParty.push_back(party._roster[
@@ -198,7 +198,7 @@ void PartyDialog::execute() {
 			case Common::KEYCODE_c:
 				// Create
 				if (_charList.size() == XEEN_TOTAL_CHARACTERS) {
-					ErrorScroll::show(_vm, YOUR_ROSTER_IS_FULL);
+					ErrorScroll::show(_vm, Res.YOUR_ROSTER_IS_FULL);
 				} else {
 					screen.fadeOut();
 					w.close();
@@ -221,10 +221,10 @@ void PartyDialog::execute() {
 						int charIndex = charButtonValue - Common::KEYCODE_1 + startingChar;
 						Character &c = party._roster[_charList[charIndex]];
 						if (c.hasSpecialItem()) {
-							ErrorScroll::show(_vm, HAS_SLAYER_SWORD);
+							ErrorScroll::show(_vm, Res.HAS_SLAYER_SWORD);
 						} else {
-							Common::String msg = Common::String::format(SURE_TO_DELETE_CHAR,
-								c._name.c_str(), CLASS_NAMES[c._class]);
+							Common::String msg = Common::String::format(Res.SURE_TO_DELETE_CHAR,
+								c._name.c_str(), Res.CLASS_NAMES[c._class]);
 							if (Confirm::show(_vm, msg)) {
 								// If the character is in the party, remove it
 								for (uint idx = 0; idx < party._activeParty.size(); ++idx) {
@@ -327,10 +327,10 @@ void PartyDialog::setupFaces(int firstDisplayChar, bool updateFlag) {
 		Common::Rect &b = _buttons[7 + posIndex]._bounds;
 		b.moveTo((posIndex & 1) ? 117 : 16, b.top);
 		Character &ps = party._roster[_charList[firstDisplayChar + posIndex]];
-		charNames[posIndex] = isInParty ? IN_PARTY : ps._name;
-		charRaces[posIndex] = RACE_NAMES[ps._race];
-		charSex[posIndex] = SEX_NAMES[ps._sex];
-		charClasses[posIndex] = CLASS_NAMES[ps._class];
+		charNames[posIndex] = isInParty ? Res.IN_PARTY : ps._name;
+		charRaces[posIndex] = Res.RACE_NAMES[ps._race];
+		charSex[posIndex] = Res.SEX_NAMES[ps._sex];
+		charClasses[posIndex] = Res.CLASS_NAMES[ps._class];
 	}
 
 	drawParty(updateFlag);
@@ -344,7 +344,7 @@ void PartyDialog::setupFaces(int firstDisplayChar, bool updateFlag) {
 				_charList[firstDisplayChar + posIndex]]._faceSprites;
 	}
 
-	_partyDetails = Common::String::format(PARTY_DETAILS,
+	_partyDetails = Common::String::format(Res.PARTY_DETAILS,
 		charNames[0].c_str(), charRaces[0].c_str(), charSex[0].c_str(), charClasses[0].c_str(),
 		charNames[1].c_str(), charRaces[1].c_str(), charSex[1].c_str(), charClasses[1].c_str(),
 		charNames[2].c_str(), charRaces[2].c_str(), charSex[2].c_str(), charClasses[2].c_str(),
@@ -356,7 +356,7 @@ void PartyDialog::startingCharChanged(int firstDisplayChar) {
 	Window &w = _vm->_screen->_windows[11];
 
 	setupFaces(firstDisplayChar, true);
-	w.writeString(Common::String::format(PARTY_DIALOG_TEXT, _partyDetails.c_str()));
+	w.writeString(Common::String::format(Res.PARTY_DIALOG_TEXT, _partyDetails.c_str()));
 	w.drawList(_faceDrawStructs, 4);
 
 	_uiSprites.draw(w, 0, Common::Point(16, 100));
@@ -701,8 +701,8 @@ int PartyDialog::selectCharacter(bool isDelete, int firstDisplayChar) {
 
 	w.setBounds(Common::Rect(50, isDelete ? 112 : 76, 266, isDelete ? 148 : 112));
 	w.open();
-	w.writeString(Common::String::format(REMOVE_OR_DELETE_WHICH,
-		REMOVE_DELETE[isDelete ? 1 : 0]));
+	w.writeString(Common::String::format(Res.REMOVE_OR_DELETE_WHICH,
+		Res.REMOVE_DELETE[isDelete ? 1 : 0]));
 	iconSprites.draw(w, 0, Common::Point(225, isDelete ? 120 : 84));
 	w.update();
 
@@ -808,19 +808,19 @@ int PartyDialog::newCharDetails(const uint attribs[TOTAL_ATTRIBUTES],
 	Common::String skillStr, classStr, raceSkillStr;
 
 	// If a selected class is provided, set the default skill for that class
-	if (classId != -1 && NEW_CHAR_SKILLS[classId] != -1) {
-		const char *skillP = SKILL_NAMES[NEW_CHAR_SKILLS[classId]];
-		skillStr = Common::String(skillP, skillP + NEW_CHAR_SKILLS_LEN[classId]);
+	if (classId != -1 && Res.NEW_CHAR_SKILLS[classId] != -1) {
+		const char *skillP = Res.SKILL_NAMES[Res.NEW_CHAR_SKILLS[classId]];
+		skillStr = Common::String(skillP, skillP + Res.NEW_CHAR_SKILLS_LEN[classId]);
 	}
 
 	// If a class is provided, set the class name
 	if (classId != -1) {
-		classStr = Common::String::format("\t062\v168%s", CLASS_NAMES[classId]);
+		classStr = Common::String::format("\t062\v168%s", Res.CLASS_NAMES[classId]);
 	}
 
 	// Set up default skill for the race, if any
-	if (NEW_CHAR_RACE_SKILLS[race] != -1) {
-		raceSkillStr = SKILL_NAMES[NEW_CHAR_RACE_SKILLS[race]];
+	if (Res.NEW_CHAR_RACE_SKILLS[race] != -1) {
+		raceSkillStr = Res.SKILL_NAMES[Res.NEW_CHAR_RACE_SKILLS[race]];
 	}
 
 	// Set up color to use for each skill string to be displayed, based
@@ -836,7 +836,7 @@ int PartyDialog::newCharDetails(const uint attribs[TOTAL_ATTRIBUTES],
 	}
 
 	// Return stats details and character class
-	msg = Common::String::format(NEW_CHAR_STATS, RACE_NAMES[race], SEX_NAMES[sex],
+	msg = Common::String::format(Res.NEW_CHAR_STATS, Res.RACE_NAMES[race], Res.SEX_NAMES[sex],
 		attribs[MIGHT], attribs[INTELLECT], attribs[PERSONALITY],
 		attribs[ENDURANCE], attribs[SPEED], attribs[ACCURACY], attribs[LUCK],
 		classColors[CLASS_KNIGHT], classColors[CLASS_PALADIN],
@@ -909,7 +909,7 @@ int PartyDialog::exchangeAttribute(int srcAttr) {
 
 	Window &w = screen._windows[26];
 	w.open();
-	w.writeString(Common::String::format(EXCHANGE_ATTR_WITH, STAT_NAMES[srcAttr - 1]));
+	w.writeString(Common::String::format(Res.EXCHANGE_ATTR_WITH, Res.STAT_NAMES[srcAttr - 1]));
 	icons.draw(w, 0, Common::Point(118, 58));
 	w.update();
 
@@ -969,7 +969,7 @@ int PartyDialog::exchangeAttribute(int srcAttr) {
 bool PartyDialog::saveCharacter(Character &c, int classId,
 		Race race, Sex sex, uint attribs[TOTAL_ATTRIBUTES]) {
 	if (classId == -1) {
-		ErrorScroll::show(_vm, SELECT_CLASS_BEFORE_SAVING);
+		ErrorScroll::show(_vm, Res.SELECT_CLASS_BEFORE_SAVING);
 		return false;
 	}
 
@@ -982,7 +982,7 @@ bool PartyDialog::saveCharacter(Character &c, int classId,
 	bool isDarkCc = _vm->_files->_isDarkCc;
 
 	saveButtons();
-	w.writeString(NAME_FOR_NEW_CHARACTER);
+	w.writeString(Res.NAME_FOR_NEW_CHARACTER);
 
 	result = Input::show(_vm, &w, name, 10, 200);
 	w.close();
@@ -1008,12 +1008,12 @@ bool PartyDialog::saveCharacter(Character &c, int classId,
 	c._accuracy._permanent = attribs[ACCURACY];
 	c._luck._permanent = attribs[LUCK];
 
-	c._magicResistence._permanent = RACE_MAGIC_RESISTENCES[race];
-	c._fireResistence._permanent = RACE_FIRE_RESISTENCES[race];
-	c._electricityResistence._permanent = RACE_ELECTRIC_RESISTENCES[race];
-	c._coldResistence._permanent = RACE_COLD_RESISTENCES[race];
-	c._energyResistence._permanent = RACE_ENERGY_RESISTENCES[race];
-	c._poisonResistence._permanent = RACE_POISON_RESISTENCES[race];
+	c._magicResistence._permanent = Res.RACE_MAGIC_RESISTENCES[race];
+	c._fireResistence._permanent = Res.RACE_FIRE_RESISTENCES[race];
+	c._electricityResistence._permanent = Res.RACE_ELECTRIC_RESISTENCES[race];
+	c._coldResistence._permanent = Res.RACE_COLD_RESISTENCES[race];
+	c._energyResistence._permanent = Res.RACE_ENERGY_RESISTENCES[race];
+	c._poisonResistence._permanent = Res.RACE_POISON_RESISTENCES[race];
 
 	c._birthYear = party._year - 18;
 	c._birthDay = party._day;
@@ -1022,18 +1022,18 @@ bool PartyDialog::saveCharacter(Character &c, int classId,
 
 	// Set up any default spells for the character's class
 	for (int idx = 0; idx < 4; ++idx) {
-		if (NEW_CHARACTER_SPELLS[c._class][idx] != -1) {
+		if (Res.NEW_CHARACTER_SPELLS[c._class][idx] != -1) {
 			c._hasSpells = true;
-			c._currentSpell = NEW_CHARACTER_SPELLS[c._class][idx];
+			c._currentSpell = Res.NEW_CHARACTER_SPELLS[c._class][idx];
 			c._spells[c._currentSpell] = 1;
 		}
 	}
 
-	int classSkill = NEW_CHAR_SKILLS[c._class];
+	int classSkill = Res.NEW_CHAR_SKILLS[c._class];
 	if (classSkill != -1)
 		c._skills[classSkill] = 1;
 
-	int raceSkill = NEW_CHAR_RACE_SKILLS[c._race];
+	int raceSkill = Res.NEW_CHAR_RACE_SKILLS[c._race];
 	if (raceSkill != -1)
 		c._skills[raceSkill] = 1;
 
diff --git a/engines/xeen/dialogs_quests.cpp b/engines/xeen/dialogs_quests.cpp
index 38011f1..51a5d52 100644
--- a/engines/xeen/dialogs_quests.cpp
+++ b/engines/xeen/dialogs_quests.cpp
@@ -58,7 +58,7 @@ void Quests::execute() {
 		windowFlag = true;
 	}
 
-	screen._windows[29].writeString(QUESTS_DIALOG_TEXT);
+	screen._windows[29].writeString(Res.QUESTS_DIALOG_TEXT);
 	drawButtons(&screen);
 
 	while (!_vm->shouldQuit()) {
@@ -74,10 +74,10 @@ void Quests::execute() {
 			for (int idx = 0; idx < TOTAL_QUEST_ITEMS; ++idx) {
 				if (party._questItems[idx]) {
 					if (!count && !headerShown && idx < 35) {
-						lines[count++] = CLOUDS_OF_XEEN_LINE;
+						lines[count++] = Res.CLOUDS_OF_XEEN_LINE;
 					}
 					if (idx >= 35 && !headerShown) {
-						lines[count++] = DARKSIDE_OF_XEEN_LINE;
+						lines[count++] = Res.DARKSIDE_OF_XEEN_LINE;
 						headerShown = true;
 					}
 
@@ -91,20 +91,20 @@ void Quests::execute() {
 					case 83:
 					case 84:
 						lines[count++] = Common::String::format("%d %s%c",
-							party._questItems[idx], QUEST_ITEM_NAMES[idx],
+							party._questItems[idx], Res.QUEST_ITEM_NAMES[idx],
 							party._questItems[idx] == 1 ? ' ' : 's');
 						break;
 					default:
-						lines[count++] = QUEST_ITEM_NAMES[idx];
+						lines[count++] = Res.QUEST_ITEM_NAMES[idx];
 						break;
 					}
 				}
 			}
 
 			if (count == 0) {
-				screen._windows[30].writeString(NO_QUEST_ITEMS);
+				screen._windows[30].writeString(Res.NO_QUEST_ITEMS);
 			} else {
-				screen._windows[30].writeString(Common::String::format(QUEST_ITEMS_DATA,
+				screen._windows[30].writeString(Common::String::format(Res.QUEST_ITEMS_DATA,
 					lines[topRow].c_str(), lines[topRow + 1].c_str(),
 					lines[topRow + 2].c_str(), lines[topRow + 3].c_str(),
 					lines[topRow + 4].c_str(), lines[topRow + 5].c_str(),
@@ -123,10 +123,10 @@ void Quests::execute() {
 			for (int idx = 0; idx < TOTAL_QUEST_FLAGS; ++idx) {
 				if (party._quests[idx]) {
 					if (!count && !headerShown && idx < 29) {
-						lines[count++] = CLOUDS_OF_XEEN_LINE;
+						lines[count++] = Res.CLOUDS_OF_XEEN_LINE;
 					}
 					if (idx > 28 && !headerShown) {
-						lines[count++] = DARKSIDE_OF_XEEN_LINE;
+						lines[count++] = Res.DARKSIDE_OF_XEEN_LINE;
 						headerShown = true;
 					}
 
@@ -135,9 +135,9 @@ void Quests::execute() {
 			}
 
 			if (count == 0)
-				lines[1] = NO_CURRENT_QUESTS;
+				lines[1] = Res.NO_CURRENT_QUESTS;
 
-			screen._windows[30].writeString(Common::String::format(CURRENT_QUESTS_DATA,
+			screen._windows[30].writeString(Common::String::format(Res.CURRENT_QUESTS_DATA,
 				lines[topRow].c_str(), lines[topRow + 1].c_str(), lines[topRow + 2].c_str()));
 			break;
 
@@ -150,10 +150,10 @@ void Quests::execute() {
 			for (int idx = 0; idx < MAX_DIALOG_LINES; ++idx) {
 				if (party._worldFlags[idx]) {
 					if (!count && !headerShown && idx < 72) {
-						lines[count++] = CLOUDS_OF_XEEN_LINE;
+						lines[count++] = Res.CLOUDS_OF_XEEN_LINE;
 					}
 					if (idx >= 72 && !headerShown) {
-						lines[count++] = DARKSIDE_OF_XEEN_LINE;
+						lines[count++] = Res.DARKSIDE_OF_XEEN_LINE;
 						headerShown = true;
 					}
 
@@ -162,9 +162,9 @@ void Quests::execute() {
 			}
 
 			if (count == 0)
-				lines[1] = NO_AUTO_NOTES;
+				lines[1] = Res.NO_AUTO_NOTES;
 
-			screen._windows[30].writeString(Common::String::format(AUTO_NOTES_DATA,
+			screen._windows[30].writeString(Common::String::format(Res.AUTO_NOTES_DATA,
 				lines[topRow].c_str(), lines[topRow + 1].c_str(),
 				lines[topRow + 2].c_str(), lines[topRow + 3].c_str(),
 				lines[topRow + 4].c_str(), lines[topRow + 5].c_str(),
diff --git a/engines/xeen/dialogs_quick_ref.cpp b/engines/xeen/dialogs_quick_ref.cpp
index e9ffbd4..eb51695 100644
--- a/engines/xeen/dialogs_quick_ref.cpp
+++ b/engines/xeen/dialogs_quick_ref.cpp
@@ -46,21 +46,21 @@ void QuickReferenceDialog::execute() {
 		Character &c = combat._globalCombat == 2 ? *combat._combatParty[idx] :
 			party._activeParty[idx];
 		Condition condition = c.worstCondition();
-		lines[idx] = Common::String::format(QUICK_REF_LINE,
+		lines[idx] = Common::String::format(Res.QUICK_REF_LINE,
 			idx * 10 + 24, idx + 1, c._name.c_str(),
-			CLASS_NAMES[c._class][0], CLASS_NAMES[c._class][1], CLASS_NAMES[c._class][2],
+			Res.CLASS_NAMES[c._class][0], Res.CLASS_NAMES[c._class][1], Res.CLASS_NAMES[c._class][2],
 			c.statColor(c.getCurrentLevel(), c._level._permanent), c._level._permanent,
 			c.statColor(c._currentHp, c.getMaxHP()), c._currentHp,
 			c.statColor(c._currentSp, c.getMaxSP()), c._currentSp,
 			c.statColor(c.getArmorClass(), c.getArmorClass(true)), c.getArmorClass(),
-			CONDITION_COLORS[condition],
-			CONDITION_NAMES[condition][0], CONDITION_NAMES[condition][1],
-			CONDITION_NAMES[condition][2], CONDITION_NAMES[condition][3]
+			Res.CONDITION_COLORS[condition],
+			Res.CONDITION_NAMES[condition][0], Res.CONDITION_NAMES[condition][1],
+			Res.CONDITION_NAMES[condition][2], Res.CONDITION_NAMES[condition][3]
 		);
 	}
 
 	int food = (party._food / party._activeParty.size()) / 3;
-	Common::String msg = Common::String::format(QUICK_REFERENCE,
+	Common::String msg = Common::String::format(Res.QUICK_REFERENCE,
 		lines[0].c_str(), lines[1].c_str(), lines[2].c_str(),
 		lines[3].c_str(), lines[4].c_str(), lines[5].c_str(),
 		lines[6].c_str(), lines[7].c_str(),
diff --git a/engines/xeen/dialogs_spells.cpp b/engines/xeen/dialogs_spells.cpp
index 9a9d39a..47125c4 100644
--- a/engines/xeen/dialogs_spells.cpp
+++ b/engines/xeen/dialogs_spells.cpp
@@ -65,8 +65,8 @@ Character *SpellsDialog::execute(ButtonContainer *priorDialog, Character *c, int
 				break;
 			}
 
-			Common::String title = Common::String::format(BUY_SPELLS, c->_name.c_str());
-			Common::String msg = Common::String::format(GUILD_OPTIONS,
+			Common::String title = Common::String::format(Res.BUY_SPELLS, c->_name.c_str());
+			Common::String msg = Common::String::format(Res.GUILD_OPTIONS,
 				title.c_str(), XeenEngine::printMil(party._gold).c_str());
 			screen._windows[10].writeString(msg);
 
@@ -75,8 +75,8 @@ Character *SpellsDialog::execute(ButtonContainer *priorDialog, Character *c, int
 
 		_spells.clear();
 		const char *errorMsg = setSpellText(c, castingCopy);
-		screen._windows[25].writeString(Common::String::format(SPELLS_FOR,
-			errorMsg == nullptr ? SPELL_LINES_0_TO_9 : "",
+		screen._windows[25].writeString(Common::String::format(Res.SPELLS_FOR,
+			errorMsg == nullptr ? Res.SPELL_LINES_0_TO_9 : "",
 			c->_name.c_str()));
 
 		// Setup and write out spell list
@@ -98,12 +98,12 @@ Character *SpellsDialog::execute(ButtonContainer *priorDialog, Character *c, int
 		if (_spells.size() == 0)
 			names[0] = errorMsg;
 
-		screen._windows[37].writeString(Common::String::format(SPELLS_DIALOG_SPELLS,
+		screen._windows[37].writeString(Common::String::format(Res.SPELLS_DIALOG_SPELLS,
 			colors[0], names[0], colors[1], names[1], colors[2], names[2],
 			colors[3], names[3], colors[4], names[4], colors[5], names[5],
 			colors[6], names[6], colors[7], names[7], colors[8], names[8],
 			colors[9], names[9],
-			isCasting ? SPELL_PTS : GOLD,
+			isCasting ? Res.SPELL_PTS : Res.GOLD,
 			isCasting ? c->_currentSp : party._gold
 		));
 
@@ -135,8 +135,8 @@ Character *SpellsDialog::execute(ButtonContainer *priorDialog, Character *c, int
 					intf.highlightChar(_buttonValue);
 
 					if (_vm->_mode == MODE_17) {
-						screen._windows[10].writeString(Common::String::format(GUILD_OPTIONS,
-							XeenEngine::printMil(party._gold).c_str(), GUILD_TEXT, c->_name.c_str()));
+						screen._windows[10].writeString(Common::String::format(Res.GUILD_OPTIONS,
+							XeenEngine::printMil(party._gold).c_str(), Res.GUILD_TEXT, c->_name.c_str()));
 					} else {
 						int category;
 						switch (c->_class) {
@@ -154,11 +154,11 @@ Character *SpellsDialog::execute(ButtonContainer *priorDialog, Character *c, int
 						}
 
 						int spellIndex = (c->_currentSpell == -1) ? 39 : c->_currentSpell;
-						int spellId = SPELLS_ALLOWED[category][spellIndex];
-						screen._windows[10].writeString(Common::String::format(CAST_SPELL_DETAILS,
+						int spellId = Res.SPELLS_ALLOWED[category][spellIndex];
+						screen._windows[10].writeString(Common::String::format(Res.CAST_SPELL_DETAILS,
 							c->_name.c_str(), spells._spellNames[spellId].c_str(),
 							spells.calcSpellPoints(spellId, c->getCurrentLevel()),
-							SPELL_GEM_COST[spellId], c->_currentSp));
+							Res.SPELL_GEM_COST[spellId], c->_currentSp));
 					}
 
 					if (priorDialog != nullptr)
@@ -224,7 +224,7 @@ Character *SpellsDialog::execute(ButtonContainer *priorDialog, Character *c, int
 				}
 
 				int spellIndex = _spells[newSelection]._spellIndex;
-				int spellId = SPELLS_ALLOWED[category][spellIndex];
+				int spellId = Res.SPELLS_ALLOWED[category][spellIndex];
 				int spellCost = spells.calcSpellCost(spellId, expenseFactor);
 
 				if (isCasting) {
@@ -232,8 +232,8 @@ Character *SpellsDialog::execute(ButtonContainer *priorDialog, Character *c, int
 				} else {
 					Common::String spellName = _spells[newSelection]._name;
 					Common::String msg = (castingCopy & 0x80) ?
-						Common::String::format(SPELLS_PRESS_A_KEY, spellName.c_str()) :
-						Common::String::format(SPELLS_PURCHASE, spellName.c_str(), spellCost);
+						Common::String::format(Res.SPELLS_PRESS_A_KEY, spellName.c_str()) :
+						Common::String::format(Res.SPELLS_PURCHASE, spellName.c_str(), spellCost);
 
 					if (Confirm::show(_vm, msg, castingCopy + 1)) {
 						if (party.subtract(0, spellCost, 0, WT_FREEZE_WAIT)) {
@@ -345,32 +345,32 @@ const char *SpellsDialog::setSpellText(Character *c, int isCasting) {
 			if (party._mazeId == 49 || party._mazeId == 37) {
 				for (uint spellId = 0; spellId < 76; ++spellId) {
 					int idx = 0;
-					while (idx < MAX_SPELLS_PER_CLASS && SPELLS_ALLOWED[category][idx] == spellId)
+					while (idx < MAX_SPELLS_PER_CLASS && Res.SPELLS_ALLOWED[category][idx] == spellId)
 						++idx;
 
 					// Handling if the spell is appropriate for the character's class
 					if (idx < MAX_SPELLS_PER_CLASS) {
 						if (!c->_spells[idx] || (isCasting & 0x80)) {
-							int cost = spells.calcSpellCost(SPELLS_ALLOWED[category][idx], expenseFactor);
+							int cost = spells.calcSpellCost(Res.SPELLS_ALLOWED[category][idx], expenseFactor);
 							_spells.push_back(SpellEntry(Common::String::format("\x3l%s\x3r\x9""000%u",
-								spells._spellNames[SPELLS_ALLOWED[category][idx]].c_str(), cost), 
+								spells._spellNames[Res.SPELLS_ALLOWED[category][idx]].c_str(), cost),
 								idx, spellId));
 						}
 					}
 				}
 			} else if (isDarkCc) {
 				int groupIndex = (party._mazeId - 29) / 2;
-				for (int spellId = DARK_SPELL_RANGES[groupIndex][0];
-						spellId < DARK_SPELL_RANGES[groupIndex][1]; ++spellId) {
+				for (int spellId = Res.DARK_SPELL_RANGES[groupIndex][0];
+						spellId < Res.DARK_SPELL_RANGES[groupIndex][1]; ++spellId) {
 					int idx = 0;
-					while (idx < 40 && SPELLS_ALLOWED[category][idx] ==
-						DARK_SPELL_OFFSETS[category][spellId]);
+					while (idx < 40 && Res.SPELLS_ALLOWED[category][idx] ==
+						Res.DARK_SPELL_OFFSETS[category][spellId]);
 
 					if (idx < 40) {
 						if (!c->_spells[idx] || (isCasting & 0x80)) {
-							int cost = spells.calcSpellCost(SPELLS_ALLOWED[category][idx], expenseFactor);
+							int cost = spells.calcSpellCost(Res.SPELLS_ALLOWED[category][idx], expenseFactor);
 							_spells.push_back(SpellEntry(Common::String::format("\x3l%s\x3r\x9""000%u",
-								spells._spellNames[SPELLS_ALLOWED[category][idx]].c_str(), cost), 
+								spells._spellNames[Res.SPELLS_ALLOWED[category][idx]].c_str(), cost),
 								idx, spellId));
 						}
 					}
@@ -378,14 +378,14 @@ const char *SpellsDialog::setSpellText(Character *c, int isCasting) {
 			} else {
 				for (int spellId = 0; spellId < 20; ++spellId) {
 					int idx = 0;
-					while (CLOUDS_SPELL_OFFSETS[party._mazeId - 29][spellId] !=
-						(int)SPELLS_ALLOWED[category][idx] && idx < 40) ;
+					while (Res.CLOUDS_SPELL_OFFSETS[party._mazeId - 29][spellId] !=
+						(int)Res.SPELLS_ALLOWED[category][idx] && idx < 40) ;
 
 					if (idx < 40) {
 						if (!c->_spells[idx] || (isCasting & 0x80)) {
-							int cost = spells.calcSpellCost(SPELLS_ALLOWED[category][idx], expenseFactor);
+							int cost = spells.calcSpellCost(Res.SPELLS_ALLOWED[category][idx], expenseFactor);
 							_spells.push_back(SpellEntry(Common::String::format("\x3l%s\x3r\x9""000%u",
-								spells._spellNames[SPELLS_ALLOWED[category][idx]].c_str(), cost), 
+								spells._spellNames[Res.SPELLS_ALLOWED[category][idx]].c_str(), cost),
 								idx, spellId));
 						}
 					}
@@ -394,7 +394,7 @@ const char *SpellsDialog::setSpellText(Character *c, int isCasting) {
 		}
 
 		if (c->getMaxSP() == 0)
-			return NOT_A_SPELL_CASTER;
+			return Res.NOT_A_SPELL_CASTER;
 
 	} else if ((isCasting & 0x7f) == 1) {
 		switch (c->_class) {
@@ -414,12 +414,12 @@ const char *SpellsDialog::setSpellText(Character *c, int isCasting) {
 		}
 
 		if (c->getMaxSP() == 0) {
-			return NOT_A_SPELL_CASTER;
+			return Res.NOT_A_SPELL_CASTER;
 		} else {
 			for (int spellIndex = 0; spellIndex < (MAX_SPELLS_PER_CLASS - 1); ++spellIndex) {
 				if (c->_spells[spellIndex]) {
-					int spellId = SPELLS_ALLOWED[category][spellIndex];
-					int gemCost = SPELL_GEM_COST[spellId];
+					int spellId = Res.SPELLS_ALLOWED[category][spellIndex];
+					int gemCost = Res.SPELL_GEM_COST[spellId];
 					int spCost = spells.calcSpellPoints(spellId, currLevel);
 
 					Common::String msg = Common::String::format("\x3l%s\x3r\x9""000%u/%u",
@@ -494,11 +494,11 @@ int CastSpell::execute(Character *&c) {
 		if (redrawFlag) {
 			int category = c->getClassCategory();
 			int spellIndex = c->_currentSpell != -1 ? c->_currentSpell : 39;
-			spellId = SPELLS_ALLOWED[category][spellIndex];
-			int gemCost = SPELL_GEM_COST[spellId];
+			spellId = Res.SPELLS_ALLOWED[category][spellIndex];
+			int gemCost = Res.SPELL_GEM_COST[spellId];
 			int spCost = spells.calcSpellPoints(spellId, c->getCurrentLevel());
 
-			w.writeString(Common::String::format(CAST_SPELL_DETAILS,
+			w.writeString(Common::String::format(Res.CAST_SPELL_DETAILS,
 				c->_name.c_str(), spells._spellNames[spellId].c_str(), 
 				spCost, gemCost, c->_currentSp));
 			drawButtons(&screen);
@@ -606,7 +606,7 @@ int SpellOnWho::execute(int spellId) {
 	int result = 999;
 
 	w.open();
-	w.writeString(ON_WHO);
+	w.writeString(Res.ON_WHO);
 	w.update();
 	addPartyButtons(_vm);
 
@@ -674,7 +674,7 @@ int SelectElement::execute(int spellId) {
 	loadButtons();
 
 	w.open();
-	w.writeString(WHICH_ELEMENT1);
+	w.writeString(Res.WHICH_ELEMENT1);
 	drawButtons(&screen);
 	w.update();
 
@@ -683,7 +683,7 @@ int SelectElement::execute(int spellId) {
 			events.updateGameCounter();
 			intf.draw3d(true);
 			w.frame();
-			w.writeString(WHICH_ELEMENT2);
+			w.writeString(Res.WHICH_ELEMENT2);
 			drawButtons(&screen);
 			w.update();
 
@@ -749,7 +749,7 @@ void NotWhileEngaged::execute(int spellId) {
 	_vm->_mode = MODE_3;
 
 	w.open();
-	w.writeString(Common::String::format(CANT_CAST_WHILE_ENGAGED,
+	w.writeString(Common::String::format(Res.CANT_CAST_WHILE_ENGAGED,
 		spells._spellNames[spellId].c_str()));
 	w.update();
 
@@ -808,7 +808,7 @@ bool LloydsBeacon::execute() {
 
 	// Display the dialog
 	w.open();
-	w.writeString(Common::String::format(LLOYDS_BEACON,
+	w.writeString(Common::String::format(Res.LLOYDS_BEACON,
 		mapName.c_str(), c._lloydPosition.x, c._lloydPosition.y));
 	drawButtons(&screen);
 	w.update();
@@ -886,8 +886,8 @@ int Teleport::execute() {
 	Common::String num;
 
 	w.open();
-	w.writeString(Common::String::format(HOW_MANY_SQUARES,
-		DIRECTION_TEXT[party._mazeDirection]));
+	w.writeString(Common::String::format(Res.HOW_MANY_SQUARES,
+		Res.DIRECTION_TEXT[party._mazeDirection]));
 	w.update();
 	int lineSize = Input::show(_vm, &w, num, 1, 200, true);
 	w.close();
@@ -948,13 +948,13 @@ int TownPortal::execute() {
 	for (int idx = 0; idx < 5; ++idx) {
 		File f(Common::String::format("%s%04d.txt",
 			map._sideTownPortal ? "dark" : "xeen",
-			TOWN_MAP_NUMBERS[map._sideTownPortal][idx]));
+			Res.TOWN_MAP_NUMBERS[map._sideTownPortal][idx]));
 		townNames[idx] = f.readString();
 		f.close();
 	}
 
 	w.open();
-	w.writeString(Common::String::format(TOWN_PORTAL,
+	w.writeString(Common::String::format(Res.TOWN_PORTAL,
 		townNames[0].c_str(), townNames[1].c_str(), townNames[2].c_str(),
 		townNames[3].c_str(), townNames[4].c_str()
 	));
@@ -999,17 +999,17 @@ void IdentifyMonster::execute() {
 		MazeMonster &monster = map._mobData._monsters[combat._attackMonsters[monIndex]];
 		MonsterStruct &monsterData = *monster._monsterData;
 
-		monsterDesc[monIndex] = Common::String::format(MONSTER_DETAILS,
+		monsterDesc[monIndex] = Common::String::format(Res.MONSTER_DETAILS,
 			monsterData._name.c_str(),
 			_vm->printK2(monster._hp).c_str(),
 			monsterData._accuracy, monsterData._numberOfAttacks,
-			MONSTER_SPECIAL_ATTACKS[monsterData._specialAttack]
+			Res.MONSTER_SPECIAL_ATTACKS[monsterData._specialAttack]
 		);
 	}
 
 	sound.playFX(20);
 	w.open();
-	w.writeString(Common::String::format(IDENTIFY_MONSTERS,
+	w.writeString(Common::String::format(Res.IDENTIFY_MONSTERS,
 		monsterDesc[0].c_str(), monsterDesc[1].c_str(), monsterDesc[2].c_str()));
 	w.update();
 
diff --git a/engines/xeen/dialogs_whowill.cpp b/engines/xeen/dialogs_whowill.cpp
index d33b302..4192ea8 100644
--- a/engines/xeen/dialogs_whowill.cpp
+++ b/engines/xeen/dialogs_whowill.cpp
@@ -51,9 +51,9 @@ int WhoWill::execute(int message, int action, bool type) {
 	screen._windows[38].close();
 	screen._windows[12].close();
 
-	Common::String actionStr = type ? map._events._text[action] : WHO_WILL_ACTIONS[action];
-	Common::String msg = Common::String::format(WHO_WILL, actionStr.c_str(),
-		WHO_ACTIONS[message], party._activeParty.size());
+	Common::String actionStr = type ? map._events._text[action] : Res.WHO_WILL_ACTIONS[action];
+	Common::String msg = Common::String::format(Res.WHO_WILL, actionStr.c_str(),
+		Res.WHO_ACTIONS[message], party._activeParty.size());
 
 	screen._windows[36].open();
 	screen._windows[36].writeString(msg);
diff --git a/engines/xeen/font.cpp b/engines/xeen/font.cpp
index 87e16b5..459a334 100644
--- a/engines/xeen/font.cpp
+++ b/engines/xeen/font.cpp
@@ -38,7 +38,7 @@ FontSurface::FontSurface(int wv, int hv) : XSurface(wv, hv), _fontData(nullptr),
 }
 
 void FontSurface::writeSymbol(int symbolId) {
-	const byte *srcP = &SYMBOLS[symbolId][0];
+	const byte *srcP = &Res.SYMBOLS[symbolId][0];
 
 	for (int yp = 0; yp < FONT_HEIGHT; ++yp) {
 		byte *destP = (byte *)getBasePtr(_writePos.x, _writePos.y + yp);
@@ -306,7 +306,7 @@ int FontSurface::fontAtoi(int len) {
 }
 
 void FontSurface::setTextColor(int idx) {
-	const byte *colP = &TEXT_COLORS[idx][0];
+	const byte *colP = &Res.TEXT_COLORS[idx][0];
 	Common::copy(colP, colP + 4, &_textColors[0]);
 }
 
diff --git a/engines/xeen/interface.cpp b/engines/xeen/interface.cpp
index 8bf9098..2f51e96 100644
--- a/engines/xeen/interface.cpp
+++ b/engines/xeen/interface.cpp
@@ -59,13 +59,13 @@ void PartyDrawer::drawParty(bool updateFlag) {
 	for (uint idx = 0; idx < partyCount; ++idx) {
 		Character &ps = inCombat ? *combat._combatParty[idx] : party._activeParty[idx];
 		Condition charCondition = ps.worstCondition();
-		int charFrame = FACE_CONDITION_FRAMES[charCondition];
+		int charFrame = Res.FACE_CONDITION_FRAMES[charCondition];
 		
 		SpriteResource *sprites = (charFrame > 4) ? &_dseFace : ps._faceSprites;
 		if (charFrame > 4)
 			charFrame -= 5;
 
-		sprites->draw(screen, charFrame, Common::Point(CHAR_FACES_X[idx], 150));
+		sprites->draw(screen, charFrame, Common::Point(Res.CHAR_FACES_X[idx], 150));
 	}
 
 	for (uint idx = 0; idx < partyCount; ++idx) {
@@ -85,11 +85,11 @@ void PartyDrawer::drawParty(bool updateFlag) {
 		else
 			frame = 1;
 
-		_hpSprites.draw(screen, frame, Common::Point(HP_BARS_X[idx], 182));
+		_hpSprites.draw(screen, frame, Common::Point(Res.HP_BARS_X[idx], 182));
 	}
 
 	if (_hiliteChar != -1)
-		res._globalSprites.draw(screen, 8, Common::Point(CHAR_FACES_X[_hiliteChar] - 1, 149));
+		res._globalSprites.draw(screen, 8, Common::Point(Res.CHAR_FACES_X[_hiliteChar] - 1, 149));
 
 	if (updateFlag)
 		screen._windows[33].update();
@@ -103,11 +103,11 @@ void PartyDrawer::highlightChar(int charId) {
 		// Handle deselecting any previusly selected char
 		if (_hiliteChar != -1) {
 			res._globalSprites.draw(screen, 9 + _hiliteChar,
-				Common::Point(CHAR_FACES_X[_hiliteChar] - 1, 149));
+				Common::Point(Res.CHAR_FACES_X[_hiliteChar] - 1, 149));
 		}
 
 		// Highlight new character
-		res._globalSprites.draw(screen, 8, Common::Point(CHAR_FACES_X[charId] - 1, 149));
+		res._globalSprites.draw(screen, 8, Common::Point(Res.CHAR_FACES_X[charId] - 1, 149));
 		_hiliteChar = charId;
 		screen._windows[33].update();
 	}
@@ -119,7 +119,7 @@ void PartyDrawer::unhighlightChar() {
 
 	if (_hiliteChar != -1) {
 		res._globalSprites.draw(screen, _hiliteChar + 9,
-			Common::Point(CHAR_FACES_X[_hiliteChar] - 1, 149));
+			Common::Point(Res.CHAR_FACES_X[_hiliteChar] - 1, 149));
 		_hiliteChar = -1;
 		screen._windows[33].update();
 	}
@@ -286,7 +286,7 @@ void Interface::perform() {
 
 	if (_buttonValue == Common::KEYCODE_SPACE) {
 		int lookupId = map.mazeLookup(party._mazePosition, 
-			WALL_SHIFTS[party._mazeDirection][2]);
+			Res.WALL_SHIFTS[party._mazeDirection][2]);
 
 		bool eventsFlag = true;
 		switch (lookupId) {
@@ -1033,7 +1033,7 @@ void Interface::rest() {
 
 	if ((map._currentCantRest || (map.mazeData()._mazeFlags & RESTRICTION_REST))
 			&& _vm->_mode != MODE_12) {
-		ErrorScroll::show(_vm, TOO_DANGEROUS_TO_REST, WT_NONFREEZED_WAIT);
+		ErrorScroll::show(_vm, Res.TOO_DANGEROUS_TO_REST, WT_NONFREEZED_WAIT);
 	} else {
 		// Check whether any character is in danger of dying
 		bool dangerFlag = false;
@@ -1045,7 +1045,7 @@ void Interface::rest() {
 		}
 
 		if (dangerFlag) {
-			if (!Confirm::show(_vm, SOME_CHARS_MAY_DIE))
+			if (!Confirm::show(_vm, Res.SOME_CHARS_MAY_DIE))
 				return;
 		}
 
@@ -1142,8 +1142,8 @@ void Interface::rest() {
 		doStepCode();
 		draw3d(true);
 
-		ErrorScroll::show(_vm, Common::String::format(REST_COMPLETE,
-			starving ? PARTY_IS_STARVING : HIT_SPELL_POINTS_RESTORED,
+		ErrorScroll::show(_vm, Common::String::format(Res.REST_COMPLETE,
+			starving ? Res.PARTY_IS_STARVING : Res.HIT_SPELL_POINTS_RESTORED,
 			foodConsumed));
 		party.checkPartyDead();
 	}
@@ -1179,18 +1179,18 @@ void Interface::bash(const Common::Point &pt, Direction direction) {
 
 	party._activeParty[charNum1 - 1].subtractHitPoints(2);
 	_charPowSprites.draw(screen._windows[0], 0, 
-		Common::Point(CHAR_FACES_X[charNum1 - 1], 150));
+		Common::Point(Res.CHAR_FACES_X[charNum1 - 1], 150));
 	screen._windows[0].update();
 
 	if (charNum2) {
 		party._activeParty[charNum2 - 1].subtractHitPoints(2);
 		_charPowSprites.draw(screen._windows[0], 0,
-			Common::Point(CHAR_FACES_X[charNum2 - 1], 150));
+			Common::Point(Res.CHAR_FACES_X[charNum2 - 1], 150));
 		screen._windows[0].update();
 	}
 
-	int cell = map.mazeLookup(Common::Point(pt.x + SCREEN_POSITIONING_X[direction][7],
-		pt.y + SCREEN_POSITIONING_Y[direction][7]), 0, 0xffff);
+	int cell = map.mazeLookup(Common::Point(pt.x + Res.SCREEN_POSITIONING_X[direction][7],
+		pt.y + Res.SCREEN_POSITIONING_Y[direction][7]), 0, 0xffff);
 	if (cell != INVALID_CELL) {
 		int v = map.getCell(2);
 
@@ -1312,7 +1312,7 @@ void Interface::handleFalling() {
 
 	for (uint idx = 0; idx < party._activeParty.size(); ++idx) {
 		party._activeParty[idx]._faceSprites->draw(screen._windows[0], 4,
-			Common::Point(CHAR_FACES_X[idx], 150));
+			Common::Point(Res.CHAR_FACES_X[idx], 150));
 	}
 
 	screen._windows[33].update();
@@ -1841,7 +1841,7 @@ void Interface::assembleBorder() {
 
 	// Draw direction character if direction sense is active
 	if (_vm->_party->checkSkill(DIRECTION_SENSE) && !_vm->_noDirectionSense) {
-		const char *dirText = DIRECTION_TEXT_UPPER[_vm->_party->_mazeDirection];
+		const char *dirText = Res.DIRECTION_TEXT_UPPER[_vm->_party->_mazeDirection];
 		Common::String msg = Common::String::format(
 			"\002""08\003""c\013""139\011""116%c\014""d\001", *dirText);
 		screen._windows[0].writeString(msg);
@@ -2268,7 +2268,7 @@ void Interface::spellFX(Character *c) {
 	for (int frameNum = 0; frameNum < 4; ++frameNum) {
 		events.updateGameCounter();
 		_spellFxSprites.draw(screen, frameNum, Common::Point(
-			CHAR_FACES_X[charIndex], 150));
+			Res.CHAR_FACES_X[charIndex], 150));
 
 		if (!screen._windows[11]._enabled)
 			draw3d(false);
diff --git a/engines/xeen/interface_map.cpp b/engines/xeen/interface_map.cpp
index af39f38..0244e3e 100644
--- a/engines/xeen/interface_map.cpp
+++ b/engines/xeen/interface_map.cpp
@@ -402,7 +402,7 @@ void InterfaceMap::drawMap() {
 	for (uint idx = 0; idx < map._mobData._objects.size(); ++idx) {
 		MazeObject &mazeObject = map._mobData._objects[idx];
 		AnimationEntry &animEntry = map._animationInfo[mazeObject._spriteId];
-		int directionIndex = DIRECTION_ANIM_POSITIONS[mazeObject._direction][partyDirection];
+		int directionIndex = Res.DIRECTION_ANIM_POSITIONS[mazeObject._direction][partyDirection];
 
 		if (_isAnimReset) {
 			mazeObject._frame = animEntry._frame1._frames[directionIndex];
@@ -413,8 +413,7 @@ void InterfaceMap::drawMap() {
 				objObject._spriteId == 58 || objObject._spriteId == 73)) {
 				if (mazeObject._frame > 4 || mazeObject._spriteId == 58)
 					mazeObject._frame = 1;
-			}
-			else if (mazeObject._frame >= animEntry._frame2._frames[directionIndex]) {
+			} else if (mazeObject._frame >= animEntry._frame2._frames[directionIndex]) {
 				mazeObject._frame = animEntry._frame1._frames[directionIndex];
 			}
 		}
@@ -425,7 +424,7 @@ void InterfaceMap::drawMap() {
 	if (map._isOutdoors) {
 		// Outdoors drawing
 		for (int idx = 0; idx < 44; ++idx)
-			_outdoorList[OUTDOOR_DRAWSTRCT_INDEXES[idx]]._frame = -1;
+			_outdoorList[Res.OUTDOOR_DRAWSTRCT_INDEXES[idx]]._frame = -1;
 
 		if (combat._monstersAttacking) {
 			for (int idx = 0; idx < 8; ++idx) {
@@ -2318,40 +2317,40 @@ void InterfaceMap::setIndoorsMonsters() {
 		}
 
 		// The following long sequence sets up monsters in the various positions
-		if (monster._position.x == (mazePos.x + SCREEN_POSITIONING_X[dir][2]) &&
-				monster._position.y == (mazePos.y + SCREEN_POSITIONING_Y[dir][2])) {
+		if (monster._position.x == (mazePos.x + Res.SCREEN_POSITIONING_X[dir][2]) &&
+				monster._position.y == (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][2])) {
 			monster._isAttacking = true;
 			if (combat._attackMonsters[0] == -1) {
 				combat._attackMonsters[0] = monsterIdx;
-				setMonsterSprite(_indoorList[156], monster, sprites, frame, INDOOR_MONSTERS_Y[0]);
+				setMonsterSprite(_indoorList[156], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[0]);
 			} else if (combat._attackMonsters[1] == -1) {
 				combat._attackMonsters[1] = monsterIdx;
-				setMonsterSprite(_indoorList[150], monster, sprites, frame, INDOOR_MONSTERS_Y[0]);
+				setMonsterSprite(_indoorList[150], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[0]);
 			} else if (combat._attackMonsters[2] == -1) {
 				combat._attackMonsters[2] = monsterIdx;
-				setMonsterSprite(_indoorList[153], monster, sprites, frame, INDOOR_MONSTERS_Y[0]);
+				setMonsterSprite(_indoorList[153], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[0]);
 			}
 		}
 
-		if (monster._position.x == (mazePos.x + SCREEN_POSITIONING_X[dir][7]) &&
-				monster._position.y == (mazePos.y + SCREEN_POSITIONING_Y[dir][7])) {
+		if (monster._position.x == (mazePos.x + Res.SCREEN_POSITIONING_X[dir][7]) &&
+				monster._position.y == (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][7])) {
 			monster._isAttacking = true;
 			if (!_wo[27]) {
 				if (combat._attackMonsters[3] == -1) {
 					combat._attackMonsters[3] = monsterIdx;
-					setMonsterSprite(_indoorList[132], monster, sprites, frame, INDOOR_MONSTERS_Y[1]);
+					setMonsterSprite(_indoorList[132], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[1]);
 				} else if (combat._attackMonsters[4] == -1) {
 					combat._attackMonsters[4] = monsterIdx;
-					setMonsterSprite(_indoorList[130], monster, sprites, frame, INDOOR_MONSTERS_Y[1]);
+					setMonsterSprite(_indoorList[130], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[1]);
 				} else if (combat._attackMonsters[2] == -1) {
 					combat._attackMonsters[5] = monsterIdx;
-					setMonsterSprite(_indoorList[131], monster, sprites, frame, INDOOR_MONSTERS_Y[1]);
+					setMonsterSprite(_indoorList[131], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[1]);
 				}
 			}
 		}
 
-		if (monster._position.x == (mazePos.x + SCREEN_POSITIONING_X[dir][5]) &&
-				monster._position.y == (mazePos.y + SCREEN_POSITIONING_Y[dir][5])) {
+		if (monster._position.x == (mazePos.x + Res.SCREEN_POSITIONING_X[dir][5]) &&
+				monster._position.y == (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][5])) {
 			if (_wo[27] && _wo[25]) {
 			} else if (_wo[27] && _wo[28]) {
 			} else if (_wo[23] & _wo[25]) {
@@ -2361,13 +2360,13 @@ void InterfaceMap::setIndoorsMonsters() {
 
 				if (combat._attackMonsters[12] == -1) {
 					combat._attackMonsters[12] = monsterIdx;
-					setMonsterSprite(_indoorList[128], monster, sprites, frame, INDOOR_MONSTERS_Y[1]);
+					setMonsterSprite(_indoorList[128], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[1]);
 				}
 			}
 		}
 
-		if (monster._position.x == (mazePos.x + SCREEN_POSITIONING_X[dir][9]) &&
-				monster._position.y == (mazePos.y + SCREEN_POSITIONING_Y[dir][9])) {
+		if (monster._position.x == (mazePos.x + Res.SCREEN_POSITIONING_X[dir][9]) &&
+				monster._position.y == (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][9])) {
 			if (_wo[27] && _wo[26]) {
 			} else if (_wo[27] && _wo[29]) {
 			} else if (_wo[24] & _wo[26]) {
@@ -2377,31 +2376,31 @@ void InterfaceMap::setIndoorsMonsters() {
 
 				if (combat._attackMonsters[13] == -1) {
 					combat._attackMonsters[13] = monsterIdx;
-					setMonsterSprite(_indoorList[129], monster, sprites, frame, INDOOR_MONSTERS_Y[1]);
+					setMonsterSprite(_indoorList[129], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[1]);
 				}
 			}
 		}
 
-		if (monster._position.x == (mazePos.x + SCREEN_POSITIONING_X[dir][14]) &&
-				monster._position.y == (mazePos.y + SCREEN_POSITIONING_Y[dir][14])) {
+		if (monster._position.x == (mazePos.x + Res.SCREEN_POSITIONING_X[dir][14]) &&
+				monster._position.y == (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][14])) {
 			monster._isAttacking = true;
 
 			if (!_wo[22] && !_wo[27]) {
 				if (combat._attackMonsters[6] == -1) {
 					combat._attackMonsters[6] = monsterIdx;
-					setMonsterSprite(_indoorList[106], monster, sprites, frame, INDOOR_MONSTERS_Y[2]);
+					setMonsterSprite(_indoorList[106], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[2]);
 				} else  if (combat._attackMonsters[7] == -1) {
 					combat._attackMonsters[7] = monsterIdx;
-					setMonsterSprite(_indoorList[104], monster, sprites, frame, INDOOR_MONSTERS_Y[2]);
+					setMonsterSprite(_indoorList[104], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[2]);
 				} else if (combat._attackMonsters[8] == -1) {
 					combat._attackMonsters[8] = monsterIdx;
-					setMonsterSprite(_indoorList[105], monster, sprites, frame, INDOOR_MONSTERS_Y[2]);
+					setMonsterSprite(_indoorList[105], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[2]);
 				}
 			}
 		}
 
-		if (monster._position.x == (mazePos.x + SCREEN_POSITIONING_X[dir][12]) &&
-				monster._position.y == (mazePos.y + SCREEN_POSITIONING_Y[dir][12])) {
+		if (monster._position.x == (mazePos.x + Res.SCREEN_POSITIONING_X[dir][12]) &&
+				monster._position.y == (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][12])) {
 			if (_wo[27]) {
 			} else if (_wo[22] && _wo[23]) {
 			} else if (_wo[22] & _wo[20]) {
@@ -2411,16 +2410,16 @@ void InterfaceMap::setIndoorsMonsters() {
 
 				if (combat._attackMonsters[14] == -1) {
 					combat._attackMonsters[14] = monsterIdx;
-					setMonsterSprite(_indoorList[100], monster, sprites, frame, INDOOR_MONSTERS_Y[2]);
+					setMonsterSprite(_indoorList[100], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[2]);
 				} else if (combat._attackMonsters[20] == -1) {
 					combat._attackMonsters[20] = monsterIdx;
-					setMonsterSprite(_indoorList[101], monster, sprites, frame, INDOOR_MONSTERS_Y[2]);
+					setMonsterSprite(_indoorList[101], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[2]);
 				}
 			}
 		}
 
-		if (monster._position.x == (mazePos.x + SCREEN_POSITIONING_X[dir][16]) &&
-				monster._position.y == (mazePos.y + SCREEN_POSITIONING_Y[dir][16])) {
+		if (monster._position.x == (mazePos.x + Res.SCREEN_POSITIONING_X[dir][16]) &&
+				monster._position.y == (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][16])) {
 			if (_wo[27]) {
 			} else if (_wo[22] && _wo[24]) {
 			} else if (_wo[22] & _wo[21]) {
@@ -2431,34 +2430,34 @@ void InterfaceMap::setIndoorsMonsters() {
 
 				if (combat._attackMonsters[15] == -1) {
 					combat._attackMonsters[15] = monsterIdx;
-					setMonsterSprite(_indoorList[102], monster, sprites, frame, INDOOR_MONSTERS_Y[2]);
+					setMonsterSprite(_indoorList[102], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[2]);
 				} else if (combat._attackMonsters[21] == -1) {
 					combat._attackMonsters[21] = monsterIdx;
-					setMonsterSprite(_indoorList[103], monster, sprites, frame, INDOOR_MONSTERS_Y[2]);
+					setMonsterSprite(_indoorList[103], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[2]);
 				}
 			}
 		}
 
-		if (monster._position.x == (mazePos.x + SCREEN_POSITIONING_X[dir][27]) &&
-				monster._position.y == (mazePos.y + SCREEN_POSITIONING_Y[dir][27])) {
+		if (monster._position.x == (mazePos.x + Res.SCREEN_POSITIONING_X[dir][27]) &&
+				monster._position.y == (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][27])) {
 			if (!_wo[27] && !_wo[22] && !_wo[15]) {
 				monster._isAttacking = true;
 
 				if (combat._attackMonsters[9] == -1) {
 					combat._attackMonsters[9] = monsterIdx;
-					setMonsterSprite(_indoorList[70], monster, sprites, frame, INDOOR_MONSTERS_Y[3]);
+					setMonsterSprite(_indoorList[70], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[3]);
 				} else if (combat._attackMonsters[10] == -1) {
 					combat._attackMonsters[10] = monsterIdx;
-					setMonsterSprite(_indoorList[68], monster, sprites, frame, INDOOR_MONSTERS_Y[3]);
+					setMonsterSprite(_indoorList[68], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[3]);
 				} else if (combat._attackMonsters[11] == -1) {
 					combat._attackMonsters[11] = monsterIdx;
-					setMonsterSprite(_indoorList[69], monster, sprites, frame, INDOOR_MONSTERS_Y[3]);
+					setMonsterSprite(_indoorList[69], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[3]);
 				}
 			}
 		}
 
-		if (monster._position.x == (mazePos.x + SCREEN_POSITIONING_X[dir][25]) &&
-				monster._position.y == (mazePos.y + SCREEN_POSITIONING_Y[dir][25])) {
+		if (monster._position.x == (mazePos.x + Res.SCREEN_POSITIONING_X[dir][25]) &&
+				monster._position.y == (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][25])) {
 			if (_wo[27] || _wo[22]) {
 			} else if (_wo[15] && _wo[17]) {
 			} else if (_wo[15] && _wo[12]) {
@@ -2469,19 +2468,19 @@ void InterfaceMap::setIndoorsMonsters() {
 
 				if (combat._attackMonsters[16] == -1) {
 					combat._attackMonsters[16] = monsterIdx;
-					setMonsterSprite(_indoorList[62], monster, sprites, frame, INDOOR_MONSTERS_Y[3]);
+					setMonsterSprite(_indoorList[62], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[3]);
 				} else if (combat._attackMonsters[22] == -1) {
 					combat._attackMonsters[22] = monsterIdx;
-					setMonsterSprite(_indoorList[60], monster, sprites, frame, INDOOR_MONSTERS_Y[3]);
+					setMonsterSprite(_indoorList[60], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[3]);
 				} else if (combat._attackMonsters[24] == -1) {
 					combat._attackMonsters[24] = monsterIdx;
-					setMonsterSprite(_indoorList[61], monster, sprites, frame, INDOOR_MONSTERS_Y[3]);
+					setMonsterSprite(_indoorList[61], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[3]);
 				}
 			}
 		}
 
-		if (monster._position.x == (mazePos.x + SCREEN_POSITIONING_X[dir][23]) &&
-				monster._position.y == (mazePos.y + SCREEN_POSITIONING_Y[dir][23])) {
+		if (monster._position.x == (mazePos.x + Res.SCREEN_POSITIONING_X[dir][23]) &&
+				monster._position.y == (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][23])) {
 			if (_wo[27]) {
 			} else if (_wo[22] && _wo[20]) {
 			} else if (_wo[22] && _wo[23]) {
@@ -2493,13 +2492,13 @@ void InterfaceMap::setIndoorsMonsters() {
 
 				if (combat._attackMonsters[18] == -1) {
 					combat._attackMonsters[18] = monsterIdx;
-					setMonsterSprite(_indoorList[66], monster, sprites, frame, INDOOR_MONSTERS_Y[3]);
+					setMonsterSprite(_indoorList[66], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[3]);
 				}
 			}
 		}
 
-		if (monster._position.x == (mazePos.x + SCREEN_POSITIONING_X[dir][29]) &&
-				monster._position.y == (mazePos.y + SCREEN_POSITIONING_Y[dir][29])) {
+		if (monster._position.x == (mazePos.x + Res.SCREEN_POSITIONING_X[dir][29]) &&
+				monster._position.y == (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][29])) {
 			if (_wo[27] || _wo[22]) {
 			} else if (_wo[15] && _wo[19]) {
 			} else if (_wo[15] && _wo[14]) {
@@ -2510,19 +2509,19 @@ void InterfaceMap::setIndoorsMonsters() {
 
 				if (combat._attackMonsters[17] == -1) {
 					combat._attackMonsters[17] = monsterIdx;
-					setMonsterSprite(_indoorList[65], monster, sprites, frame, INDOOR_MONSTERS_Y[3]);
+					setMonsterSprite(_indoorList[65], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[3]);
 				} else if (combat._attackMonsters[23] == -1) {
 					combat._attackMonsters[23] = monsterIdx;
-					setMonsterSprite(_indoorList[63], monster, sprites, frame, INDOOR_MONSTERS_Y[3]);
+					setMonsterSprite(_indoorList[63], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[3]);
 				} else if (combat._attackMonsters[25] == -1) {
 					combat._attackMonsters[25] = monsterIdx;
-					setMonsterSprite(_indoorList[64], monster, sprites, frame, INDOOR_MONSTERS_Y[3]);
+					setMonsterSprite(_indoorList[64], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[3]);
 				}
 			}
 		}
 
-		if (monster._position.x == (mazePos.x + SCREEN_POSITIONING_X[dir][31]) &&
-				monster._position.y == (mazePos.y + SCREEN_POSITIONING_Y[dir][31])) {
+		if (monster._position.x == (mazePos.x + Res.SCREEN_POSITIONING_X[dir][31]) &&
+				monster._position.y == (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][31])) {
 			if (_wo[27]) {
 			} else if (_wo[22] && _wo[21]) {
 			} else if (_wo[22] && _wo[24]) {
@@ -2534,13 +2533,13 @@ void InterfaceMap::setIndoorsMonsters() {
 
 				if (combat._attackMonsters[19] == -1) {
 					combat._attackMonsters[19] = monsterIdx;
-					setMonsterSprite(_indoorList[67], monster, sprites, frame, INDOOR_MONSTERS_Y[3]);
+					setMonsterSprite(_indoorList[67], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[3]);
 				} else if (combat._attackMonsters[23] == -1) {
 					combat._attackMonsters[23] = monsterIdx;
-					setMonsterSprite(_indoorList[63], monster, sprites, frame, INDOOR_MONSTERS_Y[3]);
+					setMonsterSprite(_indoorList[63], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[3]);
 				} else if (combat._attackMonsters[25] == -1) {
 					combat._attackMonsters[25] = monsterIdx;
-					setMonsterSprite(_indoorList[64], monster, sprites, frame, INDOOR_MONSTERS_Y[3]);
+					setMonsterSprite(_indoorList[64], monster, sprites, frame, Res.INDOOR_MONSTERS_Y[3]);
 				}
 			}
 		}
@@ -2619,15 +2618,15 @@ void InterfaceMap::setMonsterSprite(DrawStruct &drawStruct, MazeMonster &monster
 	drawStruct._y = defaultY;
 
 	if (flying) {
-		drawStruct._x = COMBAT_FLOAT_X[_combatFloatCounter];
-		drawStruct._y = COMBAT_FLOAT_Y[_combatFloatCounter];
+		drawStruct._x = Res.COMBAT_FLOAT_X[_combatFloatCounter];
+		drawStruct._y = Res.COMBAT_FLOAT_Y[_combatFloatCounter];
 	} else {
 		drawStruct._x = 0;
 	}
 
 	drawStruct._flags &= ~0xFFF;
 	if (monster._effect2)
-		drawStruct._flags = MONSTER_EFFECT_FLAGS[monster._effect2][monster._effect3];
+		drawStruct._flags = Res.MONSTER_EFFECT_FLAGS[monster._effect2][monster._effect3];
 }
 
 void InterfaceMap::setIndoorsObjects() {
@@ -2649,11 +2648,11 @@ void InterfaceMap::setIndoorsObjects() {
 		}
 
 		// Position 1
-		if ((mazePos.x + SCREEN_POSITIONING_X[dir][2]) == mazeObject._position.x
-			&& (mazePos.y + SCREEN_POSITIONING_Y[dir][2]) == mazeObject._position.y
+		if ((mazePos.x + Res.SCREEN_POSITIONING_X[dir][2]) == mazeObject._position.x
+			&& (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][2]) == mazeObject._position.y
 			&& _indoorList._objects0._frame == -1) {
-			_indoorList._objects0._x = INDOOR_OBJECT_X[listOffset][0];
-			_indoorList._objects0._y = MAP_OBJECT_Y[listOffset][0];
+			_indoorList._objects0._x = Res.INDOOR_OBJECT_X[listOffset][0];
+			_indoorList._objects0._y = Res.MAP_OBJECT_Y[listOffset][0];
 			_indoorList._objects0._frame = mazeObject._frame;
 			_indoorList._objects0._sprites = mazeObject._sprites;
 			_indoorList._objects0._flags &= ~SPRFLAG_HORIZ_FLIPPED;
@@ -2663,11 +2662,11 @@ void InterfaceMap::setIndoorsObjects() {
 		}
 
 		// Position 2
-		if ((mazePos.x + SCREEN_POSITIONING_X[dir][7]) == mazeObject._position.x
-			&& (mazePos.y + SCREEN_POSITIONING_Y[dir][7]) == mazeObject._position.y
+		if ((mazePos.x + Res.SCREEN_POSITIONING_X[dir][7]) == mazeObject._position.x
+			&& (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][7]) == mazeObject._position.y
 			&& !_wo[27] && _indoorList._objects1._frame == -1) {
-			_indoorList._objects1._x = INDOOR_OBJECT_X[listOffset][1];
-			_indoorList._objects1._y = MAP_OBJECT_Y[listOffset][1];
+			_indoorList._objects1._x = Res.INDOOR_OBJECT_X[listOffset][1];
+			_indoorList._objects1._y = Res.MAP_OBJECT_Y[listOffset][1];
 			_indoorList._objects1._frame = mazeObject._frame;
 			_indoorList._objects1._sprites = mazeObject._sprites;
 			_indoorList._objects1._flags &= ~SPRFLAG_HORIZ_FLIPPED;
@@ -2676,15 +2675,15 @@ void InterfaceMap::setIndoorsObjects() {
 		}
 
 		// Position 3
-		if ((mazePos.x + SCREEN_POSITIONING_X[dir][5]) == mazeObject._position.x
-			&& (mazePos.y + SCREEN_POSITIONING_Y[dir][5]) == mazeObject._position.y) {
+		if ((mazePos.x + Res.SCREEN_POSITIONING_X[dir][5]) == mazeObject._position.x
+			&& (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][5]) == mazeObject._position.y) {
 			if (_wo[27] && _wo[25]) {
 			} else if (_wo[27] && _wo[28]) {
 			} else if (_wo[23] && _wo[25]) {
 			} else if (_wo[23] && _wo[28]) {
 			} else if (_indoorList._objects2._frame == -1) {
-				_indoorList._objects2._x = INDOOR_OBJECT_X[listOffset][2];
-				_indoorList._objects2._y = MAP_OBJECT_Y[listOffset][2];
+				_indoorList._objects2._x = Res.INDOOR_OBJECT_X[listOffset][2];
+				_indoorList._objects2._y = Res.MAP_OBJECT_Y[listOffset][2];
 				_indoorList._objects2._frame = mazeObject._frame;
 				_indoorList._objects2._sprites = mazeObject._sprites;
 				_indoorList._objects2._flags &= ~SPRFLAG_HORIZ_FLIPPED;
@@ -2694,15 +2693,15 @@ void InterfaceMap::setIndoorsObjects() {
 		}
 
 		// Position 4
-		if ((mazePos.x + SCREEN_POSITIONING_X[dir][9]) == mazeObject._position.x
-			&& (mazePos.y + SCREEN_POSITIONING_Y[dir][9]) == mazeObject._position.y) {
+		if ((mazePos.x + Res.SCREEN_POSITIONING_X[dir][9]) == mazeObject._position.x
+			&& (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][9]) == mazeObject._position.y) {
 			if (_wo[27] && _wo[26]) {
 			} else if (_wo[27] && _wo[29]) {
 			} else if (_wo[24] && _wo[26]) {
 			} else if (_wo[24] && _wo[29]) {
 			} else if (_indoorList._objects3._frame == -1) {
-				_indoorList._objects3._x = INDOOR_OBJECT_X[listOffset][3];
-				_indoorList._objects3._y = MAP_OBJECT_Y[listOffset][3];
+				_indoorList._objects3._x = Res.INDOOR_OBJECT_X[listOffset][3];
+				_indoorList._objects3._y = Res.MAP_OBJECT_Y[listOffset][3];
 				_indoorList._objects3._frame = mazeObject._frame;
 				_indoorList._objects3._sprites = mazeObject._sprites;
 				_indoorList._objects3._flags &= ~SPRFLAG_HORIZ_FLIPPED;
@@ -2712,11 +2711,11 @@ void InterfaceMap::setIndoorsObjects() {
 		}
 
 		// Position 5
-		if ((mazePos.x + SCREEN_POSITIONING_X[dir][14]) == mazeObject._position.x
-			&& (mazePos.y + SCREEN_POSITIONING_Y[dir][14]) == mazeObject._position.y) {
+		if ((mazePos.x + Res.SCREEN_POSITIONING_X[dir][14]) == mazeObject._position.x
+			&& (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][14]) == mazeObject._position.y) {
 			if (!_wo[22] && !_wo[27] && _indoorList._objects4._frame == -1) {
-				_indoorList._objects4._x = INDOOR_OBJECT_X[listOffset][4];
-				_indoorList._objects4._y = MAP_OBJECT_Y[listOffset][4];
+				_indoorList._objects4._x = Res.INDOOR_OBJECT_X[listOffset][4];
+				_indoorList._objects4._y = Res.MAP_OBJECT_Y[listOffset][4];
 				_indoorList._objects4._frame = mazeObject._frame;
 				_indoorList._objects4._sprites = mazeObject._sprites;
 				_indoorList._objects4._flags &= ~SPRFLAG_HORIZ_FLIPPED;
@@ -2726,16 +2725,16 @@ void InterfaceMap::setIndoorsObjects() {
 		}
 
 		// Position 6
-		if ((mazePos.x + SCREEN_POSITIONING_X[dir][12]) == mazeObject._position.x
-			&& (mazePos.y + SCREEN_POSITIONING_Y[dir][12]) == mazeObject._position.y) {
+		if ((mazePos.x + Res.SCREEN_POSITIONING_X[dir][12]) == mazeObject._position.x
+			&& (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][12]) == mazeObject._position.y) {
 			if (_wo[27]) {
 			} else if (_wo[22] && _wo[23]) {
 			} else if (_wo[22] && _wo[20]) {
 			} else if (_wo[23] && _wo[17]) {
 			} else if (_wo[20] && _wo[17]) {
 			} else if (_indoorList._objects5._frame == -1) {
-				_indoorList._objects5._x = INDOOR_OBJECT_X[listOffset][5];
-				_indoorList._objects5._y = MAP_OBJECT_Y[listOffset][5];
+				_indoorList._objects5._x = Res.INDOOR_OBJECT_X[listOffset][5];
+				_indoorList._objects5._y = Res.MAP_OBJECT_Y[listOffset][5];
 				_indoorList._objects5._frame = mazeObject._frame;
 				_indoorList._objects5._sprites = mazeObject._sprites;
 				_indoorList._objects5._flags &= ~SPRFLAG_HORIZ_FLIPPED;
@@ -2745,16 +2744,16 @@ void InterfaceMap::setIndoorsObjects() {
 		}
 
 		// Position 7
-		if ((mazePos.x + SCREEN_POSITIONING_X[dir][16]) == mazeObject._position.x
-			&& (mazePos.y + SCREEN_POSITIONING_Y[dir][16]) == mazeObject._position.y) {
+		if ((mazePos.x + Res.SCREEN_POSITIONING_X[dir][16]) == mazeObject._position.x
+			&& (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][16]) == mazeObject._position.y) {
 			if (_wo[27]) {
 			} else if (_wo[22] && _wo[24]) {
 			} else if (_wo[22] && _wo[21]) {
 			} else if (_wo[24] && _wo[19]) {
 			} else if (_wo[21] && _wo[19]) {
 			} else if (_indoorList._objects6._frame == -1) {
-				_indoorList._objects6._x = INDOOR_OBJECT_X[listOffset][6];
-				_indoorList._objects6._y = MAP_OBJECT_Y[listOffset][6];
+				_indoorList._objects6._x = Res.INDOOR_OBJECT_X[listOffset][6];
+				_indoorList._objects6._y = Res.MAP_OBJECT_Y[listOffset][6];
 				_indoorList._objects6._frame = mazeObject._frame;
 				_indoorList._objects6._sprites = mazeObject._sprites;
 				_indoorList._objects6._flags &= ~SPRFLAG_HORIZ_FLIPPED;
@@ -2764,11 +2763,11 @@ void InterfaceMap::setIndoorsObjects() {
 		}
 
 		// Position 8
-		if ((mazePos.x + SCREEN_POSITIONING_X[dir][27]) == mazeObject._position.x
-			&& (mazePos.y + SCREEN_POSITIONING_Y[dir][27]) == mazeObject._position.y) {
+		if ((mazePos.x + Res.SCREEN_POSITIONING_X[dir][27]) == mazeObject._position.x
+			&& (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][27]) == mazeObject._position.y) {
 			if (!_wo[27] && !_wo[22] && !_wo[15] && _indoorList._objects7._frame == -1) {
-				_indoorList._objects7._x = INDOOR_OBJECT_X[listOffset][7];
-				_indoorList._objects7._y = MAP_OBJECT_Y[listOffset][7];
+				_indoorList._objects7._x = Res.INDOOR_OBJECT_X[listOffset][7];
+				_indoorList._objects7._y = Res.MAP_OBJECT_Y[listOffset][7];
 				_indoorList._objects7._frame = mazeObject._frame;
 				_indoorList._objects7._sprites = mazeObject._sprites;
 				_indoorList._objects7._flags &= ~SPRFLAG_HORIZ_FLIPPED;
@@ -2778,16 +2777,16 @@ void InterfaceMap::setIndoorsObjects() {
 		}
 
 		// Position 9
-		if ((mazePos.x + SCREEN_POSITIONING_X[dir][25]) == mazeObject._position.x
-			&& (mazePos.y + SCREEN_POSITIONING_Y[dir][25]) == mazeObject._position.y) {
+		if ((mazePos.x + Res.SCREEN_POSITIONING_X[dir][25]) == mazeObject._position.x
+			&& (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][25]) == mazeObject._position.y) {
 			if (_wo[27] || _wo[22]) {
 			} else if (_wo[15] && _wo[17]) {
 			} else if (_wo[15] && _wo[12]) {
 			} else if (_wo[12] && _wo[7]) {
 			} else if (_wo[17] && _wo[7]) {
 			} else if (_indoorList._objects8._frame == -1) {
-				_indoorList._objects8._x = INDOOR_OBJECT_X[listOffset][8];
-				_indoorList._objects8._y = MAP_OBJECT_Y[listOffset][8];
+				_indoorList._objects8._x = Res.INDOOR_OBJECT_X[listOffset][8];
+				_indoorList._objects8._y = Res.MAP_OBJECT_Y[listOffset][8];
 				_indoorList._objects8._frame = mazeObject._frame;
 				_indoorList._objects8._sprites = mazeObject._sprites;
 				_indoorList._objects8._flags &= ~SPRFLAG_HORIZ_FLIPPED;
@@ -2797,16 +2796,16 @@ void InterfaceMap::setIndoorsObjects() {
 		}
 
 		// Position 10
-		if ((mazePos.x + SCREEN_POSITIONING_X[dir][23]) == mazeObject._position.x
-			&& (mazePos.y + SCREEN_POSITIONING_Y[dir][23]) == mazeObject._position.y) {
+		if ((mazePos.x + Res.SCREEN_POSITIONING_X[dir][23]) == mazeObject._position.x
+			&& (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][23]) == mazeObject._position.y) {
 			if (_wo[27]) {
 			} else if (_wo[22] && _wo[20]) {
 			} else if (_wo[22] && _wo[23]) {
 			} else if (_wo[20] && _wo[17]) {
 			} else if (_wo[23] && _wo[17]) {
 			} else if (!_wo[12] && !_wo[8] && _indoorList._objects9._frame == -1) {
-				_indoorList._objects9._x = INDOOR_OBJECT_X[listOffset][10];
-				_indoorList._objects9._y = MAP_OBJECT_Y[listOffset][10];
+				_indoorList._objects9._x = Res.INDOOR_OBJECT_X[listOffset][10];
+				_indoorList._objects9._y = Res.MAP_OBJECT_Y[listOffset][10];
 				_indoorList._objects9._frame = mazeObject._frame;
 				_indoorList._objects9._sprites = mazeObject._sprites;
 				_indoorList._objects9._flags &= ~SPRFLAG_HORIZ_FLIPPED;
@@ -2816,16 +2815,16 @@ void InterfaceMap::setIndoorsObjects() {
 		}
 
 		// Block 11
-		if ((mazePos.x + SCREEN_POSITIONING_X[dir][29]) == mazeObject._position.x
-			&& (mazePos.y + SCREEN_POSITIONING_Y[dir][29]) == mazeObject._position.y) {
+		if ((mazePos.x + Res.SCREEN_POSITIONING_X[dir][29]) == mazeObject._position.x
+			&& (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][29]) == mazeObject._position.y) {
 			if (_wo[27]) {
 			} else if (_wo[15] && _wo[19]) {
 			} else if (_wo[15] && _wo[14]) {
 			} else if (_wo[14] && _wo[9]) {
 			} else if (_wo[19] && _wo[9]) {
 			} else if (_indoorList._objects10._frame == -1) {
-				_indoorList._objects10._x = INDOOR_OBJECT_X[listOffset][9];
-				_indoorList._objects10._y = MAP_OBJECT_Y[listOffset][9];
+				_indoorList._objects10._x = Res.INDOOR_OBJECT_X[listOffset][9];
+				_indoorList._objects10._y = Res.MAP_OBJECT_Y[listOffset][9];
 				_indoorList._objects10._frame = mazeObject._frame;
 				_indoorList._objects10._sprites = mazeObject._sprites;
 				_indoorList._objects10._flags &= ~SPRFLAG_HORIZ_FLIPPED;
@@ -2835,16 +2834,16 @@ void InterfaceMap::setIndoorsObjects() {
 		}
 
 		// Block 12
-		if ((mazePos.x + SCREEN_POSITIONING_X[dir][31]) == mazeObject._position.x
-			&& (mazePos.y + SCREEN_POSITIONING_Y[dir][31]) == mazeObject._position.y) {
+		if ((mazePos.x + Res.SCREEN_POSITIONING_X[dir][31]) == mazeObject._position.x
+			&& (mazePos.y + Res.SCREEN_POSITIONING_Y[dir][31]) == mazeObject._position.y) {
 			if (_wo[27]) {
 			} else if (_wo[22] && _wo[21]) {
 			} else if (_wo[22] && _wo[24]) {
 			} else if (_wo[21] && _wo[19]) {
 			} else if (_wo[24] && _wo[19]) {
 			} else if (!_wo[14] && !_wo[10] && _indoorList._objects11._frame == -1) {
-				_indoorList._objects11._x = INDOOR_OBJECT_X[listOffset][11];
-				_indoorList._objects11._y = MAP_OBJECT_Y[listOffset][11];
+				_indoorList._objects11._x = Res.INDOOR_OBJECT_X[listOffset][11];
+				_indoorList._objects11._y = Res.MAP_OBJECT_Y[listOffset][11];
 				_indoorList._objects11._frame = mazeObject._frame;
 				_indoorList._objects11._sprites = mazeObject._sprites;
 				_indoorList._objects11._flags &= ~SPRFLAG_HORIZ_FLIPPED;
@@ -2867,16 +2866,16 @@ void InterfaceMap::setIndoorsWallPics() {
 		if (wallItem._direction != dir)
 			continue;
 
-		if (mazePos.x == (wallItem._position.x + SCREEN_POSITIONING_X[dir][2]) &&
-				mazePos.y == (wallItem._position.y + SCREEN_POSITIONING_Y[dir][2])) {
+		if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][2]) &&
+				mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][2])) {
 			if (_wp[1] == -1) {
 				_indoorList[148]._frame = wallItem._frame;
 				_indoorList[148]._sprites = wallItem._sprites;
 			}
 		}
 
-		if (mazePos.x == (wallItem._position.x + SCREEN_POSITIONING_X[dir][7]) &&
-				mazePos.y == (wallItem._position.y + SCREEN_POSITIONING_Y[dir][7])) {
+		if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][7]) &&
+				mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][7])) {
 			if (!_wo[27] && _wp[1] == -1) {
 				_indoorList[123]._frame = wallItem._frame;
 				_indoorList[123]._sprites = wallItem._sprites;
@@ -2884,8 +2883,8 @@ void InterfaceMap::setIndoorsWallPics() {
 			}
 		}
 
-		if (mazePos.x == (wallItem._position.x + SCREEN_POSITIONING_X[dir][5]) &&
-				mazePos.y == (wallItem._position.y + SCREEN_POSITIONING_Y[dir][5])) {
+		if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][5]) &&
+				mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][5])) {
 			if (_wo[27] && _wo[25]) {
 			} else if (_wo[27] && _wo[28]) {
 			} else if (_wo[23] && _wo[25]) {
@@ -2897,8 +2896,8 @@ void InterfaceMap::setIndoorsWallPics() {
 			}
 		}
 
-		if (mazePos.x == (wallItem._position.x + SCREEN_POSITIONING_X[dir][9]) &&
-				mazePos.y == (wallItem._position.y + SCREEN_POSITIONING_Y[dir][9])) {
+		if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][9]) &&
+				mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][9])) {
 			if (_wo[27] && _wo[26]) {
 			} else if (_wo[27] && _wo[29]) {
 			} else if (_wo[24] && _wo[26]) {
@@ -2910,8 +2909,8 @@ void InterfaceMap::setIndoorsWallPics() {
 			}
 		}
 
-		if (mazePos.x == (wallItem._position.x + SCREEN_POSITIONING_X[dir][14]) &&
-				mazePos.y == (wallItem._position.y + SCREEN_POSITIONING_Y[dir][14])) {
+		if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][14]) &&
+				mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][14])) {
 			if (!_wo[22] && !_wo[27] && !_wp[8]) {
 				_indoorList[94]._frame = wallItem._frame;
 				_indoorList[94]._sprites = wallItem._sprites;
@@ -2919,8 +2918,8 @@ void InterfaceMap::setIndoorsWallPics() {
 			}
 		}
 
-		if (mazePos.x == (wallItem._position.x + SCREEN_POSITIONING_X[dir][12]) &&
-				mazePos.y == (wallItem._position.y + SCREEN_POSITIONING_Y[dir][12])) {
+		if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][12]) &&
+				mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][12])) {
 			if (_wo[27]) {
 			} else if (_wo[22] && _wo[23]) {
 			} else if (_wo[22] && _wo[20]) {
@@ -2933,8 +2932,8 @@ void InterfaceMap::setIndoorsWallPics() {
 			}
 		}
 
-		if (mazePos.x == (wallItem._position.x + SCREEN_POSITIONING_X[dir][16]) &&
-				mazePos.y == (wallItem._position.y + SCREEN_POSITIONING_Y[dir][16])) {
+		if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][16]) &&
+				mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][16])) {
 			if (_wo[27]) {
 			} else if (_wo[22] && _wo[24]) {
 			} else if (_wo[22] && _wo[21]) {
@@ -2947,8 +2946,8 @@ void InterfaceMap::setIndoorsWallPics() {
 			}
 		}
 
-		if (mazePos.x == (wallItem._position.x + SCREEN_POSITIONING_X[dir][12]) &&
-				mazePos.y == (wallItem._position.y + SCREEN_POSITIONING_Y[dir][12])) {
+		if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][12]) &&
+				mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][12])) {
 			if (_wo[27]) {
 			} else if (_wo[25] && _wo[28]) {
 			} else if (_wo[20] && _wo[16]) {
@@ -2959,8 +2958,8 @@ void InterfaceMap::setIndoorsWallPics() {
 			}
 		}
 
-		if (mazePos.x == (wallItem._position.x + SCREEN_POSITIONING_X[dir][16]) &&
-				mazePos.y == (wallItem._position.y + SCREEN_POSITIONING_Y[dir][16])) {
+		if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][16]) &&
+				mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][16])) {
 			if (!_wo[26] && !_wo[29] && !_wo[21] && !_wo[18] && _wp[10] == -1) {
 				_indoorList[96]._frame = wallItem._frame;
 				_indoorList[96]._sprites = wallItem._sprites;
@@ -2968,8 +2967,8 @@ void InterfaceMap::setIndoorsWallPics() {
 			}
 		}
 
-		if (mazePos.x == (wallItem._position.x + SCREEN_POSITIONING_X[dir][27]) &&
-				mazePos.y == (wallItem._position.y + SCREEN_POSITIONING_Y[dir][27])) {
+		if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][27]) &&
+				mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][27])) {
 			if (!_wo[27] && !_wo[22] && !_wo[15] && _wp[15] == -1) {
 				_indoorList[50]._frame = wallItem._frame;
 				_indoorList[50]._sprites = wallItem._sprites;
@@ -2977,8 +2976,8 @@ void InterfaceMap::setIndoorsWallPics() {
 			}
 		}
 
-		if (mazePos.x == (wallItem._position.x + SCREEN_POSITIONING_X[dir][25]) &&
-				mazePos.y == (wallItem._position.y + SCREEN_POSITIONING_Y[dir][25])) {
+		if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][25]) &&
+				mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][25])) {
 			if (_wo[27]) {
 			} else if (_wo[27] && _wo[22]) {
 			} else if (_wo[15] && _wo[17]) {
@@ -2992,8 +2991,8 @@ void InterfaceMap::setIndoorsWallPics() {
 			}
 		}
 
-		if (mazePos.x == (wallItem._position.x + SCREEN_POSITIONING_X[dir][23]) &&
-				mazePos.y == (wallItem._position.y + SCREEN_POSITIONING_Y[dir][23])) {
+		if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][23]) &&
+				mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][23])) {
 			if (_wo[27]) {
 			} else if (_wo[22] && _wo[20]) {
 			} else if (_wo[22] && _wo[23]) {
@@ -3007,8 +3006,8 @@ void InterfaceMap::setIndoorsWallPics() {
 			}
 		}
 
-		if (mazePos.x == (wallItem._position.x + SCREEN_POSITIONING_X[dir][29]) &&
-				mazePos.y == (wallItem._position.y + SCREEN_POSITIONING_Y[dir][29])) {
+		if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][29]) &&
+				mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][29])) {
 			if (_wo[27] || _wo[22]) {
 			} else if (_wo[15] && _wo[19]) {
 			} else if (_wo[15] && _wo[14]) {
@@ -3021,8 +3020,8 @@ void InterfaceMap::setIndoorsWallPics() {
 			}
 		}
 
-		if (mazePos.x == (wallItem._position.x + SCREEN_POSITIONING_X[dir][31]) &&
-				mazePos.y == (wallItem._position.y + SCREEN_POSITIONING_Y[dir][31])) {
+		if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][31]) &&
+				mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][31])) {
 			if (_wo[27]) {
 			} else if (_wo[22] && _wo[21]) {
 			} else if (_wo[22] && _wo[24]) {
@@ -3035,8 +3034,8 @@ void InterfaceMap::setIndoorsWallPics() {
 			}
 		}
 
-		if (mazePos.x == (wallItem._position.x + SCREEN_POSITIONING_X[dir][23]) &&
-				mazePos.y == (wallItem._position.y + SCREEN_POSITIONING_Y[dir][23])) {
+		if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][23]) &&
+				mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][23])) {
 			if (!_wo[27] && !_wo[20] && !_wo[12] && !_wo[23] && !_wo[8] && !_wo[30]) {
 				if (_wp[12] == -1) {
 					_indoorList[47]._frame = wallItem._frame;
@@ -3046,8 +3045,8 @@ void InterfaceMap::setIndoorsWallPics() {
 			}
 		}
 
-		if (mazePos.x == (wallItem._position.x + SCREEN_POSITIONING_X[dir][31]) &&
-				mazePos.y == (wallItem._position.y + SCREEN_POSITIONING_Y[dir][31])) {
+		if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][31]) &&
+				mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][31])) {
 			if (!_wo[27] && !_wo[21] && !_wo[14] && !_wo[24] && !_wo[10] && !_wo[31]) {
 				if (_wp[18] == -1) {
 					_indoorList[53]._frame = wallItem._frame;
@@ -3057,8 +3056,8 @@ void InterfaceMap::setIndoorsWallPics() {
 			}
 		}
 
-		if (mazePos.x == (wallItem._position.x + SCREEN_POSITIONING_X[dir][23]) &&
-				mazePos.y == (wallItem._position.y + SCREEN_POSITIONING_Y[dir][23])) {
+		if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][23]) &&
+				mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][23])) {
 			if (!_wo[25] && !_wo[28] && !_wo[20] && !_wo[11] && !_wo[16] && !_wo[30] && !_wo[32]) {
 				if (_wp[11] == -1) {
 					_indoorList[46]._frame = wallItem._frame;
@@ -3068,8 +3067,8 @@ void InterfaceMap::setIndoorsWallPics() {
 			}
 		}
 
-		if (mazePos.x == (wallItem._position.x + SCREEN_POSITIONING_X[dir][31]) &&
-				mazePos.y == (wallItem._position.y + SCREEN_POSITIONING_Y[dir][31])) {
+		if (mazePos.x == (wallItem._position.x + Res.SCREEN_POSITIONING_X[dir][31]) &&
+				mazePos.y == (wallItem._position.y + Res.SCREEN_POSITIONING_Y[dir][31])) {
 			if (!_wo[26] && !_wo[20] && !_wo[21] && !_wo[13] && !_wo[18] && !_wo[31] && !_wo[33]) {
 				if (_wp[19] == -1) {
 					_indoorList[54]._frame = wallItem._frame;
@@ -3091,8 +3090,8 @@ void InterfaceMap::setOutdoorsMonsters() {
 	for (uint idx = 0; idx < map._mobData._monsters.size(); ++idx) {
 		MazeMonster &monster = map._mobData._monsters[idx];
 
-		if (monster._position.x == (pt.x + SCREEN_POSITIONING_X[dir][2]) &&
-				monster._position.y == (pt.y + SCREEN_POSITIONING_Y[dir][2])) {
+		if (monster._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][2]) &&
+				monster._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][2])) {
 			monster._isAttacking = true;
 			if (combat._attackMonsters[0] == -1) {
 				_outdoorList[118]._frame = idx;
@@ -3106,8 +3105,8 @@ void InterfaceMap::setOutdoorsMonsters() {
 			}
 		}
 
-		if (monster._position.x == (pt.x + SCREEN_POSITIONING_X[dir][7]) &&
-				monster._position.y == (pt.y + SCREEN_POSITIONING_Y[dir][7])) {
+		if (monster._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][7]) &&
+				monster._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][7])) {
 			monster._isAttacking = true;
 			if (combat._attackMonsters[3] == -1) {
 				_outdoorList[94]._frame = idx;
@@ -3121,8 +3120,8 @@ void InterfaceMap::setOutdoorsMonsters() {
 			}
 		}
 
-		if (monster._position.x == (pt.x + SCREEN_POSITIONING_X[dir][5]) &&
-				monster._position.y == (pt.y + SCREEN_POSITIONING_Y[dir][5])) {
+		if (monster._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][5]) &&
+				monster._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][5])) {
 			monster._isAttacking = true;
 			if (combat._attackMonsters[12] == -1) {
 				_outdoorList[90]._frame = idx;
@@ -3130,8 +3129,8 @@ void InterfaceMap::setOutdoorsMonsters() {
 			}
 		}
 
-		if (monster._position.x == (pt.x + SCREEN_POSITIONING_X[dir][9]) &&
-				monster._position.y == (pt.y + SCREEN_POSITIONING_Y[dir][9])) {
+		if (monster._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][9]) &&
+				monster._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][9])) {
 			monster._isAttacking = true;
 			if (combat._attackMonsters[13] == -1) {
 				_outdoorList[91]._frame = idx;
@@ -3139,8 +3138,8 @@ void InterfaceMap::setOutdoorsMonsters() {
 			}
 		}
 
-		if (monster._position.x == (pt.x + SCREEN_POSITIONING_X[dir][14]) &&
-				monster._position.y == (pt.y + SCREEN_POSITIONING_Y[dir][14])) {
+		if (monster._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][14]) &&
+				monster._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][14])) {
 			monster._isAttacking = true;
 			if (combat._attackMonsters[6] == -1) {
 				_outdoorList[75]._frame = idx;
@@ -3154,8 +3153,8 @@ void InterfaceMap::setOutdoorsMonsters() {
 			}
 		}
 
-		if (monster._position.x == (pt.x + SCREEN_POSITIONING_X[dir][12]) &&
-				monster._position.y == (pt.y + SCREEN_POSITIONING_Y[dir][12])) {
+		if (monster._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][12]) &&
+				monster._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][12])) {
 			monster._isAttacking = true;
 			if (combat._attackMonsters[14] == -1) {
 				_outdoorList[69]._frame = idx;
@@ -3166,8 +3165,8 @@ void InterfaceMap::setOutdoorsMonsters() {
 			}
 		}
 
-		if (monster._position.x == (pt.x + SCREEN_POSITIONING_X[dir][16]) &&
-				monster._position.y == (pt.y + SCREEN_POSITIONING_Y[dir][16])) {
+		if (monster._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][16]) &&
+				monster._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][16])) {
 			monster._isAttacking = true;
 			if (combat._attackMonsters[15] == -1) {
 				_outdoorList[71]._frame = idx;
@@ -3178,8 +3177,8 @@ void InterfaceMap::setOutdoorsMonsters() {
 			}
 		}
 
-		if (monster._position.x == (pt.x + SCREEN_POSITIONING_X[dir][27]) &&
-				monster._position.y == (pt.y + SCREEN_POSITIONING_Y[dir][27])) {
+		if (monster._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][27]) &&
+				monster._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][27])) {
 			monster._isAttacking = true;
 			if (combat._attackMonsters[9] == -1) {
 				_outdoorList[52]._frame = idx;
@@ -3193,8 +3192,8 @@ void InterfaceMap::setOutdoorsMonsters() {
 			}
 		}
 
-		if (monster._position.x == (pt.x + SCREEN_POSITIONING_X[dir][25]) &&
-				monster._position.y == (pt.y + SCREEN_POSITIONING_Y[dir][25])) {
+		if (monster._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][25]) &&
+				monster._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][25])) {
 			monster._isAttacking = true;
 			if (combat._attackMonsters[16] == -1) {
 				_outdoorList[44]._frame = idx;
@@ -3208,8 +3207,8 @@ void InterfaceMap::setOutdoorsMonsters() {
 			}
 		}
 
-		if (monster._position.x == (pt.x + SCREEN_POSITIONING_X[dir][23]) &&
-				monster._position.y == (pt.y + SCREEN_POSITIONING_Y[dir][23])) {
+		if (monster._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][23]) &&
+				monster._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][23])) {
 			monster._isAttacking = true;
 			if (combat._attackMonsters[18] == -1) {
 				_outdoorList[48]._frame = idx;
@@ -3217,8 +3216,8 @@ void InterfaceMap::setOutdoorsMonsters() {
 			}
 		}
 
-		if (monster._position.x == (pt.x + SCREEN_POSITIONING_X[dir][29]) &&
-				monster._position.y == (pt.y + SCREEN_POSITIONING_Y[dir][29])) {
+		if (monster._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][29]) &&
+				monster._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][29])) {
 			monster._isAttacking = true;
 			if (combat._attackMonsters[17] == -1) {
 				_outdoorList[47]._frame = idx;
@@ -3232,8 +3231,8 @@ void InterfaceMap::setOutdoorsMonsters() {
 			}
 		}
 
-		if (monster._position.x == (pt.x + SCREEN_POSITIONING_X[dir][31]) &&
-				monster._position.y == (pt.y + SCREEN_POSITIONING_Y[dir][31])) {
+		if (monster._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][31]) &&
+				monster._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][31])) {
 			monster._isAttacking = true;
 			if (combat._attackMonsters[19] == -1) {
 				_outdoorList[49]._frame = idx;
@@ -3301,7 +3300,7 @@ void InterfaceMap::setOutdoorsMonsters() {
 	}
 
 	for (int idx = 0; idx < 26; ++idx) {
-		DrawStruct &ds = _outdoorList[OUTDOOR_MONSTER_INDEXES[idx]];
+		DrawStruct &ds = _outdoorList[Res.OUTDOOR_MONSTER_INDEXES[idx]];
 
 		if (ds._frame != -1) {
 			ds._flags &= ~0xfff;
@@ -3313,7 +3312,7 @@ void InterfaceMap::setOutdoorsMonsters() {
 			ds._frame = monster._frame;
 
 			if (monster._effect2) {
-				ds._flags = MONSTER_EFFECT_FLAGS[monster._effect2 - 1][monster._effect3];
+				ds._flags = Res.MONSTER_EFFECT_FLAGS[monster._effect2 - 1][monster._effect3];
 			}
 
 			if (monster._frame > 7) {
@@ -3323,11 +3322,11 @@ void InterfaceMap::setOutdoorsMonsters() {
 				ds._sprites = monster._sprites;
 			}
 
-			ds._y = OUTDOOR_MONSTERS_Y[idx];
+			ds._y = Res.OUTDOOR_MONSTERS_Y[idx];
 
 			if (monsterData._flying) {
-				ds._x += COMBAT_FLOAT_X[_combatFloatCounter];
-				ds._y += COMBAT_FLOAT_Y[_combatFloatCounter];
+				ds._x += Res.COMBAT_FLOAT_X[_combatFloatCounter];
+				ds._y += Res.COMBAT_FLOAT_Y[_combatFloatCounter];
 			}
 		}
 	}
@@ -3350,12 +3349,12 @@ void InterfaceMap::setOutdoorsObjects() {
 			posIndex = obj._spriteId == 113 ? 1 : 0;
 		}
 
-		if (obj._position.x == (pt.x + SCREEN_POSITIONING_X[dir][2]) &&
-				obj._position.y == (pt.y + SCREEN_POSITIONING_Y[dir][2]) &&
+		if (obj._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][2]) &&
+				obj._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][2]) &&
 				_outdoorList[111]._frame == -1) {
 			DrawStruct &ds = _outdoorList[111];
-			ds._x = OUTDOOR_OBJECT_X[posIndex][0];
-			ds._y = MAP_OBJECT_Y[posIndex][0];
+			ds._x = Res.OUTDOOR_OBJECT_X[posIndex][0];
+			ds._y = Res.MAP_OBJECT_Y[posIndex][0];
 			ds._frame = obj._frame;
 			ds._sprites = obj._sprites;
 
@@ -3365,12 +3364,12 @@ void InterfaceMap::setOutdoorsObjects() {
 			_objNumber = idx;
 		}
 
-		if (obj._position.x == (pt.x + SCREEN_POSITIONING_X[dir][7]) &&
-				obj._position.y == (pt.y + SCREEN_POSITIONING_Y[dir][7]) &&
+		if (obj._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][7]) &&
+				obj._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][7]) &&
 				_outdoorList[87]._frame == -1) {
 			DrawStruct &ds = _outdoorList[87];
-			ds._x = OUTDOOR_OBJECT_X[posIndex][1];
-			ds._y = MAP_OBJECT_Y[posIndex][1];
+			ds._x = Res.OUTDOOR_OBJECT_X[posIndex][1];
+			ds._y = Res.MAP_OBJECT_Y[posIndex][1];
 			ds._frame = obj._frame;
 			ds._sprites = obj._sprites;
 
@@ -3379,12 +3378,12 @@ void InterfaceMap::setOutdoorsObjects() {
 				ds._flags |= SPRFLAG_HORIZ_FLIPPED;
 		}
 
-		if (obj._position.x == (pt.x + SCREEN_POSITIONING_X[dir][5]) &&
-				obj._position.y == (pt.y + SCREEN_POSITIONING_Y[dir][5]) &&
+		if (obj._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][5]) &&
+				obj._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][5]) &&
 				_outdoorList[88]._frame == -1) {
 			DrawStruct &ds = _outdoorList[88];
-			ds._x = OUTDOOR_OBJECT_X[posIndex][2];
-			ds._y = MAP_OBJECT_Y[posIndex][2];
+			ds._x = Res.OUTDOOR_OBJECT_X[posIndex][2];
+			ds._y = Res.MAP_OBJECT_Y[posIndex][2];
 			ds._frame = obj._frame;
 			ds._sprites = obj._sprites;
 
@@ -3393,12 +3392,12 @@ void InterfaceMap::setOutdoorsObjects() {
 				ds._flags |= SPRFLAG_HORIZ_FLIPPED;
 		}
 
-		if (obj._position.x == (pt.x + SCREEN_POSITIONING_X[dir][9]) &&
-				obj._position.y == (pt.y + SCREEN_POSITIONING_Y[dir][9]) &&
+		if (obj._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][9]) &&
+				obj._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][9]) &&
 				_outdoorList[89]._frame == -1) {
 			DrawStruct &ds = _outdoorList[89];
-			ds._x = OUTDOOR_OBJECT_X[posIndex][3];
-			ds._y = MAP_OBJECT_Y[posIndex][3];
+			ds._x = Res.OUTDOOR_OBJECT_X[posIndex][3];
+			ds._y = Res.MAP_OBJECT_Y[posIndex][3];
 			ds._frame = obj._frame;
 			ds._sprites = obj._sprites;
 
@@ -3407,12 +3406,12 @@ void InterfaceMap::setOutdoorsObjects() {
 				ds._flags |= SPRFLAG_HORIZ_FLIPPED;
 		}
 
-		if (obj._position.x == (pt.x + SCREEN_POSITIONING_X[dir][14]) &&
-				obj._position.y == (pt.y + SCREEN_POSITIONING_Y[dir][14]) &&
+		if (obj._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][14]) &&
+				obj._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][14]) &&
 				_outdoorList[66]._frame == -1) {
 			DrawStruct &ds = _outdoorList[66];
-			ds._x = OUTDOOR_OBJECT_X[posIndex][4];
-			ds._y = MAP_OBJECT_Y[posIndex][4];
+			ds._x = Res.OUTDOOR_OBJECT_X[posIndex][4];
+			ds._y = Res.MAP_OBJECT_Y[posIndex][4];
 			ds._frame = obj._frame;
 			ds._sprites = obj._sprites;
 
@@ -3421,12 +3420,12 @@ void InterfaceMap::setOutdoorsObjects() {
 				ds._flags |= SPRFLAG_HORIZ_FLIPPED;
 		}
 
-		if (obj._position.x == (pt.x + SCREEN_POSITIONING_X[dir][12]) &&
-				obj._position.y == (pt.y + SCREEN_POSITIONING_Y[dir][12]) &&
+		if (obj._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][12]) &&
+				obj._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][12]) &&
 				_outdoorList[67]._frame == -1) {
 			DrawStruct &ds = _outdoorList[67];
-			ds._x = OUTDOOR_OBJECT_X[posIndex][5];
-			ds._y = MAP_OBJECT_Y[posIndex][5];
+			ds._x = Res.OUTDOOR_OBJECT_X[posIndex][5];
+			ds._y = Res.MAP_OBJECT_Y[posIndex][5];
 			ds._frame = obj._frame;
 			ds._sprites = obj._sprites;
 
@@ -3435,12 +3434,12 @@ void InterfaceMap::setOutdoorsObjects() {
 				ds._flags |= SPRFLAG_HORIZ_FLIPPED;
 		}
 
-		if (obj._position.x == (pt.x + SCREEN_POSITIONING_X[dir][16]) &&
-				obj._position.y == (pt.y + SCREEN_POSITIONING_Y[dir][16]) &&
+		if (obj._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][16]) &&
+				obj._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][16]) &&
 				_outdoorList[68]._frame == -1) {
 			DrawStruct &ds = _outdoorList[68];
-			ds._x = OUTDOOR_OBJECT_X[posIndex][6];
-			ds._y = MAP_OBJECT_Y[posIndex][6];
+			ds._x = Res.OUTDOOR_OBJECT_X[posIndex][6];
+			ds._y = Res.MAP_OBJECT_Y[posIndex][6];
 			ds._frame = obj._frame;
 			ds._sprites = obj._sprites;
 
@@ -3449,12 +3448,12 @@ void InterfaceMap::setOutdoorsObjects() {
 				ds._flags |= SPRFLAG_HORIZ_FLIPPED;
 		}
 
-		if (obj._position.x == (pt.x + SCREEN_POSITIONING_X[dir][27]) &&
-				obj._position.y == (pt.y + SCREEN_POSITIONING_Y[dir][27]) &&
+		if (obj._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][27]) &&
+				obj._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][27]) &&
 				_outdoorList[37]._frame == -1) {
 			DrawStruct &ds = _outdoorList[37];
-			ds._x = OUTDOOR_OBJECT_X[posIndex][7];
-			ds._y = MAP_OBJECT_Y[posIndex][7];
+			ds._x = Res.OUTDOOR_OBJECT_X[posIndex][7];
+			ds._y = Res.MAP_OBJECT_Y[posIndex][7];
 			ds._frame = obj._frame;
 			ds._sprites = obj._sprites;
 
@@ -3463,12 +3462,12 @@ void InterfaceMap::setOutdoorsObjects() {
 				ds._flags |= SPRFLAG_HORIZ_FLIPPED;
 		}
 
-		if (obj._position.x == (pt.x + SCREEN_POSITIONING_X[dir][25]) &&
-				obj._position.y == (pt.y + SCREEN_POSITIONING_Y[dir][25]) &&
+		if (obj._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][25]) &&
+				obj._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][25]) &&
 				_outdoorList[38]._frame == -1) {
 			DrawStruct &ds = _outdoorList[38];
-			ds._x = OUTDOOR_OBJECT_X[posIndex][8];
-			ds._y = MAP_OBJECT_Y[posIndex][8];
+			ds._x = Res.OUTDOOR_OBJECT_X[posIndex][8];
+			ds._y = Res.MAP_OBJECT_Y[posIndex][8];
 			ds._frame = obj._frame;
 			ds._sprites = obj._sprites;
 
@@ -3477,12 +3476,12 @@ void InterfaceMap::setOutdoorsObjects() {
 				ds._flags |= SPRFLAG_HORIZ_FLIPPED;
 		}
 
-		if (obj._position.x == (pt.x + SCREEN_POSITIONING_X[dir][23]) &&
-				obj._position.y == (pt.y + SCREEN_POSITIONING_Y[dir][23]) &&
+		if (obj._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][23]) &&
+				obj._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][23]) &&
 				_outdoorList[40]._frame == -1) {
 			DrawStruct &ds = _outdoorList[40];
-			ds._x = OUTDOOR_OBJECT_X[posIndex][10];
-			ds._y = MAP_OBJECT_Y[posIndex][10];
+			ds._x = Res.OUTDOOR_OBJECT_X[posIndex][10];
+			ds._y = Res.MAP_OBJECT_Y[posIndex][10];
 			ds._frame = obj._frame;
 			ds._sprites = obj._sprites;
 
@@ -3491,12 +3490,12 @@ void InterfaceMap::setOutdoorsObjects() {
 				ds._flags |= SPRFLAG_HORIZ_FLIPPED;
 		}
 
-		if (obj._position.x == (pt.x + SCREEN_POSITIONING_X[dir][29]) &&
-				obj._position.y == (pt.y + SCREEN_POSITIONING_Y[dir][29]) &&
+		if (obj._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][29]) &&
+				obj._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][29]) &&
 				_outdoorList[39]._frame == -1) {
 			DrawStruct &ds = _outdoorList[39];
-			ds._x = OUTDOOR_OBJECT_X[posIndex][9];
-			ds._y = MAP_OBJECT_Y[posIndex][9];
+			ds._x = Res.OUTDOOR_OBJECT_X[posIndex][9];
+			ds._y = Res.MAP_OBJECT_Y[posIndex][9];
 			ds._frame = obj._frame;
 			ds._sprites = obj._sprites;
 
@@ -3505,12 +3504,12 @@ void InterfaceMap::setOutdoorsObjects() {
 				ds._flags |= SPRFLAG_HORIZ_FLIPPED;
 		}
 
-		if (obj._position.x == (pt.x + SCREEN_POSITIONING_X[dir][31]) &&
-				obj._position.y == (pt.y + SCREEN_POSITIONING_Y[dir][31]) &&
+		if (obj._position.x == (pt.x + Res.SCREEN_POSITIONING_X[dir][31]) &&
+				obj._position.y == (pt.y + Res.SCREEN_POSITIONING_Y[dir][31]) &&
 				_outdoorList[41]._frame == -1) {
 			DrawStruct &ds = _outdoorList[41];
-			ds._x = OUTDOOR_OBJECT_X[posIndex][11];
-			ds._y = MAP_OBJECT_Y[posIndex][11];
+			ds._x = Res.OUTDOOR_OBJECT_X[posIndex][11];
+			ds._y = Res.MAP_OBJECT_Y[posIndex][11];
 			ds._frame = obj._frame;
 			ds._sprites = obj._sprites;
 
@@ -3527,7 +3526,7 @@ void InterfaceMap::drawIndoors() {
 
 	// Draw any surface tiles on top of the default ground
 	for (int cellIndex = 0; cellIndex < 25; ++cellIndex) {
-		map.getCell(DRAW_NUMBERS[cellIndex]);
+		map.getCell(Res.DRAW_NUMBERS[cellIndex]);
 
 		DrawStruct &drawStruct = _indoorList._groundTiles[cellIndex];
 		SpriteResource &sprites = map._surfaceSprites[map._currentSurfaceId];
@@ -3536,10 +3535,10 @@ void InterfaceMap::drawIndoors() {
 		surfaceId = map.mazeData()._surfaceTypes[map._currentSurfaceId];
 		if (surfaceId == SURFTYPE_WATER || surfaceId == SURFTYPE_LAVA || 
 				surfaceId == SURFTYPE_SEWER) {
-			drawStruct._frame = DRAW_FRAMES[cellIndex][_flipWater ? 1 : 0];
+			drawStruct._frame = Res.DRAW_FRAMES[cellIndex][_flipWater ? 1 : 0];
 			drawStruct._flags = _flipWater ? SPRFLAG_HORIZ_FLIPPED : 0;
 		} else {
-			drawStruct._frame = DRAW_FRAMES[cellIndex][_flipGround ? 1 : 0];
+			drawStruct._frame = Res.DRAW_FRAMES[cellIndex][_flipGround ? 1 : 0];
 			drawStruct._flags = _flipGround ? SPRFLAG_HORIZ_FLIPPED : 0;
 		}
 	}
@@ -4338,9 +4337,9 @@ void InterfaceMap::drawIndoors() {
 
 	if (_openDoor) {
 		Common::Point pt(
-			_vm->_party->_mazePosition.x + SCREEN_POSITIONING_X[
+			_vm->_party->_mazePosition.x + Res.SCREEN_POSITIONING_X[
 				_vm->_party->_mazeDirection][_vm->_party->_mazePosition.x],
-			_vm->_party->_mazePosition.y + SCREEN_POSITIONING_Y[
+			_vm->_party->_mazePosition.y + Res.SCREEN_POSITIONING_Y[
 				_vm->_party->_mazeDirection][_vm->_party->_mazePosition.y]
 			);
 		map.cellFlagLookup(pt);
@@ -4375,7 +4374,7 @@ void InterfaceMap::drawOutdoors() {
 
 	// Draw any surface tiles on top of the default ground
 	for (int cellIndex = 0; cellIndex < 25; ++cellIndex) {
-		map.getCell(cellIndex == 24 ? 2 : DRAW_NUMBERS[cellIndex]);
+		map.getCell(cellIndex == 24 ? 2 : Res.DRAW_NUMBERS[cellIndex]);
 
 		DrawStruct &drawStruct = _outdoorList._groundTiles[cellIndex];
 		SpriteResource &sprites = map._surfaceSprites[map._currentSurfaceId];
@@ -4383,10 +4382,10 @@ void InterfaceMap::drawOutdoors() {
 
 		surfaceId = map.mazeData()._surfaceTypes[map._currentSurfaceId];
 		if (surfaceId == SURFTYPE_DWATER || surfaceId == SURFTYPE_LAVA) {
-			drawStruct._frame = DRAW_FRAMES[cellIndex][_flipWater ? 1 : 0];
+			drawStruct._frame = Res.DRAW_FRAMES[cellIndex][_flipWater ? 1 : 0];
 			drawStruct._flags = _flipWater ? SPRFLAG_HORIZ_FLIPPED : 0;
 		} else {
-			drawStruct._frame = DRAW_FRAMES[cellIndex][_flipGround ? 1 : 0];
+			drawStruct._frame = Res.DRAW_FRAMES[cellIndex][_flipGround ? 1 : 0];
 			drawStruct._flags = _flipGround ? SPRFLAG_HORIZ_FLIPPED : 0;
 		}
 	}
diff --git a/engines/xeen/map.cpp b/engines/xeen/map.cpp
index c683987..a7be48a 100644
--- a/engines/xeen/map.cpp
+++ b/engines/xeen/map.cpp
@@ -892,7 +892,7 @@ void Map::load(int mapId) {
 	if (intf._falling) {
 		Window &w = screen._windows[9];
 		w.open();
-		w.writeString(OOPS);
+		w.writeString(Res.OOPS);
 	} else {
 		PleaseWait::show(_vm);
 	}
@@ -1107,43 +1107,43 @@ void Map::load(int mapId) {
 
 			if (_mazeData[0]._wallTypes[i] != 0) {
 				_wallSprites._surfaces[i].load(Common::String::format("%s.wal",
-					SURFACE_TYPE_NAMES[_mazeData[0]._wallTypes[i]]));
+					Res.SURFACE_TYPE_NAMES[_mazeData[0]._wallTypes[i]]));
 			}
 
 			_surfaceSprites[i].clear();
 			if (i != 0 && _mazeData[0]._surfaceTypes[i] != 0)
-				_surfaceSprites[i].load(SURFACE_NAMES[_mazeData[0]._surfaceTypes[i]]);
+				_surfaceSprites[i].load(Res.SURFACE_NAMES[_mazeData[0]._surfaceTypes[i]]);
 		}
 	} else {
 		warning("TODO");	// Sound loading
 
 		_skySprites[1].load(Common::String::format("%s.sky",
-			TERRAIN_TYPES[_mazeData[0]._wallKind]));
+			Res.TERRAIN_TYPES[_mazeData[0]._wallKind]));
 		_groundSprites.load(Common::String::format("%s.gnd",
-			TERRAIN_TYPES[_mazeData[0]._wallKind]));
+			Res.TERRAIN_TYPES[_mazeData[0]._wallKind]));
 		_tileSprites.load(Common::String::format("%s.til",
-			TERRAIN_TYPES[_mazeData[0]._wallKind]));
+			Res.TERRAIN_TYPES[_mazeData[0]._wallKind]));
 
 		for (int i = 0; i < TOTAL_SURFACES; ++i) {
 			_surfaceSprites[i].clear();
 
 			if (_mazeData[0]._surfaceTypes[i] != 0 || i == 4)
-				_surfaceSprites[i].load(SURFACE_NAMES[_mazeData[0]._surfaceTypes[i]]);
+				_surfaceSprites[i].load(Res.SURFACE_NAMES[_mazeData[0]._surfaceTypes[i]]);
 		}
 
 		for (int i = 0; i < TOTAL_SURFACES; ++i)
 			_wallSprites._surfaces[i].clear();
 
 		_wallSprites._fwl1.load(Common::String::format("f%s1.fwl",
-			TERRAIN_TYPES[_mazeData[0]._wallKind]));
+			Res.TERRAIN_TYPES[_mazeData[0]._wallKind]));
 		_wallSprites._fwl2.load(Common::String::format("f%s2.fwl",
-			TERRAIN_TYPES[_mazeData[0]._wallKind]));
+			Res.TERRAIN_TYPES[_mazeData[0]._wallKind]));
 		_wallSprites._fwl3.load(Common::String::format("f%s3.fwl",
-			TERRAIN_TYPES[_mazeData[0]._wallKind]));
+			Res.TERRAIN_TYPES[_mazeData[0]._wallKind]));
 		_wallSprites._fwl4.load(Common::String::format("f%s4.fwl",
-			TERRAIN_TYPES[_mazeData[0]._wallKind]));
+			Res.TERRAIN_TYPES[_mazeData[0]._wallKind]));
 		_wallSprites._swl.load(Common::String::format("s%s.swl",
-			TERRAIN_TYPES[_mazeData[0]._wallKind]));
+			Res.TERRAIN_TYPES[_mazeData[0]._wallKind]));
 
 		// Set entries in the indoor draw list to the correct sprites
 		// for drawing various parts of the background
@@ -1388,15 +1388,15 @@ void Map::setWall(const Common::Point &pt, Direction dir, int v) {
 	Common::Point mapPos(pt.x & 15, pt.y & 15);
 	MazeWallLayers &wallLayer = _mazeData[_mazeDataIndex]._wallData[mapPos.y][mapPos.x];
 	wallLayer._data &= XOR_MASKS[dir];
-	wallLayer._data |= v << WALL_SHIFTS[dir][2];
+	wallLayer._data |= v << Res.WALL_SHIFTS[dir][2];
 }
 
 int Map::getCell(int idx) {
 	int mapId = _vm->_party->_mazeId;
 	Direction dir = _vm->_party->_mazeDirection;
 	Common::Point pt(
-		_vm->_party->_mazePosition.x + SCREEN_POSITIONING_X[_vm->_party->_mazeDirection][idx],
-		_vm->_party->_mazePosition.y + SCREEN_POSITIONING_Y[_vm->_party->_mazeDirection][idx]
+		_vm->_party->_mazePosition.x + Res.SCREEN_POSITIONING_X[_vm->_party->_mazeDirection][idx],
+		_vm->_party->_mazePosition.y + Res.SCREEN_POSITIONING_Y[_vm->_party->_mazeDirection][idx]
 	);
 
 	if (pt.x > 31 || pt.y > 31) {
@@ -1512,7 +1512,7 @@ int Map::getCell(int idx) {
 			_currentSurfaceId = _mazeData[_mazeDataIndex]._cells[pt.y][pt.x]._surfaceId;
 
 		_currentWall = wallData;
-		return (_currentWall >> WALL_SHIFTS[dir][idx]) & 0xF;
+		return (_currentWall >> Res.WALL_SHIFTS[dir][idx]) & 0xF;
 	}
 
 	return _currentWall;
diff --git a/engines/xeen/party.cpp b/engines/xeen/party.cpp
index 3315cb2..292ac01 100644
--- a/engines/xeen/party.cpp
+++ b/engines/xeen/party.cpp
@@ -405,7 +405,7 @@ void Party::addTime(int numMinutes) {
 						_activeParty[idx]._conditions[WEAK]++;
 				}
 
-				ErrorScroll::show(_vm, THE_PARTY_NEEDS_REST, WT_NONFREEZED_WAIT);
+				ErrorScroll::show(_vm, Res.THE_PARTY_NEEDS_REST, WT_NONFREEZED_WAIT);
 			}
 
 			_vm->_interface->drawParty(true);
@@ -529,8 +529,8 @@ int Party::subtract(int mode, uint amount, int whereId, ErrorWaitType wait) {
 
 void Party::notEnough(int consumableId, int whereId, bool mode, ErrorWaitType wait) {
 	Common::String msg = Common::String::format(
-		mode ? NO_X_IN_THE_Y : NOT_ENOUGH_X_IN_THE_Y,
-		CONSUMABLE_NAMES[consumableId], WHERE_NAMES[whereId]);
+		mode ? Res.NO_X_IN_THE_Y : Res.NOT_ENOUGH_X_IN_THE_Y,
+		Res.CONSUMABLE_NAMES[consumableId], Res.WHERE_NAMES[whereId]);
 	ErrorScroll::show(_vm, msg, wait);
 }
 
@@ -583,14 +583,14 @@ void Party::giveTreasure() {
 	events.clearEvents();
 	w.close();
 	w.open();
-	w.writeString(Common::String::format(PARTY_FOUND, _treasure._gold, _treasure._gems));
+	w.writeString(Common::String::format(Res.PARTY_FOUND, _treasure._gold, _treasure._gems));
 	w.update();
 
 	if (_vm->_mode != MODE_COMBAT)
 		_vm->_mode = MODE_7;
 
 	if (arePacksFull())
-		ErrorScroll::show(_vm, BACKPACKS_FULL_PRESS_KEY, WT_NONFREEZED_WAIT);
+		ErrorScroll::show(_vm, Res.BACKPACKS_FULL_PRESS_KEY, WT_NONFREEZED_WAIT);
 
 	for (int categoryNum = 0; categoryNum < NUM_ITEM_CATEGORIES; ++categoryNum) {
 		for (int itemNum = 0; itemNum < MAX_TREASURE_ITEMS; ++itemNum) {
@@ -647,7 +647,7 @@ void Party::giveTreasure() {
 		}
 	}
 
-	w.writeString(HIT_A_KEY);
+	w.writeString(Res.HIT_A_KEY);
 	w.update();
 
 	do {
@@ -705,12 +705,12 @@ void Party::giveTreasureToCharacter(Character &c, ItemCategory category, int ite
 		c._items[category].sort();
 	}
 
-	w.writeString(GIVE_TREASURE_FORMATTING);
+	w.writeString(Res.GIVE_TREASURE_FORMATTING);
 	w.update();
 	events.ipause(5);
 
-	w.writeString(Common::String::format(X_FOUND_Y, c._name.c_str(),
-		ITEM_NAMES[category][treasureItem._id]));
+	w.writeString(Common::String::format(Res.X_FOUND_Y, c._name.c_str(),
+		Res.ITEM_NAMES[category][treasureItem._id]));
 	w.update();
 
 	events.ipause(5);
diff --git a/engines/xeen/resources.cpp b/engines/xeen/resources.cpp
index 5cc1e77..e3d720c 100644
--- a/engines/xeen/resources.cpp
+++ b/engines/xeen/resources.cpp
@@ -26,7 +26,10 @@
 
 namespace Xeen {
 
+Resources *g_resources;
+
 Resources::Resources() {
+	g_resources = this;
 	_globalSprites.load("global.icn");
 
 	File f("mae.xen");
@@ -37,7 +40,7 @@ Resources::Resources() {
 
 /*------------------------------------------------------------------------*/
 
-const char *const CREDITS =
+const char *const Resources::CREDITS =
 	"\013""012\010""000\003""c\014""35Designed and Directed By:\n"
 	"\014""17Jon Van Caneghem\003""l\n"
 	"\n"
@@ -72,52 +75,52 @@ const char *const CREDITS =
 	"\t190Clayton Retzer\n"
 	"\t190David Vela\003""c";
 
-const char *const OPTIONS_TITLE = 
+const char *const Resources::OPTIONS_TITLE = 
 	"\x0D\x01\003""c\014""dMight and Magic Options\n"
 	"World of Xeen\x02\n"
 	"\v117Copyright (c) 1993 NWC, Inc.\n"
 	"All Rights Reserved\x01";
 
-const char *const THE_PARTY_NEEDS_REST = "\x0B""012The Party needs rest!";
+const char *const Resources::THE_PARTY_NEEDS_REST = "\x0B""012The Party needs rest!";
 
-const char *const WHO_WILL = "\x03""c\x0B""000\x09""000%s\x0A\x0A"
+const char *const Resources::WHO_WILL = "\x03""c\x0B""000\x09""000%s\x0A\x0A"
 	"Who will\x0A%s?\x0A\x0B""055F1 - F%d";
 
-const char *const WHATS_THE_PASSWORD = "What's the Password?";
+const char *const Resources::WHATS_THE_PASSWORD = "What's the Password?";
 
-const char *const IN_NO_CONDITION = "\x0B""007%s is not in any condition to perform actions!";
+const char *const Resources::IN_NO_CONDITION = "\x0B""007%s is not in any condition to perform actions!";
 
-const char *const NOTHING_HERE = "\x03""c\x0B""010Nothing here.";
+const char *const Resources::NOTHING_HERE = "\x03""c\x0B""010Nothing here.";
 
-const char *const TERRAIN_TYPES[6] = {
+const char *const Resources::TERRAIN_TYPES[6] = {
 	"town", "cave", "towr", "cstl", "dung", "scfi"
 };
 
-const char *const SURFACE_TYPE_NAMES[15] = {
+const char *const Resources::SURFACE_TYPE_NAMES[15] = {
 	nullptr, "mount", "ltree", "dtree", "grass", "snotree", "snomnt",
 	"dedltree", "mount", "lavamnt", "palm", "dmount", "dedltree",
 	"dedltree", "dedltree"
 };
 
-const char *const SURFACE_NAMES[16] = {
+const char *const Resources::SURFACE_NAMES[16] = {
 	"water.srf", "dirt.srf", "grass.srf", "snow.srf", "swamp.srf",
 	"lava.srf", "desert.srf", "road.srf", "dwater.srf", "tflr.srf",
 	"sky.srf", "croad.srf", "sewer.srf", "cloud.srf", "scortch.srf",
 	"space.srf"
 };
 
-const char *const WHO_ACTIONS[32] = {
+const char *const Resources::WHO_ACTIONS[32] = {
 	"search", "open", "drink", "mine", "touch", "read", "learn", "take",
 	"bang", "steal", "bribe", "pay", "sit", "try", "turn", "bathe",
 	"destroy", "pull", "descend", "toss a coin", "pray", "join", "act",
 	"play", "push", "rub", "pick", "eat", "sign", "close", "look", "try"
 };
 
-const char *const WHO_WILL_ACTIONS[4] = {
+const char *const Resources::WHO_WILL_ACTIONS[4] = {
 	"Open Grate", "Open Door", "Open Scroll", "Select Char"
 };
 
-const byte SYMBOLS[20][64] = {
+const byte Resources::SYMBOLS[20][64] = {
 	{ // 0
 		0x00, 0x00, 0xA8, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0x00, 0xA8, 0x9E, 0x9C, 0x9C, 0x9E, 0x9E, 0x9E,
 		0xAC, 0x9C, 0xA4, 0xAC, 0xAC, 0x9A, 0x9A, 0x9A, 0xAC, 0x9E, 0xAC, 0xA8, 0xA8, 0xA6, 0x97, 0x98,
@@ -240,7 +243,7 @@ const byte SYMBOLS[20][64] = {
 	}
 };
 
-const byte TEXT_COLORS[40][4] = {
+const byte Resources::TEXT_COLORS[40][4] = {
 	{ 0x00, 0x19, 0x19, 0x19 },
 	{ 0x00, 0x08, 0x08, 0x08 },
 	{ 0x00, 0x0F, 0x0F, 0x0F },
@@ -283,61 +286,61 @@ const byte TEXT_COLORS[40][4] = {
 	{ 0x00, 0xDB, 0xDB, 0xDB },
 };
 
-const char *const DIRECTION_TEXT_UPPER[4] = { "NORTH", "EAST", "SOUTH", "WEST" };
+const char *const Resources::DIRECTION_TEXT_UPPER[4] = { "NORTH", "EAST", "SOUTH", "WEST" };
 
-const char *const DIRECTION_TEXT[4] = { "North", "East", "South", "West" };
+const char *const Resources::DIRECTION_TEXT[4] = { "North", "East", "South", "West" };
 
-const char *const RACE_NAMES[5] = { "Human", "Elf", "Dwarf", "Gnome", "H-Orc" };
+const char *const Resources::RACE_NAMES[5] = { "Human", "Elf", "Dwarf", "Gnome", "H-Orc" };
 
-const int RACE_HP_BONUSES[5] = { 0, -2, 1, -1, 2 };
+const int Resources::RACE_HP_BONUSES[5] = { 0, -2, 1, -1, 2 };
 
-const int RACE_SP_BONUSES[5][2] = {
+const int Resources::RACE_SP_BONUSES[5][2] = {
 	{ 0, 0 }, { 2, 0 }, { -1, -1 }, { 1, 1 }, { -2, -2 }
 };
 
-const char *const ALIGNMENT_NAMES[3] = { "Good", "Neutral", "Evil" };
+const char *const Resources::ALIGNMENT_NAMES[3] = { "Good", "Neutral", "Evil" };
 
-const char *const SEX_NAMES[2] = { "Male", "Female" };
+const char *const Resources::SEX_NAMES[2] = { "Male", "Female" };
 
-const char *const SKILL_NAMES[18] = {
+const char *const Resources::SKILL_NAMES[18] = {
 	"Thievery", "Arms Master", "Astrologer", "Body Builder", "Cartographer",
 	"Crusader", "Direction Sense", "Linguist", "Merchant", "Mountaineer", 
 	"Navigator", "Path Finder", "Prayer Master", "Prestidigitator",
 	"Swimmer", "Tracker", "Spot Secret Door", "Danger Sense"
 };
 
-const char *const CLASS_NAMES[11] = {
+const char *const Resources::CLASS_NAMES[11] = {
 	"Knight", "Paladin", "Archer", "Cleric", "Sorcerer", "Robber", 
 	"Ninja", "Barbarian", "Druid", "Ranger", nullptr
 };
 
-const uint CLASS_EXP_LEVELS[10] = {
+const uint Resources::CLASS_EXP_LEVELS[10] = {
 	1500, 2000, 2000, 1500, 2000, 1000, 1500, 1500, 1500, 2000
 };
 
-const char *const CONDITION_NAMES[17] = {
+const char *const Resources::CONDITION_NAMES[17] = {
 	"Cursed", "Heart Broken", "Weak", "Poisoned", "Diseased", 
 	"Insane", "In Love", "Drunk", "Asleep", "Depressed", "Confused", 
 	"Paralyzed", "Unconscious", "Dead", "Stone", "Eradicated", "Good"
 };
 
-const int CONDITION_COLORS[17] = {
+const int Resources::CONDITION_COLORS[17] = {
 	9, 9, 9, 9, 9, 9, 9, 9, 32, 32, 32, 32, 6, 6, 6, 6, 15
 };
 
-const char *const GOOD = "Good";
+const char *const Resources::GOOD = "Good";
 
-const char *const BLESSED = "\n\t020Blessed\t095%+d";
+const char *const Resources::BLESSED = "\n\t020Blessed\t095%+d";
 
-const char *const POWER_SHIELD = "\n\t020Power Shield\t095%+d";
+const char *const Resources::POWER_SHIELD = "\n\t020Power Shield\t095%+d";
 
-const char *const HOLY_BONUS = "\n\t020Holy Bonus\t095%+d";
+const char *const Resources::HOLY_BONUS = "\n\t020Holy Bonus\t095%+d";
 
-const char *const HEROISM = "\n\t020Heroism\t095%+d";
+const char *const Resources::HEROISM = "\n\t020Heroism\t095%+d";
 
-const char *const IN_PARTY = "\014""15In Party\014""d";
+const char *const Resources::IN_PARTY = "\014""15In Party\014""d";
 
-const char *const PARTY_DETAILS = "\015\003l\002\014""00"
+const char *const Resources::PARTY_DETAILS = "\015\003l\002\014""00"
 	"\013""001""\011""035%s" 
 	"\013""009""\011""035%s" 
 	"\013""017""\011""035%s" 
@@ -354,23 +357,23 @@ const char *const PARTY_DETAILS = "\015\003l\002\014""00"
 	"\013""052""\011""136%s" 
 	"\013""060""\011""136%s" 
 	"\013""068""\011""136%s";
-const char *const PARTY_DIALOG_TEXT =
+const char *const Resources::PARTY_DIALOG_TEXT =
 	"%s\x2\x3""c\v106\t013Up\t048Down\t083\f37D\fdel\t118\f37R\fdem"
 	"\t153\f37C\fdreate\t188E\f37x\fdit\x1";
 
-const int FACE_CONDITION_FRAMES[17] = { 
+const int Resources::FACE_CONDITION_FRAMES[17] = { 
 	2, 2, 2, 1, 1, 4, 4, 4, 3, 2, 4, 3, 3, 5, 6, 7, 0 
 };
 
-const int CHAR_FACES_X[6] = { 10, 45, 81, 117, 153, 189 };
+const int Resources::CHAR_FACES_X[6] = { 10, 45, 81, 117, 153, 189 };
 
-const int HP_BARS_X[6] = { 13, 50, 86, 122, 158, 194 };
+const int Resources::HP_BARS_X[6] = { 13, 50, 86, 122, 158, 194 };
 
-const char *const NO_ONE_TO_ADVENTURE_WITH = "You have no one to adventure with";
+const char *const Resources::NO_ONE_TO_ADVENTURE_WITH = "You have no one to adventure with";
 
-const char *const YOUR_ROSTER_IS_FULL = "Your Roster is full!";
+const char *const Resources::YOUR_ROSTER_IS_FULL = "Your Roster is full!";
 
-const byte BACKGROUND_XLAT[] = {
+const byte Resources::BACKGROUND_XLAT[] = {
 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 	0x00, 0x00, 0xF7, 0xFF, 0x09, 0x00, 0x00, 0x00,
 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@@ -385,12 +388,12 @@ const byte BACKGROUND_XLAT[] = {
 	0x00, 0x00
 };
 
-const char *const PLEASE_WAIT = "\014""d\003""c\011""000"
+const char *const Resources::PLEASE_WAIT = "\014""d\003""c\011""000"
 	"\013""002Please Wait...";
 
-const char *const OOPS = "\003""c\011""000\013""002Oops...";
+const char *const Resources::OOPS = "\003""c\011""000\013""002Oops...";
 
-const int8 SCREEN_POSITIONING_X[4][48] = {
+const int8 Resources::SCREEN_POSITIONING_X[4][48] = {
 	{
 	-1,  0,  0,  0,  1, -1,  0,  0,  0,  1, -2, -1,
 	-1,  0,  0,  0,  1,  1,  2, -4, -3, -3, -2, -2,
@@ -414,7 +417,7 @@ const int8 SCREEN_POSITIONING_X[4][48] = {
 	}
 };
 
-const int8 SCREEN_POSITIONING_Y[4][48] = {
+const int8 Resources::SCREEN_POSITIONING_Y[4][48] = {
 	{
 	 0,  0,  0,  0,  0,  1,  1,  1,  1,  1,  2,  2,
 	 2,  2,  2,  2,  2,  2,  2,  3,  3,  3,  3,  3,
@@ -438,42 +441,42 @@ const int8 SCREEN_POSITIONING_Y[4][48] = {
 	}
 };
 
-const int MONSTER_GRID_BITMASK[12] = {
+const int Resources::MONSTER_GRID_BITMASK[12] = {
 	0xC, 8, 4, 0, 0xF, 0xF000, 0xF00, 0xF0, 0xF00, 0xF0, 0x0F, 0xF000
 };
 
-const int INDOOR_OBJECT_X[2][12] = {
+const int Resources::INDOOR_OBJECT_X[2][12] = {
 	{ 5, -7, -112, 98, -8, -65, 49, -9, -34, 16, -58, 40 },
 	{ -35, -35, -142, 68, -35, -95, 19, -35, -62, -14, -98, 16 }
 };
 
-const int MAP_OBJECT_Y[2][12] = {
+const int Resources::MAP_OBJECT_Y[2][12] = {
 	{ 2, 25, 25, 25, 50, 50, 50, 58, 58, 58, 58, 58 },
 	{ -65, -6, -6, -6, 36, 36, 36, 54, 54, 54, 54, 54 }
 };
 
-const int INDOOR_MONSTERS_Y[4] = { 2, 34, 53, 59 };
+const int Resources::INDOOR_MONSTERS_Y[4] = { 2, 34, 53, 59 };
 
-const int OUTDOOR_OBJECT_X[2][12] = {
+const int Resources::OUTDOOR_OBJECT_X[2][12] = {
 	{ -5, -7, -112, 98, -8, -77, 61, -9, -43, 25, -74, 56 },
 	{ -35, -35, -142, 68, -35, -95, 19, -35, -62, -24, -98, 16 }
 };
 
-const int OUTDOOR_MONSTER_INDEXES[26] = {
+const int Resources::OUTDOOR_MONSTER_INDEXES[26] = {
 	42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 69, 70,
 	71, 72, 73, 74, 75, 90, 91, 92, 93, 94, 112, 115, 118
 };
 
-const int OUTDOOR_MONSTERS_Y[26] = {
+const int Resources::OUTDOOR_MONSTERS_Y[26] = {
 	59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 53, 53,
 	53, 53, 53, 53, 53, 34, 34, 34, 34, 34, 2, 2, 2
 };
 
-const int DIRECTION_ANIM_POSITIONS[4][4] = {
+const int Resources::DIRECTION_ANIM_POSITIONS[4][4] = {
 	{ 0, 1, 2, 3 }, { 3, 0, 1, 2 }, { 2, 3, 0, 1 }, { 1, 2, 3, 0 }
 };
 
-const byte WALL_SHIFTS[4][48] = {
+const byte Resources::WALL_SHIFTS[4][48] = {
 	{
 		12, 0, 12, 8, 12, 12, 0, 12, 8, 12, 12, 0,
 		12, 0, 12, 8, 12, 8, 12, 12, 0, 12, 0, 12,
@@ -497,14 +500,14 @@ const byte WALL_SHIFTS[4][48] = {
 	}
 };
 
-const int DRAW_NUMBERS[25] = {
+const int Resources::DRAW_NUMBERS[25] = {
 	36, 37, 38, 43, 42, 41, 
 	39, 20, 22, 24, 33, 31, 
 	29, 26, 10, 11, 18, 16, 
 	13, 5, 9, 6, 0, 4, 1
 };
 
-const int DRAW_FRAMES[25][2] = {
+const int Resources::DRAW_FRAMES[25][2] = {
 	{ 18, 24 }, { 19, 23 }, { 20, 22 }, { 24, 18 }, { 23, 19 }, { 22, 20 },
 	{ 21, 21 }, { 11, 17 }, { 12, 16 }, { 13, 15 }, { 17, 11 }, { 16, 12 },
 	{ 15, 13 }, { 14, 14 }, { 6, 10 }, { 7, 9 }, { 10, 6 }, { 9, 7 },
@@ -512,11 +515,11 @@ const int DRAW_FRAMES[25][2] = {
 	{ 1, 1 }
 };
 
-const int COMBAT_FLOAT_X[8] = { -2, -1, 0, 1, 2, 1, 0, -1 };
+const int Resources::COMBAT_FLOAT_X[8] = { -2, -1, 0, 1, 2, 1, 0, -1 };
 
-const int COMBAT_FLOAT_Y[8] = { -2, 0, 2, 0, -1, 0, 2, 0 };
+const int Resources::COMBAT_FLOAT_Y[8] = { -2, 0, 2, 0, -1, 0, 2, 0 };
 
-const int MONSTER_EFFECT_FLAGS[15][8] = {
+const int Resources::MONSTER_EFFECT_FLAGS[15][8] = {
 	{ 0x104, 0x105, 0x106, 0x107, 0x108, 0x109, 0x10A, 0x10B },
 	{ 0x10C, 0x10D, 0x10E, 0x10F, 0x0, 0x0, 0x0, 0x0 },
 	{ 0x110, 0x111, 0x112, 0x113, 0x0, 0x0, 0x0, 0x0 },
@@ -534,7 +537,7 @@ const int MONSTER_EFFECT_FLAGS[15][8] = {
 	{ 0x108, 0x108, 0x108, 0x108, 0x108, 0x108, 0x108, 0x108 }
 };
 
-const uint SPELLS_ALLOWED[3][40] = {
+const uint Resources::SPELLS_ALLOWED[3][40] = {
 	{
 		0, 1, 2, 3, 5, 6, 7, 8, 9, 10,
 		12, 14, 16, 23, 26, 27, 28, 30, 31, 32,
@@ -553,31 +556,31 @@ const uint SPELLS_ALLOWED[3][40] = {
 	}
 };
 
-const int BASE_HP_BY_CLASS[10] = { 10, 8, 7, 5, 4, 8, 7, 12, 6, 9 };
+const int Resources::BASE_HP_BY_CLASS[10] = { 10, 8, 7, 5, 4, 8, 7, 12, 6, 9 };
 
-const int AGE_RANGES[10] = { 1, 6, 11, 18, 36, 51, 76, 101, 201, 0xffff };
+const int Resources::AGE_RANGES[10] = { 1, 6, 11, 18, 36, 51, 76, 101, 201, 0xffff };
 
-const int AGE_RANGES_ADJUST[2][10] = {
+const int Resources::AGE_RANGES_ADJUST[2][10] = {
 	{ -250, -50, -20, -10, 0, -2, -5, -10, -20, -50 },
 	{ -250, -50, -20, -10, 0, 2, 5, 10, 20, 50 }
 };
 
-const uint STAT_VALUES[24] = {
+const uint Resources::STAT_VALUES[24] = {
 	3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 25, 30, 35, 40, 
 	50, 75, 100, 125, 150, 175, 200, 225, 250, 
 };
 
-const int STAT_BONUSES[24] = {
+const int Resources::STAT_BONUSES[24] = {
 	-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6,
 	7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 20
 };
 
-const int ELEMENTAL_CATEGORIES[6] = { 8, 15, 20, 25, 33, 36 };
+const int Resources::ELEMENTAL_CATEGORIES[6] = { 8, 15, 20, 25, 33, 36 };
 
-const int ATTRIBUTE_CATEGORIES[10] = {
+const int Resources::ATTRIBUTE_CATEGORIES[10] = {
 	9, 17, 25, 33, 39, 45, 50, 56, 61, 72 };
 
-const int ATTRIBUTE_BONUSES[72] = {
+const int Resources::ATTRIBUTE_BONUSES[72] = {
 	2, 3, 5, 8, 12, 17, 23, 30, 38, 47,	// Might bonus
 	2, 3, 5, 8, 12, 17, 23, 30,			// INT bonus
 	2, 3, 5, 8, 12, 17, 23, 30,			// PER bonus
@@ -590,46 +593,46 @@ const int ATTRIBUTE_BONUSES[72] = {
 	4, 6, 8, 10, 12, 14, 16, 18, 20, 25	// Thievery bonus
 };
 
-const int ELEMENTAL_RESISTENCES[37] = {
+const int Resources::ELEMENTAL_RESISTENCES[37] = {
 	0, 5, 7, 9, 12, 15, 20, 25, 30, 5, 7, 9, 12, 15, 20, 25,
 	5, 10, 15, 20, 25, 10, 15, 20, 25, 40, 5, 7, 9, 11, 13, 15, 20, 25,
 	5, 10, 20
 };
 
-const int ELEMENTAL_DAMAGE[37] = {
+const int Resources::ELEMENTAL_DAMAGE[37] = {
 	0, 2, 3, 4, 5, 10, 15, 20, 30, 2, 3, 4, 5, 10, 15, 20, 2, 4, 5, 10, 20,
 	2, 4, 8, 16, 32, 2, 3, 4, 5, 10, 15, 20, 30, 5, 10, 25
 };
 
-const int WEAPON_DAMAGE_BASE[35] = {
+const int Resources::WEAPON_DAMAGE_BASE[35] = {
 	0, 3, 2, 3, 2, 2, 4, 1, 2, 4, 2, 3,
 	2, 2, 1, 1, 1, 1, 4, 4, 3, 2, 4, 2,
 	2, 2, 5, 3, 3, 3, 3, 5, 4, 2, 6
 };
 
-const int WEAPON_DAMAGE_MULTIPLIER[35] = {
+const int Resources::WEAPON_DAMAGE_MULTIPLIER[35] = {
 	0, 3, 3, 4, 5, 4, 2, 3, 3, 3, 3, 3,
 	2, 4, 10, 6, 8, 9, 4, 3, 6, 8, 5, 6,
 	4, 5, 3, 5, 6, 7, 2, 2, 2, 2, 4
 };
 
-const int METAL_DAMAGE[22] = {
+const int Resources::METAL_DAMAGE[22] = {
 	-3, -6, -4, -2, 2, 4, 6, 8, 10, 0, 1,
 	1, 2, 2, 3, 4, 5, 12, 15, 20, 30, 50
 };
 
-const int METAL_DAMAGE_PERCENT[22] = {
+const int Resources::METAL_DAMAGE_PERCENT[22] = {
 	253, 252, 3, 2, 1, 2, 3, 4, 6, 0, 1,
 	1, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10
 };
 
-const int METAL_LAC[9] = { -3, 0, -2, -1, 1, 2, 4, 6, 8 };
+const int Resources::METAL_LAC[9] = { -3, 0, -2, -1, 1, 2, 4, 6, 8 };
 
-const int ARMOR_STRENGTHS[14] = { 0, 2, 4, 5, 6, 7, 8, 10, 4, 2, 1, 1, 1, 1 };
+const int Resources::ARMOR_STRENGTHS[14] = { 0, 2, 4, 5, 6, 7, 8, 10, 4, 2, 1, 1, 1, 1 };
 
-const int MAKE_ITEM_ARR1[6] = { 0, 8, 15, 20, 25, 33 };
+const int Resources::MAKE_ITEM_ARR1[6] = { 0, 8, 15, 20, 25, 33 };
 
-const int MAKE_ITEM_ARR2[6][7][2] = {
+const int Resources::MAKE_ITEM_ARR2[6][7][2] = {
 	{ { 0, 0 }, { 1, 3 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 5, 8 }, { 8, 8 } },
 	{ { 0, 0 }, { 1, 3 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 6, 7 }, { 7, 7 } },
 	{ { 0, 0 }, { 1, 2 }, { 1, 3 }, { 2, 4 }, { 3, 5 }, { 4, 5 }, { 5, 5 } },
@@ -638,7 +641,7 @@ const int MAKE_ITEM_ARR2[6][7][2] = {
 	{ { 0, 0 }, { 1, 1 }, { 1, 1 }, { 1, 2 }, { 2, 2 }, { 2, 3 }, { 3, 3 } }
 };
 
-const int MAKE_ITEM_ARR3[10][7][2] = {
+const int Resources::MAKE_ITEM_ARR3[10][7][2] = {
 	{ { 0, 0 }, { 1, 4 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 6, 10 }, { 10, 10 } },
 	{ { 0, 0 }, { 1, 3 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 5, 8 }, { 8, 8 } },
 	{ { 0, 0 }, { 1, 3 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 5, 8 }, { 8, 8 } },
@@ -651,44 +654,44 @@ const int MAKE_ITEM_ARR3[10][7][2] = {
 	{ { 0, 0 }, { 1, 2 }, { 1, 4 }, { 3, 6 }, { 5, 8 }, { 7, 10 }, { 10, 10 } }
 };
 
-const int MAKE_ITEM_ARR4[2][7][2] = {
+const int Resources::MAKE_ITEM_ARR4[2][7][2] = {
 	{ { 0, 0 }, { 1, 4 }, { 3, 7 }, { 4, 8 }, { 5, 9 }, { 8, 9 }, { 9, 9 } },
 	{ { 0, 0 }, { 1, 4 }, { 2, 6 }, { 4, 7 }, { 6, 10 }, { 9, 13 }, { 13, 13 } }
 };
 
 
-const int MAKE_ITEM_ARR5[8][2] = {
+const int Resources::MAKE_ITEM_ARR5[8][2] = {
 	{ 0, 0 }, { 1, 15 }, { 16, 30 }, { 31, 40 }, { 41, 50 },
 	{ 51, 60 }, { 61, 73 }, { 61, 73 }
 };
 
-const int OUTDOOR_DRAWSTRCT_INDEXES[44] = {
+const int Resources::OUTDOOR_DRAWSTRCT_INDEXES[44] = {
 	37, 38, 39, 40, 41, 44, 42, 43, 47, 45, 46,
 	48, 49, 52, 50, 51, 66, 67, 68, 69, 70, 71,
 	72, 75, 73, 74, 87, 88, 89, 90, 91, 94, 92,
 	93, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120
 };
 
-const int TOWN_MAXES[2][11] = {
+const int Resources::TOWN_MAXES[2][11] = {
 	{ 23, 13, 32, 16, 26, 16, 16, 16, 16, 16, 16 },
 	{ 26, 19, 48, 27, 26, 37, 16, 16, 16, 16, 16 }
 };
 
-const char *const TOWN_ACTION_MUSIC[14] = {
+const char *const Resources::TOWN_ACTION_MUSIC[14] = {
 	"bank.m", "smith.m", "guild.m", "tavern.m", "temple.m",
 	"grounds.m", "endgame.m", "bank.m", "sf09.m", "guild.m",
 	"tavern.m", "temple.m", "smith.m", "endgame.m"
 };
 
-const char *const TOWN_ACTION_SHAPES[4] = {
+const char *const Resources::TOWN_ACTION_SHAPES[4] = {
 	"bankr", "blck", "gild", "tvrn"
 };
 
-const int TOWN_ACTION_FILES[2][7] = {
+const int Resources::TOWN_ACTION_FILES[2][7] = {
 	{ 3, 2, 4, 2, 4, 2, 1 }, { 5, 3, 7, 5, 4, 6, 1 }
 };
 
-const char *const BANK_TEXT = "\x0D\x02\x03""c\x0B""122\x09""013"
+const char *const Resources::BANK_TEXT = "\x0D\x02\x03""c\x0B""122\x09""013"
 	"\x0C""37D\x0C""dep\x09""040\x0C""37W\x0C""dith\x09""067ESC"
 	"\x01\x09""000\x0B""000Bank of Xeen\x0B""015\n"
 	"Bank\x03l\n"
@@ -699,43 +702,43 @@ const char *const BANK_TEXT = "\x0D\x02\x03""c\x0B""122\x09""013"
 	"Gold\x03r\x09""000%s\x03l\n"
 	"Gems\x03r\x09""000%s";
 
-const char *const BLACKSMITH_TEXT = "\x01\x0D\x03""c\x0B""000\x09""000"
+const char *const Resources::BLACKSMITH_TEXT = "\x01\x0D\x03""c\x0B""000\x09""000"
 	"Store Options for\x09""039\x0B""027%s\x03""l\x0B""046\n"
 	"\x09""011\x0C""37B\x0C""drowse\n"
 	"\x09""000\x0B""090Gold\x03r\x09""000%s"
 	"\x02\x03""c\x0B""122\x09""040ESC\x01";
 
-const char *const GUILD_NOT_MEMBER_TEXT =
+const char *const Resources::GUILD_NOT_MEMBER_TEXT =
 	"\n\nYou have to be a member to shop here.";
 
-const char *const GUILD_TEXT = "\x03""c\x0B""027\x09""039%s"
+const char *const Resources::GUILD_TEXT = "\x03""c\x0B""027\x09""039%s"
 	"\x03l\x0B""046\n"
 	"\x09""012\x0C""37B\x0C""duy Spells\n"
 	"\x09""012\x0C""37S\x0C""dpell Info";
 
-const char *const TAVERN_TEXT =
+const char *const Resources::TAVERN_TEXT =
 	"\x0D\x03""c\x0B""000\x09""000Tavern Options for\x09""039"
 	"\x0B""027%s%s\x03l\x09""000"
 	"\x0B""090Gold\x03r\x09""000%s\x02\x03""c\x0B""122"
 	"\x09""021\x0C""37S\x0C""dign in\x09""060ESC\x01";
 
-const char *const FOOD_AND_DRINK =
+const char *const Resources::FOOD_AND_DRINK =
 	"\x03l\x09""017\x0B""046\x0C""37D\x0C""drink\n"
 	"\x09""017\x0C""37F\x0C""dood\n"
 	"\x09""017\x0C""37T\x0C""dip\n"
 	"\x09""017\x0C""37R\x0C""dumors";
 
-const char *const GOOD_STUFF = "\n"
+const char *const Resources::GOOD_STUFF = "\n"
 	"\n"
 	"Good Stuff\n"
 	"\n"
 	"Hit a key!";
 
-const char *const HAVE_A_DRINK = "\n\nHave a Drink\n\nHit a key!";
+const char *const Resources::HAVE_A_DRINK = "\n\nHave a Drink\n\nHit a key!";
 
-const char *const YOURE_DRUNK = "\n\nYou're Drunk\n\nHit a key!";
+const char *const Resources::YOURE_DRUNK = "\n\nYou're Drunk\n\nHit a key!";
 
-const int TAVERN_EXIT_LIST[2][6][5][2] = {
+const int Resources::TAVERN_EXIT_LIST[2][6][5][2] = {
 	{
 		{ { 21, 17 }, { 0, 0 }, { 20, 3 }, { 0, 0 }, { 0, 0 } },
 		{ { 13, 4 }, { 0, 0 }, { 19, 9 }, { 0, 0 }, { 0, 0 } },
@@ -753,7 +756,7 @@ const int TAVERN_EXIT_LIST[2][6][5][2] = {
 	}
 };
 
-const char *const TEMPLE_TEXT =
+const char *const Resources::TEMPLE_TEXT =
 	"\x0D\x03""c\x0B""000\x09""000Temple Options for"
 	"\x09""039\x0B""027%s\x03l\x09""000\x0B""046"
 	"\x0C""37H\x0C""deal\x03r\x09""000%lu\x03l\n"
@@ -762,21 +765,21 @@ const char *const TEMPLE_TEXT =
 	"\x03l\x09""000\x0B""090Gold\x03r\x09""000%s"
 	"\x02\x03""c\x0B""122\x09""040ESC\x01";
 
-const char *const EXPERIENCE_FOR_LEVEL = 
+const char *const Resources::EXPERIENCE_FOR_LEVEL = 
 	"%s needs %lu experience for level %u.";
 
-const char *const LEARNED_ALL = "%s has learned all we can teach!";
+const char *const Resources::LEARNED_ALL = "%s has learned all we can teach!";
 
-const char *const ELIGIBLE_FOR_LEVEL = "%s is eligible for level %d.";
+const char *const Resources::ELIGIBLE_FOR_LEVEL = "%s is eligible for level %d.";
 
-const char *const TRAINING_TEXT =
+const char *const Resources::TRAINING_TEXT =
 	"\x0D\x03""cTraining Options\n"
 	"\n"
 	"%s\x03l\x0B""090\x09""000Gold\x03r\x09"
 	"000%s\x02\x03""c\x0B""122\x09""021"
 	"\x0C""37T\x0C""drain\x09""060ESC\x01";
 
-const char *const GOLD_GEMS =
+const char *const Resources::GOLD_GEMS =
 	"\x03""c\x0B""000\x09""000%s\x03l\n"
 	"\n"
 	"Gold\x03r\x09""000%s\x03l\n"
@@ -784,45 +787,45 @@ const char *const GOLD_GEMS =
 	"\x0C""37o\x0C""dld\x09""040G\x0C\x03""7e"
 	"\x0C""dms\x09""067ESC\x01";
 
-const char *const GOLD_GEMS_2 =
+const char *const Resources::GOLD_GEMS_2 =
 	"\x09""000\x0B""000\x03""c%s\x03l\n"
 	"\n"
 	"\x04""077Gold\x03r\x09""000%s\x03l\n"
 	"\x04""077Gems\x03r\x09""000%s\x03l\x09""000\x0B""051\x04""077\n"
 	"\x04""077";
 
-const char *const DEPOSIT_WITHDRAWL[2] = { "Deposit", "Withdrawl" };
+const char *const Resources::DEPOSIT_WITHDRAWL[2] = { "Deposit", "Withdrawl" };
 
-const char *const NOT_ENOUGH_X_IN_THE_Y =
+const char *const Resources::NOT_ENOUGH_X_IN_THE_Y =
 	"\x03""c\x0B""012Not enough %s in the %s!\x03l";
 
-const char *const NO_X_IN_THE_Y = "\x03""c\x0B""012No %s in the %s!\x03l";
+const char *const Resources::NO_X_IN_THE_Y = "\x03""c\x0B""012No %s in the %s!\x03l";
 
-const char *const STAT_NAMES[16] = {
+const char *const Resources::STAT_NAMES[16] = {
 	"Might", "Intellect", "Personality", "Endurance", "Speed",
 	"Accuracy", "Luck", "Age", "Level", "Armor Class", "Hit Points",
 	"Spell Points", "Resistances", "Skills", "Awards", "Experience"
 };
 
-const char *const CONSUMABLE_NAMES[4] = { "Gold", "Gems", "Food", "Condition" };
+const char *const Resources::CONSUMABLE_NAMES[4] = { "Gold", "Gems", "Food", "Condition" };
 
-const char *const WHERE_NAMES[2] = { "Party", "Bank" };
+const char *const Resources::WHERE_NAMES[2] = { "Party", "Bank" };
 
-const char *const AMOUNT = "\x03""c\x09""000\x0B""051Amount\x03l\n";
+const char *const Resources::AMOUNT = "\x03""c\x09""000\x0B""051Amount\x03l\n";
 
-const char *const FOOD_PACKS_FULL = "\v007Your food packs are already full!";
+const char *const Resources::FOOD_PACKS_FULL = "\v007Your food packs are already full!";
 
-const char *const BUY_SPELLS =
+const char *const Resources::BUY_SPELLS =
 	"\x03""c\x0B""027\x09""039%s\x03l\x0B""046\n"
 	"\x09""012\x0C""37B\x0C""duy Spells\n"
 	"\x09""012\x0C""37S\x0C""dpell Info";
 
-const char *const GUILD_OPTIONS = 
+const char *const Resources::GUILD_OPTIONS = 
 	"\x0D\x0C""00\x03""c\x0B""000\x09""000Guild Options for%s"
 	"\x03l\x09""000\x0B""090Gold"
 	"\x03r\x09""000%s\x02\x03""c\x0B""122\x09""040ESC\x01";
 
-const int MISC_SPELL_INDEX[74] = {
+const int Resources::MISC_SPELL_INDEX[74] = {
 	NO_SPELL, MS_Light, MS_Awaken, MS_MagicArrow,
 	MS_FirstAid, MS_FlyingFist, MS_EnergyBlast, MS_Sleep,
 	MS_Revitalize, MS_CureWounds, MS_Sparks, MS_Shrapmetal,
@@ -844,7 +847,7 @@ const int MISC_SPELL_INDEX[74] = {
 	MS_StarBurst, MS_DivineIntervention
 };
 
-const int SPELL_COSTS[77] = {
+const int Resources::SPELL_COSTS[77] = {
 	8, 1, 5, -2, 5, -2, 20, 10, 12, 8, 3,
 	- 3, 75, 40, 12, 6, 200, 10, 100, 30, -1, 30,
 	15, 25, 10, -2, 1, 2, 7, 20, -2, -2, 100,
@@ -854,13 +857,13 @@ const int SPELL_COSTS[77] = {
 	15, 5, 4, 10, 8, 30, 4, 5, 7, 5, 0
 };
 
-const int DARK_SPELL_RANGES[12][2] = {
+const int Resources::DARK_SPELL_RANGES[12][2] = {
 	{ 0, 20 }, { 16, 35 }, { 27, 37 }, { 29, 39 }, 
 	{ 0, 17 }, { 14, 34 }, { 26, 37 }, { 29, 39 }, 
 	{ 0, 20 }, { 16, 35 }, { 27, 37 }, { 29, 39 }
 };
 
-const int CLOUDS_SPELL_OFFSETS[5][20] = {
+const int Resources::CLOUDS_SPELL_OFFSETS[5][20] = {
 	{
 		1, 10, 20, 26, 27, 38, 40, 42, 45, 50,
 		55, 59, 60, 61, 62, 68, 72, 75, 77, 77
@@ -879,7 +882,7 @@ const int CLOUDS_SPELL_OFFSETS[5][20] = {
 	}
 };
 
-const uint DARK_SPELL_OFFSETS[3][39] = {
+const uint Resources::DARK_SPELL_OFFSETS[3][39] = {
 	{
 		42, 1, 26, 59, 27, 10, 50, 68, 55, 62, 67, 73, 2,
 		5, 3, 31, 30, 52, 49, 28, 74, 0, 9, 7, 14, 8,
@@ -895,21 +898,21 @@ const uint DARK_SPELL_OFFSETS[3][39] = {
 	}
 };
 
-const int SPELL_GEM_COST[77] = {
+const int Resources::SPELL_GEM_COST[77] = {
 	0, 0, 2, 1, 2, 4, 5, 0, 0, 0, 0, 10, 10, 10, 0, 0, 20, 4, 10, 20, 1, 10,
 	5, 5, 4, 2, 0, 0, 0, 10, 3, 1, 20, 4, 0, 20, 10, 10, 1, 10, 0, 0, 0, 2,
 	2, 0, 10, 10, 10, 0, 0, 10, 3, 2, 10, 1, 10, 10, 20, 0, 0, 1, 1, 20, 5, 20,
 	5, 0, 0, 0, 0, 5, 1, 2, 0, 2, 0
 };
 
-const char *const NOT_A_SPELL_CASTER = "Not a spell caster...";
+const char *const Resources::NOT_A_SPELL_CASTER = "Not a spell caster...";
 
-const char *const SPELLS_FOR = "\xD\xC""d%s\x2\x3""c\x9""000\xB""002Spells for %s";
+const char *const Resources::SPELLS_FOR = "\xD\xC""d%s\x2\x3""c\x9""000\xB""002Spells for %s";
 
-const char *const SPELL_LINES_0_TO_9 =
+const char *const Resources::SPELL_LINES_0_TO_9 =
 	"\x2\x3l\xB""015\x9""0011\n2\n3\n4\n5\n6\n7\n8\n9\n0";
 
-const char *const SPELLS_DIALOG_SPELLS = "\x3l\xB""015"
+const char *const Resources::SPELLS_DIALOG_SPELLS = "\x3l\xB""015"
 	"\x9""010\xC""%2u%s\xC""d\x3l\n"
 	"\x9""010\xC""%2u%s\xC""d\x3l\n"
 	"\x9""010\xC""%2u%s\xC""d\x3l\n"
@@ -922,40 +925,40 @@ const char *const SPELLS_DIALOG_SPELLS = "\x3l\xB""015"
 	"\x9""010\xC""%2u%s\xC""d\x3l"
 	"\x9""004\xB""110%s - %lu\x1";
 
-const char *const SPELL_PTS = "Spell Pts";
+const char *const Resources::SPELL_PTS = "Spell Pts";
 
-const char *const GOLD = "Gold";
+const char *const Resources::GOLD = "Gold";
 
-const char *const SPELLS_PRESS_A_KEY =
+const char *const Resources::SPELLS_PRESS_A_KEY =
 	"\x3""c\xC""09%s\xC""d\x3l\n"
 	"\n"
 	"%s\x3""c\x9""000\xB""100Press a Key!";
 
-const char *const SPELLS_PURCHASE =
+const char *const Resources::SPELLS_PURCHASE =
 	"\x3l\xB""000\x9""000\xC""d%s  Do you wish to purchase "
 	"\xC""09%s\xC""d for %u?"; 
 
-const char *const MAP_TEXT =
+const char *const Resources::MAP_TEXT =
 	"\x3""c\xB""000\x9""000%s\x3l\xB""139"
 	"\x9""000X = %d\x3r\x9""000Y = %d\x3""c\x9""000%s";
 
-const char *const LIGHT_COUNT_TEXT = "\x3l\n\n\t024Light\x3r\t124%d";
+const char *const Resources::LIGHT_COUNT_TEXT = "\x3l\n\n\t024Light\x3r\t124%d";
 
-const char *const FIRE_RESISTENCE_TEXT = "%c%sFire%s%u";
+const char *const Resources::FIRE_RESISTENCE_TEXT = "%c%sFire%s%u";
 
-const char *const ELECRICITY_RESISTENCE_TEXT = "%c%sElectricity%s%u";
+const char *const Resources::ELECRICITY_RESISTENCE_TEXT = "%c%sElectricity%s%u";
 
-const char *const COLD_RESISTENCE_TEXT = "c%sCold%s%u";
+const char *const Resources::COLD_RESISTENCE_TEXT = "c%sCold%s%u";
 
-const char *const POISON_RESISTENCE_TEXT = "%c%sPoison/Acid%s%u";
+const char *const Resources::POISON_RESISTENCE_TEXT = "%c%sPoison/Acid%s%u";
 
-const char *const CLAIRVOYANCE_TEXT = "%c%sClairvoyance%s";
+const char *const Resources::CLAIRVOYANCE_TEXT = "%c%sClairvoyance%s";
 
-const char *const LEVITATE_TEXT = "%c%sLevitate%s";
+const char *const Resources::LEVITATE_TEXT = "%c%sLevitate%s";
 
-const char *const WALK_ON_WATER_TEXT = "%c%sWalk on Water";
+const char *const Resources::WALK_ON_WATER_TEXT = "%c%sWalk on Water";
 
-const char *const GAME_INFORMATION = 
+const char *const Resources::GAME_INFORMATION = 
 	"\xD\x3""c\x9""000\xB""001\xC""37%s of Xeen\xC""d\n"
 	"Game Information\n"
 	"\n"
@@ -964,16 +967,16 @@ const char *const GAME_INFORMATION =
 	"\x9""032Time\x9""072Day\x9""112Year\n"
 	"\x9""032\xC""37%d:%02d%c\x9""072%u\x9""112%u\xC""d%s";
 
-const char *const WORLD_GAME_TEXT = "World";
-const char *const DARKSIDE_GAME_TEXT = "Darkside";
-const char *const CLOUDS_GAME_TEXT = "Clouds";
-const char *const SWORDS_GAME_TEXT = "Swords";
+const char *const Resources::WORLD_GAME_TEXT = "World";
+const char *const Resources::DARKSIDE_GAME_TEXT = "Darkside";
+const char *const Resources::CLOUDS_GAME_TEXT = "Clouds";
+const char *const Resources::SWORDS_GAME_TEXT = "Swords";
 
-const char *const WEEK_DAY_STRINGS[10] = {
+const char *const Resources::WEEK_DAY_STRINGS[10] = {
 	"Ten", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"
 };
 
-const char *const CHARACTER_DETAILS =
+const char *const Resources::CHARACTER_DETAILS =
 	"\x3l\xB""041\x9""196%s\x9""000\xB""002%s : %s %s %s"
 	"\x3r\x9""053\xB""028\xC%02u%u\xC""d\x9""103\xC""%02u%u\xC""d"
 	"\x3l\x9""131\xC""%02u%d\xC""d\x9""196\xC""15%lu\xC""d\x3r"
@@ -987,11 +990,11 @@ const char *const CHARACTER_DETAILS =
 	"\x3l\x9""131\xC""15%u\xC""d\x9""196\xC""%02u%s\xC""d"
 	"\x9""230%s%s%s%s\xC""d";
 
-const char *const PARTY_GOLD = "Party Gold";
+const char *const Resources::PARTY_GOLD = "Party Gold";
 
-const char *const PLUS_14 = "14+";
+const char *const Resources::PLUS_14 = "14+";
 
-const char *const CHARACTER_TEMPLATE =
+const char *const Resources::CHARACTER_TEMPLATE =
 	"\x1\xC""00\xD\x3l\x9""029\xB""018Mgt\x9""080Acy\x9""131H.P.\x9""196Experience"
 	"\x9""029\xB""041Int\x9""080Lck\x9""131S.P.\x9""029\xB""064Per\x9""080Age"
 	"\x9""131Resis\x9""196Party Gems\x9""029\xB""087End\x9""080Lvl\x9""131Skills"
@@ -999,36 +1002,36 @@ const char *const CHARACTER_TEMPLATE =
 	"\x9""290\xB""025\xC""37I\xC""dtem\x9""290\xB""057\xC""37Q"
 	"\xC""duick\x9""290\xB""089\xC""37E\xC""dxch\x9""290\xB""121Exit\x3l%s";
 
-const char *const EXCHANGING_IN_COMBAT = "\x3""c\xB""007\x9""000Exchanging in combat is not allowed!";
+const char *const Resources::EXCHANGING_IN_COMBAT = "\x3""c\xB""007\x9""000Exchanging in combat is not allowed!";
 
-const char *const CURRENT_MAXIMUM_RATING_TEXT = "\x2\x3""c%s\n"
+const char *const Resources::CURRENT_MAXIMUM_RATING_TEXT = "\x2\x3""c%s\n"
 	"Current / Maximum\n"
 	"\x3r\x9""054%lu\x3l\x9""058/ %lu\n"
 	"\x3""cRating: %s";
 
-const char *const CURRENT_MAXIMUM_TEXT = "\x2\x3""c%s\n"
+const char *const Resources::CURRENT_MAXIMUM_TEXT = "\x2\x3""c%s\n"
 	"Current / Maximum\n"
 	"\x3r\x9""054%u\x3l\x9""058/ %u";
 
-const char *const RATING_TEXT[24] = {
+const char *const Resources::RATING_TEXT[24] = {
 	"Nonexistant", "Very Poor", "Poor", "Very Low", "Low", "Averarage", "Good",
 	"Very Good", "High", "Very High", "Great", "Super", "Amazing", "Incredible",
 	"Gigantic", "Fantastic", "Astoundig", "Astonishing", "Monumental", "Tremendous",
 	"Collosal", "Awesome", "AweInspiring", "aUltimate"
 };
 
-const char *const AGE_TEXT = "\x2\x3""c%s\n"
+const char *const Resources::AGE_TEXT = "\x2\x3""c%s\n"
 	"Current / Natural\n"
 	"\x3r\x9""057%u\x3l\x9""061/ %u\n"
 	"\x3""cBorn: %u / %u\x1";
 
-const char *const LEVEL_TEXT =
+const char *const Resources::LEVEL_TEXT =
 	"\x2\x3""c%s\n"
 	"Current / Maximum\n"
 	"\x3r\x9""054%u\x3l\x9""058/ %u\n"
 	"\x3""c%u Attack%s/Round\x1";
 
-const char *const RESISTENCES_TEXT = 
+const char *const Resources::RESISTENCES_TEXT = 
 	"\x2\x3""c%s\x3l\n"
 	"\x9""020Fire\x9""100%u\n"
 	"\x9""020Cold\x9""100%u\n"
@@ -1037,32 +1040,32 @@ const char *const RESISTENCES_TEXT =
 	"\x9""020Energy\x9""100%u\n"
 	"\x9""020Magic\x9""100%u";
 
-const char *const NONE = "\n\x9""020";
+const char *const Resources::NONE = "\n\x9""020";
 
-const char *const EXPERIENCE_TEXT = "\x2\x3""c%s\x3l\n"
+const char *const Resources::EXPERIENCE_TEXT = "\x2\x3""c%s\x3l\n"
 	"\x9""010Current:\x9""070%lu\n"
 	"\x9""010Next Level:\x9""070%s\x1";
 
-const char *const ELIGIBLE = "\xC""12Eligible\xC""d";
+const char *const Resources::ELIGIBLE = "\xC""12Eligible\xC""d";
 
-const char *const IN_PARTY_IN_BANK =
+const char *const Resources::IN_PARTY_IN_BANK =
 	"\x2\x3""cParty %s\n"
 	"%lu on hand\n"
 	"%lu in bank\x1\x3l";
 
-const char *const FOOD_TEXT =
+const char *const Resources::FOOD_TEXT =
 	"\x2\x3""cParty %s\n"
 	"%u on hand\n"
    "Enough for %u day%s\x3l";
 
-const char *const EXCHANGE_WITH_WHOM = "\t010\v005Exchange with whom?";
+const char *const Resources::EXCHANGE_WITH_WHOM = "\t010\v005Exchange with whom?";
 
-const char *const QUICK_REF_LINE = 
+const char *const Resources::QUICK_REF_LINE = 
 	"\xB%3d\x9""007%u)\x9""027%s\x9""110%c%c%c\x3r\x9""160\xC%02u%u\xC""d"
 	"\x3l\x9""170\xC%02u%d\xC""d\x9""208\xC%02u%u\xC""d\x9""247\xC"
 	"%02u%u\xC""d\x9""270\xC%02u%c%c%c%c\xC""d";
 
-const char *const QUICK_REFERENCE =
+const char *const Resources::QUICK_REFERENCE =
 	"\xD\x3""cQuick Reference Chart\xB""012\x3l"
 	"\x9""007#\x9""027Name\x9""110Cls\x9""140Lvl\x9""176H.P."
 	"\x9""212S.P.\x9""241A.C.\x9""270Cond"
@@ -1070,39 +1073,39 @@ const char *const QUICK_REFERENCE =
 	"\xB""110\x9""064\x3""cGold\x9""144Gems\x9""224Food\xB""119"
 	"\x9""064\xC""15%lu\x9""144%lu\x9""224%u day%s\xC""d";
 
-const uint BLACKSMITH_MAP_IDS[2][4] = { { 28, 30, 73, 49 }, { 29, 31, 37, 43 } };
+const uint Resources::BLACKSMITH_MAP_IDS[2][4] = { { 28, 30, 73, 49 }, { 29, 31, 37, 43 } };
 
-const char *const ITEMS_DIALOG_TEXT1 =
+const char *const Resources::ITEMS_DIALOG_TEXT1 =
 	"\r\x2\x3""c\v021\t017\f37W\fdeap\t051\f37A\fdrmor\t085A"
 	"\f37c\fdces\t119\f37M\fdisc\t153%s\t187%s\t221%s"
 	"\t255%s\t289Exit";
-const char *const ITEMS_DIALOG_TEXT2 =
+const char *const Resources::ITEMS_DIALOG_TEXT2 =
 	"\r\x2\x3""c\v021\t017\f37W\fdeap\t051\f37A\fdrmor\t085A"
 	"\f37c\fdces\t119\f37M\fdisc\t153\f37%s\t289Exit";
-const char *const ITEMS_DIALOG_LINE1 = "\x3r\f%02u\f023%2d)\x3l\t028%s\n";
-const char *const ITEMS_DIALOG_LINE2 = "\x3r\f%02u\t023%2d)\x3l\t028%s\x3r\t000%lu\n";
-
-const char *const BTN_BUY = "\f37B\fduy";
-const char *const BTN_SELL = "\f37S\fdell";
-const char *const BTN_IDENTIFY = "\f37I\fddentify";
-const char *const BTN_FIX = "\f37F\fdix";
-const char *const BTN_USE = "\f37U\fdse";
-const char *const BTN_EQUIP = "\f37E\fdquip";
-const char *const BTN_REMOVE = "\f37R\fdem";
-const char *const BTN_DISCARD = "\f37D\fdisc";
-const char *const BTN_QUEST = "\f37Q\fduest";
-const char *const BTN_ENCHANT = "E\fdnchant";
-const char *const BTN_RECHARGE = "R\fdechrg";
-const char *const BTN_GOLD = "G\fdold";
-
-const char *const ITEM_BROKEN = "\f32broken ";
-const char *const ITEM_CURSED = "\f09cursed ";
-const char *const BONUS_NAMES[7] = {
+const char *const Resources::ITEMS_DIALOG_LINE1 = "\x3r\f%02u\f023%2d)\x3l\t028%s\n";
+const char *const Resources::ITEMS_DIALOG_LINE2 = "\x3r\f%02u\t023%2d)\x3l\t028%s\x3r\t000%lu\n";
+
+const char *const Resources::BTN_BUY = "\f37B\fduy";
+const char *const Resources::BTN_SELL = "\f37S\fdell";
+const char *const Resources::BTN_IDENTIFY = "\f37I\fddentify";
+const char *const Resources::BTN_FIX = "\f37F\fdix";
+const char *const Resources::BTN_USE = "\f37U\fdse";
+const char *const Resources::BTN_EQUIP = "\f37E\fdquip";
+const char *const Resources::BTN_REMOVE = "\f37R\fdem";
+const char *const Resources::BTN_DISCARD = "\f37D\fdisc";
+const char *const Resources::BTN_QUEST = "\f37Q\fduest";
+const char *const Resources::BTN_ENCHANT = "E\fdnchant";
+const char *const Resources::BTN_RECHARGE = "R\fdechrg";
+const char *const Resources::BTN_GOLD = "G\fdold";
+
+const char *const Resources::ITEM_BROKEN = "\f32broken ";
+const char *const Resources::ITEM_CURSED = "\f09cursed ";
+const char *const Resources::BONUS_NAMES[7] = {
 	"", "Dragon Slayer", "Undead Eater", "Golem Smasher",
 	"Bug Zapper", "Monster Masher", "Beast Bopper"
 };
 
-const char *const WEAPON_NAMES[35] = {
+const char *const Resources::WEAPON_NAMES[35] = {
 	nullptr, "long sword ", "short sword ", "broad sword ", "scimitar ", 
 	"cutlass ", "sabre ", "club ", "hand axe ", "katana ", "nunchakas ", 
 	"wakazashi ", "dagger ", "mace ", "flail ", "cudgel ", "maul ", "spear ", 
@@ -1111,42 +1114,43 @@ const char *const WEAPON_NAMES[35] = {
 	"short bow ", "long bow ", "crossbow ", "sling ", "Xeen Slayer Sword"
 };
 
-const char *const ARMOR_NAMES[14] = {
+const char *const Resources::ARMOR_NAMES[14] = {
 	nullptr, "Robes ", "Scale rmor ", "ring mail ", "chain mail ",
 	"splint mail ", "plate mail ", "plate armor ", "shield ",
 	"helm ", "boots ", "cloak ", "cape ", "gauntlets "
 };
 
-const char *const ACCESSORY_NAMES[11] = {
+const char *const Resources::ACCESSORY_NAMES[11] = {
 	nullptr, "ring ", "belt ", "broach ", "medal ", "charm ", "cameo ",
 	"scarab ", "pendant ", "necklace ", "amulet "
 };
 
-const char *const MISC_NAMES[22] = {
+const char *const Resources::MISC_NAMES[22] = {
 	nullptr, "rod ", "jewel ", "gem ", "box ", "orb ", "horn ", "coin ",
 	"wand ", "whistle ", "potion ", "scroll ", "RogueVM", 
 	"bogusg", "bogus", "bogus", "bogus", "bogus", 
 	"bogus", "bogus", "bogus", "bogus"
 };
 
-const char *const *ITEM_NAMES[4] = {
-	&WEAPON_NAMES[0], &ARMOR_NAMES[0], &ACCESSORY_NAMES[0], &MISC_NAMES[0]
+const char *const *Resources::ITEM_NAMES[4] = {
+	&Resources::WEAPON_NAMES[0], &Resources::ARMOR_NAMES[0],
+	&Resources::ACCESSORY_NAMES[0], &Resources::MISC_NAMES[0]
 };
 
-const char *const ELEMENTAL_NAMES[6] = {
+const char *const Resources::ELEMENTAL_NAMES[6] = {
 	"Fire", "Elec", "Cold", "Acid/Poison", "Energy", "Magic"
 };
 
-const char *const ATTRIBUTE_NAMES[10] = {
+const char *const Resources::ATTRIBUTE_NAMES[10] = {
 	"might", "Intellect", "Personality", "Speed", "accuracy", "Luck",
 	"Hit Points", "Spell Points", "Armor Class", "Thievery"
 };
 
-const char *const EFFECTIVENESS_NAMES[7] = {
+const char *const Resources::EFFECTIVENESS_NAMES[7] = {
 	nullptr, "Dragons", "Undead", "Golems", "Bugs", "Monsters", "Beasts"
 };
 
-const char *const QUEST_ITEM_NAMES[85] = {
+const char *const Resources::QUEST_ITEM_NAMES[85] = {
 	"Deed to New Castle",
 	"Crystal Key to Witch Tower",
 	"Skeleton Key to Darzog's Tower",
@@ -1234,22 +1238,22 @@ const char *const QUEST_ITEM_NAMES[85] = {
 	"Energy Disk"
 };
 
-const int WEAPON_BASE_COSTS[35] = {
+const int Resources::WEAPON_BASE_COSTS[35] = {
 	0, 50, 15, 100, 80, 40, 60, 1, 10, 150, 30, 60, 8, 50,
 	100, 15, 30, 15, 200, 80, 250, 150, 400, 100, 40, 120,
 	300, 100, 200, 300, 25, 100, 50, 15, 0
 };
-const int ARMOR_BASE_COSTS[25] = {
+const int Resources::ARMOR_BASE_COSTS[25] = {
 	0, 20, 100, 200, 400, 600, 1000, 2000, 100, 60, 40, 250, 200, 100
 };
-const int ACCESSORY_BASE_COSTS[11] = {
+const int Resources::ACCESSORY_BASE_COSTS[11] = {
 	0, 100, 100, 250, 100, 50, 300, 200, 500, 1000, 2000
 };
-const int MISC_MATERIAL_COSTS[22] = {
+const int Resources::MISC_MATERIAL_COSTS[22] = {
 	0, 50, 1000, 500, 10, 100, 20, 10, 50, 10, 10, 100,
 	1, 1, 1, 1, 1, 1, 1, 1, 1, 1
 };
-const int MISC_BASE_COSTS[76] = {
+const int Resources::MISC_BASE_COSTS[76] = {
 	0, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
 	100, 100, 100, 100, 200, 200, 200, 200, 200, 200, 200, 200,
 	200, 200, 200, 200, 200, 200, 200, 300, 300, 300, 300, 300,
@@ -1258,15 +1262,15 @@ const int MISC_BASE_COSTS[76] = {
 	500, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,
 	600, 600, 600, 600
 };
-const int METAL_BASE_MULTIPLIERS[22] = {
+const int Resources::METAL_BASE_MULTIPLIERS[22] = {
 	10, 25, 5, 75, 2, 5, 10, 20, 50, 2, 3, 5, 10, 20, 30, 40,
 	50, 60, 70, 80, 90, 100
 };
-const int ITEM_SKILL_DIVISORS[4] = { 1, 2, 100, 10 };
+const int Resources::ITEM_SKILL_DIVISORS[4] = { 1, 2, 100, 10 };
 
-const int RESTRICTION_OFFSETS[4] = { 0, 35, 49, 60 };
+const int Resources::RESTRICTION_OFFSETS[4] = { 0, 35, 49, 60 };
 
-const int ITEM_RESTRICTIONS[86] = {
+const int Resources::ITEM_RESTRICTIONS[86] = {
 	0, 86, 86, 86, 86, 86, 86, 0, 6, 239, 239, 239, 2, 4, 4, 4, 4, 
 	6, 70, 70, 70, 70, 94, 70, 0, 4, 239, 86, 86, 86, 70, 70, 70, 70, 
 	0, 0, 0, 68, 100, 116, 125, 255, 255, 85, 0, 0, 0, 0, 0, 0, 0, 0, 
@@ -1274,94 +1278,94 @@ const int ITEM_RESTRICTIONS[86] = {
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
 };
 
-const char *const NOT_PROFICIENT =
+const char *const Resources::NOT_PROFICIENT =
 	"\t000\v007\x3""c%ss are not proficient with a %s!";
 
-const char *const NO_ITEMS_AVAILABLE = "\x3""c\n"
+const char *const Resources::NO_ITEMS_AVAILABLE = "\x3""c\n"
 	"\t000No items available.";
 
-const char *const CATEGORY_NAMES[4] = { "Weapons", "Armor", "Accessories", "Miscellaneous" };
+const char *const Resources::CATEGORY_NAMES[4] = { "Weapons", "Armor", "Accessories", "Miscellaneous" };
 
-const char *const X_FOR_THE_Y =
+const char *const Resources::X_FOR_THE_Y =
 	"\x1\fd\r%s\v000\t000%s for %s the %s%s\v011\x2%s%s%s%s%s%s%s%s%s\x1\fd";
 
-const char *const X_FOR_Y =
+const char *const Resources::X_FOR_Y =
 	"\x1\xC""d\r\x3l\v000\t000%s for %s\x3r\t000%s\x3l\v011\x2%s%s%s%s%s%s%s%s%s\x1\xC""d";
 
-const char *const X_FOR_Y_GOLD =
+const char *const Resources::X_FOR_Y_GOLD =
 	"\x1\fd\r\x3l\v000\t000%s for %s\t150Gold - %lu%s\x3l\v011"
 	"\x2%s%s%s%s%s%s%s%s%s\x1\fd";
 
-const char *const FMT_CHARGES = "\x3rr\t000Charges\x3l";
+const char *const Resources::FMT_CHARGES = "\x3rr\t000Charges\x3l";
 
-const char *const AVAILABLE_GOLD_COST =
+const char *const Resources::AVAILABLE_GOLD_COST =
 	"\x1\fd\r\x3l\v000\t000Available %s%s\t150Gold - %lu\x3r\t000Cost"
 	"\x3l\v011\x2%s%s%s%s%s%s%s%s%s\x1\xC""d";
 
-const char *const CHARGES = "Charges";
+const char *const Resources::CHARGES = "Charges";
 
-const char *const COST = "Cost";
+const char *const Resources::COST = "Cost";
 
-const char *const ITEM_ACTIONS[7] = {
+const char *const Resources::ITEM_ACTIONS[7] = {
 	"Equip", "Remove", "Use", "Discard", "Enchant", "Recharge", "Gold"
 };
-const char *const WHICH_ITEM = "\t010\v005%s which item?";
+const char *const Resources::WHICH_ITEM = "\t010\v005%s which item?";
 
-const char *const WHATS_YOUR_HURRY = "\v007What's your hurry?\n"
+const char *const Resources::WHATS_YOUR_HURRY = "\v007What's your hurry?\n"
 	"Wait till you get out of here!";
 
-const char *const USE_ITEM_IN_COMBAT = 
+const char *const Resources::USE_ITEM_IN_COMBAT = 
 	"\v007To use an item in Combat, invoke the Use command on your turn!";
 
-const char *const NO_SPECIAL_ABILITIES = "\v005\x3""c%s\fdhas no special abilities!";
+const char *const Resources::NO_SPECIAL_ABILITIES = "\v005\x3""c%s\fdhas no special abilities!";
 
-const char *const CANT_CAST_WHILE_ENGAGED = "\x3""c\v007Can't cast %s while engaged!";
+const char *const Resources::CANT_CAST_WHILE_ENGAGED = "\x3""c\v007Can't cast %s while engaged!";
 
-const char *const EQUIPPED_ALL_YOU_CAN = "\x3""c\v007You have equipped all the %ss you can!";
-const char *const REMOVE_X_TO_EQUIP_Y = "\x3""c\v007You must remove %sto equip %s\x8!";
-const char *const RING = "ring";
-const char *const MEDAL = "medal";
+const char *const Resources::EQUIPPED_ALL_YOU_CAN = "\x3""c\v007You have equipped all the %ss you can!";
+const char *const Resources::REMOVE_X_TO_EQUIP_Y = "\x3""c\v007You must remove %sto equip %s\x8!";
+const char *const Resources::RING = "ring";
+const char *const Resources::MEDAL = "medal";
 
-const char *const CANNOT_REMOVE_CURSED_ITEM = "\x3""You cannot remove a cursed item!";
+const char *const Resources::CANNOT_REMOVE_CURSED_ITEM = "\x3""You cannot remove a cursed item!";
 
-const char *const CANNOT_DISCARD_CURSED_ITEM = "\3x""cYou cannot discard a cursed item!";
+const char *const Resources::CANNOT_DISCARD_CURSED_ITEM = "\3x""cYou cannot discard a cursed item!";
 
-const char *const PERMANENTLY_DISCARD = "\v000\t000\x03lPermanently discard %s\fd?";
+const char *const Resources::PERMANENTLY_DISCARD = "\v000\t000\x03lPermanently discard %s\fd?";
 
-const char *const BACKPACK_IS_FULL = "\v005\x3""c\fd%s's backpack is full.";
+const char *const Resources::BACKPACK_IS_FULL = "\v005\x3""c\fd%s's backpack is full.";
 
-const char *const CATEGORY_BACKPACK_IS_FULL[4] = {
+const char *const Resources::CATEGORY_BACKPACK_IS_FULL[4] = {
 	"\v010\t000\x3""c%s's weapons backpack is full.",
 	"\v010\t000\x3""c%s's armor backpack is full.",
 	"\v010\t000\x3""c%s's accessories backpack is full.",
 	"\v010\t000\x3""c%s's miscellaneous backpack is full."
 };
 
-const char *const BUY_X_FOR_Y_GOLD = "\x3l\v000\t000\fdBuy %s\fd for %lu gold?";
+const char *const Resources::BUY_X_FOR_Y_GOLD = "\x3l\v000\t000\fdBuy %s\fd for %lu gold?";
 
-const char *const SELL_X_FOR_Y_GOLD = "\x3l\v000\t000\fdSell %s\fd for %lu gold?";
+const char *const Resources::SELL_X_FOR_Y_GOLD = "\x3l\v000\t000\fdSell %s\fd for %lu gold?";
 
-const char *const NO_NEED_OF_THIS = "\v005\x3""c\fdWe have no need of this %s\f!";
+const char *const Resources::NO_NEED_OF_THIS = "\v005\x3""c\fdWe have no need of this %s\f!";
 
-const char *const NOT_RECHARGABLE = "\v012\x3""c\fdNot Rechargeable.  %s";
+const char *const Resources::NOT_RECHARGABLE = "\v012\x3""c\fdNot Rechargeable.  %s";
 
-const char *const NOT_ENCHANTABLE = "\v012\t000\x3""cNot Enchantable.  %s";
+const char *const Resources::NOT_ENCHANTABLE = "\v012\t000\x3""cNot Enchantable.  %s";
 
-const char *const SPELL_FAILED = "Spell Failed!";
+const char *const Resources::SPELL_FAILED = "Spell Failed!";
 
-const char *const ITEM_NOT_BROKEN =  "\fdThat item is not broken!";
+const char *const Resources::ITEM_NOT_BROKEN =  "\fdThat item is not broken!";
 
-const char *const FIX_IDENTIFY[2] = { "Fix", "Identify" };
+const char *const Resources::FIX_IDENTIFY[2] = { "Fix", "Identify" };
 
-const char *const FIX_IDENTIFY_GOLD = "\x3l\v000\t000%s %s\fd for %lu gold?";
+const char *const Resources::FIX_IDENTIFY_GOLD = "\x3l\v000\t000%s %s\fd for %lu gold?";
 
-const char *const IDENTIFY_ITEM_MSG = "\fd\v000\t000\x3""cIdentify Item\x3l\n"
+const char *const Resources::IDENTIFY_ITEM_MSG = "\fd\v000\t000\x3""cIdentify Item\x3l\n"
 	"\n"
 	"\v012%s\fd\n"
 	"\n"
 	"%s";
 
-const char *const ITEM_DETAILS =
+const char *const Resources::ITEM_DETAILS =
 	"Proficient Classes\t132:\t140%s\n"
 	"to Hit Modifier\t132:\t140%s\n"
 	"Physical Damage\t132:\t140%s\n"
@@ -1371,31 +1375,31 @@ const char *const ITEM_DETAILS =
 	"Attribute Bonus\t132:\t140%s\n"
 	"Special Power\t132:\t140%s";
 
-const char *const ALL = "All";
-const char *const FIELD_NONE = "None";
-const char *const DAMAGE_X_TO_Y = "%d to %d";
-const char *const ELEMENTAL_XY_DAMAGE = "%+d %s Damage";
-const char *const ATTR_XY_BONUS = "%+d %s";
-const char *const EFFECTIVE_AGAINST = "x3 vs %s";
+const char *const Resources::ALL = "All";
+const char *const Resources::FIELD_NONE = "None";
+const char *const Resources::DAMAGE_X_TO_Y = "%d to %d";
+const char *const Resources::ELEMENTAL_XY_DAMAGE = "%+d %s Damage";
+const char *const Resources::ATTR_XY_BONUS = "%+d %s";
+const char *const Resources::EFFECTIVE_AGAINST = "x3 vs %s";
 
-const char *const QUESTS_DIALOG_TEXT =
+const char *const Resources::QUESTS_DIALOG_TEXT =
 	"\r\x2\x3""c\v021\t017\f37I\fdtems\t085\f37Q\fduests\t153"
 	"\f37A\fduto Notes	221\f37U\fdp\t255\f37D\fdown"
 	"\t289Exit";
-const char *const CLOUDS_OF_XEEN_LINE = "\b \b*-- \f04Clouds of Xeen\fd --";
-const char *const DARKSIDE_OF_XEEN_LINE = "\b \b*-- \f04Darkside of Xeen\fd --";
+const char *const Resources::CLOUDS_OF_XEEN_LINE = "\b \b*-- \f04Clouds of Xeen\fd --";
+const char *const Resources::DARKSIDE_OF_XEEN_LINE = "\b \b*-- \f04Darkside of Xeen\fd --";
 
-const char *const NO_QUEST_ITEMS =
+const char *const Resources::NO_QUEST_ITEMS =
 	"\r\x3""c\v000	000Quest Items\x3l\x2\n"
 	"\n"
 	"\x3""cNo Quest Items";
-const char *const NO_CURRENT_QUESTS =
+const char *const Resources::NO_CURRENT_QUESTS =
 	"\x3""c\v000\t000\n"
 	"\n"
 	"No Current Quests";
-const char *const NO_AUTO_NOTES = "\x3""cNo Auto Notes";
+const char *const Resources::NO_AUTO_NOTES = "\x3""cNo Auto Notes";
 
-const char *const QUEST_ITEMS_DATA =
+const char *const Resources::QUEST_ITEMS_DATA =
 	"\r\x1\fd\x3""c\v000\t000Quest Items\x3l\x2\n"
 	"\f04 * \fd%s\n"
 	"\f04 * \fd%s\n"
@@ -1406,14 +1410,14 @@ const char *const QUEST_ITEMS_DATA =
 	"\f04 * \fd%s\n"
 	"\f04 * \fd%s\n"
 	"\f04 * \fd%s";
-const char *const CURRENT_QUESTS_DATA = 
+const char *const Resources::CURRENT_QUESTS_DATA = 
 	"\r\x1\fd\x3""c\t000\v000Current Quests\x3l\x2\n"
 	"%s\n"
 	"\n"
 	"%s\n"
 	"\n"
 	"%s";
-const char *const AUTO_NOTES_DATA =
+const char *const Resources::AUTO_NOTES_DATA =
 	"\r\x1\fd\x3""c\t000\v000Auto Notes\x3l\x2\n"
 	"%s\x3l\n"
 	"%s\x3l\n"
@@ -1425,35 +1429,35 @@ const char *const AUTO_NOTES_DATA =
 	"%s\x3l\n"
 	"%s\x3l";
 
-const char *const REST_COMPLETE = 
+const char *const Resources::REST_COMPLETE = 
 	"\v000\t0008 hours pass.  Rest complete.\n"
 	"%s\n"
 	"%d food consumed.";
-const char *const PARTY_IS_STARVING = "\f07The Party is Starving!\fd";
-const char *const HIT_SPELL_POINTS_RESTORED = "Hit Pts and Spell Pts restored.";
-const char *const TOO_DANGEROUS_TO_REST = "Too dangerous to rest here!";
-const char *const SOME_CHARS_MAY_DIE = "Some Chars may die. Rest anyway?";
+const char *const Resources::PARTY_IS_STARVING = "\f07The Party is Starving!\fd";
+const char *const Resources::HIT_SPELL_POINTS_RESTORED = "Hit Pts and Spell Pts restored.";
+const char *const Resources::TOO_DANGEROUS_TO_REST = "Too dangerous to rest here!";
+const char *const Resources::SOME_CHARS_MAY_DIE = "Some Chars may die. Rest anyway?";
 
-const char *const CANT_DISMISS_LAST_CHAR = "You cannot dismiss your last character!";
+const char *const Resources::CANT_DISMISS_LAST_CHAR = "You cannot dismiss your last character!";
 
-const char *const REMOVE_DELETE[2] = { "Remove", "Delete" };
+const char *const Resources::REMOVE_DELETE[2] = { "Remove", "Delete" };
 
-const char *const REMOVE_OR_DELETE_WHICH = "\x3l\t010\v005%s which character?";
+const char *const Resources::REMOVE_OR_DELETE_WHICH = "\x3l\t010\v005%s which character?";
 
-const char *const YOUR_PARTY_IS_FULL = "\v007Your party is full!";
+const char *const Resources::YOUR_PARTY_IS_FULL = "\v007Your party is full!";
 
-const char *const HAS_SLAYER_SWORD =
+const char *const Resources::HAS_SLAYER_SWORD =
 	"\v000\t000This character has the Xeen Slayer Sword and cannot be deleted!";
-const char *const SURE_TO_DELETE_CHAR = 
+const char *const Resources::SURE_TO_DELETE_CHAR = 
 	"Are you sure you want to delete %s the %s?";
 
-const char *const CREATE_CHAR_DETAILS = 
+const char *const Resources::CREATE_CHAR_DETAILS = 
 	"\f04\x3""c\x2\t144\v119\f37R\f04oll\t144\v149\f37C\f04reate"
 	"\t144\v179\f37ESC\f04\x3l\x1\t195\v021\f37M\f04gt"
 	"\t195\v045\f37I\f04nt\t195\v069\f37P\f04er\t195\v093\f37E\f04nd"
 	"\t195\v116\f37S\f04pd\t195\v140\f37A\f04cy\t195\v164\f37L\f04ck%s";
 
-const char *const NEW_CHAR_STATS =
+const char *const Resources::NEW_CHAR_STATS =
 	"\f04\x3l\t022\v148Race\t055: %s\n"
 	"\t022Sex\t055: %s\n"
 	"\t022Class\t055:\n"
@@ -1464,23 +1468,23 @@ const char *const NEW_CHAR_STATS =
 	"Barbarian\t242\v108\f%2dDruid\t242\v119\f%2dRanger\f04\x3""c"
 	"\t265\v142Skills\x3l\t223\v155%s\t223\v170%s%s";
 
-const char *const NAME_FOR_NEW_CHARACTER =
+const char *const Resources::NAME_FOR_NEW_CHARACTER =
 	"\x3""cEnter a Name for this Character";
-const char *const SELECT_CLASS_BEFORE_SAVING =
+const char *const Resources::SELECT_CLASS_BEFORE_SAVING =
 	"\v006\x3""cSelect a Class before saving.\x3l";
-const char *const EXCHANGE_ATTR_WITH = "Exchange %s with...";
-
-const int NEW_CHAR_SKILLS[10] = { 1, 5, -1, -1, 4, 0, 0, -1, 6, 11 };
-const int NEW_CHAR_SKILLS_LEN[10] = { 11, 8, 0, 0, 12, 8, 8, 0, 9, 11 };
-const int NEW_CHAR_RACE_SKILLS[10] = { 14, -1, 17, 16, -1, 0, 0, 0, 0, 0 };
-
-const int RACE_MAGIC_RESISTENCES[5] = { 7, 5, 20, 0, 0 };
-const int RACE_FIRE_RESISTENCES[5] = { 7, 0, 2, 5, 10 };
-const int RACE_ELECTRIC_RESISTENCES[5] = { 7, 0, 2, 5, 10 };
-const int RACE_COLD_RESISTENCES[5] = { 7, 0, 2, 5, 10 };
-const int RACE_ENERGY_RESISTENCES[5] = { 7, 5, 2, 5, 0 };
-const int RACE_POISON_RESISTENCES[5] = { 7, 0, 2, 20, 0 };
-const int NEW_CHARACTER_SPELLS[10][4] = {
+const char *const Resources::EXCHANGE_ATTR_WITH = "Exchange %s with...";
+
+const int Resources::NEW_CHAR_SKILLS[10] = { 1, 5, -1, -1, 4, 0, 0, -1, 6, 11 };
+const int Resources::NEW_CHAR_SKILLS_LEN[10] = { 11, 8, 0, 0, 12, 8, 8, 0, 9, 11 };
+const int Resources::NEW_CHAR_RACE_SKILLS[10] = { 14, -1, 17, 16, -1, 0, 0, 0, 0, 0 };
+
+const int Resources::RACE_MAGIC_RESISTENCES[5] = { 7, 5, 20, 0, 0 };
+const int Resources::RACE_FIRE_RESISTENCES[5] = { 7, 0, 2, 5, 10 };
+const int Resources::RACE_ELECTRIC_RESISTENCES[5] = { 7, 0, 2, 5, 10 };
+const int Resources::RACE_COLD_RESISTENCES[5] = { 7, 0, 2, 5, 10 };
+const int Resources::RACE_ENERGY_RESISTENCES[5] = { 7, 5, 2, 5, 0 };
+const int Resources::RACE_POISON_RESISTENCES[5] = { 7, 0, 2, 20, 0 };
+const int Resources::NEW_CHARACTER_SPELLS[10][4] = {
 	{ -1, -1, -1, -1 },
 	{ 21, -1, -1, -1 },
 	{ 22, -1, -1, -1 },
@@ -1493,12 +1497,12 @@ const int NEW_CHARACTER_SPELLS[10][4] = {
 	{ 20, 1, -1, -1 }
 };
 
-const char *const COMBAT_DETAILS = "\r\f00\x3""c\v000\t000\x2""Combat%s%s%s\x1";
+const char *const Resources::COMBAT_DETAILS = "\r\f00\x3""c\v000\t000\x2""Combat%s%s%s\x1";
 
-const char *NOT_ENOUGH_TO_CAST = "\x3""c\v010Not enough %s to Cast %s";
-const char *SPELL_CAST_COMPONENTS[2] = { "Spell Points", "Gems" };
+const char *Resources::NOT_ENOUGH_TO_CAST = "\x3""c\v010Not enough %s to Cast %s";
+const char *Resources::SPELL_CAST_COMPONENTS[2] = { "Spell Points", "Gems" };
 
-const char *const CAST_SPELL_DETAILS = 
+const char *const Resources::CAST_SPELL_DETAILS = 
 	"\r\x2\x3""c\v122\t013\f37C\fdast\t040\f37N\fdew"
 	"\t067ESC\x1\t000\v000\x3""cCast Spell\n"
 	"\n"
@@ -1510,19 +1514,19 @@ const char *const CAST_SPELL_DETAILS =
 	"\v082Cost\x3r\t000%u/%u\x3l\n"
 	"Cur SP\x3r\t000%u\x1";
 
-const char *const PARTY_FOUND =
+const char *const Resources::PARTY_FOUND =
 	"\x3""cThe Party Found:\n"
 	"\n"
 	"\x3r\t000%lu Gold\n"
 	"%lu Gems";
 
-const char *const BACKPACKS_FULL_PRESS_KEY =
+const char *const Resources::BACKPACKS_FULL_PRESS_KEY =
 	"\v007\f12Warning!  BackPacks Full!\fd\n"
 	"Press a Key";
 
-const char *const HIT_A_KEY = "\x3l\v120\t000\x4""077\x3""c\f37Hit a key\f'd";
+const char *const Resources::HIT_A_KEY = "\x3l\v120\t000\x4""077\x3""c\f37Hit a key\f'd";
 
-const char *const GIVE_TREASURE_FORMATTING =
+const char *const Resources::GIVE_TREASURE_FORMATTING =
 	"\x3l\v060\t000\x4""077\n"
 	"\x4""077\n"
 	"\x4""077\n"
@@ -1530,21 +1534,21 @@ const char *const GIVE_TREASURE_FORMATTING =
 	"\x4""077\n"
 	"\x4""077";
 
-const char *const X_FOUND_Y = "\v060\t000\x3""c%s found: %s";
+const char *const Resources::X_FOUND_Y = "\v060\t000\x3""c%s found: %s";
 
-const char *const ON_WHO = "\x3""c\v009On Who?";
+const char *const Resources::ON_WHO = "\x3""c\v009On Who?";
 
-const char *const WHICH_ELEMENT1 =
+const char *const Resources::WHICH_ELEMENT1 =
 	"\r\x3""c\x1Which Element?\x2\v034\t014\f15F\fdire\t044"
 	"\f15E\fdlec\t074\f15C\fdold\t104\f15A\fdcid\x1";
 
-const char *const WHICH_ELEMENT2 =
+const char *const Resources::WHICH_ELEMENT2 =
 	"\r\x3""cWhich Element?', 2, 0Bh, '034\t014\f15F\fdire\t044"
 	"\f15E\fdlec\t074\f15C\fdold\t104\f15A\fdcid\x1";
 
-const char *const DETECT_MONSTERS = "\x3""cDetect Monsters";
+const char *const Resources::DETECT_MONSTERS = "\x3""cDetect Monsters";
 
-const char *const LLOYDS_BEACON =
+const char *const Resources::LLOYDS_BEACON =
 	"\r\x3""c\v000\t000\x1Lloyd's Beacon\n"
 	"\n"
 	"Last Location\n"
@@ -1552,9 +1556,9 @@ const char *const LLOYDS_BEACON =
 	"%s\x3l\n"
 	"x = %d\x3r\t000y = %d\x3""c\x2\v122\t021\f15S\fdet\t060\f15R\fdeturn\x1";
 
-const char *const HOW_MANY_SQUARES = "\x3""cTeleport\nHow many squares %s (1-9)";
+const char *const Resources::HOW_MANY_SQUARES = "\x3""cTeleport\nHow many squares %s (1-9)";
 
-const char *const TOWN_PORTAL =
+const char *const Resources::TOWN_PORTAL =
 	"\x3""cTown Portal\x3l\n"
 	"\n"
 	"\t0101. %s\n"
@@ -1566,32 +1570,32 @@ const char *const TOWN_PORTAL =
 	"To which Town (1-5)\n"
 	"\n";
 
-const int TOWN_MAP_NUMBERS[2][5] = {
+const int Resources::TOWN_MAP_NUMBERS[2][5] = {
 	{ 28, 29, 30, 31, 32 }, { 29, 31, 33, 35, 37 }
 };
 
-const char *const MONSTER_DETAILS = 
+const char *const Resources::MONSTER_DETAILS = 
 	"\x3l\n"
 	"%s\x3""c\t100%s\t140%u\t180%u\x3r\t000%s";
 
-const char *const MONSTER_SPECIAL_ATTACKS[23] = {
+const char *const Resources::MONSTER_SPECIAL_ATTACKS[23] = {
 	"None", "Magic", "Fire", "Elec", "Cold", "Poison", "Energy", "Disease",
 	"Insane", "Asleep", "CurseItm", "InLove", "DrnSPts", "Curse", "Paralys",
 	"Uncons", "Confuse", "BrkWpn", "Weak", "Erad", "Age+5", "Dead", "Stone"
 };
 
-const char *const IDENTIFY_MONSTERS =
+const char *const Resources::IDENTIFY_MONSTERS =
 	"Name\x3""c\t100HP\t140AC\t177#Atks\x3r\t000Special%s%s%s";
 
-const char *const EVENT_SAMPLES[6] = {
+const char *const Resources::EVENT_SAMPLES[6] = {
 	"ahh.voc", "whereto.voc", "gulp.voc", "null.voc", "scream.voc", "laff1.voc"
 };
 
-const char *const CLOUDS_INTRO1 = "\xC" "00\xB" "082\x9" "040\x3"
+const char *const Resources::CLOUDS_INTRO1 = "\xC" "00\xB" "082\x9" "040\x3"
 	"cKing Burlock\xB" "190\x9" "040Peasants\xB" "082\x9" "247"
 	"Lord Xeen\xB" "190\x9" "258Xeen's Pet\xB" "179\x9" "150Crodo";
 
-const char *const DARKSIDE_ENDING1 = "\n\x3" "cCongratulations\n"
+const char *const Resources::DARKSIDE_ENDING1 = "\n\x3" "cCongratulations\n"
 	"\n"
 	"Your Final Score is:\n"
 	"\n"
@@ -1605,7 +1609,7 @@ const char *const DARKSIDE_ENDING1 = "\n\x3" "cCongratulations\n"
 	"P.O. Box 4302\n"
 	"Hollywood, CA 90078";
 
-const char *const DARKSIDE_ENDING2 = "\n"
+const char *const Resources::DARKSIDE_ENDING2 = "\n"
 	"Adventurers,\n"
 	"\n"
 	"I have saved your game in Castleview.\n"
@@ -1615,9 +1619,9 @@ const char *const DARKSIDE_ENDING2 = "\n"
 	"Load your game and come visit me in the Great Pyramid "
 	"for further instructions";
 
-const char *const PHAROAH_ENDING_TEXT1 = "\xC" "d\xB"
+const char *const Resources::PHAROAH_ENDING_TEXT1 = "\xC" "d\xB"
 	"001\x9" "001%s\x3" "c\x9" "000\xB" "180Press a Key!\x3" "l";
-const char *const PHAROAH_ENDING_TEXT2 = "\xC" "04\xB"
+const char *const Resources::PHAROAH_ENDING_TEXT2 = "\xC" "04\xB"
 	"000\x9" "000%s\x3" "c\x9" "000\xB" "180Press a Key!\x3" "l\xC" "d";
 
 } // End of namespace Xeen
diff --git a/engines/xeen/resources.h b/engines/xeen/resources.h
index fc7ff48..232de88 100644
--- a/engines/xeen/resources.h
+++ b/engines/xeen/resources.h
@@ -31,546 +31,323 @@
 
 namespace Xeen {
 
+#define Res (*g_resources)
+
 class Resources {
 public:
 	SpriteResource _globalSprites;
 	Common::StringArray _maeNames;		// Magic and equipment names
+	static const char *const CREDITS;
+	static const char *const OPTIONS_TITLE;
+	static const char *const THE_PARTY_NEEDS_REST;
+	static const char *const WHO_WILL;
+	static const char *const WHATS_THE_PASSWORD;
+	static const char *const IN_NO_CONDITION;
+	static const char *const NOTHING_HERE;
+	static const char *const TERRAIN_TYPES[6];
+	static const char *const SURFACE_TYPE_NAMES[15];
+	static const char *const SURFACE_NAMES[16];
+	static const char *const WHO_ACTIONS[32];
+	static const char *const WHO_WILL_ACTIONS[4];
+	static const byte SYMBOLS[20][64];
+	static const byte TEXT_COLORS[40][4];
+	static const char *const DIRECTION_TEXT_UPPER[4];
+	static const char *const DIRECTION_TEXT[4];
+	static const char *const RACE_NAMES[5];
+	static const int RACE_HP_BONUSES[5];
+	static const int RACE_SP_BONUSES[5][2];
+	static const char *const CLASS_NAMES[11];
+	static const uint CLASS_EXP_LEVELS[10];
+	static const char *const ALIGNMENT_NAMES[3];
+	static const char *const SEX_NAMES[2];
+	static const char *const SKILL_NAMES[18];
+	static const char *const CONDITION_NAMES[17];
+	static const int CONDITION_COLORS[17];
+	static const char *const GOOD;
+	static const char *const BLESSED;
+	static const char *const POWER_SHIELD;
+	static const char *const HOLY_BONUS;
+	static const char *const HEROISM;
+	static const char *const IN_PARTY;
+	static const char *const PARTY_DETAILS;
+	static const char *const PARTY_DIALOG_TEXT;
+	static const int FACE_CONDITION_FRAMES[17];
+	static const int CHAR_FACES_X[6];
+	static const int HP_BARS_X[6];
+	static const char *const NO_ONE_TO_ADVENTURE_WITH;
+	static const byte BACKGROUND_XLAT[];
+	static const char *const YOUR_ROSTER_IS_FULL;
+	static const char *const PLEASE_WAIT;
+	static const char *const OOPS;
+	static const int8 SCREEN_POSITIONING_X[4][48];
+	static const int8 SCREEN_POSITIONING_Y[4][48];
+	static const int MONSTER_GRID_BITMASK[12];
+	static const int INDOOR_OBJECT_X[2][12];
+	static const int MAP_OBJECT_Y[2][12];
+	static const int INDOOR_MONSTERS_Y[4];
+	static const int OUTDOOR_OBJECT_X[2][12];
+	static const int OUTDOOR_MONSTER_INDEXES[26];
+	static const int OUTDOOR_MONSTERS_Y[26];
+	static const int DIRECTION_ANIM_POSITIONS[4][4];
+	static const byte WALL_SHIFTS[4][48];
+	static const int DRAW_NUMBERS[25];
+	static const int DRAW_FRAMES[25][2];
+	static const int COMBAT_FLOAT_X[8];
+	static const int COMBAT_FLOAT_Y[8];
+	static const int MONSTER_EFFECT_FLAGS[15][8];
+	static const uint SPELLS_ALLOWED[3][40];
+	static const int BASE_HP_BY_CLASS[10];
+	static const int AGE_RANGES[10];
+	static const int AGE_RANGES_ADJUST[2][10];
+	static const uint STAT_VALUES[24];
+	static const int STAT_BONUSES[24];
+	static const int ELEMENTAL_CATEGORIES[6];
+	static const int ATTRIBUTE_CATEGORIES[10];
+	static const int ATTRIBUTE_BONUSES[72];
+	static const int ELEMENTAL_RESISTENCES[37];
+	static const int ELEMENTAL_DAMAGE[37];
+	static const int WEAPON_DAMAGE_BASE[35];
+	static const int WEAPON_DAMAGE_MULTIPLIER[35];
+	static const int METAL_DAMAGE[22];
+	static const int METAL_DAMAGE_PERCENT[22];
+	static const int METAL_LAC[9];
+	static const int ARMOR_STRENGTHS[14];
+	static const int MAKE_ITEM_ARR1[6];
+	static const int MAKE_ITEM_ARR2[6][7][2];
+	static const int MAKE_ITEM_ARR3[10][7][2];
+	static const int MAKE_ITEM_ARR4[2][7][2];
+	static const int MAKE_ITEM_ARR5[8][2];
+	static const int OUTDOOR_DRAWSTRCT_INDEXES[44];
+	static const int TOWN_MAXES[2][11];
+	static const char *const TOWN_ACTION_MUSIC[14];
+	static const char *const TOWN_ACTION_SHAPES[4];
+	static const int TOWN_ACTION_FILES[2][7];
+	static const char *const BANK_TEXT;
+	static const char *const BLACKSMITH_TEXT;
+	static const char *const GUILD_NOT_MEMBER_TEXT;
+	static const char *const GUILD_TEXT;
+	static const char *const TAVERN_TEXT;
+	static const char *const GOOD_STUFF;
+	static const char *const HAVE_A_DRINK;
+	static const char *const YOURE_DRUNK;
+	static const int TAVERN_EXIT_LIST[2][6][5][2];
+	static const char *const FOOD_AND_DRINK;
+	static const char *const TEMPLE_TEXT;
+	static const char *const EXPERIENCE_FOR_LEVEL;
+	static const char *const LEARNED_ALL;
+	static const char *const ELIGIBLE_FOR_LEVEL;
+	static const char *const TRAINING_TEXT;
+	static const char *const GOLD_GEMS;
+	static const char *const GOLD_GEMS_2;
+	static const char *const DEPOSIT_WITHDRAWL[2];
+	static const char *const NOT_ENOUGH_X_IN_THE_Y;
+	static const char *const NO_X_IN_THE_Y;
+	static const char *const STAT_NAMES[16];
+	static const char *const CONSUMABLE_NAMES[4];
+	static const char *const WHERE_NAMES[2];
+	static const char *const AMOUNT;
+	static const char *const FOOD_PACKS_FULL;
+	static const char *const BUY_SPELLS;
+	static const char *const GUILD_OPTIONS;
+	static const int MISC_SPELL_INDEX[74];
+	static const int SPELL_COSTS[77];
+	static const int CLOUDS_SPELL_OFFSETS[5][20];
+	static const uint DARK_SPELL_OFFSETS[3][39];
+	static const int DARK_SPELL_RANGES[12][2];
+	static const int SPELL_LEVEL_OFFSETS[3][39];
+	static const int SPELL_GEM_COST[77];
+	static const char *const NOT_A_SPELL_CASTER;
+	static const char *const SPELLS_FOR;
+	static const char *const SPELL_LINES_0_TO_9;
+	static const char *const SPELLS_DIALOG_SPELLS;
+	static const char *const SPELL_PTS;
+	static const char *const GOLD;
+	static const char *const SPELLS_PRESS_A_KEY;
+	static const char *const SPELLS_PURCHASE;
+	static const char *const MAP_TEXT;
+	static const char *const LIGHT_COUNT_TEXT;
+	static const char *const FIRE_RESISTENCE_TEXT;
+	static const char *const ELECRICITY_RESISTENCE_TEXT;
+	static const char *const COLD_RESISTENCE_TEXT;
+	static const char *const POISON_RESISTENCE_TEXT;
+	static const char *const CLAIRVOYANCE_TEXT;
+	static const char *const LEVITATE_TEXT;
+	static const char *const WALK_ON_WATER_TEXT;
+	static const char *const GAME_INFORMATION;
+	static const char *const WORLD_GAME_TEXT;
+	static const char *const DARKSIDE_GAME_TEXT;
+	static const char *const CLOUDS_GAME_TEXT;
+	static const char *const SWORDS_GAME_TEXT;
+	static const char *const WEEK_DAY_STRINGS[10];
+	static const char *const CHARACTER_DETAILS;
+	static const char *const PARTY_GOLD;
+	static const char *const PLUS_14;
+	static const char *const CHARACTER_TEMPLATE;
+	static const char *const EXCHANGING_IN_COMBAT;
+	static const char *const CURRENT_MAXIMUM_RATING_TEXT;
+	static const char *const CURRENT_MAXIMUM_TEXT;
+	static const char *const RATING_TEXT[24];
+	static const char *const AGE_TEXT;
+	static const char *const LEVEL_TEXT;
+	static const char *const RESISTENCES_TEXT;
+	static const char *const NONE;
+	static const char *const EXPERIENCE_TEXT;
+	static const char *const ELIGIBLE;
+	static const char *const IN_PARTY_IN_BANK;
+	static const char *const FOOD_TEXT;
+	static const char *const EXCHANGE_WITH_WHOM;
+	static const char *const QUICK_REF_LINE;
+	static const char *const QUICK_REFERENCE;
+	static const uint BLACKSMITH_MAP_IDS[2][4];
+	static const char *const ITEMS_DIALOG_TEXT1;
+	static const char *const ITEMS_DIALOG_TEXT2;
+	static const char *const ITEMS_DIALOG_LINE1;
+	static const char *const ITEMS_DIALOG_LINE2;
+	static const char *const BTN_BUY;
+	static const char *const BTN_SELL;
+	static const char *const BTN_IDENTIFY;
+	static const char *const BTN_FIX;
+	static const char *const BTN_USE;
+	static const char *const BTN_EQUIP;
+	static const char *const BTN_REMOVE;
+	static const char *const BTN_DISCARD;
+	static const char *const BTN_QUEST;
+	static const char *const BTN_ENCHANT;
+	static const char *const BTN_RECHARGE;
+	static const char *const BTN_GOLD;
+	static const char *const ITEM_BROKEN;
+	static const char *const ITEM_CURSED;
+	static const char *const BONUS_NAMES[7];
+	static const char *const WEAPON_NAMES[35];
+	static const char *const ARMOR_NAMES[14];
+	static const char *const ACCESSORY_NAMES[11];
+	static const char *const MISC_NAMES[22];
+	static const char *const *ITEM_NAMES[4];
+	static const char *const ELEMENTAL_NAMES[6];
+	static const char *const ATTRIBUTE_NAMES[10];
+	static const char *const EFFECTIVENESS_NAMES[7];
+	static const char *const QUEST_ITEM_NAMES[85];
+	static const int WEAPON_BASE_COSTS[35];
+	static const int ARMOR_BASE_COSTS[25];
+	static const int ACCESSORY_BASE_COSTS[11];
+	static const int MISC_MATERIAL_COSTS[22];
+	static const int MISC_BASE_COSTS[76];
+	static const int METAL_BASE_MULTIPLIERS[22];
+	static const int ITEM_SKILL_DIVISORS[4];
+	static const int RESTRICTION_OFFSETS[4];
+	static const int ITEM_RESTRICTIONS[86];
+	static const char *const NOT_PROFICIENT;
+	static const char *const NO_ITEMS_AVAILABLE;
+	static const char *const CATEGORY_NAMES[4];
+	static const char *const X_FOR_THE_Y;
+	static const char *const X_FOR_Y;
+	static const char *const X_FOR_Y_GOLD;
+	static const char *const FMT_CHARGES;
+	static const char *const AVAILABLE_GOLD_COST;
+	static const char *const CHARGES;
+	static const char *const COST;
+	static const char *const ITEM_ACTIONS[7];
+	static const char *const WHICH_ITEM;
+	static const char *const WHATS_YOUR_HURRY;
+
+	static const char *const USE_ITEM_IN_COMBAT;
+
+	static const char *const NO_SPECIAL_ABILITIES;
+
+	static const char *const CANT_CAST_WHILE_ENGAGED;
+
+	static const char *const EQUIPPED_ALL_YOU_CAN;
+	static const char *const REMOVE_X_TO_EQUIP_Y;
+	static const char *const RING;
+	static const char *const MEDAL;
+	static const char *const CANNOT_REMOVE_CURSED_ITEM;
+	static const char *const CANNOT_DISCARD_CURSED_ITEM;
+	static const char *const PERMANENTLY_DISCARD;
+	static const char *const BACKPACK_IS_FULL;
+	static const char *const CATEGORY_BACKPACK_IS_FULL[4];
+	static const char *const BUY_X_FOR_Y_GOLD;
+	static const char *const SELL_X_FOR_Y_GOLD;
+	static const char *const NO_NEED_OF_THIS;
+	static const char *const NOT_RECHARGABLE;
+	static const char *const SPELL_FAILED;
+	static const char *const NOT_ENCHANTABLE;
+	static const char *const ITEM_NOT_BROKEN;
+	static const char *const FIX_IDENTIFY[2];
+	static const char *const FIX_IDENTIFY_GOLD;
+	static const char *const IDENTIFY_ITEM_MSG;
+	static const char *const ITEM_DETAILS;
+	static const char *const ALL;
+	static const char *const FIELD_NONE;
+	static const char *const DAMAGE_X_TO_Y;
+	static const char *const ELEMENTAL_XY_DAMAGE;
+	static const char *const ATTR_XY_BONUS;
+	static const char *const EFFECTIVE_AGAINST;
+	static const char *const QUESTS_DIALOG_TEXT;
+	static const char *const CLOUDS_OF_XEEN_LINE;
+	static const char *const DARKSIDE_OF_XEEN_LINE;
+	static const char *const NO_QUEST_ITEMS;
+	static const char *const NO_CURRENT_QUESTS;
+	static const char *const NO_AUTO_NOTES;
+	static const char *const QUEST_ITEMS_DATA;
+	static const char *const CURRENT_QUESTS_DATA;
+	static const char *const AUTO_NOTES_DATA;
+	static const char *const REST_COMPLETE;
+	static const char *const PARTY_IS_STARVING;
+	static const char *const HIT_SPELL_POINTS_RESTORED;
+	static const char *const TOO_DANGEROUS_TO_REST;
+	static const char *const SOME_CHARS_MAY_DIE;
+	static const char *const CANT_DISMISS_LAST_CHAR;
+	static const char *const REMOVE_DELETE[2];
+	static const char *const REMOVE_OR_DELETE_WHICH;
+	static const char *const YOUR_PARTY_IS_FULL;
+	static const char *const HAS_SLAYER_SWORD;
+	static const char *const SURE_TO_DELETE_CHAR;
+	static const char *const CREATE_CHAR_DETAILS;
+	static const char *const NEW_CHAR_STATS;
+	static const char *const NAME_FOR_NEW_CHARACTER;
+	static const char *const SELECT_CLASS_BEFORE_SAVING;
+	static const char *const EXCHANGE_ATTR_WITH;
+	static const int NEW_CHAR_SKILLS[10];
+	static const int NEW_CHAR_SKILLS_LEN[10];
+	static const int NEW_CHAR_RACE_SKILLS[10];
+	static const int RACE_MAGIC_RESISTENCES[5];
+	static const int RACE_FIRE_RESISTENCES[5];
+	static const int RACE_ELECTRIC_RESISTENCES[5];
+	static const int RACE_COLD_RESISTENCES[5];
+	static const int RACE_ENERGY_RESISTENCES[5];
+	static const int RACE_POISON_RESISTENCES[5];
+	static const int NEW_CHARACTER_SPELLS[10][4];
+	static const char *const COMBAT_DETAILS;
+	static const char *NOT_ENOUGH_TO_CAST;
+	static const char *SPELL_CAST_COMPONENTS[2];
+	static const char *const CAST_SPELL_DETAILS;
+	static const char *const PARTY_FOUND;
+	static const char *const BACKPACKS_FULL_PRESS_KEY;
+	static const char *const HIT_A_KEY;
+	static const char *const GIVE_TREASURE_FORMATTING;
+	static const char *const X_FOUND_Y;
+	static const char *const ON_WHO;
+	static const char *const WHICH_ELEMENT1;
+	static const char *const WHICH_ELEMENT2;
+	static const char *const DETECT_MONSTERS;
+	static const char *const LLOYDS_BEACON;
+	static const char *const HOW_MANY_SQUARES;
+	static const char *const TOWN_PORTAL;
+	static const int TOWN_MAP_NUMBERS[2][5];
+	static const char *const MONSTER_DETAILS;
+	static const char *const MONSTER_SPECIAL_ATTACKS[23];
+	static const char *const IDENTIFY_MONSTERS;
+	static const char *const EVENT_SAMPLES[6];
+	static const char *const CLOUDS_INTRO1;
+	static const char *const DARKSIDE_ENDING1;
+	static const char *const DARKSIDE_ENDING2;
+	static const char *const PHAROAH_ENDING_TEXT1;
+	static const char *const PHAROAH_ENDING_TEXT2;
 public:
 	Resources();
 };
 
-#define Res (*_vm->_resources)
-
-extern const char *const CREDITS;
-
-extern const char *const OPTIONS_TITLE;
-
-extern const char *const THE_PARTY_NEEDS_REST;
-
-extern const char *const WHO_WILL;
-
-extern const char *const WHATS_THE_PASSWORD;
-
-extern const char *const IN_NO_CONDITION;
-
-extern const char *const NOTHING_HERE;
-
-extern const char *const TERRAIN_TYPES[6];
-
-extern const char *const SURFACE_TYPE_NAMES[15];
-
-extern const char *const SURFACE_NAMES[16];
-
-extern const char *const WHO_ACTIONS[32];
-
-extern const char *const WHO_WILL_ACTIONS[4];
-
-extern const byte SYMBOLS[20][64];
-
-extern const byte TEXT_COLORS[40][4];
-
-extern const char *const DIRECTION_TEXT_UPPER[4];
-
-extern const char *const DIRECTION_TEXT[4];
-
-extern const char *const RACE_NAMES[5];
-
-extern const int RACE_HP_BONUSES[5];
-
-extern const int RACE_SP_BONUSES[5][2];
-
-extern const char *const CLASS_NAMES[11];
-
-extern const uint CLASS_EXP_LEVELS[10];
-
-extern const char *const ALIGNMENT_NAMES[3];
-
-extern const char *const SEX_NAMES[2];
-
-extern const char *const SKILL_NAMES[18];
-
-extern const char *const CONDITION_NAMES[17];
-
-extern const int CONDITION_COLORS[17];
-
-extern const char *const GOOD;
-
-extern const char *const BLESSED;
-
-extern const char *const POWER_SHIELD;
-
-extern const char *const HOLY_BONUS;
-
-extern const char *const HEROISM;
-extern const char *const IN_PARTY;
-
-extern const char *const PARTY_DETAILS;
-extern const char *const PARTY_DIALOG_TEXT;
-
-extern const int FACE_CONDITION_FRAMES[17];
-
-extern const int CHAR_FACES_X[6];
-
-extern const int HP_BARS_X[6];
-
-extern const char *const NO_ONE_TO_ADVENTURE_WITH;
-
-extern const byte BACKGROUND_XLAT[];
-
-extern const char *const YOUR_ROSTER_IS_FULL;
-
-extern const char *const PLEASE_WAIT;
-
-extern const char *const OOPS;
-
-extern const int8 SCREEN_POSITIONING_X[4][48];
-
-extern const int8 SCREEN_POSITIONING_Y[4][48];
-
-extern const int MONSTER_GRID_BITMASK[12];
-
-extern const int INDOOR_OBJECT_X[2][12];
-
-extern const int MAP_OBJECT_Y[2][12];
-
-extern const int INDOOR_MONSTERS_Y[4];
-
-extern const int OUTDOOR_OBJECT_X[2][12];
-
-extern const int OUTDOOR_MONSTER_INDEXES[26];
-
-extern const int OUTDOOR_MONSTERS_Y[26];
-
-extern const int DIRECTION_ANIM_POSITIONS[4][4];
-
-extern const byte WALL_SHIFTS[4][48];
-
-extern const int DRAW_NUMBERS[25];
-
-extern const int DRAW_FRAMES[25][2];
-
-extern const int COMBAT_FLOAT_X[8];
-
-extern const int COMBAT_FLOAT_Y[8];
-
-extern const int MONSTER_EFFECT_FLAGS[15][8];
-
-extern const uint SPELLS_ALLOWED[3][40];
-
-extern const int BASE_HP_BY_CLASS[10];
-
-extern const int AGE_RANGES[10];
-
-extern const int AGE_RANGES_ADJUST[2][10];
-
-extern const uint STAT_VALUES[24];
-
-extern const int STAT_BONUSES[24];
-
-extern const int ELEMENTAL_CATEGORIES[6];
-
-extern const int ATTRIBUTE_CATEGORIES[10];
-
-extern const int ATTRIBUTE_BONUSES[72];
-
-extern const int ELEMENTAL_RESISTENCES[37];
-
-extern const int ELEMENTAL_DAMAGE[37];
-
-extern const int WEAPON_DAMAGE_BASE[35];
-extern const int WEAPON_DAMAGE_MULTIPLIER[35];
-extern const int METAL_DAMAGE[22];
-extern const int METAL_DAMAGE_PERCENT[22];
-
-extern const int METAL_LAC[9];
-
-extern const int ARMOR_STRENGTHS[14];
-
-extern const int MAKE_ITEM_ARR1[6];
-
-extern const int MAKE_ITEM_ARR2[6][7][2];
-
-extern const int MAKE_ITEM_ARR3[10][7][2];
-
-extern const int MAKE_ITEM_ARR4[2][7][2];
-
-extern const int MAKE_ITEM_ARR5[8][2];
-
-extern const int OUTDOOR_DRAWSTRCT_INDEXES[44];
-
-extern const int TOWN_MAXES[2][11];
-
-extern const char *const TOWN_ACTION_MUSIC[14];
-
-extern const char *const TOWN_ACTION_SHAPES[4];
-
-extern const int TOWN_ACTION_FILES[2][7];
-
-extern const char *const BANK_TEXT;
-
-extern const char *const BLACKSMITH_TEXT;
-
-extern const char *const GUILD_NOT_MEMBER_TEXT;
-
-extern const char *const GUILD_TEXT;
-
-extern const char *const TAVERN_TEXT;
-
-extern const char *const GOOD_STUFF;
-
-extern const char *const HAVE_A_DRINK;
-
-extern const char *const YOURE_DRUNK;
-
-extern const int TAVERN_EXIT_LIST[2][6][5][2];
-
-extern const char *const FOOD_AND_DRINK;
-
-extern const char *const TEMPLE_TEXT;
-
-extern const char *const EXPERIENCE_FOR_LEVEL;
-
-extern const char *const LEARNED_ALL;
-
-extern const char *const ELIGIBLE_FOR_LEVEL;
-
-extern const char *const TRAINING_TEXT;
-
-extern const char *const GOLD_GEMS;
-
-extern const char *const GOLD_GEMS_2;
-
-extern const char *const DEPOSIT_WITHDRAWL[2];
-
-extern const char *const NOT_ENOUGH_X_IN_THE_Y;
-
-extern const char *const NO_X_IN_THE_Y;
-
-extern const char *const STAT_NAMES[16];
-
-extern const char *const CONSUMABLE_NAMES[4];
-
-extern const char *const WHERE_NAMES[2];
-
-extern const char *const AMOUNT;
-
-extern const char *const FOOD_PACKS_FULL;
-
-extern const char *const BUY_SPELLS;
-
-extern const char *const GUILD_OPTIONS;
-
-extern const int MISC_SPELL_INDEX[74];
-
-extern const int SPELL_COSTS[77];
-
-extern const int CLOUDS_SPELL_OFFSETS[5][20];
-
-extern const uint DARK_SPELL_OFFSETS[3][39];
-
-extern const int DARK_SPELL_RANGES[12][2];
-
-extern const int SPELL_LEVEL_OFFSETS[3][39];
-
-extern const int SPELL_GEM_COST[77];
-
-extern const char *const NOT_A_SPELL_CASTER;
-
-extern const char *const SPELLS_FOR;
-
-extern const char *const SPELL_LINES_0_TO_9;
-
-extern const char *const SPELLS_DIALOG_SPELLS;
-
-extern const char *const SPELL_PTS;
-
-extern const char *const GOLD;
-
-extern const char *const SPELLS_PRESS_A_KEY;
-
-extern const char *const SPELLS_PURCHASE;
-
-extern const char *const MAP_TEXT;
-
-extern const char *const LIGHT_COUNT_TEXT;
-
-extern const char *const FIRE_RESISTENCE_TEXT;
-
-extern const char *const ELECRICITY_RESISTENCE_TEXT;
-
-extern const char *const COLD_RESISTENCE_TEXT;
-
-extern const char *const POISON_RESISTENCE_TEXT;
-
-extern const char *const CLAIRVOYANCE_TEXT;
-
-extern const char *const LEVITATE_TEXT;
-
-extern const char *const WALK_ON_WATER_TEXT;
-
-extern const char *const GAME_INFORMATION;
-
-extern const char *const WORLD_GAME_TEXT;
-
-extern const char *const DARKSIDE_GAME_TEXT;
-
-extern const char *const CLOUDS_GAME_TEXT;
-
-extern const char *const SWORDS_GAME_TEXT;
-
-extern const char *const WEEK_DAY_STRINGS[10];
-
-extern const char *const CHARACTER_DETAILS;
-
-extern const char *const PARTY_GOLD;
-
-extern const char *const PLUS_14;
-
-extern const char *const CHARACTER_TEMPLATE;
-
-extern const char *const EXCHANGING_IN_COMBAT;
-
-extern const char *const CURRENT_MAXIMUM_RATING_TEXT;
-
-extern const char *const CURRENT_MAXIMUM_TEXT;
-
-extern const char *const RATING_TEXT[24];
-
-extern const char *const AGE_TEXT;
-
-extern const char *const LEVEL_TEXT;
-
-extern const char *const RESISTENCES_TEXT;
-
-extern const char *const NONE;
-
-extern const char *const EXPERIENCE_TEXT;
-
-extern const char *const ELIGIBLE;
-
-extern const char *const IN_PARTY_IN_BANK;
-
-extern const char *const FOOD_TEXT;
-
-extern const char *const EXCHANGE_WITH_WHOM;
-
-extern const char *const QUICK_REF_LINE;
-
-extern const char *const QUICK_REFERENCE;
-
-extern const uint BLACKSMITH_MAP_IDS[2][4];
-
-extern const char *const ITEMS_DIALOG_TEXT1;
-extern const char *const ITEMS_DIALOG_TEXT2;
-extern const char *const ITEMS_DIALOG_LINE1;
-extern const char *const ITEMS_DIALOG_LINE2;
-
-extern const char *const BTN_BUY;
-extern const char *const BTN_SELL;
-extern const char *const BTN_IDENTIFY;
-extern const char *const BTN_FIX;
-extern const char *const BTN_USE;
-extern const char *const BTN_EQUIP;
-extern const char *const BTN_REMOVE;
-extern const char *const BTN_DISCARD;
-extern const char *const BTN_EQUIP;
-extern const char *const BTN_QUEST;
-extern const char *const BTN_ENCHANT;
-extern const char *const BTN_RECHARGE;
-extern const char *const BTN_GOLD;
-
-extern const char *const ITEM_BROKEN;
-extern const char *const ITEM_CURSED;
-extern const char *const BONUS_NAMES[7];
-extern const char *const WEAPON_NAMES[35];
-extern const char *const ARMOR_NAMES[14];
-extern const char *const ACCESSORY_NAMES[11];
-extern const char *const MISC_NAMES[22];
-extern const char *const *ITEM_NAMES[4];
-
-extern const char *const ELEMENTAL_NAMES[6];
-extern const char *const ATTRIBUTE_NAMES[10];
-extern const char *const EFFECTIVENESS_NAMES[7];
-extern const char *const QUEST_ITEM_NAMES[85];
-
-extern const int WEAPON_BASE_COSTS[35];
-extern const int ARMOR_BASE_COSTS[25];
-extern const int ACCESSORY_BASE_COSTS[11];
-extern const int MISC_MATERIAL_COSTS[22];
-extern const int MISC_BASE_COSTS[76];
-extern const int METAL_BASE_MULTIPLIERS[22];
-extern const int ITEM_SKILL_DIVISORS[4];
-
-extern const int RESTRICTION_OFFSETS[4];
-extern const int ITEM_RESTRICTIONS[86];
-
-extern const char *const NOT_PROFICIENT;
-
-extern const char *const NO_ITEMS_AVAILABLE;
-
-extern const char *const CATEGORY_NAMES[4];
-
-extern const char *const X_FOR_THE_Y;
-
-extern const char *const X_FOR_Y;
-
-extern const char *const X_FOR_Y_GOLD;
-
-extern const char *const FMT_CHARGES;
-
-extern const char *const AVAILABLE_GOLD_COST;
-
-extern const char *const CHARGES;
-
-extern const char *const COST;
-
-extern const char *const ITEM_ACTIONS[7];
-extern const char *const WHICH_ITEM;
-
-extern const char *const WHATS_YOUR_HURRY;
-
-extern const char *const USE_ITEM_IN_COMBAT;
-
-extern const char *const NO_SPECIAL_ABILITIES;
-
-extern const char *const CANT_CAST_WHILE_ENGAGED;
-
-extern const char *const EQUIPPED_ALL_YOU_CAN;
-extern const char *const REMOVE_X_TO_EQUIP_Y;
-extern const char *const RING;
-extern const char *const MEDAL;
-
-extern const char *const CANNOT_REMOVE_CURSED_ITEM;
-
-extern const char *const CANNOT_DISCARD_CURSED_ITEM;
-
-extern const char *const PERMANENTLY_DISCARD;
-
-extern const char *const BACKPACK_IS_FULL;
-
-extern const char *const CATEGORY_BACKPACK_IS_FULL[4];
-
-extern const char *const BUY_X_FOR_Y_GOLD;
-
-extern const char *const SELL_X_FOR_Y_GOLD;
-
-extern const char *const NO_NEED_OF_THIS;
-
-extern const char *const NOT_RECHARGABLE;
-
-extern const char *const SPELL_FAILED;
-
-extern const char *const NOT_ENCHANTABLE;
-
-extern const char *const ITEM_NOT_BROKEN;
-
-extern const char *const FIX_IDENTIFY[2];
-
-extern const char *const FIX_IDENTIFY_GOLD;
-
-extern const char *const IDENTIFY_ITEM_MSG;
-
-extern const char *const ITEM_DETAILS;
-
-extern const char *const ALL;
-extern const char *const FIELD_NONE;
-extern const char *const DAMAGE_X_TO_Y;
-extern const char *const ELEMENTAL_XY_DAMAGE;
-extern const char *const ATTR_XY_BONUS;
-extern const char *const EFFECTIVE_AGAINST;
-
-extern const char *const QUESTS_DIALOG_TEXT;
-extern const char *const CLOUDS_OF_XEEN_LINE;
-extern const char *const DARKSIDE_OF_XEEN_LINE;
-
-extern const char *const NO_QUEST_ITEMS;
-extern const char *const NO_CURRENT_QUESTS;
-extern const char *const NO_AUTO_NOTES;
-extern const char *const QUEST_ITEMS_DATA;
-extern const char *const CURRENT_QUESTS_DATA;
-extern const char *const AUTO_NOTES_DATA;
-
-extern const char *const REST_COMPLETE;
-extern const char *const PARTY_IS_STARVING;
-extern const char *const HIT_SPELL_POINTS_RESTORED;
-extern const char *const TOO_DANGEROUS_TO_REST;
-extern const char *const SOME_CHARS_MAY_DIE;
-
-extern const char *const CANT_DISMISS_LAST_CHAR;
-
-extern const char *const REMOVE_DELETE[2];
-extern const char *const REMOVE_OR_DELETE_WHICH;
-
-extern const char *const YOUR_PARTY_IS_FULL;
-
-extern const char *const HAS_SLAYER_SWORD;
-extern const char *const SURE_TO_DELETE_CHAR;
-
-extern const char *const CREATE_CHAR_DETAILS;
-
-extern const char *const NEW_CHAR_STATS;
-extern const char *const NAME_FOR_NEW_CHARACTER;
-extern const char *const SELECT_CLASS_BEFORE_SAVING;
-extern const char *const EXCHANGE_ATTR_WITH;
-extern const int NEW_CHAR_SKILLS[10];
-extern const int NEW_CHAR_SKILLS_LEN[10];
-extern const int NEW_CHAR_RACE_SKILLS[10];
-
-extern const int RACE_MAGIC_RESISTENCES[5];
-extern const int RACE_FIRE_RESISTENCES[5];
-extern const int RACE_ELECTRIC_RESISTENCES[5];
-extern const int RACE_COLD_RESISTENCES[5];
-extern const int RACE_ENERGY_RESISTENCES[5];
-extern const int RACE_POISON_RESISTENCES[5];
-extern const int NEW_CHARACTER_SPELLS[10][4];
-
-extern const char *const COMBAT_DETAILS;
-
-extern const char *NOT_ENOUGH_TO_CAST;
-extern const char *SPELL_CAST_COMPONENTS[2];
-
-extern const char *const CAST_SPELL_DETAILS;
-
-extern const char *const PARTY_FOUND;
-
-extern const char *const BACKPACKS_FULL_PRESS_KEY;
-
-extern const char *const HIT_A_KEY;
-
-extern const char *const GIVE_TREASURE_FORMATTING;
-
-extern const char *const X_FOUND_Y;
-
-extern const char *const ON_WHO;
-
-extern const char *const WHICH_ELEMENT1;
-extern const char *const WHICH_ELEMENT2;
-
-extern const char *const DETECT_MONSTERS;
-
-extern const char *const LLOYDS_BEACON;
-
-extern const char *const HOW_MANY_SQUARES;
-
-extern const char *const TOWN_PORTAL;
-
-extern const int TOWN_MAP_NUMBERS[2][5];
-
-extern const char *const MONSTER_DETAILS;
-
-extern const char *const MONSTER_SPECIAL_ATTACKS[23];
-
-extern const char *const IDENTIFY_MONSTERS;
-
-extern const char *const EVENT_SAMPLES[6];
-
-extern const char *const CLOUDS_INTRO1;
-
-extern const char *const DARKSIDE_ENDING1;
-extern const char *const DARKSIDE_ENDING2;
-
-extern const char *const PHAROAH_ENDING_TEXT1;
-extern const char *const PHAROAH_ENDING_TEXT2;
+extern Resources *g_resources;
 
 } // End of namespace Xeen
 
diff --git a/engines/xeen/screen.cpp b/engines/xeen/screen.cpp
index 12df704..32a08b2 100644
--- a/engines/xeen/screen.cpp
+++ b/engines/xeen/screen.cpp
@@ -480,7 +480,7 @@ void Screen::frameWindow(uint bgType) {
 		// Totally black background
 		_vm->_screen->fillRect(Common::Rect(8, 8, 224, 140), 0);
 	} else {
-		const byte *lookup = BACKGROUND_XLAT + bgType;
+		const byte *lookup = Res.BACKGROUND_XLAT + bgType;
 		for (int yp = 8; yp < 140; ++yp) {
 			byte *destP = (byte *)_vm->_screen->getBasePtr(8, yp);
 			for (int xp = 8; xp < 224; ++xp, ++destP)
diff --git a/engines/xeen/scripts.cpp b/engines/xeen/scripts.cpp
index 41dd17d..1393c6e 100644
--- a/engines/xeen/scripts.cpp
+++ b/engines/xeen/scripts.cpp
@@ -224,7 +224,7 @@ int Scripts::checkEvents() {
 	} else {
 		Window &w = screen._windows[38];
 		w.open();
-		w.writeString(NOTHING_HERE);
+		w.writeString(Res.NOTHING_HERE);
 		w.update();
 
 		do {
@@ -874,7 +874,7 @@ void Scripts::cmdConfirmWord(Common::Array<byte> &params) {
 	} else if (params[3]) {
 		msg2 = "";
 	} else {
-		msg2 = WHATS_THE_PASSWORD;
+		msg2 = Res.WHATS_THE_PASSWORD;
 	}
 
 	int result = StringInput::show(_vm, params[0], msg1, msg2,_event->_opcode);
@@ -1096,7 +1096,7 @@ void Scripts::cmdSeatTextSml(Common::Array<byte> &params) {
 void Scripts::cmdPlayEventVoc(Common::Array<byte> &params) {
 	Sound &sound = *_vm->_sound;
 	sound.stopSound();
-	sound.playSound(EVENT_SAMPLES[params[0]], 1);
+	sound.playSound(Res.EVENT_SAMPLES[params[0]], 1);
 
 	cmdNoAction(params);
 }
@@ -1434,7 +1434,7 @@ bool Scripts::ifProc(int action, uint32 mask, int mode, int charIndex) {
 
 		// Check if the character class can cast the particular spell
 		for (int idx = 0; idx < 39; ++idx) {
-			if (SPELLS_ALLOWED[category][idx] == mask) {
+			if (Res.SPELLS_ALLOWED[category][idx] == mask) {
 				// Can cast it. Check if the player has it in their spellbook
 				if (ps._spells[idx])
 					v = mask;
diff --git a/engines/xeen/spells.cpp b/engines/xeen/spells.cpp
index 1fc3ee1..681b7b6 100644
--- a/engines/xeen/spells.cpp
+++ b/engines/xeen/spells.cpp
@@ -43,13 +43,13 @@ void Spells::load() {
 }
 
 int Spells::calcSpellCost(int spellId, int expenseFactor) const {
-	int amount = SPELL_COSTS[spellId];
+	int amount = Res.SPELL_COSTS[spellId];
 	return (amount >= 0) ? (amount * 100) << expenseFactor :
 		(amount * -500) << expenseFactor;
 }
 
 int Spells::calcSpellPoints(int spellId, int expenseFactor) const {
-	int amount = SPELL_COSTS[spellId];
+	int amount = Res.SPELL_COSTS[spellId];
 	return (amount >= 0) ? amount : amount * -1 * expenseFactor;
 }
 
@@ -89,7 +89,7 @@ void Spells::executeSpell(MagicSpell spellId) {
 }
 
 void Spells::spellFailed() {
-	ErrorScroll::show(_vm, SPELL_FAILED, WT_NONFREEZED_WAIT);
+	ErrorScroll::show(_vm, Res.SPELL_FAILED, WT_NONFREEZED_WAIT);
 }
 
 void Spells::castItemSpell(int itemSpellId) {
@@ -210,8 +210,8 @@ int Spells::castSpell(Character *c, MagicSpell spellId) {
 
 int Spells::subSpellCost(Character &c, int spellId) {
 	Party &party = *_vm->_party;
-	int gemCost = SPELL_GEM_COST[spellId];
-	int spCost = SPELL_COSTS[spellId];
+	int gemCost = Res.SPELL_GEM_COST[spellId];
+	int spCost = Res.SPELL_COSTS[spellId];
 
 	// Negative SP costs indicate it's dependent on the character's level
 	if (spCost <= 0) {
@@ -232,8 +232,8 @@ int Spells::subSpellCost(Character &c, int spellId) {
 
 void Spells::addSpellCost(Character &c, int spellId) {
 	Party &party = *_vm->_party;
-	int gemCost = SPELL_GEM_COST[spellId];
-	int spCost = SPELL_COSTS[spellId];
+	int gemCost = Res.SPELL_GEM_COST[spellId];
+	int spCost = Res.SPELL_COSTS[spellId];
 
 	if (spCost < 1)
 		spCost *= -1 * c.getCurrentLevel();
@@ -440,7 +440,7 @@ void Spells::detectMonster() {
 	Common::fill(&grid[0][0], &grid[7][7], 0);
 
 	w.open();
-	w.writeString(DETECT_MONSTERS);
+	w.writeString(Res.DETECT_MONSTERS);
 	sprites.draw(w, 0, Common::Point(243, 80));
 
 	for (int yDiff = 3; yDiff >= -3; --yDiff) {
@@ -549,8 +549,8 @@ void Spells::etherialize() {
 	Party &party = *_vm->_party;
 	Sound &sound = *_vm->_sound;
 	Common::Point pt = party._mazePosition + Common::Point(
-		SCREEN_POSITIONING_X[party._mazeDirection][7],
-		SCREEN_POSITIONING_Y[party._mazeDirection][7]
+		Res.SCREEN_POSITIONING_X[party._mazeDirection][7],
+		Res.SCREEN_POSITIONING_Y[party._mazeDirection][7]
 	);
 
 	if ((map.mazeData()._mazeFlags & RESTRICTION_ETHERIALIZE) ||
@@ -774,8 +774,8 @@ void Spells::jump() {
 			map.getCell(14);
 			if (map._currentSurfaceId != 0 && map._currentWall != 1) {
 				party._mazePosition += Common::Point(
-					SCREEN_POSITIONING_X[party._mazeDirection][14],
-					SCREEN_POSITIONING_Y[party._mazeDirection][14]
+					Res.SCREEN_POSITIONING_X[party._mazeDirection][14],
+					Res.SCREEN_POSITIONING_Y[party._mazeDirection][14]
 					);
 				sound.playFX(51);
 				party._stepped = true;
@@ -784,13 +784,13 @@ void Spells::jump() {
 		}
 	} else {
 		Common::Point pt = party._mazePosition + Common::Point(
-			SCREEN_POSITIONING_X[party._mazeDirection][7],
-			SCREEN_POSITIONING_Y[party._mazeDirection][7]);
-		if (!map.mazeLookup(party._mazePosition, MONSTER_GRID_BITMASK[party._mazeDirection]) &&
-			!map.mazeLookup(pt, MONSTER_GRID_BITMASK[party._mazeDirection])) {
+			Res.SCREEN_POSITIONING_X[party._mazeDirection][7],
+			Res.SCREEN_POSITIONING_Y[party._mazeDirection][7]);
+		if (!map.mazeLookup(party._mazePosition, Res.MONSTER_GRID_BITMASK[party._mazeDirection]) &&
+			!map.mazeLookup(pt, Res.MONSTER_GRID_BITMASK[party._mazeDirection])) {
 			party._mazePosition += Common::Point(
-				SCREEN_POSITIONING_X[party._mazeDirection][14],
-				SCREEN_POSITIONING_Y[party._mazeDirection][14]
+				Res.SCREEN_POSITIONING_X[party._mazeDirection][14],
+				Res.SCREEN_POSITIONING_Y[party._mazeDirection][14]
 			);
 			sound.playFX(51);
 			party._stepped = true;
@@ -1244,7 +1244,7 @@ void Spells::townPortal() {
 	sound.playFX(51);
 	map._loadDarkSide = map._sideTownPortal;
 	_vm->_files->_isDarkCc = map._sideTownPortal > 0;
-	map.load(TOWN_MAP_NUMBERS[map._sideTownPortal][townNumber - 1]);
+	map.load(Res.TOWN_MAP_NUMBERS[map._sideTownPortal][townNumber - 1]);
 
 	if (!_vm->_files->_isDarkCc) {
 		party.moveToRunLocation();
diff --git a/engines/xeen/town.cpp b/engines/xeen/town.cpp
index 1fe0487..c0ecf5c 100644
--- a/engines/xeen/town.cpp
+++ b/engines/xeen/town.cpp
@@ -77,7 +77,7 @@ int Town::townAction(int actionId) {
 		return 0;
 	}
 
-	_townMaxId = TOWN_MAXES[_vm->_files->_isDarkCc][actionId];
+	_townMaxId = Res.TOWN_MAXES[_vm->_files->_isDarkCc][actionId];
 	_townActionId = actionId;
 	_drawFrameIndex = 0;
 	_v1 = 0;
@@ -203,12 +203,12 @@ int Town::townAction(int actionId) {
 		break;
 	}
 
-	sound.playSong(TOWN_ACTION_MUSIC[actionId], 223);
+	sound.playSong(Res.TOWN_ACTION_MUSIC[actionId], 223);
 
-	_townSprites.resize(TOWN_ACTION_FILES[isDarkCc][actionId]);
+	_townSprites.resize(Res.TOWN_ACTION_FILES[isDarkCc][actionId]);
 	for (uint idx = 0; idx < _townSprites.size(); ++idx) {
 		Common::String shapesName = Common::String::format("%s%d.twn",
-			TOWN_ACTION_SHAPES[actionId], idx + 1);
+			Res.TOWN_ACTION_SHAPES[actionId], idx + 1);
 		_townSprites[idx].load(shapesName);
 	}
 
@@ -336,25 +336,25 @@ Common::String Town::createTownText(Character &ch) {
 	switch (_townActionId) {
 	case 0:
 		// Bank
-		return Common::String::format(BANK_TEXT,
+		return Common::String::format(Res.BANK_TEXT,
 			XeenEngine::printMil(party._bankGold).c_str(),
 			XeenEngine::printMil(party._bankGems).c_str(),
 			XeenEngine::printMil(party._gold).c_str(),
 			XeenEngine::printMil(party._gems).c_str());
 	case 1:
 		// Blacksmith
-		return Common::String::format(BLACKSMITH_TEXT,
+		return Common::String::format(Res.BLACKSMITH_TEXT,
 			XeenEngine::printMil(party._gold).c_str());
 
 	case 2:
 		// Guild
-		return !ch.guildMember() ? GUILD_NOT_MEMBER_TEXT :
-			Common::String::format(GUILD_TEXT, ch._name.c_str());
+		return !ch.guildMember() ? Res.GUILD_NOT_MEMBER_TEXT :
+			Common::String::format(Res.GUILD_TEXT, ch._name.c_str());
 
 	case 3:
 		// Tavern
-		return Common::String::format(TAVERN_TEXT, ch._name.c_str(),
-			FOOD_AND_DRINK, XeenEngine::printMil(party._gold).c_str());
+		return Common::String::format(Res.TAVERN_TEXT, ch._name.c_str(),
+			Res.FOOD_AND_DRINK, XeenEngine::printMil(party._gold).c_str());
 
 	case 4:
 		// Temple
@@ -421,7 +421,7 @@ Common::String Town::createTownText(Character &ch) {
 		_donation = _flag1 ? 0 : _v14;
 		_healCost += _v6 + _v5;
 
-		return Common::String::format(TEMPLE_TEXT, ch._name.c_str(),
+		return Common::String::format(Res.TEMPLE_TEXT, ch._name.c_str(),
 			_healCost, _donation, XeenEngine::printK(_uncurseCost).c_str(),
 			XeenEngine::printMil(party._gold).c_str());
 
@@ -460,17 +460,17 @@ Common::String Town::createTownText(Character &ch) {
 
 		if (_experienceToNextLevel >= 0x10000 && ch._level._permanent < _v20) {
 			int nextLevel = ch._level._permanent + 1;
-			return Common::String::format(EXPERIENCE_FOR_LEVEL,
+			return Common::String::format(Res.EXPERIENCE_FOR_LEVEL,
 				ch._name.c_str(), _experienceToNextLevel, nextLevel);
 		} else if (ch._level._permanent >= 20) {
 			_experienceToNextLevel = 1;
-			msg = Common::String::format(LEARNED_ALL, ch._name.c_str());
+			msg = Common::String::format(Res.LEARNED_ALL, ch._name.c_str());
 		} else {
-			msg = Common::String::format(ELIGIBLE_FOR_LEVEL,
+			msg = Common::String::format(Res.ELIGIBLE_FOR_LEVEL,
 				ch._name.c_str(), ch._level._permanent + 1);
 		}
 
-		return Common::String::format(TRAINING_TEXT,
+		return Common::String::format(Res.TRAINING_TEXT,
 			XeenEngine::printMil(party._gold).c_str());
 
 	default:
@@ -608,8 +608,8 @@ Character *Town::doTavernOptions(Character *c) {
 				sound.playSound("gulp.voc");
 				_v21 = 1;
 
-				screen._windows[10].writeString(Common::String::format(TAVERN_TEXT,
-					c->_name.c_str(), GOOD_STUFF,
+				screen._windows[10].writeString(Common::String::format(Res.TAVERN_TEXT,
+					c->_name.c_str(), Res.GOOD_STUFF,
 					XeenEngine::printMil(party._gold).c_str()));
 				drawButtons(&screen._windows[0]);
 				screen._windows[10].update();
@@ -660,7 +660,7 @@ Character *Town::doTavernOptions(Character *c) {
 
 		if (YesNo::show(_vm, false, true)) {
 			if (party._food >= _v22) {
-				ErrorScroll::show(_vm, FOOD_PACKS_FULL, WT_2);
+				ErrorScroll::show(_vm, Res.FOOD_PACKS_FULL, WT_2);
 			} else if (party.subtract(0, _v23, 0, WT_2)) {
 				party._food = _v22;
 				sound.stopSound();
@@ -700,8 +700,8 @@ Character *Town::doTavernOptions(Character *c) {
 		// Sign In
 		idx = isDarkCc ? (party._mazeId - 29) >> 1 : party._mazeId - 28;
 		assert(idx >= 0);
-		party._mazePosition.x = TAVERN_EXIT_LIST[isDarkCc ? 1 : 0][_townActionId][idx][0];
-		party._mazePosition.y = TAVERN_EXIT_LIST[isDarkCc ? 1 : 0][_townActionId][idx][1];
+		party._mazePosition.x = Res.TAVERN_EXIT_LIST[isDarkCc ? 1 : 0][_townActionId][idx][0];
+		party._mazePosition.y = Res.TAVERN_EXIT_LIST[isDarkCc ? 1 : 0][_townActionId][idx][1];
 
 		if (!isDarkCc || party._mazeId == 29)
 			party._mazeDirection = DIR_WEST;
@@ -725,8 +725,8 @@ Character *Town::doTavernOptions(Character *c) {
 	case Common::KEYCODE_t:
 		if (!c->noActions()) {
 			if (!_v21) {
-				screen._windows[10].writeString(Common::String::format(TAVERN_TEXT,
-					c->_name.c_str(), HAVE_A_DRINK,
+				screen._windows[10].writeString(Common::String::format(Res.TAVERN_TEXT,
+					c->_name.c_str(), Res.HAVE_A_DRINK,
 					XeenEngine::printMil(party._gold).c_str()));
 				drawButtons(&screen);
 				screen._windows[10].update();
@@ -734,8 +734,8 @@ Character *Town::doTavernOptions(Character *c) {
 			} else {
 				_v21 = 0;
 				if (c->_conditions[DRUNK]) {
-					screen._windows[10].writeString(Common::String::format(TAVERN_TEXT,
-						c->_name.c_str(), YOURE_DRUNK,
+					screen._windows[10].writeString(Common::String::format(Res.TAVERN_TEXT,
+						c->_name.c_str(), Res.YOURE_DRUNK,
 						XeenEngine::printMil(party._gold).c_str()));
 					drawButtons(&screen);
 					screen._windows[10].update();
@@ -960,8 +960,8 @@ void Town::depositWithdrawl(int choice) {
 	_buttons[1]._value = Common::KEYCODE_e;
 	_buttons[2]._value = Common::KEYCODE_ESCAPE;
 
-	Common::String msg = Common::String::format(GOLD_GEMS,
-		DEPOSIT_WITHDRAWL[choice],
+	Common::String msg = Common::String::format(Res.GOLD_GEMS,
+		Res.DEPOSIT_WITHDRAWL[choice],
 		XeenEngine::printMil(gold).c_str(),
 		XeenEngine::printMil(gems).c_str());
 
@@ -994,7 +994,7 @@ void Town::depositWithdrawl(int choice) {
 			(!choice && !party._gold && !flag)) {
 			party.notEnough(flag, choice, 1, WT_2);
 		} else {
-			screen._windows[35].writeString(AMOUNT);
+			screen._windows[35].writeString(Res.AMOUNT);
 			int amount = NumericInput::show(_vm, 35, 10, 77);
 
 			if (amount) {
@@ -1026,7 +1026,7 @@ void Town::depositWithdrawl(int choice) {
 			}
 
 			sound.playSound(voc);
-			msg = Common::String::format(GOLD_GEMS_2, DEPOSIT_WITHDRAWL[choice],
+			msg = Common::String::format(Res.GOLD_GEMS_2, Res.DEPOSIT_WITHDRAWL[choice],
 				XeenEngine::printMil(gold).c_str(), XeenEngine::printMil(gems).c_str());
 			screen._windows[35].writeString(msg);
 			screen._windows[35].update();
diff --git a/engines/xeen/worldofxeen/clouds_cutscenes.cpp b/engines/xeen/worldofxeen/clouds_cutscenes.cpp
index 4e50336..2c8d5f0 100644
--- a/engines/xeen/worldofxeen/clouds_cutscenes.cpp
+++ b/engines/xeen/worldofxeen/clouds_cutscenes.cpp
@@ -217,7 +217,7 @@ bool CloudsCutscenes::showCloudsIntro() {
 	groupo.draw(screen, 0);
 	groupo.draw(screen, 1, Common::Point(160, 0));
 	crodo.draw(screen, 0, Common::Point(0, -5));
-	screen._windows[0].writeString(CLOUDS_INTRO1);
+	screen._windows[0].writeString(Res.CLOUDS_INTRO1);
 	
 	// Unroll a scroll
 	if (doScroll(false, true))
@@ -285,7 +285,7 @@ bool CloudsCutscenes::showCloudsIntro() {
 			case 12:
 			case 13: {
 				crodo.draw(screen, 0, Common::Point(0, -5));
-				screen._windows[0].writeString(CLOUDS_INTRO1);
+				screen._windows[0].writeString(Res.CLOUDS_INTRO1);
 
 				ctr5 = (ctr5 + 1) % 19;
 				WAIT(1);
@@ -298,7 +298,7 @@ bool CloudsCutscenes::showCloudsIntro() {
 				if (lookup > 30)
 					lookup = 30;
 				frameCtr = _INTRO_FRAMES_VALS[_INTRO_FRAMES_LOOKUP[lineCtr]][lookup];
-				screen._windows[0].writeString(CLOUDS_INTRO1);
+				screen._windows[0].writeString(Res.CLOUDS_INTRO1);
 
 				ctr5 = (ctr5 + 1) % 19;
 				WAIT(1);
diff --git a/engines/xeen/worldofxeen/darkside_cutscenes.cpp b/engines/xeen/worldofxeen/darkside_cutscenes.cpp
index 2dc9c60..f3bae10 100644
--- a/engines/xeen/worldofxeen/darkside_cutscenes.cpp
+++ b/engines/xeen/worldofxeen/darkside_cutscenes.cpp
@@ -1158,8 +1158,8 @@ bool DarkSideCutscenes::showDarkSideEnding() {
 }
 
 void DarkSideCutscenes::showDarkSideScore() {
-	Common::String str = Common::String::format(DARKSIDE_ENDING1, _vm->_endingScore);
-	showPharaohEndText(str.c_str(), DARKSIDE_ENDING2);
+	Common::String str = Common::String::format(Res.DARKSIDE_ENDING1, _vm->_endingScore);
+	showPharaohEndText(str.c_str(), Res.DARKSIDE_ENDING2);
 }
 
 void DarkSideCutscenes::showPharaohEndText(const char *msg1, const char *msg2, const char *msg3) {
@@ -1210,11 +1210,11 @@ void DarkSideCutscenes::showPharaohEndText(const char *msg1, const char *msg2, c
 			claw.draw(screen, idx % 5, Common::Point(XLIST2[idx], YLIST2[idx]), SPRFLAG_800);
 
 			// Form the text string to display the text
-			Common::String str1 = Common::String::format(PHAROAH_ENDING_TEXT1,
+			Common::String str1 = Common::String::format(Res.PHAROAH_ENDING_TEXT1,
 				text[pageNum]);
 			screen._windows[39].writeString(str1);
 
-			Common::String str2 = Common::String::format(PHAROAH_ENDING_TEXT2,
+			Common::String str2 = Common::String::format(Res.PHAROAH_ENDING_TEXT2,
 				text[pageNum]);
 			screen._windows[39].writeString(str2);
 





More information about the Scummvm-git-logs mailing list