标题: 孔明传经验获得的分析, 代码分析
性别:未知-离线 ctermiii


Rank: 5Rank: 5
轩辕春秋年度最佳(游戏人生区)
组别 羽林都尉
级别 破贼校尉
好贴 1
功绩 92
帖子 90
编号 50655
注册 2005-10-7


发表于 2010-7-27 17:23 资料 文集 短消息 看全部作者
这么快啊,挺好挺好,那就不缺什么了。


顶部
性别:未知-离线 ctermiii


Rank: 5Rank: 5
轩辕春秋年度最佳(游戏人生区)
组别 羽林都尉
级别 破贼校尉
好贴 1
功绩 92
帖子 90
编号 50655
注册 2005-10-7


发表于 2010-7-27 21:43 资料 文集 短消息 看全部作者
1、能力值去掉随机因素的话,把
0040C83D     /0F8E 7A000000           |JLE EKD2Win.0040C8BD
改成0F 8D 7A000000
就可以了
跳过随机因素生成;
2、耐久力不想随机的话,把
0040C9B2  |.  E8 71A90300            CALL 00447328       ; \Random%Arg1
改成90 90 90 90 90就可以了


顶部
性别:未知-离线 ctermiii


Rank: 5Rank: 5
轩辕春秋年度最佳(游戏人生区)
组别 羽林都尉
级别 破贼校尉
好贴 1
功绩 92
帖子 90
编号 50655
注册 2005-10-7


发表于 2010-7-28 11:35 资料 文集 短消息 看全部作者
1、4个能力:
确定要取消随机增长的话:
0040C8DF  |. 8A81 70EB4400  MOV AL,BYTE PTR DS:[ECX+44EBXX]
0040C8E5  |. 40             INC EAX
你看,这是武力的例子,4个能力的每个地方都会以加1来计算的,你不想的话,把相关4个的40(INC eax)都改成90就行了;
或者直接改初始化的地方:
0040C7C0  |. C745 E4 000000>MOV DWORD PTR SS:[EBP-1C],0
0040C7C7  |. C745 E8 000000>MOV DWORD PTR SS:[EBP-18],0
0040C7CE  |. C745 EC 000000>MOV DWORD PTR SS:[EBP-14],0
0040C7D5  |. C745 F0 000000>MOV DWORD PTR SS:[EBP-10],0
把这四个00000000都改成FFFFFFFF,也就是-1,这样跟下边的+1就抵消了;

2、耐久力的计算也是类似:
0040C9A3  |.  8A48 24               MOV CL,BYTE PTR DS:[EAX+24]
0040C9A6  |.  33C0                  XOR EAX,EAX
0040C9A8  |.  8A81 D3EB4400         MOV AL,BYTE PTR DS:[ECX+44EBD3]
0040C9AE  |.  83C0 0B               ADD EAX,0B
0040C9B1  |.  50                    PUSH EAX                                 ; /Arg1
0040C9B2  |.  E8 71A90300           CALL <EKD2Win.Random%Arg1>               ; \Random%Arg1
0040C9B7  |.  83C4 04               ADD ESP,4
0040C9BA  |.  8BC8                  MOV ECX,EAX
0040C9BC  |.  C1E9 02               SHR ECX,2    ;除以4

先取了A1=【Random%(成长值+0BH)】/4作为固定的附加值的;
我前面修改直接给90 90 90 90 90 的话,每个兵种都会额外增加固定的A1=(成长值+0BH)/4;


耐久值的最终=增长量基数Bx(成长值x3/4+A1)
升级量B,比如作战升级一般是B=1,秘籍升级有个直接升5级的,就是B=5,如果有剧本指令,那就是根据指令来;

有个特殊情况是比如你95级以上了,秘籍升5级,那会计算当前等级与99级还差几级,这个时候B=99-当前等级;
就是这一段:
0040C809  |. B8 63000000    MOV EAX,63
0040C80E  |. 8B4D DC        MOV ECX,DWORD PTR SS:[EBP-24]
0040C811  |. 33D2           XOR EDX,EDX
0040C813  |. 8A51 25        MOV DL,BYTE PTR DS:[ECX+25]
0040C816  |. 2BC2           SUB EAX,EDX
0040C818  |. 8845 F8        MOV BYTE PTR SS:[EBP-8],AL

[ 本帖最后由 ctermiii 于 2010-7-28 11:53 编辑 ]
顶部
性别:未知-离线 ctermiii


Rank: 5Rank: 5
轩辕春秋年度最佳(游戏人生区)
组别 羽林都尉
级别 破贼校尉
好贴 1
功绩 92
帖子 90
编号 50655
注册 2005-10-7


发表于 2010-7-28 18:57 资料 文集 短消息 看全部作者
敌人怎么升级?不过应该都是同一个函数,这个倒不用担心。
耐久力成长只有6,8,10,12,14,15,16这几个档次,代入整数除法算算,不参与随机数的话结果就是所有的成长值+2
耐久力稍微大了2点。
顶部
性别:未知-离线 ctermiii


Rank: 5Rank: 5
轩辕春秋年度最佳(游戏人生区)
组别 羽林都尉
级别 破贼校尉
好贴 1
功绩 92
帖子 90
编号 50655
注册 2005-10-7


发表于 2010-7-29 12:30 资料 文集 短消息 看全部作者


QUOTE:
原帖由 阿尔法孝直 于 2010-7-28 20:58 发表

明白了,利用90 NOP指令,把循环体内部变成空语句是吧?

思想是没错,但就本例子来说,跳出循环体是上边那句
1、能力值去掉随机因素的话,把
0040C83D     /0F8E 7A000000           |JLE EKD2Win.0040C8BD
改成0F 8D 7A000000
就可以了
跳过随机因素生成;



后边那个是取消1个寄存器加1的指令。
顶部

正在浏览此帖的会员 - 共 1 人在线




当前时区 GMT+8, 现在时间是 2025-7-24 07:30
京ICP备2023018092号 轩辕春秋 2003-2023 www.xycq.org.cn

Powered by Discuz! 5.0.0 2001-2006 Comsenz Inc.
Processed in 0.009383 second(s), 9 queries , Gzip enabled

清除 Cookies - 联系我们 - 轩辕春秋 - Archiver - WAP