diff options
author | YamaArashi <shadow962@live.com> | 2016-10-22 14:52:52 -0700 |
---|---|---|
committer | YamaArashi <shadow962@live.com> | 2016-10-22 14:52:52 -0700 |
commit | 3a5e29514b2e6cd3e3568db9600811aff2bfad68 (patch) | |
tree | e37cdd8d4b76271d6c24f116dad89c35cbfb8707 | |
parent | e348acba2ee172c106c9bc6f553fe7fc959d9390 (diff) |
decompile more rom4 functions
-rw-r--r-- | asm/rom4.s | 311 | ||||
-rw-r--r-- | data/data2.s | 11 | ||||
-rw-r--r-- | src/rom4.c | 155 |
3 files changed, 163 insertions, 314 deletions
diff --git a/asm/rom4.s b/asm/rom4.s index 419de8a05..cdd62c74b 100644 --- a/asm/rom4.s +++ b/asm/rom4.s @@ -5,317 +5,6 @@ .text - thumb_func_start sub_805546C -sub_805546C: @ 805546C - push {lr} - ldr r1, _08055490 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x82 - bne _0805549C - ldr r0, _08055494 - ldrh r1, [r0, 0x2E] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0805549C - ldr r0, _08055498 - bl sub_80543DC - movs r0, 0x1D - b _0805549E - .align 2, 0 -_08055490: .4byte gUnknown_03000580 -_08055494: .4byte gMain -_08055498: .4byte sub_8055468 -_0805549C: - movs r0, 0x11 -_0805549E: - pop {r1} - bx r1 - thumb_func_end sub_805546C - - thumb_func_start sub_80554A4 -sub_80554A4: @ 80554A4 - push {lr} - ldr r0, _080554B4 - bl sub_80543DC - movs r0, 0x16 - pop {r1} - bx r1 - .align 2, 0 -_080554B4: .4byte sub_805546C - thumb_func_end sub_80554A4 - - thumb_func_start sub_80554B8 -sub_80554B8: @ 80554B8 - movs r0, 0x11 - bx lr - thumb_func_end sub_80554B8 - - thumb_func_start sub_80554BC -sub_80554BC: @ 80554BC - push {lr} - movs r0, 0x83 - bl sub_8054F88 - cmp r0, 0x1 - bne _080554D4 - ldr r0, _080554DC - bl ScriptContext1_SetupScript - ldr r0, _080554E0 - bl sub_80543DC -_080554D4: - movs r0, 0x11 - pop {r1} - bx r1 - .align 2, 0 -_080554DC: .4byte gUnknown_081A4508 -_080554E0: .4byte sub_80554B8 - thumb_func_end sub_80554BC - - thumb_func_start sub_80554E4 -sub_80554E4: @ 80554E4 - push {lr} - ldr r0, _080554F4 - bl sub_80543DC - movs r0, 0x17 - pop {r1} - bx r1 - .align 2, 0 -_080554F4: .4byte sub_80554BC - thumb_func_end sub_80554E4 - - thumb_func_start sub_80554F8 -sub_80554F8: @ 80554F8 - push {lr} - movs r0, 0x83 - bl sub_8054FC0 - cmp r0, 0x1 - beq _0805554A - ldr r0, _08055524 - ldr r2, [r0] - ldr r1, _08055528 - adds r3, r0, 0 - cmp r2, r1 - bne _08055534 - ldr r1, _0805552C - ldr r0, _08055530 - ldrb r0, [r0] - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x82 - beq _08055534 - movs r0, 0 - b _08055562 - .align 2, 0 -_08055524: .4byte gUnknown_03000584 -_08055528: .4byte sub_805546C -_0805552C: .4byte gUnknown_03000580 -_08055530: .4byte gUnknown_03004860 -_08055534: - ldr r1, [r3] - ldr r0, _08055550 - cmp r1, r0 - bne _0805555C - ldr r1, _08055554 - ldr r0, _08055558 - ldrb r0, [r0] - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x81 - bne _0805555C -_0805554A: - movs r0, 0x2 - b _08055562 - .align 2, 0 -_08055550: .4byte sub_8055468 -_08055554: .4byte gUnknown_03000580 -_08055558: .4byte gUnknown_03004860 -_0805555C: - movs r0, 0x82 - bl sub_8054F88 -_08055562: - pop {r1} - bx r1 - thumb_func_end sub_80554F8 - - thumb_func_start unref_sub_8055568 -unref_sub_8055568: @ 8055568 - push {lr} - movs r0, 0x83 - bl sub_8054FC0 - pop {r1} - bx r1 - thumb_func_end unref_sub_8055568 - - thumb_func_start sub_8055574 -sub_8055574: @ 8055574 - push {lr} - ldr r0, _08055584 - bl sub_80543DC - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_08055584: .4byte sub_80554A4 - thumb_func_end sub_8055574 - - thumb_func_start sub_8055588 -sub_8055588: @ 8055588 - push {lr} - ldr r0, _08055598 - bl sub_80543DC - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_08055598: .4byte sub_80553E4 - thumb_func_end sub_8055588 - - thumb_func_start sub_805559C -sub_805559C: @ 805559C - push {lr} - ldr r0, _080555AC - bl sub_80543DC - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_080555AC: .4byte sub_80554E4 - thumb_func_end sub_805559C - - thumb_func_start sub_80555B0 -sub_80555B0: @ 80555B0 - push {r4-r6,lr} - sub sp, 0x4 - adds r4, r0, 0 - adds r6, r2, 0 - strb r4, [r6] - movs r0, 0 - cmp r4, r1 - bne _080555C2 - movs r0, 0x1 -_080555C2: - strb r0, [r6, 0x1] - ldr r1, _08055614 - lsls r0, r4, 2 - adds r0, r1 - ldrb r0, [r0, 0x3] - strb r0, [r6, 0x2] - lsls r4, 24 - lsrs r4, 24 - adds r0, r4, 0 - bl sub_8055B30 - strb r0, [r6, 0x3] - mov r5, sp - adds r5, 0x2 - adds r0, r4, 0 - mov r1, sp - adds r2, r5, 0 - bl sub_8055B08 - mov r0, sp - ldrh r0, [r0] - strh r0, [r6, 0x4] - ldrh r0, [r5] - strh r0, [r6, 0x6] - adds r0, r4, 0 - bl sub_8055B50 - strb r0, [r6, 0x8] - mov r0, sp - movs r1, 0 - ldrsh r0, [r0, r1] - movs r2, 0 - ldrsh r1, [r5, r2] - bl MapGridGetMetatileBehaviorAt - strh r0, [r6, 0xC] - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08055614: .4byte gUnknown_02029818 - thumb_func_end sub_80555B0 - - thumb_func_start sub_8055618 -sub_8055618: @ 8055618 - push {lr} - ldrb r0, [r0, 0x2] - cmp r0, 0x2 - beq _08055624 - cmp r0, 0 - bne _08055628 -_08055624: - movs r0, 0x1 - b _0805562A -_08055628: - movs r0, 0 -_0805562A: - pop {r1} - bx r1 - thumb_func_end sub_8055618 - - thumb_func_start sub_8055630 -sub_8055630: @ 8055630 - push {lr} - ldrb r0, [r0, 0x2] - cmp r0, 0x2 - beq _0805563C - cmp r0, 0 - bne _08055640 -_0805563C: - movs r0, 0x1 - b _08055642 -_08055640: - movs r0, 0 -_08055642: - pop {r1} - bx r1 - thumb_func_end sub_8055630 - - thumb_func_start sub_8055648 -sub_8055648: @ 8055648 - push {lr} - adds r1, r0, 0 - ldrb r0, [r1, 0x2] - cmp r0, 0x2 - bne _0805565A - adds r0, r1, 0x4 - bl sub_8068E24 - b _0805565C -_0805565A: - movs r0, 0 -_0805565C: - pop {r1} - bx r1 - thumb_func_end sub_8055648 - - thumb_func_start sub_8055660 -sub_8055660: @ 8055660 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4, 0x2] - cmp r0, 0x2 - beq _0805566E - cmp r0, 0 - bne _08055684 -_0805566E: - ldrb r0, [r4, 0xC] - bl MetatileBehavior_IsSouthArrowWarp - lsls r0, 24 - cmp r0, 0 - beq _08055684 - ldrb r0, [r4, 0x3] - cmp r0, 0x1 - bne _08055684 - movs r0, 0x1 - b _08055686 -_08055684: - movs r0, 0 -_08055686: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8055660 - thumb_func_start sub_805568C sub_805568C: @ 805568C push {r4,lr} diff --git a/data/data2.s b/data/data2.s index 8eea57806..784597d8a 100644 --- a/data/data2.s +++ b/data/data2.s @@ -3872,8 +3872,17 @@ gDummyWarpData:: @ 8216624 .incbin "baserom.gba", 0x0021662C, 0x20 + .align 2 gUnknown_0821664C:: @ 821664C - .incbin "baserom.gba", 0x0021664c, 0x48 + .4byte 0, 0 + .4byte 0, 1 + .4byte 0, -1 + .4byte -1, 0 + .4byte 1, 0 + .4byte -1, 1 + .4byte 1, 1 + .4byte -1, -1 + .4byte 1, -1 .align 2 gUnknown_08216694:: @ 8216694 diff --git a/src/rom4.c b/src/rom4.c index 8e25494c5..64939efe6 100644 --- a/src/rom4.c +++ b/src/rom4.c @@ -42,11 +42,26 @@ struct UnkInputStruct u8 input_field_3; }; +struct UnkStruct_8054FF8_Substruct +{ + u16 field_4; + u16 field_6; + u8 field_8; +}; + struct UnkStruct_8054FF8 { u8 a; u8 b; - u8 filler[14]; + u8 c; + u8 d; + struct UnkStruct_8054FF8_Substruct sub; + u16 field_C; +}; + +struct UnkMapObjStruct +{ + u8 a, b, c, d; }; extern struct WarpData gUnknown_020297F0; @@ -56,6 +71,7 @@ extern struct WarpData gUnknown_02029808; extern struct UnkPlayerStruct gUnknown_02029810; extern u16 gUnknown_02029814; extern u8 gUnknown_02029816; +extern struct UnkMapObjStruct gUnknown_02029818[]; extern u8 gUnknown_0202E85C; extern u8 gUnknown_0202E85D; @@ -75,6 +91,7 @@ extern u16 gUnknown_0300489C; extern u8 gUnknown_0819FC74[]; extern u8 gUnknown_0819FC9F[]; +extern u8 gUnknown_081A4508[]; extern struct MapData * const gMapAttributes[]; extern struct MapHeader * const * const gMapGroups[]; @@ -98,6 +115,7 @@ extern void atk17_seteffectuser(void); extern void sub_80809B0(void); extern void sub_8080990(void); extern u8 sub_80BBB24(void); +extern u16 MapGridGetMetatileBehaviorAt(int, int); void sub_8053050(void); void warp_in(void); @@ -165,8 +183,14 @@ u16 sub_8055390(u32); u16 sub_80553E4(u32); u16 sub_8055408(u32); u16 sub_8055438(u32); +bool32 sub_8055618(struct UnkStruct_8054FF8 *); +bool32 sub_8055630(struct UnkStruct_8054FF8 *); +u32 sub_8055648(struct UnkStruct_8054FF8 *); +bool32 sub_8055660(struct UnkStruct_8054FF8 *); void sub_8055980(u8, s16, s16, u8); +void sub_80555B0(int, int, struct UnkStruct_8054FF8 *); u8 sub_8055AE8(u8); +u8 sub_8055B30(u8); void sub_8055BFC(u8, u8); void sub_8055E5C(u8); void sub_8056C50(u16, u16); @@ -2063,7 +2087,134 @@ u16 sub_8055438(u32 a1) return retVal; } -u16 sub_8055468(u16 a1) +u16 sub_8055468(u32 a1) { return 17; } + +u16 sub_805546C(u32 a1) +{ + if (gUnknown_03000580[a1] == 0x82 && (gMain.newKeys & B_BUTTON)) + { + sub_80543DC(sub_8055468); + return 29; + } + else + { + return 17; + } +} + +u16 sub_80554A4(u32 a1) +{ + sub_80543DC(sub_805546C); + return 22; +} + +u16 sub_80554B8(u32 a1) +{ + return 17; +} + +u16 sub_80554BC(u32 a1) +{ + if (sub_8054F88(0x83) == TRUE) + { + ScriptContext1_SetupScript(gUnknown_081A4508); + sub_80543DC(sub_80554B8); + } + return 17; +} + +u16 sub_80554E4(u32 a1) +{ + sub_80543DC(sub_80554BC); + return 23; +} + +u32 sub_80554F8(void) +{ + if (sub_8054FC0(0x83) == TRUE) + return 2; + if (gUnknown_03000584 == sub_805546C && gUnknown_03000580[gUnknown_03004860] != 0x82) + return 0; + if (gUnknown_03000584 == sub_8055468 && gUnknown_03000580[gUnknown_03004860] == 0x81) + return 2; + return sub_8054F88(0x82); +} + +bool32 unref_sub_8055568(void) +{ + return sub_8054FC0(0x83); +} + +u16 sub_8055574(void) +{ + sub_80543DC(sub_80554A4); + return 0; +} + +u16 sub_8055588(void) +{ + sub_80543DC(sub_80553E4); + return 0; +} + +u16 sub_805559C(void) +{ + sub_80543DC(sub_80554E4); + return 0; +} + +void sub_80555B0(int a1, int a2, struct UnkStruct_8054FF8 *a3) +{ + s16 x, y; + u8 val; + + a3->a = a1; + a3->b = (a1 == a2) ? 1 : 0; + a3->c = gUnknown_02029818[a1].d; + val = a1; + a3->d = sub_8055B30(val); + sub_8055B08(val, &x, &y); + a3->sub.field_4 = x; + a3->sub.field_6 = y; + a3->sub.field_8 = sub_8055B50(val); + a3->field_C = MapGridGetMetatileBehaviorAt(x, y); +} + +bool32 sub_8055618(struct UnkStruct_8054FF8 *a1) +{ + u8 v1 = a1->c; + if (v1 == 2 || v1 == 0) + return TRUE; + else + return FALSE; +} + +bool32 sub_8055630(struct UnkStruct_8054FF8 *a1) +{ + u8 v1 = a1->c; + if (v1 == 2 || v1 == 0) + return TRUE; + else + return FALSE; +} + +u32 sub_8055648(struct UnkStruct_8054FF8 *a1) +{ + if (a1->c != 2) + return 0; + return sub_8068E24(&a1->sub); +} + +bool32 sub_8055660(struct UnkStruct_8054FF8 *a1) +{ + if (a1->c != 2 && a1->c != 0) + return FALSE; + if (!MetatileBehavior_IsSouthArrowWarp(a1->field_C)) + return FALSE; + if (a1->d != 1) + return FALSE; + return TRUE; +} |