diff options
Diffstat (limited to 'WitnessRandomizer/WitnessRandomizer.cpp')
| -rw-r--r-- | WitnessRandomizer/WitnessRandomizer.cpp | 54 |
1 files changed, 22 insertions, 32 deletions
| 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 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * BUGS: | ||
| 3 | * Bunker has physical panel objects which I can't move :( | ||
| 4 | * Shipwreck vault does not copy well | ||
| 5 | * FEATURES: | 2 | * FEATURES: |
| 6 | * SWAP_TARGETS should still require the full panel sequence (and have ways to prevent softlocks?) | 3 | * SWAP_TARGETS should still require the full panel sequence (and have ways to prevent softlocks?) |
| 4 | ** Jungle(?), Bunker, Monastery, Challenge(!), Shadows | ||
| 7 | * Randomize audio logs | 5 | * Randomize audio logs |
| 8 | * List of panels which can be valid "Burn" (aka desert) substitutes: Prevent (or limit) panel counting | ||
| 9 | * List of panels which split left/right (for left/right controls) | 6 | * List of panels which split left/right (for left/right controls) |
| 10 | * List of panels which split up/down (for up/down controls) | 7 | * List of panels which split up/down (for up/down controls) |
| 11 | * Swap sounds in jungle (along with panels) -- maybe impossible | 8 | * Swap sounds in jungle (along with panels) -- maybe impossible |
| 12 | * Make orange 7 (all of oranges?) hard. Like big = hard. | 9 | * Make orange 7 (all of oranges?) hard. Like big = hard. |
| 10 | * Kill panel slowdown in tutorial | ||
| 11 | * Fix desert elevator (laser rando) / Add keep? | ||
| 13 | * TRY: | 12 | * TRY: |
| 14 | * Swap treehouse pivots | 13 | * Swap treehouse pivots |
| 15 | */ | 14 | */ |
| @@ -27,25 +26,21 @@ int main(int argc, char** argv) | |||
| 27 | srand(atoi(argv[1])); // Seed with RNG from command line | 26 | srand(atoi(argv[1])); // Seed with RNG from command line |
| 28 | } | 27 | } |
| 29 | 28 | ||
| 30 | // randomizer.Randomize(bunkerPanels, SWAP_LINES | SWAP_STYLE); | 29 | //* |
| 31 | /* | ||
| 32 | randomizer.Randomize(lasers, SWAP_TARGETS); | 30 | randomizer.Randomize(lasers, SWAP_TARGETS); |
| 33 | randomizer.Randomize(tutorialPanels, SWAP_TARGETS); | ||
| 34 | randomizer.Randomize(monasteryPanels, SWAP_TARGETS); | ||
| 35 | randomizer.Randomize(shadowsPanels, SWAP_TARGETS); | ||
| 36 | 31 | ||
| 37 | randomizer.Randomize(desertPanels, SWAP_LINES); | ||
| 38 | randomizer.Randomize(treehousePanels, SWAP_LINES); | ||
| 39 | |||
| 40 | std::vector<int> squarePanels; | ||
| 41 | for (auto panelSet : {outsideTutorialPanels, symmetryPanels, quarryPanels, keepPanels, townPanels, bunkerPanels, swampPanels, mountainPanels, utmPanels}) { | ||
| 42 | squarePanels.insert(squarePanels.end(), panelSet.begin(), panelSet.end()); | ||
| 43 | } | ||
| 44 | randomizer.Randomize(squarePanels, SWAP_LINES | SWAP_STYLE); | 32 | randomizer.Randomize(squarePanels, SWAP_LINES | SWAP_STYLE); |
| 33 | randomizer.Randomize(burnablePanels, SWAP_LINES | SWAP_STYLE); | ||
| 34 | |||
| 35 | |||
| 36 | // randomizer.Randomize(monasteryPanels, SWAP_TARGETS); | ||
| 37 | // randomizer.Randomize(shadowsPanels, SWAP_TARGETS); | ||
| 38 | // randomizer.Randomize(bunkerPanels, SWAP_TARGETS); | ||
| 39 | |||
| 40 | // randomizer.Randomize(junglePanels, SWAP_LINES | SWAP_STYLE); | ||
| 41 | // randomizer.Randomize(mountainMultipanel, SWAP_LINES | SWAP_STYLE); | ||
| 42 | // randomizer.Randomize(pillars, SWAP_LINES | SWAP_STYLE | SWAP_BACK_DISTANCE); | ||
| 45 | 43 | ||
| 46 | randomizer.Randomize(junglePanels, SWAP_LINES | SWAP_STYLE); | ||
| 47 | randomizer.Randomize(mountainMultipanel, SWAP_LINES | SWAP_STYLE); | ||
| 48 | randomizer.Randomize(pillars, SWAP_LINES | SWAP_STYLE | SWAP_BACK_DISTANCE); | ||
| 49 | /*/ | 44 | /*/ |
| 50 | int BOATH_3_1 = 0x21B5; | 45 | int BOATH_3_1 = 0x21B5; |
| 51 | int MILL_L_1 = 0xE0C; | 46 | int MILL_L_1 = 0xE0C; |
| @@ -65,14 +60,6 @@ int main(int argc, char** argv) | |||
| 65 | int DESERT_L_2 = 0x006E3; | 60 | int DESERT_L_2 = 0x006E3; |
| 66 | int TOWN_S_1 = 0x28AC7; | 61 | int TOWN_S_1 = 0x28AC7; |
| 67 | 62 | ||
| 68 | std::vector<int> squarePanels; | ||
| 69 | for (auto panelSet : {outsideTutorialPanels, symmetryPanels, quarryPanels, keepPanels, townPanels, bunkerPanels, swampPanels, mountainPanels, utmPanels, treehousePanels}) { | ||
| 70 | squarePanels.insert(squarePanels.end(), panelSet.begin(), panelSet.end()); | ||
| 71 | } | ||
| 72 | for (int panel : squarePanels) { | ||
| 73 | randomizer.SwapPanels(DESERT_L_2, panel, SWAP_LINES | SWAP_STYLE); | ||
| 74 | } | ||
| 75 | |||
| 76 | 63 | ||
| 77 | //randomizer.SwapPanels(PILLAR_L_1, PILLAR_C_L, SWAP_LINES | SWAP_STYLE | SWAP_BACK_DISTANCE); | 64 | //randomizer.SwapPanels(PILLAR_L_1, PILLAR_C_L, SWAP_LINES | SWAP_STYLE | SWAP_BACK_DISTANCE); |
| 78 | //randomizer.SwapPanelData(PILLAR_L_1, PILLAR_C_L, 0x200, 0x50); | 65 | //randomizer.SwapPanelData(PILLAR_L_1, PILLAR_C_L, 0x200, 0x50); |
| @@ -89,10 +76,13 @@ WitnessRandomizer::WitnessRandomizer() : _memory("witness64_d3d11.exe") | |||
| 89 | _memory.WriteData<float>({0x5B28C0, 0x18, 0x18076*8, 0x2A8}, {0.0f, 0.0f}); | 76 | _memory.WriteData<float>({0x5B28C0, 0x18, 0x18076*8, 0x2A8}, {0.0f, 0.0f}); |
| 90 | // Change desert floating target to desert flood final | 77 | // Change desert floating target to desert flood final |
| 91 | _memory.WriteData<int>({0x5B28C0, 0x18, 0x17ECA*8, 0x2BC}, {0x18077}); | 78 | _memory.WriteData<int>({0x5B28C0, 0x18, 0x17ECA*8, 0x2BC}, {0x18077}); |
| 79 | // Distance-gate shadows laser to prevent sniping through the bars | ||
| 80 | _memory.WriteData<float>({0x5B28C0, 0x18, 0x19650*8, 0x3C0}, {2.0f}); | ||
| 81 | |||
| 92 | // Explicitly set back-off distance for the challenge entry & final 2 pillars | 82 | // Explicitly set back-off distance for the challenge entry & final 2 pillars |
| 93 | _memory.WriteData<float>({0x5B28C0, 0x18, 0x9DD5*8, 0x22C}, {2.5f}); | 83 | // _memory.WriteData<float>({0x5B28C0, 0x18, 0x9DD5*8, 0x22C}, {2.5f}); |
| 94 | _memory.WriteData<float>({0x5B28C0, 0x18, 0x1C31A*8, 0x22C}, {3.0f}); | 84 | // _memory.WriteData<float>({0x5B28C0, 0x18, 0x1C31A*8, 0x22C}, {3.0f}); |
| 95 | _memory.WriteData<float>({0x5B28C0, 0x18, 0x1C319*8, 0x22C}, {3.0f}); | 85 | // _memory.WriteData<float>({0x5B28C0, 0x18, 0x1C319*8, 0x22C}, {3.0f}); |
| 96 | } | 86 | } |
| 97 | 87 | ||
| 98 | void WitnessRandomizer::Randomize(std::vector<int> panels, int flags) { | 88 | void WitnessRandomizer::Randomize(std::vector<int> panels, int flags) { |
| @@ -196,8 +186,8 @@ void WitnessRandomizer::SwapPanelData(int panel1, int panel2, int finalOffset, i | |||
| 196 | std::vector<int> panel2Offset = {0x5B28C0, 0x18, panel2*8, finalOffset}; | 186 | std::vector<int> panel2Offset = {0x5B28C0, 0x18, panel2*8, finalOffset}; |
| 197 | 187 | ||
| 198 | std::vector<byte> panel1Data = _memory.ReadData<byte>(panel1Offset, dataSize); | 188 | std::vector<byte> panel1Data = _memory.ReadData<byte>(panel1Offset, dataSize); |
| 199 | //std::vector<byte> panel2Data = _memory.ReadData<byte>(panel2Offset, dataSize); | 189 | std::vector<byte> panel2Data = _memory.ReadData<byte>(panel2Offset, dataSize); |
| 200 | 190 | ||
| 201 | _memory.WriteData<byte>(panel2Offset, panel1Data); | 191 | _memory.WriteData<byte>(panel2Offset, panel1Data); |
| 202 | //_memory.WriteData<byte>(panel1Offset, panel2Data); | 192 | _memory.WriteData<byte>(panel1Offset, panel2Data); |
| 203 | } | 193 | } |
