summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--App/Main.cpp26
-rw-r--r--Source/ChallengeRandomizer.cpp18
-rw-r--r--Source/Memory.cpp5
-rw-r--r--Source/Randomizer.cpp35
-rw-r--r--Source/Randomizer.h8
-rw-r--r--Source/Source.vcxproj5
-rw-r--r--Test/Temp.cpp64
-rw-r--r--Test/Test.vcxproj16
-rw-r--r--Test/packages.config2
9 files changed, 85 insertions, 94 deletions
diff --git a/App/Main.cpp b/App/Main.cpp index 89765fb..f8b7422 100644 --- a/App/Main.cpp +++ b/App/Main.cpp
@@ -8,18 +8,8 @@
8#include <thread> 8#include <thread>
9 9
10#include "Memory.h" 10#include "Memory.h"
11#include <Random.h> 11#include "Random.h"
12class Randomizer { 12#include "Randomizer.h"
13public:
14 Randomizer(const std::shared_ptr<Memory>&) {}
15 void Randomize(int seed) {
16 std::this_thread::sleep_for(std::chrono::milliseconds(1000));
17 }
18
19 void RandomizeChallenge(int seed) {
20 Randomize(seed);
21 }
22};
23 13
24// Heartbeat is defined to 0x401 by Memory.h 14// Heartbeat is defined to 0x401 by Memory.h
25#define RANDOMIZE_READY 0x402 15#define RANDOMIZE_READY 0x402
@@ -45,7 +35,10 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
45 switch ((ProcStatus)lParam) { 35 switch ((ProcStatus)lParam) {
46 case ProcStatus::NotRunning: 36 case ProcStatus::NotRunning:
47 // Shut down randomizer, wait for startup 37 // Shut down randomizer, wait for startup
48 if (g_randomizer) g_randomizer = nullptr; 38 if (g_randomizer) {
39 g_randomizer = nullptr;
40 EnableWindow(g_randomizerStatus, FALSE);
41 }
49 break; 42 break;
50 case ProcStatus::Running: 43 case ProcStatus::Running:
51 if (!g_randomizer) { 44 if (!g_randomizer) {
@@ -85,14 +78,15 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
85 SetWindowText(g_seed, std::to_wstring(seed).c_str()); 78 SetWindowText(g_seed, std::to_wstring(seed).c_str());
86 RedrawWindow(g_seed, NULL, NULL, RDW_UPDATENOW); 79 RedrawWindow(g_seed, NULL, NULL, RDW_UPDATENOW);
87 } 80 }
88 std::thread([hwnd, seed]{ 81 Random::SetSeed(seed);
82 std::thread([hwnd]{
89 if (IsDlgButtonChecked(hwnd, CHALLENGE_ONLY)) { 83 if (IsDlgButtonChecked(hwnd, CHALLENGE_ONLY)) {
90 SetWindowText(g_randomizerStatus, L"Randomizing Challenge..."); 84 SetWindowText(g_randomizerStatus, L"Randomizing Challenge...");
91 g_randomizer->RandomizeChallenge(seed); 85 g_randomizer->RandomizeChallenge();
92 PostMessage(g_hwnd, WM_COMMAND, RANDOMIZE_CHALLENGE_DONE, NULL); 86 PostMessage(g_hwnd, WM_COMMAND, RANDOMIZE_CHALLENGE_DONE, NULL);
93 } else { 87 } else {
94 SetWindowText(g_randomizerStatus, L"Randomizing..."); 88 SetWindowText(g_randomizerStatus, L"Randomizing...");
95 g_randomizer->Randomize(seed); 89 g_randomizer->Randomize();
96 PostMessage(g_hwnd, WM_COMMAND, RANDOMIZE_DONE, NULL); 90 PostMessage(g_hwnd, WM_COMMAND, RANDOMIZE_DONE, NULL);
97 } 91 }
98 }).detach(); 92 }).detach();
diff --git a/Source/ChallengeRandomizer.cpp b/Source/ChallengeRandomizer.cpp index fa9a234..de08885 100644 --- a/Source/ChallengeRandomizer.cpp +++ b/Source/ChallengeRandomizer.cpp
@@ -1,7 +1,7 @@
1#include "ChallengeRandomizer.h" 1#include "ChallengeRandomizer.h"
2#include <iostream> 2#include <iostream>
3 3
4// Reads the (relative!) address of the RNG, then shifts it to point at RNG2 4// Modify an opcode to use RNG2 instead of main RNG
5void ChallengeRandomizer::AdjustRng(int offset) { 5void ChallengeRandomizer::AdjustRng(int offset) {
6 int currentRng = _memory->ReadData<int>({offset}, 0x1)[0]; 6 int currentRng = _memory->ReadData<int>({offset}, 0x1)[0];
7 _memory->WriteData<int>({offset}, {currentRng + 0x20}); 7 _memory->WriteData<int>({offset}, {currentRng + 0x20});
@@ -39,22 +39,6 @@ ChallengeRandomizer::ChallengeRandomizer(const std::shared_ptr<Memory>& memory,
39 }); 39 });
40 40
41 if (!alreadyInjected) { 41 if (!alreadyInjected) {
42 // reveal_exit_hall
43 _memory->AddSigScan({0x45, 0x8B, 0xF7, 0x48, 0x8B, 0x4D}, [&](int index){
44 _memory->WriteData<byte>({index + 0x15}, {0xEB});
45 });
46
47 // begin_endgame_1
48 _memory->AddSigScan({0x83, 0x7C, 0x01, 0xD0, 0x04}, [&](int index){
49 if (GLOBALS == 0x5B28C0) { // Version differences.
50 index += 0x75;
51 } else if (GLOBALS == 0x62D0A0) {
52 index += 0x86;
53 }
54 // Overwriting a 74 12 opcode
55 _memory->WriteData<byte>({index}, {0xEB});
56 });
57
58 // shuffle_integers 42 // shuffle_integers
59 _memory->AddSigScan({0x48, 0x89, 0x5C, 0x24, 0x10, 0x56, 0x48, 0x83, 0xEC, 0x20, 0x48, 0x63, 0xDA, 0x48, 0x8B, 0xF1, 0x83, 0xFB, 0x01}, [&](int index) { 43 _memory->AddSigScan({0x48, 0x89, 0x5C, 0x24, 0x10, 0x56, 0x48, 0x83, 0xEC, 0x20, 0x48, 0x63, 0xDA, 0x48, 0x8B, 0xF1, 0x83, 0xFB, 0x01}, [&](int index) {
60 AdjustRng(index + 0x23); 44 AdjustRng(index + 0x23);
diff --git a/Source/Memory.cpp b/Source/Memory.cpp index 7b4b9c7..c3b89d0 100644 --- a/Source/Memory.cpp +++ b/Source/Memory.cpp
@@ -59,6 +59,8 @@ void Memory::Heartbeat(HWND window) {
59 int frameDelta = currentFrame - _previousFrame; 59 int frameDelta = currentFrame - _previousFrame;
60 _previousFrame = currentFrame; 60 _previousFrame = currentFrame;
61 if (frameDelta < 0 && currentFrame < 250) { 61 if (frameDelta < 0 && currentFrame < 250) {
62 // Some addresses (e.g. Entity Manager) may get re-allocated on newgame.
63 _computedAddresses.clear();
62 PostMessage(window, WM_COMMAND, HEARTBEAT, (LPARAM)ProcStatus::NewGame); 64 PostMessage(window, WM_COMMAND, HEARTBEAT, (LPARAM)ProcStatus::NewGame);
63 return; 65 return;
64 } 66 }
@@ -171,9 +173,6 @@ void* Memory::ComputeOffset(std::vector<int> offsets) {
171 // If the address is not yet computed, then compute it. 173 // If the address is not yet computed, then compute it.
172 uintptr_t computedAddress = 0; 174 uintptr_t computedAddress = 0;
173 if (bool result = !ReadProcessMemory(_handle, reinterpret_cast<LPVOID>(cumulativeAddress), &computedAddress, sizeof(uintptr_t), NULL)) { 175 if (bool result = !ReadProcessMemory(_handle, reinterpret_cast<LPVOID>(cumulativeAddress), &computedAddress, sizeof(uintptr_t), NULL)) {
174 if (GetLastError() == ERROR_PARTIAL_COPY) {
175 int k = 1;
176 }
177 ThrowError(); 176 ThrowError();
178 } 177 }
179 _computedAddresses[cumulativeAddress] = computedAddress; 178 _computedAddresses[cumulativeAddress] = computedAddress;
diff --git a/Source/Randomizer.cpp b/Source/Randomizer.cpp index 71ec89b..9b877cd 100644 --- a/Source/Randomizer.cpp +++ b/Source/Randomizer.cpp
@@ -109,23 +109,26 @@ int find(const std::vector<T> &data, T search, size_t startIndex = 0) {
109 throw std::exception("Couldn't find value in data!"); 109 throw std::exception("Couldn't find value in data!");
110} 110}
111 111
112bool Randomizer::GameIsRandomized() { 112Randomizer::Randomizer(const std::shared_ptr<Memory>& memory) : _memory(memory) {}
113 int currentFrame = _memory->GetCurrentFrame(); 113
114 if (currentFrame >= _lastRandomizedFrame) { 114void Randomizer::Randomize() {
115 // Time went forwards, presumably we're still on the same save 115 // reveal_exit_hall - Prevent actually ending the game (EEE)
116 _lastRandomizedFrame = currentFrame; 116 _memory->AddSigScan({0x45, 0x8B, 0xF7, 0x48, 0x8B, 0x4D}, [&](int index){
117 return true; 117 _memory->WriteData<byte>({index + 0x15}, {0xEB}); // jz -> jmp
118 } 118 });
119 // Otherwise, time has gone backwards, so assume new game 119
120 return false; 120 // begin_endgame_1 - Prevent actually ending the game (Wonkavator)
121} 121 _memory->AddSigScan({0x83, 0x7C, 0x01, 0xD0, 0x04}, [&](int index){
122 122 if (GLOBALS == 0x5B28C0) { // Version differences.
123void Randomizer::Randomize() 123 index += 0x75;
124{ 124 } else if (GLOBALS == 0x62D0A0) {
125 if (GameIsRandomized()) return; // Nice sanity check, but should be unnecessary (since Main checks anyways) 125 index += 0x86;
126 _lastRandomizedFrame = _memory->GetCurrentFrame(); 126 }
127 _memory->WriteData<byte>({index}, {0xEB}); // jz -> jmp
128 });
129 // Sig scans will be run during challenge randomization.
127 130
128 // Seed challenge first for future-proofing (?) 131 // Seed challenge first for future-proofing
129 RandomizeChallenge(); 132 RandomizeChallenge();
130 133
131 // Content swaps -- must happen before squarePanels 134 // Content swaps -- must happen before squarePanels
diff --git a/Source/Randomizer.h b/Source/Randomizer.h index 020851b..d9ea700 100644 --- a/Source/Randomizer.h +++ b/Source/Randomizer.h
@@ -4,15 +4,14 @@
4 4
5class Randomizer { 5class Randomizer {
6public: 6public:
7 Randomizer(const std::shared_ptr<Memory>& memory);
7 void Randomize(); 8 void Randomize();
8 bool GameIsRandomized(); 9 void RandomizeChallenge();
9 10
10 void AdjustSpeed(); 11 void AdjustSpeed();
11 void RandomizeLasers(); 12 void RandomizeLasers();
12 void PreventSnipes(); 13 void PreventSnipes();
13 14
14 void ClearOffsets() {_memory->ClearOffsets();}
15
16 enum SWAP { 15 enum SWAP {
17 NONE = 0, 16 NONE = 0,
18 TARGETS = 1, 17 TARGETS = 1,
@@ -36,7 +35,6 @@ private:
36 void RandomizeJungle(); 35 void RandomizeJungle();
37 void RandomizeSwamp(); 36 void RandomizeSwamp();
38 void RandomizeMountain(); 37 void RandomizeMountain();
39 void RandomizeChallenge();
40 void RandomizeAudioLogs(); 38 void RandomizeAudioLogs();
41 39
42 void Randomize(std::vector<int>& panels, int flags); 40 void Randomize(std::vector<int>& panels, int flags);
@@ -45,7 +43,7 @@ private:
45 void ReassignTargets(const std::vector<int>& panels, const std::vector<int>& order, std::vector<int> targets = {}); 43 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); 44 void ReassignNames(const std::vector<int>& panels, const std::vector<int>& order);
47 45
48 std::shared_ptr<Memory> _memory = std::make_shared<Memory>(L"witness64_d3d11.exe"); 46 std::shared_ptr<Memory> _memory;
49 47
50 friend class SwapTests_Shipwreck_Test; 48 friend class SwapTests_Shipwreck_Test;
51}; 49};
diff --git a/Source/Source.vcxproj b/Source/Source.vcxproj index e7f716c..b60349c 100644 --- a/Source/Source.vcxproj +++ b/Source/Source.vcxproj
@@ -157,12 +157,17 @@
157 </Link> 157 </Link>
158 </ItemDefinitionGroup> 158 </ItemDefinitionGroup>
159 <ItemGroup> 159 <ItemGroup>
160 <ClInclude Include="ChallengeRandomizer.h" />
160 <ClInclude Include="Memory.h" /> 161 <ClInclude Include="Memory.h" />
162 <ClInclude Include="Panels.h" />
161 <ClInclude Include="Random.h" /> 163 <ClInclude Include="Random.h" />
164 <ClInclude Include="Randomizer.h" />
162 </ItemGroup> 165 </ItemGroup>
163 <ItemGroup> 166 <ItemGroup>
167 <ClCompile Include="ChallengeRandomizer.cpp" />
164 <ClCompile Include="Memory.cpp" /> 168 <ClCompile Include="Memory.cpp" />
165 <ClCompile Include="Random.cpp" /> 169 <ClCompile Include="Random.cpp" />
170 <ClCompile Include="Randomizer.cpp" />
166 </ItemGroup> 171 </ItemGroup>
167 <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> 172 <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
168 <ImportGroup Label="ExtensionTargets"> 173 <ImportGroup Label="ExtensionTargets">
diff --git a/Test/Temp.cpp b/Test/Temp.cpp index 6a45140..3b31539 100644 --- a/Test/Temp.cpp +++ b/Test/Temp.cpp
@@ -6,45 +6,45 @@
6class Temp : public testing::Test 6class Temp : public testing::Test
7{ 7{
8protected: 8protected:
9 std::vector<char> ReadSubtitles(int size) { 9 std::shared_ptr<Memory> _memory = std::make_shared<Memory>("witness64_d3d11.exe");
10 Memory memory("witness64_d3d11.exe"); 10 // std::vector<char> ReadSubtitles(int size) {
11 std::vector<char> data; 11 // Memory memory("witness64_d3d11.exe");
12 data.resize(size); 12 // std::vector<char> data;
13 ReadProcessMemory(memory._handle, (LPVOID)0x3D89F000, &data[0], sizeof(char) * size, nullptr); 13 // data.resize(size);
14 return data; 14 // ReadProcessMemory(memory._handle, (LPVOID)0x3D89F000, &data[0], sizeof(char) * size, nullptr);
15 } 15 // return data;
16 // }
16}; 17};
17 18
18TEST(SwapTests, Shipwreck) { 19// TEST_F(Temp, Shipwreck) {
19 Randomizer randomizer; 20// Randomizer randomizer(_memory);
20 int shipwreck = 0xAFB; 21// int shipwreck = 0xAFB;
21 int thEntry = 0x288C; 22// int thEntry = 0x288C;
22 int si1 = 0x00000022; 23// int si1 = 0x00000022;
23 int bu1 = 0x6; 24// int bu1 = 0x6;
24 int td1 = 0x5D; 25// int td1 = 0x5D;
25 int ypp = 0x33EA; 26// int ypp = 0x33EA;
26 int ramp_activation_shapers = 0x21D5; 27// int ramp_activation_shapers = 0x21D5;
27 int mill_upper_5 = 0x146C; 28// int mill_upper_5 = 0x146C;
28 int mill_entry_left = 0x1E5A; 29// int mill_entry_left = 0x1E5A;
29 int mill_upper_7 = 0x03686; 30// int mill_upper_7 = 0x03686;
30 31//
31 randomizer.SwapPanels(ypp, mill_upper_7, Randomizer::SWAP::LINES); 32// randomizer.SwapPanels(ypp, mill_upper_7, Randomizer::SWAP::LINES);
32 33// }
33}
34 34
35/* 35/*
36TEST_F(Temp, Extract) { 36TEST_F(Temp, Extract) {
37// std::vector<byte> data = ReadSubtitles(166480); 37// std::vector<byte> data = ReadSubtitles(166480);
38 std::vector<char> data = ReadSubtitles(166480); 38 std::vector<char> data = ReadSubtitles(166480);
39 std::ofstream file("raw.txt"); 39 std::ofstream file("raw.txt");
40 ASSERT_TRUE(file.is_open()); 40 ASSERT_TRUE(file.is_open());
41 41
42 std::string hex = "0123456789ABCDEF"; 42 std::string hex = "0123456789ABCDEF";
43 for (int i=0; i<data.size(); i++) { 43 for (int i=0; i<data.size(); i++) {
44 if (data[i] == '\r') continue; 44 if (data[i] == '\r') continue;
45 file << data[i]; 45 file << data[i];
46 46
47 } 47 }
48 file.close(); 48 file.close();
49} 49}
50*/ \ No newline at end of file 50*/ \ No newline at end of file
diff --git a/Test/Test.vcxproj b/Test/Test.vcxproj index 1beb5a4..d36f4af 100644 --- a/Test/Test.vcxproj +++ b/Test/Test.vcxproj
@@ -38,12 +38,16 @@
38 </ProjectReference> 38 </ProjectReference>
39 </ItemGroup> 39 </ItemGroup>
40 <ItemGroup> 40 <ItemGroup>
41 <ClCompile Include="RandomTests.cpp" />
42 <ClCompile Include="Temp.cpp" />
43 </ItemGroup>
44 <ItemGroup>
41 <None Include="packages.config" /> 45 <None Include="packages.config" />
42 </ItemGroup> 46 </ItemGroup>
43 <ItemDefinitionGroup /> 47 <ItemDefinitionGroup />
44 <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> 48 <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
45 <ImportGroup Label="ExtensionTargets"> 49 <ImportGroup Label="ExtensionTargets">
46 <Import Project="..\packages\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-static.1.8.0\build\native\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-static.targets" Condition="Exists('..\packages\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-static.1.8.0\build\native\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-static.targets')" /> 50 <Import Project="..\packages\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-static.1.8.1\build\native\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-static.targets" Condition="Exists('..\packages\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-static.1.8.1\build\native\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-static.targets')" />
47 </ImportGroup> 51 </ImportGroup>
48 <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> 52 <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
49 <ClCompile> 53 <ClCompile>
@@ -51,7 +55,8 @@
51 <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> 55 <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
52 <Optimization>Disabled</Optimization> 56 <Optimization>Disabled</Optimization>
53 <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> 57 <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
54 <MinimalRebuild>true</MinimalRebuild> 58 <MinimalRebuild>
59 </MinimalRebuild>
55 <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> 60 <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
56 <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> 61 <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
57 <WarningLevel>Level3</WarningLevel> 62 <WarningLevel>Level3</WarningLevel>
@@ -70,7 +75,8 @@
70 <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> 75 <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
71 <Optimization>Disabled</Optimization> 76 <Optimization>Disabled</Optimization>
72 <PreprocessorDefinitions>X64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> 77 <PreprocessorDefinitions>X64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
73 <MinimalRebuild>true</MinimalRebuild> 78 <MinimalRebuild>
79 </MinimalRebuild>
74 <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> 80 <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
75 <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> 81 <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
76 <WarningLevel>Level3</WarningLevel> 82 <WarningLevel>Level3</WarningLevel>
@@ -94,6 +100,7 @@
94 <AdditionalIncludeDirectories>..\Source;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> 100 <AdditionalIncludeDirectories>..\Source;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
95 <DisableSpecificWarnings>4996</DisableSpecificWarnings> 101 <DisableSpecificWarnings>4996</DisableSpecificWarnings>
96 <TreatWarningAsError>true</TreatWarningAsError> 102 <TreatWarningAsError>true</TreatWarningAsError>
103 <MinimalRebuild />
97 </ClCompile> 104 </ClCompile>
98 <Link> 105 <Link>
99 <GenerateDebugInformation>true</GenerateDebugInformation> 106 <GenerateDebugInformation>true</GenerateDebugInformation>
@@ -113,6 +120,7 @@
113 <AdditionalIncludeDirectories>..\Source;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> 120 <AdditionalIncludeDirectories>..\Source;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
114 <DisableSpecificWarnings>4996</DisableSpecificWarnings> 121 <DisableSpecificWarnings>4996</DisableSpecificWarnings>
115 <TreatWarningAsError>true</TreatWarningAsError> 122 <TreatWarningAsError>true</TreatWarningAsError>
123 <MinimalRebuild />
116 </ClCompile> 124 </ClCompile>
117 <Link> 125 <Link>
118 <GenerateDebugInformation>true</GenerateDebugInformation> 126 <GenerateDebugInformation>true</GenerateDebugInformation>
@@ -125,6 +133,6 @@
125 <PropertyGroup> 133 <PropertyGroup>
126 <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> 134 <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
127 </PropertyGroup> 135 </PropertyGroup>
128 <Error Condition="!Exists('..\packages\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-static.1.8.0\build\native\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-static.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-static.1.8.0\build\native\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-static.targets'))" /> 136 <Error Condition="!Exists('..\packages\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-static.1.8.1\build\native\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-static.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-static.1.8.1\build\native\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-static.targets'))" />
129 </Target> 137 </Target>
130</Project> \ No newline at end of file 138</Project> \ No newline at end of file
diff --git a/Test/packages.config b/Test/packages.config index 1dcab87..a412a41 100644 --- a/Test/packages.config +++ b/Test/packages.config
@@ -1,4 +1,4 @@
1<?xml version="1.0" encoding="utf-8"?> 1<?xml version="1.0" encoding="utf-8"?>
2<packages> 2<packages>
3 <package id="Microsoft.googletest.v140.windesktop.msvcstl.static.rt-static" version="1.8.0" targetFramework="native" /> 3 <package id="Microsoft.googletest.v140.windesktop.msvcstl.static.rt-static" version="1.8.1" targetFramework="native" />
4</packages> \ No newline at end of file 4</packages> \ No newline at end of file