diff options
author | jbzdarkid <jbzdarkid@gmail.com> | 2018-10-27 01:27:29 -0700 |
---|---|---|
committer | jbzdarkid <jbzdarkid@gmail.com> | 2018-10-27 01:27:29 -0700 |
commit | 1f2077485e580b3b1d582298281ac6272df18d8d (patch) | |
tree | 6d1b151934137a34aa13c9bc6485581a540fc4a2 | |
parent | 223f7244fccfc67685fcefe889ea49414e32b715 (diff) | |
download | witness-tutorializer-1f2077485e580b3b1d582298281ac6272df18d8d.tar.gz witness-tutorializer-1f2077485e580b3b1d582298281ac6272df18d8d.tar.bz2 witness-tutorializer-1f2077485e580b3b1d582298281ac6272df18d8d.zip |
/W3 clean, add .msi installer project
-rw-r--r-- | WitnessRandomizer/Memory.cpp | 14 | ||||
-rw-r--r-- | WitnessRandomizer/Memory.h | 20 | ||||
-rw-r--r-- | WitnessRandomizer/Panels.h | 26 | ||||
-rw-r--r-- | WitnessRandomizer/WitnessRandomizer.cpp | 32 | ||||
-rw-r--r-- | WitnessRandomizer/WitnessRandomizer.h | 6 | ||||
-rw-r--r-- | WitnessRandomizer/WitnessRandomizer.vcxproj | 8 | ||||
-rw-r--r-- | WitnessRandomizerInstaller/WitnessRandomizerInstaller.sln | 41 | ||||
-rw-r--r-- | WitnessRandomizerInstaller/WitnessRandomizerInstaller.vdproj | 697 |
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 | |||
52 | void Memory::ThrowError() { | 50 | void 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 | ||
59 | uintptr_t Memory::ComputeOffset(std::vector<int> offsets) | 57 | void* 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> | ||
7 | using 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: | |||
45 | private: | 43 | private: |
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 |
5 | std::vector<int> lasers = { | 5 | const 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 |
21 | std::vector<int> burnablePanels = { | 21 | const 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 |
66 | std::vector<int> leftRightPanels = { | 66 | const 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 |
80 | std::vector<int> upDownPanels = { | 80 | const 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 |
103 | std::vector<int> leftForwardRightPanels = { | 103 | const 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 | ||
115 | std::vector<int> pillars = { | 115 | const 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 | ||
129 | std::vector<int> mountainMultipanel = { | 129 | const 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 | ||
138 | std::vector<int> squarePanels = { | 138 | const 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 | ||
456 | std::vector<int> shadowsPanels = { | 456 | const 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 | ||
481 | std::vector<int> monasteryPanels = { | 481 | const 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 | ||
496 | std::vector<int> bunkerPanels = { | 496 | const 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 | ||
517 | std::vector<int> junglePanels = { | 517 | const 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. |
536 | std::vector<int> nothingPanels = { | 536 | const 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 | ||
21 | template <class T> | 23 | template <class T> |
22 | int find(const std::vector<T> &data, T search, int startIndex = 0) { | 24 | size_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 | ||
29 | int main(int argc, char** argv) | 32 | int 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 | ||
124 | void WitnessRandomizer::Randomize(std::vector<int> &panels, int flags) { | 128 | void 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) |
129 | void WitnessRandomizer::RandomizeRange(std::vector<int> &panels, int flags, size_t startIndex, size_t endIndex) { | 133 | void 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 | ||
217 | void WitnessRandomizer::ReassignTargets(const std::vector<int>& panels, const std::vector<int>& order) { | 221 | void 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 { | |||
12 | public: | 12 | public: |
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 |  | ||
2 | Microsoft Visual Studio Solution File, Format Version 12.00 | ||
3 | # Visual Studio 15 | ||
4 | VisualStudioVersion = 15.0.28010.2046 | ||
5 | MinimumVisualStudioVersion = 10.0.40219.1 | ||
6 | Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "WitnessRandomizerInstaller", "WitnessRandomizerInstaller.vdproj", "{BBF9ED06-A4A7-4574-A15A-CF12489F45B8}" | ||
7 | EndProject | ||
8 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WitnessRandomizer", "..\WitnessRandomizer\WitnessRandomizer.vcxproj", "{1563D1E2-0A18-4AFC-8D6F-9F8D9A433F31}" | ||
9 | EndProject | ||
10 | Global | ||
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 | ||
41 | EndGlobal | ||
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 | } | ||