|

- 帖子
- 86
- 精华
- 0
- 积分
- 283
- 威望
- 0
- 金钱
- 206
- 阅读权限
- 70
- 注册时间
- 2011-3-5
|
SS—Madou Monogatari魔导物语解压汇编源码
本帖最后由 yzb 于 2021-2-26 20:20 编辑
最近无聊看了一下ss的这个rpg游戏,魔导物语,2D画面比较讨喜,所以稍微研究了一下
这个游戏的资源文件除了音乐以外,其他文件90&是压缩过的,不过万幸只用了一种,类似lzss
解压源码在内存:603617C
简单说一下解压原理:
1个字节标志位每次 & 3 ,然后判断结果
==0,结束本次解压,然后压缩地址读一个字节,压缩地址指针+此字节,标志位清0,然后再次从新压缩地址读一个字节判断是否为0,不是重新循环解压,是的话结束解压
==1 从压缩数据读取一个字节写入到解压地址
==2 读2个字节到r1 解压地址回退( r1>>5)-1,复制长度为r1&1f 低5bit+4
==3 读一个字节到n,从压缩地址读n个字节到解压地址
比较简单的压缩方法,个人感觉还不如lzss
游戏字库在font.cel,解压以后就是明文了,小字为8x8,大字是4个8x8组成的16x16,总容量比较小,如果要汉化可能要扩充
游戏文本在那些MPxxx.SEQ里面,同样需要解压,解压以后久是脚本了,比较复杂,自定义编码,而且脚本的分支比较多,不过看起来编码倒是不用扩充,足够多了
暂时就到这了吧,热度已退 - sub_603617C: ; CODE XREF: sub_6036038+44p
- mov.l r8, @-r15
- mov.l r9, @-r15
- mov.l r10, @-r15
- mov.l r11, @-r15
- mov.l r12, @-r15
- mov.l r13, @-r15
- mov.l r14, @-r15
- sts.l pr, @-r15
- add #-h'18, r15
- mov r15, r14
- mov r4, r10
- mov r5, r8
- mov.l r6, @r14
- mov.l r10, @(4,r14)
- mov.l r8, @(8,r14)
- mov #0, r3
- mov.l r3, @(h'14,r14)
- mov.b @r8+, r1
- mov #0, r11
- mov.l @(h'100,pc), r7 ; [060362A4] = h'60A743C
- extu.b r1, r12
- loc_60361A6: ; CODE XREF: sub_603617C+DEj
- ; sub_603617C+E8j
- mov #3, r2
- and r12, r2
- mov #3, r1
- cmp/hi r1, r2 ; &3
- bt/s loc_6036250
- mov r2, r1
- add r1, r1
- mova @(8,pc), r0 ;
- mov.w @(r0,r1), r1
- add r1, r0
- jmp @r0
- nop
- ; ---------------------------------------------------------------------------
- nop
- ; ---------------------------------------------------------------------------
- word_60361C0: .data.w h'56 ; DATA XREF: sub_603617C+38o
- .data.w h'4E
- .data.w 8
- .data.w h'36
- ; ---------------------------------------------------------------------------
- mov #h'1F, r9
- mov r10, r5
- mov.b @r8+, r2
- mov r10, r4
- extu.b r2, r2
- mov.b @r8+, r1
- shll8 r2
- extu.b r1, r1
- or r1, r2 ;
- and r2, r9
- add #4, r9 ;
- shlr2 r2
- shlr r2
- shlr2 r2
- add #1, r2
- sub r2, r5
- mov.l @(h'BC,pc), r1 ; [060362A8] = sub_60362B8
- mov r9, r6
- jsr @r1 ; sub_60362B8
- mov.l r7, @(h'10,r14)
- mov.l @(h'10,r14), r7
- bra loc_6036250
- add r9, r10
- ; ---------------------------------------------------------------------------
- mov.b @r8+, r1
- extu.b r1, r9
- cmp/pl r9
- bf loc_6036250
- loc_60361FE:
- mov.b @r8+, r1
- add #-1, r9
- cmp/pl r9
- mov.b r1, @r10
- bt/s loc_60361FE
- add #1, r10
- bra loc_6036252
- add #1, r11
- ; ---------------------------------------------------------------------------
- mov.b @r8+, r1
- mov.b r1, @r10
- bra loc_6036250
- add #1, r10
- ; ---------------------------------------------------------------------------
- mov.b @r8, r1
- mov.l @(h'14,r14), r13
- mov #4, r11
- mov.l @r14, r3
- extu.b r1, r1
- add r1, r8
- add #1, r8
- add #1, r13
- tst r3, r3
- bt/s loc_6036250
- mov.l r13, @(h'14,r14)
- cmp/gt r13, r3
- bt/s loc_6036252
- add #1, r11
- mov r8, r1
- mov.l @(8,r14), r13
- sub r13, r1
- mov.l @(h'70,pc), r13 ; [060362AC] = h'60A7434
- mov.l @r7, r2
- mov #1, r0
- add r1, r2
- mov.l r2, @r7
- mov.l @(4,r14), r3
- mov r10, r1
- mov.l @r13, r2
- sub r3, r1
- add r1, r2
- bra loc_6036284
- mov.l r2, @r13
- ; ---------------------------------------------------------------------------
- loc_6036250: ; CODE XREF: sub_603617C+32j
- ; sub_603617C+76j ...
- add #1, r11
- loc_6036252: ; CODE XREF: sub_603617C+8Ej
- ; sub_603617C+B2j
- mov #3, r1 ;
- cmp/gt r1, r11
- bt/s loc_603625E
- shar r12
- bra loc_60361A6
- shar r12
- ; ---------------------------------------------------------------------------
- loc_603625E: ; CODE XREF: sub_603617C+DAj
- mov.b @r8+, r1
- extu.b r1, r12
- tst r12, r12 ;
- bf/s loc_60361A6
- mov #0, r11
- mov r10, r1 ;
- mov.l @(4,r14), r3
- sub r3, r1
- mov.l @(h'3C,pc), r13 ; [060362AC] = h'60A7434
- mov.l @r13, r2 ;
- mov #2, r0
- add r1, r2
- mov.l r2, @r13
- mov.l @(8,r14), r3
- mov r8, r1 ;
- mov.l @r7, r2
- sub r3, r1
- add r1, r2
- mov.l r2, @r7
- loc_6036284: ; CODE XREF: sub_603617C+D0j
- mov.l @(h'28,pc), r1 ; [060362B0] = h'60A7440
- mov.l r8, @r1
- mov.l @(h'28,pc), r1 ; [060362B4] = h'60A7438
- mov.l r10, @r1
- add #h'18, r14
- mov r14, r15
- lds.l @r15+, pr
- mov.l @r15+, r14
- mov.l @r15+, r13
- mov.l @r15+, r12
- mov.l @r15+, r11
- mov.l @r15+, r10
- mov.l @r15+, r9
- rts
- mov.l @r15+, r8
复制代码 |
|