孔明传经验获得的分析
物理攻击获得的经验值有两个,分别保存在内存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 编辑 ] | |