《恶魔城晓月圆舞曲》HACK教程(二)开启被屏蔽的Q版娃娃造型(表篇)

      TUTOR 2006-6-21 17:39

作者:0 DAY-S[EGCG]           转载请注明出处
工具:NO$ GBA,晓月中文版(基于日版汉化)


在晓月中,当装备第51号红魂“杀人玩偶”时,按上B会随机丢出Q版娃娃,但只有苍真和弥娜的坐姿。

(见图一,二)通过查看VRAM图(见图三),发现娃娃有未调用的图。这说明可能存在被屏蔽的娃娃程序。

   图一                  图二

              

                图三

 

                

如何找到该程序呢?思路有两种,一是对装备红魂的内存地址(201325D)设置写断点,按上B中断

后往下跟,注意寄存器中的程序指针;二是对丢出娃娃的声音程序设断(详细见教程(一))。两种

方法均可找到以下程序:Q版娃娃OBJ基址:20005EC

子程序段共3段
00   娃娃初始化程序
01   丢出娃娃程序
02   娃娃消失程序

/////////////////////////////////////////////
0802409C B5F0     push    r4-r7,lr
0802409E 464F     mov     r7,r9
080240A0 4646     mov     r6,r8
080240A2 B4C0     push    r6,r7
080240A4 1C07     mov     r7,r0
080240A6 6978     ldr     r0,[r7,14h]
080240A8 4680     mov     r8,r0
080240AA 2180     mov     r1,80h
080240AC 0049     lsl     r1,r1,1h
080240AE 4689     mov     r9,r1
080240B0 7AB8     ldrb    r0,[r7,0Ah]         ;Q版娃娃的程序指针控制
080240B2 2801     cmp     r0,1h               ;ID等于1
080240B4 D063     beq     802417Eh            ;跳
080240B6 2801     cmp     r0,1h
080240B8 DC02     bgt     80240C0h            ;ID大于1
080240BA 2800     cmp     r0,0h          
080240BC D004     beq     80240C8h            ;ID等于0
080240BE E10F     b       80242E0h
080240C0 2802     cmp     r0,2h              
080240C2 D100     bne     80240C6h
080240C4 E0EC     b       80242A0h            ;ID等于2
080240C6 E10B     b       80242E0h            ;ID大于2

080240C8 4848     ldr     r0,=80DF904h        ;该地址为一图象指针
080240CA 1C01     mov     r1,r0
080240CC 3148     add     r1,48h
080240CE 6C80     ldr     r0,[r0,48h]         ;得到娃娃图象数据基指针
080240D0 684D     ldr     r5,[r1,4h]          ;指针
080240D2 688E     ldr     r6,[r1,8h]          ;指针
080240D4 2180     mov     r1,80h
080240D6 0249     lsl     r1,r1,9h
080240D8 F016FBEA bl      803A8B0h
080240DC 4C44     ldr     r4,=84BCA78h
080240DE 6821     ldr     r1,[r4]
080240E0 4A44     ldr     r2,=131C0h           ;关键内存,0D表示娃娃的图
080240E2 1889     add     r1,r1,r2
080240E4 6008     str     r0,[r1]
080240E6 1C28     mov     r0,r5
080240E8 2100     mov     r1,0h
080240EA 2201     mov     r2,1h
080240EC 2302     mov     r3,2h
080240EE F017FBEB bl      803B8C8h
080240F2 6820     ldr     r0,[r4]
080240F4 4B3F     ldr     r3,=131C0h            ;关键内存
080240F6 18C0     add     r0,r0,r3
080240F8 6802     ldr     r2,[r0]
080240FA 1C38     mov     r0,r7
080240FC 1C31     mov     r1,r6
080240FE 2302     mov     r3,2h
08024100 F016FC68 bl      803A9D4h
08024104 F7DCFCC2 bl      8000A8Ch            ;随机数生成程序    
08024108 1C01     mov     r1,r0               ;r0返回随机数
0802410A 2001     mov     r0,1h               ;(只有0,1。2,3被屏蔽)
0802410C 4001     and     r1,r0
0802410E 1C38     mov     r0,r7
08024110 2200     mov     r2,0h
08024112 2301     mov     r3,1h
08024114 F01AF962 bl      803E3DCh            ;Q版娃娃动作调用
08024118 4837     ldr     r0,=803AA81h        ;娃娃动作和坐标处理程序
0802411A 6078     str     r0,[r7,4h]
0802411C 1C39     mov     r1,r7
0802411E 315C     add     r1,5Ch
08024120 200D     mov     r0,0Dh
08024122 7008     strb    r0,[r1]
08024124 1C3A     mov     r2,r7
08024126 3259     add     r2,59h
08024128 7810     ldrb    r0,[r2]
0802412A 2102     mov     r1,2h
0802412C 4308     orr     r0,r1
0802412E 7010     strb    r0,[r2]
08024130 20E5     mov     r0,0E5h             ;丢娃娃的声音
08024132 F0B1FED9 bl      80D5EE8h            ;声音调用

注意这里:

08024104 F7DCFCC2 bl      8000A8Ch            ;随机数生成程序    
08024108 1C01     mov     r1,r0               ;r0返回随机数
0802410A 2001     mov     r0,1h               ;(只有0,1。2,3被屏蔽)
0802410C 4001     and     r1,r0               ;
0802410E 1C38     mov     r0,r7
08024110 2200     mov     r2,0h
08024112 2301     mov     r3,1h
08024114 F01AF962 bl      803E3DCh            ;Q版娃娃动作调用

很显然随机数生成程序靠r0返回结果,并且靠and运算控制范围。
这里的随机数作为Q版娃娃图象数据和程序的寻址参数。
那么我们将0802410A 2001     mov     r0,1h   改为     mov     r0,3h就可以返回0-3的随机数了。

回到游戏中,经测试果然随机增加了两种娃娃造型,一种是Q版苍真的站姿(见图四),一种

是Q版苍真出剑。(见图五)Y^0^Y

    图四                  图五



预告:在里篇中我会记录讲解新的Q版娃娃的方法,敬请期待。

PS:因为明天要去看一个朋友,这篇赶工写得很糙。等有空再修改一下好了。这几天暂时不会更新。

呼,写得好累……

标签集:TAGS:
回复Comments() 点击Count()

回复Comments

{commentauthor}
{commentauthor}
{commenttime}
{commentnum}
{commentcontent}
作者:
{commentrecontent}
}