Skip to content

Commit d51c7de

Browse files
committed
winxp compatibility; better readme
1 parent 5299f28 commit d51c7de

File tree

3 files changed

+129
-104
lines changed

3 files changed

+129
-104
lines changed

README.md

Lines changed: 83 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -20,61 +20,61 @@ mm6chupchangekey.exe 文件路径及名称 功能1 按键1 功能2 按键2 ...
2020

2121
其中,功能可以是以下之一(以下括号中是注释,请不要在命令行中输入括号和其中的内容):
2222

23-
* alwaysrun(是否总是奔跑)
24-
* fliponexit(离开房屋时是否转身)
25-
* forward(前进)
26-
* back(后退)
27-
* "turn left"(左转)
28-
* "turn right"(右转)
29-
* yell(呐喊)
30-
* jump(跳跃)
31-
* "toggle turnbase"(切换回合制/即时制)
32-
* inspect(调查前方事物)
33-
* "skip character"(切换到下一个队员)
34-
* "cast quick spell"(施展备用魔法)
35-
* attack(使用武器攻击)
36-
* "fly up"(向上飞)
37-
* "fly down"(向下飞)
38-
* land(降落)
23+
* `alwaysrun`(是否总是奔跑)
24+
* `fliponexit`(离开房屋时是否转身)
25+
* `forward`(前进)
26+
* `back`(后退)
27+
* `"turn left"`(左转)
28+
* `"turn right"`(右转)
29+
* `yell`(呐喊)
30+
* `jump`(跳跃)
31+
* `"toggle turnbase"`(切换回合制/即时制)
32+
* `inspect`(调查前方事物)
33+
* `"skip character"`(切换到下一个队员)
34+
* `"cast quick spell"`(施展备用魔法)
35+
* `attack`(使用武器攻击)
36+
* `"fly up"`(向上飞)
37+
* `"fly down"`(向下飞)
38+
* `land`(降落)
3939

4040
(本工具暂无法改变仰视俯视平视、打开任务地图摘要休息魔法书等的键位)
4141

42-
对于alwaysrun和fliponexit,“按键”可以是1或0(即是或否);对于其他,按键可以是以下之一:
43-
44-
* backspace
45-
* enter
46-
* space
47-
* "page up"
48-
* "page down"
49-
* end
50-
* home
51-
* left
52-
* up
53-
* right
54-
* down
55-
* insert
56-
* delete
57-
* 09
58-
* az
59-
* =
60-
* ,
61-
* -
62-
* .
63-
* /
64-
* `
65-
* \
66-
* '
42+
对于`alwaysrun``fliponexit`,“按键”可以是`1``0`(即是或否);对于其他,按键可以是以下之一:
43+
44+
* `backspace`
45+
* `enter`
46+
* `space`
47+
* `"page up"`
48+
* `"page down"`
49+
* `end`
50+
* `home`
51+
* `left`
52+
* `up`
53+
* `right`
54+
* `down`
55+
* `insert`
56+
* `delete`
57+
* `0``9`
58+
* `a``z`
59+
* `=`
60+
* `,`
61+
* `-`
62+
* `.`
63+
* `/`
64+
* `` ` ``
65+
* `\`
66+
* `'`
6767

6868
也可以使用(但不建议使用):
6969

70-
* f1 至 f12
71-
* tab
72-
* shift
73-
* ctrl
74-
* alt
75-
* capslock
70+
* `f1``f12`
71+
* `tab`
72+
* `shift`
73+
* `ctrl`
74+
* `alt`
75+
* `capslock`
7676

77-
不区分大小写;有空格的请用英文双引号("")包裹起来
77+
不区分大小写;有空格的请用英文双引号(`""`)包裹起来
7878

7979
## 范例
8080

@@ -88,45 +88,45 @@ mm6chupchangekey.exe "mm6.exe" alwaysrun 1 fliponexit 0 forward w back s "turn l
8888

8989
* 总是奔跑:是(1)
9090
* 离开房屋时转身:否(0)
91-
* 前进、后退、左转、右转:WSAD
92-
* 武器攻击:E
93-
* (打开魔法书:C
94-
* 施展备用魔法:CTRL+C或ALT+C
95-
* 向上飞:F
96-
* 向下飞:G
97-
* 降落:V
98-
(一个特殊的键位是:施展备用魔法的C键和打开魔法书冲突,所以打开魔法书还是C键,施展备用魔法变为CTRL+C或ALT+C
91+
* 前进、后退、左转、右转:<kbd>W</kbd><kbd>S</kbd><kbd>A</kbd><kbd>D</kbd>
92+
* 武器攻击:<kbd>E</kbd>
93+
* (打开魔法书:<kbd>C</kbd>
94+
* 施展备用魔法:<kbd>CTRL+C</kbd>或<kbd>ALT+C</kbd>
95+
* 向上飞:<kbd>F</kbd>
96+
* 向下飞:<kbd>G</kbd>
97+
* 降落:<kbd>V</kbd>
98+
(一个特殊的键位是:施展备用魔法的<kbd>C</kbd>键和打开魔法书冲突,所以打开魔法书还是<kbd>C</kbd>键,施展备用魔法变为<kbd>CTRL+C</kbd>或<kbd>ALT+C</kbd>
9999

100100
您也可以双击执行changekey.bat文件,它可以还原为中文完美升级版默认键位(总是奔跑,离开房屋时不转身,其他键位和原版一致)
101101

102102
或者,使用文本编辑器打开changekey.bat,修改成您想要的,保存,双击执行
103103

104104
## 附:魔法门6原版键位表
105105

106-
* ↑↓←→:前进、后退、左转、右转
107-
* Shift + ↑↓:跑步移动
108-
* Ctrl + ←→:侧移
109-
* Page Down:仰视
110-
* End:平视
111-
* Delete:俯视
112-
* Page Up:向上飞(当施展了空气魔法中的飞行奇术后)
113-
* Home:降落(着陆)
114-
* Insert:向下飞
115-
* Enter:切换回合制/即时制
116-
* 空格:调查前方事物(拾起地上的物品、打开箱子等)
117-
* A:使用武器攻击(如敌人距离远,则使用弓箭)
118-
* S:施展备用魔法(如无,则使用使用武器攻击)
119-
* X:跳跃
120-
* R:休息
121-
* Z:打开队伍属性
122-
* C:打开魔法书
123-
* B:切换到下一个队员(跳过当前队员)
124-
* 1、2、3、4:选中某队员(第二次按打开该队员的属性栏)
125-
* 5、6:与雇佣的NPC谈话
126-
* M:打开地图
127-
* Q:打开当前任务
128-
* N:打开自动摘要
129-
* T:打开日历
130-
* Y:呐喊(驱赶挡路的NPC)
131-
132-
原版不按Shift为行走状态,较慢,离开房屋时会转身。中文完美升级版开启了总是奔跑,离开房屋时不会转身,没有更改其他键位)
106+
* <kbd>↑</kbd><kbd>↓</kbd><kbd>←</kbd><kbd>→</kbd>:前进、后退、左转、右转
107+
* <kbd>Shift + ↑↓</kbd>:跑步移动
108+
* <kbd>Ctrl + ←→</kbd>:侧移
109+
* <kbd>Page Down</kbd>:仰视
110+
* <kbd>End</kbd>:平视
111+
* <kbd>Delete</kbd>:俯视
112+
* <kbd>Page Up</kbd>:向上飞(当施展了空气魔法中的飞行奇术后)
113+
* <kbd>Home</kbd>:降落(着陆)
114+
* <kbd>Insert</kbd>:向下飞
115+
* <kbd>Enter</kbd>:切换回合制/即时制
116+
* <kbd>空格</kbd>:调查前方事物(拾起地上的物品、打开箱子等)
117+
* <kbd>A</kbd>:使用武器攻击(如敌人距离远,则使用弓箭)
118+
* <kbd>S</kbd>:施展备用魔法(如无,则使用使用武器攻击)
119+
* <kbd>X</kbd>:跳跃
120+
* <kbd>R</kbd>:休息
121+
* <kbd>Z</kbd>:打开队伍属性
122+
* <kbd>C</kbd>:打开魔法书
123+
* <kbd>B</kbd>:切换到下一个队员(跳过当前队员)
124+
* <kbd>1</kbd>、</kbd>2</kbd>、</kbd>3</kbd>、</kbd>4</kbd>:选中某队员(第二次按打开该队员的属性栏)
125+
* <kbd>5</kbd>、</kbd>6</kbd>:与雇佣的NPC谈话
126+
* <kbd>M</kbd>:打开地图
127+
* <kbd>Q</kbd>:打开当前任务
128+
* <kbd>N</kbd>:打开自动摘要
129+
* <kbd>T</kbd>:打开日历
130+
* <kbd>Y</kbd>:呐喊(驱赶挡路的NPC)
131+
132+
原版不按<kbd>Shift</kbd>为行走状态,较慢,离开房屋时会转身。中文完美升级版开启了总是奔跑,离开房屋时不会转身,没有更改其他键位)

mm6chupchangekey/Source.cpp

Lines changed: 33 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
#include <stdio.h>
2-
#include <stdlib.h>
1+
//#include <stdio.h>
2+
//#include <stdlib.h>
3+
#include <Windows.h>
34
#include <string>
4-
//#include <conio.h>
55
#include <algorithm>
6-
#include <iterator>
6+
//#include <conio.h>
7+
//#include <iterator>
78
//#include <iostream>
8-
#include <fstream>
99

1010
typedef std::string string;
1111

@@ -266,27 +266,43 @@ void wrongArgumentsAlert(void) {
266266
printf("Wrong arguments.\nUsage: mm6chupchangekey.exe file function1 key1 function2 key2 ...");
267267
}
268268

269-
bool copyFile(const char *SRC, const char* DEST) {
270-
std::ifstream src(SRC, std::ios::binary);
271-
std::ofstream dest(DEST, std::ios::binary);
272-
dest << src.rdbuf();
273-
return src && dest;
269+
//bool copyFile(const char *SRC, const char* DEST) {
270+
// std::ifstream src(SRC, std::ios::binary);
271+
// std::ofstream dest(DEST, std::ios::binary);
272+
// dest << src.rdbuf();
273+
// return src && dest;
274+
//}
275+
276+
wchar_t* s2ws(const string& s) {
277+
int len;
278+
int slength = (int)s.length() + 1;
279+
len = MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, 0, 0);
280+
wchar_t* buf = new wchar_t[len];
281+
MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, buf, len);
282+
return buf;
283+
}
284+
285+
string GetExePath() {
286+
char buffer[MAX_PATH];
287+
GetModuleFileNameA(NULL, buffer, MAX_PATH);
288+
string f = string(buffer);
289+
return f.substr(0, f.find_last_of("\\/"));
274290
}
275291

292+
293+
276294
int main(int argc, char * argv[]) {
277295

278296
if (argc >= 3) {
279297

280298
int i;
281299
string arg, content;
282300

283-
char backupExt[8] = ".backup";
284-
char * backupPath;
285-
backupPath = (char *)malloc(strlen(argv[1]) + strlen(backupExt) + 1);
286-
backupPath[0] = '\0';
287-
strcat(backupPath, argv[1]);
288-
strcat(backupPath, backupExt);
289-
copyFile(argv[1], backupPath);
301+
string backupSuffix = ".backup";
302+
string backupPath = argv[1] + backupSuffix;
303+
304+
string p = GetExePath();
305+
CopyFile(s2ws(p + '\\' + argv[1]), s2ws(p + '\\' + backupPath), 0);
290306

291307
FILE * f;
292308
f = fopen(argv[1], "r+b");

mm6chupchangekey/mm6chupchangekey.vcxproj

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
2424
<Keyword>ManagedCProj</Keyword>
2525
<RootNamespace>mm6chupchangekey</RootNamespace>
26+
<WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
2627
</PropertyGroup>
2728
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
2829
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
@@ -35,8 +36,8 @@
3536
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
3637
<ConfigurationType>Application</ConfigurationType>
3738
<UseDebugLibraries>false</UseDebugLibraries>
38-
<PlatformToolset>v140</PlatformToolset>
39-
<CLRSupport>true</CLRSupport>
39+
<PlatformToolset>v140_xp</PlatformToolset>
40+
<CLRSupport>false</CLRSupport>
4041
<CharacterSet>Unicode</CharacterSet>
4142
</PropertyGroup>
4243
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
@@ -49,8 +50,8 @@
4950
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
5051
<ConfigurationType>Application</ConfigurationType>
5152
<UseDebugLibraries>false</UseDebugLibraries>
52-
<PlatformToolset>v140</PlatformToolset>
53-
<CLRSupport>true</CLRSupport>
53+
<PlatformToolset>v140_xp</PlatformToolset>
54+
<CLRSupport>false</CLRSupport>
5455
<CharacterSet>Unicode</CharacterSet>
5556
</PropertyGroup>
5657
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
@@ -107,18 +108,26 @@
107108
<ClCompile>
108109
<WarningLevel>Level3</WarningLevel>
109110
<PreprocessorDefinitions>WIN32;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
111+
<AdditionalOptions>/SUBSYSTEM:CONSOLE,"5.01" %(AdditionalOptions)</AdditionalOptions>
112+
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
110113
</ClCompile>
111114
<Link>
112115
<AdditionalDependencies />
116+
<SubSystem>Console</SubSystem>
117+
<MinimumRequiredVersion>5.01</MinimumRequiredVersion>
113118
</Link>
114119
</ItemDefinitionGroup>
115120
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
116121
<ClCompile>
117122
<WarningLevel>Level3</WarningLevel>
118123
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
124+
<AdditionalOptions>/SUBSYSTEM:CONSOLE,"5.01" %(AdditionalOptions)</AdditionalOptions>
125+
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
119126
</ClCompile>
120127
<Link>
121128
<AdditionalDependencies />
129+
<SubSystem>Console</SubSystem>
130+
<MinimumRequiredVersion>5.01</MinimumRequiredVersion>
122131
</Link>
123132
</ItemDefinitionGroup>
124133
<ItemGroup>

0 commit comments

Comments
 (0)