More tests for importing legacy special nodes
Errors fixed: - If Cave Lore / Woodsman not converted correctly - If Have Item Class Equipped erroneously converted to its +take variant (...probably) - Text Response didn't correctly convert the alternate answer
This commit is contained in:
@@ -246,6 +246,9 @@ void cSpecial::import_legacy(legacy::special_node_type& old){
|
|||||||
case 151: case 152: // if has cave lore or woodsman
|
case 151: case 152: // if has cave lore or woodsman
|
||||||
type = eSpecType::IF_TRAIT;
|
type = eSpecType::IF_TRAIT;
|
||||||
ex1a = old.type - 147;
|
ex1a = old.type - 147;
|
||||||
|
// Set it to require at least 1 PC:
|
||||||
|
ex2a = 1;
|
||||||
|
ex2b = 2;
|
||||||
break;
|
break;
|
||||||
case 63: // Trap used to force a specific picture
|
case 63: // Trap used to force a specific picture
|
||||||
type = eSpecType::ONCE_TRAP;
|
type = eSpecType::ONCE_TRAP;
|
||||||
@@ -264,12 +267,13 @@ void cSpecial::import_legacy(legacy::special_node_type& old){
|
|||||||
case 24: ex2a = 103; break; // Skill points
|
case 24: ex2a = 103; break; // Skill points
|
||||||
case 25: ex2a = 104; break; // Level
|
case 25: ex2a = 104; break; // Level
|
||||||
}
|
}
|
||||||
} else ex2a = 11;
|
} else ex2a = int(eSkill::MAGE_LORE);
|
||||||
ex2b = 0;
|
ex2b = 0;
|
||||||
break;
|
break;
|
||||||
case 154: // text response
|
case 154: // text response
|
||||||
type = eSpecType::IF_TEXT_RESPONSE;
|
type = eSpecType::IF_TEXT_RESPONSE;
|
||||||
ex1a -= 160;
|
ex1a -= 160;
|
||||||
|
ex2a -= 160;
|
||||||
break;
|
break;
|
||||||
case 229: // Outdoor store - fix spell IDs
|
case 229: // Outdoor store - fix spell IDs
|
||||||
type = eSpecType::ENTER_SHOP;
|
type = eSpecType::ENTER_SHOP;
|
||||||
@@ -313,7 +317,7 @@ void cSpecial::import_legacy(legacy::special_node_type& old){
|
|||||||
break;
|
break;
|
||||||
case 141: case 146: // If equip item class (and maybe take)
|
case 141: case 146: // If equip item class (and maybe take)
|
||||||
type = eSpecType::IF_EQUIP_ITEM_CLASS;
|
type = eSpecType::IF_EQUIP_ITEM_CLASS;
|
||||||
ex2a = (old.type - 131) / 5;
|
ex2a = (old.type - 141) / 5;
|
||||||
break;
|
break;
|
||||||
case 182: // Destroy all monsters of particular type
|
case 182: // Destroy all monsters of particular type
|
||||||
type = eSpecType::TOWN_NUKE_MONSTS;
|
type = eSpecType::TOWN_NUKE_MONSTS;
|
||||||
|
@@ -779,6 +779,252 @@ TEST_CASE("When converting legacy special nodes (if-then)") {
|
|||||||
CHECK(newSpec.ex2b == 13);
|
CHECK(newSpec.ex2b == 13);
|
||||||
CHECK(newSpec.jumpto == 12);
|
CHECK(newSpec.jumpto == 12);
|
||||||
}
|
}
|
||||||
|
SECTION("Town Number?") {
|
||||||
|
oldSpec.type = 131;
|
||||||
|
oldSpec.ex1a = 12; oldSpec.ex1b = 20;
|
||||||
|
newSpec.import_legacy(oldSpec);
|
||||||
|
CHECK(newSpec.type == eSpecType::IF_TOWN_NUM);
|
||||||
|
CHECK(newSpec.ex1a == 12); CHECK(newSpec.ex1b == 20);
|
||||||
|
CHECK(newSpec.jumpto == 12);
|
||||||
|
}
|
||||||
|
SECTION("Random Number?") {
|
||||||
|
oldSpec.type = 132;
|
||||||
|
oldSpec.ex1a = 100; oldSpec.ex1b = 20;
|
||||||
|
newSpec.import_legacy(oldSpec);
|
||||||
|
CHECK(newSpec.type == eSpecType::IF_RANDOM);
|
||||||
|
CHECK(newSpec.ex1a == 100); CHECK(newSpec.ex1b == 20);
|
||||||
|
CHECK(newSpec.jumpto == 12);
|
||||||
|
}
|
||||||
|
SECTION("Have Special Item?") {
|
||||||
|
oldSpec.type = 133;
|
||||||
|
oldSpec.ex1a = 17; oldSpec.ex1b = 20;
|
||||||
|
newSpec.import_legacy(oldSpec);
|
||||||
|
CHECK(newSpec.type == eSpecType::IF_HAVE_SPECIAL_ITEM);
|
||||||
|
CHECK(newSpec.ex1a == 17); CHECK(newSpec.ex1b == 20);
|
||||||
|
CHECK(newSpec.jumpto == 12);
|
||||||
|
}
|
||||||
|
SECTION("Stuff Done Compare?") {
|
||||||
|
oldSpec.type = 134;
|
||||||
|
oldSpec.sd1 = 4; oldSpec.sd2 = 5;
|
||||||
|
oldSpec.ex1a = 6; oldSpec.ex1b = 7;
|
||||||
|
oldSpec.ex2b = 8;
|
||||||
|
newSpec.import_legacy(oldSpec);
|
||||||
|
CHECK(newSpec.type == eSpecType::IF_SDF_COMPARE);
|
||||||
|
CHECK(newSpec.sd1 == 4); CHECK(newSpec.sd2 == 5);
|
||||||
|
CHECK(newSpec.ex1a == 6); CHECK(newSpec.ex1b == 7);
|
||||||
|
CHECK(newSpec.ex2b == 8);
|
||||||
|
CHECK(newSpec.jumpto == 12);
|
||||||
|
}
|
||||||
|
SECTION("Town Terrain This Type?") {
|
||||||
|
oldSpec.type = 135;
|
||||||
|
oldSpec.ex1a = 13; oldSpec.ex1b = 14;
|
||||||
|
oldSpec.ex2a = 15; oldSpec.ex2b = 20;
|
||||||
|
newSpec.import_legacy(oldSpec);
|
||||||
|
CHECK(newSpec.type == eSpecType::IF_TER_TYPE);
|
||||||
|
CHECK(newSpec.ex1a == 13); CHECK(newSpec.ex1b == 14);
|
||||||
|
CHECK(newSpec.ex2a == 15); CHECK(newSpec.ex2b == 20);
|
||||||
|
CHECK(newSpec.jumpto == 12);
|
||||||
|
}
|
||||||
|
SECTION("Outdoor Terrain This Type?") {
|
||||||
|
oldSpec.type = 136;
|
||||||
|
oldSpec.ex1a = 13; oldSpec.ex1b = 14;
|
||||||
|
oldSpec.ex2a = 15; oldSpec.ex2b = 20;
|
||||||
|
newSpec.import_legacy(oldSpec);
|
||||||
|
CHECK(newSpec.type == eSpecType::IF_TER_TYPE);
|
||||||
|
CHECK(newSpec.ex1a == 13); CHECK(newSpec.ex1b == 14);
|
||||||
|
CHECK(newSpec.ex2a == 15); CHECK(newSpec.ex2b == 20);
|
||||||
|
CHECK(newSpec.jumpto == 12);
|
||||||
|
}
|
||||||
|
SECTION("Has Gold?") {
|
||||||
|
oldSpec.type = 137;
|
||||||
|
oldSpec.ex1a = 100; oldSpec.ex1b = 20;
|
||||||
|
newSpec.import_legacy(oldSpec);
|
||||||
|
CHECK(newSpec.type == eSpecType::IF_HAS_GOLD);
|
||||||
|
CHECK(newSpec.ex1a == 100); CHECK(newSpec.ex1b == 20);
|
||||||
|
CHECK(newSpec.ex2a == 0);
|
||||||
|
CHECK(newSpec.jumpto == 12);
|
||||||
|
}
|
||||||
|
SECTION("Has Food?") {
|
||||||
|
oldSpec.type = 138;
|
||||||
|
oldSpec.ex1a = 100; oldSpec.ex1b = 20;
|
||||||
|
newSpec.import_legacy(oldSpec);
|
||||||
|
CHECK(newSpec.type == eSpecType::IF_HAS_FOOD);
|
||||||
|
CHECK(newSpec.ex1a == 100); CHECK(newSpec.ex1b == 20);
|
||||||
|
CHECK(newSpec.ex2a == 0);
|
||||||
|
CHECK(newSpec.jumpto == 12);
|
||||||
|
}
|
||||||
|
SECTION("Item Class on Space?") {
|
||||||
|
oldSpec.type = 139;
|
||||||
|
oldSpec.ex1a = 15; oldSpec.ex1b = 16;
|
||||||
|
oldSpec.ex2a = 100; oldSpec.ex2b = 20;
|
||||||
|
newSpec.import_legacy(oldSpec);
|
||||||
|
CHECK(newSpec.type == eSpecType::IF_ITEM_CLASS_ON_SPACE);
|
||||||
|
CHECK(newSpec.ex1a == 15); CHECK(newSpec.ex1b == 16);
|
||||||
|
CHECK(newSpec.ex2a == 100); CHECK(newSpec.ex2b == 20);
|
||||||
|
CHECK(newSpec.ex2c == 0);
|
||||||
|
CHECK(newSpec.jumpto == 12);
|
||||||
|
}
|
||||||
|
SECTION("Have Item with Class?") {
|
||||||
|
oldSpec.type = 140;
|
||||||
|
oldSpec.ex1a = 100; oldSpec.ex1b = 20;
|
||||||
|
newSpec.import_legacy(oldSpec);
|
||||||
|
CHECK(newSpec.type == eSpecType::IF_HAVE_ITEM_CLASS);
|
||||||
|
CHECK(newSpec.ex1a == 100); CHECK(newSpec.ex1b == 20);
|
||||||
|
CHECK(newSpec.ex2a == 0);
|
||||||
|
CHECK(newSpec.jumpto == 12);
|
||||||
|
}
|
||||||
|
SECTION("Equipped Item with Class?") {
|
||||||
|
oldSpec.type = 141;
|
||||||
|
oldSpec.ex1a = 100; oldSpec.ex1b = 20;
|
||||||
|
newSpec.import_legacy(oldSpec);
|
||||||
|
CHECK(newSpec.type == eSpecType::IF_EQUIP_ITEM_CLASS);
|
||||||
|
CHECK(newSpec.ex1a == 100); CHECK(newSpec.ex1b == 20);
|
||||||
|
CHECK(newSpec.ex2a == 0);
|
||||||
|
CHECK(newSpec.jumpto == 12);
|
||||||
|
}
|
||||||
|
SECTION("Has Gold? (and take)") {
|
||||||
|
oldSpec.type = 142;
|
||||||
|
oldSpec.ex1a = 100; oldSpec.ex1b = 20;
|
||||||
|
newSpec.import_legacy(oldSpec);
|
||||||
|
CHECK(newSpec.type == eSpecType::IF_HAS_GOLD);
|
||||||
|
CHECK(newSpec.ex1a == 100); CHECK(newSpec.ex1b == 20);
|
||||||
|
CHECK(newSpec.ex2a == 1);
|
||||||
|
CHECK(newSpec.jumpto == 12);
|
||||||
|
}
|
||||||
|
SECTION("Has Food? (and take)") {
|
||||||
|
oldSpec.type = 143;
|
||||||
|
oldSpec.ex1a = 100; oldSpec.ex1b = 20;
|
||||||
|
newSpec.import_legacy(oldSpec);
|
||||||
|
CHECK(newSpec.type == eSpecType::IF_HAS_FOOD);
|
||||||
|
CHECK(newSpec.ex1a == 100); CHECK(newSpec.ex1b == 20);
|
||||||
|
CHECK(newSpec.ex2a == 1);
|
||||||
|
CHECK(newSpec.jumpto == 12);
|
||||||
|
}
|
||||||
|
SECTION("Item Class on Space? (and take)") {
|
||||||
|
oldSpec.type = 144;
|
||||||
|
oldSpec.ex1a = 15; oldSpec.ex1b = 16;
|
||||||
|
oldSpec.ex2a = 100; oldSpec.ex2b = 20;
|
||||||
|
newSpec.import_legacy(oldSpec);
|
||||||
|
CHECK(newSpec.type == eSpecType::IF_ITEM_CLASS_ON_SPACE);
|
||||||
|
CHECK(newSpec.ex1a == 15); CHECK(newSpec.ex1b == 16);
|
||||||
|
CHECK(newSpec.ex2a == 100); CHECK(newSpec.ex2b == 20);
|
||||||
|
CHECK(newSpec.ex2c == 1);
|
||||||
|
CHECK(newSpec.jumpto == 12);
|
||||||
|
}
|
||||||
|
SECTION("Have Item with Class? (and take)") {
|
||||||
|
oldSpec.type = 145;
|
||||||
|
oldSpec.ex1a = 100; oldSpec.ex1b = 20;
|
||||||
|
newSpec.import_legacy(oldSpec);
|
||||||
|
CHECK(newSpec.type == eSpecType::IF_HAVE_ITEM_CLASS);
|
||||||
|
CHECK(newSpec.ex1a == 100); CHECK(newSpec.ex1b == 20);
|
||||||
|
CHECK(newSpec.ex2a == 1);
|
||||||
|
CHECK(newSpec.jumpto == 12);
|
||||||
|
}
|
||||||
|
SECTION("Equipped Item with Class? (and take)") {
|
||||||
|
oldSpec.type = 146;
|
||||||
|
oldSpec.ex1a = 100; oldSpec.ex1b = 20;
|
||||||
|
newSpec.import_legacy(oldSpec);
|
||||||
|
CHECK(newSpec.type == eSpecType::IF_EQUIP_ITEM_CLASS);
|
||||||
|
CHECK(newSpec.ex1a == 100); CHECK(newSpec.ex1b == 20);
|
||||||
|
CHECK(newSpec.ex2a == 1);
|
||||||
|
CHECK(newSpec.jumpto == 12);
|
||||||
|
}
|
||||||
|
SECTION("Day Reached?") {
|
||||||
|
oldSpec.type = 147;
|
||||||
|
oldSpec.ex1a = 25; oldSpec.ex1b = 20;
|
||||||
|
newSpec.import_legacy(oldSpec);
|
||||||
|
CHECK(newSpec.type == eSpecType::IF_DAY_REACHED);
|
||||||
|
CHECK(newSpec.ex1a == 25); CHECK(newSpec.ex1b == 20);
|
||||||
|
CHECK(newSpec.jumpto == 12);
|
||||||
|
}
|
||||||
|
SECTION("Any Barrels?") {
|
||||||
|
oldSpec.type = 148;
|
||||||
|
oldSpec.ex1b = 13;
|
||||||
|
newSpec.import_legacy(oldSpec);
|
||||||
|
CHECK(newSpec.type == eSpecType::IF_FIELDS);
|
||||||
|
CHECK(newSpec.sd1 == 1); CHECK(newSpec.sd2 >= 64 * 64);
|
||||||
|
CHECK(newSpec.m1 == int(OBJECT_BARREL)); CHECK(newSpec.m2 == 13);
|
||||||
|
CHECK(newSpec.ex1a == 0); CHECK(newSpec.ex1b == 0);
|
||||||
|
CHECK(newSpec.ex2a == 64); CHECK(newSpec.ex2b == 64);
|
||||||
|
CHECK(newSpec.jumpto == 12);
|
||||||
|
}
|
||||||
|
SECTION("Any Crates?") {
|
||||||
|
oldSpec.type = 149;
|
||||||
|
oldSpec.ex1b = 13;
|
||||||
|
newSpec.import_legacy(oldSpec);
|
||||||
|
CHECK(newSpec.type == eSpecType::IF_FIELDS);
|
||||||
|
CHECK(newSpec.sd1 == 1); CHECK(newSpec.sd2 >= 64 * 64);
|
||||||
|
CHECK(newSpec.m1 == int(OBJECT_CRATE)); CHECK(newSpec.m2 == 13);
|
||||||
|
CHECK(newSpec.ex1a == 0); CHECK(newSpec.ex1b == 0);
|
||||||
|
CHECK(newSpec.ex2a == 64); CHECK(newSpec.ex2b == 64);
|
||||||
|
CHECK(newSpec.jumpto == 12);
|
||||||
|
}
|
||||||
|
SECTION("Special Thing Happened?") {
|
||||||
|
oldSpec.type = 150;
|
||||||
|
oldSpec.ex1a = 15; oldSpec.ex1b = 13;
|
||||||
|
oldSpec.ex2b = 20;
|
||||||
|
newSpec.import_legacy(oldSpec);
|
||||||
|
CHECK(newSpec.type == eSpecType::IF_EVENT_OCCURRED);
|
||||||
|
CHECK(newSpec.ex1a == 15); CHECK(newSpec.ex1b == 13);
|
||||||
|
CHECK(newSpec.ex2b == 20);
|
||||||
|
CHECK(newSpec.jumpto == 12);
|
||||||
|
}
|
||||||
|
SECTION("Has Cave Lore?") {
|
||||||
|
oldSpec.type = 151;
|
||||||
|
oldSpec.ex1b = 20;
|
||||||
|
newSpec.import_legacy(oldSpec);
|
||||||
|
CHECK(newSpec.type == eSpecType::IF_TRAIT);
|
||||||
|
CHECK(newSpec.ex1a == int(eTrait::CAVE_LORE));
|
||||||
|
CHECK(newSpec.ex1b == 20);
|
||||||
|
CHECK(newSpec.ex2a == 1); // need one PC ...
|
||||||
|
CHECK(newSpec.ex2b == 2); // ... or more
|
||||||
|
CHECK(newSpec.jumpto == 12);
|
||||||
|
}
|
||||||
|
SECTION("Has Woodsman?") {
|
||||||
|
oldSpec.type = 152;
|
||||||
|
oldSpec.ex1b = 20;
|
||||||
|
newSpec.import_legacy(oldSpec);
|
||||||
|
CHECK(newSpec.type == eSpecType::IF_TRAIT);
|
||||||
|
CHECK(newSpec.ex1a == int(eTrait::WOODSMAN));
|
||||||
|
CHECK(newSpec.ex1b == 20);
|
||||||
|
CHECK(newSpec.ex2a == 1); // need one PC ...
|
||||||
|
CHECK(newSpec.ex2b == 2); // ... or more
|
||||||
|
CHECK(newSpec.jumpto == 12);
|
||||||
|
}
|
||||||
|
SECTION("Has Enough Mage Lore?") {
|
||||||
|
oldSpec.type = 153;
|
||||||
|
oldSpec.ex1a = 20;
|
||||||
|
oldSpec.ex1b = 20;
|
||||||
|
newSpec.import_legacy(oldSpec);
|
||||||
|
CHECK(newSpec.type == eSpecType::IF_STATISTIC);
|
||||||
|
CHECK(newSpec.ex1a == 20);
|
||||||
|
CHECK(newSpec.ex1b == 20);
|
||||||
|
CHECK(newSpec.ex2a == int(eSkill::MAGE_LORE));
|
||||||
|
CHECK(newSpec.ex2b == 0); // cumulative check
|
||||||
|
CHECK(newSpec.jumpto == 12);
|
||||||
|
}
|
||||||
|
SECTION("Text Response?") {
|
||||||
|
oldSpec.type = 154;
|
||||||
|
oldSpec.pic = 10;
|
||||||
|
oldSpec.ex1a = 167; oldSpec.ex1b = 12;
|
||||||
|
oldSpec.ex2a = 169; oldSpec.ex2b = 15;
|
||||||
|
newSpec.import_legacy(oldSpec);
|
||||||
|
CHECK(newSpec.type == eSpecType::IF_TEXT_RESPONSE);
|
||||||
|
CHECK(newSpec.pic == 10);
|
||||||
|
CHECK(newSpec.ex1a == 7); CHECK(newSpec.ex1b == 12);
|
||||||
|
CHECK(newSpec.ex2a == 9); CHECK(newSpec.ex2b == 15);
|
||||||
|
CHECK(newSpec.jumpto == 12);
|
||||||
|
}
|
||||||
|
SECTION("Stuff Done Equal?") {
|
||||||
|
oldSpec.type = 155;
|
||||||
|
oldSpec.sd1 = 5; oldSpec.sd2 = 6;
|
||||||
|
oldSpec.ex1a = 13; oldSpec.ex1b = 14;
|
||||||
|
newSpec.import_legacy(oldSpec);
|
||||||
|
CHECK(newSpec.type == eSpecType::IF_SDF_EQ);
|
||||||
|
CHECK(newSpec.sd1 == 5); CHECK(newSpec.sd2 == 6);
|
||||||
|
CHECK(newSpec.ex1a == 13); CHECK(newSpec.ex1b == 14);
|
||||||
|
CHECK(newSpec.jumpto == 12);
|
||||||
|
}
|
||||||
// Clean up after ourselves
|
// Clean up after ourselves
|
||||||
ResMgr::popPath<StringRsrc>();
|
ResMgr::popPath<StringRsrc>();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user