Files
oboe/test/item_legacy.cpp

1264 lines
42 KiB
C++

//
// item_legacy.cpp
// BoE
//
// Created by Celtic Minstrel on 15-10-01.
//
//
#include "catch.hpp"
#include "scenario/item.hpp"
#include "oldstructs.hpp"
#include "spell.hpp"
#include "damage.hpp"
#include "race.hpp"
static void set_item_name(legacy::item_record_type& item, const std::string& full, const std::string& name) {
size_t full_size = std::min<size_t>(24, full.size());
std::copy_n(full.begin(), full_size, item.full_name);
item.full_name[full_size] = '\0';
size_t name_size = std::min<size_t>(14, name.size());
std::copy_n(name.begin(), name_size, item.name);
item.name[name_size] = '\0';
}
TEST_CASE("Converting items from legacy scenarios") {
legacy::item_record_type old_item = {
5, 7,
2, 1, 3, 10, 0, 0,
52, 0, 0, 100, 0,
0, 500, 80, 12,
{0,0}, "Test Item", "Item",
3, 0x3F, 0, 0,
};
cItem new_item;
SECTION("Basic info") {
new_item.import_legacy(old_item);
CHECK(new_item.variety == eItemType::ARROW);
CHECK(new_item.item_level == 7);
CHECK(new_item.awkward == 2);
CHECK(new_item.bonus == 1);
CHECK(new_item.protection == 3);
CHECK(new_item.charges == 10);
CHECK(new_item.max_charges == 10);
CHECK(new_item.graphic_num == 62);
CHECK(new_item.type_flag == 100);
CHECK(new_item.value == 500);
CHECK(new_item.weight == 80);
CHECK(new_item.special_class == 12);
CHECK(new_item.full_name == "Test Item");
CHECK(new_item.name == "Item");
CHECK(new_item.treas_class == 3);
CHECK(new_item.ident);
CHECK(new_item.property);
CHECK(new_item.magic);
CHECK(new_item.cursed);
CHECK(new_item.unsellable);
CHECK(new_item.concealed);
}
SECTION("Weapons") {
SECTION("Edged") {
set_item_name(old_item, "Test Sword", "Sword");
old_item.variety = 2;
old_item.type = 1;
new_item.import_legacy(old_item);
CHECK(new_item.variety == eItemType::TWO_HANDED);
CHECK(new_item.weap_type == eSkill::EDGED_WEAPONS);
CHECK(new_item.full_name == "Test Sword");
CHECK(new_item.name == "Sword");
}
SECTION("Bashing") {
set_item_name(old_item, "Test Mace", "Mace");
old_item.variety = 1;
old_item.type = 2;
new_item.import_legacy(old_item);
CHECK(new_item.variety == eItemType::ONE_HANDED);
CHECK(new_item.weap_type == eSkill::BASHING_WEAPONS);
CHECK(new_item.full_name == "Test Mace");
CHECK(new_item.name == "Mace");
}
SECTION("Pole") {
set_item_name(old_item, "Test Spear", "Spear");
old_item.variety = 2;
old_item.type = 3;
new_item.import_legacy(old_item);
CHECK(new_item.variety == eItemType::TWO_HANDED);
CHECK(new_item.weap_type == eSkill::POLE_WEAPONS);
CHECK(new_item.full_name == "Test Spear");
CHECK(new_item.name == "Spear");
}
SECTION("Bow") {
set_item_name(old_item, "Test Bow", "Bow");
old_item.variety = 4;
new_item.import_legacy(old_item);
CHECK(new_item.variety == eItemType::BOW);
CHECK(new_item.weap_type == eSkill::ARCHERY);
CHECK(new_item.full_name == "Test Bow");
CHECK(new_item.name == "Bow");
}
SECTION("Crossbow") {
set_item_name(old_item, "Test Crossbow", "Crossbow");
old_item.variety = 23;
new_item.import_legacy(old_item);
CHECK(new_item.variety == eItemType::CROSSBOW);
CHECK(new_item.weap_type == eSkill::ARCHERY);
CHECK(new_item.full_name == "Test Crossbow");
CHECK(new_item.name == "Crossbow");
}
SECTION("Sling") {
set_item_name(old_item, "Test Sling", "Sling");
old_item.variety = 25;
new_item.import_legacy(old_item);
CHECK(new_item.variety == eItemType::MISSILE_NO_AMMO);
CHECK(new_item.weap_type == eSkill::ARCHERY);
CHECK(new_item.missile == 12);
CHECK(new_item.full_name == "Test Sling");
CHECK(new_item.name == "Sling");
}
SECTION("Arrows") {
set_item_name(old_item, "Test Arrows", "Arrows");
old_item.variety = 5;
new_item.import_legacy(old_item);
CHECK(new_item.variety == eItemType::ARROW);
CHECK(new_item.missile == 4);
CHECK(new_item.full_name == "Test Arrows");
CHECK(new_item.name == "Arrows");
old_item.item_properties = 0;
new_item.import_legacy(old_item);
CHECK(new_item.missile == 3);
}
SECTION("Bolts") {
set_item_name(old_item, "Test Bolts", "Bolts");
old_item.variety = 24;
new_item.import_legacy(old_item);
CHECK(new_item.variety == eItemType::BOLTS);
CHECK(new_item.missile == 4);
CHECK(new_item.full_name == "Test Bolts");
CHECK(new_item.name == "Bolts");
old_item.item_properties = 0;
new_item.import_legacy(old_item);
CHECK(new_item.missile == 3);
}
SECTION("Darts") {
set_item_name(old_item, "Test Darts", "Darts");
old_item.variety = 6;
new_item.import_legacy(old_item);
CHECK(new_item.variety == eItemType::THROWN_MISSILE);
CHECK(new_item.weap_type == eSkill::THROWN_MISSILES);
CHECK(new_item.missile == 1);
CHECK(new_item.full_name == "Test Darts");
CHECK(new_item.name == "Darts");
}
SECTION("Knives") {
set_item_name(old_item, "Test Knives", "Knives");
old_item.variety = 6;
new_item.import_legacy(old_item);
CHECK(new_item.variety == eItemType::THROWN_MISSILE);
CHECK(new_item.weap_type == eSkill::THROWN_MISSILES);
CHECK(new_item.missile == 10);
CHECK(new_item.full_name == "Test Knives");
CHECK(new_item.name == "Knives");
}
SECTION("Javelins") {
set_item_name(old_item, "Test Javelins", "Javelins");
old_item.variety = 6;
new_item.import_legacy(old_item);
CHECK(new_item.variety == eItemType::THROWN_MISSILE);
CHECK(new_item.weap_type == eSkill::THROWN_MISSILES);
CHECK(new_item.missile == 5);
CHECK(new_item.full_name == "Test Javelins");
CHECK(new_item.name == "Javelins");
}
SECTION("Razordisks") {
set_item_name(old_item, "Test Razordisks", "Razordisks");
old_item.variety = 6;
new_item.import_legacy(old_item);
CHECK(new_item.variety == eItemType::THROWN_MISSILE);
CHECK(new_item.weap_type == eSkill::THROWN_MISSILES);
CHECK(new_item.missile == 7);
CHECK(new_item.full_name == "Test Razordisks");
CHECK(new_item.name == "Razordisks");
}
SECTION("Rocks") {
set_item_name(old_item, "Test Rocks", "Rocks");
old_item.variety = 6;
new_item.import_legacy(old_item);
CHECK(new_item.variety == eItemType::THROWN_MISSILE);
CHECK(new_item.weap_type == eSkill::THROWN_MISSILES);
CHECK(new_item.missile == 12);
CHECK(new_item.full_name == "Test Rocks");
CHECK(new_item.name == "Rocks");
}
}
SECTION("With abilities") {
old_item.ability_strength = 120;
// Weapon abilities
SECTION("Flaming Weapon") {
old_item.ability = 1;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::DAMAGING_WEAPON);
CHECK(new_item.abil_strength == 120);
CHECK(new_item.abil_data.damage == eDamageType::UNBLOCKABLE);
CHECK(new_item.abil_data.value == int(eDamageType::UNBLOCKABLE));
CHECK_FALSE(new_item.can_use());
}
SECTION("Demon Slayer") {
old_item.ability = 2;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::SLAYER_WEAPON);
CHECK(new_item.abil_strength == 120);
CHECK(new_item.abil_data.race == eRace::DEMON);
CHECK(new_item.abil_data.value == int(eRace::DEMON));
CHECK_FALSE(new_item.can_use());
}
SECTION("Undead Slayer") {
old_item.ability = 3;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::SLAYER_WEAPON);
CHECK(new_item.abil_strength == 120);
CHECK(new_item.abil_data.race == eRace::UNDEAD);
CHECK_FALSE(new_item.can_use());
}
SECTION("Lizard Slayer") {
old_item.ability = 4;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::SLAYER_WEAPON);
CHECK(new_item.abil_strength == 120);
CHECK(new_item.abil_data.race == eRace::REPTILE);
CHECK_FALSE(new_item.can_use());
}
SECTION("Giant Slayer") {
old_item.ability = 5;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::SLAYER_WEAPON);
CHECK(new_item.abil_strength == 120);
CHECK(new_item.abil_data.race == eRace::GIANT);
CHECK_FALSE(new_item.can_use());
}
SECTION("Mage Slayer") {
old_item.ability = 6;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::SLAYER_WEAPON);
CHECK(new_item.abil_strength == 120);
CHECK(new_item.abil_data.race == eRace::MAGE);
CHECK_FALSE(new_item.can_use());
}
SECTION("Priest Slayer") {
old_item.ability = 7;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::SLAYER_WEAPON);
CHECK(new_item.abil_strength == 120);
CHECK(new_item.abil_data.race == eRace::PRIEST);
CHECK_FALSE(new_item.can_use());
}
SECTION("Bug Slayer") {
old_item.ability = 8;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::SLAYER_WEAPON);
CHECK(new_item.abil_strength == 120);
CHECK(new_item.abil_data.race == eRace::BUG);
CHECK_FALSE(new_item.can_use());
}
SECTION("Acidic Weapon") {
old_item.ability = 9;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::STATUS_WEAPON);
CHECK(new_item.abil_strength == 120);
CHECK(new_item.abil_data.status == eStatus::ACID);
CHECK_FALSE(new_item.can_use());
}
SECTION("Soulsucker") {
old_item.ability = 10;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::SOULSUCKER);
CHECK(new_item.abil_strength == 120);
CHECK_FALSE(new_item.can_use());
}
SECTION("Drain Missiles") {
old_item.ability = 11;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::DRAIN_MISSILES);
CHECK(new_item.abil_strength == 120);
CHECK_FALSE(new_item.can_use());
}
SECTION("Weak Weapon") {
old_item.ability = 12;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::WEAK_WEAPON);
CHECK(new_item.abil_strength == 120);
CHECK_FALSE(new_item.can_use());
}
SECTION("Causes Fear") {
old_item.ability = 13;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::CAUSES_FEAR);
CHECK(new_item.abil_strength == 120);
CHECK_FALSE(new_item.can_use());
}
SECTION("Poisoned Weapon") {
old_item.ability = 14;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::STATUS_WEAPON);
CHECK(new_item.abil_strength == 120);
CHECK(new_item.abil_data.status == eStatus::POISON);
CHECK_FALSE(new_item.can_use());
}
// Inherent abilities
SECTION("Protection") {
old_item.ability = 30;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::DAMAGE_PROTECTION);
CHECK(new_item.abil_strength == 120);
CHECK(new_item.abil_data.damage == eDamageType::WEAPON);
CHECK_FALSE(new_item.can_use());
}
SECTION("Full Protection") {
old_item.ability = 31;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::FULL_PROTECTION);
CHECK(new_item.abil_strength == 120);
CHECK_FALSE(new_item.can_use());
}
SECTION("Fire Protection") {
old_item.ability = 32;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::DAMAGE_PROTECTION);
CHECK(new_item.abil_strength == 60);
CHECK(new_item.abil_data.damage == eDamageType::FIRE);
CHECK_FALSE(new_item.can_use());
}
SECTION("Cold Protection") {
old_item.ability = 33;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::DAMAGE_PROTECTION);
CHECK(new_item.abil_strength == 60);
CHECK(new_item.abil_data.damage == eDamageType::COLD);
CHECK_FALSE(new_item.can_use());
}
SECTION("Poison Protection") {
old_item.ability = 34;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::STATUS_PROTECTION);
CHECK(new_item.abil_strength == 120);
CHECK(new_item.abil_data.status == eStatus::POISON);
CHECK_FALSE(new_item.can_use());
}
SECTION("Magic Protection") {
old_item.ability = 35;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::DAMAGE_PROTECTION);
CHECK(new_item.abil_strength == 60);
CHECK(new_item.abil_data.damage == eDamageType::MAGIC);
CHECK_FALSE(new_item.can_use());
}
SECTION("Acid Protection") {
old_item.ability = 36;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::STATUS_PROTECTION);
CHECK(new_item.abil_strength == 120);
CHECK(new_item.abil_data.status == eStatus::ACID);
CHECK_FALSE(new_item.can_use());
}
SECTION("Skill") {
old_item.ability = 37;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::SKILL);
CHECK(new_item.abil_strength == 7);
CHECK(new_item.abil_data.value == 120);
CHECK_FALSE(new_item.can_use());
}
SECTION("Strength") {
old_item.ability = 38;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::BOOST_STAT);
CHECK(new_item.abil_strength == 1);
CHECK(new_item.abil_data.skill == eSkill::STRENGTH);
CHECK(new_item.desc == "Original ability strength was 120");
CHECK_FALSE(new_item.can_use());
}
SECTION("Dexterity") {
old_item.ability = 39;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::BOOST_STAT);
CHECK(new_item.abil_strength == 1);
CHECK(new_item.abil_data.skill == eSkill::DEXTERITY);
CHECK(new_item.desc == "Original ability strength was 120");
CHECK_FALSE(new_item.can_use());
}
SECTION("Intelligence") {
old_item.ability = 40;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::BOOST_STAT);
CHECK(new_item.abil_strength == 1);
CHECK(new_item.abil_data.skill == eSkill::INTELLIGENCE);
CHECK(new_item.desc == "Original ability strength was 120");
CHECK_FALSE(new_item.can_use());
}
SECTION("Accuracy") {
old_item.ability = 41;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::ACCURACY);
CHECK(new_item.abil_strength == 120);
CHECK_FALSE(new_item.can_use());
}
SECTION("Thieving") {
old_item.ability = 42;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::THIEVING);
CHECK(new_item.abil_strength == 120);
CHECK_FALSE(new_item.can_use());
}
SECTION("Giant Strength") {
old_item.ability = 43;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::GIANT_STRENGTH);
CHECK(new_item.abil_strength == 7);
CHECK(new_item.abil_data.value == 120);
CHECK_FALSE(new_item.can_use());
}
SECTION("Lighter Object") {
old_item.ability = 44;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::LIGHTER_OBJECT);
CHECK(new_item.abil_strength == 120);
CHECK_FALSE(new_item.can_use());
}
SECTION("Heavier Object") {
old_item.ability = 45;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::HEAVIER_OBJECT);
CHECK(new_item.abil_strength == 120);
CHECK_FALSE(new_item.can_use());
}
SECTION("Occasional Bless") {
old_item.ability = 46;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::OCCASIONAL_STATUS);
CHECK(new_item.abil_strength == 120);
CHECK(new_item.abil_data.status == eStatus::BLESS_CURSE);
CHECK(new_item.magic_use_type == eItemUse::HELP_ONE);
CHECK_FALSE(new_item.can_use());
}
SECTION("Occasional Haste") {
old_item.ability = 47;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::OCCASIONAL_STATUS);
CHECK(new_item.abil_strength == 120);
CHECK(new_item.abil_data.status == eStatus::HASTE_SLOW);
CHECK(new_item.magic_use_type == eItemUse::HELP_ONE);
CHECK_FALSE(new_item.can_use());
}
SECTION("Life Saving") {
old_item.ability = 48;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::LIFE_SAVING);
CHECK(new_item.abil_strength == 120);
CHECK_FALSE(new_item.can_use());
}
SECTION("Protect from Petrify") {
old_item.ability = 49;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::PROTECT_FROM_PETRIFY);
CHECK(new_item.abil_strength == 120);
CHECK_FALSE(new_item.can_use());
}
SECTION("Regenerate") {
old_item.ability = 50;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::REGENERATE);
CHECK(new_item.abil_strength == 120);
CHECK_FALSE(new_item.can_use());
}
SECTION("Poison Augment") {
old_item.ability = 51;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::POISON_AUGMENT);
CHECK(new_item.abil_strength == 120);
CHECK_FALSE(new_item.can_use());
}
SECTION("Disease Party") {
old_item.ability = 52;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::OCCASIONAL_STATUS);
CHECK(new_item.abil_strength == 120);
CHECK(new_item.abil_data.status == eStatus::DISEASE);
CHECK(new_item.magic_use_type == eItemUse::HARM_ALL);
CHECK_FALSE(new_item.can_use());
}
SECTION("Will") {
old_item.ability = 53;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::WILL);
CHECK(new_item.abil_strength == 120);
CHECK_FALSE(new_item.can_use());
}
SECTION("Free Action") {
old_item.ability = 54;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::FREE_ACTION);
CHECK(new_item.abil_strength == 120);
CHECK_FALSE(new_item.can_use());
}
SECTION("Speed") {
old_item.ability = 55;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::SPEED);
CHECK(new_item.abil_strength == 18);
CHECK_FALSE(new_item.can_use());
}
SECTION("Slow Wearer") {
old_item.ability = 56;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::SLOW_WEARER);
CHECK(new_item.abil_strength == 24);
CHECK_FALSE(new_item.can_use());
}
SECTION("Protection from Undead") {
old_item.ability = 57;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::DAMAGE_PROTECTION);
CHECK(new_item.abil_strength == 60);
CHECK(new_item.abil_data.damage == eDamageType::UNDEAD);
CHECK_FALSE(new_item.can_use());
}
SECTION("Protection from Demons") {
old_item.ability = 58;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::DAMAGE_PROTECTION);
CHECK(new_item.abil_strength == 60);
CHECK(new_item.abil_data.damage == eDamageType::DEMON);
CHECK_FALSE(new_item.can_use());
}
SECTION("Protection from Humanoids") {
old_item.ability = 59;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::PROTECT_FROM_SPECIES);
CHECK(new_item.abil_strength == 60);
CHECK(new_item.abil_data.race == eRace::HUMANOID);
CHECK_FALSE(new_item.can_use());
}
SECTION("Protection from Reptiles") {
old_item.ability = 60;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::PROTECT_FROM_SPECIES);
CHECK(new_item.abil_strength == 60);
CHECK(new_item.abil_data.race == eRace::REPTILE);
CHECK_FALSE(new_item.can_use());
}
SECTION("Protection from Giants") {
old_item.ability = 61;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::PROTECT_FROM_SPECIES);
CHECK(new_item.abil_strength == 60);
CHECK(new_item.abil_data.race == eRace::GIANT);
CHECK_FALSE(new_item.can_use());
}
SECTION("Protection from Disease") {
old_item.ability = 62;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::STATUS_PROTECTION);
CHECK(new_item.abil_strength == 120);
CHECK(new_item.abil_data.status == eStatus::DISEASE);
CHECK_FALSE(new_item.can_use());
}
// Non-spell usable abilities
SECTION("Poison Weapon") {
old_item.ability = 70;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::POISON_WEAPON);
CHECK(new_item.abil_strength == 120);
CHECK(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK_FALSE(new_item.use_outdoors());
CHECK_FALSE(new_item.use_magic());
}
SECTION("Curse/Bless User") {
old_item.ability = 71;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::AFFECT_STATUS);
CHECK(new_item.abil_strength == 120);
CHECK(new_item.abil_data.status == eStatus::BLESS_CURSE);
CHECK(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK(new_item.use_outdoors());
CHECK(new_item.use_magic());
}
SECTION("Cure/Cause Poison") {
old_item.ability = 72;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::AFFECT_STATUS);
CHECK(new_item.abil_strength == 120);
CHECK(new_item.abil_data.status == eStatus::POISON);
CHECK(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK(new_item.use_outdoors());
CHECK(new_item.use_magic());
}
SECTION("Speed/Slow User") {
old_item.ability = 73;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::AFFECT_STATUS);
CHECK(new_item.abil_strength == 120);
CHECK(new_item.abil_data.status == eStatus::HASTE_SLOW);
CHECK(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK(new_item.use_outdoors());
CHECK(new_item.use_magic());
}
SECTION("Add/Lose Invulnerability") {
old_item.ability = 74;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::AFFECT_STATUS);
CHECK(new_item.abil_strength == 120);
CHECK(new_item.abil_data.status == eStatus::INVULNERABLE);
CHECK(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK_FALSE(new_item.use_outdoors());
CHECK(new_item.use_magic());
}
SECTION("Add/Lose Magic Resistance") {
old_item.ability = 75;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::AFFECT_STATUS);
CHECK(new_item.abil_strength == 120);
CHECK(new_item.abil_data.status == eStatus::MAGIC_RESISTANCE);
CHECK(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK_FALSE(new_item.use_outdoors());
CHECK(new_item.use_magic());
}
SECTION("Add/Lose Web") {
old_item.ability = 76;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::AFFECT_STATUS);
CHECK(new_item.abil_strength == 120);
CHECK(new_item.abil_data.status == eStatus::WEBS);
CHECK(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK_FALSE(new_item.use_outdoors());
CHECK(new_item.use_magic());
}
SECTION("Cure/Cause Disease") {
old_item.ability = 77;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::AFFECT_STATUS);
CHECK(new_item.abil_strength == 120);
CHECK(new_item.abil_data.status == eStatus::DISEASE);
CHECK(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK(new_item.use_outdoors());
CHECK(new_item.use_magic());
}
SECTION("Add/Lose Sanctuary") {
old_item.ability = 78;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::AFFECT_STATUS);
CHECK(new_item.abil_strength == 120);
CHECK(new_item.abil_data.status == eStatus::INVISIBLE);
CHECK(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK_FALSE(new_item.use_outdoors());
CHECK(new_item.use_magic());
}
SECTION("Cure/Cause Dumbfounding") {
old_item.ability = 79;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::AFFECT_STATUS);
CHECK(new_item.abil_strength == 120);
CHECK(new_item.abil_data.status == eStatus::DUMB);
CHECK(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK_FALSE(new_item.use_outdoors());
CHECK(new_item.use_magic());
}
SECTION("Add/Lose Martyr's Shield") {
old_item.ability = 80;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::AFFECT_STATUS);
CHECK(new_item.abil_strength == 120);
CHECK(new_item.abil_data.status == eStatus::MARTYRS_SHIELD);
CHECK(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK_FALSE(new_item.use_outdoors());
CHECK(new_item.use_magic());
}
SECTION("Cure/Cause Sleep") {
old_item.ability = 81;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::AFFECT_STATUS);
CHECK(new_item.abil_strength == 120);
CHECK(new_item.abil_data.status == eStatus::ASLEEP);
CHECK(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK_FALSE(new_item.use_outdoors());
CHECK(new_item.use_magic());
}
SECTION("Cure/Cause Paralysis") {
old_item.ability = 82;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::AFFECT_STATUS);
CHECK(new_item.abil_strength == 120);
CHECK(new_item.abil_data.status == eStatus::PARALYZED);
CHECK(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK_FALSE(new_item.use_outdoors());
CHECK(new_item.use_magic());
}
SECTION("Cure/Cause Acid") {
old_item.ability = 83;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::AFFECT_STATUS);
CHECK(new_item.abil_strength == 120);
CHECK(new_item.abil_data.status == eStatus::ACID);
CHECK(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK_FALSE(new_item.use_outdoors());
CHECK(new_item.use_magic());
}
SECTION("Bliss") {
old_item.ability = 84;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::BLISS_DOOM);
CHECK(new_item.abil_strength == 120);
CHECK_FALSE(new_item.abil_harms());
CHECK(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK_FALSE(new_item.use_outdoors());
CHECK(new_item.use_magic());
}
SECTION("Add/Lose Experience") {
old_item.ability = 85;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::AFFECT_EXPERIENCE);
CHECK(new_item.abil_strength == 120);
CHECK(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK(new_item.use_outdoors());
CHECK(new_item.use_magic());
}
SECTION("Add/Lose Skill Points") {
old_item.ability = 86;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::AFFECT_SKILL_POINTS);
CHECK(new_item.abil_strength == 120);
CHECK(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK(new_item.use_outdoors());
CHECK(new_item.use_magic());
}
SECTION("Add/Lose Health") {
old_item.ability = 87;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::AFFECT_HEALTH);
CHECK(new_item.abil_strength == 120);
CHECK(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK(new_item.use_outdoors());
CHECK(new_item.use_magic());
}
SECTION("Add/Lose Spell Points") {
old_item.ability = 88;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::AFFECT_SPELL_POINTS);
CHECK(new_item.abil_strength == 120);
CHECK(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK(new_item.use_outdoors());
CHECK(new_item.use_magic());
}
SECTION("Doom") {
old_item.ability = 89;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::BLISS_DOOM);
CHECK(new_item.abil_strength == 120);
CHECK(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK_FALSE(new_item.use_outdoors());
CHECK(new_item.use_magic());
CHECK(new_item.abil_harms());
}
SECTION("Light") {
old_item.ability = 90;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::LIGHT);
CHECK(new_item.abil_strength == 120);
CHECK(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK_FALSE(new_item.use_outdoors());
CHECK_FALSE(new_item.use_magic());
CHECK_FALSE(new_item.abil_harms());
}
SECTION("Stealth") {
old_item.ability = 91;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::AFFECT_PARTY_STATUS);
CHECK(new_item.abil_strength == 120);
CHECK(new_item.abil_data.party == ePartyStatus::STEALTH);
CHECK(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK_FALSE(new_item.use_outdoors());
CHECK(new_item.use_magic());
CHECK_FALSE(new_item.abil_harms());
}
SECTION("Firewalk") {
old_item.ability = 92;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::AFFECT_PARTY_STATUS);
CHECK(new_item.abil_strength == 120);
CHECK(new_item.abil_data.party == ePartyStatus::FIREWALK);
CHECK(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK_FALSE(new_item.use_outdoors());
CHECK(new_item.use_magic());
CHECK_FALSE(new_item.abil_harms());
}
SECTION("Flying") {
old_item.ability = 93;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::AFFECT_PARTY_STATUS);
CHECK(new_item.abil_strength == 120);
CHECK(new_item.abil_data.party == ePartyStatus::FLIGHT);
CHECK_FALSE(new_item.use_in_town());
CHECK_FALSE(new_item.use_in_combat());
CHECK(new_item.use_outdoors());
CHECK(new_item.use_magic());
CHECK_FALSE(new_item.abil_harms());
}
SECTION("Major Healing") {
old_item.ability = 94;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::HEALTH_POISON);
CHECK(new_item.abil_strength == 120);
CHECK(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK(new_item.use_outdoors());
CHECK(new_item.use_magic());
CHECK_FALSE(new_item.abil_harms());
}
// Spell usable abilities
SECTION("Flame") {
old_item.ability = 110;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::CAST_SPELL);
CHECK(new_item.abil_strength == 241);
CHECK(new_item.abil_data.spell == eSpell::FLAME);
CHECK_FALSE(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK_FALSE(new_item.use_outdoors());
CHECK(new_item.use_magic());
}
SECTION("Fireball") {
old_item.ability = 111;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::CAST_SPELL);
CHECK(new_item.abil_strength == 241);
CHECK(new_item.abil_data.spell == eSpell::FIREBALL);
CHECK_FALSE(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK_FALSE(new_item.use_outdoors());
CHECK(new_item.use_magic());
}
SECTION("Firestorm") {
old_item.ability = 112;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::CAST_SPELL);
CHECK(new_item.abil_strength == 241);
CHECK(new_item.abil_data.spell == eSpell::FIRESTORM);
CHECK_FALSE(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK_FALSE(new_item.use_outdoors());
CHECK(new_item.use_magic());
}
SECTION("Kill") {
old_item.ability = 113;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::CAST_SPELL);
CHECK(new_item.abil_strength == 241);
CHECK(new_item.abil_data.spell == eSpell::KILL);
CHECK_FALSE(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK_FALSE(new_item.use_outdoors());
CHECK(new_item.use_magic());
}
SECTION("Ice Bolt") {
old_item.ability = 114;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::CAST_SPELL);
CHECK(new_item.abil_strength == 241);
CHECK(new_item.abil_data.spell == eSpell::ICE_BOLT);
CHECK_FALSE(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK_FALSE(new_item.use_outdoors());
CHECK(new_item.use_magic());
}
SECTION("Slow") {
old_item.ability = 115;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::CAST_SPELL);
CHECK(new_item.abil_strength == 241);
CHECK(new_item.abil_data.spell == eSpell::SLOW);
CHECK_FALSE(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK_FALSE(new_item.use_outdoors());
CHECK(new_item.use_magic());
}
SECTION("Shockwave") {
old_item.ability = 116;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::CAST_SPELL);
CHECK(new_item.abil_strength == 241);
CHECK(new_item.abil_data.spell == eSpell::SHOCKWAVE);
CHECK_FALSE(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK_FALSE(new_item.use_outdoors());
CHECK(new_item.use_magic());
}
SECTION("Dispel Undead") {
old_item.ability = 117;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::CAST_SPELL);
CHECK(new_item.abil_strength == 241);
CHECK(new_item.abil_data.spell == eSpell::DISPEL_UNDEAD);
CHECK_FALSE(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK_FALSE(new_item.use_outdoors());
CHECK(new_item.use_magic());
}
SECTION("Dispel Spirit") {
old_item.ability = 118;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::CAST_SPELL);
CHECK(new_item.abil_strength == 241);
CHECK(new_item.abil_data.spell == eSpell::RAVAGE_SPIRIT);
CHECK_FALSE(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK_FALSE(new_item.use_outdoors());
CHECK(new_item.use_magic());
}
SECTION("Summoning") {
old_item.ability = 119;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::SUMMONING);
CHECK(new_item.abil_strength == 50);
CHECK(new_item.abil_data.value == 120);
CHECK(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK_FALSE(new_item.use_outdoors());
CHECK(new_item.use_magic());
}
SECTION("Mass Summoning") {
old_item.ability = 120;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::MASS_SUMMONING);
CHECK(new_item.abil_strength == 6);
CHECK(new_item.abil_data.value == 120);
CHECK(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK_FALSE(new_item.use_outdoors());
CHECK(new_item.use_magic());
}
SECTION("Acid Spray") {
old_item.ability = 121;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::CAST_SPELL);
CHECK(new_item.abil_strength == 241);
CHECK(new_item.abil_data.spell == eSpell::ACID_SPRAY);
CHECK_FALSE(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK_FALSE(new_item.use_outdoors());
CHECK(new_item.use_magic());
}
SECTION("Stinking Cloud") {
old_item.ability = 122;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::CAST_SPELL);
CHECK(new_item.abil_strength == 241);
CHECK(new_item.abil_data.spell == eSpell::FOUL_VAPOR);
CHECK_FALSE(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK_FALSE(new_item.use_outdoors());
CHECK(new_item.use_magic());
}
SECTION("Sleep Field") {
old_item.ability = 123;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::CAST_SPELL);
CHECK(new_item.abil_strength == 241);
CHECK(new_item.abil_data.spell == eSpell::CLOUD_SLEEP);
CHECK_FALSE(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK_FALSE(new_item.use_outdoors());
CHECK(new_item.use_magic());
}
SECTION("Venom") {
old_item.ability = 124;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::CAST_SPELL);
CHECK(new_item.abil_strength == 241);
CHECK(new_item.abil_data.spell == eSpell::POISON);
CHECK_FALSE(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK_FALSE(new_item.use_outdoors());
CHECK(new_item.use_magic());
}
SECTION("Shockstorm") {
old_item.ability = 125;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::CAST_SPELL);
CHECK(new_item.abil_strength == 241);
CHECK(new_item.abil_data.spell == eSpell::SHOCKSTORM);
CHECK_FALSE(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK_FALSE(new_item.use_outdoors());
CHECK(new_item.use_magic());
}
SECTION("Paralysis") {
old_item.ability = 126;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::CAST_SPELL);
CHECK(new_item.abil_strength == 241);
CHECK(new_item.abil_data.spell == eSpell::PARALYZE_BEAM);
CHECK_FALSE(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK_FALSE(new_item.use_outdoors());
CHECK(new_item.use_magic());
}
SECTION("Web Spell") {
old_item.ability = 127;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::CAST_SPELL);
CHECK(new_item.abil_strength == 241);
CHECK(new_item.abil_data.spell == eSpell::GOO_BOMB);
CHECK_FALSE(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK_FALSE(new_item.use_outdoors());
CHECK(new_item.use_magic());
}
SECTION("Strengthen Target") {
old_item.ability = 128;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::CAST_SPELL);
CHECK(new_item.abil_strength == 241);
CHECK(new_item.abil_data.spell == eSpell::STRENGTHEN_TARGET);
CHECK_FALSE(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK_FALSE(new_item.use_outdoors());
CHECK(new_item.use_magic());
}
SECTION("Quickfire") {
old_item.ability = 129;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::QUICKFIRE);
CHECK(new_item.abil_strength == 120);
CHECK(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK_FALSE(new_item.use_outdoors());
CHECK(new_item.use_magic());
}
SECTION("Mass Charm") {
old_item.ability = 130;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::CAST_SPELL);
CHECK(new_item.abil_strength == 241);
CHECK(new_item.abil_data.spell == eSpell::CHARM_MASS);
CHECK_FALSE(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK_FALSE(new_item.use_outdoors());
CHECK(new_item.use_magic());
}
SECTION("Magic Map") {
old_item.ability = 131;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::CAST_SPELL);
CHECK(new_item.abil_strength == 241);
CHECK(new_item.abil_data.spell == eSpell::MAGIC_MAP);
CHECK(new_item.use_in_town());
CHECK_FALSE(new_item.use_in_combat());
CHECK_FALSE(new_item.use_outdoors());
CHECK(new_item.use_magic());
}
SECTION("Dispel Barrier") {
old_item.ability = 132;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::CAST_SPELL);
CHECK(new_item.abil_strength == 241);
CHECK(new_item.abil_data.spell == eSpell::DISPEL_BARRIER);
CHECK(new_item.use_in_town());
CHECK_FALSE(new_item.use_in_combat());
CHECK_FALSE(new_item.use_outdoors());
CHECK(new_item.use_magic());
}
SECTION("Ice Wall") {
old_item.ability = 133;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::CAST_SPELL);
CHECK(new_item.abil_strength == 241);
CHECK(new_item.abil_data.spell == eSpell::WALL_ICE_BALL);
CHECK_FALSE(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK_FALSE(new_item.use_outdoors());
CHECK(new_item.use_magic());
}
SECTION("Charm") {
old_item.ability = 134;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::CAST_SPELL);
CHECK(new_item.abil_strength == 120);
CHECK(new_item.abil_data.spell == eSpell::CHARM_FOE);
CHECK_FALSE(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK_FALSE(new_item.use_outdoors());
CHECK(new_item.use_magic());
}
SECTION("Antimagic Cloud") {
old_item.ability = 135;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::CAST_SPELL);
CHECK(new_item.abil_strength == 241);
CHECK(new_item.abil_data.spell == eSpell::ANTIMAGIC);
CHECK(new_item.use_in_town());
CHECK(new_item.use_in_combat());
CHECK_FALSE(new_item.use_outdoors());
CHECK(new_item.use_magic());
}
// Reagent abilities
SECTION("Holly/Toadstool") {
old_item.ability = 150;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::HOLLY);
CHECK_FALSE(new_item.can_use());
}
SECTION("Comfrey Root") {
old_item.ability = 151;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::COMFREY);
CHECK_FALSE(new_item.can_use());
}
SECTION("Glowing Nettle") {
old_item.ability = 152;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::NETTLE);
CHECK_FALSE(new_item.can_use());
}
SECTION("Crypt Shroom/Wormgrass") {
old_item.ability = 153;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::WORMGRASS);
CHECK_FALSE(new_item.can_use());
}
SECTION("Asptongue Mold") {
old_item.ability = 154;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::ASPTONGUE);
CHECK_FALSE(new_item.can_use());
}
SECTION("Ember Flowers") {
old_item.ability = 155;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::EMBERF);
CHECK_FALSE(new_item.can_use());
}
SECTION("Graymold") {
old_item.ability = 156;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::GRAYMOLD);
CHECK_FALSE(new_item.can_use());
}
SECTION("Mandrake Root") {
old_item.ability = 157;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::MANDRAKE);
CHECK_FALSE(new_item.can_use());
}
SECTION("Sapphire") {
old_item.ability = 158;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::SAPPHIRE);
CHECK_FALSE(new_item.can_use());
}
SECTION("Smoky Crystal") {
old_item.ability = 159;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::SMOKY_CRYSTAL);
CHECK_FALSE(new_item.can_use());
}
SECTION("Resurrection Balm") {
old_item.ability = 160;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::RESURRECTION_BALM);
CHECK_FALSE(new_item.can_use());
}
SECTION("Lockpicks") {
old_item.ability = 161;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::LOCKPICKS);
CHECK(new_item.abil_strength == 120);
CHECK_FALSE(new_item.can_use());
}
// Missile Abilities
SECTION("Returning Missile") {
old_item.ability = 170;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::RETURNING_MISSILE);
CHECK_FALSE(new_item.can_use());
}
SECTION("Lightning Missile") {
old_item.ability = 171;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::DAMAGING_WEAPON);
CHECK(new_item.abil_strength == 120);
CHECK(new_item.abil_data.damage == eDamageType::FIRE);
CHECK_FALSE(new_item.can_use());
}
SECTION("Exploding Missile") {
old_item.ability = 172;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::EXPLODING_WEAPON);
CHECK(new_item.abil_strength == 120);
CHECK(new_item.abil_data.damage == eDamageType::FIRE);
CHECK_FALSE(new_item.can_use());
}
SECTION("Acid Missile") {
old_item.ability = 173;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::STATUS_WEAPON);
CHECK(new_item.abil_strength == 240);
CHECK(new_item.abil_data.status == eStatus::ACID);
CHECK_FALSE(new_item.can_use());
}
SECTION("Slay Undead") {
old_item.ability = 174;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::SLAYER_WEAPON);
CHECK(new_item.abil_strength == 123);
CHECK(new_item.abil_data.race == eRace::UNDEAD);
CHECK_FALSE(new_item.can_use());
}
SECTION("Slay Demon") {
old_item.ability = 175;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::SLAYER_WEAPON);
CHECK(new_item.abil_strength == 123);
CHECK(new_item.abil_data.race == eRace::DEMON);
CHECK_FALSE(new_item.can_use());
}
SECTION("Heal Target") {
old_item.ability = 176;
new_item.import_legacy(old_item);
CHECK(new_item.ability == eItemAbil::HEALING_WEAPON);
CHECK(new_item.abil_strength == 120);
CHECK_FALSE(new_item.can_use());
}
}
}