计算经验值的时候没有必要使用除法。
原版里面显示状态时经验值是当作无符号的双字节整型,其余都是是有符号的。
KG大概是想把“状态”这个选单改成调用某个事件,同时编写一个显示人物状态的事件子程,而原有的指令sprintf里面只有带符号整型的处理,即经验超出32767(7FFFH)的时候会显示为负数。
因为50指令中全部变量都是双字节整数,而sprintf指令在一开始使用了符号扩展(movsx),所以无论何时,一个8(Hex)以上数字开头的双字节整数符号扩展后得到的结果必定是FFFF XXXXH的形式,而实际需要的形式是0000 XXXXH。所以这时需要一个判断语句进行转向,或者改为[movzx],或者使用[and 0000FFFFH]屏蔽掉前面的8位。
一般的情况不超过32767的整数大概是够用的,如果全改成无符号数就要分析原有的反汇编结果,将50指令中的基本运算全部改为0扩展(movzx),但是必须考虑这样修改之后是否值得和与之前的指令是否兼容,因为这样很多原有的逻辑会发生变化。
实际上在游戏里面还有一个内存位置保存的是当前的时间,这个是必须用无符号整数才能正确表达的。
[
本帖最后由 scarscc 于 2008-5-18 20:04 编辑 ]