summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--WitnessRandomizer/Memory.cpp14
-rw-r--r--WitnessRandomizer/Memory.h20
-rw-r--r--WitnessRandomizer/Panels.h26
-rw-r--r--WitnessRandomizer/WitnessRandomizer.cpp32
-rw-r--r--WitnessRandomizer/WitnessRandomizer.h6
-rw-r--r--WitnessRandomizer/WitnessRandomizer.vcxproj8
-rw-r--r--WitnessRandomizerInstaller/WitnessRandomizerInstaller.sln41
-rw-r--r--WitnessRandomizerInstaller/WitnessRandomizerInstaller.vdproj697
8 files changed, 794 insertions, 50 deletions
diff --git a/WitnessRandomizer/Memory.cpp b/WitnessRandomizer/Memory.cpp index 6077691..0afeded 100644 --- a/WitnessRandomizer/Memory.cpp +++ b/WitnessRandomizer/Memory.cpp
@@ -47,30 +47,28 @@ Memory::~Memory() {
47 CloseHandle(_handle); 47 CloseHandle(_handle);
48} 48}
49 49
50// Private methods:
51
52void Memory::ThrowError() { 50void Memory::ThrowError() {
53 std::string message(256, '\0'); 51 std::string message(256, '\0');
54 FormatMessageA(4096, NULL, GetLastError(), 1024, &message[0], static_cast<DWORD>(message.length()), NULL); 52 FormatMessageA(4096, nullptr, GetLastError(), 1024, &message[0], static_cast<DWORD>(message.length()), nullptr);
55 std::cout << message.c_str() << std::endl; 53 std::cout << message.c_str() << std::endl;
56 exit(EXIT_FAILURE); 54 exit(EXIT_FAILURE);
57} 55}
58 56
59uintptr_t Memory::ComputeOffset(std::vector<int> offsets) 57void* Memory::ComputeOffset(std::vector<int> offsets)
60{ 58{
61 // Leave off the last offset, since it will be either read/write, and may not be of type unitptr_t. 59 // Leave off the last offset, since it will be either read/write, and may not be of type unitptr_t.
62 int final_offset = offsets.back(); 60 int final_offset = offsets.back();
63 offsets.pop_back(); 61 offsets.pop_back();
64 62
65 uintptr_t cumulativeAddress = _baseAddress; 63 uintptr_t cumulativeAddress = _baseAddress;
66 for (int offset : offsets) { 64 for (const int offset : offsets) {
67 cumulativeAddress += offset; 65 cumulativeAddress += offset;
68 66
69 auto search = _computedAddresses.find(cumulativeAddress); 67 const auto search = _computedAddresses.find(cumulativeAddress);
70 if (search == std::end(_computedAddresses)) { 68 if (search == std::end(_computedAddresses)) {
71 // If the address is not yet computed, then compute it. 69 // If the address is not yet computed, then compute it.
72 uintptr_t computedAddress = 0; 70 uintptr_t computedAddress = 0;
73 if (!ReadProcessMemory(_handle, (LPVOID)cumulativeAddress, &computedAddress, sizeof(uintptr_t), NULL)) { 71 if (!ReadProcessMemory(_handle, reinterpret_cast<LPVOID>(cumulativeAddress), &computedAddress, sizeof(uintptr_t), NULL)) {
74 ThrowError(); 72 ThrowError();
75 } 73 }
76 _computedAddresses[cumulativeAddress] = computedAddress; 74 _computedAddresses[cumulativeAddress] = computedAddress;
@@ -78,5 +76,5 @@ uintptr_t Memory::ComputeOffset(std::vector<int> offsets)
78 76
79 cumulativeAddress = _computedAddresses[cumulativeAddress]; 77 cumulativeAddress = _computedAddresses[cumulativeAddress];
80 } 78 }
81 return cumulativeAddress + final_offset; 79 return reinterpret_cast<void*>(cumulativeAddress + final_offset);
82} 80}
diff --git a/WitnessRandomizer/Memory.h b/WitnessRandomizer/Memory.h index 6f5b8b7..8e8bbc3 100644 --- a/WitnessRandomizer/Memory.h +++ b/WitnessRandomizer/Memory.h
@@ -2,9 +2,6 @@
2#include <vector> 2#include <vector>
3#include <map> 3#include <map>
4#include <windows.h> 4#include <windows.h>
5#include <thread>
6#include <chrono>
7using namespace std::chrono_literals;
8 5
9// https://github.com/erayarslan/WriteProcessMemory-Example 6// https://github.com/erayarslan/WriteProcessMemory-Example
10// http://stackoverflow.com/q/32798185 7// http://stackoverflow.com/q/32798185
@@ -16,16 +13,18 @@ public:
16 Memory(const std::string& processName); 13 Memory(const std::string& processName);
17 ~Memory(); 14 ~Memory();
18 15
16 Memory(const Memory& memory) = delete;
17 Memory& operator=(const Memory& other) = delete;
18
19 template<class T> 19 template<class T>
20 std::vector<T> ReadData(const std::vector<int>& offsets, int numItems) { 20 std::vector<T> ReadData(const std::vector<int>& offsets, size_t numItems) {
21 std::vector<T> data; 21 std::vector<T> data;
22 data.resize(numItems); 22 data.resize(numItems);
23 for (int i=0; i<5; i++) { 23 for (int i=0; i<5; i++) {
24 if (ReadProcessMemory(_handle, (LPVOID)ComputeOffset(offsets), &data[0], sizeof(T) * numItems, NULL)) 24 if (ReadProcessMemory(_handle, ComputeOffset(offsets), &data[0], sizeof(T) * numItems, nullptr))
25 { 25 {
26 return data; 26 return data;
27 } 27 }
28 // std::this_thread::sleep_for(10ms);
29 } 28 }
30 ThrowError(); 29 ThrowError();
31 return {}; 30 return {};
@@ -34,10 +33,9 @@ public:
34 template <class T> 33 template <class T>
35 void WriteData(const std::vector<int>& offsets, const std::vector<T>& data) { 34 void WriteData(const std::vector<int>& offsets, const std::vector<T>& data) {
36 for (int i=0; i<5; i++) { 35 for (int i=0; i<5; i++) {
37 if (WriteProcessMemory(_handle, (LPVOID)ComputeOffset(offsets), &data[0], sizeof(T) * data.size(), NULL)) { 36 if (WriteProcessMemory(_handle, ComputeOffset(offsets), &data[0], sizeof(T) * data.size(), nullptr)) {
38 return; 37 return;
39 } 38 }
40 // std::this_thread::sleep_for(10ms);
41 } 39 }
42 ThrowError(); 40 ThrowError();
43 } 41 }
@@ -45,9 +43,9 @@ public:
45private: 43private:
46 void ThrowError(); 44 void ThrowError();
47 45
48 uintptr_t ComputeOffset(std::vector<int> offsets); 46 void* ComputeOffset(std::vector<int> offsets);
49 47
50 std::map<uintptr_t, uintptr_t> _computedAddresses; 48 std::map<uintptr_t, uintptr_t> _computedAddresses;
51 uintptr_t _baseAddress; 49 uintptr_t _baseAddress = 0;
52 HANDLE _handle; 50 HANDLE _handle = nullptr;
53}; \ No newline at end of file 51}; \ No newline at end of file
diff --git a/WitnessRandomizer/Panels.h b/WitnessRandomizer/Panels.h index cd815bc..2995170 100644 --- a/WitnessRandomizer/Panels.h +++ b/WitnessRandomizer/Panels.h
@@ -2,7 +2,7 @@
2#include <vector> 2#include <vector>
3 3
4// Some of these (the puzzle ones) are duplicated elsewhere 4// Some of these (the puzzle ones) are duplicated elsewhere
5std::vector<int> lasers = { 5const std::vector<int> lasers = {
6 0x0360D, // Symmetry 6 0x0360D, // Symmetry
7 0x03615, // Swamp 7 0x03615, // Swamp
8 0x09DE0, // Bunker 8 0x09DE0, // Bunker
@@ -18,7 +18,7 @@ std::vector<int> lasers = {
18}; 18};
19 19
20// Note: Some of these (non-desert) are duplicated elsewhere 20// Note: Some of these (non-desert) are duplicated elsewhere
21std::vector<int> burnablePanels = { 21const std::vector<int> burnablePanels = {
22 0x17D9C, // Treehouse Yellow 7 22 0x17D9C, // Treehouse Yellow 7
23 0x17DC2, // Treehouse Yellow 8 23 0x17DC2, // Treehouse Yellow 8
24 0x17DC4, // Treehouse Yellow 9 24 0x17DC4, // Treehouse Yellow 9
@@ -63,7 +63,7 @@ std::vector<int> burnablePanels = {
63 63
64// Note: Some of these (non-controls) are duplicated elsewhere 64// Note: Some of these (non-controls) are duplicated elsewhere
65// TODO: Gave up 65// TODO: Gave up
66std::vector<int> leftRightPanels = { 66const std::vector<int> leftRightPanels = {
67 0x01A54, // Glass Factory Entry 67 0x01A54, // Glass Factory Entry
68 0x00086, // Glass Factory Vertical Symmetry 1 68 0x00086, // Glass Factory Vertical Symmetry 1
69 0x00087, // Glass Factory Vertical Symmetry 2 69 0x00087, // Glass Factory Vertical Symmetry 2
@@ -77,7 +77,7 @@ std::vector<int> leftRightPanels = {
77}; 77};
78 78
79// Note: Some of these (non-controls) are duplicated elsewhere 79// Note: Some of these (non-controls) are duplicated elsewhere
80std::vector<int> upDownPanels = { 80const std::vector<int> upDownPanels = {
81 0x0008D, // Glass Factory Rotational Symmetry 1 81 0x0008D, // Glass Factory Rotational Symmetry 1
82 0x00081, // Glass Factory Rotational Symmetry 2 82 0x00081, // Glass Factory Rotational Symmetry 2
83 0x00083, // Glass Factory Rotational Symmetry 3 83 0x00083, // Glass Factory Rotational Symmetry 3
@@ -100,7 +100,7 @@ std::vector<int> upDownPanels = {
100}; 100};
101 101
102// Note: Some of these (non-controls) are duplicated elsewhere 102// Note: Some of these (non-controls) are duplicated elsewhere
103std::vector<int> leftForwardRightPanels = { 103const std::vector<int> leftForwardRightPanels = {
104// 0x00075, // Symmetry Island Colored Dots 3 104// 0x00075, // Symmetry Island Colored Dots 3
105// 0x288EA, // UTM Perspective 1 105// 0x288EA, // UTM Perspective 1
106// 0x288FC, // UTM Perspective 2 106// 0x288FC, // UTM Perspective 2
@@ -112,7 +112,7 @@ std::vector<int> leftForwardRightPanels = {
112 0x17E52, // Treehouse Green 4 112 0x17E52, // Treehouse Green 4
113}; 113};
114 114
115std::vector<int> pillars = { 115const std::vector<int> pillars = {
116 0x0383D, // Mountain 3 Left Pillar 1 116 0x0383D, // Mountain 3 Left Pillar 1
117 0x0383F, // Mountain 3 Left Pillar 2 117 0x0383F, // Mountain 3 Left Pillar 2
118 0x03859, // Mountain 3 Left Pillar 3 118 0x03859, // Mountain 3 Left Pillar 3
@@ -126,7 +126,7 @@ std::vector<int> pillars = {
126// 0x1C319, // Challenge Right Pillar 126// 0x1C319, // Challenge Right Pillar
127}; 127};
128 128
129std::vector<int> mountainMultipanel = { 129const std::vector<int> mountainMultipanel = {
130 0x09FCC, // Mountain 2 Multipanel 1 130 0x09FCC, // Mountain 2 Multipanel 1
131 0x09FCE, // Mountain 2 Multipanel 2 131 0x09FCE, // Mountain 2 Multipanel 2
132 0x09FCF, // Mountain 2 Multipanel 3 132 0x09FCF, // Mountain 2 Multipanel 3
@@ -135,7 +135,7 @@ std::vector<int> mountainMultipanel = {
135 0x09FD2, // Mountain 2 Multipanel 6 135 0x09FD2, // Mountain 2 Multipanel 6
136}; 136};
137 137
138std::vector<int> squarePanels = { 138const std::vector<int> squarePanels = {
139 0x00064, // Tutorial Straight 139 0x00064, // Tutorial Straight
140 0x00182, // Tutorial Bend 140 0x00182, // Tutorial Bend
141 0x0A3B2, // Tutorial Back Right 141 0x0A3B2, // Tutorial Back Right
@@ -453,7 +453,7 @@ std::vector<int> squarePanels = {
453 0x09E85, // Tunnels Town Shortcut 453 0x09E85, // Tunnels Town Shortcut
454}; 454};
455 455
456std::vector<int> shadowsPanels = { 456const std::vector<int> shadowsPanels = {
457 0x198B5, // Shadows Tutorial 1 457 0x198B5, // Shadows Tutorial 1
458 0x198BD, // Shadows Tutorial 2 458 0x198BD, // Shadows Tutorial 2
459 0x198BF, // Shadows Tutorial 3 459 0x198BF, // Shadows Tutorial 3
@@ -478,7 +478,7 @@ std::vector<int> shadowsPanels = {
478 0x19650, // Shadows Laser 478 0x19650, // Shadows Laser
479}; 479};
480 480
481std::vector<int> monasteryPanels = { 481const std::vector<int> monasteryPanels = {
482 0x00B10, // Monastery Left Door 482 0x00B10, // Monastery Left Door
483 0x00290, // Monastery Exterior 1 483 0x00290, // Monastery Exterior 1
484 0x00C92, // Monastery Right Door 484 0x00C92, // Monastery Right Door
@@ -493,7 +493,7 @@ std::vector<int> monasteryPanels = {
493 0x17CA4, // Monastery Laser 493 0x17CA4, // Monastery Laser
494}; 494};
495 495
496std::vector<int> bunkerPanels = { 496const std::vector<int> bunkerPanels = {
497 0x09F7D, // Bunker Tutorial 1 497 0x09F7D, // Bunker Tutorial 1
498 0x09FDC, // Bunker Tutorial 2 498 0x09FDC, // Bunker Tutorial 2
499 0x09FF7, // Bunker Tutorial 3 499 0x09FF7, // Bunker Tutorial 3
@@ -514,7 +514,7 @@ std::vector<int> bunkerPanels = {
514 0x0A079, // Bunker Elevator 514 0x0A079, // Bunker Elevator
515}; 515};
516 516
517std::vector<int> junglePanels = { 517const std::vector<int> junglePanels = {
518 0x002C4, // Jungle Waves 1 518 0x002C4, // Jungle Waves 1
519 0x00767, // Jungle Waves 2 519 0x00767, // Jungle Waves 2
520 0x002C6, // Jungle Waves 3 520 0x002C6, // Jungle Waves 3
@@ -533,7 +533,7 @@ std::vector<int> junglePanels = {
533}; 533};
534 534
535// There might be something to do with these, I haven't decided yet. 535// There might be something to do with these, I haven't decided yet.
536std::vector<int> nothingPanels = { 536const std::vector<int> nothingPanels = {
537// Doors & Shortcuts & Shortcut doors & Door controls 537// Doors & Shortcuts & Shortcut doors & Door controls
538 0x0C339, // Desert Surface Door 538 0x0C339, // Desert Surface Door
539 0x0A249, // Desert Pond Exit Door 539 0x0A249, // Desert Pond Exit Door
diff --git a/WitnessRandomizer/WitnessRandomizer.cpp b/WitnessRandomizer/WitnessRandomizer.cpp index efe18b5..d71cc21 100644 --- a/WitnessRandomizer/WitnessRandomizer.cpp +++ b/WitnessRandomizer/WitnessRandomizer.cpp
@@ -1,5 +1,6 @@
1/* 1/*
2 * BUGS: 2 * BUGS:
3 * Shipwreck vault fails, possibly because of dot_reflection?
3 * Treehouse pivots *should* work, but I need to not copy style_flags. 4 * Treehouse pivots *should* work, but I need to not copy style_flags.
4 This seems to cause crashes when pivots appear elsewhere in the world. 5 This seems to cause crashes when pivots appear elsewhere in the world.
5 * FEATURES: 6 * FEATURES:
@@ -17,23 +18,26 @@
17#include <string> 18#include <string>
18#include <iostream> 19#include <iostream>
19#include <numeric> 20#include <numeric>
21#include <chrono>
20 22
21template <class T> 23template <class T>
22int find(const std::vector<T> &data, T search, int startIndex = 0) { 24size_t find(const std::vector<T> &data, T search, size_t startIndex = 0) {
23 for (int i=startIndex ; i<data.size(); i++) { 25 for (size_t i=startIndex ; i<data.size(); i++) {
24 if (data[i] == search) return i; 26 if (data[i] == search) return i;
25 } 27 }
26 return -1; 28 std::cout << "Couldn't find " << search << " in data!" << std::endl;
29 exit(-1);
27} 30}
28 31
29int main(int argc, char** argv) 32int main(int argc, char** argv)
30{ 33{
34
31 WitnessRandomizer randomizer = WitnessRandomizer(); 35 WitnessRandomizer randomizer = WitnessRandomizer();
32 36
33 if (argc == 2) { 37 if (argc == 2) {
34 srand(atoi(argv[1])); // Seed from the command line 38 srand(atoi(argv[1])); // Seed from the command line
35 } else { 39 } else {
36 int seed = time(0) % (1 << 16); // Seed from the time in milliseconds 40 int seed = time(nullptr) % (1 << 16); // Seed from the time in milliseconds
37 std::cout << "Selected seed: " << seed << std::endl; 41 std::cout << "Selected seed: " << seed << std::endl;
38 srand(seed); 42 srand(seed);
39 } 43 }
@@ -71,7 +75,7 @@ int main(int argc, char** argv)
71 // Glass 1 will become door + glass 1, due to the targetting system 75 // Glass 1 will become door + glass 1, due to the targetting system
72 randomizer.RandomizeRange(randomOrder, SWAP_NONE, 1, 10); 76 randomizer.RandomizeRange(randomOrder, SWAP_NONE, 1, 10);
73 // Randomize Glass 1-3 into everything after the door 77 // Randomize Glass 1-3 into everything after the door
74 int glassDoorIndex = find(randomOrder, 9) + 1; 78 const size_t glassDoorIndex = find(randomOrder, 9) + 1;
75 randomizer.RandomizeRange(randomOrder, SWAP_NONE, glassDoorIndex, 12); 79 randomizer.RandomizeRange(randomOrder, SWAP_NONE, glassDoorIndex, 12);
76 randomizer.ReassignTargets(bunkerPanels, randomOrder); 80 randomizer.ReassignTargets(bunkerPanels, randomOrder);
77 81
@@ -121,17 +125,17 @@ WitnessRandomizer::WitnessRandomizer()
121 WritePanelData<float>(0x002C2, CURSOR_SPEED_SCALE, {1.0}); 125 WritePanelData<float>(0x002C2, CURSOR_SPEED_SCALE, {1.0});
122} 126}
123 127
124void WitnessRandomizer::Randomize(std::vector<int> &panels, int flags) { 128void WitnessRandomizer::Randomize(const std::vector<int>& panels, int flags) {
125 return RandomizeRange(panels, flags, 0, panels.size()); 129 return RandomizeRange(panels, flags, 0, panels.size());
126} 130}
127 131
128// Range is [start, end) 132// Range is [start, end)
129void WitnessRandomizer::RandomizeRange(std::vector<int> &panels, int flags, size_t startIndex, size_t endIndex) { 133void WitnessRandomizer::RandomizeRange(std::vector<int> panels, int flags, size_t startIndex, size_t endIndex) {
130 if (panels.size() == 0) return; 134 if (panels.size() == 0) return;
131 if (startIndex >= endIndex) return; 135 if (startIndex >= endIndex) return;
132 if (endIndex >= panels.size()) endIndex = panels.size(); 136 if (endIndex >= panels.size()) endIndex = panels.size();
133 for (size_t i = endIndex-1; i > startIndex+1; i--) { 137 for (size_t i = endIndex-1; i > startIndex+1; i--) {
134 size_t target = rand() % (i - startIndex) + startIndex; 138 const size_t target = rand() % (i - startIndex) + startIndex;
135 if (i != target) { 139 if (i != target) {
136 // std::cout << "Swapping panels " << std::hex << panels[i] << " and " << std::hex << panels[target] << std::endl; 140 // std::cout << "Swapping panels " << std::hex << panels[i] << " and " << std::hex << panels[target] << std::endl;
137 SwapPanels(panels[i], panels[target], flags); 141 SwapPanels(panels[i], panels[target], flags);
@@ -215,17 +219,17 @@ void WitnessRandomizer::SwapPanels(int panel1, int panel2, int flags) {
215} 219}
216 220
217void WitnessRandomizer::ReassignTargets(const std::vector<int>& panels, const std::vector<int>& order) { 221void WitnessRandomizer::ReassignTargets(const std::vector<int>& panels, const std::vector<int>& order) {
222 // This list is offset by 1, so the target of the Nth panel is in position N (aka the N+1th element)
223 // The first panel may not have a wire to power it, so we use the panel ID itself.
218 std::vector<int> targetToActivatePanel = {panels[0] + 1}; 224 std::vector<int> targetToActivatePanel = {panels[0] + 1};
219 for (int panel : panels) { 225 for (const int panel : panels) {
220 int target = ReadPanelData<int>(panel, TARGET, 1)[0]; 226 int target = ReadPanelData<int>(panel, TARGET, 1)[0];
221 targetToActivatePanel.push_back(target); 227 targetToActivatePanel.push_back(target);
222 } 228 }
223 229
224 for (int i=0; i<order.size() - 1; i++) { 230 for (size_t i=0; i<order.size() - 1; i++) {
225 // order[i+1] is the target panel 231 // Set the target of order[i] to order[i+1], using the "real" target as determined above.
226 // order[i+1] - 1 is the (real) panel before the target panel 232 const int panelTarget = targetToActivatePanel[order[i+1]];
227 // targets[order[i+1] - 1] is the (real) target which will activate the target panel
228 int panelTarget = targetToActivatePanel[order[i+1]];
229 WritePanelData<int>(panels[order[i]], TARGET, {panelTarget}); 233 WritePanelData<int>(panels[order[i]], TARGET, {panelTarget});
230 } 234 }
231} 235}
diff --git a/WitnessRandomizer/WitnessRandomizer.h b/WitnessRandomizer/WitnessRandomizer.h index 0e88cee..3d748d1 100644 --- a/WitnessRandomizer/WitnessRandomizer.h +++ b/WitnessRandomizer/WitnessRandomizer.h
@@ -12,13 +12,13 @@ class WitnessRandomizer {
12public: 12public:
13 WitnessRandomizer(); 13 WitnessRandomizer();
14 14
15 void Randomize(std::vector<int> &panels, int flags); 15 void Randomize(const std::vector<int>& panels, int flags);
16 void RandomizeRange(std::vector<int> &panels, int flags, size_t startIndex, size_t endIndex); 16 void RandomizeRange(std::vector<int> panels, int flags, size_t startIndex, size_t endIndex);
17 void SwapPanels(int panel1, int panel2, int flags); 17 void SwapPanels(int panel1, int panel2, int flags);
18 void ReassignTargets(const std::vector<int>& panels, const std::vector<int>& order); 18 void ReassignTargets(const std::vector<int>& panels, const std::vector<int>& order);
19 19
20 template <class T> 20 template <class T>
21 std::vector<T> ReadPanelData(int panel, int offset, int size) { 21 std::vector<T> ReadPanelData(int panel, int offset, size_t size) {
22 return _memory.ReadData<T>({GLOBALS, 0x18, panel*8, offset}, size); 22 return _memory.ReadData<T>({GLOBALS, 0x18, panel*8, offset}, size);
23 } 23 }
24 24
diff --git a/WitnessRandomizer/WitnessRandomizer.vcxproj b/WitnessRandomizer/WitnessRandomizer.vcxproj index 49bd186..a737dd3 100644 --- a/WitnessRandomizer/WitnessRandomizer.vcxproj +++ b/WitnessRandomizer/WitnessRandomizer.vcxproj
@@ -81,6 +81,8 @@
81 </PropertyGroup> 81 </PropertyGroup>
82 <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> 82 <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
83 <LinkIncremental>false</LinkIncremental> 83 <LinkIncremental>false</LinkIncremental>
84 <CodeAnalysisRuleSet>NativeRecommendedRules.ruleset</CodeAnalysisRuleSet>
85 <RunCodeAnalysis>true</RunCodeAnalysis>
84 </PropertyGroup> 86 </PropertyGroup>
85 <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> 87 <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
86 <ClCompile> 88 <ClCompile>
@@ -134,7 +136,7 @@
134 </ItemDefinitionGroup> 136 </ItemDefinitionGroup>
135 <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> 137 <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
136 <ClCompile> 138 <ClCompile>
137 <PrecompiledHeader>Use</PrecompiledHeader> 139 <PrecompiledHeader>NotUsing</PrecompiledHeader>
138 <WarningLevel>Level3</WarningLevel> 140 <WarningLevel>Level3</WarningLevel>
139 <Optimization>MaxSpeed</Optimization> 141 <Optimization>MaxSpeed</Optimization>
140 <FunctionLevelLinking>true</FunctionLevelLinking> 142 <FunctionLevelLinking>true</FunctionLevelLinking>
@@ -143,6 +145,10 @@
143 <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> 145 <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
144 <ConformanceMode>true</ConformanceMode> 146 <ConformanceMode>true</ConformanceMode>
145 <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> 147 <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
148 <LanguageStandard>stdcpp17</LanguageStandard>
149 <EnablePREfast>true</EnablePREfast>
150 <TreatWarningAsError>true</TreatWarningAsError>
151 <DisableSpecificWarnings>26451</DisableSpecificWarnings>
146 </ClCompile> 152 </ClCompile>
147 <Link> 153 <Link>
148 <SubSystem>Console</SubSystem> 154 <SubSystem>Console</SubSystem>
diff --git a/WitnessRandomizerInstaller/WitnessRandomizerInstaller.sln b/WitnessRandomizerInstaller/WitnessRandomizerInstaller.sln new file mode 100644 index 0000000..f202990 --- /dev/null +++ b/WitnessRandomizerInstaller/WitnessRandomizerInstaller.sln
@@ -0,0 +1,41 @@
1
2Microsoft Visual Studio Solution File, Format Version 12.00
3# Visual Studio 15
4VisualStudioVersion = 15.0.28010.2046
5MinimumVisualStudioVersion = 10.0.40219.1
6Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "WitnessRandomizerInstaller", "WitnessRandomizerInstaller.vdproj", "{BBF9ED06-A4A7-4574-A15A-CF12489F45B8}"
7EndProject
8Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WitnessRandomizer", "..\WitnessRandomizer\WitnessRandomizer.vcxproj", "{1563D1E2-0A18-4AFC-8D6F-9F8D9A433F31}"
9EndProject
10Global
11 GlobalSection(SolutionConfigurationPlatforms) = preSolution
12 Debug|x64 = Debug|x64
13 Debug|x86 = Debug|x86
14 Release|x64 = Release|x64
15 Release|x86 = Release|x86
16 EndGlobalSection
17 GlobalSection(ProjectConfigurationPlatforms) = postSolution
18 {BBF9ED06-A4A7-4574-A15A-CF12489F45B8}.Debug|x64.ActiveCfg = Debug
19 {BBF9ED06-A4A7-4574-A15A-CF12489F45B8}.Debug|x64.Build.0 = Debug
20 {BBF9ED06-A4A7-4574-A15A-CF12489F45B8}.Debug|x86.ActiveCfg = Debug
21 {BBF9ED06-A4A7-4574-A15A-CF12489F45B8}.Debug|x86.Build.0 = Debug
22 {BBF9ED06-A4A7-4574-A15A-CF12489F45B8}.Release|x64.ActiveCfg = Release
23 {BBF9ED06-A4A7-4574-A15A-CF12489F45B8}.Release|x64.Build.0 = Release
24 {BBF9ED06-A4A7-4574-A15A-CF12489F45B8}.Release|x86.ActiveCfg = Release
25 {BBF9ED06-A4A7-4574-A15A-CF12489F45B8}.Release|x86.Build.0 = Release
26 {1563D1E2-0A18-4AFC-8D6F-9F8D9A433F31}.Debug|x64.ActiveCfg = Debug|x64
27 {1563D1E2-0A18-4AFC-8D6F-9F8D9A433F31}.Debug|x64.Build.0 = Debug|x64
28 {1563D1E2-0A18-4AFC-8D6F-9F8D9A433F31}.Debug|x86.ActiveCfg = Debug|Win32
29 {1563D1E2-0A18-4AFC-8D6F-9F8D9A433F31}.Debug|x86.Build.0 = Debug|Win32
30 {1563D1E2-0A18-4AFC-8D6F-9F8D9A433F31}.Release|x64.ActiveCfg = Release|x64
31 {1563D1E2-0A18-4AFC-8D6F-9F8D9A433F31}.Release|x64.Build.0 = Release|x64
32 {1563D1E2-0A18-4AFC-8D6F-9F8D9A433F31}.Release|x86.ActiveCfg = Release|Win32
33 {1563D1E2-0A18-4AFC-8D6F-9F8D9A433F31}.Release|x86.Build.0 = Release|Win32
34 EndGlobalSection
35 GlobalSection(SolutionProperties) = preSolution
36 HideSolutionNode = FALSE
37 EndGlobalSection
38 GlobalSection(ExtensibilityGlobals) = postSolution
39 SolutionGuid = {16A86E99-24E8-45C7-A6E2-1FA2C179A898}
40 EndGlobalSection
41EndGlobal
diff --git a/WitnessRandomizerInstaller/WitnessRandomizerInstaller.vdproj b/WitnessRandomizerInstaller/WitnessRandomizerInstaller.vdproj new file mode 100644 index 0000000..d655a65 --- /dev/null +++ b/WitnessRandomizerInstaller/WitnessRandomizerInstaller.vdproj
@@ -0,0 +1,697 @@
1"DeployProject"
2{
3"VSVersion" = "3:800"
4"ProjectType" = "8:{978C614F-708E-4E1A-B201-565925725DBA}"
5"IsWebType" = "8:FALSE"
6"ProjectName" = "8:WitnessRandomizerInstaller"
7"LanguageId" = "3:1033"
8"CodePage" = "3:1252"
9"UILanguageId" = "3:1033"
10"SccProjectName" = "8:"
11"SccLocalPath" = "8:"
12"SccAuxPath" = "8:"
13"SccProvider" = "8:"
14 "Hierarchy"
15 {
16 "Entry"
17 {
18 "MsmKey" = "8:_99BCB0A7745940D890C011AEB10ED05F"
19 "OwnerKey" = "8:_UNDEFINED"
20 "MsmSig" = "8:_UNDEFINED"
21 }
22 }
23 "Configurations"
24 {
25 "Debug"
26 {
27 "DisplayName" = "8:Debug"
28 "IsDebugOnly" = "11:TRUE"
29 "IsReleaseOnly" = "11:FALSE"
30 "OutputFilename" = "8:Debug\\WitnessRandomizerInstaller.msi"
31 "PackageFilesAs" = "3:2"
32 "PackageFileSize" = "3:-2147483648"
33 "CabType" = "3:1"
34 "Compression" = "3:2"
35 "SignOutput" = "11:FALSE"
36 "CertificateFile" = "8:"
37 "PrivateKeyFile" = "8:"
38 "TimeStampServer" = "8:"
39 "InstallerBootstrapper" = "3:2"
40 }
41 "Release"
42 {
43 "DisplayName" = "8:Release"
44 "IsDebugOnly" = "11:FALSE"
45 "IsReleaseOnly" = "11:TRUE"
46 "OutputFilename" = "8:Release\\WitnessRandomizer.msi"
47 "PackageFilesAs" = "3:2"
48 "PackageFileSize" = "3:-2147483648"
49 "CabType" = "3:1"
50 "Compression" = "3:3"
51 "SignOutput" = "11:FALSE"
52 "CertificateFile" = "8:"
53 "PrivateKeyFile" = "8:"
54 "TimeStampServer" = "8:"
55 "InstallerBootstrapper" = "3:2"
56 }
57 }
58 "Deployable"
59 {
60 "CustomAction"
61 {
62 }
63 "DefaultFeature"
64 {
65 "Name" = "8:DefaultFeature"
66 "Title" = "8:"
67 "Description" = "8:"
68 }
69 "ExternalPersistence"
70 {
71 "LaunchCondition"
72 {
73 }
74 }
75 "File"
76 {
77 }
78 "FileType"
79 {
80 }
81 "Folder"
82 {
83 "{3C67513D-01DD-4637-8A68-80971EB9504F}:_D9D31B4A38DF41E78ABAD33DDC72CD52"
84 {
85 "DefaultLocation" = "8:[ProgramFiles64Folder][Manufacturer]\\[ProductName]"
86 "Name" = "8:#1925"
87 "AlwaysCreate" = "11:FALSE"
88 "Condition" = "8:"
89 "Transitive" = "11:FALSE"
90 "Property" = "8:TARGETDIR"
91 "Folders"
92 {
93 }
94 }
95 "{1525181F-901A-416C-8A58-119130FE478E}:_E6EFC2A563B94B588E829ED15D2EE070"
96 {
97 "Name" = "8:#1916"
98 "AlwaysCreate" = "11:FALSE"
99 "Condition" = "8:"
100 "Transitive" = "11:FALSE"
101 "Property" = "8:DesktopFolder"
102 "Folders"
103 {
104 }
105 }
106 "{1525181F-901A-416C-8A58-119130FE478E}:_EC75B6D2E5304ADCACB28DC7CA4365A2"
107 {
108 "Name" = "8:#1919"
109 "AlwaysCreate" = "11:FALSE"
110 "Condition" = "8:"
111 "Transitive" = "11:FALSE"
112 "Property" = "8:ProgramMenuFolder"
113 "Folders"
114 {
115 }
116 }
117 }
118 "LaunchCondition"
119 {
120 }
121 "Locator"
122 {
123 }
124 "MsiBootstrapper"
125 {
126 "LangId" = "3:1033"
127 "RequiresElevation" = "11:FALSE"
128 }
129 "Product"
130 {
131 "Name" = "8:Microsoft Visual Studio"
132 "ProductName" = "8:WitnessRandomizerInstaller"
133 "ProductCode" = "8:{D2ADB0EF-B7B6-431F-91A4-ED85925A290F}"
134 "PackageCode" = "8:{31D00A20-20C0-46B5-A0B8-FD53A27831E8}"
135 "UpgradeCode" = "8:{B2AF0F34-4917-4AEC-B892-FE4FD4B9584A}"
136 "AspNetVersion" = "8:2.0.50727.0"
137 "RestartWWWService" = "11:FALSE"
138 "RemovePreviousVersions" = "11:FALSE"
139 "DetectNewerInstalledVersion" = "11:TRUE"
140 "InstallAllUsers" = "11:FALSE"
141 "ProductVersion" = "8:1.0.0"
142 "Manufacturer" = "8:jbzdarkid"
143 "ARPHELPTELEPHONE" = "8:"
144 "ARPHELPLINK" = "8:"
145 "Title" = "8:WitnessRandomizerInstaller"
146 "Subject" = "8:"
147 "ARPCONTACT" = "8:jbzdarkid"
148 "Keywords" = "8:"
149 "ARPCOMMENTS" = "8:Randomizer for The Witness"
150 "ARPURLINFOABOUT" = "8:www.github.com/jbzdarkid/witness-randomizer"
151 "ARPPRODUCTICON" = "8:"
152 "ARPIconIndex" = "3:0"
153 "SearchPath" = "8:"
154 "UseSystemSearchPath" = "11:TRUE"
155 "TargetPlatform" = "3:1"
156 "PreBuildEvent" = "8:"
157 "PostBuildEvent" = "8:"
158 "RunPostBuildEvent" = "3:0"
159 }
160 "Registry"
161 {
162 "HKLM"
163 {
164 "Keys"
165 {
166 "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_99D49F6F3FDE47E6A28761F01AF578E1"
167 {
168 "Name" = "8:Software"
169 "Condition" = "8:"
170 "AlwaysCreate" = "11:FALSE"
171 "DeleteAtUninstall" = "11:FALSE"
172 "Transitive" = "11:FALSE"
173 "Keys"
174 {
175 "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_3A41D7EF5BF942FAA46261A8C8A6A3E9"
176 {
177 "Name" = "8:[Manufacturer]"
178 "Condition" = "8:"
179 "AlwaysCreate" = "11:FALSE"
180 "DeleteAtUninstall" = "11:FALSE"
181 "Transitive" = "11:FALSE"
182 "Keys"
183 {
184 }
185 "Values"
186 {
187 }
188 }
189 }
190 "Values"
191 {
192 }
193 }
194 }
195 }
196 "HKCU"
197 {
198 "Keys"
199 {
200 "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_AF03DAE7450641EF9CB1A71C5F7E4DAF"
201 {
202 "Name" = "8:Software"
203 "Condition" = "8:"
204 "AlwaysCreate" = "11:FALSE"
205 "DeleteAtUninstall" = "11:FALSE"
206 "Transitive" = "11:FALSE"
207 "Keys"
208 {
209 "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_2FE61CAEC5F04B44B9B356786AA5650E"
210 {
211 "Name" = "8:[Manufacturer]"
212 "Condition" = "8:"
213 "AlwaysCreate" = "11:FALSE"
214 "DeleteAtUninstall" = "11:FALSE"
215 "Transitive" = "11:FALSE"
216 "Keys"
217 {
218 }
219 "Values"
220 {
221 }
222 }
223 }
224 "Values"
225 {
226 }
227 }
228 }
229 }
230 "HKCR"
231 {
232 "Keys"
233 {
234 }
235 }
236 "HKU"
237 {
238 "Keys"
239 {
240 }
241 }
242 "HKPU"
243 {
244 "Keys"
245 {
246 }
247 }
248 }
249 "Sequences"
250 {
251 }
252 "Shortcut"
253 {
254 "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_17BDAE346F194FD0B84D3B6F64454455"
255 {
256 "Name" = "8:WitnessRandomizer"
257 "Arguments" = "8:"
258 "Description" = "8:"
259 "ShowCmd" = "3:1"
260 "IconIndex" = "3:0"
261 "Transitive" = "11:FALSE"
262 "Target" = "8:_99BCB0A7745940D890C011AEB10ED05F"
263 "Folder" = "8:_EC75B6D2E5304ADCACB28DC7CA4365A2"
264 "WorkingFolder" = "8:_D9D31B4A38DF41E78ABAD33DDC72CD52"
265 "Icon" = "8:"
266 "Feature" = "8:"
267 }
268 }
269 "UserInterface"
270 {
271 "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_1D0761940F3446ECB1BF115230EEBAAD"
272 {
273 "Name" = "8:#1901"
274 "Sequence" = "3:2"
275 "Attributes" = "3:2"
276 "Dialogs"
277 {
278 "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_246CF02A71224692AE1FCD645D0C550C"
279 {
280 "Sequence" = "3:100"
281 "DisplayName" = "8:Progress"
282 "UseDynamicProperties" = "11:TRUE"
283 "IsDependency" = "11:FALSE"
284 "SourcePath" = "8:<VsdDialogDir>\\VsdAdminProgressDlg.wid"
285 "Properties"
286 {
287 "BannerBitmap"
288 {
289 "Name" = "8:BannerBitmap"
290 "DisplayName" = "8:#1001"
291 "Description" = "8:#1101"
292 "Type" = "3:8"
293 "ContextData" = "8:Bitmap"
294 "Attributes" = "3:4"
295 "Setting" = "3:1"
296 "UsePlugInResources" = "11:TRUE"
297 }
298 "ShowProgress"
299 {
300 "Name" = "8:ShowProgress"
301 "DisplayName" = "8:#1009"
302 "Description" = "8:#1109"
303 "Type" = "3:5"
304 "ContextData" = "8:1;True=1;False=0"
305 "Attributes" = "3:0"
306 "Setting" = "3:0"
307 "Value" = "3:1"
308 "DefaultValue" = "3:1"
309 "UsePlugInResources" = "11:TRUE"
310 }
311 }
312 }
313 }
314 }
315 "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_1F1DB42220714DF3AD764FE81693D17B"
316 {
317 "Name" = "8:#1901"
318 "Sequence" = "3:1"
319 "Attributes" = "3:2"
320 "Dialogs"
321 {
322 "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_3BB25E5F9B10409982B7C4A22029DABC"
323 {
324 "Sequence" = "3:100"
325 "DisplayName" = "8:Progress"
326 "UseDynamicProperties" = "11:TRUE"
327 "IsDependency" = "11:FALSE"
328 "SourcePath" = "8:<VsdDialogDir>\\VsdProgressDlg.wid"
329 "Properties"
330 {
331 "BannerBitmap"
332 {
333 "Name" = "8:BannerBitmap"
334 "DisplayName" = "8:#1001"
335 "Description" = "8:#1101"
336 "Type" = "3:8"
337 "ContextData" = "8:Bitmap"
338 "Attributes" = "3:4"
339 "Setting" = "3:1"
340 "UsePlugInResources" = "11:TRUE"
341 }
342 "ShowProgress"
343 {
344 "Name" = "8:ShowProgress"
345 "DisplayName" = "8:#1009"
346 "Description" = "8:#1109"
347 "Type" = "3:5"
348 "ContextData" = "8:1;True=1;False=0"
349 "Attributes" = "3:0"
350 "Setting" = "3:0"
351 "Value" = "3:1"
352 "DefaultValue" = "3:1"
353 "UsePlugInResources" = "11:TRUE"
354 }
355 }
356 }
357 }
358 }
359 "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_315683E864204DC28444A9A6E1235D0F"
360 {
361 "UseDynamicProperties" = "11:FALSE"
362 "IsDependency" = "11:FALSE"
363 "SourcePath" = "8:<VsdDialogDir>\\VsdUserInterface.wim"
364 }
365 "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_31D3A86D6A484695A7AB5AB54D880CCB"
366 {
367 "Name" = "8:#1902"
368 "Sequence" = "3:1"
369 "Attributes" = "3:3"
370 "Dialogs"
371 {
372 "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_96ED40E6C3E94DC3944345555DAC2381"
373 {
374 "Sequence" = "3:100"
375 "DisplayName" = "8:Finished"
376 "UseDynamicProperties" = "11:TRUE"
377 "IsDependency" = "11:FALSE"
378 "SourcePath" = "8:<VsdDialogDir>\\VsdFinishedDlg.wid"
379 "Properties"
380 {
381 "BannerBitmap"
382 {
383 "Name" = "8:BannerBitmap"
384 "DisplayName" = "8:#1001"
385 "Description" = "8:#1101"
386 "Type" = "3:8"
387 "ContextData" = "8:Bitmap"
388 "Attributes" = "3:4"
389 "Setting" = "3:1"
390 "UsePlugInResources" = "11:TRUE"
391 }
392 "UpdateText"
393 {
394 "Name" = "8:UpdateText"
395 "DisplayName" = "8:#1058"
396 "Description" = "8:#1158"
397 "Type" = "3:15"
398 "ContextData" = "8:"
399 "Attributes" = "3:0"
400 "Setting" = "3:1"
401 "Value" = "8:#1258"
402 "DefaultValue" = "8:#1258"
403 "UsePlugInResources" = "11:TRUE"
404 }
405 }
406 }
407 }
408 }
409 "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_43BD3ADF347E4D599B648929E79D2905"
410 {
411 "Name" = "8:#1902"
412 "Sequence" = "3:2"
413 "Attributes" = "3:3"
414 "Dialogs"
415 {
416 "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_17CF2961248B47F1BE9F048C2821F5AA"
417 {
418 "Sequence" = "3:100"
419 "DisplayName" = "8:Finished"
420 "UseDynamicProperties" = "11:TRUE"
421 "IsDependency" = "11:FALSE"
422 "SourcePath" = "8:<VsdDialogDir>\\VsdAdminFinishedDlg.wid"
423 "Properties"
424 {
425 "BannerBitmap"
426 {
427 "Name" = "8:BannerBitmap"
428 "DisplayName" = "8:#1001"
429 "Description" = "8:#1101"
430 "Type" = "3:8"
431 "ContextData" = "8:Bitmap"
432 "Attributes" = "3:4"
433 "Setting" = "3:1"
434 "UsePlugInResources" = "11:TRUE"
435 }
436 }
437 }
438 }
439 }
440 "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_75C34DD0EF274A3C961526CAE494EB05"
441 {
442 "UseDynamicProperties" = "11:FALSE"
443 "IsDependency" = "11:FALSE"
444 "SourcePath" = "8:<VsdDialogDir>\\VsdBasicDialogs.wim"
445 }
446 "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_94854F44F47B4AB68C268B55F9272AC8"
447 {
448 "Name" = "8:#1900"
449 "Sequence" = "3:2"
450 "Attributes" = "3:1"
451 "Dialogs"
452 {
453 "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_91CB7820557245A78F2BEC28E128F5A6"
454 {
455 "Sequence" = "3:200"
456 "DisplayName" = "8:Installation Folder"
457 "UseDynamicProperties" = "11:TRUE"
458 "IsDependency" = "11:FALSE"
459 "SourcePath" = "8:<VsdDialogDir>\\VsdAdminFolderDlg.wid"
460 "Properties"
461 {
462 "BannerBitmap"
463 {
464 "Name" = "8:BannerBitmap"
465 "DisplayName" = "8:#1001"
466 "Description" = "8:#1101"
467 "Type" = "3:8"
468 "ContextData" = "8:Bitmap"
469 "Attributes" = "3:4"
470 "Setting" = "3:1"
471 "UsePlugInResources" = "11:TRUE"
472 }
473 }
474 }
475 "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_F03A13F3FD82442D9A60ABA8F387556D"
476 {
477 "Sequence" = "3:300"
478 "DisplayName" = "8:Confirm Installation"
479 "UseDynamicProperties" = "11:TRUE"
480 "IsDependency" = "11:FALSE"
481 "SourcePath" = "8:<VsdDialogDir>\\VsdAdminConfirmDlg.wid"
482 "Properties"
483 {
484 "BannerBitmap"
485 {
486 "Name" = "8:BannerBitmap"
487 "DisplayName" = "8:#1001"
488 "Description" = "8:#1101"
489 "Type" = "3:8"
490 "ContextData" = "8:Bitmap"
491 "Attributes" = "3:4"
492 "Setting" = "3:1"
493 "UsePlugInResources" = "11:TRUE"
494 }
495 }
496 }
497 "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_F767EFBE51C14BEEBDDDE4EE34194C2F"
498 {
499 "Sequence" = "3:100"
500 "DisplayName" = "8:Welcome"
501 "UseDynamicProperties" = "11:TRUE"
502 "IsDependency" = "11:FALSE"
503 "SourcePath" = "8:<VsdDialogDir>\\VsdAdminWelcomeDlg.wid"
504 "Properties"
505 {
506 "BannerBitmap"
507 {
508 "Name" = "8:BannerBitmap"
509 "DisplayName" = "8:#1001"
510 "Description" = "8:#1101"
511 "Type" = "3:8"
512 "ContextData" = "8:Bitmap"
513 "Attributes" = "3:4"
514 "Setting" = "3:1"
515 "UsePlugInResources" = "11:TRUE"
516 }
517 "CopyrightWarning"
518 {
519 "Name" = "8:CopyrightWarning"
520 "DisplayName" = "8:#1002"
521 "Description" = "8:#1102"
522 "Type" = "3:3"
523 "ContextData" = "8:"
524 "Attributes" = "3:0"
525 "Setting" = "3:1"
526 "Value" = "8:#1202"
527 "DefaultValue" = "8:#1202"
528 "UsePlugInResources" = "11:TRUE"
529 }
530 "Welcome"
531 {
532 "Name" = "8:Welcome"
533 "DisplayName" = "8:#1003"
534 "Description" = "8:#1103"
535 "Type" = "3:3"
536 "ContextData" = "8:"
537 "Attributes" = "3:0"
538 "Setting" = "3:1"
539 "Value" = "8:#1203"
540 "DefaultValue" = "8:#1203"
541 "UsePlugInResources" = "11:TRUE"
542 }
543 }
544 }
545 }
546 }
547 "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_ADBB7C7C5F1C44A5BDF8196F2B399117"
548 {
549 "Name" = "8:#1900"
550 "Sequence" = "3:1"
551 "Attributes" = "3:1"
552 "Dialogs"
553 {
554 "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_12ABE080AB25431587017EA259F5EE77"
555 {
556 "Sequence" = "3:100"
557 "DisplayName" = "8:Welcome"
558 "UseDynamicProperties" = "11:TRUE"
559 "IsDependency" = "11:FALSE"
560 "SourcePath" = "8:<VsdDialogDir>\\VsdWelcomeDlg.wid"
561 "Properties"
562 {
563 "BannerBitmap"
564 {
565 "Name" = "8:BannerBitmap"
566 "DisplayName" = "8:#1001"
567 "Description" = "8:#1101"
568 "Type" = "3:8"
569 "ContextData" = "8:Bitmap"
570 "Attributes" = "3:4"
571 "Setting" = "3:1"
572 "UsePlugInResources" = "11:TRUE"
573 }
574 "CopyrightWarning"
575 {
576 "Name" = "8:CopyrightWarning"
577 "DisplayName" = "8:#1002"
578 "Description" = "8:#1102"
579 "Type" = "3:3"
580 "ContextData" = "8:"
581 "Attributes" = "3:0"
582 "Setting" = "3:1"
583 "Value" = "8:#1202"
584 "DefaultValue" = "8:#1202"
585 "UsePlugInResources" = "11:TRUE"
586 }
587 "Welcome"
588 {
589 "Name" = "8:Welcome"
590 "DisplayName" = "8:#1003"
591 "Description" = "8:#1103"
592 "Type" = "3:3"
593 "ContextData" = "8:"
594 "Attributes" = "3:0"
595 "Setting" = "3:1"
596 "Value" = "8:#1203"
597 "DefaultValue" = "8:#1203"
598 "UsePlugInResources" = "11:TRUE"
599 }
600 }
601 }
602 "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_342FF2D8B1B84AEF99509E470D61F8DB"
603 {
604 "Sequence" = "3:200"
605 "DisplayName" = "8:Installation Folder"
606 "UseDynamicProperties" = "11:TRUE"
607 "IsDependency" = "11:FALSE"
608 "SourcePath" = "8:<VsdDialogDir>\\VsdFolderDlg.wid"
609 "Properties"
610 {
611 "BannerBitmap"
612 {
613 "Name" = "8:BannerBitmap"
614 "DisplayName" = "8:#1001"
615 "Description" = "8:#1101"
616 "Type" = "3:8"
617 "ContextData" = "8:Bitmap"
618 "Attributes" = "3:4"
619 "Setting" = "3:1"
620 "UsePlugInResources" = "11:TRUE"
621 }
622 "InstallAllUsersVisible"
623 {
624 "Name" = "8:InstallAllUsersVisible"
625 "DisplayName" = "8:#1059"
626 "Description" = "8:#1159"
627 "Type" = "3:5"
628 "ContextData" = "8:1;True=1;False=0"
629 "Attributes" = "3:0"
630 "Setting" = "3:0"
631 "Value" = "3:1"
632 "DefaultValue" = "3:1"
633 "UsePlugInResources" = "11:TRUE"
634 }
635 }
636 }
637 "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_7FA0E634601A4E15A45B2B6BB4AE5C39"
638 {
639 "Sequence" = "3:300"
640 "DisplayName" = "8:Confirm Installation"
641 "UseDynamicProperties" = "11:TRUE"
642 "IsDependency" = "11:FALSE"
643 "SourcePath" = "8:<VsdDialogDir>\\VsdConfirmDlg.wid"
644 "Properties"
645 {
646 "BannerBitmap"
647 {
648 "Name" = "8:BannerBitmap"
649 "DisplayName" = "8:#1001"
650 "Description" = "8:#1101"
651 "Type" = "3:8"
652 "ContextData" = "8:Bitmap"
653 "Attributes" = "3:4"
654 "Setting" = "3:1"
655 "UsePlugInResources" = "11:TRUE"
656 }
657 }
658 }
659 }
660 }
661 }
662 "MergeModule"
663 {
664 }
665 "ProjectOutput"
666 {
667 "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_99BCB0A7745940D890C011AEB10ED05F"
668 {
669 "SourcePath" = "8:x64\\Release\\WitnessRandomizer.exe"
670 "TargetName" = "8:"
671 "Tag" = "8:"
672 "Folder" = "8:_D9D31B4A38DF41E78ABAD33DDC72CD52"
673 "Condition" = "8:"
674 "Transitive" = "11:FALSE"
675 "Vital" = "11:TRUE"
676 "ReadOnly" = "11:FALSE"
677 "Hidden" = "11:FALSE"
678 "System" = "11:FALSE"
679 "Permanent" = "11:FALSE"
680 "SharedLegacy" = "11:FALSE"
681 "PackageAs" = "3:1"
682 "Register" = "3:1"
683 "Exclude" = "11:FALSE"
684 "IsDependency" = "11:FALSE"
685 "IsolateTo" = "8:"
686 "ProjectOutputGroupRegister" = "3:1"
687 "OutputConfiguration" = "8:"
688 "OutputGroupCanonicalName" = "8:Built"
689 "OutputProjectGuid" = "8:{1563D1E2-0A18-4AFC-8D6F-9F8D9A433F31}"
690 "ShowKeyOutput" = "11:TRUE"
691 "ExcludeFilters"
692 {
693 }
694 }
695 }
696 }
697}