Merge and generalize more item abilities

- It's now possible to create an item that protects from any type of damage, status effect, or species (though some status effects may not be implemented)
- It's now possible to create slayer weapons for any species
This commit is contained in:
2015-01-13 10:35:12 -05:00
parent 84689cacaf
commit d6aeba8e0f
7 changed files with 188 additions and 169 deletions

View File

@@ -266,31 +266,39 @@ void cItem::append(legacy::item_record_type& old){
case 0:
ability = eItemAbil::NONE;
break;
case 1:
ability = eItemAbil::FLAMING_WEAPON;
case 1: // Flaming weapon
ability = eItemAbil::DAMAGING_WEAPON;
abil_data[1] = int(eDamageType::UNBLOCKABLE);
break;
case 2:
ability = eItemAbil::DEMON_SLAYER;
case 2: // Demon slayer
ability = eItemAbil::SLAYER_WEAPON;
abil_data[1] = int(eRace::DEMON);
break;
case 3:
ability = eItemAbil::UNDEAD_SLAYER;
case 3: // Undead slayer
ability = eItemAbil::SLAYER_WEAPON;
abil_data[1] = int(eRace::UNDEAD);
break;
case 4:
ability = eItemAbil::LIZARD_SLAYER;
case 4: // Lizard slayer
ability = eItemAbil::SLAYER_WEAPON;
abil_data[1] = int(eRace::REPTILE);
break;
case 5:
ability = eItemAbil::GIANT_SLAYER;
case 5: // Giant slayer
ability = eItemAbil::SLAYER_WEAPON;
abil_data[1] = int(eRace::GIANT);
break;
case 6:
ability = eItemAbil::MAGE_SLAYER;
case 6: // Mage slayer
ability = eItemAbil::SLAYER_WEAPON;
abil_data[1] = int(eRace::MAGE);
break;
case 7:
ability = eItemAbil::PRIEST_SLAYER;
case 7: // Priest slayer
ability = eItemAbil::SLAYER_WEAPON;
abil_data[1] = int(eRace::PRIEST);
break;
case 8:
ability = eItemAbil::BUG_SLAYER;
case 8: // Bug slayer
ability = eItemAbil::SLAYER_WEAPON;
abil_data[1] = int(eRace::BUG);
break;
case 9:
case 9: // Acidic weapon
ability = eItemAbil::STATUS_WEAPON;
abil_data[1] = int(eStatus::ACID);
break;
@@ -306,31 +314,37 @@ void cItem::append(legacy::item_record_type& old){
case 13:
ability = eItemAbil::CAUSES_FEAR;
break;
case 14:
case 14: // Poisoned weapon
ability = eItemAbil::STATUS_WEAPON;
abil_data[1] = int(eStatus::POISON);
break;
// General abilities
case 30:
ability = eItemAbil::PROTECTION;
case 30: // Protection
ability = eItemAbil::DAMAGE_PROTECTION;
abil_data[1] = int(eDamageType::WEAPON);
break;
case 31:
ability = eItemAbil::FULL_PROTECTION;
break;
case 32:
ability = eItemAbil::FIRE_PROTECTION;
case 32: // Fire protection
ability = eItemAbil::DAMAGE_PROTECTION;
abil_data[1] = int(eDamageType::FIRE);
break;
case 33:
ability = eItemAbil::COLD_PROTECTION;
case 33: // Cold protection
ability = eItemAbil::DAMAGE_PROTECTION;
abil_data[1] = int(eDamageType::COLD);
break;
case 34:
ability = eItemAbil::POISON_PROTECTION;
case 34: // Poison protection
ability = eItemAbil::STATUS_PROTECTION;
abil_data[1] = int(eStatus::POISON);
break;
case 35:
ability = eItemAbil::MAGIC_PROTECTION;
case 35: // Magic protection
ability = eItemAbil::DAMAGE_PROTECTION;
abil_data[1] = int(eDamageType::MAGIC);
break;
case 36:
ability = eItemAbil::ACID_PROTECTION;
case 36: // Acid protection
ability = eItemAbil::STATUS_PROTECTION;
abil_data[1] = int(eStatus::ACID);
break;
case 37:
ability = eItemAbil::SKILL;
@@ -392,23 +406,29 @@ void cItem::append(legacy::item_record_type& old){
case 56:
ability = eItemAbil::SLOW_WEARER;
break;
case 57:
ability = eItemAbil::PROTECT_FROM_UNDEAD;
case 57: // Protect from undead
ability = eItemAbil::DAMAGE_PROTECTION;
abil_data[1] = int(eDamageType::UNDEAD);
break;
case 58:
ability = eItemAbil::PROTECT_FROM_DEMONS;
case 58: // Protect from demons
ability = eItemAbil::DAMAGE_PROTECTION;
abil_data[1] = int(eDamageType::DEMON);
break;
case 59:
ability = eItemAbil::PROTECT_FROM_HUMANOIDS;
case 59: // Protect from humanoids
ability = eItemAbil::PROTECT_FROM_SPECIES;
abil_data[1] = int(eRace::HUMANOID);
break;
case 60:
ability = eItemAbil::PROTECT_FROM_REPTILES;
case 60: // Protect from reptiles
ability = eItemAbil::PROTECT_FROM_SPECIES;
abil_data[1] = int(eRace::REPTILE);
break;
case 61:
ability = eItemAbil::PROTECT_FROM_GIANTS;
case 61: // Protect from giants
ability = eItemAbil::PROTECT_FROM_SPECIES;
abil_data[1] = int(eRace::GIANT);
break;
case 62:
ability = eItemAbil::PROTECT_FROM_DISEASE;
case 62: // Protect from disease
ability = eItemAbil::STATUS_PROTECTION;
abil_data[1] = int(eStatus::DISEASE);
break;
// Usable abilities
case 70:
@@ -677,10 +697,12 @@ void cItem::append(legacy::item_record_type& old){
ability = eItemAbil::MISSILE_ACID;
break;
case 174:
ability = eItemAbil::MISSILE_SLAY_UNDEAD;
ability = eItemAbil::MISSILE_SLAYER;
abil_data[1] = int(eRace::UNDEAD);
break;
case 175:
ability = eItemAbil::MISSILE_SLAY_DEMON;
ability = eItemAbil::MISSILE_SLAYER;
abil_data[1] = int(eRace::DEMON);
break;
case 176:
ability = eItemAbil::MISSILE_HEAL_TARGET;

View File

@@ -292,27 +292,17 @@ inline bool isWeaponType(eItemType type) {
enum class eItemAbil {
// Weapon abilities
NONE = 0,
FLAMING_WEAPON = 1,
DEMON_SLAYER = 2,
UNDEAD_SLAYER = 3,
LIZARD_SLAYER = 4,
GIANT_SLAYER = 5,
MAGE_SLAYER = 6,
PRIEST_SLAYER = 7,
BUG_SLAYER = 8,
DAMAGING_WEAPON = 1,
SLAYER_WEAPON = 2,
STATUS_WEAPON = 9,
SOULSUCKER = 10,
DRAIN_MISSILES = 11,
WEAK_WEAPON = 12,
CAUSES_FEAR = 13,
// General abilities
PROTECTION = 30,
DAMAGE_PROTECTION = 30,
FULL_PROTECTION = 31,
FIRE_PROTECTION = 32,
COLD_PROTECTION = 33,
POISON_PROTECTION = 34,
MAGIC_PROTECTION = 35,
ACID_PROTECTION = 36,
STATUS_PROTECTION = 36,
SKILL = 37,
STRENGTH = 38,
DEXTERITY = 39,
@@ -333,12 +323,7 @@ enum class eItemAbil {
FREE_ACTION = 54,
SPEED = 55,
SLOW_WEARER = 56,
PROTECT_FROM_UNDEAD = 57,
PROTECT_FROM_DEMONS = 58,
PROTECT_FROM_HUMANOIDS = 59,
PROTECT_FROM_REPTILES = 60,
PROTECT_FROM_GIANTS = 61,
PROTECT_FROM_DISEASE = 62,
PROTECT_FROM_SPECIES = 57,
// Nonspell Usable
POISON_WEAPON = 70, //put poison on weapon
AFFECT_STATUS = 71,
@@ -376,8 +361,7 @@ enum class eItemAbil {
MISSILE_LIGHTNING = 171,
MISSILE_EXPLODING = 172,
MISSILE_ACID = 173,
MISSILE_SLAY_UNDEAD = 174,
MISSILE_SLAY_DEMON = 175,
MISSILE_SLAYER = 174,
MISSILE_HEAL_TARGET = 176,
};