Add more tests for converting legacy specials

Errors fixed:
- Picture forced to 19 for stairway nodes.

(The game actually did this, and also forced to 22 for portals,
but I decided that wasn't necessary to preserve.)
This commit is contained in:
2016-09-25 20:16:24 -04:00
parent 522b51b5a3
commit 1e084fa5af
2 changed files with 260 additions and 9 deletions

View File

@@ -164,7 +164,7 @@ void cSpecial::import_legacy(legacy::special_node_type& old){
case 228: type = eSpecType::OUT_MOVE_PARTY; break;
// 229 was outdoor shop
// 230-255 were undefined
case 55: case 58: case 189: // Large dialogs with 36x36 dialog graphics
case 55: case 58: case 189: case 190: // Large dialogs with 36x36 dialog graphics
if(pic >= 700 && pic < 1000)
pic -= 700;
pictype = PIC_DLOG;
@@ -172,6 +172,7 @@ void cSpecial::import_legacy(legacy::special_node_type& old){
m2 = -1;
if(old.type == 55) type = eSpecType::ONCE_DIALOG;
else if(old.type == 58) type = eSpecType::ONCE_GIVE_ITEM_DIALOG;
else if(old.type == 190) type = eSpecType::TOWN_STAIR;
else type = eSpecType::TOWN_PORTAL;
if(type != eSpecType::ONCE_DIALOG) break;
// Duplicate Leave button
@@ -210,13 +211,6 @@ void cSpecial::import_legacy(legacy::special_node_type& old){
if(old.ex2a == 20)
ex2a = 9;
break;
case 190: // Large stairway dialog
type = eSpecType::TOWN_STAIR;
pic = 19;
pictype = PIC_DLOG;
m3 = m2;
m2 = -1;
break;
// TODO: Originally the block nodes supported messages; the new version doesn't.
// (Will probably need to make special nodes a dynamic vector before fixing this.)
case 7: case 8: case 9: case 10: // out, town, combat, look block

View File

@@ -535,14 +535,271 @@ TEST_CASE("When converting legacy special nodes (town)") {
ResMgr::pushPath<StringRsrc>("../rsrc/strings");
oldSpec.m1 = 4; oldSpec.m2 = 5;
oldSpec.jumpto = 12;
SECTION("Town Hostile") {
oldSpec.type = 170;
oldSpec.jumpto = 12;
newSpec.import_legacy(oldSpec);
CHECK(newSpec.type == eSpecType::MAKE_TOWN_HOSTILE);
CHECK(newSpec.m1 == 4); CHECK(newSpec.m2 == 5);
CHECK(newSpec.jumpto == 12);
}
SECTION("Change Terrain") {
oldSpec.type = 171;
oldSpec.ex1a = 7; oldSpec.ex1b = 8;
oldSpec.ex2a = 9;
newSpec.import_legacy(oldSpec);
CHECK(newSpec.type == eSpecType::CHANGE_TER);
CHECK(newSpec.m1 == 4); CHECK(newSpec.m2 == 5);
CHECK(newSpec.ex1a == 7); CHECK(newSpec.ex1b == 8);
CHECK(newSpec.ex2a == 9);
CHECK(newSpec.jumpto == 12);
}
SECTION("Swap Terrain") {
oldSpec.type = 172;
oldSpec.ex1a = 7; oldSpec.ex1b = 8;
oldSpec.ex2a = 9; oldSpec.ex2b = 10;
newSpec.import_legacy(oldSpec);
CHECK(newSpec.type == eSpecType::SWAP_TER);
CHECK(newSpec.m1 == 4); CHECK(newSpec.m2 == 5);
CHECK(newSpec.ex1a == 7); CHECK(newSpec.ex1b == 8);
CHECK(newSpec.ex2a == 9); CHECK(newSpec.ex2b == 10);
CHECK(newSpec.jumpto == 12);
}
SECTION("Transform Terrain") {
oldSpec.type = 173;
oldSpec.ex1a = 7; oldSpec.ex1b = 8;
newSpec.import_legacy(oldSpec);
CHECK(newSpec.type == eSpecType::TRANS_TER);
CHECK(newSpec.m1 == 4); CHECK(newSpec.m2 == 5);
CHECK(newSpec.ex1a == 7); CHECK(newSpec.ex1b == 8);
CHECK(newSpec.jumpto == 12);
}
SECTION("Move Party") {
oldSpec.type = 174;
oldSpec.ex1a = 7; oldSpec.ex1b = 8;
oldSpec.ex2a = 2;
newSpec.import_legacy(oldSpec);
CHECK(newSpec.type == eSpecType::TOWN_MOVE_PARTY);
CHECK(newSpec.m1 == 4); CHECK(newSpec.m2 == 5);
CHECK(newSpec.ex1a == 7); CHECK(newSpec.ex1b == 8);
CHECK(newSpec.ex2a == 2);
CHECK(newSpec.jumpto == 12);
}
SECTION("Hit Space") {
oldSpec.type = 175;
oldSpec.ex1a = 7; oldSpec.ex1b = 8;
oldSpec.ex2a = 9; oldSpec.ex2b = 5;
newSpec.import_legacy(oldSpec);
CHECK(newSpec.type == eSpecType::TOWN_HIT_SPACE);
CHECK(newSpec.m1 == 4); CHECK(newSpec.m2 == 5);
CHECK(newSpec.ex1a == 7); CHECK(newSpec.ex1b == 8);
CHECK(newSpec.ex2a == 9); CHECK(newSpec.ex2b == int(eDamageType::COLD));
CHECK(newSpec.jumpto == 12);
}
SECTION("Explode Space") {
oldSpec.type = 176;
oldSpec.pic = 30;
oldSpec.ex1a = 7; oldSpec.ex1b = 8;
oldSpec.ex2a = 9; oldSpec.ex2b = 3;
newSpec.import_legacy(oldSpec);
CHECK(newSpec.type == eSpecType::TOWN_EXPLODE_SPACE);
CHECK(newSpec.pic == 30);
CHECK(newSpec.m1 == 4); CHECK(newSpec.m2 == 5);
CHECK(newSpec.ex1a == 7); CHECK(newSpec.ex1b == 8);
CHECK(newSpec.ex2a == 9); CHECK(newSpec.ex2b == int(eDamageType::MAGIC));
CHECK(newSpec.jumpto == 12);
}
SECTION("Lock space") {
oldSpec.type = 177;
oldSpec.ex1a = 7; oldSpec.ex1b = 8;
newSpec.import_legacy(oldSpec);
CHECK(newSpec.type == eSpecType::TOWN_LOCK_SPACE);
CHECK(newSpec.m1 == 4); CHECK(newSpec.m2 == 5);
CHECK(newSpec.ex1a == 7); CHECK(newSpec.ex1b == 8);
CHECK(newSpec.jumpto == 12);
}
SECTION("Unlock space") {
oldSpec.type = 178;
oldSpec.ex1a = 7; oldSpec.ex1b = 8;
newSpec.import_legacy(oldSpec);
CHECK(newSpec.type == eSpecType::TOWN_UNLOCK_SPACE);
CHECK(newSpec.m1 == 4); CHECK(newSpec.m2 == 5);
CHECK(newSpec.ex1a == 7); CHECK(newSpec.ex1b == 8);
CHECK(newSpec.jumpto == 12);
}
SECTION("SFX Burst") {
oldSpec.type = 179;
oldSpec.ex1a = 7; oldSpec.ex1b = 8;
oldSpec.ex2a = 2;
newSpec.import_legacy(oldSpec);
CHECK(newSpec.type == eSpecType::TOWN_SFX_BURST);
CHECK(newSpec.m1 == 4); CHECK(newSpec.m2 == 5);
CHECK(newSpec.ex1a == 7); CHECK(newSpec.ex1b == 8);
CHECK(newSpec.ex2a == 2);
CHECK(newSpec.jumpto == 12);
}
SECTION("Make Wandering Monster") {
oldSpec.type = 180;
newSpec.import_legacy(oldSpec);
CHECK(newSpec.type == eSpecType::TOWN_CREATE_WANDERING);
CHECK(newSpec.m1 == 4); CHECK(newSpec.m2 == 5);
CHECK(newSpec.jumpto == 12);
}
SECTION("Place Monster") {
oldSpec.type = 181;
oldSpec.ex1a = 7; oldSpec.ex1b = 8;
oldSpec.ex2a = 40; oldSpec.ex2b = 100;
newSpec.import_legacy(oldSpec);
CHECK(newSpec.type == eSpecType::TOWN_PLACE_MONST);
CHECK(newSpec.m1 == 4); CHECK(newSpec.m2 == 5);
CHECK(newSpec.ex1a == 7); CHECK(newSpec.ex1b == 8);
CHECK(newSpec.ex2a == 40); CHECK(newSpec.ex2b == 100);
CHECK(newSpec.jumpto == 12);
}
SECTION("Destroy Monsters") {
oldSpec.type = 182;
oldSpec.ex1a = 50;
newSpec.import_legacy(oldSpec);
CHECK(newSpec.type == eSpecType::TOWN_NUKE_MONSTS);
CHECK(newSpec.m1 == 4); CHECK(newSpec.m2 == 5);
CHECK(newSpec.ex1a == 50);
CHECK(newSpec.jumpto == 12);
}
SECTION("Destroy All Monsters") {
oldSpec.type = 183;
oldSpec.ex1a = 1;
newSpec.import_legacy(oldSpec);
CHECK(newSpec.type == eSpecType::TOWN_NUKE_MONSTS);
CHECK(newSpec.m1 == 4); CHECK(newSpec.m2 == 5);
CHECK(newSpec.ex1a == -1);
CHECK(newSpec.jumpto == 12);
}
SECTION("Generic Lever") {
oldSpec.type = 184;
oldSpec.ex1b = 12;
newSpec.import_legacy(oldSpec);
CHECK(newSpec.type == eSpecType::TOWN_GENERIC_LEVER);
CHECK(newSpec.m1 == 4); CHECK(newSpec.m2 == 5);
CHECK(newSpec.ex1b == 12);
CHECK(newSpec.jumpto == 12);
}
SECTION("Generic Portal") {
oldSpec.type = 185;
oldSpec.ex1a = 7; oldSpec.ex1b = 8;
newSpec.import_legacy(oldSpec);
CHECK(newSpec.type == eSpecType::TOWN_GENERIC_PORTAL);
CHECK(newSpec.m1 == 4); CHECK(newSpec.m2 == 5);
CHECK(newSpec.ex1a == 7); CHECK(newSpec.ex1b == 8);
CHECK(newSpec.jumpto == 12);
}
SECTION("Generic Button") {
oldSpec.type = 186;
oldSpec.ex1b = 12;
newSpec.import_legacy(oldSpec);
CHECK(newSpec.type == eSpecType::TOWN_GENERIC_BUTTON);
CHECK(newSpec.m1 == 4); CHECK(newSpec.m2 == 5);
CHECK(newSpec.ex1b == 12);
CHECK(newSpec.jumpto == 12);
}
SECTION("Generic Stairway") {
oldSpec.type = 187;
oldSpec.ex1a = 7; oldSpec.ex1b = 8;
oldSpec.ex2a = 12; oldSpec.ex2b = 5;
newSpec.import_legacy(oldSpec);
CHECK(newSpec.type == eSpecType::TOWN_GENERIC_STAIR);
CHECK(newSpec.m1 == 4); CHECK(newSpec.m2 == 5);
CHECK(newSpec.ex1a == 7); CHECK(newSpec.ex1b == 8);
CHECK(newSpec.ex2a == 12); CHECK(newSpec.ex2b == 5);
CHECK(newSpec.jumpto == 12);
}
SECTION("Lever") {
oldSpec.type = 188;
oldSpec.pic = 12;
oldSpec.ex1b = 15;
newSpec.import_legacy(oldSpec);
CHECK(newSpec.type == eSpecType::TOWN_LEVER);
CHECK(newSpec.pictype == PIC_TER); CHECK(newSpec.pic == 12);
CHECK(newSpec.m1 == 4); CHECK(newSpec.m2 == -1); CHECK(newSpec.m3 == 5);
CHECK(newSpec.ex1b == 15);
CHECK(newSpec.jumpto == 12);
}
SECTION("Portal") {
oldSpec.type = 189;
oldSpec.pic = 12;
oldSpec.ex1a = 7; oldSpec.ex1b = 8;
newSpec.import_legacy(oldSpec);
CHECK(newSpec.type == eSpecType::TOWN_PORTAL);
CHECK(newSpec.pictype == PIC_DLOG); CHECK(newSpec.pic == 12);
CHECK(newSpec.m1 == 4); CHECK(newSpec.m2 == -1); CHECK(newSpec.m3 == 5);
CHECK(newSpec.ex1a == 7); CHECK(newSpec.ex1b == 8);
CHECK(newSpec.jumpto == 12);
}
SECTION("Stairway") {
oldSpec.type = 190;
oldSpec.pic = 12;
oldSpec.ex1a = 7; oldSpec.ex1b = 8;
oldSpec.ex2a = 15; oldSpec.ex2b = 1;
newSpec.import_legacy(oldSpec);
CHECK(newSpec.type == eSpecType::TOWN_STAIR);
CHECK(newSpec.pictype == PIC_DLOG); CHECK(newSpec.pic == 12);
CHECK(newSpec.m1 == 4); CHECK(newSpec.m2 == -1); CHECK(newSpec.m3 == 5);
CHECK(newSpec.ex1a == 7); CHECK(newSpec.ex1b == 8);
CHECK(newSpec.ex2a == 15); CHECK(newSpec.ex2b == 1);
CHECK(newSpec.jumpto == 12);
}
SECTION("Relocate Outdoors") {
oldSpec.type = 191;
oldSpec.ex1a = 7; oldSpec.ex1b = 8;
oldSpec.ex2a = 9; oldSpec.ex2b = 10;
newSpec.import_legacy(oldSpec);
CHECK(newSpec.type == eSpecType::TOWN_RELOCATE);
CHECK(newSpec.m1 == 4); CHECK(newSpec.m2 == 5);
CHECK(newSpec.ex1a == 7); CHECK(newSpec.ex1b == 8);
CHECK(newSpec.ex2a == 9); CHECK(newSpec.ex2b == 10);
CHECK(newSpec.jumpto == 12);
}
SECTION("Place Item") {
oldSpec.type = 192;
oldSpec.ex1a = 7; oldSpec.ex1b = 8;
oldSpec.ex2a = 50;
newSpec.import_legacy(oldSpec);
CHECK(newSpec.type == eSpecType::TOWN_PLACE_ITEM);
CHECK(newSpec.m1 == 4); CHECK(newSpec.m2 == 5);
CHECK(newSpec.ex1a == 7); CHECK(newSpec.ex1b == 8);
CHECK(oldSpec.ex2a == 50);
CHECK(newSpec.jumpto == 12);
}
SECTION("Split Party") {
oldSpec.type = 193;
oldSpec.ex1a = 7; oldSpec.ex1b = 8;
oldSpec.ex2a = 10;
newSpec.import_legacy(oldSpec);
CHECK(newSpec.type == eSpecType::TOWN_SPLIT_PARTY);
CHECK(newSpec.m1 == 4); CHECK(newSpec.m2 == 5);
CHECK(newSpec.ex1a == 7); CHECK(newSpec.ex1b == 8);
CHECK(newSpec.ex2a == 10);
CHECK(newSpec.jumpto == 12);
}
SECTION("Reunite Party") {
oldSpec.type = 194;
oldSpec.ex1a = 10;
newSpec.import_legacy(oldSpec);
CHECK(newSpec.type == eSpecType::TOWN_REUNITE_PARTY);
CHECK(newSpec.m1 == 4); CHECK(newSpec.m2 == 5);
CHECK(newSpec.ex1a == 10);
CHECK(newSpec.jumpto == 12);
}
SECTION("Start Timer") {
oldSpec.type = 195;
oldSpec.ex1a = 7;
oldSpec.ex2b = 8;
newSpec.import_legacy(oldSpec);
CHECK(newSpec.type == eSpecType::TOWN_TIMER_START);
CHECK(newSpec.m1 == 4); CHECK(newSpec.m2 == 5);
CHECK(newSpec.ex1a == 7);
CHECK(newSpec.ex2b == 8);
CHECK(newSpec.jumpto == 12);
}
// Clean up after ourselves
ResMgr::popPath<StringRsrc>();
}