Skip to content

Commit

Permalink
XEEN: Implemented assembleItemName method
Browse files Browse the repository at this point in the history
  • Loading branch information
dreammaster committed Feb 2, 2015
1 parent 7febe77 commit 2b8303c
Show file tree
Hide file tree
Showing 6 changed files with 113 additions and 5 deletions.
4 changes: 3 additions & 1 deletion engines/xeen/items.h
Expand Up @@ -30,7 +30,9 @@ namespace Xeen {

#define TOTAL_ITEMS 10

enum BonusFlags { FLAG_CURSED = 0x40 };
enum BonusFlags {
ITEMFLAG_BONUS_MASK = 0xBF, ITEMFLAG_CURSED = 0x40, ITEMFLAG_BROKEN = 0x80
};

class XeenItem {
public:
Expand Down
64 changes: 64 additions & 0 deletions engines/xeen/party.cpp
Expand Up @@ -855,6 +855,70 @@ int Character::getNumAwards() const {
return total;
}

/**
* Assembles a full lines description for a specified item for use in
* the Items dialog
*/
Common::String Character::assembleItemName(int itemIndex, int displayNum, int typeNum) {
Spells &spells = *Party::_vm->_spells;

switch (typeNum) {
case 0: {
// Weapons
XeenItem &i = _weapons[itemIndex];
return Common::String::format("\f%02u%s%s%s\f%02u%s%s%s", displayNum,
!i._bonusFlags ? spells._maeNames[i._material] : "",
(i._bonusFlags & ITEMFLAG_BROKEN) ? ITEM_BROKEN : "",
(i._bonusFlags & ITEMFLAG_CURSED) ? ITEM_CURSED : "",
WEAPON_NAMES[i._id],
!i._bonusFlags ? "" : BONUS_NAMES[i._bonusFlags & ITEMFLAG_BONUS_MASK],
(i._bonusFlags & (ITEMFLAG_BROKEN | ITEMFLAG_CURSED)) ||
!i._bonusFlags ? "\b " : ""
);
}

case 1: {
// Armor
XeenItem &i = _armor[itemIndex];
return Common::String::format("\f%02u%s%s%s\f%02u%s%s", displayNum,
!i._bonusFlags ? "" : spells._maeNames[i._material],
(i._bonusFlags & ITEMFLAG_BROKEN) ? ITEM_BROKEN : "",
(i._bonusFlags & ITEMFLAG_CURSED) ? ITEM_CURSED : "",
ARMOR_NAMES[i._id],
(i._bonusFlags & (ITEMFLAG_BROKEN | ITEMFLAG_CURSED)) ||
!i._bonusFlags ? "\b " : ""
);
}

case 2: {
// Accessories
XeenItem &i = _accessories[itemIndex];
return Common::String::format("\f%02u%s%s%s\f%02u%s%s", displayNum,
!i._bonusFlags ? "" : spells._maeNames[i._material],
(i._bonusFlags & ITEMFLAG_BROKEN) ? ITEM_BROKEN : "",
(i._bonusFlags & ITEMFLAG_CURSED) ? ITEM_CURSED : "",
ARMOR_NAMES[i._id],
(i._bonusFlags & (ITEMFLAG_BROKEN | ITEMFLAG_CURSED)) ||
!i._bonusFlags ? "\b " : ""
);
}

case 3: {
// Misc
XeenItem &i = _misc[itemIndex];
return Common::String::format("\f%02u%s%s%s\f%02u%s%s", displayNum,
!i._bonusFlags ? "" : spells._maeNames[i._material],
(i._bonusFlags & ITEMFLAG_BROKEN) ? ITEM_BROKEN : "",
(i._bonusFlags & ITEMFLAG_CURSED) ? ITEM_CURSED : "",
ARMOR_NAMES[i._id],
(i._bonusFlags & (ITEMFLAG_BROKEN | ITEMFLAG_CURSED)) ||
!i._id ? "\b " : ""
);
}
default:
return "";
}
}

/*------------------------------------------------------------------------*/

Expand Down
2 changes: 2 additions & 0 deletions engines/xeen/party.h
Expand Up @@ -182,6 +182,8 @@ class Character {
int getNumSkills() const;

int getNumAwards() const;

Common::String assembleItemName(int itemIndex, int displayNum, int typeNum);
};

class Roster: public Common::Array<Character> {
Expand Down
32 changes: 32 additions & 0 deletions engines/xeen/resources.cpp
Expand Up @@ -1008,5 +1008,37 @@ 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] = {
"", "Dragon Slayer", "Undead Eater", "Golem Smasher",
"Bug Zapper", "Monster Masher", "Beast Bopper"
};
const char *const 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 ",
"bardiche ", "glaive ", "halberd ", "pike ", "flamberge ", "trident ",
"staff ", "hammer ", "naginata ", "battle axe ", "grand axe ", "great axe ",
"short bow ", "long bow ", "crossbow ", "sling ", "Xeen Slayer Sword"
};

const char *const 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] = {
nullptr, "ring ", "belt ", "broach ", "medal ", "charm ", "cameo ",
"scarab ", "pendant ", "necklace ", "amulet "
};

const char *const MISC_NAMES[22] = {
nullptr, "rod ", "jewel ", "gem ", "box ", "orb ", "horn ", "coin ",
"wand ", "whistle ", "potion ", "scroll ", "RogueVM",
"bogus", "bogus", "bogus", "bogus", "bogus",
"bogus", "bogus", "bogus", "bogus"
};

} // End of namespace Xeen
8 changes: 8 additions & 0 deletions engines/xeen/resources.h
Expand Up @@ -346,6 +346,14 @@ 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];

} // End of namespace Xeen

#endif /* XEEN_RESOURCES_H */
8 changes: 4 additions & 4 deletions engines/xeen/town.cpp
Expand Up @@ -863,10 +863,10 @@ Character *Town::doTempleOptions(Character *c) {
case Common::KEYCODE_u:
if (_uncurseCost && party.subtract(0, _uncurseCost, 0, WT_2)) {
for (int idx = 0; idx < 9; ++idx) {
c->_weapons[idx]._bonusFlags &= ~FLAG_CURSED;
c->_armor[idx]._bonusFlags &= ~FLAG_CURSED;
c->_accessories[idx]._bonusFlags &= ~FLAG_CURSED;
c->_misc[idx]._bonusFlags &= ~FLAG_CURSED;
c->_weapons[idx]._bonusFlags &= ~ITEMFLAG_CURSED;
c->_armor[idx]._bonusFlags &= ~ITEMFLAG_CURSED;
c->_accessories[idx]._bonusFlags &= ~ITEMFLAG_CURSED;
c->_misc[idx]._bonusFlags &= ~ITEMFLAG_CURSED;
}

_v1 = 1440;
Expand Down

0 comments on commit 2b8303c

Please sign in to comment.