diff options
Diffstat (limited to 'Source/Randomizer.cpp')
| -rw-r--r-- | Source/Randomizer.cpp | 29 |
1 files changed, 26 insertions, 3 deletions
| diff --git a/Source/Randomizer.cpp b/Source/Randomizer.cpp index 4541512..406468c 100644 --- a/Source/Randomizer.cpp +++ b/Source/Randomizer.cpp | |||
| @@ -5,9 +5,8 @@ | |||
| 5 | * Tutorial sounds don't always play | 5 | * Tutorial sounds don't always play |
| 6 | * FEATURES: | 6 | * FEATURES: |
| 7 | * Speed up some of the slow things (like swamp) | 7 | * Speed up some of the slow things (like swamp) |
| 8 | * Determine if the user has entered the seed, and re-randomize it if not | ||
| 9 | * Prevent re-randomization (?) | 8 | * Prevent re-randomization (?) |
| 10 | * Clear "Randomized" state on NG (?) | 9 | * Clear "Randomized" state on NG (?) -- Or on a short delay |
| 11 | * Randomize audio logs -- Hard, seem to be unloaded some times? | 10 | * Randomize audio logs -- Hard, seem to be unloaded some times? |
| 12 | * Swap sounds in jungle (along with panels) -- maybe impossible | 11 | * Swap sounds in jungle (along with panels) -- maybe impossible |
| 13 | * Make orange 7 (all of oranges?) hard. Like big = hard. | 12 | * Make orange 7 (all of oranges?) hard. Like big = hard. |
| @@ -60,6 +59,10 @@ void Randomizer::Randomize() | |||
| 60 | // RandomizeAudioLogs(); | 59 | // RandomizeAudioLogs(); |
| 61 | } | 60 | } |
| 62 | 61 | ||
| 62 | void Randomizer::AdjustSpeed() { | ||
| 63 | |||
| 64 | } | ||
| 65 | |||
| 63 | void Randomizer::RandomizeTutorial() { | 66 | void Randomizer::RandomizeTutorial() { |
| 64 | // Disable tutorial cursor speed modifications (not working?) | 67 | // Disable tutorial cursor speed modifications (not working?) |
| 65 | _core.WritePanelData<float>(0x00295, CURSOR_SPEED_SCALE, {1.0}); | 68 | _core.WritePanelData<float>(0x00295, CURSOR_SPEED_SCALE, {1.0}); |
| @@ -158,10 +161,30 @@ void Randomizer::RandomizeSwamp() { | |||
| 158 | } | 161 | } |
| 159 | 162 | ||
| 160 | void Randomizer::RandomizeMountain() { | 163 | void Randomizer::RandomizeMountain() { |
| 164 | // Randomize lasers & some of mountain | ||
| 161 | _core.Randomize(lasers, SWAP_TARGETS); | 165 | _core.Randomize(lasers, SWAP_TARGETS); |
| 162 | _core.Randomize(pillars, SWAP_LINES | SWAP_BACK_DISTANCE); | ||
| 163 | _core.Randomize(mountainMultipanel, SWAP_LINES); | 166 | _core.Randomize(mountainMultipanel, SWAP_LINES); |
| 164 | 167 | ||
| 168 | // Randomize final pillars order | ||
| 169 | std::vector<int> targets = {pillars[0] + 1}; | ||
| 170 | for (const int pillar : pillars) { | ||
| 171 | int target = _core.ReadPanelData<int>(pillar, TARGET, 1)[0]; | ||
| 172 | targets.push_back(target); | ||
| 173 | } | ||
| 174 | targets[5] = pillars[5] + 1; | ||
| 175 | |||
| 176 | std::vector<int> randomOrder(pillars.size(), 0); | ||
| 177 | std::iota(randomOrder.begin(), randomOrder.end(), 0); | ||
| 178 | _core.RandomizeRange(randomOrder, SWAP_NONE, 0, 4); // Left Pillars 1-4 | ||
| 179 | _core.RandomizeRange(randomOrder, SWAP_NONE, 5, 9); // Right Pillars 1-4 | ||
| 180 | _core.ReassignTargets(pillars, randomOrder, targets); | ||
| 181 | // Turn off original starting panels | ||
| 182 | _core.WritePanelData<float>(pillars[0], POWER, {0.0f, 0.0f}); | ||
| 183 | _core.WritePanelData<float>(pillars[5], POWER, {0.0f, 0.0f}); | ||
| 184 | // Turn on new starting panels | ||
| 185 | _core.WritePanelData<float>(pillars[randomOrder[0]], POWER, {1.0f, 1.0f}); | ||
| 186 | _core.WritePanelData<float>(pillars[randomOrder[5]], POWER, {1.0f, 1.0f}); | ||
| 187 | |||
| 165 | // Read the target of keep front laser, and write it to keep back laser. | 188 | // Read the target of keep front laser, and write it to keep back laser. |
| 166 | std::vector<int> keepFrontLaserTarget = _core.ReadPanelData<int>(0x0360E, TARGET, 1); | 189 | std::vector<int> keepFrontLaserTarget = _core.ReadPanelData<int>(0x0360E, TARGET, 1); |
| 167 | _core.WritePanelData<int>(0x03317, TARGET, keepFrontLaserTarget); | 190 | _core.WritePanelData<int>(0x03317, TARGET, keepFrontLaserTarget); |
