about summary refs log tree commit diff stats
path: root/Source
diff options
context:
space:
mode:
authorStar Rauchenberger <fefferburbia@gmail.com>2021-08-21 23:29:29 -0400
committerStar Rauchenberger <fefferburbia@gmail.com>2021-08-21 23:29:29 -0400
commitb4328af638852e57ff2d75836266d887700bee1e (patch)
tree32c0e6b596a86da89659645964ac6c674bb938c4 /Source
parent1591ee64b865c0f432ec3a178cfec80dfbae1e86 (diff)
downloadwitness-tutorializer-b4328af638852e57ff2d75836266d887700bee1e.tar.gz
witness-tutorializer-b4328af638852e57ff2d75836266d887700bee1e.tar.bz2
witness-tutorializer-b4328af638852e57ff2d75836266d887700bee1e.zip
Backported some of sigma's stuff
Diffstat (limited to 'Source')
-rw-r--r--Source/Memory.cpp167
-rw-r--r--Source/Memory.h17
-rw-r--r--Source/PuzzleSerializer.cpp1
-rw-r--r--Source/Randomizer.cpp6
-rw-r--r--Source/Randomizer.h68
5 files changed, 98 insertions, 161 deletions
diff --git a/Source/Memory.cpp b/Source/Memory.cpp index 4a4cb63..8e755dd 100644 --- a/Source/Memory.cpp +++ b/Source/Memory.cpp
@@ -6,7 +6,7 @@
6#undef PROCESSENTRY32 6#undef PROCESSENTRY32
7#undef Process32Next 7#undef Process32Next
8 8
9Memory::Memory(const std::wstring& processName) : _processName(processName) {} 9Memory::Memory(const std::wstring& processName) : _processName(processName) { Initialize(); }
10 10
11Memory::~Memory() { 11Memory::~Memory() {
12 if (_threadActive) { 12 if (_threadActive) {
@@ -33,7 +33,7 @@ void Memory::StartHeartbeat(HWND window, WPARAM wParam, std::chrono::millisecond
33} 33}
34 34
35void Memory::Heartbeat(HWND window, WPARAM wParam) { 35void Memory::Heartbeat(HWND window, WPARAM wParam) {
36 if (!_handle && !Initialize()) { 36 if (!_handle) {
37 // Couldn't initialize, definitely not running 37 // Couldn't initialize, definitely not running
38 PostMessage(window, WM_COMMAND, wParam, (LPARAM)ProcStatus::NotRunning); 38 PostMessage(window, WM_COMMAND, wParam, (LPARAM)ProcStatus::NotRunning);
39 return; 39 return;
@@ -110,7 +110,8 @@ bool Memory::Initialize() {
110 return false; 110 return false;
111 } 111 }
112 112
113 LoadPanelOffsets(); 113 ExecuteSigScans();
114
114 return true; 115 return true;
115} 116}
116 117
@@ -187,157 +188,9 @@ void* Memory::ComputeOffset(std::vector<int> offsets) {
187 return reinterpret_cast<void*>(cumulativeAddress + final_offset); 188 return reinterpret_cast<void*>(cumulativeAddress + final_offset);
188} 189}
189 190
190int GLOBALS, POSITION, ORIENTATION, PATH_COLOR, REFLECTION_PATH_COLOR, DOT_COLOR, ACTIVE_COLOR, BACKGROUND_REGION_COLOR, SUCCESS_COLOR_A, SUCCESS_COLOR_B, STROBE_COLOR_A, STROBE_COLOR_B, ERROR_COLOR, PATTERN_POINT_COLOR, PATTERN_POINT_COLOR_A, PATTERN_POINT_COLOR_B, SYMBOL_A, SYMBOL_B, SYMBOL_C, SYMBOL_D, SYMBOL_E, PUSH_SYMBOL_COLORS, OUTER_BACKGROUND, OUTER_BACKGROUND_MODE, TRACED_EDGES, AUDIO_PREFIX, POWER, TARGET, POWER_OFF_ON_FAIL, IS_CYLINDER, CYLINDER_Z0, CYLINDER_Z1, CYLINDER_RADIUS, CURSOR_SPEED_SCALE, NEEDS_REDRAW, SPECULAR_ADD, SPECULAR_POWER, PATH_WIDTH_SCALE, STARTPOINT_SCALE, NUM_DOTS, NUM_CONNECTIONS, MAX_BROADCAST_DISTANCE, DOT_POSITIONS, DOT_FLAGS, DOT_CONNECTION_A, DOT_CONNECTION_B, DECORATIONS, DECORATION_FLAGS, DECORATION_COLORS, NUM_DECORATIONS, REFLECTION_DATA, GRID_SIZE_X, GRID_SIZE_Y, STYLE_FLAGS, SEQUENCE_LEN, SEQUENCE, DOT_SEQUENCE_LEN, DOT_SEQUENCE, DOT_SEQUENCE_LEN_REFLECTION, DOT_SEQUENCE_REFLECTION, NUM_COLORED_REGIONS, COLORED_REGIONS, PANEL_TARGET, SPECULAR_TEXTURE, CABLE_TARGET_2, AUDIO_LOG_NAME, OPEN_RATE, METADATA, HOTEL_EP_NAME; 191int Memory::GLOBALS = 0;
191 192int Memory::globalsTests[3] = {
192void Memory::LoadPanelOffsets() { 193 0x62D0A0, //Steam and Epic Games
193 AddSigScan({0x74, 0x41, 0x48, 0x85, 0xC0, 0x74, 0x04, 0x48, 0x8B, 0x48, 0x10}, [sharedThis = shared_from_this()](int index){ 194 0x62B0A0, //Good Old Games
194 // (address of next line) + (value at index) 195 0x5B28C0 //Noclip version
195 GLOBALS = index + 0x14 + 0x4 + sharedThis->ReadData<int>({index+0x14}, 1)[0]; 196}; \ No newline at end of file
196 });
197 ExecuteSigScans();
198
199 if (GLOBALS == 0x5B28C0) {
200 POSITION = 0x24;
201 ORIENTATION = 0x34;
202 PATH_COLOR = 0xC8;
203 REFLECTION_PATH_COLOR = 0xD8;
204 DOT_COLOR = 0xF8;
205 ACTIVE_COLOR = 0x108;
206 BACKGROUND_REGION_COLOR = 0x118;
207 SUCCESS_COLOR_A = 0x128;
208 SUCCESS_COLOR_B = 0x138;
209 STROBE_COLOR_A = 0x148;
210 STROBE_COLOR_B = 0x158;
211 ERROR_COLOR = 0x168;
212 PATTERN_POINT_COLOR = 0x188;
213 PATTERN_POINT_COLOR_A = 0x198;
214 PATTERN_POINT_COLOR_B = 0x1A8;
215 SYMBOL_A = 0x1B8;
216 SYMBOL_B = 0x1C8;
217 SYMBOL_C = 0x1D8;
218 SYMBOL_D = 0x1E8;
219 SYMBOL_E = 0x1F8;
220 PUSH_SYMBOL_COLORS = 0x208;
221 OUTER_BACKGROUND = 0x20C;
222 OUTER_BACKGROUND_MODE = 0x21C;
223 TRACED_EDGES = 0x230;
224 AUDIO_PREFIX = 0x278;
225 POWER = 0x2A8;
226 TARGET = 0x2BC;
227 POWER_OFF_ON_FAIL = 0x2C0;
228 IS_CYLINDER = 0x2FC;
229 CYLINDER_Z0 = 0x300;
230 CYLINDER_Z1 = 0x304;
231 CYLINDER_RADIUS = 0x308;
232 CURSOR_SPEED_SCALE = 0x358;
233 NEEDS_REDRAW = 0x384;
234 SPECULAR_ADD = 0x398;
235 SPECULAR_POWER = 0x39C;
236 PATH_WIDTH_SCALE = 0x3A4;
237 STARTPOINT_SCALE = 0x3A8;
238 NUM_DOTS = 0x3B8;
239 NUM_CONNECTIONS = 0x3BC;
240 MAX_BROADCAST_DISTANCE = 0x3C0;
241 DOT_POSITIONS = 0x3C8;
242 DOT_FLAGS = 0x3D0;
243 DOT_CONNECTION_A = 0x3D8;
244 DOT_CONNECTION_B = 0x3E0;
245 DECORATIONS = 0x420;
246 DECORATION_FLAGS = 0x428;
247 DECORATION_COLORS = 0x430;
248 NUM_DECORATIONS = 0x438;
249 REFLECTION_DATA = 0x440;
250 GRID_SIZE_X = 0x448;
251 GRID_SIZE_Y = 0x44C;
252 STYLE_FLAGS = 0x450;
253 SEQUENCE_LEN = 0x45C;
254 SEQUENCE = 0x460;
255 DOT_SEQUENCE_LEN = 0x468;
256 DOT_SEQUENCE = 0x470;
257 DOT_SEQUENCE_LEN_REFLECTION = 0x478;
258 DOT_SEQUENCE_REFLECTION = 0x480;
259 NUM_COLORED_REGIONS = 0x4A0;
260 COLORED_REGIONS = 0x4A8;
261 PANEL_TARGET = 0x4B0;
262 SPECULAR_TEXTURE = 0x4D8;
263 CABLE_TARGET_2 = 0xD8;
264 AUDIO_LOG_NAME = 0xC8;
265 OPEN_RATE = 0xE8;
266 METADATA = 0xF2; // sizeof(short)
267 HOTEL_EP_NAME = 0x4BC640;
268 } else if (GLOBALS == 0x62B0A0) {
269 // TODO:
270 } else if (GLOBALS == 0x62D0A0) {
271 POSITION = 0x24;
272 ORIENTATION = 0x34;
273 PATH_COLOR = 0xC0;
274 REFLECTION_PATH_COLOR = 0xD0;
275 DOT_COLOR = 0xF0;
276 ACTIVE_COLOR = 0x100;
277 BACKGROUND_REGION_COLOR = 0x110;
278 SUCCESS_COLOR_A = 0x120;
279 SUCCESS_COLOR_B = 0x130;
280 STROBE_COLOR_A = 0x140;
281 STROBE_COLOR_B = 0x150;
282 ERROR_COLOR = 0x160;
283 PATTERN_POINT_COLOR = 0x180;
284 PATTERN_POINT_COLOR_A = 0x190;
285 PATTERN_POINT_COLOR_B = 0x1A0;
286 SYMBOL_A = 0x1B0;
287 SYMBOL_B = 0x1C0;
288 SYMBOL_C = 0x1D0;
289 SYMBOL_D = 0x1E0;
290 SYMBOL_E = 0x1F0;
291 PUSH_SYMBOL_COLORS = 0x200;
292 OUTER_BACKGROUND = 0x204;
293 OUTER_BACKGROUND_MODE = 0x214;
294 TRACED_EDGES = 0x228;
295 AUDIO_PREFIX = 0x270;
296 POWER = 0x2A0;
297 TARGET = 0x2B4;
298 POWER_OFF_ON_FAIL = 0x2B8;
299 IS_CYLINDER = 0x2F4;
300 CYLINDER_Z0 = 0x2F8;
301 CYLINDER_Z1 = 0x2FC;
302 CYLINDER_RADIUS = 0x300;
303 CURSOR_SPEED_SCALE = 0x350;
304 NEEDS_REDRAW = 0x37C;
305 SPECULAR_ADD = 0x38C;
306 SPECULAR_POWER = 0x390;
307 PATH_WIDTH_SCALE = 0x39C;
308 STARTPOINT_SCALE = 0x3A0;
309 NUM_DOTS = 0x3B4;
310 NUM_CONNECTIONS = 0x3B8;
311 MAX_BROADCAST_DISTANCE = 0x3BC;
312 DOT_POSITIONS = 0x3C0;
313 DOT_FLAGS = 0x3C8;
314 DOT_CONNECTION_A = 0x3D0;
315 DOT_CONNECTION_B = 0x3D8;
316 DECORATIONS = 0x418;
317 DECORATION_FLAGS = 0x420;
318 DECORATION_COLORS = 0x428;
319 NUM_DECORATIONS = 0x430;
320 REFLECTION_DATA = 0x438;
321 GRID_SIZE_X = 0x440;
322 GRID_SIZE_Y = 0x444;
323 STYLE_FLAGS = 0x448;
324 SEQUENCE_LEN = 0x454;
325 SEQUENCE = 0x458;
326 DOT_SEQUENCE_LEN = 0x460;
327 DOT_SEQUENCE = 0x468;
328 DOT_SEQUENCE_LEN_REFLECTION = 0x470;
329 DOT_SEQUENCE_REFLECTION = 0x478;
330 NUM_COLORED_REGIONS = 0x498;
331 COLORED_REGIONS = 0x4A0;
332 PANEL_TARGET = 0x4A8;
333 SPECULAR_TEXTURE = 0x4D0;
334 CABLE_TARGET_2 = 0xD0;
335 AUDIO_LOG_NAME = 0x0;
336 OPEN_RATE = 0xE0;
337 METADATA = 0x13A; // sizeof(short)
338 HOTEL_EP_NAME = 0x51E340;
339 } else {
340 assert(false);
341 return;
342 }
343} \ No newline at end of file
diff --git a/Source/Memory.h b/Source/Memory.h index e924bb9..fc67b4f 100644 --- a/Source/Memory.h +++ b/Source/Memory.h
@@ -1,6 +1,6 @@
1#pragma once 1#pragma once
2 2
3extern int GLOBALS, POSITION, ORIENTATION, PATH_COLOR, REFLECTION_PATH_COLOR, DOT_COLOR, ACTIVE_COLOR, BACKGROUND_REGION_COLOR, SUCCESS_COLOR_A, SUCCESS_COLOR_B, STROBE_COLOR_A, STROBE_COLOR_B, ERROR_COLOR, PATTERN_POINT_COLOR, PATTERN_POINT_COLOR_A, PATTERN_POINT_COLOR_B, SYMBOL_A, SYMBOL_B, SYMBOL_C, SYMBOL_D, SYMBOL_E, PUSH_SYMBOL_COLORS, OUTER_BACKGROUND, OUTER_BACKGROUND_MODE, TRACED_EDGES, AUDIO_PREFIX, POWER, TARGET, POWER_OFF_ON_FAIL, IS_CYLINDER, CYLINDER_Z0, CYLINDER_Z1, CYLINDER_RADIUS, CURSOR_SPEED_SCALE, NEEDS_REDRAW, SPECULAR_ADD, SPECULAR_POWER, PATH_WIDTH_SCALE, STARTPOINT_SCALE, NUM_DOTS, NUM_CONNECTIONS, MAX_BROADCAST_DISTANCE, DOT_POSITIONS, DOT_FLAGS, DOT_CONNECTION_A, DOT_CONNECTION_B, DECORATIONS, DECORATION_FLAGS, DECORATION_COLORS, NUM_DECORATIONS, REFLECTION_DATA, GRID_SIZE_X, GRID_SIZE_Y, STYLE_FLAGS, SEQUENCE_LEN, SEQUENCE, DOT_SEQUENCE_LEN, DOT_SEQUENCE, DOT_SEQUENCE_LEN_REFLECTION, DOT_SEQUENCE_REFLECTION, NUM_COLORED_REGIONS, COLORED_REGIONS, PANEL_TARGET, SPECULAR_TEXTURE, CABLE_TARGET_2, AUDIO_LOG_NAME, OPEN_RATE, METADATA, HOTEL_EP_NAME; 3//extern int GLOBALS, POSITION, ORIENTATION, PATH_COLOR, REFLECTION_PATH_COLOR, DOT_COLOR, ACTIVE_COLOR, BACKGROUND_REGION_COLOR, SUCCESS_COLOR_A, SUCCESS_COLOR_B, STROBE_COLOR_A, STROBE_COLOR_B, ERROR_COLOR, PATTERN_POINT_COLOR, PATTERN_POINT_COLOR_A, PATTERN_POINT_COLOR_B, SYMBOL_A, SYMBOL_B, SYMBOL_C, SYMBOL_D, SYMBOL_E, PUSH_SYMBOL_COLORS, OUTER_BACKGROUND, OUTER_BACKGROUND_MODE, TRACED_EDGES, AUDIO_PREFIX, POWER, TARGET, POWER_OFF_ON_FAIL, IS_CYLINDER, CYLINDER_Z0, CYLINDER_Z1, CYLINDER_RADIUS, CURSOR_SPEED_SCALE, NEEDS_REDRAW, SPECULAR_ADD, SPECULAR_POWER, PATH_WIDTH_SCALE, STARTPOINT_SCALE, NUM_DOTS, NUM_CONNECTIONS, MAX_BROADCAST_DISTANCE, DOT_POSITIONS, DOT_FLAGS, DOT_CONNECTION_A, DOT_CONNECTION_B, DECORATIONS, DECORATION_FLAGS, DECORATION_COLORS, NUM_DECORATIONS, REFLECTION_DATA, GRID_SIZE_X, GRID_SIZE_Y, STYLE_FLAGS, SEQUENCE_LEN, SEQUENCE, DOT_SEQUENCE_LEN, DOT_SEQUENCE, DOT_SEQUENCE_LEN_REFLECTION, DOT_SEQUENCE_REFLECTION, NUM_COLORED_REGIONS, COLORED_REGIONS, PANEL_TARGET, SPECULAR_TEXTURE, CABLE_TARGET_2, AUDIO_LOG_NAME, OPEN_RATE, METADATA, HOTEL_EP_NAME;
4 4
5enum class ProcStatus { 5enum class ProcStatus {
6 NotRunning, 6 NotRunning,
@@ -80,6 +80,20 @@ public:
80 WriteData<T>({ GLOBALS, 0x18, panel * 8, offset }, data); 80 WriteData<T>({ GLOBALS, 0x18, panel * 8, offset }, data);
81 } 81 }
82 82
83 template <class T>
84 T ReadPanelData(int panel, int offset) {
85 return ReadData<T>({ GLOBALS, 0x18, panel * 8, offset }, 1)[0];
86 }
87
88 template <class T>
89 std::vector<T> ReadPanelData(int panel, int offset, size_t size) {
90 if (size == 0) return std::vector<T>();
91 return ReadData<T>({ GLOBALS, 0x18, panel * 8, offset }, size);
92 }
93
94 static int GLOBALS;
95 static int globalsTests[3];
96
83private: 97private:
84 template<class T> 98 template<class T>
85 std::vector<T> ReadData(const std::vector<int>& offsets, size_t numItems) { 99 std::vector<T> ReadData(const std::vector<int>& offsets, size_t numItems) {
@@ -103,7 +117,6 @@ private:
103 void Heartbeat(HWND window, WPARAM wParam); 117 void Heartbeat(HWND window, WPARAM wParam);
104 bool Initialize(); 118 bool Initialize();
105 void* ComputeOffset(std::vector<int> offsets); 119 void* ComputeOffset(std::vector<int> offsets);
106 void LoadPanelOffsets();
107 120
108 int _previousFrame = 0; 121 int _previousFrame = 0;
109 bool _threadActive = false; 122 bool _threadActive = false;
diff --git a/Source/PuzzleSerializer.cpp b/Source/PuzzleSerializer.cpp index e316216..4a57313 100644 --- a/Source/PuzzleSerializer.cpp +++ b/Source/PuzzleSerializer.cpp
@@ -1,5 +1,6 @@
1#include "pch.h" 1#include "pch.h"
2#include "PuzzleSerializer.h" 2#include "PuzzleSerializer.h"
3#include "Randomizer.h"
3 4
4PuzzleSerializer::PuzzleSerializer(const std::shared_ptr<Memory>& memory) : _memory(memory) {} 5PuzzleSerializer::PuzzleSerializer(const std::shared_ptr<Memory>& memory) : _memory(memory) {}
5 6
diff --git a/Source/Randomizer.cpp b/Source/Randomizer.cpp index 5239cd6..8ded06e 100644 --- a/Source/Randomizer.cpp +++ b/Source/Randomizer.cpp
@@ -116,14 +116,16 @@ void Randomizer::Randomize() {
116 116
117 // begin_endgame_1 - Prevent actually ending the game (Wonkavator) 117 // begin_endgame_1 - Prevent actually ending the game (Wonkavator)
118 _memory->AddSigScan({0x83, 0x7C, 0x01, 0xD0, 0x04}, [&](int index){ 118 _memory->AddSigScan({0x83, 0x7C, 0x01, 0xD0, 0x04}, [&](int index){
119 if (GLOBALS == 0x5B28C0) { // Version differences. 119 if (Memory::GLOBALS == 0x5B28C0) { // Version differences.
120 index += 0x75; 120 index += 0x75;
121 } else if (GLOBALS == 0x62D0A0) { 121 } else if (Memory::GLOBALS == 0x62D0A0) {
122 index += 0x86; 122 index += 0x86;
123 } 123 }
124 _memory->WriteData<byte>({index}, {0xEB}); // jz -> jmp 124 _memory->WriteData<byte>({index}, {0xEB}); // jz -> jmp
125 }); 125 });
126 126
127 //Tutorialise(0x33AF5, 0x0A3B2);
128
127 // Tutorial Bend 129 // Tutorial Bend
128 for (int panel : utmPerspective) { 130 for (int panel : utmPerspective) {
129 Tutorialise(panel, 0x00182); 131 Tutorialise(panel, 0x00182);
diff --git a/Source/Randomizer.h b/Source/Randomizer.h index a26acab..4058280 100644 --- a/Source/Randomizer.h +++ b/Source/Randomizer.h
@@ -14,3 +14,71 @@ private:
14 14
15 friend class SwapTests_Shipwreck_Test; 15 friend class SwapTests_Shipwreck_Test;
16}; 16};
17
18#define PATH_COLOR 0xC0
19#define REFLECTION_PATH_COLOR 0xD0
20#define DOT_COLOR 0xF0
21#define ACTIVE_COLOR 0x100
22#define BACKGROUND_REGION_COLOR 0x110
23#define SUCCESS_COLOR_A 0x120
24#define SUCCESS_COLOR_B 0x130
25#define STROBE_COLOR_A 0x140
26#define STROBE_COLOR_B 0x150
27#define ERROR_COLOR 0x160
28#define PATTERN_POINT_COLOR 0x180
29#define PATTERN_POINT_COLOR_A 0x190
30#define PATTERN_POINT_COLOR_B 0x1A0
31#define SYMBOL_A 0x1B0
32#define SYMBOL_B 0x1C0
33#define SYMBOL_C 0x1D0
34#define SYMBOL_D 0x1E0
35#define SYMBOL_E 0x1F0
36#define PUSH_SYMBOL_COLORS 0x200
37#define OUTER_BACKGROUND 0x204
38#define OUTER_BACKGROUND_MODE 0x214
39#define TRACED_EDGES 0x228
40#define TRACED_EDGE_DATA 0x230
41#define AUDIO_PREFIX 0x270
42#define POWER 0x2A0
43#define TARGET 0x2B4
44#define POWER_OFF_ON_FAIL 0x2B8
45#define IS_CYLINDER 0x2F4
46#define CYLINDER_Z0 0x2F8
47#define CYLINDER_Z1 0x2FC
48#define CYLINDER_RADIUS 0x300
49#define CURSOR_SPEED_SCALE 0x350
50#define NEEDS_REDRAW 0x37C
51#define SPECULAR_ADD 0x38C
52#define SPECULAR_POWER 0x390
53#define PATH_WIDTH_SCALE 0x39C
54#define STARTPOINT_SCALE 0x3A0
55#define NUM_DOTS 0x3B4
56#define NUM_CONNECTIONS 0x3B8
57#define MAX_BROADCAST_DISTANCE 0x3BC
58#define DOT_POSITIONS 0x3C0
59#define DOT_FLAGS 0x3C8
60#define DOT_CONNECTION_A 0x3D0
61#define DOT_CONNECTION_B 0x3D8
62#define DECORATIONS 0x418
63#define DECORATION_FLAGS 0x420
64#define DECORATION_COLORS 0x428
65#define NUM_DECORATIONS 0x430
66#define REFLECTION_DATA 0x438
67#define GRID_SIZE_X 0x440
68#define GRID_SIZE_Y 0x444
69#define STYLE_FLAGS 0x448
70#define SEQUENCE_LEN 0x454
71#define SEQUENCE 0x458
72#define DOT_SEQUENCE_LEN 0x460
73#define DOT_SEQUENCE 0x468
74#define DOT_SEQUENCE_LEN_REFLECTION 0x470
75#define DOT_SEQUENCE_REFLECTION 0x478
76#define NUM_COLORED_REGIONS 0x498
77#define COLORED_REGIONS 0x4A0
78#define PANEL_TARGET 0x4A8
79#define SPECULAR_TEXTURE 0x4D0
80#define CABLE_TARGET_2 0xD0
81#define AUDIO_LOG_NAME 0x0
82#define OPEN_RATE 0xE0
83#define METADATA 0x13A // sizeof(short)
84#define HOTEL_EP_NAME 0x51E340