diff options
-rw-r--r-- | WitnessRandomizer/Memory.h | 19 | ||||
-rw-r--r-- | WitnessRandomizer/Panels.h | 619 | ||||
-rw-r--r-- | WitnessRandomizer/WitnessRandomizer.cpp | 710 | ||||
-rw-r--r-- | WitnessRandomizer/WitnessRandomizer.vcxproj | 1 | ||||
-rw-r--r-- | WitnessRandomizer/WitnessRandomizer.vcxproj.filters | 3 |
5 files changed, 687 insertions, 665 deletions
diff --git a/WitnessRandomizer/Memory.h b/WitnessRandomizer/Memory.h index 6b50948..6882c9c 100644 --- a/WitnessRandomizer/Memory.h +++ b/WitnessRandomizer/Memory.h | |||
@@ -17,18 +17,23 @@ public: | |||
17 | std::vector<T> ReadData(const std::vector<int>& offsets, int numItems) { | 17 | std::vector<T> ReadData(const std::vector<int>& offsets, int numItems) { |
18 | std::vector<T> data; | 18 | std::vector<T> data; |
19 | data.resize(numItems); | 19 | data.resize(numItems); |
20 | if (!ReadProcessMemory(_handle, (LPVOID)ComputeOffset(offsets), &data[0], sizeof(T) * numItems, NULL)) { | 20 | for (int i=0; i<5; i++) { |
21 | ThrowError(); | 21 | if (ReadProcessMemory(_handle, (LPVOID)ComputeOffset(offsets), &data[0], sizeof(T) * numItems, NULL)) |
22 | { | ||
23 | return data; | ||
24 | } | ||
22 | } | 25 | } |
23 | return data; | 26 | ThrowError(); |
24 | } | 27 | } |
25 | 28 | ||
26 | template <class T> | 29 | template <class T> |
27 | bool WriteData(const std::vector<int>& offsets, const std::vector<T>& data) { | 30 | void WriteData(const std::vector<int>& offsets, const std::vector<T>& data) { |
28 | if (!WriteProcessMemory(_handle, (LPVOID)ComputeOffset(offsets), &data[0], sizeof(T) * data.size(), NULL)) { | 31 | for (int i=0; i<5; i++) { |
29 | return false; | 32 | if (WriteProcessMemory(_handle, (LPVOID)ComputeOffset(offsets), &data[0], sizeof(T) * data.size(), NULL)) { |
33 | return; | ||
34 | } | ||
30 | } | 35 | } |
31 | return true; | 36 | ThrowError(); |
32 | } | 37 | } |
33 | 38 | ||
34 | private: | 39 | private: |
diff --git a/WitnessRandomizer/Panels.h b/WitnessRandomizer/Panels.h new file mode 100644 index 0000000..3a54ac1 --- /dev/null +++ b/WitnessRandomizer/Panels.h | |||
@@ -0,0 +1,619 @@ | |||
1 | #pragma once | ||
2 | #include <vector> | ||
3 | |||
4 | std::vector<int> lasers = { | ||
5 | 0x0360D, // Symmetry | ||
6 | 0x03615, // Swamp | ||
7 | 0x09DE0, // Bunker | ||
8 | 0x17CA4, // Monastery | ||
9 | 0x032F5, // Town | ||
10 | 0x03613, // Treehouse | ||
11 | // 0x03608, // Desert | ||
12 | 0x03612, // Quarry | ||
13 | 0x03616, // Jungle | ||
14 | }; | ||
15 | |||
16 | std::vector<int> tutorialPanels = { | ||
17 | // 0x0A3B5, // Back Left | ||
18 | 0x0A3B2, // Back Right | ||
19 | 0x00295, // Center Left | ||
20 | 0x00293, // Front Center | ||
21 | 0x002C2, // Front Left | ||
22 | 0x0C335, // Pillar | ||
23 | 0x0C373, // Patio floor | ||
24 | }; | ||
25 | |||
26 | std::vector<int> outsideTutorialPanels = { | ||
27 | 0x0005D, // Outside Tutorial Dots Tutorial 1 | ||
28 | 0x0005E, // Outside Tutorial Dots Tutorial 2 | ||
29 | 0x0005F, // Outside Tutorial Dots Tutorial 3 | ||
30 | 0x00060, // Outside Tutorial Dots Tutorial 4 | ||
31 | 0x00061, // Outside Tutorial Dots Tutorial 5 | ||
32 | 0x018AF, // Outside Tutorial Stones Tutorial 1 | ||
33 | 0x0001B, // Outside Tutorial Stones Tutorial 2 | ||
34 | 0x012C9, // Outside Tutorial Stones Tutorial 3 | ||
35 | 0x0001C, // Outside Tutorial Stones Tutorial 4 | ||
36 | 0x0001D, // Outside Tutorial Stones Tutorial 5 | ||
37 | 0x0001E, // Outside Tutorial Stones Tutorial 6 | ||
38 | 0x0001F, // Outside Tutorial Stones Tutorial 7 | ||
39 | 0x00020, // Outside Tutorial Stones Tutorial 8 | ||
40 | 0x00021, // Outside Tutorial Stones Tutorial 9 | ||
41 | 0x033D4, // Outside Tutorial Vault | ||
42 | // 0x03481, // Outside Tutorial Vault Box | ||
43 | 0x0A171, // Tutorial Optional Door 1 | ||
44 | 0x04CA4, // Tutorial Optional Door 2 | ||
45 | 0x17CFB, // Outside Tutorial Discard | ||
46 | // 0x00143, // Orchard Apple Tree 1 | ||
47 | // 0x0003B, // Orchard Apple Tree 2 | ||
48 | // 0x00055, // Orchard Apple Tree 3 | ||
49 | // 0x032F7, // Orchard Apple Tree 4 | ||
50 | // 0x032FF, // Orchard Apple Tree 5 | ||
51 | }; | ||
52 | |||
53 | std::vector<int> symmetryPanels = { | ||
54 | // 0x3C12B, // Glass Factory Discard | ||
55 | 0x01A54, // Glass Factory Entry | ||
56 | 0x00086, // Glass Factory Vertical Symmetry 1 | ||
57 | 0x00087, // Glass Factory Vertical Symmetry 2 | ||
58 | 0x00059, // Glass Factory Vertical Symmetry 3 | ||
59 | 0x00062, // Glass Factory Vertical Symmetry 4 | ||
60 | 0x0005C, // Glass Factory Vertical Symmetry 5 | ||
61 | // 0x17CC8, // Glass Factory Summon Boat | ||
62 | 0x0008D, // Glass Factory Rotational Symmetry 1 | ||
63 | 0x00081, // Glass Factory Rotational Symmetry 2 | ||
64 | 0x00083, // Glass Factory Rotational Symmetry 3 | ||
65 | 0x00084, // Glass Factory Melting 1 | ||
66 | 0x00082, // Glass Factory Melting 2 | ||
67 | 0x0343A, // Glass Factory Melting 3 | ||
68 | |||
69 | 0x000B0, // Symmetry Island Door 1 | ||
70 | 0x00022, // Symmetry Island Black Dots 1 | ||
71 | 0x00023, // Symmetry Island Black Dots 2 | ||
72 | 0x00024, // Symmetry Island Black Dots 3 | ||
73 | 0x00025, // Symmetry Island Black Dots 4 | ||
74 | 0x00026, // Symmetry Island Black Dots 5 | ||
75 | 0x0007C, // Symmetry Island Colored Dots 1 | ||
76 | 0x0007E, // Symmetry Island Colored Dots 2 | ||
77 | 0x00075, // Symmetry Island Colored Dots 3 | ||
78 | 0x00073, // Symmetry Island Colored Dots 4 | ||
79 | 0x00077, // Symmetry Island Colored Dots 5 | ||
80 | 0x00079, // Symmetry Island Colored Dots 6 | ||
81 | 0x00065, // Symmetry Island Fading Lines 1 | ||
82 | 0x0006D, // Symmetry Island Fading Lines 2 | ||
83 | 0x00072, // Symmetry Island Fading Lines 3 | ||
84 | 0x0006F, // Symmetry Island Fading Lines 4 | ||
85 | 0x00070, // Symmetry Island Fading Lines 5 | ||
86 | 0x00071, // Symmetry Island Fading Lines 6 | ||
87 | 0x00076, // Symmetry Island Fading Lines 7 | ||
88 | // 0x009B8, // Symmetry Island Transparent 1 // Too mean for right now | ||
89 | // 0x003E8, // Symmetry Island Transparent 2 // Too mean for right now | ||
90 | // 0x00A15, // Symmetry Island Transparent 3 // Too mean for right now | ||
91 | // 0x00B53, // Symmetry Island Transparent 4 // Too mean for right now | ||
92 | // 0x00B8D, // Symmetry Island Transparent 5 // Too mean for right now | ||
93 | // 0x1C349, // Symmetry Island Door 2 - Collision fails here, sadly | ||
94 | 0x00A52, // Symmetry Island Laser Yellow 1 | ||
95 | 0x00A57, // Symmetry Island Laser Yellow 2 | ||
96 | 0x00A5B, // Symmetry Island Laser Yellow 3 | ||
97 | 0x00A61, // Symmetry Island Laser Blue 1 | ||
98 | 0x00A64, // Symmetry Island Laser Blue 2 | ||
99 | 0x00A68, // Symmetry Island Laser Blue 3 | ||
100 | }; | ||
101 | |||
102 | std::vector<int> desertPanels = { | ||
103 | // 0x17CE7, // Desert Discard | ||
104 | // 0x0CC7B, // Desert Vault | ||
105 | // 0x0339E, // Desert Vault Box | ||
106 | 0x00698, // Desert Surface 1 | ||
107 | 0x0048F, // Desert Surface 2 | ||
108 | 0x09F92, // Desert Surface 3 | ||
109 | // 0x09FA0, // Desert Surface 3 Control | ||
110 | 0x0A036, // Desert Surface 4 | ||
111 | 0x09DA6, // Desert Surface 5 | ||
112 | 0x0A049, // Desert Surface 6 | ||
113 | 0x0A053, // Desert Surface 7 | ||
114 | 0x09F94, // Desert Surface 8 | ||
115 | // 0x09F86, // Desert Surface 8 Control | ||
116 | // 0x0C339, // Desert Surface Door | ||
117 | // 0x09FAA, // Desert Lightswitch | ||
118 | 0x00422, // Desert Light 1 | ||
119 | 0x006E3, // Desert Light 2 | ||
120 | // 0x0A02D, // Desert Light 3 | ||
121 | 0x00C72, // Desert Pond 1 | ||
122 | 0x0129D, // Desert Pond 2 | ||
123 | 0x008BB, // Desert Pond 3 | ||
124 | 0x0078D, // Desert Pond 4 | ||
125 | 0x18313, // Desert Pond 5 | ||
126 | // 0x0A249, // Desert Pond Exit Door | ||
127 | // 0x1C2DF, // Desert Flood Control Lower Far Left | ||
128 | // 0x1831E, // Desert Flood Control Lower Far Right | ||
129 | // 0x1C260, // Desert Flood Control Lower Near Left | ||
130 | // 0x1831C, // Desert Flood Control Lower Near Right | ||
131 | // 0x1C2F3, // Desert Flood Control Raise Far Left | ||
132 | // 0x1831D, // Desert Flood Control Raise Far Right | ||
133 | // 0x1C2B1, // Desert Flood Control Raise Near Left | ||
134 | // 0x1831B, // Desert Flood Control Raise Near Right | ||
135 | 0x04D18, // Desert Flood 1 | ||
136 | 0x01205, // Desert Flood 2 | ||
137 | 0x181AB, // Desert Flood 3 | ||
138 | 0x0117A, // Desert Flood 4 | ||
139 | 0x17ECA, // Desert Flood 5 | ||
140 | // 0x18076, // Desert Flood Exit | ||
141 | // 0x0A15C, // Desert Final Left Convex | ||
142 | // 0x09FFF, // Desert Final Left Concave | ||
143 | // 0x0A15F, // Desert Final Near | ||
144 | // 0x17C31, // Desert Final Transparent | ||
145 | 0x012D7, // Desert Final Far | ||
146 | // 0x0A015, // Desert Final Far Control | ||
147 | }; | ||
148 | |||
149 | std::vector<int> quarryPanels = { | ||
150 | 0x01E5A, // Mill Entry Door Left | ||
151 | 0x01E59, // Mill Entry Door Right | ||
152 | // 0x03678, // Mill Lower Ramp Contol | ||
153 | 0x00E0C, // Mill Lower Row 1 | ||
154 | 0x01489, // Mill Lower Row 2 | ||
155 | 0x0148A, // Mill Lower Row 3 | ||
156 | 0x014D9, // Mill Lower Row 4 | ||
157 | 0x014E7, // Mill Lower Row 5 | ||
158 | 0x014E8, // Mill Lower Row 6 | ||
159 | // 0x03679, // Mill Lower Lift Control | ||
160 | 0x00557, // Mill Upper Row 1 | ||
161 | 0x005F1, // Mill Upper Row 2 | ||
162 | 0x00620, // Mill Upper Row 3 | ||
163 | 0x009F5, // Mill Upper Row 4 | ||
164 | 0x0146C, // Mill Upper Row 5 | ||
165 | 0x3C12D, // Mill Upper Row 6 | ||
166 | 0x03686, // Mill Upper Row 7 | ||
167 | 0x014E9, // Mill Upper Row 8 | ||
168 | 0x0367C, // Mill Control Room 1 | ||
169 | // 0x03675, // Mill Upper Lift Control | ||
170 | // 0x03676, // Mill Upper Ramp Control | ||
171 | 0x3C125, // Mill Control Room 2 | ||
172 | // 0x275ED, // Mill EP Door | ||
173 | // 0x17CAC, // Mill Stairs Shortcut Door | ||
174 | 0x03677, // Mill Stairs Control | ||
175 | // 0x17CF0, // Mill Discard | ||
176 | // 0x17CC4, // Mill Elevator Control | ||
177 | 0x021D5, // Boathouse Ramp Activation Shapers | ||
178 | 0x034D4, // Boathouse Ramp Activation Stars | ||
179 | // 0x03852, // Boathouse Ramp Angle Control | ||
180 | 0x021B3, // Boathouse Erasers and Shapers 1 | ||
181 | 0x021B4, // Boathouse Erasers and Shapers 2 | ||
182 | 0x021B0, // Boathouse Erasers and Shapers 3 | ||
183 | 0x021AF, // Boathouse Erasers and Shapers 4 | ||
184 | 0x021AE, // Boathouse Erasers and Shapers 5 | ||
185 | // 0x17CA6, // Boathouse Summon Boat | ||
186 | // 0x03858, // Boathouse Ramp Position Control | ||
187 | // 0x38663, // Boathouse Shortcut | ||
188 | 0x021B5, // Boathouse Erasers and Stars 1 | ||
189 | 0x021B6, // Boathouse Erasers and Stars 2 | ||
190 | 0x021B7, // Boathouse Erasers and Stars 3 | ||
191 | 0x021BB, // Boathouse Erasers and Stars 4 | ||
192 | 0x09DB5, // Boathouse Erasers and Stars 5 | ||
193 | 0x09DB1, // Boathouse Erasers and Stars 6 | ||
194 | 0x3C124, // Boathouse Erasers and Stars 7 | ||
195 | 0x09DB3, // Boathouse Erasers Shapers and Stars 1 | ||
196 | 0x09DB4, // Boathouse Erasers Shapers and Stars 2 | ||
197 | 0x0A3CB, // Boathouse Erasers Shapers and Stars 3 | ||
198 | 0x0A3CC, // Boathouse Erasers Shapers and Stars 4 | ||
199 | 0x0A3D0, // Boathouse Erasers Shapers and Stars 5 | ||
200 | // 0x275FA, // Boathouse Hook Control | ||
201 | 0x09E57, // Quarry Entry Gate 1 | ||
202 | 0x17C09, // Quarry Entry Gate 2 | ||
203 | }; | ||
204 | |||
205 | std::vector<int> 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 | ||
206 | // 0x17C95, // Treehouse Summon Boat | ||
207 | 0x0288C, // Treehouse Door 1 | ||
208 | 0x02886, // Treehouse Door 2 | ||
209 | 0x17D72, // Treehouse Yellow 1 | ||
210 | 0x17D8F, // Treehouse Yellow 2 | ||
211 | 0x17D74, // Treehouse Yellow 3 | ||
212 | 0x17DAC, // Treehouse Yellow 4 | ||
213 | 0x17D9E, // Treehouse Yellow 5 | ||
214 | 0x17DB9, // Treehouse Yellow 6 | ||
215 | 0x17D9C, // Treehouse Yellow 7 | ||
216 | 0x17DC2, // Treehouse Yellow 8 | ||
217 | 0x17DC4, // Treehouse Yellow 9 | ||
218 | 0x0A182, // Treehouse Door 3 | ||
219 | 0x17DC8, // Treehouse First Purple 1 | ||
220 | 0x17DC7, // Treehouse First Purple 2 | ||
221 | 0x17CE4, // Treehouse First Purple 3 | ||
222 | 0x17D2D, // Treehouse First Purple 4 | ||
223 | 0x17D6C, // Treehouse First Purple 5 | ||
224 | 0x17D9B, // Treehouse Second Purple 1 | ||
225 | 0x17D99, // Treehouse Second Purple 2 | ||
226 | 0x17DAA, // Treehouse Second Purple 3 | ||
227 | 0x17D97, // Treehouse Second Purple 4 | ||
228 | 0x17BDF, // Treehouse Second Purple 5 | ||
229 | 0x17D91, // Treehouse Second Purple 6 | ||
230 | 0x17DC6, // Treehouse Second Purple 7 | ||
231 | 0x17DB3, // Treehouse Left Orange 1 | ||
232 | 0x17DB5, // Treehouse Left Orange 2 | ||
233 | 0x17DB6, // Treehouse Left Orange 3 | ||
234 | 0x17DC0, // Treehouse Left Orange 4 | ||
235 | 0x17DD7, // Treehouse Left Orange 5 | ||
236 | 0x17DD9, // Treehouse Left Orange 6 | ||
237 | 0x17DB8, // Treehouse Left Orange 7 | ||
238 | 0x17DDC, // Treehouse Left Orange 8 | ||
239 | // 0x17DD1, // Treehouse Left Orange 9 has to pivot | ||
240 | 0x17DDE, // Treehouse Left Orange 10 | ||
241 | 0x17DE3, // Treehouse Left Orange 11 | ||
242 | 0x17DEC, // Treehouse Left Orange 12 | ||
243 | 0x17DAE, // Treehouse Left Orange 13 | ||
244 | 0x17DB0, // Treehouse Left Orange 14 | ||
245 | 0x17DDB, // Treehouse Left Orange 15 | ||
246 | 0x17D88, // Treehouse Right Orange 1 | ||
247 | 0x17DB4, // Treehouse Right Orange 2 | ||
248 | 0x17D8C, // Treehouse Right Orange 3 | ||
249 | 0x17CE3, // Treehouse Right Orange 4 | ||
250 | // 0x17DCD, // Treehouse Right Orange 5 has to pivot | ||
251 | 0x17DB2, // Treehouse Right Orange 6 | ||
252 | 0x17DCC, // Treehouse Right Orange 7 | ||
253 | 0x17DCA, // Treehouse Right Orange 8 | ||
254 | 0x17D8E, // Treehouse Right Orange 9 | ||
255 | // 0x17DB7, // Treehouse Right Orange 10 has to pivot | ||
256 | 0x17DB1, // Treehouse Right Orange 11 | ||
257 | 0x17DA2, // Treehouse Right Orange 12 | ||
258 | 0x17E3C, // Treehouse Green 1 | ||
259 | 0x17E4D, // Treehouse Green 2 | ||
260 | 0x17E4F, // Treehouse Green 3 | ||
261 | // 0x17E52, // Treehouse Green 4 | ||
262 | 0x17E5B, // Treehouse Green 5 | ||
263 | 0x17E5F, // Treehouse Green 6 | ||
264 | 0x17E61, // Treehouse Green 7 | ||
265 | 0x17FA9, // Treehouse Green Bridge Discard | ||
266 | 0x17FA0, // Treehouse Laser Discard | ||
267 | // 0x2700B, // Treehouse Exterior Door Control | ||
268 | // 0x17CBC, // Treehouse Interior Door Control | ||
269 | // 0x037FF, // Treehouse Drawbridge Control | ||
270 | }; | ||
271 | |||
272 | std::vector<int> keepPanels = { | ||
273 | 0x00139, // Keep Hedges 1 | ||
274 | 0x019DC, // Keep Hedges 2 | ||
275 | 0x019E7, // Keep Hedges 3 | ||
276 | 0x01A0F, // Keep Hedges 4 | ||
277 | // 0x033EA, // Keep Yellow Pressure Plates | ||
278 | // 0x0A3A8, // Keep Yellow Reset | ||
279 | // 0x01BE9, // Keep Purple Pressure Plates | ||
280 | // 0x0A3B9, // Keep Purple Reset | ||
281 | // 0x01CD3, // Keep Green Pressure Plates | ||
282 | // 0x0A3BB, // Keep Green Reset | ||
283 | // 0x01D3F, // Keep Blue Pressure Plates | ||
284 | // 0x0A3AD, // Keep Blue Reset | ||
285 | 0x0360E, // Keep Front Laser | ||
286 | 0x03317, // Keep Back Laser | ||
287 | // 0x09E49, // Keep Shadows Shortcut | ||
288 | // 0x0361B, // Keep Tower Shortcut | ||
289 | 0x17D27, // Keep Discard | ||
290 | 0x17D28, // Shipwreck Discard | ||
291 | 0x00AFB, // Shipwreck Vault | ||
292 | // 0x03535, // Shipwreck Vault Box | ||
293 | }; | ||
294 | |||
295 | std::vector<int> shadowsPanels = { // works beautifully, can solve based on panel color and where start/end points are if your memory is good | ||
296 | 0x386FA, // Shadows Avoid 1 | ||
297 | 0x1C33F, // Shadows Avoid 2 | ||
298 | 0x196E2, // Shadows Avoid 3 | ||
299 | 0x1972A, // Shadows Avoid 4 | ||
300 | 0x19809, // Shadows Avoid 5 | ||
301 | 0x19806, // Shadows Avoid 6 | ||
302 | 0x196F8, // Shadows Avoid 7 | ||
303 | 0x1972F, // Shadows Avoid 8 | ||
304 | 0x19797, // Shadows Follow 1 | ||
305 | 0x1979A, // Shadows Follow 2 | ||
306 | 0x197E0, // Shadows Follow 3 | ||
307 | 0x197E8, // Shadows Follow 4 | ||
308 | 0x197E5, // Shadows Follow 5 | ||
309 | // 0x334DC, // Shadows Inner Door Control | ||
310 | 0x19650, // Shadows Laser | ||
311 | // 0x334DB, // Shadows Outer Door Control | ||
312 | 0x198B5, // Shadows Tutorial 1 | ||
313 | 0x198BD, // Shadows Tutorial 2 | ||
314 | 0x198BF, // Shadows Tutorial 3 | ||
315 | 0x19771, // Shadows Tutorial 4 | ||
316 | 0x0A8DC, // Shadows Tutorial 5 | ||
317 | 0x0AC74, // Shadows Tutorial 6 | ||
318 | 0x0AC7A, // Shadows Tutorial 7 | ||
319 | 0x0A8E0, // Shadows Tutorial 8 | ||
320 | }; | ||
321 | |||
322 | std::vector<int> townPanels = { // appears to be ok but keeps crashing game? | ||
323 | 0x2899C, // Town 25 Dots 1 | ||
324 | 0x28A33, // Town 25 Dots 2 | ||
325 | 0x28ABF, // Town 25 Dots 3 | ||
326 | 0x28AC0, // Town 25 Dots 4 | ||
327 | 0x28AC1, // Town 25 Dots 5 | ||
328 | 0x28938, // Town Apple Tree | ||
329 | 0x28AC7, // Town Blue 1 | ||
330 | 0x28AC8, // Town Blue 2 | ||
331 | 0x28ACA, // Town Blue 3 | ||
332 | 0x28ACB, // Town Blue 4 | ||
333 | 0x28ACC, // Town Blue 5 | ||
334 | // 0x0A054, // Town Summon Boat | ||
335 | // 0x2896A, // Town Bridge | ||
336 | 0x28A0D, // Town Church Stars | ||
337 | 0x28AD9, // Town Eraser | ||
338 | 0x28998, // Town Green Door | ||
339 | // 0x09F98, // Town Laser Redirect Control | ||
340 | // 0x1C344, // Town Laser Redirect Panel 1 | ||
341 | // 0x1C343, // Town Laser Redirect Panel 2 | ||
342 | // 0x28A69, // Town Lattice | ||
343 | // 0x28A79, // Town Maze | ||
344 | 0x0A0C8, // Town Orange Crate | ||
345 | 0x17D01, // Town Orange Crate Discard | ||
346 | // 0x28B39, // Town Red Hexagonal | ||
347 | // 0x334D8, // Town RGB Light Control | ||
348 | 0x03C08, // Town RGB Stars | ||
349 | 0x03C0C, // Town RGB Stones | ||
350 | 0x17C71, // Town Rooftop Discard | ||
351 | // 0x034E3, // Town Soundproof Dots panels in their locations must match so can't swap unless that is fixed | ||
352 | // 0x034E4, // Town Soundproof Waves | ||
353 | 0x18590, // Town Transparent | ||
354 | // 0x079DF, // Town Triple | ||
355 | 0x17D02, // Town Windmill Control | ||
356 | 0x17F5F, // Town Windmill Door | ||
357 | 0x28AE3, // Town Wire | ||
358 | 0x17F89, // Theater Entrance | ||
359 | // 0x00815, // Theater Video Input | ||
360 | // 0x03553, // Theater Tutorial Video | ||
361 | // 0x03552, // Theater Desert Video | ||
362 | // 0x0354E, // Theater Jungle Video | ||
363 | // 0x03549, // Theater Challenge Video | ||
364 | // 0x0354F, // Theater Shipwreck Video | ||
365 | // 0x03545, // Theater Mountain Video | ||
366 | 0x17CF7, // Theater Discard | ||
367 | 0x33AB2, // Theater Corona Exit | ||
368 | 0x0A168, // Theater Sun Exit | ||
369 | }; | ||
370 | |||
371 | std::vector<int> monasteryPanels = { | ||
372 | // 0x00B10, // Monastery Left Door | ||
373 | // 0x00C92, // Monastery Right Door | ||
374 | 0x00290, // Monastery Exterior 1 | ||
375 | 0x00038, // Monastery Exterior 2 | ||
376 | 0x00037, // Monastery Exterior 3 | ||
377 | // 0x09D9B, // Monastery Bonsai | ||
378 | 0x193A7, // Monastery Interior 1 | ||
379 | 0x193AA, // Monastery Interior 2 | ||
380 | 0x193AB, // Monastery Interior 3 | ||
381 | 0x193A6, // Monastery Interior 4 | ||
382 | // 0x03713, // Monastery Shortcut | ||
383 | }; | ||
384 | |||
385 | std::vector<int> junglePanels = { | ||
386 | // 0x17CDF, // Jungle Summon Boat | ||
387 | 0x17F9B, // Jungle Discard | ||
388 | 0x002C4, // Jungle Waves 1 | ||
389 | 0x00767, // Jungle Waves 2 | ||
390 | 0x002C6, // Jungle Waves 3 | ||
391 | 0x0070E, // Jungle Waves 4 | ||
392 | 0x0070F, // Jungle Waves 5 | ||
393 | 0x0087D, // Jungle Waves 6 | ||
394 | 0x002C7, // Jungle Waves 7 | ||
395 | // 0x15ADD, // Jungle Vault | ||
396 | // 0x03702, // Jungle Vault Box | ||
397 | // 0x17CAA, // Jungle Courtyard Gate | ||
398 | 0x0026D, // Jungle Dots 1 | ||
399 | 0x0026E, // Jungle Dots 2 | ||
400 | 0x0026F, // Jungle Dots 3 | ||
401 | 0x00C3F, // Jungle Dots 4 | ||
402 | 0x00C41, // Jungle Dots 5 | ||
403 | 0x014B2, // Jungle Dots 6 | ||
404 | // 0x17CAB, // Jungle Pop - up Wall | ||
405 | // 0x337FA, // Jungle Shortcut | ||
406 | }; | ||
407 | |||
408 | std::vector<int> bunkerPanels = { // this doesn't want to behave, I have no idea | ||
409 | 0x17C2E, // Bunker Entry Door | ||
410 | 0x09F7D, // Bunker Tutorial 1 | ||
411 | 0x09FDC, // Bunker Tutorial 2 | ||
412 | 0x09FF7, // Bunker Tutorial 3 | ||
413 | 0x09F82, // Bunker Tutorial 4 | ||
414 | 0x09FF8, // Bunker Tutorial 5 | ||
415 | 0x09D9F, // Bunker Advanced 1 | ||
416 | 0x09DA1, // Bunker Advanced 2 | ||
417 | 0x09DA2, // Bunker Advanced 3 | ||
418 | 0x09DAF, // Bunker Advanced 4 | ||
419 | // 0x0A099, // Bunker Glass Door | ||
420 | 0x0A010, // Bunker Glass 1 | ||
421 | 0x0A01B, // Bunker Glass 2 | ||
422 | 0x0A01F, // Bunker Glass 3 | ||
423 | 0x34BC5, // Bunker Open Ultraviolet | ||
424 | 0x34BC6, // Bunker Close Ultraviolet | ||
425 | 0x17E63, // Bunker Ultraviolet 1 | ||
426 | 0x17E67, // Bunker Ultraviolet 2 | ||
427 | 0x0A079, // Bunker Elevator | ||
428 | }; | ||
429 | |||
430 | std::vector<int> swampPanels = { // appears to work ok swapping panels but keeps crashing game? | ||
431 | 0x0056E, // Swamp Entry | ||
432 | 0x00469, // Swamp Tutorial 1 | ||
433 | 0x00472, // Swamp Tutorial 2 | ||
434 | 0x00262, // Swamp Tutorial 3 | ||
435 | 0x00474, // Swamp Tutorial 4 | ||
436 | 0x00553, // Swamp Tutorial 5 | ||
437 | 0x0056F, // Swamp Tutorial 6 | ||
438 | 0x00390, // Swamp Tutorial 7 | ||
439 | 0x010CA, // Swamp Tutorial 8 | ||
440 | 0x00983, // Swamp Tutorial 9 | ||
441 | 0x00984, // Swamp Tutorial 10 | ||
442 | 0x00986, // Swamp Tutorial 11 | ||
443 | 0x00985, // Swamp Tutorial 12 | ||
444 | 0x00987, // Swamp Tutorial 13 | ||
445 | 0x181A9, // Swamp Tutorial 14 | ||
446 | // 0x00609, // Swamp Surface Sliding Bridge Control | ||
447 | 0x00982, // Swamp Red 1 | ||
448 | 0x0097F, // Swamp Red 2 | ||
449 | 0x0098F, // Swamp Red 3 | ||
450 | 0x00990, // Swamp Red 4 | ||
451 | 0x17C0D, // Swamp Red Shortcut 1 | ||
452 | 0x17C0E, // Swamp Red Shortcut 2 | ||
453 | 0x00999, // Swamp Discontinuous 1 | ||
454 | 0x0099D, // Swamp Discontinuous 2 | ||
455 | 0x009A0, // Swamp Discontinuous 3 | ||
456 | 0x009A1, // Swamp Discontinuous 4 | ||
457 | 0x00007, // Swamp Rotation Tutorial 1 | ||
458 | 0x00008, // Swamp Rotation Tutorial 2 | ||
459 | 0x00009, // Swamp Rotation Tutorial 3 | ||
460 | 0x0000A, // Swamp Rotation Tutorial 4 | ||
461 | // 0x181F5, // Swamp Rotating Bridge Control | ||
462 | 0x009AB, // Swamp Blue Underwater 1 | ||
463 | 0x009AD, // Swamp Blue Underwater 2 | ||
464 | 0x009AE, // Swamp Blue Underwater 3 | ||
465 | 0x009AF, // Swamp Blue Underwater 4 | ||
466 | 0x00006, // Swamp Blue Underwater 5 | ||
467 | 0x003B2, // Swamp Rotation Advanced 1 | ||
468 | 0x00A1E, // Swamp Rotation Advanced 2 | ||
469 | 0x00C2E, // Swamp Rotation Advanced 3 | ||
470 | 0x00E3A, // Swamp Rotation Advanced 4 | ||
471 | // 0x17E2B, // Swamp Flood Gate Control | ||
472 | // 0x09DB8, // Swamp Summon Boat | ||
473 | 0x009A6, // Swamp Purple Tetris | ||
474 | // 0x18488, // Swamp Underwater Sliding Bridge Control | ||
475 | 0x00002, // Swamp Teal Underwater 1 | ||
476 | 0x00004, // Swamp Teal Underwater 2 | ||
477 | 0x00005, // Swamp Teal Underwater 3 | ||
478 | 0x013E6, // Swamp Teal Underwater 4 | ||
479 | 0x00596, // Swamp Teal Underwater 5 | ||
480 | 0x00001, // Swamp Red Underwater 1 | ||
481 | 0x014D2, // Swamp Red Underwater 2 | ||
482 | 0x014D4, // Swamp Red Underwater 3 | ||
483 | 0x014D1, // Swamp Red Underwater 4 | ||
484 | // 0x17C0A, // Swamp Island Control 1 | ||
485 | // 0x17E07, // Swamp Island Control 2 | ||
486 | 0x17C05, // Swamp Laser Shortcut 1 | ||
487 | 0x17C02, // Swamp Laser Shortcut 2 | ||
488 | }; | ||
489 | |||
490 | std::vector<int> mountainPanels = { | ||
491 | // 0x09E39, // Mountain 1 Purple Pathway | ||
492 | 0x09E73, // Mountain 1 Orange 1 | ||
493 | 0x09E75, // Mountain 1 Orange 2 | ||
494 | 0x09E78, // Mountain 1 Orange 3 | ||
495 | 0x09E79, // Mountain 1 Orange 4 | ||
496 | 0x09E6C, // Mountain 1 Orange 5 | ||
497 | 0x09E6F, // Mountain 1 Orange 6 | ||
498 | 0x09E6B, // Mountain 1 Orange 7 | ||
499 | // 0x33AF5, // Mountain 1 Blue 1 | ||
500 | // 0x33AF7, // Mountain 1 Blue 2 | ||
501 | // 0x09F6E, // Mountain 1 Blue 3 | ||
502 | 0x09EAD, // Mountain 1 Purple 1 | ||
503 | 0x09EAF, // Mountain 1 Purple 2 | ||
504 | 0x09E7A, // Mountain 1 Green 1 | ||
505 | 0x09E71, // Mountain 1 Green 2 | ||
506 | 0x09E72, // Mountain 1 Green 3 | ||
507 | 0x09E69, // Mountain 1 Green 4 | ||
508 | 0x09E7B, // Mountain 1 Green 5 | ||
509 | 0x09FD3, // Mountain 2 Rainbow 1 | ||
510 | 0x09FD4, // Mountain 2 Rainbow 2 | ||
511 | 0x09FD6, // Mountain 2 Rainbow 3 | ||
512 | 0x09FD7, // Mountain 2 Rainbow 4 | ||
513 | // 0x09FD8, // Mountain 2 Rainbow 5 | ||
514 | // 0x09E86, // Mountain 2 Blue Pathway | ||
515 | // 0x09ED8, // Mountain 2 Orange Pathway | ||
516 | // 0x09EEB, // Mountain 2 Elevator | ||
517 | 0x17F93, // Mountain 2 Discard | ||
518 | 0x09F8E, // Mountain 3 Near Right Floor | ||
519 | 0x09FC1, // Mountain 3 Near Left Floor | ||
520 | 0x09F01, // Mountain 3 Far Right Floor | ||
521 | 0x09EFF, // Mountain 3 Far Left Floor | ||
522 | 0x09FDA, // Mountain 3 Giant Floor | ||
523 | 0x17FA2, // Mountain 3 Secret Door | ||
524 | // 0x01983, // Mountain 3 Left Peekaboo | ||
525 | // 0x01987, // Mountain 3 Right Peekaboo | ||
526 | // 0x3D9A6, // Mountain 3 Left Close Door | ||
527 | // 0x3D9A7, // Mountain 3 Right Close Door | ||
528 | // 0x3D9AA, // Mountain 3 Left Activate Elevator | ||
529 | // 0x3D9A8, // Mountain 3 Right Activate Elevator | ||
530 | // 0x3D9A9, // Mountain 3 Launch Elevator | ||
531 | // 0x3C113, // Mountain 3 Left Open Door | ||
532 | // 0x3C114, // Mountain 3 Right Open Door | ||
533 | 0x17C42, // Mountainside Discard | ||
534 | 0x002A6, // Mountainside Vault | ||
535 | // 0x03542, // Mountainside Vault Box | ||
536 | // 0x09F7F, // Mountaintop Laser Box | ||
537 | // 0x17C34, // Mountaintop Perspective | ||
538 | // 0x0042D, // Mountaintop River | ||
539 | }; | ||
540 | |||
541 | std::vector<int> pillars = { | ||
542 | 0x0383D, // Mountain 3 Left Pillar 1 | ||
543 | 0x0383F, // Mountain 3 Left Pillar 2 | ||
544 | 0x03859, // Mountain 3 Left Pillar 3 | ||
545 | 0x339BB, // Mountain 3 Left Pillar 4 | ||
546 | 0x0383A, // Mountain 3 Right Pillar 1 | ||
547 | 0x09E56, // Mountain 3 Right Pillar 2 | ||
548 | 0x09E5A, // Mountain 3 Right Pillar 3 | ||
549 | 0x33961, // Mountain 3 Right Pillar 4 | ||
550 | 0x09DD5, // UTM Challenge Pillar | ||
551 | }; | ||
552 | |||
553 | std::vector<int> mountainMultipanel = { | ||
554 | 0x09FCC, // Mountain 2 Multipanel 1 | ||
555 | 0x09FCE, // Mountain 2 Multipanel 2 | ||
556 | 0x09FCF, // Mountain 2 Multipanel 3 | ||
557 | 0x09FD0, // Mountain 2 Multipanel 4 | ||
558 | 0x09FD1, // Mountain 2 Multipanel 5 | ||
559 | 0x09FD2, // Mountain 2 Multipanel 6 | ||
560 | }; | ||
561 | |||
562 | std::vector<int> utmPanels = { // this looks like it swaps ok but crashes to much to tell, not sure why it's not happy | ||
563 | // 0x0A16E, // UTM Challenge Entrance | ||
564 | // 0x00FF8, // UTM Entrance Door | ||
565 | // 0x0A16B, // UTM Green Dots 1 | ||
566 | // 0x0A2CE, // UTM Green Dots 2 | ||
567 | // 0x0A2D7, // UTM Green Dots 3 | ||
568 | // 0x0A2DD, // UTM Green Dots 4 | ||
569 | // 0x0A2EA, // UTM Green Dots 5 | ||
570 | // 0x17FB9, // UTM Green Dots 6 | ||
571 | // 0x335AB, // UTM In Elevator Control | ||
572 | // 0x0008F, // UTM Invisible Dots 1 | ||
573 | // 0x0006B, // UTM Invisible Dots 2 | ||
574 | // 0x0008B, // UTM Invisible Dots 3 | ||
575 | // 0x0008C, // UTM Invisible Dots 4 | ||
576 | // 0x0008A, // UTM Invisible Dots 5 | ||
577 | // 0x00089, // UTM Invisible Dots 6 | ||
578 | // 0x0006A, // UTM Invisible Dots 7 | ||
579 | // 0x0006C, // UTM Invisible Dots 8 | ||
580 | // 0x00027, // UTM Invisible Dots Symmetry 1 | ||
581 | // 0x00028, // UTM Invisible Dots Symmetry 2 | ||
582 | // 0x00029, // UTM Invisible Dots Symmetry 3 | ||
583 | // 0x3369D, // UTM Lower Elevator Control | ||
584 | // 0x021D7, // UTM Mountainside Shortcut | ||
585 | // // 0x288EA, // UTM Perspective 1 | ||
586 | // // 0x288FC, // UTM Perspective 2 | ||
587 | // // 0x289E7, // UTM Perspective 3 | ||
588 | // // 0x288AA, // UTM Perspective 4 | ||
589 | // 0x00B71, // UTM Quarry | ||
590 | // 0x01A31, // UTM Rainbow | ||
591 | // // 0x334E1, // UTM Secret Door Control | ||
592 | // 0x32962, // UTM Swamp | ||
593 | // 0x32966, // UTM Treehouse | ||
594 | // 0x335AC, // UTM Upper Elevator Control | ||
595 | // 0x17CF2, // UTM Waterfall Shortcut | ||
596 | // 0x00A72, // UTM Blue Cave In | ||
597 | // 0x009A4, // UTM Blue Discontinuous | ||
598 | // 0x018A0, // UTM Blue Easy Symmetry | ||
599 | // 0x01A0D, // UTM Blue Hard Symmetry | ||
600 | // 0x008B8, // UTM Blue Left 1 | ||
601 | // 0x00973, // UTM Blue Left 2 | ||
602 | // 0x0097B, // UTM Blue Left 3 | ||
603 | // 0x0097D, // UTM Blue Left 4 | ||
604 | // 0x0097E, // UTM Blue Left 5 | ||
605 | // 0x00994, // UTM Blue Right Far 1 | ||
606 | // 0x334D5, // UTM Blue Right Far 2 | ||
607 | // 0x00995, // UTM Blue Right Far 3 | ||
608 | // 0x00996, // UTM Blue Right Far 4 | ||
609 | // 0x00998, // UTM Blue Right Far 5 | ||
610 | // 0x00190, // UTM Blue Right Near 1 | ||
611 | // 0x00558, // UTM Blue Right Near 2 | ||
612 | // 0x00567, // UTM Blue Right Near 3 | ||
613 | // 0x006FE, // UTM Blue Right Near 4 | ||
614 | // // 0x2773D, // Tunnels Desert Shortcut | ||
615 | // 0x039B4, // Tunnels Theater Catwalk | ||
616 | // // 0x27732, // Tunnels Theater Shortcut | ||
617 | // // 0x2FAF6, // Tunnels Vault Box | ||
618 | // 0x09E85, // Tunnels Town Shortcut | ||
619 | }; \ No newline at end of file | ||
diff --git a/WitnessRandomizer/WitnessRandomizer.cpp b/WitnessRandomizer/WitnessRandomizer.cpp index 9178888..4b91dac 100644 --- a/WitnessRandomizer/WitnessRandomizer.cpp +++ b/WitnessRandomizer/WitnessRandomizer.cpp | |||
@@ -1,14 +1,23 @@ | |||
1 | /* | 1 | /* |
2 | * BUGS: | 2 | * BUGS: |
3 | * Something is wrong with bunker | 3 | * Something is wrong with bunker |
4 | * Shipwreck vault does not copy well | ||
5 | * Pillars can be swapped but they don't zoom you out enough. Maybe SWAP_DISTANCE? | ||
4 | * FEATURES: | 6 | * FEATURES: |
7 | * SWAP_TARGETS should still require the full panel sequence (and have ways to prevent softlocks?) | ||
5 | * Randomize audio logs | 8 | * Randomize audio logs |
6 | * Compile panel lists in a more reasonable way | ||
7 | * Separate panels out by "square", which can probably be anywhere | 9 | * Separate panels out by "square", which can probably be anywhere |
8 | * List of panels which can be valid "Burn" (aka desert) substitutes: Prevent (or limit) panel counting | 10 | * List of panels which can be valid "Burn" (aka desert) substitutes: Prevent (or limit) panel counting |
11 | * List of panels which split left/right (for left/right controls) | ||
12 | * List of panels which split up/down (for up/down controls) | ||
13 | * Swap sounds in jungle (along with panels) -- maybe impossible | ||
14 | * Make orange 7 (all of oranges?) hard. Like big = hard. | ||
15 | * TRY: | ||
16 | * Swap treehouse pivots | ||
9 | */ | 17 | */ |
10 | #include "Memory.h" | 18 | #include "Memory.h" |
11 | #include "WitnessRandomizer.h" | 19 | #include "WitnessRandomizer.h" |
20 | #include "Panels.h" | ||
12 | #include <string> | 21 | #include <string> |
13 | #include <iostream> | 22 | #include <iostream> |
14 | 23 | ||
@@ -16,657 +25,42 @@ int main(int argc, char** argv) | |||
16 | { | 25 | { |
17 | WitnessRandomizer randomizer = WitnessRandomizer(); | 26 | WitnessRandomizer randomizer = WitnessRandomizer(); |
18 | 27 | ||
19 | //* | ||
20 | |||
21 | std::vector<int> lasers = { | ||
22 | 0x0360D, // Symmetry | ||
23 | 0x03615, // Swamp | ||
24 | 0x09DE0, // Bunker | ||
25 | 0x17CA4, // Monastery | ||
26 | 0x032F5, // Town | ||
27 | 0x03613, // Treehouse | ||
28 | // 0x03608, // Desert | ||
29 | 0x03612, // Quarry | ||
30 | 0x03616, // Jungle | ||
31 | }; | ||
32 | randomizer.Randomize(lasers, SWAP_TARGETS); | ||
33 | |||
34 | |||
35 | if (argc == 2) { | 28 | if (argc == 2) { |
36 | srand(atoi(argv[1])); // Seed with RNG from command line | 29 | srand(atoi(argv[1])); // Seed with RNG from command line |
37 | } | 30 | } |
38 | 31 | ||
39 | std::vector<int> tutorialPanels = { | 32 | // randomizer.Randomize(bunkerPanels, SWAP_LINES | SWAP_COLORS); |
40 | // 0x0A3B5, // Back Left | 33 | //* |
41 | 0x0A3B2, // Back Right | 34 | randomizer.Randomize(lasers, SWAP_TARGETS); |
42 | 0x00295, // Center Left | 35 | randomizer.Randomize(tutorialPanels, SWAP_TARGETS); |
43 | 0x00293, // Front Center | 36 | randomizer.Randomize(monasteryPanels, SWAP_TARGETS); |
44 | 0x002C2, // Front Left | 37 | randomizer.Randomize(shadowsPanels, SWAP_TARGETS); |
45 | 0x0C335, // Pillar | ||
46 | 0x0C373, // Patio floor | ||
47 | }; | ||
48 | |||
49 | randomizer.Randomize(tutorialPanels, SWAP_TARGETS); | ||
50 | |||
51 | std::vector<int> outsidetutorialPanels = { | ||
52 | 0x0005D, //Outside Tutorial Dots Tutorial 1 | ||
53 | 0x0005E, //Outside Tutorial Dots Tutorial 2 | ||
54 | 0x0005F, //Outside Tutorial Dots Tutorial 3 | ||
55 | 0x00060, //Outside Tutorial Dots Tutorial 4 | ||
56 | 0x00061, //Outside Tutorial Dots Tutorial 5 | ||
57 | 0x018AF, //Outside Tutorial Stones Tutorial 1 | ||
58 | 0x0001B, //Outside Tutorial Stones Tutorial 2 | ||
59 | 0x012C9, //Outside Tutorial Stones Tutorial 3 | ||
60 | 0x0001C, //Outside Tutorial Stones Tutorial 4 | ||
61 | 0x0001D, //Outside Tutorial Stones Tutorial 5 | ||
62 | 0x0001E, //Outside Tutorial Stones Tutorial 6 | ||
63 | 0x0001F, //Outside Tutorial Stones Tutorial 7 | ||
64 | 0x00020, //Outside Tutorial Stones Tutorial 8 | ||
65 | 0x00021, //Outside Tutorial Stones Tutorial 9 | ||
66 | 0x033D4, //Outside Tutorial Vault | ||
67 | // 0x03481, //Outside Tutorial Vault Box | ||
68 | 0x0A171, //Tutorial Optional Door 1 | ||
69 | 0x04CA4, //Tutorial Optional Door 2 | ||
70 | 0x17CFB, //Outside Tutorial Discard | ||
71 | // 0x00143. //Orchard Apple Tree 1 | ||
72 | // 0x0003B. //Orchard Apple Tree 2 | ||
73 | // 0x00055. //Orchard Apple Tree 3 | ||
74 | // 0x032F7. //Orchard Apple Tree 4 | ||
75 | // 0x032FF. //Orchard Apple Tree 5 | ||
76 | }; | ||
77 | randomizer.Randomize(outsidetutorialPanels, SWAP_LINES | SWAP_COLORS); | ||
78 | |||
79 | |||
80 | std::vector<int> symmetryPanels = { | ||
81 | // 0x3C12B, // Glass Factory Discard | ||
82 | 0x01A54, // Glass Factory Entry | ||
83 | 0x00086, // Glass Factory Vertical Symmetry 1 | ||
84 | 0x00087, // Glass Factory Vertical Symmetry 2 | ||
85 | 0x00059, // Glass Factory Vertical Symmetry 3 | ||
86 | 0x00062, // Glass Factory Vertical Symmetry 4 | ||
87 | 0x0005C, // Glass Factory Vertical Symmetry 5 | ||
88 | // 0x17CC8, // Glass Factory Summon Boat | ||
89 | 0x0008D, // Glass Factory Rotational Symmetry 1 | ||
90 | 0x00081, // Glass Factory Rotational Symmetry 2 | ||
91 | 0x00083, // Glass Factory Rotational Symmetry 3 | ||
92 | 0x00084, // Glass Factory Melting 1 | ||
93 | 0x00082, // Glass Factory Melting 2 | ||
94 | 0x0343A, // Glass Factory Melting 3 | ||
95 | |||
96 | 0x000B0, // Symmetry Island Door 1 | ||
97 | 0x00022, // Symmetry Island Black Dots 1 | ||
98 | 0x00023, // Symmetry Island Black Dots 2 | ||
99 | 0x00024, // Symmetry Island Black Dots 3 | ||
100 | 0x00025, // Symmetry Island Black Dots 4 | ||
101 | 0x00026, // Symmetry Island Black Dots 5 | ||
102 | 0x0007C, // Symmetry Island Colored Dots 1 | ||
103 | 0x0007E, // Symmetry Island Colored Dots 2 | ||
104 | 0x00075, // Symmetry Island Colored Dots 3 | ||
105 | 0x00073, // Symmetry Island Colored Dots 4 | ||
106 | 0x00077, // Symmetry Island Colored Dots 5 | ||
107 | 0x00079, // Symmetry Island Colored Dots 6 | ||
108 | 0x00065, // Symmetry Island Fading Lines 1 | ||
109 | 0x0006D, // Symmetry Island Fading Lines 2 | ||
110 | 0x00072, // Symmetry Island Fading Lines 3 | ||
111 | 0x0006F, // Symmetry Island Fading Lines 4 | ||
112 | 0x00070, // Symmetry Island Fading Lines 5 | ||
113 | 0x00071, // Symmetry Island Fading Lines 6 | ||
114 | 0x00076, // Symmetry Island Fading Lines 7 | ||
115 | // 0x009B8, // Symmetry Island Transparent 1 // Too mean for right now | ||
116 | // 0x003E8, // Symmetry Island Transparent 2 // Too mean for right now | ||
117 | // 0x00A15, // Symmetry Island Transparent 3 // Too mean for right now | ||
118 | // 0x00B53, // Symmetry Island Transparent 4 // Too mean for right now | ||
119 | // 0x00B8D, // Symmetry Island Transparent 5 // Too mean for right now | ||
120 | // 0x1C349, // Symmetry Island Door 2 - Collision fails here, sadly | ||
121 | 0x00A52, // Symmetry Island Laser Yellow 1 | ||
122 | 0x00A57, // Symmetry Island Laser Yellow 2 | ||
123 | 0x00A5B, // Symmetry Island Laser Yellow 3 | ||
124 | 0x00A61, // Symmetry Island Laser Blue 1 | ||
125 | 0x00A64, // Symmetry Island Laser Blue 2 | ||
126 | 0x00A68, // Symmetry Island Laser Blue 3 | ||
127 | }; | ||
128 | randomizer.Randomize(symmetryPanels, SWAP_LINES | SWAP_COLORS); | ||
129 | |||
130 | |||
131 | |||
132 | std::vector<int> desertPanels = { | ||
133 | // 0x17CE7, // Desert Discard | ||
134 | // 0x0CC7B, // Desert Vault | ||
135 | // 0x0339E, // Desert Vault Box | ||
136 | 0x00698, // Desert Surface 1 | ||
137 | 0x0048F, // Desert Surface 2 | ||
138 | 0x09F92, // Desert Surface 3 | ||
139 | // 0x09FA0, // Desert Surface 3 Control | ||
140 | 0x0A036, // Desert Surface 4 | ||
141 | 0x09DA6, // Desert Surface 5 | ||
142 | 0x0A049, // Desert Surface 6 | ||
143 | 0x0A053, // Desert Surface 7 | ||
144 | 0x09F94, // Desert Surface 8 | ||
145 | // 0x09F86, // Desert Surface 8 Control | ||
146 | // 0x0C339, // Desert Surface Door | ||
147 | // 0x09FAA, // Desert Lightswitch | ||
148 | 0x00422, // Desert Light 1 | ||
149 | 0x006E3, // Desert Light 2 | ||
150 | // 0x0A02D, // Desert Light 3 | ||
151 | 0x00C72, // Desert Pond 1 | ||
152 | 0x0129D, // Desert Pond 2 | ||
153 | 0x008BB, // Desert Pond 3 | ||
154 | 0x0078D, // Desert Pond 4 | ||
155 | 0x18313, // Desert Pond 5 | ||
156 | // 0x0A249, // Desert Pond Exit Door | ||
157 | // 0x1C2DF, // Desert Flood Control Lower Far Left | ||
158 | // 0x1831E, // Desert Flood Control Lower Far Right | ||
159 | // 0x1C260, // Desert Flood Control Lower Near Left | ||
160 | // 0x1831C, // Desert Flood Control Lower Near Right | ||
161 | // 0x1C2F3, // Desert Flood Control Raise Far Left | ||
162 | // 0x1831D, // Desert Flood Control Raise Far Right | ||
163 | // 0x1C2B1, // Desert Flood Control Raise Near Left | ||
164 | // 0x1831B, // Desert Flood Control Raise Near Right | ||
165 | 0x04D18, // Desert Flood 1 | ||
166 | 0x01205, // Desert Flood 2 | ||
167 | 0x181AB, // Desert Flood 3 | ||
168 | 0x0117A, // Desert Flood 4 | ||
169 | 0x17ECA, // Desert Flood 5 | ||
170 | // 0x18076, // Desert Flood Exit | ||
171 | // 0x0A15C, // Desert Final Left Convex | ||
172 | // 0x09FFF, // Desert Final Left Concave | ||
173 | // 0x0A15F, // Desert Final Near | ||
174 | // 0x17C31, // Desert Final Transparent | ||
175 | 0x012D7, // Desert Final Far | ||
176 | // 0x0A015, // Desert Final Far Control | ||
177 | }; | ||
178 | |||
179 | randomizer.Randomize(desertPanels, SWAP_LINES); | ||
180 | |||
181 | std::vector<int> quarryPanels = { | ||
182 | 0x01E5A, // Mill Entry Door Left | ||
183 | 0x01E59, // Mill Entry Door Right | ||
184 | // 0x03678, // Mill Lower Ramp Contol | ||
185 | 0x00E0C, // Mill Lower Row 1 | ||
186 | 0x01489, // Mill Lower Row 2 | ||
187 | 0x0148A, // Mill Lower Row 3 | ||
188 | 0x014D9, // Mill Lower Row 4 | ||
189 | 0x014E7, // Mill Lower Row 5 | ||
190 | 0x014E8, // Mill Lower Row 6 | ||
191 | // 0x03679, // Mill Lower Lift Control | ||
192 | 0x00557, // Mill Upper Row 1 | ||
193 | 0x005F1, // Mill Upper Row 2 | ||
194 | 0x00620, // Mill Upper Row 3 | ||
195 | 0x009F5, // Mill Upper Row 4 | ||
196 | 0x0146C, // Mill Upper Row 5 | ||
197 | 0x3C12D, // Mill Upper Row 6 | ||
198 | 0x03686, // Mill Upper Row 7 | ||
199 | 0x014E9, // Mill Upper Row 8 | ||
200 | 0x0367C, // Mill Control Room 1 | ||
201 | // 0x03675, // Mill Upper Lift Control | ||
202 | // 0x03676, // Mill Upper Ramp Control | ||
203 | 0x3C125, // Mill Control Room 2 | ||
204 | // 0x275ED, // Mill EP Door | ||
205 | // 0x17CAC, // Mill Stairs Shortcut Door | ||
206 | 0x03677, // Mill Stairs Control | ||
207 | // 0x17CF0, // Mill Discard | ||
208 | // 0x17CC4, // Mill Elevator Control | ||
209 | 0x021D5, // Boathouse Ramp Activation Shapers | ||
210 | 0x034D4, // Boathouse Ramp Activation Stars | ||
211 | // 0x03852, // Boathouse Ramp Angle Control | ||
212 | 0x021B3, // Boathouse Erasers and Shapers 1 | ||
213 | 0x021B4, // Boathouse Erasers and Shapers 2 | ||
214 | 0x021B0, // Boathouse Erasers and Shapers 3 | ||
215 | 0x021AF, // Boathouse Erasers and Shapers 4 | ||
216 | 0x021AE, // Boathouse Erasers and Shapers 5 | ||
217 | // 0x17CA6, // Boathouse Summon Boat | ||
218 | // 0x03858, // Boathouse Ramp Position Control | ||
219 | // 0x38663, // Boathouse Shortcut | ||
220 | 0x021B5, // Boathouse Erasers and Stars 1 | ||
221 | 0x021B6, // Boathouse Erasers and Stars 2 | ||
222 | 0x021B7, // Boathouse Erasers and Stars 3 | ||
223 | 0x021BB, // Boathouse Erasers and Stars 4 | ||
224 | 0x09DB5, // Boathouse Erasers and Stars 5 | ||
225 | 0x09DB1, // Boathouse Erasers and Stars 6 | ||
226 | 0x3C124, // Boathouse Erasers and Stars 7 | ||
227 | 0x09DB3, // Boathouse Erasers Shapers and Stars 1 | ||
228 | 0x09DB4, // Boathouse Erasers Shapers and Stars 2 | ||
229 | 0x0A3CB, // Boathouse Erasers Shapers and Stars 3 | ||
230 | 0x0A3CC, // Boathouse Erasers Shapers and Stars 4 | ||
231 | 0x0A3D0, // Boathouse Erasers Shapers and Stars 5 | ||
232 | // 0x275FA, // Boathouse Hook Control | ||
233 | 0x09E57, // Quarry Entry Gate 1 | ||
234 | 0x17C09, // Quarry Entry Gate 2 | ||
235 | }; | ||
236 | randomizer.Randomize(quarryPanels, SWAP_LINES | SWAP_COLORS); | ||
237 | |||
238 | std::vector<int> 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 | ||
239 | // 0x17C95, // Treehouse Summon Boat | ||
240 | 0x0288C, // Treehouse Door 1 | ||
241 | 0x02886, // Treehouse Door 2 | ||
242 | 0x17D72, // Treehouse Yellow 1 | ||
243 | 0x17D8F, // Treehouse Yellow 2 | ||
244 | 0x17D74, // Treehouse Yellow 3 | ||
245 | 0x17DAC, // Treehouse Yellow 4 | ||
246 | 0x17D9E, // Treehouse Yellow 5 | ||
247 | 0x17DB9, // Treehouse Yellow 6 | ||
248 | 0x17D9C, // Treehouse Yellow 7 | ||
249 | 0x17DC2, // Treehouse Yellow 8 | ||
250 | 0x17DC4, // Treehouse Yellow 9 | ||
251 | 0x0A182, // Treehouse Door 3 | ||
252 | 0x17DC8, // Treehouse First Purple 1 | ||
253 | 0x17DC7, // Treehouse First Purple 2 | ||
254 | 0x17CE4, // Treehouse First Purple 3 | ||
255 | 0x17D2D, // Treehouse First Purple 4 | ||
256 | 0x17D6C, // Treehouse First Purple 5 | ||
257 | 0x17D9B, // Treehouse Second Purple 1 | ||
258 | 0x17D99, // Treehouse Second Purple 2 | ||
259 | 0x17DAA, // Treehouse Second Purple 3 | ||
260 | 0x17D97, // Treehouse Second Purple 4 | ||
261 | 0x17BDF, // Treehouse Second Purple 5 | ||
262 | 0x17D91, // Treehouse Second Purple 6 | ||
263 | 0x17DC6, // Treehouse Second Purple 7 | ||
264 | 0x17DB3, // Treehouse Left Orange 1 | ||
265 | 0x17DB5, // Treehouse Left Orange 2 | ||
266 | 0x17DB6, // Treehouse Left Orange 3 | ||
267 | 0x17DC0, // Treehouse Left Orange 4 | ||
268 | 0x17DD7, // Treehouse Left Orange 5 | ||
269 | 0x17DD9, // Treehouse Left Orange 6 | ||
270 | 0x17DB8, // Treehouse Left Orange 7 | ||
271 | 0x17DDC, // Treehouse Left Orange 8 | ||
272 | // 0x17DD1, // Treehouse Left Orange 9 has to pivot | ||
273 | 0x17DDE, // Treehouse Left Orange 10 | ||
274 | 0x17DE3, // Treehouse Left Orange 11 | ||
275 | 0x17DEC, // Treehouse Left Orange 12 | ||
276 | 0x17DAE, // Treehouse Left Orange 13 | ||
277 | 0x17DB0, // Treehouse Left Orange 14 | ||
278 | 0x17DDB, // Treehouse Left Orange 15 | ||
279 | 0x17D88, // Treehouse Right Orange 1 | ||
280 | 0x17DB4, // Treehouse Right Orange 2 | ||
281 | 0x17D8C, // Treehouse Right Orange 3 | ||
282 | 0x17CE3, // Treehouse Right Orange 4 | ||
283 | // 0x17DCD, // Treehouse Right Orange 5 has to pivot | ||
284 | 0x17DB2, // Treehouse Right Orange 6 | ||
285 | 0x17DCC, // Treehouse Right Orange 7 | ||
286 | 0x17DCA, // Treehouse Right Orange 8 | ||
287 | 0x17D8E, // Treehouse Right Orange 9 | ||
288 | // 0x17DB7, // Treehouse Right Orange 10 has to pivot | ||
289 | 0x17DB1, // Treehouse Right Orange 11 | ||
290 | 0x17DA2, // Treehouse Right Orange 12 | ||
291 | 0x17E3C, // Treehouse Green 1 | ||
292 | 0x17E4D, // Treehouse Green 2 | ||
293 | 0x17E4F, // Treehouse Green 3 | ||
294 | 0x17E52, // Treehouse Green 4 | ||
295 | 0x17E5B, // Treehouse Green 5 | ||
296 | 0x17E5F, // Treehouse Green 6 | ||
297 | 0x17E61, // Treehouse Green 7 | ||
298 | 0x17FA9, // Treehouse Green Bridge Discard | ||
299 | 0x17FA0, // Treehouse Laser Discard | ||
300 | // 0x2700B, // Treehouse Exterior Door Control | ||
301 | // 0x17CBC, // Treehouse Interior Door Control | ||
302 | // 0x037FF, // Treehouse Drawbridge Control | ||
303 | }; | ||
304 | randomizer.Randomize(treehousePanels, SWAP_LINES | SWAP_COLORS); | ||
305 | |||
306 | std::vector<int> keepPanels = { | ||
307 | 0x00139, // Keep Hedges 1 | ||
308 | 0x019DC, // Keep Hedges 2 | ||
309 | 0x019E7, // Keep Hedges 3 | ||
310 | 0x01A0F, // Keep Hedges 4 | ||
311 | // 0x033EA, // Keep Yellow Pressure Plates | ||
312 | // 0x0A3A8, // Keep Yellow Reset | ||
313 | // 0x01BE9, // Keep Purple Pressure Plates | ||
314 | // 0x0A3B9, // Keep Purple Reset | ||
315 | // 0x01CD3, // Keep Green Pressure Plates | ||
316 | // 0x0A3BB, // Keep Green Reset | ||
317 | // 0x01D3F, // Keep Blue Pressure Plates | ||
318 | // 0x0A3AD, // Keep Blue Reset | ||
319 | 0x0360E, // Keep Front Laser | ||
320 | 0x03317, // Keep Back Laser | ||
321 | // 0x09E49, // Keep Shadows Shortcut | ||
322 | // 0x0361B, // Keep Tower Shortcut | ||
323 | 0x17D27, // Keep Discard | ||
324 | 0x17D28, // Shipwreck Discard | ||
325 | 0x00AFB, // Shipwreck Vault | ||
326 | // 0x03535, // Shipwreck Vault Box | ||
327 | }; | ||
328 | randomizer.Randomize(keepPanels, SWAP_LINES | SWAP_COLORS); | ||
329 | |||
330 | std::vector<int> shadowsPanels = { //works beautifully, can solve based on panel color and where start/end points are if your memory is good | ||
331 | 0x386FA, //Shadows Avoid 1 | ||
332 | 0x1C33F, //Shadows Avoid 2 | ||
333 | 0x196E2, //Shadows Avoid 3 | ||
334 | 0x1972A, //Shadows Avoid 4 | ||
335 | 0x19809, //Shadows Avoid 5 | ||
336 | 0x19806, //Shadows Avoid 6 | ||
337 | 0x196F8, //Shadows Avoid 7 | ||
338 | 0x1972F, //Shadows Avoid 8 | ||
339 | 0x19797, //Shadows Follow 1 | ||
340 | 0x1979A, //Shadows Follow 2 | ||
341 | 0x197E0, //Shadows Follow 3 | ||
342 | 0x197E8, //Shadows Follow 4 | ||
343 | 0x197E5, //Shadows Follow 5 | ||
344 | // 0x334DC, //Shadows Inner Door Control | ||
345 | 0x19650, //Shadows Laser | ||
346 | // 0x334DB, //Shadows Outer Door Control | ||
347 | 0x198B5, //Shadows Tutorial 1 | ||
348 | 0x198BD, //Shadows Tutorial 2 | ||
349 | 0x198BF, //Shadows Tutorial 3 | ||
350 | 0x19771, //Shadows Tutorial 4 | ||
351 | 0x0A8DC, //Shadows Tutorial 5 | ||
352 | 0x0AC74, //Shadows Tutorial 6 | ||
353 | 0x0AC7A, //Shadows Tutorial 7 | ||
354 | 0x0A8E0, //Shadows Tutorial 8 | ||
355 | }; | ||
356 | randomizer.Randomize(shadowsPanels, SWAP_LINES | SWAP_COLORS); | ||
357 | |||
358 | std::vector<int> townPanels = { //appears to be ok but keeps crashing game? | ||
359 | 0x2899C, //Town 25 Dots 1 | ||
360 | 0x28A33, //Town 25 Dots 2 | ||
361 | 0x28ABF, //Town 25 Dots 3 | ||
362 | 0x28AC0, //Town 25 Dots 4 | ||
363 | 0x28AC1, //Town 25 Dots 5 | ||
364 | 0x28938, //Town Apple Tree | ||
365 | 0x28AC7, //Town Blue 1 | ||
366 | 0x28AC8, //Town Blue 2 | ||
367 | 0x28ACA, //Town Blue 3 | ||
368 | 0x28ACB, //Town Blue 4 | ||
369 | 0x28ACC, //Town Blue 5 | ||
370 | // 0x0A054, //Town Summon Boat | ||
371 | // 0x2896A, //Town Bridge | ||
372 | 0x28A0D, //Town Church Stars | ||
373 | 0x28AD9, //Town Eraser | ||
374 | 0x28998, //Town Green Door | ||
375 | // 0x09F98, //Town Laser Redirect Control | ||
376 | // 0x1C344, //Town Laser Redirect Panel 1 | ||
377 | // 0x1C343, //Town Laser Redirect Panel 2 | ||
378 | // 0x28A69, //Town Lattice | ||
379 | 0x28A79, //Town Maze | ||
380 | 0x0A0C8, //Town Orange Crate | ||
381 | 0x17D01, //Town Orange Crate Discard | ||
382 | // 0x28B39, //Town Red Hexagonal | ||
383 | // 0x334D8, //Town RGB Light Control | ||
384 | 0x03C08, //Town RGB Stars | ||
385 | 0x03C0C, //Town RGB Stones | ||
386 | 0x17C71, //Town Rooftop Discard | ||
387 | // 0x034E3, //Town Soundproof Dots panels in their locations must match so can't swap unless that is fixed | ||
388 | // 0x034E4, //Town Soundproof Waves | ||
389 | 0x18590, //Town Transparent | ||
390 | // 0x079DF, //Town Triple | ||
391 | 0x17D02, //Town Windmill Control | ||
392 | 0x17F5F, //Town Windmill Door | ||
393 | 0x28AE3, //Town Wire | ||
394 | 0x17F89, //Theater Entrance | ||
395 | // 0x00815, //Theater Video Input | ||
396 | // 0x03553, //Theater Tutorial Video | ||
397 | // 0x03552, //Theater Desert Video | ||
398 | // 0x0354E, //Theater Jungle Video | ||
399 | // 0x03549, //Theater Challenge Video | ||
400 | // 0x0354F, //Theater Shipwreck Video | ||
401 | // 0x03545, //Theater Mountain Video | ||
402 | 0x17CF7, //Theater Discard | ||
403 | 0x33AB2, //Theater Corona Exit | ||
404 | 0x0A168, //Theater Sun Exit | ||
405 | }; | ||
406 | randomizer.Randomize(townPanels, SWAP_LINES | SWAP_COLORS); | ||
407 | |||
408 | std::vector<int> monasteryPanels = { | ||
409 | // 0x00B10, //Monastery Left Door | ||
410 | // 0x00C92, //Monastery Right Door | ||
411 | 0x00290, //Monastery Exterior 1 | ||
412 | 0x00038, //Monastery Exterior 2 | ||
413 | 0x00037, //Monastery Exterior 3 | ||
414 | // 0x09D9B, //Monastery Bonsai | ||
415 | 0x193A7, //Monastery Interior 1 | ||
416 | 0x193AA, //Monastery Interior 2 | ||
417 | 0x193AB, //Monastery Interior 3 | ||
418 | 0x193A6, //Monastery Interior 4 | ||
419 | 0x03713, //Monastery Shortcut | ||
420 | }; | ||
421 | randomizer.Randomize(monasteryPanels, SWAP_TARGETS); | ||
422 | |||
423 | std::vector<int> junglePanels = { | ||
424 | // 0x17CDF, //Jungle Summon Boat | ||
425 | 0x17F9B, //Jungle Discard | ||
426 | 0x002C4, //Jungle Waves 1 | ||
427 | 0x00767, //Jungle Waves 2 | ||
428 | 0x002C6, //Jungle Waves 3 | ||
429 | 0x0070E, //Jungle Waves 4 | ||
430 | 0x0070F, //Jungle Waves 5 | ||
431 | 0x0087D, //Jungle Waves 6 | ||
432 | 0x002C7, //Jungle Waves 7 | ||
433 | // 0x15ADD, //Jungle Vault | ||
434 | // 0x03702, //Jungle Vault Box | ||
435 | // 0x17CAA, //Jungle Courtyard Gate | ||
436 | 0x0026D, //Jungle Dots 1 | ||
437 | 0x0026E, //Jungle Dots 2 | ||
438 | 0x0026F, //Jungle Dots 3 | ||
439 | 0x00C3F, //Jungle Dots 4 | ||
440 | 0x00C41, //Jungle Dots 5 | ||
441 | 0x014B2, //Jungle Dots 6 | ||
442 | // 0x17CAB, //Jungle Pop - up Wall | ||
443 | // 0x337FA, //Jungle Shortcut | ||
444 | }; | ||
445 | randomizer.Randomize(junglePanels, SWAP_LINES | SWAP_COLORS); | ||
446 | |||
447 | // std::vector<int> bunkerPanels = { this doesn't want to behave, I have no idea | ||
448 | // 0x17C2E, //Bunker Entry Door | ||
449 | // 0x09F7D, //Bunker Tutorial 1 | ||
450 | // 0x09FDC, //Bunker Tutorial 2 | ||
451 | // 0x09FF7, //Bunker Tutorial 3 | ||
452 | // 0x09F82, //Bunker Tutorial 4 | ||
453 | // 0x09FF8, //Bunker Tutorial 5 | ||
454 | // 0x09D9F, //Bunker Advanced 1 | ||
455 | // 0x09DA1, //Bunker Advanced 2 | ||
456 | // 0x09DA2, //Bunker Advanced 3 | ||
457 | // 0x09DAF, //Bunker Advanced 4 | ||
458 | // // 0x0A099, //Bunker Glass Door | ||
459 | // // 0x0A010, //Bunker Glass 1 | ||
460 | // // 0x0A01B, //Bunker Glass 2 | ||
461 | // // 0x0A01F, //Bunker Glass 3 | ||
462 | // 0x34BC5, //Bunker Open Ultraviolet | ||
463 | // 0x34BC6, //Bunker Close Ultraviolet | ||
464 | // 0x17E63, //Bunker Ultraviolet 1 | ||
465 | // 0x17E67, //Bunker Ultraviolet 2 | ||
466 | // 0x0A079, //Bunker Elevator | ||
467 | // }; | ||
468 | // randomizer.Randomize(bunkerPanels, SWAP_LINES | SWAP_COLORS); | ||
469 | |||
470 | std::vector<int> swampPanels = { //appears to work ok swapping panels but keeps crashing game? | ||
471 | 0x0056E, //Swamp Entry | ||
472 | 0x00469, //Swamp Tutorial 1 | ||
473 | 0x00472, //Swamp Tutorial 2 | ||
474 | 0x00262, //Swamp Tutorial 3 | ||
475 | 0x00474, //Swamp Tutorial 4 | ||
476 | 0x00553, //Swamp Tutorial 5 | ||
477 | 0x0056F, //Swamp Tutorial 6 | ||
478 | 0x00390, //Swamp Tutorial 7 | ||
479 | 0x010CA, //Swamp Tutorial 8 | ||
480 | 0x00983, //Swamp Tutorial 9 | ||
481 | 0x00984, //Swamp Tutorial 10 | ||
482 | 0x00986, //Swamp Tutorial 11 | ||
483 | 0x00985, //Swamp Tutorial 12 | ||
484 | 0x00987, //Swamp Tutorial 13 | ||
485 | 0x181A9, //Swamp Tutorial 14 | ||
486 | // 0x00609, //Swamp Surface Sliding Bridge Control | ||
487 | 0x00982, //Swamp Red 1 | ||
488 | 0x0097F, //Swamp Red 2 | ||
489 | 0x0098F, //Swamp Red 3 | ||
490 | 0x00990, //Swamp Red 4 | ||
491 | 0x17C0D, //Swamp Red Shortcut 1 | ||
492 | 0x17C0E, //Swamp Red Shortcut 2 | ||
493 | 0x00999, //Swamp Discontinuous 1 | ||
494 | 0x0099D, //Swamp Discontinuous 2 | ||
495 | 0x009A0, //Swamp Discontinuous 3 | ||
496 | 0x009A1, //Swamp Discontinuous 4 | ||
497 | 0x00007, //Swamp Rotation Tutorial 1 | ||
498 | 0x00008, //Swamp Rotation Tutorial 2 | ||
499 | 0x00009, //Swamp Rotation Tutorial 3 | ||
500 | 0x0000A, //Swamp Rotation Tutorial 4 | ||
501 | 0x181F5, //Swamp Rotating Bridge Control | ||
502 | 0x009AB, //Swamp Blue Underwater 1 | ||
503 | 0x009AD, //Swamp Blue Underwater 2 | ||
504 | 0x009AE, //Swamp Blue Underwater 3 | ||
505 | 0x009AF, //Swamp Blue Underwater 4 | ||
506 | 0x00006, //Swamp Blue Underwater 5 | ||
507 | 0x003B2, //Swamp Rotation Advanced 1 | ||
508 | 0x00A1E, //Swamp Rotation Advanced 2 | ||
509 | 0x00C2E, //Swamp Rotation Advanced 3 | ||
510 | 0x00E3A, //Swamp Rotation Advanced 4 | ||
511 | // 0x17E2B, //Swamp Flood Gate Control | ||
512 | // 0x09DB8, //Swamp Summon Boat | ||
513 | 0x009A6, //Swamp Purple Tetris | ||
514 | // 0x18488, //Swamp Underwater Sliding Bridge Control | ||
515 | 0x00002, //Swamp Teal Underwater 1 | ||
516 | 0x00004, //Swamp Teal Underwater 2 | ||
517 | 0x00005, //Swamp Teal Underwater 3 | ||
518 | 0x013E6, //Swamp Teal Underwater 4 | ||
519 | 0x00596, //Swamp Teal Underwater 5 | ||
520 | 0x00001, //Swamp Red Underwater 1 | ||
521 | 0x014D2, //Swamp Red Underwater 2 | ||
522 | 0x014D4, //Swamp Red Underwater 3 | ||
523 | 0x014D1, //Swamp Red Underwater 4 | ||
524 | 0x17C0A, //Swamp Island Control 1 | ||
525 | 0x17E07, //Swamp Island Control 2 | ||
526 | 0x17C05, //Swamp Laser Shortcut 1 | ||
527 | 0x17C02, //Swamp Laser Shortcut 2 | ||
528 | }; | ||
529 | randomizer.Randomize(swampPanels, SWAP_LINES | SWAP_COLORS); | ||
530 | |||
531 | std::vector<int> mountainPanels = { | ||
532 | // 0x09E39, //Mountain 1 Purple Pathway | ||
533 | 0x09E73, //Mountain 1 Orange 1 | ||
534 | 0x09E75, //Mountain 1 Orange 2 | ||
535 | 0x09E78, //Mountain 1 Orange 3 | ||
536 | 0x09E79, //Mountain 1 Orange 4 | ||
537 | 0x09E6C, //Mountain 1 Orange 5 | ||
538 | 0x09E6F, //Mountain 1 Orange 6 | ||
539 | 0x09E6B, //Mountain 1 Orange 7 | ||
540 | // 0x33AF5, //Mountain 1 Blue 1 | ||
541 | // 0x33AF7, //Mountain 1 Blue 2 | ||
542 | // 0x09F6E, //Mountain 1 Blue 3 | ||
543 | 0x09EAD, //Mountain 1 Purple 1 | ||
544 | 0x09EAF, //Mountain 1 Purple 2 | ||
545 | 0x09E7A, //Mountain 1 Green 1 | ||
546 | 0x09E71, //Mountain 1 Green 2 | ||
547 | 0x09E72, //Mountain 1 Green 3 | ||
548 | 0x09E69, //Mountain 1 Green 4 | ||
549 | 0x09E7B, //Mountain 1 Green 5 | ||
550 | 0x09FD3, //Mountain 2 Rainbow 1 | ||
551 | 0x09FD4, //Mountain 2 Rainbow 2 | ||
552 | 0x09FD6, //Mountain 2 Rainbow 3 | ||
553 | 0x09FD7, //Mountain 2 Rainbow 4 | ||
554 | 0x09FD8, //Mountain 2 Rainbow 5 | ||
555 | // 0x09E86, //Mountain 2 Blue Pathway | ||
556 | // 0x09FCC, //Mountain 2 Multipanel 1 panels work fine other places but the actual location isn't on - I think maybe it needs all the panels the same | ||
557 | // 0x09FCE, //Mountain 2 Multipanel 2 | ||
558 | // 0x09FCF, //Mountain 2 Multipanel 3 | ||
559 | // 0x09FD0, //Mountain 2 Multipanel 4 | ||
560 | // 0x09FD1, //Mountain 2 Multipanel 5 | ||
561 | // 0x09FD2, //Mountain 2 Multipanel 6 | ||
562 | // 0x09ED8, //Mountain 2 Orange Pathway | ||
563 | // 0x09EEB, //Mountain 2 Elevator | ||
564 | 0x17F93, //Mountain 2 Discard | ||
565 | 0x09F8E, //Mountain 3 Near Right Floor | ||
566 | 0x09FC1, //Mountain 3 Near Left Floor | ||
567 | 0x09F01, //Mountain 3 Far Right Floor | ||
568 | 0x09EFF, //Mountain 3 Far Left Floor | ||
569 | 0x09FDA, //Mountain 3 Giant Floor | ||
570 | 0x17FA2, //Mountain 3 Secret Door | ||
571 | // 0x01983, //Mountain 3 Left Peekaboo | ||
572 | // 0x01987, //Mountain 3 Right Peekaboo | ||
573 | // 0x0383D, //Mountain 3 Left Pillar 1 | ||
574 | // 0x0383F, //Mountain 3 Left Pillar 2 | ||
575 | // 0x03859, //Mountain 3 Left Pillar 3 | ||
576 | // 0x339BB, //Mountain 3 Left Pillar 4 | ||
577 | // 0x0383A, //Mountain 3 Right Pillar 1 | ||
578 | // 0x09E56, //Mountain 3 Right Pillar 2 | ||
579 | // 0x09E5A, //Mountain 3 Right Pillar 3 | ||
580 | // 0x33961, //Mountain 3 Right Pillar 4 | ||
581 | // 0x3D9A6, //Mountain 3 Left Close Door | ||
582 | // 0x3D9A7, //Mountain 3 Right Close Door | ||
583 | // 0x3D9AA, //Mountain 3 Left Activate Elevator | ||
584 | // 0x3D9A8, //Mountain 3 Right Activate Elevator | ||
585 | // 0x3D9A9, //Mountain 3 Launch Elevator | ||
586 | // 0x3C113, //Mountain 3 Left Open Door | ||
587 | // 0x3C114, //Mountain 3 Right Open Door | ||
588 | 0x17C42, //Mountainside Discard | ||
589 | 0x002A6, //Mountainside Vault | ||
590 | // 0x03542, //Mountainside Vault Box | ||
591 | // 0x09F7F, //Mountaintop Laser Box | ||
592 | // 0x17C34, //Mountaintop Perspective | ||
593 | 0x0042D, //Mountaintop River | ||
594 | }; | ||
595 | randomizer.Randomize(mountainPanels, SWAP_LINES | SWAP_COLORS); | ||
596 | |||
597 | // std::vector<int> utmPanels = { this looks like it swaps ok but crashes to much to tell, not sure why it's not happy | ||
598 | // 0x0A16E, //UTM Challenge Entrance | ||
599 | // // 0x09DD5, //UTM Challenge Pillar | ||
600 | // 0x00FF8, //UTM Entrance Door | ||
601 | // 0x0A16B, //UTM Green Dots 1 | ||
602 | // 0x0A2CE, //UTM Green Dots 2 | ||
603 | // 0x0A2D7, //UTM Green Dots 3 | ||
604 | // 0x0A2DD, //UTM Green Dots 4 | ||
605 | // 0x0A2EA, //UTM Green Dots 5 | ||
606 | // 0x17FB9, //UTM Green Dots 6 | ||
607 | // 0x335AB, //UTM In Elevator Control | ||
608 | // 0x0008F, //UTM Invisible Dots 1 | ||
609 | // 0x0006B, //UTM Invisible Dots 2 | ||
610 | // 0x0008B, //UTM Invisible Dots 3 | ||
611 | // 0x0008C, //UTM Invisible Dots 4 | ||
612 | // 0x0008A, //UTM Invisible Dots 5 | ||
613 | // 0x00089, //UTM Invisible Dots 6 | ||
614 | // 0x0006A, //UTM Invisible Dots 7 | ||
615 | // 0x0006C, //UTM Invisible Dots 8 | ||
616 | // 0x00027, //UTM Invisible Dots Symmetry 1 | ||
617 | // 0x00028, //UTM Invisible Dots Symmetry 2 | ||
618 | // 0x00029, //UTM Invisible Dots Symmetry 3 | ||
619 | // 0x3369D, //UTM Lower Elevator Control | ||
620 | // 0x021D7, //UTM Mountainside Shortcut | ||
621 | // // 0x288EA, //UTM Perspective 1 | ||
622 | // // 0x288FC, //UTM Perspective 2 | ||
623 | // // 0x289E7, //UTM Perspective 3 | ||
624 | // // 0x288AA, //UTM Perspective 4 | ||
625 | // 0x00B71, //UTM Quarry | ||
626 | // 0x01A31, //UTM Rainbow | ||
627 | // // 0x334E1, //UTM Secret Door Control | ||
628 | // 0x32962, //UTM Swamp | ||
629 | // 0x32966, //UTM Treehouse | ||
630 | // 0x335AC, //UTM Upper Elevator Control | ||
631 | // 0x17CF2, //UTM Waterfall Shortcut | ||
632 | // 0x00A72, //UTM Blue Cave In | ||
633 | // 0x009A4, //UTM Blue Discontinuous | ||
634 | // 0x018A0, //UTM Blue Easy Symmetry | ||
635 | // 0x01A0D, //UTM Blue Hard Symmetry | ||
636 | // 0x008B8, //UTM Blue Left 1 | ||
637 | // 0x00973, //UTM Blue Left 2 | ||
638 | // 0x0097B, //UTM Blue Left 3 | ||
639 | // 0x0097D, //UTM Blue Left 4 | ||
640 | // 0x0097E, //UTM Blue Left 5 | ||
641 | // 0x00994, //UTM Blue Right Far 1 | ||
642 | // 0x334D5, //UTM Blue Right Far 2 | ||
643 | // 0x00995, //UTM Blue Right Far 3 | ||
644 | // 0x00996, //UTM Blue Right Far 4 | ||
645 | // 0x00998, //UTM Blue Right Far 5 | ||
646 | // 0x00190, //UTM Blue Right Near 1 | ||
647 | // 0x00558, //UTM Blue Right Near 2 | ||
648 | // 0x00567, //UTM Blue Right Near 3 | ||
649 | // 0x006FE, //UTM Blue Right Near 4 | ||
650 | // // 0x2773D, //Tunnels Desert Shortcut | ||
651 | // 0x039B4, //Tunnels Theater Catwalk | ||
652 | // // 0x27732, //Tunnels Theater Shortcut | ||
653 | // // 0x2FAF6, //Tunnels Vault Box | ||
654 | // 0x09E85, //Tunnels Town Shortcut | ||
655 | // }; | ||
656 | // randomizer.Randomize(utmPanels, SWAP_LINES | SWAP_COLORS); | ||
657 | |||
658 | 38 | ||
659 | /*/ | 39 | randomizer.Randomize(desertPanels, SWAP_LINES); |
40 | randomizer.Randomize(treehousePanels, SWAP_LINES); | ||
660 | 41 | ||
42 | std::vector<int> squarePanels; | ||
43 | for (auto panelSet : {outsideTutorialPanels, symmetryPanels, quarryPanels, keepPanels, townPanels, bunkerPanels, swampPanels, mountainPanels, utmPanels}) { | ||
44 | squarePanels.insert(squarePanels.end(), panelSet.begin(), panelSet.end()); | ||
45 | } | ||
46 | randomizer.Randomize(squarePanels, SWAP_LINES | SWAP_COLORS); | ||
661 | 47 | ||
48 | randomizer.Randomize(junglePanels, SWAP_LINES | SWAP_COLORS); | ||
49 | randomizer.Randomize(mountainMultipanel, SWAP_LINES | SWAP_COLORS); | ||
50 | randomizer.Randomize(pillars, SWAP_LINES | SWAP_COLORS); | ||
51 | /*/ | ||
662 | int BOATH_3_1 = 0x21B5; | 52 | int BOATH_3_1 = 0x21B5; |
663 | int MILL_L_1 = 0xE0C; | 53 | int MILL_L_1 = 0xE0C; |
664 | int MILL_U_1 = 0x557; | 54 | int MILL_U_1 = 0x557; |
665 | int QUARRY_E_1 = 0x9E57; | 55 | int QUARRY_E_1 = 0x9E57; |
666 | int QUARRY_E_2 = 0x17C09; | 56 | int QUARRY_E_2 = 0x17C09; |
667 | int MILL_E_1 = 0x1E5A; | 57 | int MILL_E_1 = 0x1E5A; |
58 | int BUNKER_G_1 = 0xA010; | ||
59 | int BUNKER_T_1 = 0x9F7D; | ||
60 | int TUT_PILLAR = 0xC335; | ||
61 | int TUT_F_C = 0x293; | ||
668 | 62 | ||
669 | randomizer.SwapPanels(BOATH_3_1, QUARRY_E_1, SWAP_LINES | SWAP_COLORS); | 63 | randomizer.SwapPanels(TUT_PILLAR, TUT_F_C, SWAP_LINES | SWAP_COLORS); |
670 | //*/ | 64 | //*/ |
671 | } | 65 | } |
672 | 66 | ||
@@ -679,6 +73,7 @@ WitnessRandomizer::WitnessRandomizer() : _memory(Memory("witness64_d3d11.exe")) | |||
679 | } | 73 | } |
680 | 74 | ||
681 | void WitnessRandomizer::Randomize(std::vector<int> panels, int flags) { | 75 | void WitnessRandomizer::Randomize(std::vector<int> panels, int flags) { |
76 | if (panels.size() == 0) return; | ||
682 | for (size_t i=panels.size() - 1; i > 1; i--) { | 77 | for (size_t i=panels.size() - 1; i > 1; i--) { |
683 | int target = rand() % i; | 78 | int target = rand() % i; |
684 | if (i != target) { | 79 | if (i != target) { |
@@ -696,34 +91,39 @@ void WitnessRandomizer::SwapPanels(int panel1, int panel2, int flags) { | |||
696 | offsets[0x2BC] = sizeof(int); | 91 | offsets[0x2BC] = sizeof(int); |
697 | } | 92 | } |
698 | if (flags & SWAP_LINES) { | 93 | if (flags & SWAP_LINES) { |
94 | offsets[0x230] = 16; // traced_edges | ||
95 | // offsets[0x220] = sizeof(void*); // *pattern_name | ||
96 | // offsets[0x240] = sizeof(void*); // *mesh_name | ||
97 | offsets[0x2FC] = sizeof(int); // is_cylinder | ||
98 | offsets[0x300] = sizeof(float); // cylinder_z0 | ||
99 | offsets[0x304] = sizeof(float); // cylinder_z1 | ||
100 | offsets[0x308] = sizeof(float); // cylinder_radius | ||
101 | // offsets[0x35C] = sizeof(int); // solvable_from_behind | ||
102 | |||
103 | // offsets[0x30C] = sizeof(float); // uv_to_world_scale | ||
104 | offsets[0x3A4] = sizeof(float); // path_width_scale | ||
105 | offsets[0x3A8] = sizeof(float); // startpoint_scale | ||
699 | offsets[0x3B8] = sizeof(int); // num_dots | 106 | offsets[0x3B8] = sizeof(int); // num_dots |
700 | offsets[0x3BC] = sizeof(int); // num_connections | 107 | offsets[0x3BC] = sizeof(int); // num_connections |
701 | offsets[0x3C8] = sizeof(void*); // *dot_positions | 108 | offsets[0x3C8] = sizeof(void*); // *dot_positions |
702 | offsets[0x3D0] = sizeof(void*); // *dot_flags | 109 | offsets[0x3D0] = sizeof(void*); // *dot_flags |
703 | offsets[0x3D8] = sizeof(void*); // *dot_connection_a | 110 | offsets[0x3D8] = sizeof(void*); // *dot_connection_a |
704 | offsets[0x3E0] = sizeof(void*); // *dot_connection_b | 111 | offsets[0x3E0] = sizeof(void*); // *dot_connection_b |
112 | offsets[0x420] = sizeof(void*); // *decorations | ||
113 | offsets[0x428] = sizeof(void*); // *decoration_flags | ||
114 | offsets[0x438] = sizeof(int); // num_decorations | ||
705 | offsets[0x440] = sizeof(void*); // *reflection_data | 115 | offsets[0x440] = sizeof(void*); // *reflection_data |
706 | offsets[0x448] = sizeof(int); // grid_size_x | 116 | offsets[0x448] = sizeof(int); // grid_size_x |
707 | offsets[0x44C] = sizeof(int); // grid_size_y | 117 | offsets[0x44C] = sizeof(int); // grid_size_y |
708 | offsets[0x450] = sizeof(int); // style_flags // This is required to not ignore dots | 118 | offsets[0x450] = sizeof(int); // style_flags // This is required to not ignore dots |
709 | offsets[0x4B0] = sizeof(void*); // *panel_target | ||
710 | offsets[0x4D8] = sizeof(void*); // *specular_texture | ||
711 | |||
712 | offsets[0x420] = sizeof(void*); // *decorations | ||
713 | offsets[0x428] = sizeof(void*); // *decoration_flags | ||
714 | offsets[0x438] = sizeof(int); // num_decorations | ||
715 | |||
716 | offsets[0x45C] = sizeof(int); // sequence_len | 119 | offsets[0x45C] = sizeof(int); // sequence_len |
717 | offsets[0x460] = sizeof(void*); // *sequence | 120 | offsets[0x460] = sizeof(void*); // *sequence |
718 | offsets[0x468] = sizeof(int); // dot_sequence_len | 121 | offsets[0x468] = sizeof(int); // dot_sequence_len |
719 | offsets[0x470] = sizeof(void*); // *dot_sequence | 122 | offsets[0x470] = sizeof(void*); // *dot_sequence |
720 | offsets[0x478] = sizeof(int); // dot_sequence_len_reflection | 123 | offsets[0x478] = sizeof(int); // dot_sequence_len_reflection |
721 | offsets[0x480] = sizeof(void*); // *dot_sequence_reflection | 124 | offsets[0x480] = sizeof(void*); // *dot_sequence_reflection |
722 | 125 | offsets[0x4B0] = sizeof(void*); // *panel_target | |
723 | offsets[0x3A4] = sizeof(float); // path_width_scale | 126 | offsets[0x4D8] = sizeof(void*); // *specular_texture |
724 | offsets[0x3A8] = sizeof(float); // startpoint_scale | ||
725 | |||
726 | offsets[0x230] = 16; // traced_edges | ||
727 | 127 | ||
728 | // TODO: Try using is_cylinder to swap into tutorial pillar. If it fails, discard. | 128 | // TODO: Try using is_cylinder to swap into tutorial pillar. If it fails, discard. |
729 | // Probably not: Extra back distance | 129 | // Probably not: Extra back distance |
@@ -778,12 +178,6 @@ void WitnessRandomizer::SwapPanelData(int panel1, int panel2, int finalOffset, i | |||
778 | std::vector<byte> panel1Data = _memory.ReadData<byte>(panel1Offset, dataSize); | 178 | std::vector<byte> panel1Data = _memory.ReadData<byte>(panel1Offset, dataSize); |
779 | std::vector<byte> panel2Data = _memory.ReadData<byte>(panel2Offset, dataSize); | 179 | std::vector<byte> panel2Data = _memory.ReadData<byte>(panel2Offset, dataSize); |
780 | 180 | ||
781 | bool failed = _memory.WriteData<byte>(panel2Offset, panel1Data); | 181 | _memory.WriteData<byte>(panel2Offset, panel1Data); |
782 | if (failed) { | 182 | _memory.WriteData<byte>(panel1Offset, panel2Data); |
783 | _memory.WriteData<byte>(panel2Offset, panel1Data); | ||
784 | } | ||
785 | failed = _memory.WriteData<byte>(panel1Offset, panel2Data); | ||
786 | if (failed) { | ||
787 | _memory.WriteData<byte>(panel1Offset, panel2Data); | ||
788 | } | ||
789 | } | 183 | } |
diff --git a/WitnessRandomizer/WitnessRandomizer.vcxproj b/WitnessRandomizer/WitnessRandomizer.vcxproj index a1c8fc1..49bd186 100644 --- a/WitnessRandomizer/WitnessRandomizer.vcxproj +++ b/WitnessRandomizer/WitnessRandomizer.vcxproj | |||
@@ -153,6 +153,7 @@ | |||
153 | </ItemDefinitionGroup> | 153 | </ItemDefinitionGroup> |
154 | <ItemGroup> | 154 | <ItemGroup> |
155 | <ClInclude Include="Memory.h" /> | 155 | <ClInclude Include="Memory.h" /> |
156 | <ClInclude Include="Panels.h" /> | ||
156 | <ClInclude Include="WitnessRandomizer.h" /> | 157 | <ClInclude Include="WitnessRandomizer.h" /> |
157 | </ItemGroup> | 158 | </ItemGroup> |
158 | <ItemGroup> | 159 | <ItemGroup> |
diff --git a/WitnessRandomizer/WitnessRandomizer.vcxproj.filters b/WitnessRandomizer/WitnessRandomizer.vcxproj.filters index 6e92973..30ef78f 100644 --- a/WitnessRandomizer/WitnessRandomizer.vcxproj.filters +++ b/WitnessRandomizer/WitnessRandomizer.vcxproj.filters | |||
@@ -21,6 +21,9 @@ | |||
21 | <ClInclude Include="WitnessRandomizer.h"> | 21 | <ClInclude Include="WitnessRandomizer.h"> |
22 | <Filter>Header Files</Filter> | 22 | <Filter>Header Files</Filter> |
23 | </ClInclude> | 23 | </ClInclude> |
24 | <ClInclude Include="Panels.h"> | ||
25 | <Filter>Header Files</Filter> | ||
26 | </ClInclude> | ||
24 | </ItemGroup> | 27 | </ItemGroup> |
25 | <ItemGroup> | 28 | <ItemGroup> |
26 | <ClCompile Include="WitnessRandomizer.cpp"> | 29 | <ClCompile Include="WitnessRandomizer.cpp"> |