标题:
SS—Madou Monogatari魔导物语解压汇编源码
[打印本页]
作者:
yzb
时间:
2021-2-26 20:09
标题:
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
复制代码
欢迎光临 意志之路汉化组 (http://yzzl.kxb4u.com/)
Powered by Discuz! 7.2