标题:
EXE补充研究及修改
[打印本页]
作者:
van
时间:
2005-7-8 23:02
标题:
EXE补充研究及修改
以下所有均为内存中偏移,改文件时减去400C00即可
1、音轨扩充
物理限制上限255(内存中用1个字节存放)
上限22判断代码:.text:004745B8 cmp [ebp+arg_0], 16h
一些音轨调用:
.text:00448ABE call sub_4745FE ; 10
.text:00448ABE call sub_4745FE ; 10
.text:004312E7 call sub_4745FE ; 10h
.text:0041BFB1 call sub_4745FE ; 12h
.text:00445953 call sub_4745FE ; 14h
.text:00444FC9 call sub_4745FE ; 15h
2、音效扩充
相关处理函数:sub_474777
物理限制上限:各100(文件名中只允许2位数字)
上限判断代码:
.text:004748D8 cmp [ebp+WavFileIndex], 2Bh
.text:0047488C cmp [ebp+WavFileIndex], 89h
.text:00474834 cmp [ebp+WavFileIndex], 0D1h
3、场景
内场景起始PicIndex
.text:0040BCE8 add dl, 28h
大地图起始PicIndex
.text:0040BD3D add cl, 72h
[
本帖最后由 东方无翼 于 2006-10-9 17:34 编辑
]
作者:
van
时间:
2005-7-8 23:12
4、致命一击台词
特殊台词对应表:
dword_48B230
Len=21bytes*4:
text:0040C052 cmp [ebp+var_8], 15h
格式:Table[0]包含使用特殊台词1的武将Index
Table[1]包含使用特殊台词2的武将Index,以下类推
将其改成FFFFFFFF,则此特殊台词不会在游戏中出现
因为此Table后无空闲空间,所以扩充的时候需要改动地址
所有人都不使用特殊台词的修改法:
.text:0040C06F cmp [ebp+var_4], 0FFFFh
将此句删除即可
作者:
van
时间:
2005-7-8 23:51
5、特殊音效
复活时的声音调用
.text:0045931C call mPlayWav_not?_0_Play ; 2a
武将出现的声音调用
.text:0045723E call mPlayWav_not?_0_Play ; 2a
判断是否是木偶的函数
sub_4573C1
a、武将编号
.text:004573E4 cmp [ebp+CharIndex], 0A2h
.text:004573EB jb short loc_4573FF
.text:004573ED cmp [ebp+CharIndex], 0A9h
.text:004573F4 ja short loc_4573FF
b、兵种
.text:00457407 cmp eax, 31h
.text:00457415 cmp ecx, 32h
两个判断是或的关系
6、人物上限
基本上不可能,因为内存里所有数据是连续存放的,武将数据在中间,扩展的话必然需要将其移至其它地址。这样就算未扩展,光修改偏移就有240多处,工程量太大
作者:
van
时间:
2005-7-9 00:56
7、物理伤害公式改动
物理伤害=[(地形修正的攻方攻击力-地形修正的守方防御力)/2+攻方等级*
1.5
+25]*(1+兵种相克)。
在0043BD39 之前插入lea eax,[eax*2+eax](3个字节,8D0440);shr eax,1(两个字节,D1E8)
然后对后面的代码做如下修改:(//表示删去,*表示改动)
.text:0043BD39 add eax, 19h
.text:0043BD3C //mov [ebp+var_4], eax(节省3个字节)
.text:0043BD3F *mov ecx, [ebp+var_20]
.text:0043BD42 *cmp ecx, [ebp+var_10]
.text:0043BD45 jb short loc_43BD59(需修改跳转偏移)
.text:0043BD47 //mov ecx, [ebp+var_20](节省3个字节)
.text:0043BD4A sub ecx, [ebp+var_10]
.text:0043BD4D shr ecx, 1
.text:0043BD4F //mov edx, [ebp+var_4](节省3个字节)
.text:0043BD52 *add eax, ecx
.text:0043BD54 *mov [ebp+var_4], eax
.text:0043BD57 jmp short loc_43BD7E(需修改跳转偏移)
.text:0043BD59
.text:0043BD59
.text:0043BD59 loc_43BD59: ; CODE XREF: mAttHurt+FAj
.text:0043BD59 *mov ecx, [ebp+var_10]
.text:0043BD5C *sub ecx, [ebp+var_20]
.text:0043BD5F *shr ecx, 1
.text:0043BD61 *push ecx
.text:0043BD62 //mov ecx, [ebp+var_4](节省3个字节)
.text:0043BD65 *push eax
.text:0043BD66 call subwithlbound
.text:0043BD6B add esp, 8
.text:0043BD6E mov [ebp+var_4], eax
.text:0043BD71 cmp [ebp+var_4], 0
.text:0043BD75 jnz short loc_43BD7E
.text:0043BD77 mov [ebp+var_4], 1
0043BD6E开始的那些代码可以写成
test eax,eax
sete al
mov [ebp+var_4], eax
这样可以节省9字节
当然最好是重写,直接利用js来跳转,这样可以获得更多的剩余地址用于物理攻击公式的改写
作者:
van
时间:
2005-7-13 12:58
6 这个同样需要扩充内存空间。原来存放的地址是:
.data:004B09F0 gCharMustInBf dd 5 dup(?)
.data:004B0A04 gCharMustNotInBf dd 5 dup(?)
供选择出场人物
.data:004B5EE0 dword_4B5EE0 dd 1Fh dup(?)
实际出场人物(15个)
.data:0048B350 gCharIndexInBattle_Self
一些比较
.text:0041858E cmp ecx, 5
.text:004185B2 cmp eax, 5
.text:004185EB cmp ecx, 5
.text:00418766 cmp ecx, 5
.text:0041878D cmp ecx, 5
不过这样剧本内的结构就变掉了,也是很麻烦的
20 那个只是设个状态位而已,实现不了什么功能
39要改升级的核心函数,改得会比较多
比如要加个判断,分别处理
for(i=0;i<LvAdd;i++)和for(i=LvAdd;i<0;i++)
36这种是苦力活
偏移是loc_411414,那个类型放在ecx中
作者:
habashihumin
时间:
2006-6-3 11:44
标题:
回复 #5 van 的帖子
好麻烦,我看不懂,能否简单点
作者:
hadeswwy
时间:
2006-6-3 20:27
作的补充如果涉及在广点就好了.
作者:
忆云哉
时间:
2006-6-13 22:40
佤系新人,不大懂呵,准备做个小MOD,不知要弄什么题材
作者:
27141083
时间:
2006-6-15 18:01
标题:
本人水平有限,一头雾水
作者:
神源拓也
时间:
2007-9-25 18:07
支持,我回去看看,试一下
作者:
jjohnson
时间:
2008-2-3 10:14
请问是用什么工具
作者:
wuliliu
时间:
2008-2-3 11:23
VAN大把策略公式修改的地方也放出来吧..
作者:
longxinghen
时间:
2008-5-2 16:05
能不能在简单一点阿
欢迎光临 轩辕春秋文化论坛 (http://xycq.org.cn/forum/)
Powered by Discuz! 5.0.0