summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/rom4.s311
-rw-r--r--data/data2.s11
-rw-r--r--src/rom4.c155
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;
+}