标题: 孔明传经验获得的分析 [打印本页]
作者:
godtype 时间: 2010-7-27 16:15 标题: 孔明传经验获得的分析
物理攻击获得的经验值有两个,分别保存在内存46BCD8H+2EH和+32H里面,前者应该是基本经验,即发动了攻击就有,不管是否命中,后者是击倒敌人才有的。
00423B89 /$ 55 PUSH EBP
00423B8A |. 8BEC MOV EBP,ESP
00423B8C |. 83EC 10 SUB ESP,10
00423B8F |. 53 PUSH EBX
00423B90 |. 56 PUSH ESI
00423B91 |. 57 PUSH EDI
00423B92 |. 894D F0 MOV DWORD PTR SS:[EBP-10],ECX <==固定的ECX=46BCD8
00423B95 |. 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10]
00423B98 |. 33C9 XOR ECX,ECX
00423B9A |. 8A48 10 MOV CL,BYTE PTR DS:[EAX+10]
00423B9D |. 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10]
00423BA0 |. 8B4C88 08 MOV ECX,DWORD PTR DS:[EAX+ECX*4+8]
00423BA4 |. E8 D756FEFF CALL 00409280
00423BA9 |. 33C9 XOR ECX,ECX
00423BAB |. 8AC8 MOV CL,AL
00423BAD |. 894D F4 MOV DWORD PTR SS:[EBP-C],ECX
取出攻击方等级
00423BB0 |. 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10]
00423BB3 |. 33C9 XOR ECX,ECX
00423BB5 |. 8A48 11 MOV CL,BYTE PTR DS:[EAX+11]
00423BB8 |. 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10]
00423BBB |. 8B4C88 08 MOV ECX,DWORD PTR DS:[EAX+ECX*4+8]
00423BBF |. E8 BC56FEFF CALL 00409280
00423BC4 |. 33C9 XOR ECX,ECX
00423BC6 |. 8AC8 MOV CL,AL
00423BC8 |. 894D F8 MOV DWORD PTR SS:[EBP-8],ECX
取出防御方等级
00423BCB |. 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10]
00423BCE |. 33C9 XOR ECX,ECX
00423BD0 |. 8A48 10 MOV CL,BYTE PTR DS:[EAX+10]
00423BD3 |. 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10]
00423BD6 |. 8B0C88 MOV ECX,DWORD PTR DS:[EAX+ECX*4]
00423BD9 |. E8 4256FEFF CALL 00409220
00423BDE |. 85C0 TEST EAX,EAX
00423BE0 |. 0F85 05000000 JNZ 00423BEB
00423BE6 |. E9 DD000000 JMP 00423CC8
判断攻击方是否我军,409220输出的EAX为0则表示非我军,不能得到经验。
00423BEB |> 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C]
00423BEE |. 3945 F8 CMP DWORD PTR SS:[EBP-8],EAX
00423BF1 |. 0F83 0C000000 JNB 00423C03
00423BF7 |. C745 FC 040000>MOV DWORD PTR SS:[EBP-4],4
00423BFE |. E9 0E000000 JMP 00423C11
防御方等级小于攻击方等级,基本经验值固定为4
00423C03 |> 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
00423C06 |. 2B45 F4 SUB EAX,DWORD PTR SS:[EBP-C]
00423C09 |. 03C0 ADD EAX,EAX
00423C0B |. 83C0 06 ADD EAX,6
00423C0E |. 8945 FC MOV DWORD PTR SS:[EBP-4],EAX
防御方等级大于等于攻击方等级,基本经验值 = (防方等级 - 攻方等级 )*2 + 6
00423C11 |> 837D FC 10 CMP DWORD PTR SS:[EBP-4],10
00423C15 |. 0F8C 07000000 JL 00423C22
00423C1B |. C745 FC 100000>MOV DWORD PTR SS:[EBP-4],10
基本经验最大为16
00423C22 |> 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00423C25 |. 8B4D F0 MOV ECX,DWORD PTR SS:[EBP-10]
00423C28 |. 8941 2E MOV DWORD PTR DS:[ECX+2E],EAX
保存到46BCD8H+2EH里面
00423C2B |. C745 FC 000000>MOV DWORD PTR SS:[EBP-4],0
00423C32 |. 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10]
00423C35 |. 33C9 XOR ECX,ECX
00423C37 |. 8A48 11 MOV CL,BYTE PTR DS:[EAX+11]
00423C3A |. 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10]
00423C3D |. 8B4488 1A MOV EAX,DWORD PTR DS:[EAX+ECX*4+1A]
00423C41 |. 8B4D F0 MOV ECX,DWORD PTR SS:[EBP-10]
00423C44 |. 2B41 2A SUB EAX,DWORD PTR DS:[ECX+2A]
00423C47 |. 0F85 59000000 JNZ 00423CA6
判断是否击倒敌人,46BCD8H+2AH是伤害值,没有击倒敌人则跳到后面。
00423C4D |. 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10]
00423C50 |. 33C9 XOR ECX,ECX
00423C52 |. 8A48 11 MOV CL,BYTE PTR DS:[EAX+11]
00423C55 |. 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10]
00423C58 |. 8B0C88 MOV ECX,DWORD PTR DS:[EAX+ECX*4]
00423C5B |. E8 70A6FFFF CALL 0041E2D0
00423C60 |. 33C9 XOR ECX,ECX
00423C62 |. 8AC8 MOV CL,AL
00423C64 |. 83F9 0F CMP ECX,0F
00423C67 |. 0F85 0C000000 JNZ 00423C79
00423C6D |. C745 FC 300000>MOV DWORD PTR SS:[EBP-4],30
00423C74 |. E9 2D000000 JMP 00423CA6
41E2D0输出的值为0F表示敌军主将,击倒经验值直接为48。
41E2D0输出的值不为0F即非敌军主将的时候:
00423C79 |> 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C]
00423C7C |. 3945 F8 CMP DWORD PTR SS:[EBP-8],EAX
00423C7F |. 0F86 0C000000 JBE 00423C91
00423C85 |. C745 FC 200000>MOV DWORD PTR SS:[EBP-4],20
00423C8C |. E9 15000000 JMP 00423CA6
防方等级大于攻方等级的时候,击倒经验值直接为32。
00423C91 |> 8B4D F4 MOV ECX,DWORD PTR SS:[EBP-C]
00423C94 |. 2B4D F8 SUB ECX,DWORD PTR SS:[EBP-8]
00423C97 |. 83C1 02 ADD ECX,2
00423C9A |. B8 40000000 MOV EAX,40
00423C9F |. 2BD2 SUB EDX,EDX
00423CA1 |. F7F1 DIV ECX
00423CA3 |. 8945 FC MOV DWORD PTR SS:[EBP-4],EAX
防方等级小于等于攻方等级的时候,击倒经验值 = 64 / (攻方等级 - 防方等级 + 2),结果取整数部分。
00423CA6 |> 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00423CA9 |. 8B4D F0 MOV ECX,DWORD PTR SS:[EBP-10]
00423CAC |. 8941 32 MOV DWORD PTR DS:[ECX+32],EAX
保存到46BCD8H+32H里面
00423CAF |. 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10]
00423CB2 |. 8378 2A 00 CMP DWORD PTR DS:[EAX+2A],0
00423CB6 |. 0F85 07000000 JNZ 00423CC3
00423CBC |. 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10]
00423CBF |. C168 2E 02 SHR DWORD PTR DS:[EAX+2E],2
判断46BCD8H+2AH里面的值是否为0,为0即没有命中,基本经验值除以4。
00423CC3 |> E9 00000000 JMP 00423CC8
00423CC8 |> 5F POP EDI
00423CC9 |. 5E POP ESI
00423CCA |. 5B POP EBX
00423CCB |. C9 LEAVE
00423CCC \. C3 RETN
[ 本帖最后由 阿尔法孝直 于 2010-8-13 21:12 编辑 ]
作者:
阿尔法孝直 时间: 2010-7-27 16:22
原帖由 godtype 于 2010-7-27 16:15 发表
这段不太清楚,41E2D0输出的值为0F的时候,击倒经验值直接为48。而这里的内存地址与前面判断是否可以得到经验也有关。
灭敌方主将,经验值为基本经验+48,这与英杰传是一样的。0F是敌军主将编号,因为我军+友军最多只有15人。
作者:
godtype 时间: 2010-7-27 16:28 标题: 回复 #2 阿尔法孝直 的帖子
了解,顶楼已更改。
作者:
ctermiii 时间: 2010-7-27 17:23
这么快啊,挺好挺好,那就不缺什么了。
作者:
lewulezo 时间: 2010-7-27 20:31
还有几个问题,就是升级时候,如何计算升级属性?
我其实关心的是,想把随机升级因子去掉,让属性成长为固定值。
作者:
godtype 时间: 2010-7-27 21:19
武将成长参考:
http://www.xycq.net/forum/thread-193072-2-2.html
52楼起
代码如下:
0040C7B4 /$ 55 PUSH EBP
0040C7B5 |. 8BEC MOV EBP,ESP
0040C7B7 |. 83EC 24 SUB ESP,24
0040C7BA |. 53 PUSH EBX
0040C7BB |. 56 PUSH ESI
0040C7BC |. 57 PUSH EDI
0040C7BD |. 894D DC MOV DWORD PTR SS:[EBP-24],ECX
0040C7C0 |. C745 E4 000000>MOV DWORD PTR SS:[EBP-1C],0
0040C7C7 |. C745 E8 000000>MOV DWORD PTR SS:[EBP-18],0
0040C7CE |. C745 EC 000000>MOV DWORD PTR SS:[EBP-14],0
0040C7D5 |. C745 F0 000000>MOV DWORD PTR SS:[EBP-10],0
0040C7DC |. 8B45 DC MOV EAX,DWORD PTR SS:[EBP-24]
0040C7DF |. 33C9 XOR ECX,ECX
0040C7E1 |. 66:8B08 MOV CX,WORD PTR DS:[EAX]
0040C7E4 |. 81E1 FF01FFFF AND ECX,FFFF01FF
0040C7EA |. 894D F4 MOV DWORD PTR SS:[EBP-C],ECX
0040C7ED |. 8B45 DC MOV EAX,DWORD PTR SS:[EBP-24]
0040C7F0 |. 33C9 XOR ECX,ECX
0040C7F2 |. 8A48 25 MOV CL,BYTE PTR DS:[EAX+25]
0040C7F5 |. B8 63000000 MOV EAX,63
0040C7FA |. 33D2 XOR EDX,EDX
0040C7FC |. 8A55 08 MOV DL,BYTE PTR SS:[EBP+8]
0040C7FF |. 2BC2 SUB EAX,EDX
0040C801 |. 3BC8 CMP ECX,EAX
0040C803 |. 0F86 17000000 JBE 0040C820
0040C809 |. B8 63000000 MOV EAX,63
0040C80E |. 8B4D DC MOV ECX,DWORD PTR SS:[EBP-24]
0040C811 |. 33D2 XOR EDX,EDX
0040C813 |. 8A51 25 MOV DL,BYTE PTR DS:[ECX+25]
0040C816 |. 2BC2 SUB EAX,EDX
0040C818 |. 8845 F8 MOV BYTE PTR SS:[EBP-8],AL
0040C81B |. E9 06000000 JMP 0040C826
0040C820 |> 8A45 08 MOV AL,BYTE PTR SS:[EBP+8]
0040C823 |. 8845 F8 MOV BYTE PTR SS:[EBP-8],AL
0040C826 |> C745 FC 000000>MOV DWORD PTR SS:[EBP-4],0
0040C82D |. E9 03000000 JMP 0040C835
0040C832 |> FF45 FC /INC DWORD PTR SS:[EBP-4]
0040C835 |> 33C0 XOR EAX,EAX
0040C837 |. 8A45 F8 |MOV AL,BYTE PTR SS:[EBP-8]
0040C83A |. 3B45 FC |CMP EAX,DWORD PTR SS:[EBP-4]
0040C83D |. 0F8E 7A000000 |JLE 0040C8BD
0040C843 |. C745 E0 000000>|MOV DWORD PTR SS:[EBP-20],0
0040C84A |. E9 03000000 |JMP 0040C852
0040C84F |> FF45 E0 |/INC DWORD PTR SS:[EBP-20]
0040C852 |> 837D E0 04 | CMP DWORD PTR SS:[EBP-20],4
0040C856 |. 0F8D 5C000000 ||JGE 0040C8B8
0040C85C |. 6A 63 ||PUSH 63 ; /Arg1 = 00000063
0040C85E |. E8 C5AA0300 ||CALL 00447328 ; \00447328
0040C863 |. 83C4 04 ||ADD ESP,4
0040C866 |. B9 03000000 ||MOV ECX,3
0040C86B |. 2BD2 ||SUB EDX,EDX
0040C86D |. F7F1 ||DIV ECX
0040C86F |. 85D2 ||TEST EDX,EDX
0040C871 |. 0F84 35000000 ||JE 0040C8AC
0040C877 |. 6A 02 ||PUSH 2 ; /Arg1 = 00000002
0040C879 |. E8 AAAA0300 ||CALL 00447328 ; \00447328
0040C87E |. 83C4 04 ||ADD ESP,4
0040C881 |. 83F8 01 ||CMP EAX,1
0040C884 |. 0F8C 0C000000 ||JL 0040C896
0040C88A |. 8B45 E0 ||MOV EAX,DWORD PTR SS:[EBP-20]
0040C88D |. FF4485 E4 ||INC DWORD PTR SS:[EBP+EAX*4-1C]
0040C891 |. E9 11000000 ||JMP 0040C8A7
0040C896 |> 6A 02 ||PUSH 2 ; /Arg1 = 00000002
0040C898 |. E8 8BAA0300 ||CALL 00447328 ; \00447328
0040C89D |. 83C4 04 ||ADD ESP,4
0040C8A0 |. 8B4D E0 ||MOV ECX,DWORD PTR SS:[EBP-20]
0040C8A3 |. 01448D E4 ||ADD DWORD PTR SS:[EBP+ECX*4-1C],EAX
0040C8A7 |> E9 07000000 ||JMP 0040C8B3
0040C8AC |> 8B45 E0 ||MOV EAX,DWORD PTR SS:[EBP-20]
0040C8AF |. FF4C85 E4 ||DEC DWORD PTR SS:[EBP+EAX*4-1C]
0040C8B3 |>^E9 97FFFFFF |\JMP 0040C84F
0040C8B8 |>^E9 75FFFFFF \JMP 0040C832
0040C8BD |> 8B45 DC MOV EAX,DWORD PTR SS:[EBP-24]
0040C8C0 |. 33C9 XOR ECX,ECX
0040C8C2 |. 8A48 24 MOV CL,BYTE PTR DS:[EAX+24]
0040C8C5 |. 33C0 XOR EAX,EAX
0040C8C7 |. 8A81 70EB4400 MOV AL,BYTE PTR DS:[ECX+44EB70]
0040C8CD |. 85C0 TEST EAX,EAX
0040C8CF |. 0F8E 2B000000 JLE 0040C900
0040C8D5 |. 8B45 DC MOV EAX,DWORD PTR SS:[EBP-24]
0040C8D8 |. 33C9 XOR ECX,ECX
0040C8DA |. 8A48 24 MOV CL,BYTE PTR DS:[EAX+24]
0040C8DD |. 33C0 XOR EAX,EAX
0040C8DF |. 8A81 70EB4400 MOV AL,BYTE PTR DS:[ECX+44EB70]
0040C8E5 |. 40 INC EAX
0040C8E6 |. 33C9 XOR ECX,ECX
0040C8E8 |. 8A4D F8 MOV CL,BYTE PTR SS:[EBP-8]
0040C8EB |. 0FAFC1 IMUL EAX,ECX
0040C8EE |. 0345 E4 ADD EAX,DWORD PTR SS:[EBP-1C]
0040C8F1 |. 50 PUSH EAX
0040C8F2 |. 6A 00 PUSH 0
0040C8F4 |. 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C]
0040C8F7 |. 50 PUSH EAX
0040C8F8 |. E8 D0F6FFFF CALL 0040BFCD
0040C8FD |. 83C4 0C ADD ESP,0C
0040C900 |> 8B45 DC MOV EAX,DWORD PTR SS:[EBP-24]
0040C903 |. 33C9 XOR ECX,ECX
0040C905 |. 8A48 24 MOV CL,BYTE PTR DS:[EAX+24]
0040C908 |. 33C0 XOR EAX,EAX
0040C90A |. 8A81 91EB4400 MOV AL,BYTE PTR DS:[ECX+44EB91]
0040C910 |. 85C0 TEST EAX,EAX
0040C912 |. 0F8E 2B000000 JLE 0040C943
0040C918 |. 8B45 DC MOV EAX,DWORD PTR SS:[EBP-24]
0040C91B |. 33C9 XOR ECX,ECX
0040C91D |. 8A48 24 MOV CL,BYTE PTR DS:[EAX+24]
0040C920 |. 33C0 XOR EAX,EAX
0040C922 |. 8A81 91EB4400 MOV AL,BYTE PTR DS:[ECX+44EB91]
0040C928 |. 40 INC EAX
0040C929 |. 33C9 XOR ECX,ECX
0040C92B |. 8A4D F8 MOV CL,BYTE PTR SS:[EBP-8]
0040C92E |. 0FAFC1 IMUL EAX,ECX
0040C931 |. 0345 E8 ADD EAX,DWORD PTR SS:[EBP-18]
0040C934 |. 50 PUSH EAX
0040C935 |. 6A 01 PUSH 1
0040C937 |. 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C]
0040C93A |. 50 PUSH EAX
0040C93B |. E8 8DF6FFFF CALL 0040BFCD
0040C940 |. 83C4 0C ADD ESP,0C
0040C943 |> 8B45 DC MOV EAX,DWORD PTR SS:[EBP-24]
0040C946 |. 33C9 XOR ECX,ECX
0040C948 |. 8A48 24 MOV CL,BYTE PTR DS:[EAX+24]
0040C94B |. 33C0 XOR EAX,EAX
0040C94D |. 8A81 B2EB4400 MOV AL,BYTE PTR DS:[ECX+44EBB2]
0040C953 |. 85C0 TEST EAX,EAX
0040C955 |. 0F8E 2B000000 JLE 0040C986
0040C95B |. 8B45 DC MOV EAX,DWORD PTR SS:[EBP-24]
0040C95E |. 33C9 XOR ECX,ECX
0040C960 |. 8A48 24 MOV CL,BYTE PTR DS:[EAX+24]
0040C963 |. 33C0 XOR EAX,EAX
0040C965 |. 8A81 B2EB4400 MOV AL,BYTE PTR DS:[ECX+44EBB2]
0040C96B |. 40 INC EAX
0040C96C |. 33C9 XOR ECX,ECX
0040C96E |. 8A4D F8 MOV CL,BYTE PTR SS:[EBP-8]
0040C971 |. 0FAFC1 IMUL EAX,ECX
0040C974 |. 0345 EC ADD EAX,DWORD PTR SS:[EBP-14]
0040C977 |. 50 PUSH EAX
0040C978 |. 6A 02 PUSH 2
0040C97A |. 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C]
0040C97D |. 50 PUSH EAX
0040C97E |. E8 4AF6FFFF CALL 0040BFCD
0040C983 |. 83C4 0C ADD ESP,0C
0040C986 |> 8B45 DC MOV EAX,DWORD PTR SS:[EBP-24]
0040C989 |. 33C9 XOR ECX,ECX
0040C98B |. 8A48 24 MOV CL,BYTE PTR DS:[EAX+24]
0040C98E |. 33C0 XOR EAX,EAX
0040C990 |. 8A81 D3EB4400 MOV AL,BYTE PTR DS:[ECX+44EBD3]
0040C996 |. 85C0 TEST EAX,EAX
0040C998 |. 0F8E 56000000 JLE 0040C9F4
0040C99E |. 8B45 DC MOV EAX,DWORD PTR SS:[EBP-24]
0040C9A1 |. 33C9 XOR ECX,ECX
0040C9A3 |. 8A48 24 MOV CL,BYTE PTR DS:[EAX+24]
0040C9A6 |. 33C0 XOR EAX,EAX
0040C9A8 |. 8A81 D3EB4400 MOV AL,BYTE PTR DS:[ECX+44EBD3]
0040C9AE |. 83C0 0B ADD EAX,0B
0040C9B1 |. 50 PUSH EAX ; /Arg1
0040C9B2 |. E8 71A90300 CALL 00447328 ; \00447328
0040C9B7 |. 83C4 04 ADD ESP,4
0040C9BA |. 8BC8 MOV ECX,EAX
0040C9BC |. C1E9 02 SHR ECX,2
0040C9BF |. 8B45 DC MOV EAX,DWORD PTR SS:[EBP-24]
0040C9C2 |. 33D2 XOR EDX,EDX
0040C9C4 |. 8A50 24 MOV DL,BYTE PTR DS:[EAX+24]
0040C9C7 |. 33C0 XOR EAX,EAX
0040C9C9 |. 8A82 D3EB4400 MOV AL,BYTE PTR DS:[EDX+44EBD3]
0040C9CF |. 8D0440 LEA EAX,DWORD PTR DS:[EAX+EAX*2]
0040C9D2 |. 99 CDQ
0040C9D3 |. 83E2 03 AND EDX,3
0040C9D6 |. 03C2 ADD EAX,EDX
0040C9D8 |. C1F8 02 SAR EAX,2
0040C9DB |. 03C8 ADD ECX,EAX
0040C9DD |. 33C0 XOR EAX,EAX
0040C9DF |. 8A45 F8 MOV AL,BYTE PTR SS:[EBP-8]
0040C9E2 |. 0FAFC8 IMUL ECX,EAX
0040C9E5 |. 51 PUSH ECX
0040C9E6 |. 6A 03 PUSH 3
0040C9E8 |. 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C]
0040C9EB |. 50 PUSH EAX
0040C9EC |. E8 DCF5FFFF CALL 0040BFCD
0040C9F1 |. 83C4 0C ADD ESP,0C
0040C9F4 |> 8B45 DC MOV EAX,DWORD PTR SS:[EBP-24]
0040C9F7 |. 33C9 XOR ECX,ECX
0040C9F9 |. 8A48 24 MOV CL,BYTE PTR DS:[EAX+24]
0040C9FC |. 33C0 XOR EAX,EAX
0040C9FE |. 8A81 F4EB4400 MOV AL,BYTE PTR DS:[ECX+44EBF4]
0040CA04 |. 85C0 TEST EAX,EAX
0040CA06 |. 0F8E 2B000000 JLE 0040CA37
0040CA0C |. 8B45 DC MOV EAX,DWORD PTR SS:[EBP-24]
0040CA0F |. 33C9 XOR ECX,ECX
0040CA11 |. 8A48 24 MOV CL,BYTE PTR DS:[EAX+24]
0040CA14 |. 33C0 XOR EAX,EAX
0040CA16 |. 8A81 F4EB4400 MOV AL,BYTE PTR DS:[ECX+44EBF4]
0040CA1C |. 40 INC EAX
0040CA1D |. 33C9 XOR ECX,ECX
0040CA1F |. 8A4D F8 MOV CL,BYTE PTR SS:[EBP-8]
0040CA22 |. 0FAFC1 IMUL EAX,ECX
0040CA25 |. 0345 F0 ADD EAX,DWORD PTR SS:[EBP-10]
0040CA28 |. 50 PUSH EAX
0040CA29 |. 6A 04 PUSH 4
0040CA2B |. 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C]
0040CA2E |. 50 PUSH EAX
0040CA2F |. E8 99F5FFFF CALL 0040BFCD
0040CA34 |. 83C4 0C ADD ESP,0C
0040CA37 |> 8B45 DC MOV EAX,DWORD PTR SS:[EBP-24]
0040CA3A |. 33C9 XOR ECX,ECX
0040CA3C |. 8A48 25 MOV CL,BYTE PTR DS:[EAX+25]
0040CA3F |. 33C0 XOR EAX,EAX
0040CA41 |. 8A45 F8 MOV AL,BYTE PTR SS:[EBP-8]
0040CA44 |. 03C8 ADD ECX,EAX
0040CA46 |. 8B45 DC MOV EAX,DWORD PTR SS:[EBP-24]
0040CA49 |. 8848 25 MOV BYTE PTR DS:[EAX+25],CL
0040CA4C |. 8B45 DC MOV EAX,DWORD PTR SS:[EBP-24]
0040CA4F |. 8A40 25 MOV AL,BYTE PTR DS:[EAX+25]
0040CA52 |. E9 00000000 JMP 0040CA57
0040CA57 |> 5F POP EDI
0040CA58 |. 5E POP ESI
0040CA59 |. 5B POP EBX
0040CA5A |. C9 LEAVE
0040CA5B \. C2 0400 RETN 4
作者:
ctermiii 时间: 2010-7-27 21:43
1、能力值去掉随机因素的话,把
0040C83D /0F8E 7A000000 |JLE EKD2Win.0040C8BD
改成0F 8D 7A000000
就可以了
跳过随机因素生成;
2、耐久力不想随机的话,把
0040C9B2 |. E8 71A90300 CALL 00447328 ; \Random%Arg1
改成90 90 90 90 90就可以了
作者:
godtype 时间: 2010-7-28 08:41
经验种和经验果
00404291 . 6A 0A PUSH 0A ; /Arg1 = 0000000A
00404293 . E8 90300400 CALL 00447328 ; \00447328
00404298 . 83C4 04 ADD ESP,4
0040429B . 83C0 14 ADD EAX,14
经验种,0-9中随机取一个值,然后加20。
004042A6 > 6A 14 PUSH 14 ; /Arg1 = 00000014
004042A8 . E8 7B300400 CALL 00447328 ; \00447328
004042AD . 83C4 04 ADD ESP,4
004042B0 . 83C0 28 ADD EAX,28
经验果,0-19中随机取一个值,然后加40。
作者:
lewulezo 时间: 2010-7-28 11:14 标题: 回复 #7 ctermiii 的帖子
非常感谢。我发现改了以后,兵种会固定以成长值+1来提升。
作者:
ctermiii 时间: 2010-7-28 11:35
1、4个能力:
确定要取消随机增长的话:
0040C8DF |. 8A81 70EB4400 MOV AL,BYTE PTR DS:[ECX+44EBXX]
0040C8E5 |. 40 INC EAX
你看,这是武力的例子,4个能力的每个地方都会以加1来计算的,你不想的话,把相关4个的40(INC eax)都改成90就行了;
或者直接改初始化的地方:
0040C7C0 |. C745 E4 000000>MOV DWORD PTR SS:[EBP-1C],0
0040C7C7 |. C745 E8 000000>MOV DWORD PTR SS:[EBP-18],0
0040C7CE |. C745 EC 000000>MOV DWORD PTR SS:[EBP-14],0
0040C7D5 |. C745 F0 000000>MOV DWORD PTR SS:[EBP-10],0
把这四个00000000都改成FFFFFFFF,也就是-1,这样跟下边的+1就抵消了;
2、耐久力的计算也是类似:
0040C9A3 |. 8A48 24 MOV CL,BYTE PTR DS:[EAX+24]
0040C9A6 |. 33C0 XOR EAX,EAX
0040C9A8 |. 8A81 D3EB4400 MOV AL,BYTE PTR DS:[ECX+44EBD3]
0040C9AE |. 83C0 0B ADD EAX,0B
0040C9B1 |. 50 PUSH EAX ; /Arg1
0040C9B2 |. E8 71A90300 CALL <EKD2Win.Random%Arg1> ; \Random%Arg1
0040C9B7 |. 83C4 04 ADD ESP,4
0040C9BA |. 8BC8 MOV ECX,EAX
0040C9BC |. C1E9 02 SHR ECX,2 ;除以4
先取了A1=【Random%(成长值+0BH)】/4作为固定的附加值的;
我前面修改直接给90 90 90 90 90 的话,每个兵种都会额外增加固定的A1=(成长值+0BH)/4;
耐久值的最终=增长量基数Bx(成长值x3/4+A1)
升级量B,比如作战升级一般是B=1,秘籍升级有个直接升5级的,就是B=5,如果有剧本指令,那就是根据指令来;
有个特殊情况是比如你95级以上了,秘籍升5级,那会计算当前等级与99级还差几级,这个时候B=99-当前等级;
就是这一段:
0040C809 |. B8 63000000 MOV EAX,63
0040C80E |. 8B4D DC MOV ECX,DWORD PTR SS:[EBP-24]
0040C811 |. 33D2 XOR EDX,EDX
0040C813 |. 8A51 25 MOV DL,BYTE PTR DS:[ECX+25]
0040C816 |. 2BC2 SUB EAX,EDX
0040C818 |. 8845 F8 MOV BYTE PTR SS:[EBP-8],AL
[ 本帖最后由 ctermiii 于 2010-7-28 11:53 编辑 ]
作者:
dimeterio 时间: 2010-7-28 11:38
能不能寫成經驗與等級對照的列表形式?
作者:
lewulezo 时间: 2010-7-28 12:53
我印象中,敌人的属性似乎是固定成长, 并且参照成长值+1来提升的。
这边改了不知道会不会影响敌人的属性成长。如果只影响我方的话,那还是别改的好。
[ 本帖最后由 lewulezo 于 2010-7-28 13:34 编辑 ]
作者:
ctermiii 时间: 2010-7-28 18:57
敌人怎么升级?不过应该都是同一个函数,这个倒不用担心。
耐久力成长只有6,8,10,12,14,15,16这几个档次,代入整数除法算算,不参与随机数的话结果就是所有的成长值+2
耐久力稍微大了2点。
作者:
lewulezo 时间: 2010-7-28 19:27
敌人虽然不会升级,但是敌人会在每关初始时,根据将领的初始数值、等级和兵种成长属性计算出他的五围来。
所以如果函数和玩家的兵种成长函数不同的话,可能会有不平衡的问题。
[ 本帖最后由 lewulezo 于 2010-7-28 19:34 编辑 ]
作者:
阿尔法孝直 时间: 2010-7-28 20:58
原帖由 ctermiii 于 2010-7-28 11:35 发表
1、4个能力:
确定要取消随机增长的话:
0040C8DF |. 8A81 70EB4400 MOV AL,BYTE PTR DS:
0040C8E5 |. 40 INC EAX
你看,这是武力的例子,4个能力的每个地方都会以加1来计算的,你不想的话, ...
明白了,利用90 NOP指令,把循环体内部变成空语句是吧?
作者:
ctermiii 时间: 2010-7-29 12:30
原帖由 阿尔法孝直 于 2010-7-28 20:58 发表
明白了,利用90 NOP指令,把循环体内部变成空语句是吧?
思想是没错,但就本例子来说,跳出循环体是上边那句
1、能力值去掉随机因素的话,把
0040C83D /0F8E 7A000000 |JLE EKD2Win.0040C8BD
改成0F 8D 7A000000
就可以了
跳过随机因素生成;
后边那个是取消1个寄存器加1的指令。
作者:
阿尔法孝直 时间: 2010-7-29 13:02
原帖由 dimeterio 于 2010-7-28 11:38 发表
能不能寫成經驗與等級對照的列表形式?
由于孔明传和英杰传经验值算法基本一致(区别就在于攻击不中经验值/4),那么参考《英杰传练级纲要》就行了。
一.攻击
1.攻击所得的经验值与攻防双方的等级差有关。攻击方等级高于被攻击方时,得4点经验,双方同级时得6点经验,攻方低1级时得8点经验,低2级时得10点经验,以下每多差1级多2点经验,但最大为16点。
2.如果攻击时击退敌将,所得经验值比上述为多,具体是:击退同级武将,得38点,击退比自已等级高的武将,每高一级加2点,但最多为48点(也可以认为是在第1条的基础上加32点)。
低1级:25
低2级:20
低3级:16
低4级:14
低5级:13
低6级:12
低7级:11
低8级:10
低9~10级:9
低11~14级:8
低15~19级:7
低20~30级:6
低31~62级:5
低63级以上:4
3.如果击退的是敌军主将,所得经验是在第1条的基础上加48点。
作者:
lewulezo 时间: 2010-7-30 20:23
我刚刚试了一下,我把成长的inc去掉,我方成长属性是不+1了,但是敌人出场的数值仍然按照+1来计算的。我怀疑敌军属性的计算函数和我方的等级提升不是同一个地方。
作者:
godtype 时间: 2010-7-30 20:35 标题: 回复 #18 lewulezo 的帖子
当然不同了,先看6楼的链接,再看代码:
0040D487 $ 55 PUSH EBP
0040D488 . 8BEC MOV EBP,ESP
0040D48A . 83EC 14 SUB ESP,14
0040D48D . 53 PUSH EBX
0040D48E . 56 PUSH ESI
0040D48F . 57 PUSH EDI
0040D490 . 894D F0 MOV DWORD PTR SS:[EBP-10],ECX
0040D493 . 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10]
0040D496 . 33C9 XOR ECX,ECX
0040D498 . 8A48 25 MOV CL,BYTE PTR DS:[EAX+25]
0040D49B . 894D F8 MOV DWORD PTR SS:[EBP-8],ECX
0040D49E . 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10]
0040D4A1 . 8A40 24 MOV AL,BYTE PTR DS:[EAX+24]
0040D4A4 . 8845 FC MOV BYTE PTR SS:[EBP-4],AL
0040D4A7 . C745 F4 000000>MOV DWORD PTR SS:[EBP-C],0
0040D4AE . 33C0 XOR EAX,EAX
0040D4B0 . 8A45 FC MOV AL,BYTE PTR SS:[EBP-4]
0040D4B3 . 83F8 1F CMP EAX,1F
0040D4B6 . 0F8E 4E000000 JLE 0040D50A
0040D4BC . 33C0 XOR EAX,EAX
0040D4BE . 8A45 FC MOV AL,BYTE PTR SS:[EBP-4]
0040D4C1 . 83F8 28 CMP EAX,28
0040D4C4 . 0F83 40000000 JNB 0040D50A
0040D4CA . 33C0 XOR EAX,EAX
0040D4CC . 8A45 FC MOV AL,BYTE PTR SS:[EBP-4]
0040D4CF . 83F8 20 CMP EAX,20
0040D4D2 . 0F84 0E000000 JE 0040D4E6
0040D4D8 . 33C0 XOR EAX,EAX
0040D4DA . 8A45 FC MOV AL,BYTE PTR SS:[EBP-4]
0040D4DD . 83F8 21 CMP EAX,21
0040D4E0 . 0F85 09000000 JNZ 0040D4EF
0040D4E6 > C645 FC 20 MOV BYTE PTR SS:[EBP-4],20
0040D4EA . E9 1B000000 JMP 0040D50A
0040D4EF > 33C0 XOR EAX,EAX
0040D4F1 . 8A45 FC MOV AL,BYTE PTR SS:[EBP-4]
0040D4F4 . 83F8 26 CMP EAX,26
0040D4F7 . 0F85 09000000 JNZ 0040D506
0040D4FD . C645 FC 12 MOV BYTE PTR SS:[EBP-4],12
0040D501 . E9 04000000 JMP 0040D50A
0040D506 > C645 FC 1E MOV BYTE PTR SS:[EBP-4],1E
0040D50A > 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10]
0040D50D . 33C9 XOR ECX,ECX
0040D50F . 8A48 24 MOV CL,BYTE PTR DS:[EAX+24]
0040D512 . 51 PUSH ECX
0040D513 . E8 2D010000 CALL 0040D645 ——根据大兵种得出余数
0040D518 . 83C4 04 ADD ESP,4
0040D51B . 8945 EC MOV DWORD PTR SS:[EBP-14],EAX
0040D51E . E9 E2000000 JMP 0040D605
0040D605 > 837D EC 00 CMP DWORD PTR SS:[EBP-14],0
0040D609 .^0F84 A8FFFFFF JE 0040D5B7
0040D60F . 837D EC 01 CMP DWORD PTR SS:[EBP-14],1
0040D613 .^0F84 54FFFFFF JE 0040D56D
0040D619 . 837D EC 02 CMP DWORD PTR SS:[EBP-14],2
0040D61D .^0F84 00FFFFFF JE 0040D523
0040D623 . E9 00000000 JMP 0040D628
0040D523 > 33C0 XOR EAX,EAX
0040D525 . 8A45 FC MOV AL,BYTE PTR SS:[EBP-4]
0040D528 . 33C9 XOR ECX,ECX
0040D52A . 8A4D 08 MOV CL,BYTE PTR SS:[EBP+8]
0040D52D . 8BD1 MOV EDX,ECX
0040D52F . C1E1 05 SHL ECX,5
0040D532 . 03CA ADD ECX,EDX
0040D534 . 33D2 XOR EDX,EDX
0040D536 . 8A9408 6EEB440>MOV DL,BYTE PTR DS:[EAX+ECX+44EB6E]
0040D53D . 85D2 TEST EDX,EDX
0040D53F . 0F8E 24000000 JLE 0040D569
0040D545 . 33C0 XOR EAX,EAX
0040D547 . 8A45 FC MOV AL,BYTE PTR SS:[EBP-4]
0040D54A . 33C9 XOR ECX,ECX
0040D54C . 8A4D 08 MOV CL,BYTE PTR SS:[EBP+8]
0040D54F . 8BD1 MOV EDX,ECX
0040D551 . C1E1 05 SHL ECX,5
0040D554 . 03CA ADD ECX,EDX
0040D556 . 33D2 XOR EDX,EDX
0040D558 . 8A9408 6EEB440>MOV DL,BYTE PTR DS:[EAX+ECX+44EB6E]
0040D55F . 8D4452 03 LEA EAX,DWORD PTR DS:[EDX+EDX*2+3]
0040D563 . 8D0480 LEA EAX,DWORD PTR DS:[EAX+EAX*4]
0040D566 . 0145 F4 ADD DWORD PTR SS:[EBP-C],EAX
0040D569 > 836D F8 0F SUB DWORD PTR SS:[EBP-8],0F
0040D56D > 33C0 XOR EAX,EAX
0040D56F . 8A45 FC MOV AL,BYTE PTR SS:[EBP-4]
0040D572 . 33C9 XOR ECX,ECX
0040D574 . 8A4D 08 MOV CL,BYTE PTR SS:[EBP+8]
0040D577 . 8BD1 MOV EDX,ECX
0040D579 . C1E1 05 SHL ECX,5
0040D57C . 03CA ADD ECX,EDX
0040D57E . 33D2 XOR EDX,EDX
0040D580 . 8A9408 6FEB440>MOV DL,BYTE PTR DS:[EAX+ECX+44EB6F]
0040D587 . 85D2 TEST EDX,EDX
0040D589 . 0F8E 24000000 JLE 0040D5B3
0040D58F . 33C0 XOR EAX,EAX
0040D591 . 8A45 FC MOV AL,BYTE PTR SS:[EBP-4]
0040D594 . 33C9 XOR ECX,ECX
0040D596 . 8A4D 08 MOV CL,BYTE PTR SS:[EBP+8]
0040D599 . 8BD1 MOV EDX,ECX
0040D59B . C1E1 05 SHL ECX,5
0040D59E . 03CA ADD ECX,EDX
0040D5A0 . 33D2 XOR EDX,EDX
0040D5A2 . 8A9408 6FEB440>MOV DL,BYTE PTR DS:[EAX+ECX+44EB6F]
0040D5A9 . 8D4452 03 LEA EAX,DWORD PTR DS:[EDX+EDX*2+3]
0040D5AD . 8D0480 LEA EAX,DWORD PTR DS:[EAX+EAX*4]
0040D5B0 . 0145 F4 ADD DWORD PTR SS:[EBP-C],EAX
0040D5B3 > 836D F8 0F SUB DWORD PTR SS:[EBP-8],0F
0040D5B7 > 33C0 XOR EAX,EAX
0040D5B9 . 8A45 FC MOV AL,BYTE PTR SS:[EBP-4]
0040D5BC . 33C9 XOR ECX,ECX
0040D5BE . 8A4D 08 MOV CL,BYTE PTR SS:[EBP+8]
0040D5C1 . 8BD1 MOV EDX,ECX
0040D5C3 . C1E1 05 SHL ECX,5
0040D5C6 . 03CA ADD ECX,EDX
0040D5C8 . 33D2 XOR EDX,EDX
0040D5CA . 8A9408 70EB440>MOV DL,BYTE PTR DS:[EAX+ECX+44EB70]
0040D5D1 . 85D2 TEST EDX,EDX
0040D5D3 . 0F8E 22000000 JLE 0040D5FB
0040D5D9 . 33C0 XOR EAX,EAX
0040D5DB . 8A45 08 MOV AL,BYTE PTR SS:[EBP+8]
0040D5DE . 8BC8 MOV ECX,EAX
0040D5E0 . C1E0 05 SHL EAX,5
0040D5E3 . 03C1 ADD EAX,ECX
0040D5E5 . 33C9 XOR ECX,ECX
0040D5E7 . 8A4D FC MOV CL,BYTE PTR SS:[EBP-4]
0040D5EA . 33D2 XOR EDX,EDX
0040D5EC . 8A9408 70EB440>MOV DL,BYTE PTR DS:[EAX+ECX+44EB70]
0040D5F3 . 42 INC EDX
0040D5F4 . 0FAF55 F8 IMUL EDX,DWORD PTR SS:[EBP-8]
0040D5F8 . 0155 F4 ADD DWORD PTR SS:[EBP-C],EDX
0040D5FB > E9 28000000 JMP 0040D628
0040D600 . E9 23000000 JMP 0040D628
0040D628 > 33C0 XOR EAX,EAX
0040D62A . 8A45 08 MOV AL,BYTE PTR SS:[EBP+8]
0040D62D . 83F8 03 CMP EAX,3
0040D630 . 0F84 00000000 JE 0040D636
0040D636 > 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C]
0040D639 . E9 00000000 JMP 0040D63E
0040D63E > 5F POP EDI
0040D63F . 5E POP ESI
0040D640 . 5B POP EBX
0040D641 . C9 LEAVE
0040D642 . C2 0400 RETN 4
[ 本帖最后由 godtype 于 2010-7-30 20:36 编辑 ]
作者:
lewulezo 时间: 2010-7-31 20:38 标题: 回复 #19 godtype 的帖子
似乎把
0040D5F3 . 42 INC EDX
改成90就可以避免敌军属性按照+1来计算了
验证过了,确实有效
[ 本帖最后由 lewulezo 于 2010-8-1 09:35 编辑 ]
作者:
lewulezo 时间: 2010-8-6 23:02
光改上面的那个还不够的,为了对应高级兵种的升级情况,要避免+1计算,必须把
0040D55F . 8D4452 03 LEA EAX,DWORD PTR DS:[EDX+EDX*2+3]
0040D5A9 . 8D4452 03 LEA EAX,DWORD PTR DS:[EDX+EDX*2+3]
03改为00
欢迎光临 轩辕春秋文化论坛 (http://xycq.org.cn/forum/) |
Powered by Discuz! 5.0.0 |