mirror of
https://github.com/pret/pmd-sky.git
synced 2026-09-13 05:47:34 -05:00
Match few funcs of overlay_30
Thanks to @taxicat for matching ov30_02382874
This commit is contained in:
146
asm/overlay_30.s
146
asm/overlay_30.s
@@ -3,152 +3,6 @@
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start ov30_02382820
|
||||
ov30_02382820: ; 0x02382820
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
mov r6, r0
|
||||
mov r5, r1
|
||||
mov r0, #0x10
|
||||
mov r1, #5
|
||||
mov r4, r2
|
||||
bl MemAlloc
|
||||
ldr r1, _02382870 ; =ov30_023860A0
|
||||
mov r2, #0
|
||||
str r0, [r1]
|
||||
str r6, [r0, #4]
|
||||
ldr r0, [r1]
|
||||
str r5, [r0, #8]
|
||||
ldr r0, [r1]
|
||||
strb r2, [r0, #0xc]
|
||||
ldr r0, [r1]
|
||||
strb r4, [r0, #0xd]
|
||||
ldr r0, [r1]
|
||||
str r2, [r0]
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_02382870: .word ov30_023860A0
|
||||
arm_func_end ov30_02382820
|
||||
|
||||
arm_func_start ov30_02382874
|
||||
ov30_02382874: ; 0x02382874
|
||||
stmdb sp!, {r3, lr}
|
||||
ldr r0, _02382974 ; =ov30_023860A0
|
||||
ldr r1, [r0]
|
||||
ldr r0, [r1]
|
||||
cmp r0, #3
|
||||
addls pc, pc, r0, lsl #2
|
||||
b _0238296C
|
||||
_02382890: ; jump table
|
||||
b _023828A0 ; case 0
|
||||
b _02382948 ; case 1
|
||||
b _0238296C ; case 2
|
||||
b _02382964 ; case 3
|
||||
_023828A0:
|
||||
ldmib r1, {r0, r1}
|
||||
bl ReadQuickSaveInfo
|
||||
cmp r0, #0
|
||||
bne _023828D4
|
||||
ldr r2, _02382974 ; =ov30_023860A0
|
||||
ldr r1, _02382978 ; =0x21061522
|
||||
ldr r3, [r2]
|
||||
ldr r2, [r3, #8]
|
||||
ldr r3, [r3, #4]
|
||||
sub r2, r2, #4
|
||||
ldr r2, [r3, r2]
|
||||
cmp r2, r1
|
||||
movne r0, #4
|
||||
_023828D4:
|
||||
cmp r0, #0
|
||||
bne _023828FC
|
||||
ldr r0, _02382974 ; =ov30_023860A0
|
||||
mov r3, #1
|
||||
ldr r2, [r0]
|
||||
mov r1, #3
|
||||
strb r3, [r2, #0xc]
|
||||
ldr r0, [r0]
|
||||
str r1, [r0]
|
||||
b _0238296C
|
||||
_023828FC:
|
||||
cmp r0, #1
|
||||
mov r2, #0
|
||||
bne _02382928
|
||||
ldr r0, _0238297C ; =0x0000040C
|
||||
#ifdef JAPAN
|
||||
add r1, r0, #0xcc
|
||||
#else
|
||||
ldr r1, _02382980 ; =0x00000247
|
||||
#endif
|
||||
bl sub_02034EB4
|
||||
ldr r0, _02382974 ; =ov30_023860A0
|
||||
mov r1, #2
|
||||
ldr r0, [r0]
|
||||
str r1, [r0]
|
||||
b _0238296C
|
||||
_02382928:
|
||||
ldr r0, _02382984 ; =0x0000061C
|
||||
ldr r1, _02382988 ; =0x0000024D
|
||||
bl sub_02034EB4
|
||||
ldr r0, _02382974 ; =ov30_023860A0
|
||||
mov r1, #1
|
||||
ldr r0, [r0]
|
||||
str r1, [r0]
|
||||
b _0238296C
|
||||
_02382948:
|
||||
bl sub_02034DA8
|
||||
cmp r0, #0
|
||||
ldreq r0, _02382974 ; =ov30_023860A0
|
||||
moveq r1, #3
|
||||
ldreq r0, [r0]
|
||||
streq r1, [r0]
|
||||
b _0238296C
|
||||
_02382964:
|
||||
mov r0, #0
|
||||
ldmia sp!, {r3, pc}
|
||||
_0238296C:
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, pc}
|
||||
.align 2, 0
|
||||
_02382974: .word ov30_023860A0
|
||||
#ifdef JAPAN
|
||||
_02382978: .word 0x20111122
|
||||
_0238297C: .word 0x0000040C
|
||||
_02382984: .word 0x0000061C
|
||||
_02382988: .word 0x000004DE
|
||||
#else
|
||||
_02382978: .word 0x21061522
|
||||
_0238297C: .word 0x0000040C
|
||||
_02382980: .word 0x00000247
|
||||
_02382984: .word 0x0000061C
|
||||
_02382988: .word 0x0000024D
|
||||
#endif
|
||||
arm_func_end ov30_02382874
|
||||
|
||||
arm_func_start ov30_0238298C
|
||||
ov30_0238298C: ; 0x0238298C
|
||||
ldr r0, _0238299C ; =ov30_023860A0
|
||||
ldr r0, [r0]
|
||||
ldrb r0, [r0, #0xc]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_0238299C: .word ov30_023860A0
|
||||
arm_func_end ov30_0238298C
|
||||
|
||||
arm_func_start ov30_023829A0
|
||||
ov30_023829A0: ; 0x023829A0
|
||||
stmdb sp!, {r3, lr}
|
||||
ldr r0, _023829C8 ; =ov30_023860A0
|
||||
ldr r0, [r0]
|
||||
cmp r0, #0
|
||||
ldmeqia sp!, {r3, pc}
|
||||
bl MemFree
|
||||
ldr r0, _023829C8 ; =ov30_023860A0
|
||||
mov r1, #0
|
||||
str r1, [r0]
|
||||
ldmia sp!, {r3, pc}
|
||||
.align 2, 0
|
||||
_023829C8: .word ov30_023860A0
|
||||
arm_func_end ov30_023829A0
|
||||
|
||||
arm_func_start ov30_023829CC
|
||||
ov30_023829CC: ; 0x023829CC
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
|
||||
10
include/overlay_30.h
Normal file
10
include/overlay_30.h
Normal file
@@ -0,0 +1,10 @@
|
||||
#ifndef PMD_SKY_OVERLAY_30_H
|
||||
#define PMD_SKY_OVERLAY_30_H
|
||||
|
||||
void ov30_02382820(s32 arg0, s32 arg1, s32 isGameModeRescue);
|
||||
s32 ov30_02382874(void);
|
||||
u8 ov30_0238298C(void);
|
||||
void ov30_023829A0(void);
|
||||
|
||||
|
||||
#endif // PMD_SKY_OVERLAY_30_H
|
||||
1
main.lsf
1
main.lsf
@@ -1294,6 +1294,7 @@ Overlay OVY_29
|
||||
Overlay OVY_30
|
||||
{
|
||||
After OVY_29
|
||||
Object src/overlay_30_init.o
|
||||
Object asm/overlay_30.o
|
||||
}
|
||||
Overlay OVY_31
|
||||
|
||||
95
src/overlay_30_init.c
Normal file
95
src/overlay_30_init.c
Normal file
@@ -0,0 +1,95 @@
|
||||
#include "overlay_30.h"
|
||||
|
||||
|
||||
struct Overlay30Main {
|
||||
s32 state;
|
||||
s32 unk4;
|
||||
s32 unk8;
|
||||
u8 unkC;
|
||||
s8 isGameModeRescue; // GAME_MODE_RESCUE
|
||||
};
|
||||
|
||||
extern struct Overlay30Main* ov30_023860A0;
|
||||
|
||||
extern s32 ReadQuickSaveInfo(s32, s32);
|
||||
extern s32 sub_02034DA8();
|
||||
extern void sub_02034EB4(s32, s32, s32);
|
||||
extern void* MemAlloc(u32 len, u32 flags);
|
||||
extern void MemFree(void *);
|
||||
|
||||
#ifdef JAPAN
|
||||
#define SAVE_CHECKSUM 0x20111122
|
||||
#else
|
||||
#define SAVE_CHECKSUM 0x21061522
|
||||
#endif
|
||||
|
||||
#define SAVE_VALID 1
|
||||
#define SAVE_INVALID_CHECKSUM 4
|
||||
|
||||
void ov30_02382820(s32 arg0, s32 arg1, s32 isGameModeRescue)
|
||||
{
|
||||
|
||||
ov30_023860A0 = MemAlloc(sizeof(struct Overlay30Main), 5);
|
||||
ov30_023860A0->unk4 = arg0;
|
||||
ov30_023860A0->unk8 = arg1;
|
||||
ov30_023860A0->unkC = 0;
|
||||
ov30_023860A0->isGameModeRescue = isGameModeRescue;
|
||||
ov30_023860A0->state = 0;
|
||||
}
|
||||
|
||||
s32 ov30_02382874(void)
|
||||
{
|
||||
s32 saveStatus;
|
||||
|
||||
switch (ov30_023860A0->state) {
|
||||
default:
|
||||
case 2:
|
||||
break;
|
||||
case 0:
|
||||
saveStatus = ReadQuickSaveInfo(ov30_023860A0->unk4, ov30_023860A0->unk8);
|
||||
if ((saveStatus == 0) && (*(u32*)(ov30_023860A0->unk4 + (ov30_023860A0->unk8 - 4)) != SAVE_CHECKSUM)) {
|
||||
saveStatus = SAVE_INVALID_CHECKSUM;
|
||||
}
|
||||
if (saveStatus == 0) {
|
||||
ov30_023860A0->unkC = 1;
|
||||
ov30_023860A0->state = 3;
|
||||
} else if (saveStatus == SAVE_VALID) {
|
||||
#ifdef JAPAN
|
||||
sub_02034EB4(0x40C, 0x4D8, 0);
|
||||
#else
|
||||
sub_02034EB4(0x40C, 0x247, 0);
|
||||
#endif
|
||||
ov30_023860A0->state = 2;
|
||||
} else {
|
||||
#ifdef JAPAN
|
||||
sub_02034EB4(0x61C, 0x4DE, 0);
|
||||
#else
|
||||
sub_02034EB4(0x61C, 0x24D, 0);
|
||||
#endif
|
||||
ov30_023860A0->state = 1;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (sub_02034DA8() == 0) {
|
||||
ov30_023860A0->state = 3;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
u8 ov30_0238298C(void)
|
||||
{
|
||||
return ov30_023860A0->unkC;
|
||||
}
|
||||
|
||||
void ov30_023829A0(void)
|
||||
{
|
||||
if(ov30_023860A0 != NULL)
|
||||
{
|
||||
MemFree(ov30_023860A0);
|
||||
ov30_023860A0 = NULL;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user