标题:
求毅兄指点一下
[打印本页]
作者:
aaa132536
时间:
2012-5-28 00:07
标题:
求毅兄指点一下
游戏中我想将几个临时数据存进存档块中,这几个数据不大,才几个字节,请问要怎么处理哦,谢谢。
作者:
godtype
时间:
2012-5-28 09:16
1、扩展一下EXE,增加一个B档,还方便以后可能增加的数据,最好的方法。
2、增大D档,改代码少一点,不利于以后新增。
3、最懒的方法,将数据导入到几个永不出场的人的五围中。
作者:
aaa132536
时间:
2012-5-28 13:29
谢谢毅兄。呵呵,我选第3个,反正需要存储的数据不大。
作者:
wu.john90
时间:
2012-5-29 11:36
同意,第三个最方便。反正人物号多的是,用不完的。
作者:
aaa132536
时间:
2012-5-30 10:13
毅兄能不能帮我检查下下面代码哪里出错了,谢谢
把编号3A0开始的武将内存地址设为空闲内存地址,第一个空闲内存地址为:
004D44CE 55 push ebp
004D44CF 8BEC mov ebp,esp
004D44D1 B8 A0030000 mov eax,3A0
004D44D6 6BC0 48 imul eax,eax,48
004D44D9 0305 70404D00 add eax,dword ptr ds:[4D4070]
004D44DF 8BE5 mov esp,ebp
004D44E1 5D pop ebp
004D44E2 C3 retn
假设把数字10存入第一个空闲内存地址:
004D5BD6 E8 F3E8FFFF call Ekd5.004D44CE
004D5BDB C600 0A mov byte ptr ds:[eax],0A
请问毅兄我这两段代码哪里出错了哦,谢谢
作者:
godtype
时间:
2012-5-30 10:35
实际遇到什么问题?如果存档不成功,我应该说过要用五围的。
作者:
aaa132536
时间:
2012-5-30 11:51
哦,存档不成功。呵呵,我以为都一样。
作者:
aaa132536
时间:
2012-5-30 12:19
还是无法存档。
004D5BD6 E8 F3E8FFFF call Ekd5.004D44CE
004D5BDB C640 10 0A mov byte ptr ds:[eax+10],0A—— +10是武将攻击力内存地址
作者:
godtype
时间:
2012-5-30 12:22
http://www.xycq.net/forum/viewth ... p;page=3#pid2172952
作者:
aaa132536
时间:
2012-5-30 12:39
啊,不好意思,我错了。我只顾着写下面的子程序,上面的程序跳转没写,当然不成功,我在重新测试下。
作者:
aaa132536
时间:
2012-5-30 13:25
谢谢毅兄,终于可以存储了,不过这内存地址读取间有数据残留在里面,还是有点不适合我要做的特效。
我想做的是武将特效是伤害递增:效果为攻击同一个敌人,每多攻击一次伤害加成便多加25%,代码如下:
004D5A64 8B4D FC mov ecx,dword ptr ss:[ebp-4]————攻击方武将DATA内存地址
004D5A67 8B55 D4 mov edx,dword ptr ss:[ebp-2C]————被攻击方武将战场编号
004D5A6A E8 4E010000 call Ekd5.004D5BBD
004D5BBD 55 push ebp
004D5BBE 8BEC mov ebp,esp
004D5BC0 83EC 0C sub esp,0C
004D5BC3 894D FC mov dword ptr ss:[ebp-4],ecx
004D5BC6 8945 F8 mov dword ptr ss:[ebp-8],eax————原始伤害值
004D5BC9 8955 F4 mov dword ptr ss:[ebp-C],edx
004D5BCC 66:8B19 mov bx,word ptr ds:[ecx]
004D5BCF 66:83FB 00 cmp bx,0——————DATA编号为0的武将
004D5BD3 90 nop
004D5BD4 75 37 jnz short Ekd5.004D5C0D
004D5BD6 E8 F3E8FFFF call Ekd5.004D44CE
004D5BDB 8A58 10 mov bl,byte ptr ds:[eax+10]
004D5BDE 3A5D F4 cmp bl,byte ptr ss:[ebp-C]————被攻击方的武将编号是否和[eax+10]地址存放的数据相同
004D5BE1 74 0C je short Ekd5.004D5BEF
004D5BE3 8A5D F4 mov bl,byte ptr ss:[ebp-C]
004D5BE6 8858 10 mov byte ptr ds:[eax+10],bl———不相同将被攻击方的武将编号存入[eax+10]地址
004D5BE9 C640 11 01 mov byte ptr ds:[eax+11],1———[eax+11]地址的值变为1
004D5BED EB 04 jmp short Ekd5.004D5BF3
004D5BEF 8040 11 01 add byte ptr ds:[eax+11],1———相同[eax+11]地址的值加1
004D5BF3 33DB xor ebx,ebx
004D5BF5 8A58 11 mov bl,byte ptr ds:[eax+11]———将[eax+11]地址的值存入ebx
004D5BF8 4B dec ebx——————————————多攻击的次数
004D5BF9 6BDB 19 imul ebx,ebx,19—————————伤害加成25%*多攻击的次数
004D5BFC 83C3 64 add ebx,64
004D5BFF 8B45 F8 mov eax,dword ptr ss:[ebp-8]
004D5C02 F7E3 mul ebx
004D5C04 B9 64000000 mov ecx,64
004D5C09 33D2 xor edx,edx
004D5C0B F7F1 div ecx
004D5C0D 8BE5 mov esp,ebp
004D5C0F 5D pop ebp
004D5C10 C3 retn
[
本帖最后由 aaa132536 于 2012-5-30 13:37 编辑
]
作者:
冰麒麟
时间:
2012-5-31 17:02
不错的效果,不过这种递增的效果,最好设置上限来约束,否则可能会破坏平衡。
内存地址方面,是否可以考虑用剧本VAR变量。
作者:
aaa132536
时间:
2012-6-1 07:49
哦,是我没说明清楚,伤害递增效果:攻击同一个目标,每多攻击一次伤害加成便多加30%,转移目标后失效,经过修改已经成功了,新代码如下:
004D4889 8B4D FC mov ecx,dword ptr ss:[ebp-4]
004D488C E8 B30EF3FF call Ekd5.00405744
004D4891 8B4D FC mov ecx,dword ptr ss:[ebp-4]
004D4894 E8 F00FF3FF call Ekd5.00405889
004D4899 8B4D FC mov ecx,dword ptr ss:[ebp-4]———————————ECX=4927F0
004D489C E8 25130000 call Ekd5.004D5BC6
004D5BC6 55 push ebp
004D5BC7 8BEC mov ebp,esp
004D5BC9 8B59 04 mov ebx,dword ptr ds:[ecx+4]
004D5BCC 81FB 54030000 cmp ebx,354——————————马云禄
004D5BD2 75 1C jnz short Ekd5.004D5BF0
004D5BD4 E8 F5E8FFFF call Ekd5.004D44CE
004D5BD9 8A58 10 mov bl,byte ptr ds:[eax+10]
004D5BDC 3A59 10 cmp bl,byte ptr ds:[ecx+10]———被攻击方的武将编号是否和[eax+10]地址存放的数据相同
004D5BDF 74 0C je short Ekd5.004D5BED
004D5BE1 8A59 10 mov bl,byte ptr ds:[ecx+10]
004D5BE4 8858 10 mov byte ptr ds:[eax+10],bl———不相同将被攻击方的武将编号存入[eax+10]地址
004D5BE7 C640 11 01 mov byte ptr ds:[eax+11],1———[eax+11]地址的值变为1
004D5BEB EB 03 jmp short Ekd5.004D5BF0
004D5BED FE40 11 inc byte ptr ds:[eax+11]—————相同[eax+11]地址的值加1
004D5BF0 8BE5 mov esp,ebp
004D5BF2 5D pop ebp
004D5BF3 C3 retn
004D5A6C 8B4D FC mov ecx,dword ptr ss:[ebp-4]————攻击方的武将战场内存地址
004D5A6F 8B55 D8 mov edx,dword ptr ss:[ebp-28]————被攻击方的武将战场编号
004D5A72 E8 7F010000 call Ekd5.004D5BF6
004D5BF6 55 push ebp
004D5BF7 8BEC mov ebp,esp
004D5BF9 83EC 08 sub esp,8
004D5BFC 8945 FC mov dword ptr ss:[ebp-4],eax———原始伤害
004D5BFF 8955 F8 mov dword ptr ss:[ebp-8],edx
004D5C02 8B19 mov ebx,dword ptr ds:[ecx]
004D5C04 81FB 54030000 cmp ebx,354——————————马云禄
004D5C0A 75 29 jnz short Ekd5.004D5C35
004D5C0C E8 BDE8FFFF call Ekd5.004D44CE
004D5C11 8A58 10 mov bl,byte ptr ds:[eax+10]
004D5C14 3A5D F8 cmp bl,byte ptr ss:[ebp-8]———被攻击方的武将编号是否和[eax+10]地址存放的数据相同
004D5C17 75 1C jnz short Ekd5.004D5C35
004D5C19 33DB xor ebx,ebx
004D5C1B 8A58 11 mov bl,byte ptr ds:[eax+11]———多攻击的次数
004D5C1E 6BDB 1E imul ebx,ebx,1E————————伤害加成30%*多攻击的次数
004D5C21 83C3 64 add ebx,64
004D5C24 8B45 FC mov eax,dword ptr ss:[ebp-4]
004D5C27 F7E3 mul ebx
004D5C29 B9 64000000 mov ecx,64
004D5C2E 33D2 xor edx,edx
004D5C30 F7F1 div ecx
004D5C32 8945 FC mov dword ptr ss:[ebp-4],eax
004D5C35 8B45 FC mov eax,dword ptr ss:[ebp-4]
004D5C38 8BE5 mov esp,ebp
004D5C3A 5D pop ebp
004D5C3B C3 retn
[
本帖最后由 aaa132536 于 2012-6-1 07:55 编辑
]
欢迎光临 轩辕春秋文化论坛 (http://xycq.org.cn/forum/)
Powered by Discuz! 5.0.0