about summary refs log tree commit diff stats
path: root/Source
diff options
context:
space:
mode:
Diffstat (limited to 'Source')
-rw-r--r--Source/Memory.cpp24
-rw-r--r--Source/Memory.h3
-rw-r--r--Source/Randomizer.cpp63
-rw-r--r--Source/Randomizer.h2
-rw-r--r--Source/Source.vcxproj20
5 files changed, 87 insertions, 25 deletions
diff --git a/Source/Memory.cpp b/Source/Memory.cpp index 7bc3b2f..1f1ae0a 100644 --- a/Source/Memory.cpp +++ b/Source/Memory.cpp
@@ -6,12 +6,16 @@
6#undef PROCESSENTRY32 6#undef PROCESSENTRY32
7#undef Process32Next 7#undef Process32Next
8 8
9Memory::Memory(const std::string& processName) { 9Memory::Memory() {
10}
11
12[[nodiscard]]
13bool Memory::Initialize(const std::wstring& processName) {
10 // First, get the handle of the process 14 // First, get the handle of the process
11 PROCESSENTRY32 entry; 15 PROCESSENTRY32W entry;
12 entry.dwSize = sizeof(entry); 16 entry.dwSize = sizeof(entry);
13 HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 17 HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
14 while (Process32Next(snapshot, &entry)) { 18 while (Process32NextW(snapshot, &entry)) {
15 if (processName == entry.szExeFile) { 19 if (processName == entry.szExeFile) {
16 _handle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, entry.th32ProcessID); 20 _handle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, entry.th32ProcessID);
17 break; 21 break;
@@ -19,7 +23,7 @@ Memory::Memory(const std::string& processName) {
19 } 23 }
20 if (!_handle) { 24 if (!_handle) {
21 std::cerr << "Couldn't find " << processName.c_str() << ", is it open?" << std::endl; 25 std::cerr << "Couldn't find " << processName.c_str() << ", is it open?" << std::endl;
22 throw std::exception("Unable to find process!"); 26 return false;
23 } 27 }
24 28
25 // Next, get the process base address 29 // Next, get the process base address
@@ -27,9 +31,9 @@ Memory::Memory(const std::string& processName) {
27 std::vector<HMODULE> moduleList(1024); 31 std::vector<HMODULE> moduleList(1024);
28 EnumProcessModulesEx(_handle, &moduleList[0], static_cast<DWORD>(moduleList.size()), &numModules, 3); 32 EnumProcessModulesEx(_handle, &moduleList[0], static_cast<DWORD>(moduleList.size()), &numModules, 3);
29 33
30 std::string name(64, '\0'); 34 std::wstring name(64, '\0');
31 for (DWORD i = 0; i < numModules / sizeof(HMODULE); i++) { 35 for (DWORD i = 0; i < numModules / sizeof(HMODULE); i++) {
32 int length = GetModuleBaseNameA(_handle, moduleList[i], &name[0], static_cast<DWORD>(name.size())); 36 int length = GetModuleBaseNameW(_handle, moduleList[i], &name[0], static_cast<DWORD>(name.size()));
33 name.resize(length); 37 name.resize(length);
34 if (processName == name) { 38 if (processName == name) {
35 _baseAddress = (uintptr_t)moduleList[i]; 39 _baseAddress = (uintptr_t)moduleList[i];
@@ -37,12 +41,16 @@ Memory::Memory(const std::string& processName) {
37 } 41 }
38 } 42 }
39 if (_baseAddress == 0) { 43 if (_baseAddress == 0) {
40 throw std::exception("Couldn't find the base process address!"); 44 std::cerr << "Couldn't locate base address" << std::endl;
45 return false;
41 } 46 }
47 return true;
42} 48}
43 49
44Memory::~Memory() { 50Memory::~Memory() {
45 CloseHandle(_handle); 51 if (_handle != nullptr) {
52 CloseHandle(_handle);
53 }
46} 54}
47 55
48int Memory::GetCurrentFrame() 56int Memory::GetCurrentFrame()
diff --git a/Source/Memory.h b/Source/Memory.h index cce06ba..9c00dab 100644 --- a/Source/Memory.h +++ b/Source/Memory.h
@@ -14,7 +14,8 @@
14class Memory 14class Memory
15{ 15{
16public: 16public:
17 Memory(const std::string& processName); 17 Memory();
18 bool Initialize(const std::wstring& processName);
18 ~Memory(); 19 ~Memory();
19 20
20 Memory(const Memory& memory) = delete; 21 Memory(const Memory& memory) = delete;
diff --git a/Source/Randomizer.cpp b/Source/Randomizer.cpp index 5e57ca3..71ec89b 100644 --- a/Source/Randomizer.cpp +++ b/Source/Randomizer.cpp
@@ -1,4 +1,67 @@
1/* 1/*
2Things to do for V2:
3- Better interface design. It's way too simplistic, take (some) notes from talos.
4 - Seed: [ ] (Randomize)
5 ?? Challenge
6
7 - [] Prevent speedrun snipes // Shadows, Swamp, Town, Quarry stairs
8 - [] Speed up various autoscrollers // Swamp platforms, Desert/Mountain elevators, Desert rotating panels
9
10 (Additional required panels)
11 - [] Desert 8
12 - [] Pond 5
13 - [] Both keep halves
14 - [] Town lattice requires stars door // and stars door will be randomized
15
16 (Debug version only)
17 - [] Noclip
18 - [] Noclip speed
19
20
21- Really randomize panels. Sorted by ROI
22 - Random with style
23 - Tutorial
24 - Mountain 1 orange, green, blue, purple
25 - Mountain 2 multipanel
26 - Mountain 3 pillars
27 - Laser areas (Glass Factory, Symmetry, Quarry, Treehouse, Swamp, Keep pressure plates, Town 25 dots)
28 - (low) Discarded panels
29 - (low) Tutorials // Dots, Stones, Swamp
30
31 - Keep Hedges become like hedges 4, intersection between path and panel
32 - Keep Pressure plates: Random with style
33
34 - No idea how to randomize:
35 - Symmetry transparent
36 - Desert
37 - Shadows
38 - Town (lattice, RGB area, snipes, triple)
39 - Monastery
40 - Jungle
41 - Bunker
42 - UTM
43 - Mountain 2 rainbow
44 - Challenge
45
46- Any RNG rerolls should be based on previous seed so that everyone can go to next seed easily
47
48- Stability. Duh. I need to clearly define the ownership between the randomizer and the game.
49
50- Challenge should have some way to 'reroll every run'
51- Challenge should not turn off after time limit?
52- Challenge triangles should not turn off
53
54
55
56
57*/
58
59
60
61
62
63
64/*
2 * Try to wire up both keep halves 65 * Try to wire up both keep halves
3 * Wire up both halves of symmetry laser 66 * Wire up both halves of symmetry laser
4 * Turn off floating panel in desert 67 * Turn off floating panel in desert
diff --git a/Source/Randomizer.h b/Source/Randomizer.h index 6029513..020851b 100644 --- a/Source/Randomizer.h +++ b/Source/Randomizer.h
@@ -45,7 +45,7 @@ private:
45 void ReassignTargets(const std::vector<int>& panels, const std::vector<int>& order, std::vector<int> targets = {}); 45 void ReassignTargets(const std::vector<int>& panels, const std::vector<int>& order, std::vector<int> targets = {});
46 void ReassignNames(const std::vector<int>& panels, const std::vector<int>& order); 46 void ReassignNames(const std::vector<int>& panels, const std::vector<int>& order);
47 47
48 std::shared_ptr<Memory> _memory = std::make_shared<Memory>("witness64_d3d11.exe"); 48 std::shared_ptr<Memory> _memory = std::make_shared<Memory>(L"witness64_d3d11.exe");
49 49
50 friend class SwapTests_Shipwreck_Test; 50 friend class SwapTests_Shipwreck_Test;
51}; 51};
diff --git a/Source/Source.vcxproj b/Source/Source.vcxproj index cf6756a..3e66f83 100644 --- a/Source/Source.vcxproj +++ b/Source/Source.vcxproj
@@ -23,32 +23,32 @@
23 <ProjectGuid>{6B5DF051-A51A-48CB-8ACD-C6FAD726019F}</ProjectGuid> 23 <ProjectGuid>{6B5DF051-A51A-48CB-8ACD-C6FAD726019F}</ProjectGuid>
24 <Keyword>Win32Proj</Keyword> 24 <Keyword>Win32Proj</Keyword>
25 <RootNamespace>Source</RootNamespace> 25 <RootNamespace>Source</RootNamespace>
26 <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion> 26 <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
27 </PropertyGroup> 27 </PropertyGroup>
28 <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> 28 <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
29 <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> 29 <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
30 <ConfigurationType>StaticLibrary</ConfigurationType> 30 <ConfigurationType>StaticLibrary</ConfigurationType>
31 <UseDebugLibraries>true</UseDebugLibraries> 31 <UseDebugLibraries>true</UseDebugLibraries>
32 <PlatformToolset>v141</PlatformToolset> 32 <PlatformToolset>v142</PlatformToolset>
33 <CharacterSet>Unicode</CharacterSet> 33 <CharacterSet>Unicode</CharacterSet>
34 </PropertyGroup> 34 </PropertyGroup>
35 <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> 35 <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
36 <ConfigurationType>StaticLibrary</ConfigurationType> 36 <ConfigurationType>StaticLibrary</ConfigurationType>
37 <UseDebugLibraries>false</UseDebugLibraries> 37 <UseDebugLibraries>false</UseDebugLibraries>
38 <PlatformToolset>v141</PlatformToolset> 38 <PlatformToolset>v142</PlatformToolset>
39 <WholeProgramOptimization>true</WholeProgramOptimization> 39 <WholeProgramOptimization>true</WholeProgramOptimization>
40 <CharacterSet>Unicode</CharacterSet> 40 <CharacterSet>Unicode</CharacterSet>
41 </PropertyGroup> 41 </PropertyGroup>
42 <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> 42 <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
43 <ConfigurationType>StaticLibrary</ConfigurationType> 43 <ConfigurationType>StaticLibrary</ConfigurationType>
44 <UseDebugLibraries>true</UseDebugLibraries> 44 <UseDebugLibraries>true</UseDebugLibraries>
45 <PlatformToolset>v141</PlatformToolset> 45 <PlatformToolset>v142</PlatformToolset>
46 <CharacterSet>Unicode</CharacterSet> 46 <CharacterSet>Unicode</CharacterSet>
47 </PropertyGroup> 47 </PropertyGroup>
48 <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> 48 <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
49 <ConfigurationType>StaticLibrary</ConfigurationType> 49 <ConfigurationType>StaticLibrary</ConfigurationType>
50 <UseDebugLibraries>false</UseDebugLibraries> 50 <UseDebugLibraries>false</UseDebugLibraries>
51 <PlatformToolset>v141</PlatformToolset> 51 <PlatformToolset>v142</PlatformToolset>
52 <WholeProgramOptimization>true</WholeProgramOptimization> 52 <WholeProgramOptimization>true</WholeProgramOptimization>
53 <CharacterSet>Unicode</CharacterSet> 53 <CharacterSet>Unicode</CharacterSet>
54 </PropertyGroup> 54 </PropertyGroup>
@@ -157,20 +157,10 @@
157 </Link> 157 </Link>
158 </ItemDefinitionGroup> 158 </ItemDefinitionGroup>
159 <ItemGroup> 159 <ItemGroup>
160 <ClInclude Include="ChallengeRandomizer.h" />
161 <ClInclude Include="json.hpp" />
162 <ClInclude Include="Memory.h" /> 160 <ClInclude Include="Memory.h" />
163 <ClInclude Include="Panel.h" />
164 <ClInclude Include="Panels.h" />
165 <ClInclude Include="Random.h" />
166 <ClInclude Include="Randomizer.h" />
167 </ItemGroup> 161 </ItemGroup>
168 <ItemGroup> 162 <ItemGroup>
169 <ClCompile Include="ChallengeRandomizer.cpp" />
170 <ClCompile Include="Memory.cpp" /> 163 <ClCompile Include="Memory.cpp" />
171 <ClCompile Include="Panel.cpp" />
172 <ClCompile Include="Random.cpp" />
173 <ClCompile Include="Randomizer.cpp" />
174 </ItemGroup> 164 </ItemGroup>
175 <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> 165 <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
176 <ImportGroup Label="ExtensionTargets"> 166 <ImportGroup Label="ExtensionTargets">