diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/rom4.c | 48 |
1 files changed, 44 insertions, 4 deletions
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); +} |