轩辕春秋文化论坛 » 曹操传MOD制作交流 » 对指令77的进一步加强


2011-4-10 23:18 star175
对指令77的进一步加强

以前曾经对指令77 (变量运算) 进行过加强,即通过整形变量4076的设置来实现指针变量的byte运算和word运算

具体功能如下

利用整形变量4076进行控制
默认为0 进行Dword运算
1 Byte  
2 Word  

只支持下列6种参数下的指令
77:变量运算 指针变量(*p) 0 += 常数 0
77:变量运算 指针变量(*p) 0 -= 常数 0
77:变量运算 指针变量(*p) 0 = 常数 0
对指针变量(*p)进行加减和赋值运算,右边的参数必须为一个常数
79:变量测试 指针变量(*p) 0 == 常数 0
79:变量测试 指针变量(*p) 0 >= 常数 0
79:变量测试 指针变量(*p) 0 <= 常数 0
对指针变量(*p)进行比较运算,右边的参数必须为一个常数

但是这些只能满足指针变量的加减、赋值和比较运算,而对指针变量的取值却仍然只有Dword运算

其实由于有上次的强化,目前只要改动少量代码就能实现指针变量的byte和word取值


代码如下


0043C538  |.  837D 0C 01    CMP DWORD PTR SS:[EBP+C],1     ;  左边变量类型
0043C53C  |.  74 1C         JE SHORT Ekd5.0043C55A
0043C53E  |.  837D 08 02    CMP DWORD PTR SS:[EBP+8],2     ;  右边变量类型
0043C542  |.  73 16         JNB SHORT Ekd5.0043C55A



0043C561  |. /75 26         JNZ SHORT Ekd5.0043C589
0043C563  |. |837D 0C 01    CMP DWORD PTR SS:[EBP+C],1
0043C567  |. |74 1C         JE SHORT Ekd5.0043C585
0043C569  |. |837D 08 02    CMP DWORD PTR SS:[EBP+8],2
0043C56D  |. |73 16         JNB SHORT Ekd5.0043C585


0043C58C  |. /75 24         JNZ SHORT Ekd5.0043C5B2
0043C58E  |. |837D 0C 01    CMP DWORD PTR SS:[EBP+C],1
0043C592  |. |74 1C         JE SHORT Ekd5.0043C5B0
0043C594  |. |837D 08 02    CMP DWORD PTR SS:[EBP+8],2
0043C598  |. |73 16         JNB SHORT Ekd5.0043C5B0

示例

本例是用来获取0号武将当前功勋总和

5:变量测试 无;Var90
0:事件结束
               77:变量运算 指针变量(p) 0 = 常数 5276672             ; 先给指针变量(p) 0 赋值5276672(H508400 功勋起始地址)
               77:变量运算 整型变量 0 = 常数 0                            ; 用来保存最终结果,所以先清零
               77:变量运算 整型变量 1 = 常数 0                            ; 计数器  先清零
               [color=blue]1:子事件设定
[/color]               79:变量测试 整型变量(a) 1 <= 常数 4                      ;功勋共有5个,所以计数器要设置5次,从0开始计数
                    77:变量运算 整型变量 4076 = 常数 2                  ;功勋为word型,所以要设置4076=2
                    [color=red]77:变量运算 整型变量 0 += 指针变量(*p) 0         [/color];把当前指针地址的数据累加到 整型变量 0中
                    77:变量运算 整型变量 4076 = 常数 0                  ;下面要设置指针了,所以要设置4076=0,dword运算
                    77:变量运算 指针变量(p) 0 += 常数 2                 ;指针加2,指向下一个功勋地址
                    77:变量运算 整型变量 1 += 常数 1                     ;计数器+1
                    76:无条件跳转 81                                            ;跳转到蓝色的指令处
                    0:事件结束
              b:变量赋值 Var90 true
              0:事件结束

最终结果就是0号武将的5项功勋值总和保存在整形变量0中

注意红色的这句,在以前的版本里,只能得到dword型数据

以上代码5.6  5.7通用

2011-4-10 23:20 513633522
不看内容,先占位置:hz1018:

2011-4-10 23:32 513633522
:hz1026:原来这个啊!!对这种高级应用还不太理解,慢慢来
今天还在某个曹操传群(其实就是那个群:hz1016:)里讨论关于曹操传引擎最近10年的发展:
牛X人物贡献(……此处略去N个字:hz1003:):
第一代:东方教主
第二代:慕容雪芸
第三代:岱瀛
第四代:star175、godtybe
第五代:未知……

2011-4-11 08:11 冰麒麟
强大的byteq指针5.6,5.7引擎才能用。无福使用。。

2011-4-11 22:37 q19961121
感谢STAR兄,这样功勋计算应该好弄多了。

2011-4-16 11:41 砖家叫兽
修改内部信息
2 内部信息
AND   P1,255 单字节
AND   P1,65535  双字节
然后仍旧作四字节判断

2011-4-17 08:47 王友良
很好,很强大,虽然不懂,但还是要支持!

页: [1]
查看完整版本: 对指令77的进一步加强


Powered by Discuz! Archiver 5.0.0  © 2001-2006 Comsenz Inc.