上一节提到了道具数据中只用了1个字节来记录购买黄金价格,如果过目了周瑜的英杰传详细流程攻略中的道具价格,就会看出所有的道具买与卖价格都是10的倍数,那么自然而然就有一个想法,像第肆章介绍的兵种基本兵力和兵种每等级兵力增幅,道具数据记录的购买黄金价格乘10就是游戏中看到的道具买的价格。
计算道具买的价格的代码,其中AX为道具的代码。
seg003:2041 6B F0 11 imul si, ax, 11h
seg003:2044 81 C6 1C BE add si, 0BE1Ch
seg003:2048 56 push si
seg003:2049 9A 3C 27 F0 3C call sub_3F63C
seg003:204E 2A E4 sub ah, ah
seg003:2050 6B F8 0A imul di, ax, 0Ah
计算道具卖的价格的代码,其中AX为道具的代码。
seg003:2532 6B F8 11 imul di, ax, 11h
seg003:2535 81 C7 1C BE add di, 0BE1Ch
seg003:2539 57 push di
seg003:253A 9A 3C 27 F0 3C call sub_3F63C
seg003:253F B1 03 mov cl, 3
seg003:2541 F6 E1 mul cl
seg003:2543 C1 E8 02 shr ax, 2
seg003:2546 6B F0 0A imul si, ax, 0Ah
可以看到都调用了sub_3F63C这个函数。
seg003:273C sub_3F63C proc far ; CODE XREF: sub_3EEB6+93↑P ; sub_3F29A+1A0↑P
seg003:273C
seg003:273C arg_0 = word ptr 6
seg003:273C
seg003:273C 55 push bp
seg003:273D 8B EC mov bp, sp
seg003:273F 8B 5E 06 mov bx, [bp+arg_0]
seg003:2742 8A 47 0E mov al, [bx+0Eh]
seg003:2745 C9 leave
seg003:2746 CA 02 00 retf 2
seg003:2746 sub_3F63C endp
买的部分的代码很简单,就是获取道具数据的偏移+0E的1字节保存在AL寄存器中,再乘10就是最终的价格,卖的部分的代码就需要注意一下计算的次序了。