aboutsummaryrefslogtreecommitdiff
path: root/engines/xeen/character.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/xeen/character.cpp')
-rw-r--r--engines/xeen/character.cpp53
1 files changed, 51 insertions, 2 deletions
diff --git a/engines/xeen/character.cpp b/engines/xeen/character.cpp
index f712e78e8c..02c578a313 100644
--- a/engines/xeen/character.cpp
+++ b/engines/xeen/character.cpp
@@ -61,10 +61,56 @@ int XeenItem::getAttributeCategory() const {
/*------------------------------------------------------------------------*/
-InventoryItems::InventoryItems() {
+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];
}
+/**
+* Return whether a given item passes class-based usage restrictions
+*/
+bool InventoryItems::passRestrictions(int itemId, bool showError) const {
+ CharacterClass charClass = _character->_class;
+
+ switch (charClass) {
+ case CLASS_KNIGHT:
+ case CLASS_PALADIN:
+ return true;
+
+ case CLASS_ARCHER:
+ case CLASS_CLERIC:
+ case CLASS_SORCERER:
+ case CLASS_ROBBER:
+ case CLASS_NINJA:
+ case CLASS_BARBARIAN:
+ case CLASS_DRUID:
+ case CLASS_RANGER: {
+ if (!(ITEM_RESTRICTIONS[itemId + RESTRICTION_OFFSETS[_category]] &
+ (1 << (charClass - CLASS_ARCHER))))
+ return true;
+ break;
+ }
+
+ default:
+ break;
+ }
+
+ Common::String name = _names[itemId];
+ if (showError) {
+ Common::String msg = Common::String::format(NOT_PROFICIENT,
+ CLASS_NAMES[charClass], name.c_str());
+ ErrorScroll::show(Party::_vm, msg, WT_FREEZE_WAIT);
+ }
+
+ return false;
+}
+
+
void InventoryItems::discardItem(int itemIndex) {
operator[](itemIndex).clear();
sort();
@@ -127,7 +173,10 @@ AttributePair::AttributePair() {
/*------------------------------------------------------------------------*/
-Character::Character(): _items(_weapons, _armor, _accessories, _misc) {
+Character::Character():
+ _weapons(this, CATEGORY_WEAPON), _armor(this, CATEGORY_ARMOR),
+ _accessories(this, CATEGORY_ACCESSORY), _misc(this, CATEGORY_MISC),
+ _items(_weapons, _armor, _accessories, _misc) {
_sex = MALE;
_race = HUMAN;
_xeenSide = 0;