summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/rom4.s102
-rw-r--r--src/rom4.c48
2 files changed, 44 insertions, 106 deletions
diff --git a/asm/rom4.s b/asm/rom4.s
index 3898f4f8d..45377e31d 100644
--- a/asm/rom4.s
+++ b/asm/rom4.s
@@ -5,108 +5,6 @@
.text
- thumb_func_start sub_805568C
-sub_805568C: @ 805568C
- push {r4,lr}
- sub sp, 0x8
- adds r4, r0, 0
- ldrb r0, [r4, 0x2]
- cmp r0, 0
- beq _080556A0
- cmp r0, 0x2
- beq _080556A0
- movs r0, 0
- b _0805574E
-_080556A0:
- ldr r0, [r4, 0x4]
- ldr r1, [r4, 0x8]
- str r0, [sp]
- str r1, [sp, 0x4]
- ldr r3, _08055710 @ =gUnknown_0821664C
- ldrb r0, [r4, 0x3]
- lsls r0, 3
- adds r0, r3
- ldr r0, [r0]
- mov r1, sp
- ldrh r1, [r1]
- adds r0, r1
- lsls r0, 16
- lsrs r0, 16
- ldr r1, _08055714 @ =0xffff0000
- ldr r2, [sp]
- ands r2, r1
- orrs r2, r0
- str r2, [sp]
- asrs r1, r2, 16
- ldrb r0, [r4, 0x3]
- lsls r0, 3
- adds r3, 0x4
- adds r0, r3
- ldr r0, [r0]
- adds r0, r1
- lsls r0, 16
- ldr r1, _08055718 @ =0x0000ffff
- ands r1, r2
- orrs r1, r0
- str r1, [sp]
- ldr r2, _0805571C @ =0xffffff00
- ldr r0, [sp, 0x4]
- ands r0, r2
- str r0, [sp, 0x4]
- mov r0, sp
- movs r2, 0
- ldrsh r0, [r0, r2]
- asrs r1, 16
- bl sub_8055B9C
- lsls r0, 24
- lsrs r1, r0, 24
- adds r2, r1, 0
- cmp r1, 0x4
- beq _08055744
- ldrb r0, [r4, 0x1]
- cmp r0, 0
- beq _0805570C
- ldr r0, _08055720 @ =gUnknown_03000580
- adds r0, r1, r0
- ldrb r0, [r0]
- cmp r0, 0x80
- beq _08055728
-_0805570C:
- ldr r0, _08055724 @ =gUnknown_081A4495
- b _0805574E
- .align 2, 0
-_08055710: .4byte gUnknown_0821664C
-_08055714: .4byte 0xffff0000
-_08055718: .4byte 0x0000ffff
-_0805571C: .4byte 0xffffff00
-_08055720: .4byte gUnknown_03000580
-_08055724: .4byte gUnknown_081A4495
-_08055728:
- adds r0, r2, 0
- bl sub_8083BF4
- cmp r0, 0
- bne _0805573C
- ldr r0, _08055738 @ =gUnknown_081A4479
- b _0805574E
- .align 2, 0
-_08055738: .4byte gUnknown_081A4479
-_0805573C:
- ldr r0, _08055740 @ =gUnknown_081A4487
- b _0805574E
- .align 2, 0
-_08055740: .4byte gUnknown_081A4487
-_08055744:
- ldrb r1, [r4, 0xC]
- ldrb r2, [r4, 0x3]
- mov r0, sp
- bl sub_80682A8
-_0805574E:
- add sp, 0x8
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_805568C
-
thumb_func_start sub_8055758
sub_8055758: @ 8055758
push {lr}
diff --git a/src/rom4.c b/src/rom4.c
index 64939efe6..b1979b3a9 100644
--- a/src/rom4.c
+++ b/src/rom4.c
@@ -44,8 +44,8 @@ struct UnkInputStruct
struct UnkStruct_8054FF8_Substruct
{
- u16 field_4;
- u16 field_6;
+ s16 x;
+ s16 y;
u8 field_8;
};
@@ -64,6 +64,11 @@ struct UnkMapObjStruct
u8 a, b, c, d;
};
+struct UCoords32
+{
+ u32 x, y;
+};
+
extern struct WarpData gUnknown_020297F0;
extern struct WarpData gUnknown_020297F8;
extern struct WarpData gUnknown_02029800;
@@ -91,8 +96,13 @@ extern u16 gUnknown_0300489C;
extern u8 gUnknown_0819FC74[];
extern u8 gUnknown_0819FC9F[];
+extern u8 gUnknown_081A4479[];
+extern u8 gUnknown_081A4487[];
+extern u8 gUnknown_081A4495[];
extern u8 gUnknown_081A4508[];
+extern struct UCoords32 gUnknown_0821664C[];
+
extern struct MapData * const gMapAttributes[];
extern struct MapHeader * const * const gMapGroups[];
extern const struct WarpData gDummyWarpData;
@@ -116,6 +126,7 @@ extern void sub_80809B0(void);
extern void sub_8080990(void);
extern u8 sub_80BBB24(void);
extern u16 MapGridGetMetatileBehaviorAt(int, int);
+extern u8 *sub_80682A8(void *, u8, u8);
void sub_8053050(void);
void warp_in(void);
@@ -187,6 +198,7 @@ bool32 sub_8055618(struct UnkStruct_8054FF8 *);
bool32 sub_8055630(struct UnkStruct_8054FF8 *);
u32 sub_8055648(struct UnkStruct_8054FF8 *);
bool32 sub_8055660(struct UnkStruct_8054FF8 *);
+u8 *sub_805568C(struct UnkStruct_8054FF8 *);
void sub_8055980(u8, s16, s16, u8);
void sub_80555B0(int, int, struct UnkStruct_8054FF8 *);
u8 sub_8055AE8(u8);
@@ -2177,8 +2189,8 @@ void sub_80555B0(int a1, int a2, struct UnkStruct_8054FF8 *a3)
val = a1;
a3->d = sub_8055B30(val);
sub_8055B08(val, &x, &y);
- a3->sub.field_4 = x;
- a3->sub.field_6 = y;
+ a3->sub.x = x;
+ a3->sub.y = y;
a3->sub.field_8 = sub_8055B50(val);
a3->field_C = MapGridGetMetatileBehaviorAt(x, y);
}
@@ -2218,3 +2230,31 @@ bool32 sub_8055660(struct UnkStruct_8054FF8 *a1)
return FALSE;
return TRUE;
}
+
+u8 *sub_805568C(struct UnkStruct_8054FF8 *a1)
+{
+ struct UnkStruct_8054FF8_Substruct unkStruct;
+ u8 v5;
+ register int v6 asm("r2");
+
+ if (a1->c && a1->c != 2)
+ return 0;
+
+ unkStruct = a1->sub;
+ unkStruct.x += gUnknown_0821664C[a1->d].x;
+ unkStruct.y += gUnknown_0821664C[a1->d].y;
+ unkStruct.field_8 = 0;
+ v5 = sub_8055B9C(unkStruct.x, unkStruct.y);
+ v6 = v5;
+
+ if (v5 != 4)
+ {
+ if (!a1->b || gUnknown_03000580[v5] != 0x80)
+ return gUnknown_081A4495;
+ if (!sub_8083BF4(v6))
+ return gUnknown_081A4479;
+ return gUnknown_081A4487;
+ }
+
+ return sub_80682A8(&unkStruct, a1->field_C, a1->d);
+}