标题: 英杰传经验获得的代码分析
性别:男-离线 godtype
(毅)

刘国公
广南东路经略使
枢密直学士
★★★★★★★★★★★★
★★★

Rank: 24Rank: 24Rank: 24
柱国(正二品) 轩辕春秋年度最佳(轩辕工作室)
组别 经略使
级别 卫将军
好贴 1
功绩 1314
帖子 6207
编号 111321
注册 2007-2-18
来自 我家
家族 轩辕学院


发表于 2010-8-5 10:51 资料 个人空间 短消息 只看该作者
英杰传经验获得的代码分析

感谢一下skyhyperion提供的地址。

攻击部分(包括物理攻击和伤害系的策略攻击)

seg002: D520 ; =============== S U B R O U T I N E =======================================
seg002: D520
seg002: D520 ; Attributes: bp-based frame
seg002: D520
seg002: D520 sub_3A440       proc far                ; CODE XREF: sub_3AA64+302
seg002: D520
seg002: D520 var_6           = word ptr -6
seg002: D520 var_4           = word ptr -4
seg002: D520 var_2           = word ptr -2
seg002: D520 arg_0           = word ptr  6
seg002: D520
seg002: D520                 enter   6, 0
seg002: D524                 push    di
seg002: D525                 push    si
seg002: D526                 mov     si, [bp+arg_0]
[bp+arg_0]是战斗信息的开始,保存到si里面

seg002: D529                 sub     bh, bh
seg002: D52B                 mov     bl, [si+8]
seg002: D52E                 add     bx, bx
seg002: D530                 push    word ptr [bx+si+4]
seg002: D533                 call    sub_23A3A
seg002: D538                 sub     ah, ah
seg002: D53A                 mov     di, ax
从23A3A中取出攻击方的等级,保存到di里面

seg002: D53C                 mov     bl, [si+9]
seg002: D53F                 sub     bh, bh
seg002: D541                 add     bx, bx
seg002: D543                 push    word ptr [bx+si+4]
seg002: D546                 call    sub_23A3A
seg002: D54B                 sub     ah, ah
seg002: D54D                 mov     [bp+var_6], ax
从23A3A中取出防守方的等级,保存到[bp+var_6]里面

seg002: D550                 mov     bl, [si+8]
seg002: D553                 sub     bh, bh
seg002: D555                 add     bx, bx
seg002: D557                 push    word ptr [bx+si]
seg002: D559                 call    sub_31016
seg002: D55E                 or      ax, ax
seg002: D560                 jnz     short loc_3A485
seg002: D562                 jmp     loc_3A50C
检查攻击方是否我军成员,不是跳到最后面。(问题:敌军也有经验啊,为什么会有这个设置,难道敌军的经验获得是放在另外的代码里面?)

以下部分是基础经验,跟孔明传一样(因为我是先分析孔明传的)
seg002: D565 ; ---------------------------------------------------------------------------
seg002: D565
seg002: D565 loc_3A485:                              ; CODE XREF: sub_3A440+40
seg002: D565                 cmp     [bp+var_6], di
seg002: D568                 jnb     short loc_3A491
比较防守方的等级是否大于等于攻击方等级。

seg002: D56A                 mov     [bp+var_4], 4 [UE:0x30E8AH--C7 46 FC 04]
seg002: D56F                 jmp     short loc_3A49E
防守方等级小于攻击方等级的时候,基础经验固定为4。

seg002: D571 ; ---------------------------------------------------------------------------
seg002: D571
seg002: D571 loc_3A491:                              ; CODE XREF: sub_3A440+48
seg002: D571                 mov     ax, [bp+var_6]
seg002: D574                 sub     ax, di
seg002: D576                 add     ax, 3
seg002: D579                 add     ax, ax
seg002: D57B                 mov     [bp+var_4], ax
防守方等级大于等于攻击方等级的时候,基础经验 = (防方等级 - 攻方等级 + 3) * 2

seg002: D57E
seg002: D57E loc_3A49E:                              ; CODE XREF: sub_3A440+4F
seg002: D57E                 mov     [bp+var_2], 0
seg002: D583                 cmp     [bp+var_2], 0
seg002: D587                 jl      short loc_3A4B6
seg002: D589                 jg      short loc_3A4B1
这段分析过,有点多余。

seg002: D58B                 cmp     [bp+var_4], 10h [UE:0x30EABH--83 7E FC 10]
seg002: D58F                 jb      short loc_3A4B6
seg002: D591
seg002: D591 loc_3A4B1:                              ; CODE XREF: sub_3A440+69
seg002: D591                 mov     [bp+var_4], 10h [UE:0x30EB1H--C7 46 FC 10 00]
seg002: D596
seg002: D596 loc_3A4B6:                              ; CODE XREF: sub_3A440+67
seg002: D596                                         ; sub_3A440+6F
seg002: D596                 mov     ax, [bp+var_4]
seg002: D599                 mov     [si+25h], ax
基础经验最大为16,然后保存在si+25H的内存里面。

以下部分是击退经验
seg002: D59C                 sub     ax, ax
seg002: D59E                 mov     [bp+var_4], ax
seg002: D5A1                 mov     bl, [si+9]
seg002: D5A4                 sub     bh, bh
seg002: D5A6                 add     bx, bx
seg002: D5A8                 mov     ax, [si+1Fh]
seg002: D5AB                 cmp     [bx+si+0Fh], ax
seg002: D5AE                 jnz     short loc_3A506
检查当前HP与攻击伤害是否相等,不相等就是未击退。

seg002: D5B0                 mov     bl, [si+9]
seg002: D5B3                 sub     bh, bh
seg002: D5B5                 add     bx, bx
seg002: D5B7                 push    word ptr [bx+si]
seg002: D5B9                 call    sub_37DBA
seg002: D5BE                 cmp     al, 0Fh
seg002: D5C0                 jnz     short loc_3A4E9
检查防守方是否为战场编号0FH,即是否敌军主将。

seg002: D5C2                 mov     [bp+var_4], 30h ; '0' [UE:0x30EE2H--C7 46 FC 30 00]
seg002: D5C7                 jmp     short loc_3A506
是主将,击退经验固定为48

seg002: D5C9 ; ---------------------------------------------------------------------------
seg002: D5C9
seg002: D5C9 loc_3A4E9:                              ; CODE XREF: sub_3A440+A0
seg002: D5C9                 cmp     [bp+var_6], di
seg002: D5CC                 jbe     short loc_3A4F5
不是主将,比较防守方等级是否小于等于攻击方等级。

seg002: D5CE                 mov     [bp+var_4], 20h ; ' ' [UE:0x30EEEH--C7 46 FC 20 00]
seg002: D5D3                 jmp     short loc_3A506
防守方等级大于攻击方等级,击退经验固定为32。

seg002: D5D5 ; ---------------------------------------------------------------------------
seg002: D5D5
seg002: D5D5 loc_3A4F5:                              ; CODE XREF: sub_3A440+AC
seg002: D5D5                 mov     ax, 40h ; '@'
seg002: D5D8                 mov     cx, di
seg002: D5DA                 sub     cx, [bp+var_6]
seg002: D5DD                 inc     cx
seg002: D5DE                 inc     cx
seg002: D5DF                 sub     dx, dx
seg002: D5E1                 div     cx
seg002: D5E3                 mov     [bp+var_4], ax
防守方等级小于等于攻击方等级,击退经验 = 64 / (攻方等级 - 防方等级 + 2)

seg002: D5E6
seg002: D5E6 loc_3A506:                              ; CODE XREF: sub_3A440+8E
seg002: D5E6                                         ; sub_3A440+A7
seg002: D5E6                 mov     ax, [bp+var_4]
seg002: D5E9                 mov     [si+27h], ax
最后将击退经验保存到si+27H的内存里面。

seg002: D5EC
seg002: D5EC loc_3A50C:                              ; CODE XREF: sub_3A440+42j
seg002: D5EC                 pop     si
seg002: D5ED                 pop     di
seg002: D5EE                 leave
seg002: D5EF                 retf    2
seg002: D5EF sub_3A440       endp
seg002: D5EF


上面的代码中,绿色部分是UE地址。

=============
固定经验的策略部分:
等一下写。。。。。。

[ 本帖最后由 godtype 于 2010-8-5 11:08 编辑 ]


顶部
性别:男-离线 阿尔法孝直
(雀力日进)

闽国公
遂安军节度使
★★★★★★

Rank: 19Rank: 19Rank: 19Rank: 19
柱国(正二品) 轩辕春秋年度最佳(游戏人生区)
组别 节度使
级别 卫将军
好贴 2
功绩 1796
帖子 6034
编号 19070
注册 2004-10-16
家族 轩辕雀党


发表于 2010-8-5 10:57 资料 个人空间 短消息 只看该作者 QQ
看到了好多“加油”……

回帖时,把左下角“禁用 Smilies”选上。


顶部

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




当前时区 GMT+8, 现在时间是 2024-11-20 20:28
京ICP备2023018092号 轩辕春秋 2003-2023 www.xycq.org.cn

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

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