From a96cea16828973b92c465fb84de2554779f07101 Mon Sep 17 00:00:00 2001 From: jbzdarkid Date: Wed, 24 Oct 2018 22:13:56 -0700 Subject: Lots of progress, lots of ideas. --- WitnessRandomizer/Panels.h | 682 ++++++++++++++++---------------- WitnessRandomizer/WitnessRandomizer.cpp | 54 ++- 2 files changed, 365 insertions(+), 371 deletions(-) (limited to 'WitnessRandomizer') diff --git a/WitnessRandomizer/Panels.h b/WitnessRandomizer/Panels.h index 8d594b1..fff7053 100644 --- a/WitnessRandomizer/Panels.h +++ b/WitnessRandomizer/Panels.h @@ -1,6 +1,7 @@ #pragma once #include +// Some of these (the puzzle ones) are duplicated elsewhere std::vector lasers = { 0x0360D, // Symmetry 0x03615, // Swamp @@ -11,8 +12,10 @@ std::vector lasers = { // 0x03608, // Desert 0x03612, // Quarry 0x03616, // Jungle + 0x19650, // Shadows }; +// Note: Some of these (non-desert) are duplicated elsewhere std::vector burnablePanels = { 0x17D9C, // Treehouse Yellow 7 0x17DC2, // Treehouse Yellow 8 @@ -31,19 +34,233 @@ std::vector burnablePanels = { 0x28ACB, // Town Blue 4 0x28ACC, // Town Blue 5 0x17CF0, // Mill Discard + 0x17C31, // Desert Final Transparent + + 0x00698, // Desert Surface 1 + 0x0048F, // Desert Surface 2 + 0x09F92, // Desert Surface 3 + 0x0A036, // Desert Surface 4 + 0x09DA6, // Desert Surface 5 + 0x0A049, // Desert Surface 6 + 0x0A053, // Desert Surface 7 + 0x09F94, // Desert Surface 8 + 0x00422, // Desert Light 1 + 0x006E3, // Desert Light 2 + 0x0A02D, // Desert Light 3 + 0x00C72, // Desert Pond 1 + 0x0129D, // Desert Pond 2 + 0x008BB, // Desert Pond 3 + 0x0078D, // Desert Pond 4 + 0x18313, // Desert Pond 5 + 0x04D18, // Desert Flood 1 + 0x01205, // Desert Flood 2 + 0x181AB, // Desert Flood 3 + 0x0117A, // Desert Flood 4 + 0x17ECA, // Desert Flood 5 + 0x012D7, // Desert Final Far +}; + +// Note: Some of these (non-switches) are duplicated elsewhere +std::vector leftRightPanels = { + 0x17D02, // Town Windmill Control +}; + +// Note: Some of these (non-switches) are duplicated elsewhere +std::vector upDownPanels = { + 0x0A3B5, // Tutorial Back Left + 0x17CC4, // Mill Elevator Control +}; + +std::vector leftForwardRightPanels = { + 0x17DD1, // Treehouse Left Orange 9 has to pivot + 0x17CE3, // Treehouse Right Orange 4 has to pivot + 0x17DB7, // Treehouse Right Orange 10 has to pivot + 0x17E52, // Treehouse Green 4 has to pivot +}; + +std::vector pillars = { + 0x0383D, // Mountain 3 Left Pillar 1 + 0x0383F, // Mountain 3 Left Pillar 2 + 0x03859, // Mountain 3 Left Pillar 3 + 0x339BB, // Mountain 3 Left Pillar 4 + 0x0383A, // Mountain 3 Right Pillar 1 + 0x09E56, // Mountain 3 Right Pillar 2 + 0x09E5A, // Mountain 3 Right Pillar 3 + 0x33961, // Mountain 3 Right Pillar 4 + 0x09DD5, // UTM Challenge Pillar +// 0x1C31A, // Challenge Left Pillar +// 0x1C319, // Challenge Right Pillar +}; + +std::vector mountainMultipanel = { + 0x09FCC, // Mountain 2 Multipanel 1 + 0x09FCE, // Mountain 2 Multipanel 2 + 0x09FCF, // Mountain 2 Multipanel 3 + 0x09FD0, // Mountain 2 Multipanel 4 + 0x09FD1, // Mountain 2 Multipanel 5 + 0x09FD2, // Mountain 2 Multipanel 6 }; -std::vector tutorialPanels = { -// 0x0A3B5, // Back Left - 0x0A3B2, // Back Right - 0x00295, // Center Left - 0x00293, // Front Center - 0x002C2, // Front Left - 0x0C335, // Pillar - 0x0C373, // Patio floor +// There might be something to do with these, I haven't decided yet. +std::vector nothingPanels = { +// Doors & Shortcuts & Shortcut doors & Door controls + 0x0C339, // Desert Surface Door + 0x0A249, // Desert Pond Exit Door + 0x275ED, // Mill EP Door + 0x17CAC, // Mill Stairs Shortcut Door + 0x38663, // Boathouse Shortcut + 0x09E49, // Keep Shadows Shortcut + 0x0361B, // Keep Tower Shortcut + 0x334DC, // Shadows Inner Door Control + 0x334DB, // Shadows Outer Door Control + 0x2700B, // Treehouse Exterior Door Control + 0x17CBC, // Treehouse Interior Door Control +// 0x337FA, // Jungle Shortcut + +// Controls (?) + 0x09FA0, // Desert Surface 3 Control + 0x09F86, // Desert Surface 8 Control + 0x1C2DF, // Desert Flood Control Lower Far Left + 0x1831E, // Desert Flood Control Lower Far Right + 0x1C260, // Desert Flood Control Lower Near Left + 0x1831C, // Desert Flood Control Lower Near Right + 0x1C2F3, // Desert Flood Control Raise Far Left + 0x1831D, // Desert Flood Control Raise Far Right + 0x1C2B1, // Desert Flood Control Raise Near Left + 0x1831B, // Desert Flood Control Raise Near Right + 0x0A015, // Desert Final Far Control + 0x03678, // Mill Lower Ramp Contol + 0x03679, // Mill Lower Lift Control + 0x03675, // Mill Upper Lift Control + 0x03676, // Mill Upper Ramp Control + 0x03852, // Boathouse Ramp Angle Control + 0x03858, // Boathouse Ramp Position Control + 0x275FA, // Boathouse Hook Control + 0x037FF, // Treehouse Drawbridge Control + 0x09F98, // Town Laser Redirect Control + 0x334D8, // Town RGB Light Control + 0x17E2B, // Swamp Flood Gate Control + 0x00609, // Swamp Surface Sliding Bridge Control + 0x18488, // Swamp Underwater Sliding Bridge Control + 0x17C0A, // Swamp Island Control 1 + 0x17E07, // Swamp Island Control 2 + 0x181F5, // Swamp Rotating Bridge Control + +// Vault Boxes + 0x03481, // Outside Tutorial Vault Box + 0x0339E, // Desert Vault Box + 0x03535, // Shipwreck Vault Box + 0x03702, // Jungle Vault Box + 0x03542, // Mountainside Vault Box + +// Boat Summons + 0x17CC8, // Glass Factory Summon Boat + 0x17CA6, // Boathouse Summon Boat + 0x17C95, // Treehouse Summon Boat + 0x0A054, // Town Summon Boat + 0x09DB8, // Swamp Summon Boat + 0x17CDF, // Jungle Summon Boat + +// Identical sets + 0x00143, // Orchard Apple Tree 1 + 0x0003B, // Orchard Apple Tree 2 + 0x00055, // Orchard Apple Tree 3 + 0x032F7, // Orchard Apple Tree 4 + 0x032FF, // Orchard Apple Tree 5 + 0x009B8, // Symmetry Island Transparent 1 + 0x003E8, // Symmetry Island Transparent 2 + 0x00A15, // Symmetry Island Transparent 3 + 0x00B53, // Symmetry Island Transparent 4 + 0x00B8D, // Symmetry Island Transparent 5 + +// Misc + 0x03629, // Tutorial Gate Open + 0x09FAA, // Desert Lightswitch + 0x0C335, // Tutorial Pillar + 0x0C373, // Tutorial Patio floor + 0x1C349, // Symmetry Island Door 2 - Collision fails here, sadly + 0x18076, // Desert Flood Exit - I am doing something with this -- but it's a very unique panel. + 0x0A15C, // Desert Final Left Convex + 0x09FFF, // Desert Final Left Concave + 0x0A15F, // Desert Final Near + 0x033EA, // Keep Yellow Pressure Plates + 0x0A3A8, // Keep Yellow Reset + 0x01BE9, // Keep Purple Pressure Plates + 0x0A3B9, // Keep Purple Reset + 0x01CD3, // Keep Green Pressure Plates + 0x0A3BB, // Keep Green Reset + 0x01D3F, // Keep Blue Pressure Plates + 0x0A3AD, // Keep Blue Reset + 0x2896A, // Town Bridge + 0x28A69, // Town Lattice + 0x28A79, // Town Maze + 0x28B39, // Town Red Hexagonal + 0x034E3, // Town Soundproof Dots + 0x034E4, // Town Soundproof Waves + 0x079DF, // Town Triple + 0x00815, // Theater Video Input + 0x03553, // Theater Tutorial Video + 0x03552, // Theater Desert Video + 0x0354E, // Theater Jungle Video + 0x03549, // Theater Challenge Video + 0x0354F, // Theater Shipwreck Video + 0x03545, // Theater Mountain Video + 0x18590, // Town Transparent + 0x28AE3, // Town Wire + + +// 0x09E39, // Mountain 1 Purple Pathway +// 0x33AF5, // Mountain 1 Blue 1 +// 0x33AF7, // Mountain 1 Blue 2 +// 0x09F6E, // Mountain 1 Blue 3 +// 0x09FD8, // Mountain 2 Rainbow 5 +// 0x09E86, // Mountain 2 Blue Pathway +// 0x09ED8, // Mountain 2 Orange Pathway +// 0x09EEB, // Mountain 2 Elevator + 0x09F8E, // Mountain 3 Near Right Floor + 0x09FC1, // Mountain 3 Near Left Floor + 0x09F01, // Mountain 3 Far Right Floor + 0x09EFF, // Mountain 3 Far Left Floor + 0x09FDA, // Mountain 3 Giant Floor +// 0x01983, // Mountain 3 Left Peekaboo +// 0x01987, // Mountain 3 Right Peekaboo +// 0x3D9A6, // Mountain 3 Left Close Door +// 0x3D9A7, // Mountain 3 Right Close Door +// 0x3D9AA, // Mountain 3 Left Activate Elevator +// 0x3D9A8, // Mountain 3 Right Activate Elevator +// 0x3D9A9, // Mountain 3 Launch Elevator +// 0x3C113, // Mountain 3 Left Open Door +// 0x3C114, // Mountain 3 Right Open Door +// 0x09F7F, // Mountaintop Laser Box +// 0x17C34, // Mountaintop Perspective +// 0x0A16E, // UTM Challenge Entrance +// 0x335AB, // UTM In Elevator Control +// 0x3369D, // UTM Lower Elevator Control +// 0x288EA, // UTM Perspective 1 +// 0x288FC, // UTM Perspective 2 +// 0x289E7, // UTM Perspective 3 +// 0x288AA, // UTM Perspective 4 +// 0x334E1, // UTM Secret Door Control +// 0x335AC, // UTM Upper Elevator Control +// 0x2773D, // Tunnels Desert Shortcut +// 0x27732, // Tunnels Theater Shortcut +// 0x2FAF6, // Tunnels Vault Box +// 0x0A099, // Bunker Glass Door +// 0x34BC5, // Bunker Open Ultraviolet +// 0x34BC6, // Bunker Close Ultraviolet +// 0x15ADD, // Jungle Vault +// 0x17CAA, // Jungle Courtyard Gate +// 0x17CAB, // Jungle Pop-up Wall + 0x0005C, // Glass Factory Vertical Symmetry 5 }; -std::vector outsideTutorialPanels = { +std::vector squarePanels = { + 0x00064, // Tutorial Straight + 0x00182, // Tutorial Bend + 0x0A3B2, // Tutorial Back Right + 0x00295, // Tutorial Center Left + 0x00293, // Tutorial Front Center + 0x002C2, // Tutorial Front Left 0x0005D, // Outside Tutorial Dots Tutorial 1 0x0005E, // Outside Tutorial Dots Tutorial 2 0x0005F, // Outside Tutorial Dots Tutorial 3 @@ -59,33 +276,21 @@ std::vector outsideTutorialPanels = { 0x00020, // Outside Tutorial Stones Tutorial 8 0x00021, // Outside Tutorial Stones Tutorial 9 0x033D4, // Outside Tutorial Vault -// 0x03481, // Outside Tutorial Vault Box 0x0A171, // Tutorial Optional Door 1 0x04CA4, // Tutorial Optional Door 2 0x17CFB, // Outside Tutorial Discard -// 0x00143, // Orchard Apple Tree 1 -// 0x0003B, // Orchard Apple Tree 2 -// 0x00055, // Orchard Apple Tree 3 -// 0x032F7, // Orchard Apple Tree 4 -// 0x032FF, // Orchard Apple Tree 5 -}; - -std::vector symmetryPanels = { 0x3C12B, // Glass Factory Discard 0x01A54, // Glass Factory Entry 0x00086, // Glass Factory Vertical Symmetry 1 0x00087, // Glass Factory Vertical Symmetry 2 0x00059, // Glass Factory Vertical Symmetry 3 0x00062, // Glass Factory Vertical Symmetry 4 - 0x0005C, // Glass Factory Vertical Symmetry 5 -// 0x17CC8, // Glass Factory Summon Boat 0x0008D, // Glass Factory Rotational Symmetry 1 0x00081, // Glass Factory Rotational Symmetry 2 0x00083, // Glass Factory Rotational Symmetry 3 0x00084, // Glass Factory Melting 1 0x00082, // Glass Factory Melting 2 0x0343A, // Glass Factory Melting 3 - 0x000B0, // Symmetry Island Door 1 0x00022, // Symmetry Island Black Dots 1 0x00023, // Symmetry Island Black Dots 2 @@ -105,12 +310,6 @@ std::vector symmetryPanels = { 0x00070, // Symmetry Island Fading Lines 5 0x00071, // Symmetry Island Fading Lines 6 0x00076, // Symmetry Island Fading Lines 7 -// 0x009B8, // Symmetry Island Transparent 1 // Too mean for right now -// 0x003E8, // Symmetry Island Transparent 2 // Too mean for right now -// 0x00A15, // Symmetry Island Transparent 3 // Too mean for right now -// 0x00B53, // Symmetry Island Transparent 4 // Too mean for right now -// 0x00B8D, // Symmetry Island Transparent 5 // Too mean for right now -// 0x1C349, // Symmetry Island Door 2 - Collision fails here, sadly 0x00A52, // Symmetry Island Laser Yellow 1 0x00A57, // Symmetry Island Laser Yellow 2 0x00A5B, // Symmetry Island Laser Yellow 3 @@ -119,64 +318,15 @@ std::vector symmetryPanels = { 0x00A68, // Symmetry Island Laser Blue 3 0x17CE7, // Desert Discard 0x0CC7B, // Desert Vault -}; - -std::vector desertPanels = { -// 0x0339E, // Desert Vault Box - 0x00698, // Desert Surface 1 - 0x0048F, // Desert Surface 2 - 0x09F92, // Desert Surface 3 -// 0x09FA0, // Desert Surface 3 Control - 0x0A036, // Desert Surface 4 - 0x09DA6, // Desert Surface 5 - 0x0A049, // Desert Surface 6 - 0x0A053, // Desert Surface 7 - 0x09F94, // Desert Surface 8 -// 0x09F86, // Desert Surface 8 Control -// 0x0C339, // Desert Surface Door -// 0x09FAA, // Desert Lightswitch - 0x00422, // Desert Light 1 - 0x006E3, // Desert Light 2 -// 0x0A02D, // Desert Light 3 - 0x00C72, // Desert Pond 1 - 0x0129D, // Desert Pond 2 - 0x008BB, // Desert Pond 3 - 0x0078D, // Desert Pond 4 - 0x18313, // Desert Pond 5 -// 0x0A249, // Desert Pond Exit Door -// 0x1C2DF, // Desert Flood Control Lower Far Left -// 0x1831E, // Desert Flood Control Lower Far Right -// 0x1C260, // Desert Flood Control Lower Near Left -// 0x1831C, // Desert Flood Control Lower Near Right -// 0x1C2F3, // Desert Flood Control Raise Far Left -// 0x1831D, // Desert Flood Control Raise Far Right -// 0x1C2B1, // Desert Flood Control Raise Near Left -// 0x1831B, // Desert Flood Control Raise Near Right - 0x04D18, // Desert Flood 1 - 0x01205, // Desert Flood 2 - 0x181AB, // Desert Flood 3 - 0x0117A, // Desert Flood 4 - 0x17ECA, // Desert Flood 5 -// 0x18076, // Desert Flood Exit -// 0x0A15C, // Desert Final Left Convex -// 0x09FFF, // Desert Final Left Concave -// 0x0A15F, // Desert Final Near -// 0x17C31, // Desert Final Transparent - 0x012D7, // Desert Final Far -// 0x0A015, // Desert Final Far Control -}; - -std::vector quarryPanels = { + 0x17C31, // Desert Final Transparent 0x01E5A, // Mill Entry Door Left 0x01E59, // Mill Entry Door Right -// 0x03678, // Mill Lower Ramp Contol 0x00E0C, // Mill Lower Row 1 0x01489, // Mill Lower Row 2 0x0148A, // Mill Lower Row 3 0x014D9, // Mill Lower Row 4 0x014E7, // Mill Lower Row 5 0x014E8, // Mill Lower Row 6 -// 0x03679, // Mill Lower Lift Control 0x00557, // Mill Upper Row 1 0x005F1, // Mill Upper Row 2 0x00620, // Mill Upper Row 3 @@ -186,25 +336,17 @@ std::vector quarryPanels = { 0x03686, // Mill Upper Row 7 0x014E9, // Mill Upper Row 8 0x0367C, // Mill Control Room 1 -// 0x03675, // Mill Upper Lift Control -// 0x03676, // Mill Upper Ramp Control 0x3C125, // Mill Control Room 2 -// 0x275ED, // Mill EP Door -// 0x17CAC, // Mill Stairs Shortcut Door 0x03677, // Mill Stairs Control 0x17CF0, // Mill Discard -// 0x17CC4, // Mill Elevator Control + 0x03612, // Quarry Laser 0x021D5, // Boathouse Ramp Activation Shapers 0x034D4, // Boathouse Ramp Activation Stars -// 0x03852, // Boathouse Ramp Angle Control 0x021B3, // Boathouse Erasers and Shapers 1 0x021B4, // Boathouse Erasers and Shapers 2 0x021B0, // Boathouse Erasers and Shapers 3 0x021AF, // Boathouse Erasers and Shapers 4 0x021AE, // Boathouse Erasers and Shapers 5 -// 0x17CA6, // Boathouse Summon Boat -// 0x03858, // Boathouse Ramp Position Control -// 0x38663, // Boathouse Shortcut 0x021B5, // Boathouse Erasers and Stars 1 0x021B6, // Boathouse Erasers and Stars 2 0x021B7, // Boathouse Erasers and Stars 3 @@ -217,13 +359,8 @@ std::vector quarryPanels = { 0x0A3CB, // Boathouse Erasers Shapers and Stars 3 0x0A3CC, // Boathouse Erasers Shapers and Stars 4 0x0A3D0, // Boathouse Erasers Shapers and Stars 5 -// 0x275FA, // Boathouse Hook Control 0x09E57, // Quarry Entry Gate 1 0x17C09, // Quarry Entry Gate 2 -}; - -std::vector treehousePanels = { //worked fine until I commented out pivoting panels, puzzles solve fine if you know solution but star and dot colors are all messed up -// 0x17C95, // Treehouse Summon Boat 0x0288C, // Treehouse Door 1 0x02886, // Treehouse Door 2 0x17D72, // Treehouse Yellow 1 @@ -256,7 +393,6 @@ std::vector treehousePanels = { //worked fine until I commented out pivotin 0x17DD9, // Treehouse Left Orange 6 0x17DB8, // Treehouse Left Orange 7 0x17DDC, // Treehouse Left Orange 8 -// 0x17DD1, // Treehouse Left Orange 9 has to pivot 0x17DDE, // Treehouse Left Orange 10 0x17DE3, // Treehouse Left Orange 11 0x17DEC, // Treehouse Left Orange 12 @@ -266,80 +402,31 @@ std::vector treehousePanels = { //worked fine until I commented out pivotin 0x17D88, // Treehouse Right Orange 1 0x17DB4, // Treehouse Right Orange 2 0x17D8C, // Treehouse Right Orange 3 - 0x17CE3, // Treehouse Right Orange 4 -// 0x17DCD, // Treehouse Right Orange 5 has to pivot + 0x17DCD, // Treehouse Right Orange 5 0x17DB2, // Treehouse Right Orange 6 0x17DCC, // Treehouse Right Orange 7 0x17DCA, // Treehouse Right Orange 8 0x17D8E, // Treehouse Right Orange 9 -// 0x17DB7, // Treehouse Right Orange 10 has to pivot 0x17DB1, // Treehouse Right Orange 11 0x17DA2, // Treehouse Right Orange 12 0x17E3C, // Treehouse Green 1 0x17E4D, // Treehouse Green 2 0x17E4F, // Treehouse Green 3 -// 0x17E52, // Treehouse Green 4 has to pivot 0x17E5B, // Treehouse Green 5 0x17E5F, // Treehouse Green 6 0x17E61, // Treehouse Green 7 0x17FA9, // Treehouse Green Bridge Discard 0x17FA0, // Treehouse Laser Discard -// 0x2700B, // Treehouse Exterior Door Control -// 0x17CBC, // Treehouse Interior Door Control -// 0x037FF, // Treehouse Drawbridge Control -}; - -std::vector keepPanels = { 0x00139, // Keep Hedges 1 0x019DC, // Keep Hedges 2 0x019E7, // Keep Hedges 3 0x01A0F, // Keep Hedges 4 -// 0x033EA, // Keep Yellow Pressure Plates -// 0x0A3A8, // Keep Yellow Reset -// 0x01BE9, // Keep Purple Pressure Plates -// 0x0A3B9, // Keep Purple Reset -// 0x01CD3, // Keep Green Pressure Plates -// 0x0A3BB, // Keep Green Reset -// 0x01D3F, // Keep Blue Pressure Plates -// 0x0A3AD, // Keep Blue Reset 0x0360E, // Keep Front Laser 0x03317, // Keep Back Laser -// 0x09E49, // Keep Shadows Shortcut -// 0x0361B, // Keep Tower Shortcut 0x17D27, // Keep Discard 0x17D28, // Shipwreck Discard 0x00AFB, // Shipwreck Vault -// 0x03535, // Shipwreck Vault Box -}; - -std::vector shadowsPanels = { // works beautifully, can solve based on panel color and where start/end points are if your memory is good - 0x386FA, // Shadows Avoid 1 - 0x1C33F, // Shadows Avoid 2 - 0x196E2, // Shadows Avoid 3 - 0x1972A, // Shadows Avoid 4 - 0x19809, // Shadows Avoid 5 - 0x19806, // Shadows Avoid 6 - 0x196F8, // Shadows Avoid 7 - 0x1972F, // Shadows Avoid 8 - 0x19797, // Shadows Follow 1 - 0x1979A, // Shadows Follow 2 - 0x197E0, // Shadows Follow 3 - 0x197E8, // Shadows Follow 4 - 0x197E5, // Shadows Follow 5 -// 0x334DC, // Shadows Inner Door Control 0x19650, // Shadows Laser -// 0x334DB, // Shadows Outer Door Control - 0x198B5, // Shadows Tutorial 1 - 0x198BD, // Shadows Tutorial 2 - 0x198BF, // Shadows Tutorial 3 - 0x19771, // Shadows Tutorial 4 - 0x0A8DC, // Shadows Tutorial 5 - 0x0AC74, // Shadows Tutorial 6 - 0x0AC7A, // Shadows Tutorial 7 - 0x0A8E0, // Shadows Tutorial 8 -}; - -std::vector townPanels = { // appears to be ok but keeps crashing game? 0x2899C, // Town 25 Dots 1 0x28A33, // Town 25 Dots 2 0x28ABF, // Town 25 Dots 3 @@ -351,103 +438,21 @@ std::vector townPanels = { // appears to be ok but keeps crashing game? 0x28ACA, // Town Blue 3 0x28ACB, // Town Blue 4 0x28ACC, // Town Blue 5 -// 0x0A054, // Town Summon Boat -// 0x2896A, // Town Bridge 0x28A0D, // Town Church Stars 0x28AD9, // Town Eraser 0x28998, // Town Green Door -// 0x09F98, // Town Laser Redirect Control -// 0x1C344, // Town Laser Redirect Panel 1 -// 0x1C343, // Town Laser Redirect Panel 2 -// 0x28A69, // Town Lattice -// 0x28A79, // Town Maze 0x0A0C8, // Town Orange Crate 0x17D01, // Town Orange Crate Discard -// 0x28B39, // Town Red Hexagonal -// 0x334D8, // Town RGB Light Control 0x03C08, // Town RGB Stars 0x03C0C, // Town RGB Stones 0x17C71, // Town Rooftop Discard -// 0x034E3, // Town Soundproof Dots panels in their locations must match so can't swap unless that is fixed -// 0x034E4, // Town Soundproof Waves - 0x18590, // Town Transparent -// 0x079DF, // Town Triple - 0x17D02, // Town Windmill Control 0x17F5F, // Town Windmill Door - 0x28AE3, // Town Wire 0x17F89, // Theater Entrance -// 0x00815, // Theater Video Input -// 0x03553, // Theater Tutorial Video -// 0x03552, // Theater Desert Video -// 0x0354E, // Theater Jungle Video -// 0x03549, // Theater Challenge Video -// 0x0354F, // Theater Shipwreck Video -// 0x03545, // Theater Mountain Video 0x17CF7, // Theater Discard 0x33AB2, // Theater Corona Exit 0x0A168, // Theater Sun Exit -}; - -std::vector monasteryPanels = { -// 0x00B10, // Monastery Left Door -// 0x00C92, // Monastery Right Door - 0x00290, // Monastery Exterior 1 - 0x00038, // Monastery Exterior 2 - 0x00037, // Monastery Exterior 3 -// 0x09D9B, // Monastery Bonsai - 0x193A7, // Monastery Interior 1 - 0x193AA, // Monastery Interior 2 - 0x193AB, // Monastery Interior 3 - 0x193A6, // Monastery Interior 4 -// 0x03713, // Monastery Shortcut -}; - -std::vector junglePanels = { -// 0x17CDF, // Jungle Summon Boat - 0x17F9B, // Jungle Discard - 0x002C4, // Jungle Waves 1 - 0x00767, // Jungle Waves 2 - 0x002C6, // Jungle Waves 3 - 0x0070E, // Jungle Waves 4 - 0x0070F, // Jungle Waves 5 - 0x0087D, // Jungle Waves 6 - 0x002C7, // Jungle Waves 7 -// 0x15ADD, // Jungle Vault -// 0x03702, // Jungle Vault Box -// 0x17CAA, // Jungle Courtyard Gate - 0x0026D, // Jungle Dots 1 - 0x0026E, // Jungle Dots 2 - 0x0026F, // Jungle Dots 3 - 0x00C3F, // Jungle Dots 4 - 0x00C41, // Jungle Dots 5 - 0x014B2, // Jungle Dots 6 -// 0x17CAB, // Jungle Pop-up Wall -// 0x337FA, // Jungle Shortcut -}; - -std::vector bunkerPanels = { // this doesn't want to behave, I have no idea - 0x17C2E, // Bunker Entry Door - 0x09F7D, // Bunker Tutorial 1 - 0x09FDC, // Bunker Tutorial 2 - 0x09FF7, // Bunker Tutorial 3 - 0x09F82, // Bunker Tutorial 4 - 0x09FF8, // Bunker Tutorial 5 - 0x09D9F, // Bunker Advanced 1 - 0x09DA1, // Bunker Advanced 2 - 0x09DA2, // Bunker Advanced 3 - 0x09DAF, // Bunker Advanced 4 -// 0x0A099, // Bunker Glass Door - 0x0A010, // Bunker Glass 1 - 0x0A01B, // Bunker Glass 2 - 0x0A01F, // Bunker Glass 3 - 0x34BC5, // Bunker Open Ultraviolet - 0x34BC6, // Bunker Close Ultraviolet - 0x17E63, // Bunker Ultraviolet 1 - 0x17E67, // Bunker Ultraviolet 2 - 0x0A079, // Bunker Elevator -}; - -std::vector swampPanels = { // appears to work ok swapping panels but keeps crashing game? + 0x00B10, // Monastery Left Door + 0x00C92, // Monastery Right Door 0x0056E, // Swamp Entry 0x00469, // Swamp Tutorial 1 0x00472, // Swamp Tutorial 2 @@ -463,7 +468,6 @@ std::vector swampPanels = { // appears to work ok swapping panels but keeps 0x00985, // Swamp Tutorial 12 0x00987, // Swamp Tutorial 13 0x181A9, // Swamp Tutorial 14 -// 0x00609, // Swamp Surface Sliding Bridge Control 0x00982, // Swamp Red 1 0x0097F, // Swamp Red 2 0x0098F, // Swamp Red 3 @@ -478,7 +482,6 @@ std::vector swampPanels = { // appears to work ok swapping panels but keeps 0x00008, // Swamp Rotation Tutorial 2 0x00009, // Swamp Rotation Tutorial 3 0x0000A, // Swamp Rotation Tutorial 4 -// 0x181F5, // Swamp Rotating Bridge Control 0x009AB, // Swamp Blue Underwater 1 0x009AD, // Swamp Blue Underwater 2 0x009AE, // Swamp Blue Underwater 3 @@ -488,10 +491,7 @@ std::vector swampPanels = { // appears to work ok swapping panels but keeps 0x00A1E, // Swamp Rotation Advanced 2 0x00C2E, // Swamp Rotation Advanced 3 0x00E3A, // Swamp Rotation Advanced 4 -// 0x17E2B, // Swamp Flood Gate Control -// 0x09DB8, // Swamp Summon Boat 0x009A6, // Swamp Purple Tetris -// 0x18488, // Swamp Underwater Sliding Bridge Control 0x00002, // Swamp Teal Underwater 1 0x00004, // Swamp Teal Underwater 2 0x00005, // Swamp Teal Underwater 3 @@ -501,14 +501,9 @@ std::vector swampPanels = { // appears to work ok swapping panels but keeps 0x014D2, // Swamp Red Underwater 2 0x014D4, // Swamp Red Underwater 3 0x014D1, // Swamp Red Underwater 4 -// 0x17C0A, // Swamp Island Control 1 -// 0x17E07, // Swamp Island Control 2 0x17C05, // Swamp Laser Shortcut 1 0x17C02, // Swamp Laser Shortcut 2 -}; - -std::vector mountainPanels = { -// 0x09E39, // Mountain 1 Purple Pathway + 0x17F9B, // Jungle Discard 0x09E73, // Mountain 1 Orange 1 0x09E75, // Mountain 1 Orange 2 0x09E78, // Mountain 1 Orange 3 @@ -516,9 +511,6 @@ std::vector mountainPanels = { 0x09E6C, // Mountain 1 Orange 5 0x09E6F, // Mountain 1 Orange 6 0x09E6B, // Mountain 1 Orange 7 -// 0x33AF5, // Mountain 1 Blue 1 -// 0x33AF7, // Mountain 1 Blue 2 -// 0x09F6E, // Mountain 1 Blue 3 0x09EAD, // Mountain 1 Purple 1 0x09EAF, // Mountain 1 Purple 2 0x09E7A, // Mountain 1 Green 1 @@ -530,112 +522,124 @@ std::vector mountainPanels = { 0x09FD4, // Mountain 2 Rainbow 2 0x09FD6, // Mountain 2 Rainbow 3 0x09FD7, // Mountain 2 Rainbow 4 -// 0x09FD8, // Mountain 2 Rainbow 5 -// 0x09E86, // Mountain 2 Blue Pathway -// 0x09ED8, // Mountain 2 Orange Pathway -// 0x09EEB, // Mountain 2 Elevator 0x17F93, // Mountain 2 Discard - 0x09F8E, // Mountain 3 Near Right Floor - 0x09FC1, // Mountain 3 Near Left Floor - 0x09F01, // Mountain 3 Far Right Floor - 0x09EFF, // Mountain 3 Far Left Floor - 0x09FDA, // Mountain 3 Giant Floor 0x17FA2, // Mountain 3 Secret Door -// 0x01983, // Mountain 3 Left Peekaboo -// 0x01987, // Mountain 3 Right Peekaboo -// 0x3D9A6, // Mountain 3 Left Close Door -// 0x3D9A7, // Mountain 3 Right Close Door -// 0x3D9AA, // Mountain 3 Left Activate Elevator -// 0x3D9A8, // Mountain 3 Right Activate Elevator -// 0x3D9A9, // Mountain 3 Launch Elevator -// 0x3C113, // Mountain 3 Left Open Door -// 0x3C114, // Mountain 3 Right Open Door 0x17C42, // Mountainside Discard 0x002A6, // Mountainside Vault -// 0x03542, // Mountainside Vault Box -// 0x09F7F, // Mountaintop Laser Box -// 0x17C34, // Mountaintop Perspective -// 0x0042D, // Mountaintop River + 0x0042D, // Mountaintop River + 0x00FF8, // UTM Entrance Door + 0x0A16B, // UTM Green Dots 1 + 0x0A2CE, // UTM Green Dots 2 + 0x0A2D7, // UTM Green Dots 3 + 0x0A2DD, // UTM Green Dots 4 + 0x0A2EA, // UTM Green Dots 5 + 0x17FB9, // UTM Green Dots 6 + 0x0008F, // UTM Invisible Dots 1 + 0x0006B, // UTM Invisible Dots 2 + 0x0008B, // UTM Invisible Dots 3 + 0x0008C, // UTM Invisible Dots 4 + 0x0008A, // UTM Invisible Dots 5 + 0x00089, // UTM Invisible Dots 6 + 0x0006A, // UTM Invisible Dots 7 + 0x0006C, // UTM Invisible Dots 8 + 0x00027, // UTM Invisible Dots Symmetry 1 + 0x00028, // UTM Invisible Dots Symmetry 2 + 0x00029, // UTM Invisible Dots Symmetry 3 + 0x021D7, // UTM Mountainside Shortcut + 0x00B71, // UTM Quarry + 0x01A31, // UTM Rainbow + 0x32962, // UTM Swamp + 0x32966, // UTM Treehouse + 0x17CF2, // UTM Waterfall Shortcut + 0x00A72, // UTM Blue Cave In + 0x009A4, // UTM Blue Discontinuous + 0x018A0, // UTM Blue Easy Symmetry + 0x01A0D, // UTM Blue Hard Symmetry + 0x008B8, // UTM Blue Left 1 + 0x00973, // UTM Blue Left 2 + 0x0097B, // UTM Blue Left 3 + 0x0097D, // UTM Blue Left 4 + 0x0097E, // UTM Blue Left 5 + 0x00994, // UTM Blue Right Far 1 + 0x334D5, // UTM Blue Right Far 2 + 0x00995, // UTM Blue Right Far 3 + 0x00996, // UTM Blue Right Far 4 + 0x00998, // UTM Blue Right Far 5 + 0x00190, // UTM Blue Right Near 1 + 0x00558, // UTM Blue Right Near 2 + 0x00567, // UTM Blue Right Near 3 + 0x006FE, // UTM Blue Right Near 4 + 0x039B4, // Tunnels Theater Catwalk + 0x09E85, // Tunnels Town Shortcut }; -std::vector pillars = { - 0x0383D, // Mountain 3 Left Pillar 1 - 0x0383F, // Mountain 3 Left Pillar 2 - 0x03859, // Mountain 3 Left Pillar 3 - 0x339BB, // Mountain 3 Left Pillar 4 - 0x0383A, // Mountain 3 Right Pillar 1 - 0x09E56, // Mountain 3 Right Pillar 2 - 0x09E5A, // Mountain 3 Right Pillar 3 - 0x33961, // Mountain 3 Right Pillar 4 - 0x09DD5, // UTM Challenge Pillar -// 0x1C31A, // Challenge Left Pillar -// 0x1C319, // Challenge Right Pillar +std::vector shadowsPanels = { // works beautifully, can solve based on panel color and where start/end points are if your memory is good + 0x386FA, // Shadows Avoid 1 + 0x1C33F, // Shadows Avoid 2 + 0x196E2, // Shadows Avoid 3 + 0x1972A, // Shadows Avoid 4 + 0x19809, // Shadows Avoid 5 + 0x19806, // Shadows Avoid 6 + 0x196F8, // Shadows Avoid 7 + 0x1972F, // Shadows Avoid 8 + 0x19797, // Shadows Follow 1 + 0x1979A, // Shadows Follow 2 + 0x197E0, // Shadows Follow 3 + 0x197E8, // Shadows Follow 4 + 0x197E5, // Shadows Follow 5 + 0x198B5, // Shadows Tutorial 1 + 0x198BD, // Shadows Tutorial 2 + 0x198BF, // Shadows Tutorial 3 + 0x19771, // Shadows Tutorial 4 + 0x0A8DC, // Shadows Tutorial 5 + 0x0AC74, // Shadows Tutorial 6 + 0x0AC7A, // Shadows Tutorial 7 + 0x0A8E0, // Shadows Tutorial 8 }; -std::vector mountainMultipanel = { - 0x09FCC, // Mountain 2 Multipanel 1 - 0x09FCE, // Mountain 2 Multipanel 2 - 0x09FCF, // Mountain 2 Multipanel 3 - 0x09FD0, // Mountain 2 Multipanel 4 - 0x09FD1, // Mountain 2 Multipanel 5 - 0x09FD2, // Mountain 2 Multipanel 6 +std::vector monasteryPanels = { + 0x00290, // Monastery Exterior 1 + 0x00038, // Monastery Exterior 2 + 0x00037, // Monastery Exterior 3 +// 0x09D9B, // Monastery Bonsai + 0x193A7, // Monastery Interior 1 + 0x193AA, // Monastery Interior 2 + 0x193AB, // Monastery Interior 3 + 0x193A6, // Monastery Interior 4 +// 0x03713, // Monastery Shortcut +}; + +std::vector bunkerPanels = { // this doesn't want to behave, I have no idea + 0x17C2E, // Bunker Entry Door + 0x09F7D, // Bunker Tutorial 1 + 0x09FDC, // Bunker Tutorial 2 + 0x09FF7, // Bunker Tutorial 3 + 0x09F82, // Bunker Tutorial 4 + 0x09FF8, // Bunker Tutorial 5 + 0x09D9F, // Bunker Advanced 1 + 0x09DA1, // Bunker Advanced 2 + 0x09DA2, // Bunker Advanced 3 + 0x09DAF, // Bunker Advanced 4 + 0x0A010, // Bunker Glass 1 + 0x0A01B, // Bunker Glass 2 + 0x0A01F, // Bunker Glass 3 + 0x17E63, // Bunker Ultraviolet 1 + 0x17E67, // Bunker Ultraviolet 2 + 0x0A079, // Bunker Elevator }; -std::vector utmPanels = { // this looks like it swaps ok but crashes to much to tell, not sure why it's not happy -// 0x0A16E, // UTM Challenge Entrance -// 0x00FF8, // UTM Entrance Door -// 0x0A16B, // UTM Green Dots 1 -// 0x0A2CE, // UTM Green Dots 2 -// 0x0A2D7, // UTM Green Dots 3 -// 0x0A2DD, // UTM Green Dots 4 -// 0x0A2EA, // UTM Green Dots 5 -// 0x17FB9, // UTM Green Dots 6 -// 0x335AB, // UTM In Elevator Control -// 0x0008F, // UTM Invisible Dots 1 -// 0x0006B, // UTM Invisible Dots 2 -// 0x0008B, // UTM Invisible Dots 3 -// 0x0008C, // UTM Invisible Dots 4 -// 0x0008A, // UTM Invisible Dots 5 -// 0x00089, // UTM Invisible Dots 6 -// 0x0006A, // UTM Invisible Dots 7 -// 0x0006C, // UTM Invisible Dots 8 -// 0x00027, // UTM Invisible Dots Symmetry 1 -// 0x00028, // UTM Invisible Dots Symmetry 2 -// 0x00029, // UTM Invisible Dots Symmetry 3 -// 0x3369D, // UTM Lower Elevator Control -// 0x021D7, // UTM Mountainside Shortcut -// // 0x288EA, // UTM Perspective 1 -// // 0x288FC, // UTM Perspective 2 -// // 0x289E7, // UTM Perspective 3 -// // 0x288AA, // UTM Perspective 4 -// 0x00B71, // UTM Quarry -// 0x01A31, // UTM Rainbow -// // 0x334E1, // UTM Secret Door Control -// 0x32962, // UTM Swamp -// 0x32966, // UTM Treehouse -// 0x335AC, // UTM Upper Elevator Control -// 0x17CF2, // UTM Waterfall Shortcut -// 0x00A72, // UTM Blue Cave In -// 0x009A4, // UTM Blue Discontinuous -// 0x018A0, // UTM Blue Easy Symmetry -// 0x01A0D, // UTM Blue Hard Symmetry -// 0x008B8, // UTM Blue Left 1 -// 0x00973, // UTM Blue Left 2 -// 0x0097B, // UTM Blue Left 3 -// 0x0097D, // UTM Blue Left 4 -// 0x0097E, // UTM Blue Left 5 -// 0x00994, // UTM Blue Right Far 1 -// 0x334D5, // UTM Blue Right Far 2 -// 0x00995, // UTM Blue Right Far 3 -// 0x00996, // UTM Blue Right Far 4 -// 0x00998, // UTM Blue Right Far 5 -// 0x00190, // UTM Blue Right Near 1 -// 0x00558, // UTM Blue Right Near 2 -// 0x00567, // UTM Blue Right Near 3 -// 0x006FE, // UTM Blue Right Near 4 -// // 0x2773D, // Tunnels Desert Shortcut -// 0x039B4, // Tunnels Theater Catwalk -// // 0x27732, // Tunnels Theater Shortcut -// // 0x2FAF6, // Tunnels Vault Box -// 0x09E85, // Tunnels Town Shortcut -}; \ No newline at end of file +std::vector junglePanels = { + 0x002C4, // Jungle Waves 1 + 0x00767, // Jungle Waves 2 + 0x002C6, // Jungle Waves 3 + 0x0070E, // Jungle Waves 4 + 0x0070F, // Jungle Waves 5 + 0x0087D, // Jungle Waves 6 + 0x002C7, // Jungle Waves 7 + 0x0026D, // Jungle Dots 1 + 0x0026E, // Jungle Dots 2 + 0x0026F, // Jungle Dots 3 + 0x00C3F, // Jungle Dots 4 + 0x00C41, // Jungle Dots 5 + 0x014B2, // Jungle Dots 6 +}; diff --git a/WitnessRandomizer/WitnessRandomizer.cpp b/WitnessRandomizer/WitnessRandomizer.cpp index 79fb721..2a06ee2 100644 --- a/WitnessRandomizer/WitnessRandomizer.cpp +++ b/WitnessRandomizer/WitnessRandomizer.cpp @@ -1,15 +1,14 @@ /* - * BUGS: - * Bunker has physical panel objects which I can't move :( - * Shipwreck vault does not copy well * FEATURES: * SWAP_TARGETS should still require the full panel sequence (and have ways to prevent softlocks?) + ** Jungle(?), Bunker, Monastery, Challenge(!), Shadows * Randomize audio logs - * List of panels which can be valid "Burn" (aka desert) substitutes: Prevent (or limit) panel counting * List of panels which split left/right (for left/right controls) * List of panels which split up/down (for up/down controls) * Swap sounds in jungle (along with panels) -- maybe impossible * Make orange 7 (all of oranges?) hard. Like big = hard. + * Kill panel slowdown in tutorial + * Fix desert elevator (laser rando) / Add keep? * TRY: * Swap treehouse pivots */ @@ -27,25 +26,21 @@ int main(int argc, char** argv) srand(atoi(argv[1])); // Seed with RNG from command line } - // randomizer.Randomize(bunkerPanels, SWAP_LINES | SWAP_STYLE); - /* + //* randomizer.Randomize(lasers, SWAP_TARGETS); - randomizer.Randomize(tutorialPanels, SWAP_TARGETS); - randomizer.Randomize(monasteryPanels, SWAP_TARGETS); - randomizer.Randomize(shadowsPanels, SWAP_TARGETS); - randomizer.Randomize(desertPanels, SWAP_LINES); - randomizer.Randomize(treehousePanels, SWAP_LINES); - - std::vector squarePanels; - for (auto panelSet : {outsideTutorialPanels, symmetryPanels, quarryPanels, keepPanels, townPanels, bunkerPanels, swampPanels, mountainPanels, utmPanels}) { - squarePanels.insert(squarePanels.end(), panelSet.begin(), panelSet.end()); - } randomizer.Randomize(squarePanels, SWAP_LINES | SWAP_STYLE); + randomizer.Randomize(burnablePanels, SWAP_LINES | SWAP_STYLE); + + + // randomizer.Randomize(monasteryPanels, SWAP_TARGETS); + // randomizer.Randomize(shadowsPanels, SWAP_TARGETS); + // randomizer.Randomize(bunkerPanels, SWAP_TARGETS); + + // randomizer.Randomize(junglePanels, SWAP_LINES | SWAP_STYLE); + // randomizer.Randomize(mountainMultipanel, SWAP_LINES | SWAP_STYLE); + // randomizer.Randomize(pillars, SWAP_LINES | SWAP_STYLE | SWAP_BACK_DISTANCE); - randomizer.Randomize(junglePanels, SWAP_LINES | SWAP_STYLE); - randomizer.Randomize(mountainMultipanel, SWAP_LINES | SWAP_STYLE); - randomizer.Randomize(pillars, SWAP_LINES | SWAP_STYLE | SWAP_BACK_DISTANCE); /*/ int BOATH_3_1 = 0x21B5; int MILL_L_1 = 0xE0C; @@ -65,14 +60,6 @@ int main(int argc, char** argv) int DESERT_L_2 = 0x006E3; int TOWN_S_1 = 0x28AC7; - std::vector squarePanels; - for (auto panelSet : {outsideTutorialPanels, symmetryPanels, quarryPanels, keepPanels, townPanels, bunkerPanels, swampPanels, mountainPanels, utmPanels, treehousePanels}) { - squarePanels.insert(squarePanels.end(), panelSet.begin(), panelSet.end()); - } - for (int panel : squarePanels) { - randomizer.SwapPanels(DESERT_L_2, panel, SWAP_LINES | SWAP_STYLE); - } - //randomizer.SwapPanels(PILLAR_L_1, PILLAR_C_L, SWAP_LINES | SWAP_STYLE | SWAP_BACK_DISTANCE); //randomizer.SwapPanelData(PILLAR_L_1, PILLAR_C_L, 0x200, 0x50); @@ -89,10 +76,13 @@ WitnessRandomizer::WitnessRandomizer() : _memory("witness64_d3d11.exe") _memory.WriteData({0x5B28C0, 0x18, 0x18076*8, 0x2A8}, {0.0f, 0.0f}); // Change desert floating target to desert flood final _memory.WriteData({0x5B28C0, 0x18, 0x17ECA*8, 0x2BC}, {0x18077}); + // Distance-gate shadows laser to prevent sniping through the bars + _memory.WriteData({0x5B28C0, 0x18, 0x19650*8, 0x3C0}, {2.0f}); + // Explicitly set back-off distance for the challenge entry & final 2 pillars - _memory.WriteData({0x5B28C0, 0x18, 0x9DD5*8, 0x22C}, {2.5f}); - _memory.WriteData({0x5B28C0, 0x18, 0x1C31A*8, 0x22C}, {3.0f}); - _memory.WriteData({0x5B28C0, 0x18, 0x1C319*8, 0x22C}, {3.0f}); +// _memory.WriteData({0x5B28C0, 0x18, 0x9DD5*8, 0x22C}, {2.5f}); +// _memory.WriteData({0x5B28C0, 0x18, 0x1C31A*8, 0x22C}, {3.0f}); +// _memory.WriteData({0x5B28C0, 0x18, 0x1C319*8, 0x22C}, {3.0f}); } void WitnessRandomizer::Randomize(std::vector panels, int flags) { @@ -196,8 +186,8 @@ void WitnessRandomizer::SwapPanelData(int panel1, int panel2, int finalOffset, i std::vector panel2Offset = {0x5B28C0, 0x18, panel2*8, finalOffset}; std::vector panel1Data = _memory.ReadData(panel1Offset, dataSize); - //std::vector panel2Data = _memory.ReadData(panel2Offset, dataSize); + std::vector panel2Data = _memory.ReadData(panel2Offset, dataSize); _memory.WriteData(panel2Offset, panel1Data); - //_memory.WriteData(panel1Offset, panel2Data); + _memory.WriteData(panel1Offset, panel2Data); } -- cgit 1.4.1