|

- 帖子
- 11
- 精华
- 0
- 积分
- 45
- 威望
- 0
- 金钱
- 13
- 阅读权限
- 10
- 注册时间
- 2011-3-16
|
光明力量3第二部反汇编和高级修改
目标游戏 光明力量3第二部
工具:IDA,yabause IDA处理器选项中找不到sh2,用sh4B代替
首先利用yabause在人物属性结构中魔法编号(网上可找到现成的金手指)的地址下断
mov.b @r10, r4 ; 断在此处,取魔法编号
mov.l dword_80CA74C, r0 ; 此处反汇编与yabause不同,可能是cpu选的有问题
jsr @r0 ; 取魔法属性地址,
extu.b r4, r4
mov.l @r9, r1 ; 1->r1 @r9存的应该是魔法的等级
mov r0, r2
add #-1, r1
shll2 r1
add r2, r1 ; r1=魔法属性地址
mov.b @r8, r2 ; 取人物的现有MP值
add #6, r1
mov.b @r1, r1 ; 取该编号的魔法MP消耗值
extu.b r2, r2
extu.b r1, r1
cmp/hs r1, r2
bt loc_80CA64E ; MP够了则跳
mov.w 080CA746, r5 ; 猜测下面代码的作用是显示MP不够
mov.l dword_80CA750, r4 ; h'1D3E38EA
mov.l dword_80CA754, r1 ; h'EBBEAACF
mov #1, r7
jsr @r1
mov #h'78, r6
bra loc_80CA38A
mov #h'63, r10
get_MagicAddress:
code:080ACF44 exts.w r4, r4 ; r4=魔法编号
code:080ACF46 extu.w r4, r2
code:080ACF48 mov.w word_80ACF5E, r1 ; h'FF
code:080ACF4A cmp/hi r1, r2
code:080ACF4C bf loc_80ACF50
code:080ACF4E mov #0, r4
code:080ACF50
code:080ACF50 loc_80ACF50: ; CODE XREF: get_MagicAddress+8j
code:080ACF50 mov #h'14, r1
code:080ACF52 muls r1, r4 ; 编号*常数,这是明显标志,这个常数表示每个魔法属性结构所占的字节数
code:080ACF54 sts macl, r2
code:080ACF56 mov.l dword_80ACF60, r1 ; h'602E658
code:080ACF58 mov r2, r0
code:080ACF5A rts
code:080ACF5C add r1, r0 ;r1存的就是魔法属性的基址
code:080ACF5C ; End of function get_MagicAddress
code:080ACF5C
分析魔法属性结构:
支援魔法属性(每个魔法占0x14字节)
02 01 00 00 10 02 05 00 20 03 09 00 00 01 00 00
00 01 00 00
+0 使用对象 02-对自己人 01-对敌人
+1 魔法类型 1-能力变化 0-减血
+4 一级距离 31-一至三格
+5 一级范围 04-全体
+6 一级MP消耗值
+7 一级威力
后面3字节代表二级、三级、四级属性
根据以上的方法又找到物品和必杀技的属性结构
必杀技属性(每个占4字节)
01 0A 10 24
+3 威力 不能设得太高 最高可设为4A
半人马之箭(BC)属性:占24个字节:
75 30 46 10 01 32 1F 07 03 00 04 10 05 0F 03 03
13 07 07 02 12 79 18 02
+00 价格
+02 物品相性
+03物品属性 10-不会损坏 11-可以损坏 12-装备后处于诅咒状态
+04装备限制
+05使用范围 32-2至3格 31-1至3格 最大3格
+06 增加的攻击力
+07 增加的防御力
+0E 加强的属性为速度
+14 装备学会的能力 11表示魔法 12表示必杀技
+15 魔法或者必杀技的编码
+16 使用产生魔法类型 1604全体加HP 1702全体加MP 1D升级效果 10吸血吸魔
+17 魔法等级
(01攻击 02防御 03速度 04移动 05运气 11装备学会的魔法
12必杀技, 13会心率 14反击率 0E光属性防御 08每回合增加的MP 07每回合增加的HP,不能放最后的一个字 ) |
|