1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
#include <iostream>
#include <filesystem>
#include <fstream>
#include <array>
#include <iterator>
#include <vector>
// wow base = 50 0C00
int main(int argc, char** argv)
{
std::string wow;
if (argc < 2)
{
std::cout << "World of Warcraft exe not found!\n";
return 1;
}
wow = argv[1];
std::fstream wow_exe(wow, std::ios::in | std::ios::out | std::ios::binary);
if (!wow_exe)
{
std::cout << "World of Warcraft exe not found!\n";
return 1;
}
// windowed mode to full screen
wow_exe.seekp(0xE94);
wow_exe << static_cast<char>(0xEB);
// melee swing on right-click
wow_exe.clear();
wow_exe.seekg(0);
wow_exe.seekp(0x2E1C67);
for (size_t i = 0; i < 11; ++i)
wow_exe << static_cast<char>(0x90);
// NPC attack animation when turning
wow_exe.clear();
wow_exe.seekg(0);
wow_exe.seekp(0x33D7C9);
wow_exe << static_cast<char>(0xEB);
// "ghost" attack when NPC evades from combat
wow_exe.clear();
wow_exe.seekg(0);
wow_exe.seekp(0x355BF);
wow_exe << static_cast<char>(0xEB);
// missing pre cast animation when canceling channeled spells
wow_exe.clear();
wow_exe.seekg(0);
wow_exe.seekp(0x33E0D6);
for (size_t i = 0; i < 22; ++i)
wow_exe << static_cast<char>(0x90);
// mouse flickering and camera snapping issue when mouse has high report rate
// credits to bonbigz
{
wow_exe.clear();
wow_exe.seekg(0);
wow_exe.seekp(0x369A2F);
for (char b : { 0x8B, 0x15, 0xF8, 0x13, 0xD4, 0x00, 0x8B, 0x1D, 0xFC, 0x13, 0xD4, 0x00 })
wow_exe << b;
wow_exe.clear();
wow_exe.seekg(0);
wow_exe.seekp(0x369A2C);
for (char b : { 0xE9, 0x71, 0xF0, 0x0B, 0x00 })
wow_exe << b;
wow_exe.clear();
wow_exe.seekg(0);
wow_exe.seekp(0x428AA2);
for (char b : { 0x8D, 0x4D, 0xF0, 0x51, 0x57, 0xFF, 0x15, 0xDC, 0xF5, 0x9D, 0x00, 0x8B, 0x45, 0xF0, 0x8B, 0x15, 0xF8, 0x13, 0xD4, 0x00, 0xE9, 0x7A, 0x0F, 0xF4, 0xFF })
wow_exe << b;
wow_exe.clear();
wow_exe.seekg(0);
wow_exe.seekp(0x3691B0);
for (char b : { 0x55, 0x89, 0xE5, 0x8B, 0x05, 0xFC, 0x13, 0xD4, 0x00, 0x8B, 0x0D, 0xF8, 0x13, 0xD4, 0x00, 0xEB, 0xC2, 0x7D, 0x03, 0x83, 0xC1, 0x01, 0x83, 0xC0, 0x32, 0x83, 0xC1, 0x32, 0x3B, 0x0D, 0xEC, 0xBC, 0xCA, 0x00, 0x7E, 0x03, 0x83, 0xE9, 0x01, 0x3B, 0x05, 0xF0, 0xBC, 0xCA, 0x00, 0x7E, 0x03, 0x83, 0xE8, 0x01, 0x83, 0xE9, 0x32, 0x83, 0xE8, 0x32, 0x89, 0x0D, 0xF8, 0x13, 0xD4, 0x00, 0x89, 0x05, 0xFC, 0x13, 0xD4, 0x00, 0x89, 0xEC, 0x5D, 0xE9, 0xB4, 0xF7, 0xFF, 0xFF })
wow_exe << b;
wow_exe.clear();
wow_exe.seekg(0);
wow_exe.seekp(0x369183);
for (char b : { 0x83, 0xF8, 0x32, 0x7D, 0x03, 0x83, 0xC0, 0x01, 0x83, 0xF9, 0x32, 0xEB, 0x31 })
wow_exe << b;
}
// naked character issue
wow_exe.clear();
wow_exe.seekg(0);
wow_exe.seekp(0x1DDC5D);
wow_exe << static_cast<char>(0xEB);
// patches missiles impacting with terrain
{
wow_exe.clear();
wow_exe.seekg(0);
wow_exe.seekp(0x1FC99E);
wow_exe << static_cast<char>(0x00);
wow_exe.clear();
wow_exe.seekg(0);
wow_exe.seekp(0x1FC8C7);
wow_exe << static_cast<char>(0x00);
wow_exe.clear();
wow_exe.seekg(0);
wow_exe.seekp(0x01FC735);
wow_exe << static_cast<char>(0x00);
}
std::cout << "World of Warcraft exe has been patched!\n";
return 0;
}
|