上一节提到了,对于00武器、04馬、05兵書三种道具,是可以通过修改道具特殊作用的数值实现道具作用的修改,那么也就基本可以猜到,在攻击力或防御力的计算的相关代码中,计算道具的最大攻击加成或防御加成,与获取道具最大移动力的代码,应该是很类似的,把计算道具的最大攻击加成和防御加成放在下面:
seg001:6083 32 C0 xor al, al
seg001:6085 88 46 F9 mov [bp+var_7], al
seg001:6088 88 46 FF mov [bp+var_1], al
seg001:608B loc_22FEB: ; CODE XREF: sub_22F6A+C6↓j
seg001:608B 8A 5E FF mov bl, [bp+var_1]
seg001:608E 2A FF sub bh, bh
seg001:6090 03 DE add bx, si
seg001:6092 83 C3 23 add bx, 23h
seg001:6095 89 5E F6 mov [bp+var_A], bx
seg001:6098 80 3F FF cmp byte ptr [bx], 0FFh ; 判断道具代码是否FF(空)
seg001:609B 74 2C jz short loc_23029
seg001:609D B0 11 mov al, 11h
seg001:609F F6 27 mul byte ptr [bx]
seg001:60A1 05 1C BE add ax, 0BE1Ch
seg001:60A4 50 push ax
seg001:60A5 9A 68 6B F6 1C call sub_23AC8 ; 获取道具特殊作用
seg001:60AA 0A C0 or al, al ; 判断是否是攻击加成道具
seg001:60AC 75 1B jnz short loc_23029
seg001:60AE B0 11 mov al, 11h
seg001:60B0 8B 5E F6 mov bx, [bp+var_A]
seg001:60B3 F6 27 mul byte ptr [bx]
seg001:60B5 05 1C BE add ax, 0BE1Ch
seg001:60B8 50 push ax
seg001:60B9 9A 5A 6B F6 1C call sub_23ABA ; 获取道具特殊作用额外数值(攻击加成)
seg001:60BE 88 46 FE mov [bp+var_2], al
seg001:60C1 3A 46 F9 cmp al, [bp+var_7] ; 比较攻击加成是否超过最高攻击加成
seg001:60C4 76 03 jbe short loc_23029
seg001:60C6 88 46 F9 mov [bp+var_7], al ; 超过最高攻击加成,替换
seg001:60C9
seg001:60C9 loc_23029: ; CODE XREF: ...
seg001:60C9 FE 46 FF inc [bp+var_1]
seg001:60CC 80 7E FF 08 cmp [bp+var_1], 8
seg001:60D0 72 B9 jb short loc_22FEB
seg001:61B1 32 C0 xor al, al
seg001:61B3 88 46 F9 mov [bp+var_7], al
seg001:61B6 88 46 FF mov [bp+var_1], al
seg001:61B9 loc_23119: ; CODE XREF: sub_23098+C6↓j
seg001:61B9 8A 5E FF mov bl, [bp+var_1]
seg001:61BC 2A FF sub bh, bh
seg001:61BE 03 DE add bx, si
seg001:61C0 83 C3 23 add bx, 23h
seg001:61C3 89 5E F6 mov [bp+var_A], bx
seg001:61C6 80 3F FF cmp byte ptr [bx], 0FFh ; 判断道具代码是否FF(空)
seg001:61C9 74 2C jz short loc_23157
seg001:61CB B0 11 mov al, 11h
seg001:61CD F6 27 mul byte ptr [bx]
seg001:61CF 05 1C BE add ax, 0BE1Ch
seg001:61D2 50 push ax
seg001:61D3 9A 68 6B F6 1C call sub_23AC8 ; 获取道具特殊作用
seg001:61D8 3C 05 cmp al, 5 ; 判断是否是防御加成道具
seg001:61DA 75 1B jnz short loc_23157
seg001:61DC B0 11 mov al, 11h
seg001:61DE 8B 5E F6 mov bx, [bp+var_A]
seg001:61E1 F6 27 mul byte ptr [bx]
seg001:61E3 05 1C BE add ax, 0BE1Ch ; 道具固有数据的首地址
seg001:61E6 50 push ax
seg001:61E7 9A 5A 6B F6 1C call sub_23ABA ; 获取道具特殊作用额外数值(攻击加成)
seg001:61EC 88 46 FE mov [bp+var_2], al
seg001:61EF 3A 46 F9 cmp al, [bp+var_7] ; 判断防御加成是否超过最高防御加成
seg001:61F2 76 03 jbe short loc_23157
seg001:61F4 88 46 F9 mov [bp+var_7], al ; 超过最高防御加成,替换
seg001:61F7 loc_23157: ; CODE XREF: ...
seg001:61F7 FE 46 FF inc [bp+var_1]
seg001:61FA 80 7E FF 08 cmp [bp+var_1], 8
seg001:61FE 72 B9 jb short loc_23119
可以看到,计算道具的最大攻击加成和防御加成的代码非常类似,方法也十分类似,都是循环8个道具,判断是否道具特殊作用是00武器、05兵書,从中取出最大的数值。
那么关于道具6个分类中的3个分类00武器、04馬、05兵書都已经简单介绍了,还有3个分类01變換用、02攻擊用、03恢復用,可以看到与前者不同的地方在于,这3个分类的武器大部分都是主动使用道具(08玉璽、37赦命書、38援軍報告除外),那么主动使用的道具又是如何发挥作用的,这将是本章将要详细介绍的部分。
[ 本帖最后由 漫漫苦短 于 2025-11-29 20:19 编辑 ]