From 2b8d522c6cf6de600f07e409b9148e6ce92e047d Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 20 May 2017 23:32:57 -0400 Subject: sub_805C930 --- src/field_map_obj.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index f7e09aacf..19d4676cf 100644 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -6,6 +6,7 @@ #include "field_player_avatar.h" #include "palette.h" #include "rom4.h" +#include "rng.h" #include "sprite.h" extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[36]; @@ -1547,3 +1548,17 @@ u8 sub_805C904(struct MapObject *mapObject, struct Sprite *sprite) return 1; } +extern bool8 FieldObjectExecRegularAnim(); +extern const s16 gUnknown_0837520C[]; +extern void sub_8064820(struct Sprite *, s16); + +u8 sub_805C930(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite) == 0) { + return 0; + } + sub_8064820(sprite, gUnknown_0837520C[Random() & 3]); + sprite->data1 = 3; + return 1; +} + -- cgit v1.2.3 From a8d4813e571bb4dcdac5ee1fcf11d1efa4384687 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 20 May 2017 23:49:47 -0400 Subject: A handful more functions related to field map movement patterns --- src/field_map_obj.c | 43 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index 19d4676cf..a7856ec07 100644 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -1548,13 +1548,14 @@ u8 sub_805C904(struct MapObject *mapObject, struct Sprite *sprite) return 1; } -extern bool8 FieldObjectExecRegularAnim(); +extern u8 FieldObjectExecRegularAnim(struct MapObject *, struct Sprite *); extern const s16 gUnknown_0837520C[]; extern void sub_8064820(struct Sprite *, s16); u8 sub_805C930(struct MapObject *mapObject, struct Sprite *sprite) { - if (FieldObjectExecRegularAnim(mapObject, sprite) == 0) { + if (FieldObjectExecRegularAnim(mapObject, sprite) == 0) + { return 0; } sub_8064820(sprite, gUnknown_0837520C[Random() & 3]); @@ -1562,3 +1563,41 @@ u8 sub_805C930(struct MapObject *mapObject, struct Sprite *sprite) return 1; } +extern u8 sub_8064824(struct Sprite *); + +u8 sub_805C96C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8064824(sprite) != 0) + { + sprite->data1 = 4; + return 1; + } + return 0; +} + +extern const u8 gUnknown_08375240[4]; +extern u8 sub_805FF20(struct MapObject *, u8); + +u8 sub_805C98C(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 direction; + u8 directions[4]; + memcpy(directions, gUnknown_08375240, 4); + direction = directions[Random() & 3]; + FieldObjectSetDirection(mapObject, direction); + sprite->data1 = 5; + if (sub_805FF20(mapObject, direction) != 0) + { + sprite->data1 = 1; + } + return 1; +} + +u8 sub_805C9D8(struct MapObject *mapObject, struct Sprite *sprite) +{ + FieldObjectSetRegularAnim(mapObject, sprite, GetGoSpeed0AnimId(mapObject->placeholder18)); + mapObject->mapobj_bit_1 = 1; + sprite->data1 = 6; + return 1; +} + -- cgit v1.2.3 From 83ddca476069c52e0ea550b335539c0371d164c3 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 21 May 2017 00:18:31 -0400 Subject: field_map_obj.c up to and including FieldObjectIsTrainerAndCloseToPlayer --- src/field_map_obj.c | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index a7856ec07..61ec26365 100644 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -1601,3 +1601,44 @@ u8 sub_805C9D8(struct MapObject *mapObject, struct Sprite *sprite) return 1; } +u8 sub_805CA08(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite) != 0) + { + mapObject->mapobj_bit_1 = 0; + sprite->data1 = 1; + } + return 0; +} + +u8 FieldObjectIsTrainerAndCloseToPlayer(struct MapObject *mapObject) +{ + s16 x; + s16 y; + s16 objx; + s16 objy; + s16 minx; + s16 maxx; + s16 miny; + s16 maxy; + if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_DASH) == 0) + { + return 0; + } + if (mapObject->trainerType != 1 && mapObject->trainerType != 3) + { + return 0; + } + PlayerGetDestCoords(&x, &y); + objx = mapObject->coords2.x; + objy = mapObject->coords2.y; + minx = objx - mapObject->trainerRange_berryTreeId; + miny = objy - mapObject->trainerRange_berryTreeId; + maxx = objx + mapObject->trainerRange_berryTreeId; + maxy = objy + mapObject->trainerRange_berryTreeId; + if (minx > x || maxx < x || miny > y || maxy < y) + { + return 0; + } + return 1; +} -- cgit v1.2.3 From f578c81cfdfb54e1101c5f5785cb685bd63c3b5a Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 21 May 2017 00:48:56 -0400 Subject: More functions governing npc trainer facing directions --- src/field_map_obj.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index 61ec26365..e5a50362a 100644 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -1642,3 +1642,47 @@ u8 FieldObjectIsTrainerAndCloseToPlayer(struct MapObject *mapObject) } return 1; } + +u8 sub_805CAAC(s16 a0, s16 a1, s16 a2, s16 a3) +{ + u8 dirn; + if (a2 > a3) + { + dirn = DIR_EAST; + if (a0 < 0) + { + dirn = DIR_WEST; + } + } + else + { + dirn = DIR_SOUTH; + if (a1 < 0) + { + dirn = DIR_NORTH; + } + } + return dirn; +} + +u8 sub_805CADC(s16 a0, s16 a1) +{ + u8 dirn; + dirn = DIR_SOUTH; + if (a1 < 0) + { + dirn = DIR_NORTH; + } + return dirn; +} + +u8 sub_805CAEC(s16 a0, s16 a1) +{ + u8 dirn; + dirn = DIR_EAST; + if (a0 < 0) + { + dirn = DIR_WEST; + } + return dirn; +} -- cgit v1.2.3 From 9997127c347abfbc245270077a762348162831b8 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 21 May 2017 10:01:47 -0400 Subject: A few more functions for calculating map object facing directions --- src/field_map_obj.c | 133 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 131 insertions(+), 2 deletions(-) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index e5a50362a..f042b4af1 100644 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -1665,7 +1665,7 @@ u8 sub_805CAAC(s16 a0, s16 a1, s16 a2, s16 a3) return dirn; } -u8 sub_805CADC(s16 a0, s16 a1) +u8 sub_805CADC(s16 a0, s16 a1, s16 a2, s16 a3) { u8 dirn; dirn = DIR_SOUTH; @@ -1676,7 +1676,7 @@ u8 sub_805CADC(s16 a0, s16 a1) return dirn; } -u8 sub_805CAEC(s16 a0, s16 a1) +u8 sub_805CAEC(s16 a0, s16 a1, s16 a2, s16 a3) { u8 dirn; dirn = DIR_EAST; @@ -1686,3 +1686,132 @@ u8 sub_805CAEC(s16 a0, s16 a1) } return dirn; } + +u8 sub_805CB00(s16 a0, s16 a1, s16 a2, s16 a3) { + u8 dirn; + dirn = sub_805CAAC(a0, a1, a2, a3); + if (dirn == DIR_SOUTH) + { + dirn = sub_805CAEC(a0, a1, a2, a3); + if (dirn == DIR_EAST) + { + dirn = DIR_NORTH; + } + } + else if (dirn == DIR_EAST) + { + dirn = sub_805CADC(a0, a1, a2, a3); + if (dirn == DIR_SOUTH) + { + dirn = DIR_NORTH; + } + } + return dirn; +} + +u8 sub_805CB5C(s16 a0, s16 a1, s16 a2, s16 a3) { + u8 dirn; + dirn = sub_805CAAC(a0, a1, a2, a3); + if (dirn == DIR_SOUTH) + { + dirn = sub_805CAEC(a0, a1, a2, a3); + if (dirn == DIR_WEST) + { + dirn = DIR_NORTH; + } + } + else if (dirn == DIR_WEST) + { + dirn = sub_805CADC(a0, a1, a2, a3); + if (dirn == DIR_SOUTH) + { + dirn = DIR_NORTH; + } + } + return dirn; +} + +u8 sub_805CBB8(s16 a0, s16 a1, s16 a2, s16 a3) { + u8 dirn; + dirn = sub_805CAAC(a0, a1, a2, a3); + if (dirn == DIR_NORTH) + { + dirn = sub_805CAEC(a0, a1, a2, a3); + if (dirn == DIR_EAST) + { + dirn = DIR_SOUTH; + } + } + else if (dirn == DIR_EAST) + { + dirn = sub_805CADC(a0, a1, a2, a3); + if (dirn == DIR_NORTH) + { + dirn = DIR_SOUTH; + } + } + return dirn; +} + +u8 sub_805CC14(s16 a0, s16 a1, s16 a2, s16 a3) { + u8 dirn; + dirn = sub_805CAAC(a0, a1, a2, a3); + if (dirn == DIR_NORTH) + { + dirn = sub_805CAEC(a0, a1, a2, a3); + if (dirn == DIR_WEST) + { + dirn = DIR_SOUTH; + } + } + else if (dirn == DIR_WEST) + { + dirn = sub_805CADC(a0, a1, a2, a3); + if (dirn == DIR_NORTH) + { + dirn = DIR_SOUTH; + } + } + return dirn; +} + +u8 sub_805CC70(s16 a0, s16 a1, s16 a2, s16 a3) { + u8 dirn; + dirn = sub_805CAAC(a0, a1, a2, a3); + if (dirn == DIR_EAST) + { + dirn = sub_805CADC(a0, a1, a2, a3); + } + return dirn; +} + +u8 sub_805CCAC(s16 a0, s16 a1, s16 a2, s16 a3) { + u8 dirn; + dirn = sub_805CAAC(a0, a1, a2, a3); + if (dirn == DIR_WEST) + { + dirn = sub_805CADC(a0, a1, a2, a3); + } + return dirn; +} + +u8 sub_805CCE8(s16 a0, s16 a1, s16 a2, s16 a3) { + u8 dirn; + dirn = sub_805CAAC(a0, a1, a2, a3); + if (dirn == DIR_SOUTH) + { + dirn = sub_805CAEC(a0, a1, a2, a3); + } + return dirn; +} + +u8 sub_805CD24(s16 a0, s16 a1, s16 a2, s16 a3) { + u8 dirn; + dirn = sub_805CAAC(a0, a1, a2, a3); + if (dirn == DIR_NORTH) + { + dirn = sub_805CAEC(a0, a1, a2, a3); + } + return dirn; +} + -- cgit v1.2.3 From bb42b58e4b703e1f00828b38ac233cf222b8885d Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 21 May 2017 10:15:44 -0400 Subject: sub_805CD60 --- src/field_map_obj.c | 47 ++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 40 insertions(+), 7 deletions(-) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index f042b4af1..9d4a67da3 100644 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -34,6 +34,7 @@ void GetFieldObjectMovingCameraOffset(s16 *, s16 *); void sub_805BDF8(u16); u8 sub_805BE58(const struct SpritePalette *); u8 FindFieldObjectPaletteIndexByTag(u16); +extern u8 (*const gUnknown_08375244[])(s16 a0, s16 a1, s16 a2, s16 a3); struct PairedPalettes { @@ -1687,7 +1688,8 @@ u8 sub_805CAEC(s16 a0, s16 a1, s16 a2, s16 a3) return dirn; } -u8 sub_805CB00(s16 a0, s16 a1, s16 a2, s16 a3) { +u8 sub_805CB00(s16 a0, s16 a1, s16 a2, s16 a3) +{ u8 dirn; dirn = sub_805CAAC(a0, a1, a2, a3); if (dirn == DIR_SOUTH) @@ -1709,7 +1711,8 @@ u8 sub_805CB00(s16 a0, s16 a1, s16 a2, s16 a3) { return dirn; } -u8 sub_805CB5C(s16 a0, s16 a1, s16 a2, s16 a3) { +u8 sub_805CB5C(s16 a0, s16 a1, s16 a2, s16 a3) +{ u8 dirn; dirn = sub_805CAAC(a0, a1, a2, a3); if (dirn == DIR_SOUTH) @@ -1731,7 +1734,8 @@ u8 sub_805CB5C(s16 a0, s16 a1, s16 a2, s16 a3) { return dirn; } -u8 sub_805CBB8(s16 a0, s16 a1, s16 a2, s16 a3) { +u8 sub_805CBB8(s16 a0, s16 a1, s16 a2, s16 a3) +{ u8 dirn; dirn = sub_805CAAC(a0, a1, a2, a3); if (dirn == DIR_NORTH) @@ -1775,7 +1779,8 @@ u8 sub_805CC14(s16 a0, s16 a1, s16 a2, s16 a3) { return dirn; } -u8 sub_805CC70(s16 a0, s16 a1, s16 a2, s16 a3) { +u8 sub_805CC70(s16 a0, s16 a1, s16 a2, s16 a3) +{ u8 dirn; dirn = sub_805CAAC(a0, a1, a2, a3); if (dirn == DIR_EAST) @@ -1785,7 +1790,8 @@ u8 sub_805CC70(s16 a0, s16 a1, s16 a2, s16 a3) { return dirn; } -u8 sub_805CCAC(s16 a0, s16 a1, s16 a2, s16 a3) { +u8 sub_805CCAC(s16 a0, s16 a1, s16 a2, s16 a3) +{ u8 dirn; dirn = sub_805CAAC(a0, a1, a2, a3); if (dirn == DIR_WEST) @@ -1795,7 +1801,8 @@ u8 sub_805CCAC(s16 a0, s16 a1, s16 a2, s16 a3) { return dirn; } -u8 sub_805CCE8(s16 a0, s16 a1, s16 a2, s16 a3) { +u8 sub_805CCE8(s16 a0, s16 a1, s16 a2, s16 a3) +{ u8 dirn; dirn = sub_805CAAC(a0, a1, a2, a3); if (dirn == DIR_SOUTH) @@ -1805,7 +1812,8 @@ u8 sub_805CCE8(s16 a0, s16 a1, s16 a2, s16 a3) { return dirn; } -u8 sub_805CD24(s16 a0, s16 a1, s16 a2, s16 a3) { +u8 sub_805CD24(s16 a0, s16 a1, s16 a2, s16 a3) +{ u8 dirn; dirn = sub_805CAAC(a0, a1, a2, a3); if (dirn == DIR_NORTH) @@ -1815,3 +1823,28 @@ u8 sub_805CD24(s16 a0, s16 a1, s16 a2, s16 a3) { return dirn; } +u8 sub_805CD60(struct MapObject *mapObject, u8 a1) +{ + s16 x; + s16 y; + s16 x2; + s16 y2; + if (!FieldObjectIsTrainerAndCloseToPlayer(mapObject)) + { + return 0; + } + PlayerGetDestCoords(&x, &y); + x -= mapObject->coords2.x; + y -= mapObject->coords2.y; + x2 = x; + y2 = y; + if (x2 < 0) + { + x2 = -x2; + } + if (y2 < 0) + { + y2 = -y2; + } + return gUnknown_08375244[a1](x, y, x2, y2); +} -- cgit v1.2.3 From 6a02a6f6e5f90ae5ddf38bd69c90734a50d9142b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 21 May 2017 11:30:23 -0400 Subject: sub_805CE0C and helpers --- src/field_map_obj.c | 75 ++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 69 insertions(+), 6 deletions(-) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index 9d4a67da3..f6ebbee68 100644 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -35,6 +35,7 @@ void sub_805BDF8(u16); u8 sub_805BE58(const struct SpritePalette *); u8 FindFieldObjectPaletteIndexByTag(u16); extern u8 (*const gUnknown_08375244[])(s16 a0, s16 a1, s16 a2, s16 a3); +extern u16 (*const gUnknown_08375270[])(struct MapObject *mapObject, struct Sprite *sprite); struct PairedPalettes { @@ -1505,19 +1506,19 @@ u16 npc_paltag_by_palslot(u8 a) return 0x11FF; } -u32 sub_805C8A8(void); +u8 sub_805C8A8(struct MapObject *mapObject, struct Sprite *sprite); void sub_805C884(struct Sprite *sprite) { meta_step(&gMapObjects[sprite->data0], sprite, sub_805C8A8); } -u32 sub_805C8A8(void) +u8 sub_805C8A8(struct MapObject *mapObject, struct Sprite *sprite) { return 0; } -u32 sub_805C8D0(struct MapObject *, struct Sprite *); +u8 sub_805C8D0(struct MapObject *, struct Sprite *); void sub_805C8AC(struct Sprite *sprite) { @@ -1526,16 +1527,16 @@ void sub_805C8AC(struct Sprite *sprite) extern u8 (*const gUnknown_08375224[])(); -u32 sub_805C8D0(struct MapObject *mapObject, struct Sprite *sprite) +u8 sub_805C8D0(struct MapObject *mapObject, struct Sprite *sprite) { return gUnknown_08375224[sprite->data1](mapObject, sprite); } -void npc_reset(); +void npc_reset(struct MapObject *mapObject, struct Sprite *sprite); u8 sub_805C8F0(struct MapObject *mapObject, struct Sprite *sprite) { - npc_reset(mapObject); + npc_reset(mapObject, sprite); sprite->data1 = 1; return 1; } @@ -1848,3 +1849,65 @@ u8 sub_805CD60(struct MapObject *mapObject, u8 a1) } return gUnknown_08375244[a1](x, y, x2, y2); } + +u8 sub_805CE0C(struct MapObject *mapObject, struct Sprite *sprite); + +void sub_805CDE8(struct Sprite *sprite) +{ + meta_step(&gMapObjects[sprite->data0], sprite, sub_805CE0C); +} + +u8 sub_805CE0C(struct MapObject *mapObject, struct Sprite *sprite) +{ + return gUnknown_08375270[sprite->data1](mapObject, sprite); +} + +u16 sub_805CE2C(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + sprite->data1 = 1; + return 1; +} + +u16 sub_805CE40(struct MapObject *mapObject, struct Sprite *sprite) +{ + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); + sprite->data1 = 2; + return 1; +} + +u16 sub_805CE6C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite) != 0) + { + sub_8064820(sprite, gUnknown_0837520C[Random() & 3]); + mapObject->mapobj_bit_1 = 0; + sprite->data1 = 3; + } + return 0; +} + +u16 sub_805CEB0(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) + { + sprite->data1 = 4; + return 1; + } + return 0; +} + +u16 sub_805CEE0(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 direction; + u8 directions[4]; + memcpy(directions, gUnknown_08375240, 4); + direction = sub_805CD60(mapObject, 0); + if (direction == 0) + { + direction = directions[Random() & 3]; + } + FieldObjectSetDirection(mapObject, direction); + sprite->data1 = 1; + return 1; +} -- cgit v1.2.3 From 5b3a726820513cebb68ac3a3fc8e97014e415db3 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 21 May 2017 11:53:38 -0400 Subject: sub_805CF28 and helpers --- src/field_map_obj.c | 94 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 88 insertions(+), 6 deletions(-) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index f6ebbee68..84d3d1f01 100644 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -35,7 +35,8 @@ void sub_805BDF8(u16); u8 sub_805BE58(const struct SpritePalette *); u8 FindFieldObjectPaletteIndexByTag(u16); extern u8 (*const gUnknown_08375244[])(s16 a0, s16 a1, s16 a2, s16 a3); -extern u16 (*const gUnknown_08375270[])(struct MapObject *mapObject, struct Sprite *sprite); +extern u8 (*const gUnknown_08375270[])(struct MapObject *mapObject, struct Sprite *sprite); +extern u8 (*const gUnknown_08375284[])(struct MapObject *mapObject, struct Sprite *sprite); struct PairedPalettes { @@ -1577,6 +1578,7 @@ u8 sub_805C96C(struct MapObject *mapObject, struct Sprite *sprite) return 0; } +extern const u8 gUnknown_083752A0[2]; extern const u8 gUnknown_08375240[4]; extern u8 sub_805FF20(struct MapObject *, u8); @@ -1862,21 +1864,21 @@ u8 sub_805CE0C(struct MapObject *mapObject, struct Sprite *sprite) return gUnknown_08375270[sprite->data1](mapObject, sprite); } -u16 sub_805CE2C(struct MapObject *mapObject, struct Sprite *sprite) +u8 sub_805CE2C(struct MapObject *mapObject, struct Sprite *sprite) { npc_reset(mapObject, sprite); sprite->data1 = 1; return 1; } -u16 sub_805CE40(struct MapObject *mapObject, struct Sprite *sprite) +u8 sub_805CE40(struct MapObject *mapObject, struct Sprite *sprite) { FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); sprite->data1 = 2; return 1; } -u16 sub_805CE6C(struct MapObject *mapObject, struct Sprite *sprite) +u8 sub_805CE6C(struct MapObject *mapObject, struct Sprite *sprite) { if (FieldObjectExecRegularAnim(mapObject, sprite) != 0) { @@ -1887,7 +1889,7 @@ u16 sub_805CE6C(struct MapObject *mapObject, struct Sprite *sprite) return 0; } -u16 sub_805CEB0(struct MapObject *mapObject, struct Sprite *sprite) +u8 sub_805CEB0(struct MapObject *mapObject, struct Sprite *sprite) { if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) { @@ -1897,7 +1899,7 @@ u16 sub_805CEB0(struct MapObject *mapObject, struct Sprite *sprite) return 0; } -u16 sub_805CEE0(struct MapObject *mapObject, struct Sprite *sprite) +u8 sub_805CEE0(struct MapObject *mapObject, struct Sprite *sprite) { u8 direction; u8 directions[4]; @@ -1911,3 +1913,83 @@ u16 sub_805CEE0(struct MapObject *mapObject, struct Sprite *sprite) sprite->data1 = 1; return 1; } + +u8 sub_805CF4C(struct MapObject *mapObject, struct Sprite *sprite); + +void sub_805CF28(struct Sprite *sprite) +{ + meta_step(&gMapObjects[sprite->data0], sprite, sub_805CF4C); +} + +u8 sub_805CF4C(struct MapObject *mapObject, struct Sprite *sprite) +{ + return gUnknown_08375284[sprite->data1](mapObject, sprite); +} + +u8 sub_805CF6C(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + sprite->data1 = 1; + return 1; +} + +u8 sub_805CF80(struct MapObject *mapObject, struct Sprite *sprite) +{ + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); + sprite->data1 = 2; + return 1; +} + +u8 sub_805CFAC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite) == 0) + { + return 0; + } + sub_8064820(sprite, gUnknown_0837520C[Random() & 3]); + sprite->data1 = 3; + return 1; +} + +u8 sub_805CFE8(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8064824(sprite) != 0) + { + sprite->data1 = 4; + return 1; + } + return 0; +} + +u8 sub_805D008(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 direction; + u8 directions[2]; + memcpy(directions, gUnknown_083752A0, 2); + direction = directions[Random() & 1]; + FieldObjectSetDirection(mapObject, direction); + sprite->data1 = 5; + if (sub_805FF20(mapObject, direction) != 0) + { + sprite->data1 = 1; + } + return 1; +} + +u8 sub_805D054(struct MapObject *mapObject, struct Sprite *sprite) +{ + FieldObjectSetRegularAnim(mapObject, sprite, GetGoSpeed0AnimId(mapObject->placeholder18)); + mapObject->mapobj_bit_1 = 1; + sprite->data1 = 6; + return 1; +} + +u8 sub_805D084(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite) != 0) + { + mapObject->mapobj_bit_1 = 0; + sprite->data1 = 1; + } + return 0; +} -- cgit v1.2.3 From 2501d0b6d391e2d424c238990be233c88502bb55 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 21 May 2017 12:03:47 -0400 Subject: sub_805D0AC and helpers --- src/field_map_obj.c | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 84 insertions(+), 1 deletion(-) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index 84d3d1f01..4de55e0af 100644 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -37,6 +37,7 @@ u8 FindFieldObjectPaletteIndexByTag(u16); extern u8 (*const gUnknown_08375244[])(s16 a0, s16 a1, s16 a2, s16 a3); extern u8 (*const gUnknown_08375270[])(struct MapObject *mapObject, struct Sprite *sprite); extern u8 (*const gUnknown_08375284[])(struct MapObject *mapObject, struct Sprite *sprite); +extern u8 (*const gUnknown_083752A4[])(struct MapObject *mapObject, struct Sprite *sprite); struct PairedPalettes { @@ -1578,8 +1579,9 @@ u8 sub_805C96C(struct MapObject *mapObject, struct Sprite *sprite) return 0; } -extern const u8 gUnknown_083752A0[2]; extern const u8 gUnknown_08375240[4]; +extern const u8 gUnknown_083752A0[2]; +extern const u8 gUnknown_083752C0[2]; extern u8 sub_805FF20(struct MapObject *, u8); u8 sub_805C98C(struct MapObject *mapObject, struct Sprite *sprite) @@ -1993,3 +1995,84 @@ u8 sub_805D084(struct MapObject *mapObject, struct Sprite *sprite) } return 0; } + +u8 sub_805D0D0(struct MapObject *mapObject, struct Sprite *sprite); + +void sub_805D0AC(struct Sprite *sprite) +{ + meta_step(&gMapObjects[sprite->data0], sprite, sub_805D0D0); +} + +u8 sub_805D0D0(struct MapObject *mapObject, struct Sprite *sprite) +{ + return gUnknown_083752A4[sprite->data1](mapObject, sprite); +} + +u8 sub_805D0F0(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + sprite->data1 = 1; + return 1; +} + +u8 sub_805D104(struct MapObject *mapObject, struct Sprite *sprite) +{ + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); + sprite->data1 = 2; + return 1; +} + +u8 sub_805D130(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite) == 0) + { + return 0; + } + sub_8064820(sprite, gUnknown_0837520C[Random() & 3]); + sprite->data1 = 3; + return 1; +} + +u8 sub_805D16C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8064824(sprite) != 0) + { + sprite->data1 = 4; + return 1; + } + return 0; +} + +u8 sub_805D18C(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 direction; + u8 directions[2]; + memcpy(directions, gUnknown_083752C0, 2); + direction = directions[Random() & 1]; + FieldObjectSetDirection(mapObject, direction); + sprite->data1 = 5; + if (sub_805FF20(mapObject, direction) != 0) + { + sprite->data1 = 1; + } + return 1; +} + +u8 sub_805D1D8(struct MapObject *mapObject, struct Sprite *sprite) +{ + FieldObjectSetRegularAnim(mapObject, sprite, GetGoSpeed0AnimId(mapObject->placeholder18)); + mapObject->mapobj_bit_1 = 1; + sprite->data1 = 6; + return 1; +} + +u8 sub_805D208(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite) != 0) + { + mapObject->mapobj_bit_1 = 0; + sprite->data1 = 1; + } + return 0; +} + -- cgit v1.2.3 From ea609c2b3791c8bd23e3d8109093090c5d619e9d Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 21 May 2017 12:10:42 -0400 Subject: sub_805D230 and helpers --- src/field_map_obj.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index 4de55e0af..c31db8a4b 100644 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -38,6 +38,7 @@ extern u8 (*const gUnknown_08375244[])(s16 a0, s16 a1, s16 a2, s16 a3); extern u8 (*const gUnknown_08375270[])(struct MapObject *mapObject, struct Sprite *sprite); extern u8 (*const gUnknown_08375284[])(struct MapObject *mapObject, struct Sprite *sprite); extern u8 (*const gUnknown_083752A4[])(struct MapObject *mapObject, struct Sprite *sprite); +extern u8 (*const gUnknown_083752C4[])(struct MapObject *mapObject, struct Sprite *sprite); struct PairedPalettes { @@ -2076,3 +2077,38 @@ u8 sub_805D208(struct MapObject *mapObject, struct Sprite *sprite) return 0; } +u8 sub_805D254(struct MapObject *mapObject, struct Sprite *sprite); + +void sub_805D230(struct Sprite *sprite) +{ + meta_step(&gMapObjects[sprite->data0], sprite, sub_805D254); +} + +u8 sub_805D254(struct MapObject *mapObject, struct Sprite *sprite) +{ + return gUnknown_083752C4[sprite->data1](mapObject, sprite); +} + +u8 sub_805D274(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); + sprite->data1 = 1; + return 1; +} + +u8 sub_805D2A0(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite) != 0) + { + sprite->data1 = 2; + return 1; + } + return 0; +} + +u8 sub_805D2C0(struct MapObject *mapObject, struct Sprite *sprite) +{ + mapObject->mapobj_bit_1 = 0; + return 0; +} -- cgit v1.2.3 From 6bb35f495cfc8f31be4a09100d4eb46fd1d5cd68 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 21 May 2017 13:40:38 -0400 Subject: npc_reset and get image anim id functions --- src/field_map_obj.c | 168 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 168 insertions(+) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index c31db8a4b..7e75d0ac1 100644 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -2112,3 +2112,171 @@ u8 sub_805D2C0(struct MapObject *mapObject, struct Sprite *sprite) mapObject->mapobj_bit_1 = 0; return 0; } + +void FieldObjectCB_BerryTree(struct Sprite *sprite); +void sub_805D4F4(struct Sprite *sprite); +void sub_805D634(struct Sprite *sprite); +void sub_805D774(struct Sprite *sprite); +void sub_805D8B4(struct Sprite *sprite); +void sub_805D9F4(struct Sprite *sprite); +void sub_805DB34(struct Sprite *sprite); +void sub_805DC74(struct Sprite *sprite); +void sub_805DDB4(struct Sprite *sprite); +void sub_805DEF4(struct Sprite *sprite); +void sub_805E034(struct Sprite *sprite); +void sub_805E174(struct Sprite *sprite); +void sub_805E278(struct Sprite *sprite); +void sub_805E37C(struct Sprite *sprite); +void sub_805E37C(struct Sprite *sprite); +void sub_805E37C(struct Sprite *sprite); +void sub_805E37C(struct Sprite *sprite); +void sub_805E5DC(struct Sprite *sprite); +void sub_805E668(struct Sprite *sprite); +void sub_805E6F4(struct Sprite *sprite); +void sub_805E780(struct Sprite *sprite); +void sub_805E80C(struct Sprite *sprite); +void sub_805E898(struct Sprite *sprite); +void sub_805E924(struct Sprite *sprite); +void sub_805E9B0(struct Sprite *sprite); +void sub_805EA3C(struct Sprite *sprite); +void sub_805EAC8(struct Sprite *sprite); +void sub_805EB54(struct Sprite *sprite); +void sub_805EBE0(struct Sprite *sprite); +void sub_805EC6C(struct Sprite *sprite); +void sub_805ECF8(struct Sprite *sprite); +void sub_805ED84(struct Sprite *sprite); +void sub_805EE10(struct Sprite *sprite); +void sub_805EE9C(struct Sprite *sprite); +void sub_805EF28(struct Sprite *sprite); +void sub_805EFB4(struct Sprite *sprite); +void sub_805F040(struct Sprite *sprite); +void sub_805F0CC(struct Sprite *sprite); +void sub_805F158(struct Sprite *sprite); +void sub_805F1E4(struct Sprite *sprite); +void sub_805F270(struct Sprite *sprite); +void sub_805F2FC(struct Sprite *sprite); +void sub_805F2FC(struct Sprite *sprite); +void sub_805F2FC(struct Sprite *sprite); +void sub_805F2FC(struct Sprite *sprite); +void FieldObjectCB_TreeDisguise(struct Sprite *sprite); +void FieldObjectCB_MountainDisguise(struct Sprite *sprite); +void sub_805F8E0(struct Sprite *sprite); +void sub_805F8E0(struct Sprite *sprite); +void sub_805F8E0(struct Sprite *sprite); +void sub_805F8E0(struct Sprite *sprite); +void FieldObjectCB_Hidden1(struct Sprite *sprite); +void sub_805FB20(struct Sprite *sprite); +void sub_805FB20(struct Sprite *sprite); +void sub_805FB20(struct Sprite *sprite); +void sub_805FB20(struct Sprite *sprite); +void sub_805FB90(struct Sprite *sprite); +void sub_805FB90(struct Sprite *sprite); +void sub_805FB90(struct Sprite *sprite); +void sub_805FB90(struct Sprite *sprite); +void sub_805FC00(struct Sprite *sprite); +void sub_805FC00(struct Sprite *sprite); +void sub_805FC00(struct Sprite *sprite); +void sub_805FC00(struct Sprite *sprite); +void sub_805FC70(struct Sprite *sprite); + +asm(".section .text_b\n"); + +void npc_reset(struct MapObject *mapObject, struct Sprite *sprite) +{ + mapObject->mapobj_bit_1 = 0; + mapObject->mapobj_bit_6 = 0; + mapObject->mapobj_bit_7 = 0; + mapObject->mapobj_unk_1C = 0xff; + sprite->data1 = 0; +} + +extern const u8 gUnknown_083755F4[9]; +extern const u8 gUnknown_083755FD[9]; +extern const u8 gUnknown_08375606[9]; +extern const u8 gUnknown_0837560F[9]; +extern const u8 gUnknown_08375618[9]; +extern const u8 gUnknown_08375621[9]; +extern const u8 gUnknown_0837562A[9]; +extern const u8 gUnknown_08375633[9]; +extern const u8 gUnknown_0837563C[9]; +extern const u8 gUnknown_08375645[9]; +extern const u8 gUnknown_0837564E[9]; +extern const u8 gUnknown_08375657[9]; +extern const u8 gUnknown_08375660[9]; +extern const u8 gUnknown_08375669[9]; +extern const u8 gUnknown_08375672[9]; + +u8 FieldObjectDirectionToImageAnimId(u8 direction) +{ + return gUnknown_083755F4[direction]; +} + +u8 get_go_image_anim_num(u8 direction) +{ + return gUnknown_083755FD[direction]; +} + +u8 get_go_fast_image_anim_num(u8 direction) +{ + return gUnknown_08375606[direction]; +} + +u8 get_go_faster_image_anim_num(u8 direction) +{ + return gUnknown_0837560F[direction]; +} + +u8 sub_805FD78(u8 direction) +{ + return gUnknown_08375618[direction]; +} + +u8 sub_805FD88(u8 direction) +{ + return gUnknown_08375621[direction]; +} + +u8 sub_805FD98(u8 direction) +{ + return gUnknown_0837562A[direction]; +} + +u8 unref_sub_805FDA8(u8 direction) +{ + return gUnknown_08375633[direction]; +} + +u8 sub_805FDB8(u8 direction) +{ + return gUnknown_0837563C[direction]; +} + +u8 sub_805FDC8(u8 direction) +{ + return gUnknown_08375645[direction]; +} + +u8 sub_805FDD8(u8 direction) +{ + return gUnknown_0837564E[direction]; +} + +u8 sub_805FDE8(u8 direction) +{ + return gUnknown_08375657[direction]; +} + +u8 sub_805FDF8(u8 direction) +{ + return gUnknown_08375660[direction]; +} + +u8 sub_805FE08(u8 direction) +{ + return gUnknown_08375669[direction]; +} + +u8 get_run_image_anim_num(u8 direction) +{ + return gUnknown_08375672[direction]; +} -- cgit v1.2.3 From 29d718686112139d3fd6f5cc8341f354da9414fc Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 21 May 2017 14:33:21 -0400 Subject: Berry tree field map object callback --- src/field_map_obj.c | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 110 insertions(+), 1 deletion(-) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index 7e75d0ac1..98bc73390 100644 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -4,6 +4,7 @@ #include "berry.h" #include "event_data.h" #include "field_player_avatar.h" +#include "field_effect.h" #include "palette.h" #include "rom4.h" #include "rng.h" @@ -39,6 +40,7 @@ extern u8 (*const gUnknown_08375270[])(struct MapObject *mapObject, struct Sprit extern u8 (*const gUnknown_08375284[])(struct MapObject *mapObject, struct Sprite *sprite); extern u8 (*const gUnknown_083752A4[])(struct MapObject *mapObject, struct Sprite *sprite); extern u8 (*const gUnknown_083752C4[])(struct MapObject *mapObject, struct Sprite *sprite); +extern u8 (*const gUnknown_083752D0[])(struct MapObject *mapObject, struct Sprite *sprite); struct PairedPalettes { @@ -2113,7 +2115,114 @@ u8 sub_805D2C0(struct MapObject *mapObject, struct Sprite *sprite) return 0; } -void FieldObjectCB_BerryTree(struct Sprite *sprite); +u8 sub_805D314(struct MapObject *mapObject, struct Sprite *sprite); + +void FieldObjectCB_BerryTree(struct Sprite *sprite) +{ + struct MapObject *mapObject; + mapObject = &gMapObjects[sprite->data0]; + if (!(sprite->data7 & 1)) + { + get_berry_tree_graphics(mapObject, sprite); + sprite->data7 |= 1; + } + meta_step(mapObject, sprite, sub_805D314); +} + +u8 sub_805D314(struct MapObject *mapObject, struct Sprite *sprite) +{ + return gUnknown_083752D0[sprite->data1](mapObject, sprite); +} + +extern u32 gUnknown_0202FF84[]; + +u8 do_berry_tree_growth_sparkle_1(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 berryTreeStage; + npc_reset(mapObject, sprite); + mapObject->mapobj_bit_13 = 1; + sprite->invisible = 1; + berryTreeStage = GetStageByBerryTreeId(mapObject->trainerRange_berryTreeId); + if (!berryTreeStage) + { + if (!(sprite->data7 & 4) && sprite->animNum == 4) + { + gUnknown_0202FF84[0] = mapObject->coords2.x; + gUnknown_0202FF84[1] = mapObject->coords2.y; + gUnknown_0202FF84[2] = sprite->subpriority - 1; + gUnknown_0202FF84[3] = sprite->oam.priority; + FieldEffectStart(0x17); + sprite->animNum = 0; + } + return 0; + } + mapObject->mapobj_bit_13 = 0; + sprite->invisible = 0; + berryTreeStage--; + if (sprite->animNum != berryTreeStage) + { + sprite->data1 = 2; + return 1; + } + get_berry_tree_graphics(mapObject, sprite); + FieldObjectSetRegularAnim(mapObject, sprite, 0x39); + sprite->data1 = 1; + return 1; +} + +u8 sub_805D3EC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite)) + { + sprite->data1 = 0; + return 1; + } + return 0; +} + +u8 do_berry_tree_growth_sparkle_2(struct MapObject *mapObject, struct Sprite *sprite) +{ + mapObject->mapobj_bit_1 = 1; + sprite->data1 = 3; + sprite->data2 = 0; + sprite->data7 |= 2; + gUnknown_0202FF84[0] = mapObject->coords2.x; + gUnknown_0202FF84[1] = mapObject->coords2.y; + gUnknown_0202FF84[2] = sprite->subpriority - 1; + gUnknown_0202FF84[3] = sprite->oam.priority; + FieldEffectStart(0x17); + return 1; +} + +u8 sub_805D458(struct MapObject *mapObject, struct Sprite *sprite) +{ + sprite->data2++; + mapObject->mapobj_bit_13 = ((sprite->data2 & 0x2) >> 1); + sprite->animPaused = 1; + if (sprite->data2 > 64) + { + get_berry_tree_graphics(mapObject, sprite); + sprite->data1 = 4; + sprite->data2 = 0; + return 1; + } + return 0; +} + +u8 sub_805D4A8(struct MapObject *mapObject, struct Sprite *sprite) +{ + sprite->data2++; + mapObject->mapobj_bit_13 = ((sprite->data2 & 0x2) >> 1); + sprite->animPaused = 1; + if (sprite->data2 > 64) + { + sprite->data1 = 0; + sprite->data7 &= (-3); + return 1; + } + return 0; +} + void sub_805D4F4(struct Sprite *sprite); void sub_805D634(struct Sprite *sprite); void sub_805D774(struct Sprite *sprite); -- cgit v1.2.3 From 4aeb3bac738b470c83848de58d370d707d3d67df Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 21 May 2017 16:47:09 -0400 Subject: sub_805D4F4 --- src/field_map_obj.c | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 64 insertions(+), 2 deletions(-) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index 98bc73390..a637d5767 100644 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -41,6 +41,7 @@ extern u8 (*const gUnknown_08375284[])(struct MapObject *mapObject, struct Sprit extern u8 (*const gUnknown_083752A4[])(struct MapObject *mapObject, struct Sprite *sprite); extern u8 (*const gUnknown_083752C4[])(struct MapObject *mapObject, struct Sprite *sprite); extern u8 (*const gUnknown_083752D0[])(struct MapObject *mapObject, struct Sprite *sprite); +extern u8 (*const gUnknown_083752E4[])(struct MapObject *mapObject, struct Sprite *sprite); struct PairedPalettes { @@ -1546,7 +1547,7 @@ u8 sub_805C8F0(struct MapObject *mapObject, struct Sprite *sprite) return 1; } -extern void FieldObjectSetRegularAnim(); +extern void FieldObjectSetRegularAnim(struct MapObject *, struct Sprite *, u8); u8 sub_805C904(struct MapObject *mapObject, struct Sprite *sprite) { @@ -2223,7 +2224,68 @@ u8 sub_805D4A8(struct MapObject *mapObject, struct Sprite *sprite) return 0; } -void sub_805D4F4(struct Sprite *sprite); +u8 sub_805D518(struct MapObject *mapObject, struct Sprite *sprite); + +void sub_805D4F4(struct Sprite *sprite) +{ + meta_step(&gMapObjects[sprite->data0], sprite, sub_805D518); +} + +u8 sub_805D518(struct MapObject *mapObject, struct Sprite *sprite) +{ + return gUnknown_083752E4[sprite->data1](mapObject, sprite); +} + +u8 sub_805D538(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + sprite->data1 = 1; + return 1; +} + +u8 sub_805D54C(struct MapObject *mapObject, struct Sprite *sprite) +{ + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); + sprite->data1 = 2; + return 1; +} + +u8 sub_805D578(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite)) + { + sub_8064820(sprite, gUnknown_0837520C[Random() & 3]); + mapObject->mapobj_bit_1 = 0; + sprite->data1 = 3; + } + return 0; +} + +u8 sub_805D5BC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) + { + sprite->data1 = 4; + return 1; + } + return 0; +} + +u8 sub_805D5EC(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 direction; + u8 directions[2]; + memcpy(directions, gUnknown_083752A0, 2); + direction = sub_805CD60(mapObject, 1); + if (direction == 0) + { + direction = directions[Random() & 1]; + } + FieldObjectSetDirection(mapObject, direction); + sprite->data1 = 1; + return 1; +} + void sub_805D634(struct Sprite *sprite); void sub_805D774(struct Sprite *sprite); void sub_805D8B4(struct Sprite *sprite); -- cgit v1.2.3 From e08f647c025853d3a03199cad8f42b38b0e5c41a Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 21 May 2017 18:40:52 -0400 Subject: sub_805D634 --- src/field_map_obj.c | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 64 insertions(+), 1 deletion(-) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index a637d5767..951f3724f 100644 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -42,6 +42,7 @@ extern u8 (*const gUnknown_083752A4[])(struct MapObject *mapObject, struct Sprit extern u8 (*const gUnknown_083752C4[])(struct MapObject *mapObject, struct Sprite *sprite); extern u8 (*const gUnknown_083752D0[])(struct MapObject *mapObject, struct Sprite *sprite); extern u8 (*const gUnknown_083752E4[])(struct MapObject *mapObject, struct Sprite *sprite); +extern u8 (*const gUnknown_083752F8[])(struct MapObject *mapObject, struct Sprite *sprite); struct PairedPalettes { @@ -2286,7 +2287,69 @@ u8 sub_805D5EC(struct MapObject *mapObject, struct Sprite *sprite) return 1; } -void sub_805D634(struct Sprite *sprite); + +u8 sub_805D658(struct MapObject *mapObject, struct Sprite *sprite); + +void sub_805D634(struct Sprite *sprite) +{ + meta_step(&gMapObjects[sprite->data0], sprite, sub_805D658); +} + +u8 sub_805D658(struct MapObject *mapObject, struct Sprite *sprite) +{ + return gUnknown_083752F8[sprite->data1](mapObject, sprite); +} + +u8 sub_805D678(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + sprite->data1 = 1; + return 1; +} + +u8 sub_805D68C(struct MapObject *mapObject, struct Sprite *sprite) +{ + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); + sprite->data1 = 2; + return 1; +} + +u8 sub_805D6B8(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite)) + { + sub_8064820(sprite, gUnknown_0837520C[Random() & 3]); + mapObject->mapobj_bit_1 = 0; + sprite->data1 = 3; + } + return 0; +} + +u8 sub_805D6FC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) + { + sprite->data1 = 4; + return 1; + } + return 0; +} + +u8 sub_805D72C(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 direction; + u8 directions[2]; + memcpy(directions, gUnknown_083752C0, 2); + direction = sub_805CD60(mapObject, 2); + if (direction == 0) + { + direction = directions[Random() & 1]; + } + FieldObjectSetDirection(mapObject, direction); + sprite->data1 = 1; + return 1; +} + void sub_805D774(struct Sprite *sprite); void sub_805D8B4(struct Sprite *sprite); void sub_805D9F4(struct Sprite *sprite); -- cgit v1.2.3 From ec86ef04a3f725e5c93437fe18c8e1fbb62b38ad Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 21 May 2017 18:50:23 -0400 Subject: sub_805D774 --- src/field_map_obj.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 66 insertions(+), 1 deletion(-) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index 951f3724f..83bff1026 100644 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -43,6 +43,7 @@ extern u8 (*const gUnknown_083752C4[])(struct MapObject *mapObject, struct Sprit extern u8 (*const gUnknown_083752D0[])(struct MapObject *mapObject, struct Sprite *sprite); extern u8 (*const gUnknown_083752E4[])(struct MapObject *mapObject, struct Sprite *sprite); extern u8 (*const gUnknown_083752F8[])(struct MapObject *mapObject, struct Sprite *sprite); +extern u8 (*const gUnknown_0837530C[])(struct MapObject *mapObject, struct Sprite *sprite); struct PairedPalettes { @@ -1559,6 +1560,7 @@ u8 sub_805C904(struct MapObject *mapObject, struct Sprite *sprite) extern u8 FieldObjectExecRegularAnim(struct MapObject *, struct Sprite *); extern const s16 gUnknown_0837520C[]; +extern const s16 gUnknown_0837521C[]; extern void sub_8064820(struct Sprite *, s16); u8 sub_805C930(struct MapObject *mapObject, struct Sprite *sprite) @@ -1587,6 +1589,7 @@ u8 sub_805C96C(struct MapObject *mapObject, struct Sprite *sprite) extern const u8 gUnknown_08375240[4]; extern const u8 gUnknown_083752A0[2]; extern const u8 gUnknown_083752C0[2]; +extern const u8 gUnknown_08375320[2]; extern u8 sub_805FF20(struct MapObject *, u8); u8 sub_805C98C(struct MapObject *mapObject, struct Sprite *sprite) @@ -2350,7 +2353,69 @@ u8 sub_805D72C(struct MapObject *mapObject, struct Sprite *sprite) return 1; } -void sub_805D774(struct Sprite *sprite); + +u8 sub_805D798(struct MapObject *mapObject, struct Sprite *sprite); + +void sub_805D774(struct Sprite *sprite) +{ + meta_step(&gMapObjects[sprite->data0], sprite, sub_805D798); +} + +u8 sub_805D798(struct MapObject *mapObject, struct Sprite *sprite) +{ + return gUnknown_0837530C[sprite->data1](mapObject, sprite); +} + +u8 sub_805D7B8(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + sprite->data1 = 1; + return 1; +} + +u8 sub_805D7CC(struct MapObject *mapObject, struct Sprite *sprite) +{ + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); + sprite->data1 = 2; + return 1; +} + +u8 sub_805D7F8(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite)) + { + sub_8064820(sprite, gUnknown_0837521C[Random() & 3]); + mapObject->mapobj_bit_1 = 0; + sprite->data1 = 3; + } + return 0; +} + +u8 sub_805D83C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) + { + sprite->data1 = 4; + return 1; + } + return 0; +} + +u8 sub_805D86C(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 direction; + u8 directions[2]; + memcpy(directions, gUnknown_08375320, 2); + direction = sub_805CD60(mapObject, 3); + if (direction == 0) + { + direction = directions[Random() & 1]; + } + FieldObjectSetDirection(mapObject, direction); + sprite->data1 = 1; + return 1; +} + void sub_805D8B4(struct Sprite *sprite); void sub_805D9F4(struct Sprite *sprite); void sub_805DB34(struct Sprite *sprite); -- cgit v1.2.3 From 87b6adf33d61a1f6e5518fdd1d741b621e88f55d Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 21 May 2017 19:41:36 -0400 Subject: Finish this block of nearly-identical callbacks --- src/field_map_obj.c | 479 +++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 454 insertions(+), 25 deletions(-) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index 83bff1026..394f3c43d 100644 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -44,6 +44,13 @@ extern u8 (*const gUnknown_083752D0[])(struct MapObject *mapObject, struct Sprit extern u8 (*const gUnknown_083752E4[])(struct MapObject *mapObject, struct Sprite *sprite); extern u8 (*const gUnknown_083752F8[])(struct MapObject *mapObject, struct Sprite *sprite); extern u8 (*const gUnknown_0837530C[])(struct MapObject *mapObject, struct Sprite *sprite); +extern u8 (*const gUnknown_08375324[])(struct MapObject *mapObject, struct Sprite *sprite); +extern u8 (*const gUnknown_0837533C[])(struct MapObject *mapObject, struct Sprite *sprite); +extern u8 (*const gUnknown_08375354[])(struct MapObject *mapObject, struct Sprite *sprite); +extern u8 (*const gUnknown_0837536C[])(struct MapObject *mapObject, struct Sprite *sprite); +extern u8 (*const gUnknown_08375384[])(struct MapObject *mapObject, struct Sprite *sprite); +extern u8 (*const gUnknown_0837539C[])(struct MapObject *mapObject, struct Sprite *sprite); +extern u8 (*const gUnknown_083753B4[])(struct MapObject *mapObject, struct Sprite *sprite); struct PairedPalettes { @@ -1590,6 +1597,13 @@ extern const u8 gUnknown_08375240[4]; extern const u8 gUnknown_083752A0[2]; extern const u8 gUnknown_083752C0[2]; extern const u8 gUnknown_08375320[2]; +extern const u8 gUnknown_08375338[2]; +extern const u8 gUnknown_08375350[2]; +extern const u8 gUnknown_08375368[2]; +extern const u8 gUnknown_08375380[2]; +extern const u8 gUnknown_08375398[2]; +extern const u8 gUnknown_083753B0[2]; +extern const u8 gUnknown_083753C8[2]; extern u8 sub_805FF20(struct MapObject *, u8); u8 sub_805C98C(struct MapObject *mapObject, struct Sprite *sprite) @@ -2416,19 +2430,449 @@ u8 sub_805D86C(struct MapObject *mapObject, struct Sprite *sprite) return 1; } -void sub_805D8B4(struct Sprite *sprite); -void sub_805D9F4(struct Sprite *sprite); -void sub_805DB34(struct Sprite *sprite); -void sub_805DC74(struct Sprite *sprite); -void sub_805DDB4(struct Sprite *sprite); -void sub_805DEF4(struct Sprite *sprite); -void sub_805E034(struct Sprite *sprite); + +u8 sub_805D8D8(struct MapObject *mapObject, struct Sprite *sprite); + +void sub_805D8B4(struct Sprite *sprite) +{ + meta_step(&gMapObjects[sprite->data0], sprite, sub_805D8D8); +} + +u8 sub_805D8D8(struct MapObject *mapObject, struct Sprite *sprite) +{ + return gUnknown_08375324[sprite->data1](mapObject, sprite); +} + +u8 sub_805D8F8(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + sprite->data1 = 1; + return 1; +} + +u8 sub_805D90C(struct MapObject *mapObject, struct Sprite *sprite) +{ + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); + sprite->data1 = 2; + return 1; +} + +u8 sub_805D938(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite)) + { + sub_8064820(sprite, gUnknown_0837521C[Random() & 3]); + mapObject->mapobj_bit_1 = 0; + sprite->data1 = 3; + } + return 0; +} + +u8 sub_805D97C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) + { + sprite->data1 = 4; + return 1; + } + return 0; +} + +u8 sub_805D9AC(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 direction; + u8 directions[2]; + memcpy(directions, gUnknown_08375338, 2); + direction = sub_805CD60(mapObject, 4); + if (direction == 0) + { + direction = directions[Random() & 1]; + } + FieldObjectSetDirection(mapObject, direction); + sprite->data1 = 1; + return 1; +} + + +u8 sub_805DA18(struct MapObject *mapObject, struct Sprite *sprite); + +void sub_805D9F4(struct Sprite *sprite) +{ + meta_step(&gMapObjects[sprite->data0], sprite, sub_805DA18); +} + +u8 sub_805DA18(struct MapObject *mapObject, struct Sprite *sprite) +{ + return gUnknown_0837533C[sprite->data1](mapObject, sprite); +} + +u8 sub_805DA38(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + sprite->data1 = 1; + return 1; +} + +u8 sub_805DA4C(struct MapObject *mapObject, struct Sprite *sprite) +{ + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); + sprite->data1 = 2; + return 1; +} + +u8 sub_805DA78(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite)) + { + sub_8064820(sprite, gUnknown_0837521C[Random() & 3]); + mapObject->mapobj_bit_1 = 0; + sprite->data1 = 3; + } + return 0; +} + +u8 sub_805DABC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) + { + sprite->data1 = 4; + return 1; + } + return 0; +} + +u8 sub_805DAEC(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 direction; + u8 directions[2]; + memcpy(directions, gUnknown_08375350, 2); + direction = sub_805CD60(mapObject, 5); + if (direction == 0) + { + direction = directions[Random() & 1]; + } + FieldObjectSetDirection(mapObject, direction); + sprite->data1 = 1; + return 1; +} + + +u8 sub_805DB58(struct MapObject *mapObject, struct Sprite *sprite); + +void sub_805DB34(struct Sprite *sprite) +{ + meta_step(&gMapObjects[sprite->data0], sprite, sub_805DB58); +} + +u8 sub_805DB58(struct MapObject *mapObject, struct Sprite *sprite) +{ + return gUnknown_08375354[sprite->data1](mapObject, sprite); +} + +u8 sub_805DB78(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + sprite->data1 = 1; + return 1; +} + +u8 sub_805DB8C(struct MapObject *mapObject, struct Sprite *sprite) +{ + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); + sprite->data1 = 2; + return 1; +} + +u8 sub_805DBB8(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite)) + { + sub_8064820(sprite, gUnknown_0837521C[Random() & 3]); + mapObject->mapobj_bit_1 = 0; + sprite->data1 = 3; + } + return 0; +} + +u8 sub_805DBFC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) + { + sprite->data1 = 4; + return 1; + } + return 0; +} + +u8 sub_805DC2C(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 direction; + u8 directions[2]; + memcpy(directions, gUnknown_08375368, 2); + direction = sub_805CD60(mapObject, 6); + if (direction == 0) + { + direction = directions[Random() & 1]; + } + FieldObjectSetDirection(mapObject, direction); + sprite->data1 = 1; + return 1; +} + + +u8 sub_805DC98(struct MapObject *mapObject, struct Sprite *sprite); + +void sub_805DC74(struct Sprite *sprite) +{ + meta_step(&gMapObjects[sprite->data0], sprite, sub_805DC98); +} + +u8 sub_805DC98(struct MapObject *mapObject, struct Sprite *sprite) +{ + return gUnknown_0837536C[sprite->data1](mapObject, sprite); +} + +u8 sub_805DCB8(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + sprite->data1 = 1; + return 1; +} + +u8 sub_805DCCC(struct MapObject *mapObject, struct Sprite *sprite) +{ + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); + sprite->data1 = 2; + return 1; +} + +u8 sub_805DCF8(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite)) + { + sub_8064820(sprite, gUnknown_0837521C[Random() & 3]); + mapObject->mapobj_bit_1 = 0; + sprite->data1 = 3; + } + return 0; +} + +u8 sub_805DD3C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) + { + sprite->data1 = 4; + return 1; + } + return 0; +} + +u8 sub_805DD6C(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 direction; + u8 directions[4]; + memcpy(directions, gUnknown_08375380, 4); + direction = sub_805CD60(mapObject, 7); + if (direction == 0) + { + direction = directions[Random() & 3]; + } + FieldObjectSetDirection(mapObject, direction); + sprite->data1 = 1; + return 1; +} + +u8 sub_805DDD8(struct MapObject *mapObject, struct Sprite *sprite); + +void sub_805DDB4(struct Sprite *sprite) +{ + meta_step(&gMapObjects[sprite->data0], sprite, sub_805DDD8); +} + +u8 sub_805DDD8(struct MapObject *mapObject, struct Sprite *sprite) +{ + return gUnknown_08375384[sprite->data1](mapObject, sprite); +} + +u8 sub_805DDF8(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + sprite->data1 = 1; + return 1; +} + +u8 sub_805DE0C(struct MapObject *mapObject, struct Sprite *sprite) +{ + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); + sprite->data1 = 2; + return 1; +} + +u8 sub_805DE38(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite)) + { + sub_8064820(sprite, gUnknown_0837521C[Random() & 3]); + mapObject->mapobj_bit_1 = 0; + sprite->data1 = 3; + } + return 0; +} + +u8 sub_805DE7C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) + { + sprite->data1 = 4; + return 1; + } + return 0; +} + +u8 sub_805DEAC(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 direction; + u8 directions[4]; + memcpy(directions, gUnknown_08375398, 4); + direction = sub_805CD60(mapObject, 8); + if (direction == 0) + { + direction = directions[Random() & 3]; + } + FieldObjectSetDirection(mapObject, direction); + sprite->data1 = 1; + return 1; +} + + +u8 sub_805DF18(struct MapObject *mapObject, struct Sprite *sprite); + +void sub_805DEF4(struct Sprite *sprite) +{ + meta_step(&gMapObjects[sprite->data0], sprite, sub_805DF18); +} + +u8 sub_805DF18(struct MapObject *mapObject, struct Sprite *sprite) +{ + return gUnknown_0837539C[sprite->data1](mapObject, sprite); +} + +u8 sub_805DF38(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + sprite->data1 = 1; + return 1; +} + +u8 sub_805DF4C(struct MapObject *mapObject, struct Sprite *sprite) +{ + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); + sprite->data1 = 2; + return 1; +} + +u8 sub_805DF78(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite)) + { + sub_8064820(sprite, gUnknown_0837521C[Random() & 3]); + mapObject->mapobj_bit_1 = 0; + sprite->data1 = 3; + } + return 0; +} + +u8 sub_805DFBC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) + { + sprite->data1 = 4; + return 1; + } + return 0; +} + +u8 sub_805DFEC(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 direction; + u8 directions[4]; + memcpy(directions, gUnknown_083753B0, 4); + direction = sub_805CD60(mapObject, 9); + if (direction == 0) + { + direction = directions[Random() & 3]; + } + FieldObjectSetDirection(mapObject, direction); + sprite->data1 = 1; + return 1; +} + + +u8 sub_805E058(struct MapObject *mapObject, struct Sprite *sprite); + +void sub_805E034(struct Sprite *sprite) +{ + meta_step(&gMapObjects[sprite->data0], sprite, sub_805E058); +} + +u8 sub_805E058(struct MapObject *mapObject, struct Sprite *sprite) +{ + return gUnknown_083753B4[sprite->data1](mapObject, sprite); +} + +u8 sub_805E078(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + sprite->data1 = 1; + return 1; +} + +u8 sub_805E08C(struct MapObject *mapObject, struct Sprite *sprite) +{ + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); + sprite->data1 = 2; + return 1; +} + +u8 sub_805E0B8(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite)) + { + sub_8064820(sprite, gUnknown_0837521C[Random() & 3]); + mapObject->mapobj_bit_1 = 0; + sprite->data1 = 3; + } + return 0; +} + +u8 sub_805E0FC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) + { + sprite->data1 = 4; + return 1; + } + return 0; +} + +u8 sub_805E12C(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 direction; + u8 directions[4]; + memcpy(directions, gUnknown_083753C8, 4); + direction = sub_805CD60(mapObject, 10); + if (direction == 0) + { + direction = directions[Random() & 3]; + } + FieldObjectSetDirection(mapObject, direction); + sprite->data1 = 1; + return 1; +} + void sub_805E174(struct Sprite *sprite); void sub_805E278(struct Sprite *sprite); void sub_805E37C(struct Sprite *sprite); -void sub_805E37C(struct Sprite *sprite); -void sub_805E37C(struct Sprite *sprite); -void sub_805E37C(struct Sprite *sprite); void sub_805E5DC(struct Sprite *sprite); void sub_805E668(struct Sprite *sprite); void sub_805E6F4(struct Sprite *sprite); @@ -2454,27 +2898,12 @@ void sub_805F158(struct Sprite *sprite); void sub_805F1E4(struct Sprite *sprite); void sub_805F270(struct Sprite *sprite); void sub_805F2FC(struct Sprite *sprite); -void sub_805F2FC(struct Sprite *sprite); -void sub_805F2FC(struct Sprite *sprite); -void sub_805F2FC(struct Sprite *sprite); void FieldObjectCB_TreeDisguise(struct Sprite *sprite); void FieldObjectCB_MountainDisguise(struct Sprite *sprite); void sub_805F8E0(struct Sprite *sprite); -void sub_805F8E0(struct Sprite *sprite); -void sub_805F8E0(struct Sprite *sprite); -void sub_805F8E0(struct Sprite *sprite); void FieldObjectCB_Hidden1(struct Sprite *sprite); void sub_805FB20(struct Sprite *sprite); -void sub_805FB20(struct Sprite *sprite); -void sub_805FB20(struct Sprite *sprite); -void sub_805FB20(struct Sprite *sprite); -void sub_805FB90(struct Sprite *sprite); void sub_805FB90(struct Sprite *sprite); -void sub_805FB90(struct Sprite *sprite); -void sub_805FB90(struct Sprite *sprite); -void sub_805FC00(struct Sprite *sprite); -void sub_805FC00(struct Sprite *sprite); -void sub_805FC00(struct Sprite *sprite); void sub_805FC00(struct Sprite *sprite); void sub_805FC70(struct Sprite *sprite); -- cgit v1.2.3 From 42e6ed382f1e9fdf3f28e2dd048fc99bbd56b347 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 22 May 2017 08:34:47 -0400 Subject: sub_805E174 --- src/field_map_obj.c | 84 +++++++++++++++++++++++++++++++++++------------------ 1 file changed, 55 insertions(+), 29 deletions(-) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index 394f3c43d..475620c28 100644 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -35,22 +35,6 @@ void GetFieldObjectMovingCameraOffset(s16 *, s16 *); void sub_805BDF8(u16); u8 sub_805BE58(const struct SpritePalette *); u8 FindFieldObjectPaletteIndexByTag(u16); -extern u8 (*const gUnknown_08375244[])(s16 a0, s16 a1, s16 a2, s16 a3); -extern u8 (*const gUnknown_08375270[])(struct MapObject *mapObject, struct Sprite *sprite); -extern u8 (*const gUnknown_08375284[])(struct MapObject *mapObject, struct Sprite *sprite); -extern u8 (*const gUnknown_083752A4[])(struct MapObject *mapObject, struct Sprite *sprite); -extern u8 (*const gUnknown_083752C4[])(struct MapObject *mapObject, struct Sprite *sprite); -extern u8 (*const gUnknown_083752D0[])(struct MapObject *mapObject, struct Sprite *sprite); -extern u8 (*const gUnknown_083752E4[])(struct MapObject *mapObject, struct Sprite *sprite); -extern u8 (*const gUnknown_083752F8[])(struct MapObject *mapObject, struct Sprite *sprite); -extern u8 (*const gUnknown_0837530C[])(struct MapObject *mapObject, struct Sprite *sprite); -extern u8 (*const gUnknown_08375324[])(struct MapObject *mapObject, struct Sprite *sprite); -extern u8 (*const gUnknown_0837533C[])(struct MapObject *mapObject, struct Sprite *sprite); -extern u8 (*const gUnknown_08375354[])(struct MapObject *mapObject, struct Sprite *sprite); -extern u8 (*const gUnknown_0837536C[])(struct MapObject *mapObject, struct Sprite *sprite); -extern u8 (*const gUnknown_08375384[])(struct MapObject *mapObject, struct Sprite *sprite); -extern u8 (*const gUnknown_0837539C[])(struct MapObject *mapObject, struct Sprite *sprite); -extern u8 (*const gUnknown_083753B4[])(struct MapObject *mapObject, struct Sprite *sprite); struct PairedPalettes { @@ -1593,17 +1577,6 @@ u8 sub_805C96C(struct MapObject *mapObject, struct Sprite *sprite) return 0; } -extern const u8 gUnknown_08375240[4]; -extern const u8 gUnknown_083752A0[2]; -extern const u8 gUnknown_083752C0[2]; -extern const u8 gUnknown_08375320[2]; -extern const u8 gUnknown_08375338[2]; -extern const u8 gUnknown_08375350[2]; -extern const u8 gUnknown_08375368[2]; -extern const u8 gUnknown_08375380[2]; -extern const u8 gUnknown_08375398[2]; -extern const u8 gUnknown_083753B0[2]; -extern const u8 gUnknown_083753C8[2]; extern u8 sub_805FF20(struct MapObject *, u8); u8 sub_805C98C(struct MapObject *mapObject, struct Sprite *sprite) @@ -2744,7 +2717,6 @@ u8 sub_805DEAC(struct MapObject *mapObject, struct Sprite *sprite) return 1; } - u8 sub_805DF18(struct MapObject *mapObject, struct Sprite *sprite); void sub_805DEF4(struct Sprite *sprite) @@ -2870,7 +2842,61 @@ u8 sub_805E12C(struct MapObject *mapObject, struct Sprite *sprite) return 1; } -void sub_805E174(struct Sprite *sprite); + +u8 sub_805E198(struct MapObject *mapObject, struct Sprite *sprite); + +void sub_805E174(struct Sprite *sprite) +{ + meta_step(&gMapObjects[sprite->data0], sprite, sub_805E198); +} + +u8 sub_805E198(struct MapObject *mapObject, struct Sprite *sprite) +{ + return gUnknown_083753CC[sprite->data1](mapObject, sprite); +} + +u8 sub_805E1B8(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); + sprite->data1 = 1; + return 1; +} + +u8 sub_805E1E4(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite)) + { + sub_8064820(sprite, 0x30); + sprite->data1 = 2; + } + return 0; +} + +u8 sub_805E208(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) + { + sprite->data1 = 3; + } + return 0; +} + +u8 sub_805E234(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 direction; + u8 directions[5]; + memcpy(directions, gUnknown_083753DC, 5); + direction = sub_805CD60(mapObject, 0); + if (direction == 0) + { + direction = directions[mapObject->mapobj_unk_18]; + } + FieldObjectSetDirection(mapObject, direction); + sprite->data1 = 0; + return 1; +} + void sub_805E278(struct Sprite *sprite); void sub_805E37C(struct Sprite *sprite); void sub_805E5DC(struct Sprite *sprite); -- cgit v1.2.3 From 4c42206a7f63b2045eae85ad2b4a60a630178d4c Mon Sep 17 00:00:00 2001 From: scnorton Date: Mon, 22 May 2017 14:40:21 -0400 Subject: Create and propagate field map object callback declaration macro --- src/field_map_obj.c | 261 +++++++++++++--------------------------------------- 1 file changed, 62 insertions(+), 199 deletions(-) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index 475620c28..b75f16d54 100644 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -12,6 +12,7 @@ extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[36]; + extern void strange_npc_table_clear(void); extern void ClearPlayerAvatarInfo(void); extern void npc_load_two_palettes__no_record(u16, u8); @@ -1505,33 +1506,8 @@ u16 npc_paltag_by_palslot(u8 a) return 0x11FF; } -u8 sub_805C8A8(struct MapObject *mapObject, struct Sprite *sprite); - -void sub_805C884(struct Sprite *sprite) -{ - meta_step(&gMapObjects[sprite->data0], sprite, sub_805C8A8); -} - -u8 sub_805C8A8(struct MapObject *mapObject, struct Sprite *sprite) -{ - return 0; -} - -u8 sub_805C8D0(struct MapObject *, struct Sprite *); - -void sub_805C8AC(struct Sprite *sprite) -{ - meta_step(&gMapObjects[sprite->data0], sprite, sub_805C8D0); -} - -extern u8 (*const gUnknown_08375224[])(); - -u8 sub_805C8D0(struct MapObject *mapObject, struct Sprite *sprite) -{ - return gUnknown_08375224[sprite->data1](mapObject, sprite); -} - -void npc_reset(struct MapObject *mapObject, struct Sprite *sprite); +fieldmap_object_null_cb(sub_805C884, sub_805C8A8); +fieldmap_object_cb(sub_805C8AC, sub_805C8D0, gUnknown_08375224); u8 sub_805C8F0(struct MapObject *mapObject, struct Sprite *sprite) { @@ -1849,17 +1825,7 @@ u8 sub_805CD60(struct MapObject *mapObject, u8 a1) return gUnknown_08375244[a1](x, y, x2, y2); } -u8 sub_805CE0C(struct MapObject *mapObject, struct Sprite *sprite); - -void sub_805CDE8(struct Sprite *sprite) -{ - meta_step(&gMapObjects[sprite->data0], sprite, sub_805CE0C); -} - -u8 sub_805CE0C(struct MapObject *mapObject, struct Sprite *sprite) -{ - return gUnknown_08375270[sprite->data1](mapObject, sprite); -} +fieldmap_object_cb(sub_805CDE8, sub_805CE0c, gUnknown_08375270); u8 sub_805CE2C(struct MapObject *mapObject, struct Sprite *sprite) { @@ -1911,17 +1877,7 @@ u8 sub_805CEE0(struct MapObject *mapObject, struct Sprite *sprite) return 1; } -u8 sub_805CF4C(struct MapObject *mapObject, struct Sprite *sprite); - -void sub_805CF28(struct Sprite *sprite) -{ - meta_step(&gMapObjects[sprite->data0], sprite, sub_805CF4C); -} - -u8 sub_805CF4C(struct MapObject *mapObject, struct Sprite *sprite) -{ - return gUnknown_08375284[sprite->data1](mapObject, sprite); -} +fieldmap_object_cb(sub_805CF28, sub_805CF4C, gUnknown_08375284); u8 sub_805CF6C(struct MapObject *mapObject, struct Sprite *sprite) { @@ -1991,17 +1947,7 @@ u8 sub_805D084(struct MapObject *mapObject, struct Sprite *sprite) return 0; } -u8 sub_805D0D0(struct MapObject *mapObject, struct Sprite *sprite); - -void sub_805D0AC(struct Sprite *sprite) -{ - meta_step(&gMapObjects[sprite->data0], sprite, sub_805D0D0); -} - -u8 sub_805D0D0(struct MapObject *mapObject, struct Sprite *sprite) -{ - return gUnknown_083752A4[sprite->data1](mapObject, sprite); -} +fieldmap_object_cb(sub_805D0AC, sub_805D0D0, gUnknown_083752A4); u8 sub_805D0F0(struct MapObject *mapObject, struct Sprite *sprite) { @@ -2071,17 +2017,7 @@ u8 sub_805D208(struct MapObject *mapObject, struct Sprite *sprite) return 0; } -u8 sub_805D254(struct MapObject *mapObject, struct Sprite *sprite); - -void sub_805D230(struct Sprite *sprite) -{ - meta_step(&gMapObjects[sprite->data0], sprite, sub_805D254); -} - -u8 sub_805D254(struct MapObject *mapObject, struct Sprite *sprite) -{ - return gUnknown_083752C4[sprite->data1](mapObject, sprite); -} +fieldmap_object_cb(sub_805D230, sub_805D254, gUnknown_083752C4); u8 sub_805D274(struct MapObject *mapObject, struct Sprite *sprite) { @@ -2108,6 +2044,7 @@ u8 sub_805D2C0(struct MapObject *mapObject, struct Sprite *sprite) } u8 sub_805D314(struct MapObject *mapObject, struct Sprite *sprite); +extern u8 (*const gUnknown_083752D0[])(struct MapObject *mapObject, struct Sprite *sprite); void FieldObjectCB_BerryTree(struct Sprite *sprite) { @@ -2215,17 +2152,7 @@ u8 sub_805D4A8(struct MapObject *mapObject, struct Sprite *sprite) return 0; } -u8 sub_805D518(struct MapObject *mapObject, struct Sprite *sprite); - -void sub_805D4F4(struct Sprite *sprite) -{ - meta_step(&gMapObjects[sprite->data0], sprite, sub_805D518); -} - -u8 sub_805D518(struct MapObject *mapObject, struct Sprite *sprite) -{ - return gUnknown_083752E4[sprite->data1](mapObject, sprite); -} +fieldmap_object_cb(sub_805D4F4, sub_805D518, gUnknown_083752E4); u8 sub_805D538(struct MapObject *mapObject, struct Sprite *sprite) { @@ -2277,18 +2204,7 @@ u8 sub_805D5EC(struct MapObject *mapObject, struct Sprite *sprite) return 1; } - -u8 sub_805D658(struct MapObject *mapObject, struct Sprite *sprite); - -void sub_805D634(struct Sprite *sprite) -{ - meta_step(&gMapObjects[sprite->data0], sprite, sub_805D658); -} - -u8 sub_805D658(struct MapObject *mapObject, struct Sprite *sprite) -{ - return gUnknown_083752F8[sprite->data1](mapObject, sprite); -} +fieldmap_object_cb(sub_805D634, sub_805D658, gUnknown_083752F8); u8 sub_805D678(struct MapObject *mapObject, struct Sprite *sprite) { @@ -2340,18 +2256,7 @@ u8 sub_805D72C(struct MapObject *mapObject, struct Sprite *sprite) return 1; } - -u8 sub_805D798(struct MapObject *mapObject, struct Sprite *sprite); - -void sub_805D774(struct Sprite *sprite) -{ - meta_step(&gMapObjects[sprite->data0], sprite, sub_805D798); -} - -u8 sub_805D798(struct MapObject *mapObject, struct Sprite *sprite) -{ - return gUnknown_0837530C[sprite->data1](mapObject, sprite); -} +fieldmap_object_cb(sub_805D774, sub_805D798, gUnknown_0837530C); u8 sub_805D7B8(struct MapObject *mapObject, struct Sprite *sprite) { @@ -2403,18 +2308,7 @@ u8 sub_805D86C(struct MapObject *mapObject, struct Sprite *sprite) return 1; } - -u8 sub_805D8D8(struct MapObject *mapObject, struct Sprite *sprite); - -void sub_805D8B4(struct Sprite *sprite) -{ - meta_step(&gMapObjects[sprite->data0], sprite, sub_805D8D8); -} - -u8 sub_805D8D8(struct MapObject *mapObject, struct Sprite *sprite) -{ - return gUnknown_08375324[sprite->data1](mapObject, sprite); -} +fieldmap_object_cb(sub_805D8B4, sub_805D8D8, gUnknown_08375324); u8 sub_805D8F8(struct MapObject *mapObject, struct Sprite *sprite) { @@ -2466,18 +2360,7 @@ u8 sub_805D9AC(struct MapObject *mapObject, struct Sprite *sprite) return 1; } - -u8 sub_805DA18(struct MapObject *mapObject, struct Sprite *sprite); - -void sub_805D9F4(struct Sprite *sprite) -{ - meta_step(&gMapObjects[sprite->data0], sprite, sub_805DA18); -} - -u8 sub_805DA18(struct MapObject *mapObject, struct Sprite *sprite) -{ - return gUnknown_0837533C[sprite->data1](mapObject, sprite); -} +fieldmap_object_cb(sub_805D9F4, sub_805DA18, gUnknown_0837533C); u8 sub_805DA38(struct MapObject *mapObject, struct Sprite *sprite) { @@ -2529,18 +2412,7 @@ u8 sub_805DAEC(struct MapObject *mapObject, struct Sprite *sprite) return 1; } - -u8 sub_805DB58(struct MapObject *mapObject, struct Sprite *sprite); - -void sub_805DB34(struct Sprite *sprite) -{ - meta_step(&gMapObjects[sprite->data0], sprite, sub_805DB58); -} - -u8 sub_805DB58(struct MapObject *mapObject, struct Sprite *sprite) -{ - return gUnknown_08375354[sprite->data1](mapObject, sprite); -} +fieldmap_object_cb(sub_805DB34, sub_805DB58, gUnknown_08375354); u8 sub_805DB78(struct MapObject *mapObject, struct Sprite *sprite) { @@ -2592,18 +2464,7 @@ u8 sub_805DC2C(struct MapObject *mapObject, struct Sprite *sprite) return 1; } - -u8 sub_805DC98(struct MapObject *mapObject, struct Sprite *sprite); - -void sub_805DC74(struct Sprite *sprite) -{ - meta_step(&gMapObjects[sprite->data0], sprite, sub_805DC98); -} - -u8 sub_805DC98(struct MapObject *mapObject, struct Sprite *sprite) -{ - return gUnknown_0837536C[sprite->data1](mapObject, sprite); -} +fieldmap_object_cb(sub_805DC74, sub_805DC98, gUnknown_0837536C); u8 sub_805DCB8(struct MapObject *mapObject, struct Sprite *sprite) { @@ -2655,17 +2516,7 @@ u8 sub_805DD6C(struct MapObject *mapObject, struct Sprite *sprite) return 1; } -u8 sub_805DDD8(struct MapObject *mapObject, struct Sprite *sprite); - -void sub_805DDB4(struct Sprite *sprite) -{ - meta_step(&gMapObjects[sprite->data0], sprite, sub_805DDD8); -} - -u8 sub_805DDD8(struct MapObject *mapObject, struct Sprite *sprite) -{ - return gUnknown_08375384[sprite->data1](mapObject, sprite); -} +fieldmap_object_cb(sub_805DDB4, sub_805DDD8, gUnknown_08375384); u8 sub_805DDF8(struct MapObject *mapObject, struct Sprite *sprite) { @@ -2717,17 +2568,7 @@ u8 sub_805DEAC(struct MapObject *mapObject, struct Sprite *sprite) return 1; } -u8 sub_805DF18(struct MapObject *mapObject, struct Sprite *sprite); - -void sub_805DEF4(struct Sprite *sprite) -{ - meta_step(&gMapObjects[sprite->data0], sprite, sub_805DF18); -} - -u8 sub_805DF18(struct MapObject *mapObject, struct Sprite *sprite) -{ - return gUnknown_0837539C[sprite->data1](mapObject, sprite); -} +fieldmap_object_cb(sub_805DEF4, sub_805DF18, gUnknown_0837539C); u8 sub_805DF38(struct MapObject *mapObject, struct Sprite *sprite) { @@ -2779,18 +2620,7 @@ u8 sub_805DFEC(struct MapObject *mapObject, struct Sprite *sprite) return 1; } - -u8 sub_805E058(struct MapObject *mapObject, struct Sprite *sprite); - -void sub_805E034(struct Sprite *sprite) -{ - meta_step(&gMapObjects[sprite->data0], sprite, sub_805E058); -} - -u8 sub_805E058(struct MapObject *mapObject, struct Sprite *sprite) -{ - return gUnknown_083753B4[sprite->data1](mapObject, sprite); -} +fieldmap_object_cb(sub_805E034, sub_805E058, gUnknown_083753B4); u8 sub_805E078(struct MapObject *mapObject, struct Sprite *sprite) { @@ -2842,20 +2672,53 @@ u8 sub_805E12C(struct MapObject *mapObject, struct Sprite *sprite) return 1; } +fieldmap_object_cb(sub_805E174, sub_805E198, gUnknown_083753CC); -u8 sub_805E198(struct MapObject *mapObject, struct Sprite *sprite); +u8 sub_805E1B8(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); + sprite->data1 = 1; + return 1; +} -void sub_805E174(struct Sprite *sprite) +u8 sub_805E1E4(struct MapObject *mapObject, struct Sprite *sprite) { - meta_step(&gMapObjects[sprite->data0], sprite, sub_805E198); + if (FieldObjectExecRegularAnim(mapObject, sprite)) + { + sub_8064820(sprite, 0x30); + sprite->data1 = 2; + } + return 0; } -u8 sub_805E198(struct MapObject *mapObject, struct Sprite *sprite) +u8 sub_805E208(struct MapObject *mapObject, struct Sprite *sprite) { - return gUnknown_083753CC[sprite->data1](mapObject, sprite); + if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) + { + sprite->data1 = 3; + } + return 0; } -u8 sub_805E1B8(struct MapObject *mapObject, struct Sprite *sprite) +u8 sub_805E234(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 direction; + u8 directions[5]; + memcpy(directions, gUnknown_083753DC, 5); + direction = sub_805CD60(mapObject, 0); + if (direction == 0) + { + direction = directions[mapObject->mapobj_unk_18]; + } + FieldObjectSetDirection(mapObject, direction); + sprite->data1 = 0; + return 1; +} + +fieldmap_object_cb(sub_805E278, sub_803E29C, gUnknown_083753E4); + +u8 sub_805E2BC(struct MapObject *mapObject, struct Sprite *sprite) { npc_reset(mapObject, sprite); FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); @@ -2863,7 +2726,7 @@ u8 sub_805E1B8(struct MapObject *mapObject, struct Sprite *sprite) return 1; } -u8 sub_805E1E4(struct MapObject *mapObject, struct Sprite *sprite) +u8 sub_805E2E8(struct MapObject *mapObject, struct Sprite *sprite) { if (FieldObjectExecRegularAnim(mapObject, sprite)) { @@ -2873,7 +2736,7 @@ u8 sub_805E1E4(struct MapObject *mapObject, struct Sprite *sprite) return 0; } -u8 sub_805E208(struct MapObject *mapObject, struct Sprite *sprite) +u8 sub_805E30C(struct MapObject *mapObject, struct Sprite *sprite) { if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) { @@ -2882,11 +2745,11 @@ u8 sub_805E208(struct MapObject *mapObject, struct Sprite *sprite) return 0; } -u8 sub_805E234(struct MapObject *mapObject, struct Sprite *sprite) +u8 sub_805E338(struct MapObject *mapObject, struct Sprite *sprite) { u8 direction; u8 directions[5]; - memcpy(directions, gUnknown_083753DC, 5); + memcpy(directions, gUnknown_083753F4, 5); direction = sub_805CD60(mapObject, 0); if (direction == 0) { @@ -2897,7 +2760,7 @@ u8 sub_805E234(struct MapObject *mapObject, struct Sprite *sprite) return 1; } -void sub_805E278(struct Sprite *sprite); + void sub_805E37C(struct Sprite *sprite); void sub_805E5DC(struct Sprite *sprite); void sub_805E668(struct Sprite *sprite); -- cgit v1.2.3 From abe5f5053624f876ea17c44370b203c0a4ace86b Mon Sep 17 00:00:00 2001 From: scnorton Date: Mon, 22 May 2017 17:21:17 -0400 Subject: Another chunk of library-like functions --- src/field_map_obj.c | 105 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 103 insertions(+), 2 deletions(-) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index b75f16d54..7c332c505 100644 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -1,10 +1,12 @@ #include "global.h" #include "field_map_obj.h" +#include "fieldmap.h" #include "asm.h" #include "berry.h" #include "event_data.h" #include "field_player_avatar.h" #include "field_effect.h" +#include "field_ground_effect.h" #include "palette.h" #include "rom4.h" #include "rng.h" @@ -20,14 +22,14 @@ extern void npc_load_two_palettes__and_record(u16, u8); extern void sub_8060388(s16, s16, s16 *, s16 *); extern void sub_80634D0(); extern void pal_patch_for_npc(u16, u16); -extern void sub_80603CC(); +extern void sub_80603CC(s16, s16, s16 *, s16 *); extern void CameraObjectReset1(void); void sub_805AAB0(void); u8 GetFieldObjectIdByLocalId(u8); u8 GetFieldObjectIdByLocalIdAndMapInternal(u8, u8, u8); u8 GetAvailableFieldObjectSlot(u16, u8, u8, u8 *); -void FieldObjectHandleDynamicGraphicsId(); +void FieldObjectHandleDynamicGraphicsId(struct MapObject *); void RemoveFieldObjectInternal(struct MapObject *); u16 GetFieldObjectFlagIdByFieldObjectId(u8); void MakeObjectTemplateFromFieldObjectTemplate(struct MapObjectTemplate *mapObjTemplate, struct SpriteTemplate *sprTemplate, struct SubspriteTable **subspriteTables); @@ -2897,3 +2899,102 @@ u8 get_run_image_anim_num(u8 direction) { return gUnknown_08375672[direction]; } + +void sub_805FE28(struct MapObject *mapObject, struct Sprite *sprite, u8 animNum) +{ + if (!mapObject->mapobj_bit_12) + { + sprite->animNum = animNum; + if (sprite->animCmdIndex == 1) + { + sprite->animCmdIndex = 2; + } else if (sprite->animCmdIndex == 3) + { + sprite->animCmdIndex = 0; + } + SeekSpriteAnim(sprite, sprite->animCmdIndex); + } +} + +void sub_805FE64(struct MapObject *mapObject, struct Sprite *sprite, u8 animNum) +{ + u8 animCmdIndex; + if (!mapObject->mapobj_bit_12) + { + sprite->animNum = animNum; + animCmdIndex = 3; + if (sprite->animCmdIndex < 2) + { + animCmdIndex = 1; + } + SeekSpriteAnim(sprite, animCmdIndex); + } +} + +u8 sub_805FE90(s16 a0, s16 a1, s16 a2, s16 a3) +{ + if (a0 > a2) + { + return DIR_WEST; + } else if (a0 < a2) + { + return DIR_EAST; + } else if (a1 > a3) + { + return DIR_NORTH; + } else + { + return DIR_SOUTH; + } +} + +void npc_set_running_behaviour_etc(struct MapObject *mapObject, u8 animPattern) +{ + mapObject->animPattern = animPattern; + mapObject->mapobj_unk_21 = 0; + mapObject->animId = 0; + gSprites[mapObject->spriteId].callback = gUnknown_0836DA88[animPattern]; + gSprites[mapObject->spriteId].data1 = 0; +} + +u8 npc_running_behaviour_by_direction(u8 direction) +{ + return gUnknown_0837567B[direction]; +} + +u8 sub_805FF20(struct MapObject *mapObject, u8 direction) +{ + s16 x; + s16 y; + x = mapObject->coords2.x; + y = mapObject->coords2.y; + MoveCoords(direction, &x, &y); + return npc_block_way(mapObject, x, y, direction); +} + +bool8 IsCoordOutsideFieldObjectMovementRect(struct MapObject *mapObject, s16 x, s16 y); + +u8 npc_block_way(struct MapObject *mapObject, s16 x, s16 y, u8 direction) +{ + if (IsCoordOutsideFieldObjectMovementRect(mapObject, x, y)) + { + return 1; + } + if (MapGridIsImpassableAt(x, y) || GetMapBorderIdAt(x, y) == -1 || IsMetatileDirectionallyImpassable(mapObject, x, y, direction)) + { + return 2; + } + if (mapObject->mapobj_bit_15 && !CanCameraMoveInDirection(direction)) + { + return 2; + } + if (IsZCoordMismatchAt(mapObject->mapobj_unk_0B_0, x, y)) + { + return 3; + } + if (CheckForCollisionBetweenFieldObjects(mapObject, x, y)) + { + return 4; + } + return 0; +} -- cgit v1.2.3 From b087d8a909925baf772aa0d631318fb17667067c Mon Sep 17 00:00:00 2001 From: scnorton Date: Mon, 22 May 2017 19:31:47 -0400 Subject: IsCoordOutsideFieldObjectMovementRect and others --- src/field_map_obj.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 53 insertions(+), 4 deletions(-) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index 7c332c505..755de7611 100644 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -2972,19 +2972,20 @@ u8 sub_805FF20(struct MapObject *mapObject, u8 direction) return npc_block_way(mapObject, x, y, direction); } -bool8 IsCoordOutsideFieldObjectMovementRect(struct MapObject *mapObject, s16 x, s16 y); +bool8 IsCoordOutsideFieldObjectMovementRect(struct MapObject2 *mapObject, s16 x, s16 y); +bool8 CheckForCollisionBetweenFieldObjects(struct MapObject *mapObject, s16 x, s16 y); +bool8 IsMetatileDirectionallyImpassable(struct MapObject *mapObject, s16 x, s16 y, u8 direction); u8 npc_block_way(struct MapObject *mapObject, s16 x, s16 y, u8 direction) { - if (IsCoordOutsideFieldObjectMovementRect(mapObject, x, y)) + if (IsCoordOutsideFieldObjectMovementRect((struct MapObject2 *)mapObject, x, y)) { return 1; } if (MapGridIsImpassableAt(x, y) || GetMapBorderIdAt(x, y) == -1 || IsMetatileDirectionallyImpassable(mapObject, x, y, direction)) { return 2; - } - if (mapObject->mapobj_bit_15 && !CanCameraMoveInDirection(direction)) + } else if (mapObject->mapobj_bit_15 && !CanCameraMoveInDirection(direction)) { return 2; } @@ -2998,3 +2999,51 @@ u8 npc_block_way(struct MapObject *mapObject, s16 x, s16 y, u8 direction) } return 0; } + +u8 sub_8060024(struct MapObject *mapObject, s16 x, s16 y, u8 direction) +{ + u8 flags; + flags = 0; + if (IsCoordOutsideFieldObjectMovementRect((struct MapObject2 *)mapObject, x, y)) + { + flags |= 1; + } + if (MapGridIsImpassableAt(x, y) || GetMapBorderIdAt(x, y) == -1 || IsMetatileDirectionallyImpassable(mapObject, x, y, direction) || (mapObject->mapobj_bit_15 && !CanCameraMoveInDirection(direction))) + { + flags |= 2; + } + if (IsZCoordMismatchAt(mapObject->mapobj_unk_0B_0, x, y)) + { + flags |= 4; + } + if (CheckForCollisionBetweenFieldObjects(mapObject, x, y)) + { + flags |= 8; + } + return flags; +} + +bool8 IsCoordOutsideFieldObjectMovementRect(struct MapObject2 *mapObject, s16 x, s16 y) +{ + s16 minv; + s16 maxv; + if (mapObject->mapobj_unk_19 != 0) + { + minv = mapObject->coords1.x - (mapObject->mapobj_unk_19); + maxv = mapObject->coords1.x + (mapObject->mapobj_unk_19); + if (minv > x || maxv < x) + { + return 1; + } + } + if (mapObject->mapobj_unk_19b != 0) + { + minv = mapObject->coords1.y - (mapObject->mapobj_unk_19b); + maxv = mapObject->coords1.y + (mapObject->mapobj_unk_19b); + if (minv > y || maxv < y) + { + return 1; + } + } + return 0; +} -- cgit v1.2.3 From cf9607b0a809258170df8e8c970442a09ff21380 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 22 May 2017 21:34:17 -0400 Subject: sub_805E37C and helpers --- src/field_map_obj.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 66 insertions(+), 1 deletion(-) mode change 100644 => 100755 src/field_map_obj.c (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c old mode 100644 new mode 100755 index 755de7611..d186eea66 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -2762,8 +2762,73 @@ u8 sub_805E338(struct MapObject *mapObject, struct Sprite *sprite) return 1; } +fieldmap_object_cb(sub_805E37C, sub_805E3A0, gUnknown_083753FC); + +u8 sub_805E3C0(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + sprite->data1 = 1; + return 1; +} + +u8 sub_805E3D4(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 direction; + direction = gUnknown_0836DC09[mapObject->animPattern]; + if (mapObject->mapobj_unk_21 != 0) + { + direction = GetOppositeDirection(direction); + } + FieldObjectSetDirection(mapObject, direction); + sprite->data1 = 2; + return 1; +} + +u8 sub_805E40C(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 v0; + u8 goSpeed0AnimId; + if (mapObject->mapobj_unk_21 && mapObject->coords1.x == mapObject->coords2.x && mapObject->coords1.y == mapObject->coords2.y) + { + mapObject->mapobj_unk_21 = 0; + FieldObjectSetDirection(mapObject, GetOppositeDirection(mapObject->placeholder18)); + } + v0 = sub_805FF20(mapObject, mapObject->placeholder18); + goSpeed0AnimId = GetGoSpeed0AnimId(mapObject->placeholder18); + if (v0 == 1) + { + mapObject->mapobj_unk_21 ++; + FieldObjectSetDirection(mapObject, GetOppositeDirection(mapObject->placeholder18)); + goSpeed0AnimId = GetGoSpeed0AnimId(mapObject->placeholder18); + v0 = sub_805FF20(mapObject, mapObject->placeholder18); + } + if (v0 != 0) + { + goSpeed0AnimId = GetStepInPlaceDelay16AnimId(mapObject->mapobj_unk_18); + } + FieldObjectSetRegularAnim(mapObject, sprite, goSpeed0AnimId); + mapObject->mapobj_bit_1 = 1; + sprite->data1 = 3; + return 1; +} + +u8 sub_805E4C4(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite)) + { + mapObject->mapobj_bit_1 = 0; + sprite->data1 = 1; + } + return 0; +} + +u8 sub_805E4EC(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + sprite->data1 = 1; + return 1; +} -void sub_805E37C(struct Sprite *sprite); void sub_805E5DC(struct Sprite *sprite); void sub_805E668(struct Sprite *sprite); void sub_805E6F4(struct Sprite *sprite); -- cgit v1.2.3 From eae1c5be1196c5e7e57bafcea8a3d204f049abb6 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 22 May 2017 21:55:50 -0400 Subject: A handful more functions in the midst of field map object callbacks --- src/field_map_obj.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index d186eea66..845f84a34 100755 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -2829,6 +2829,44 @@ u8 sub_805E4EC(struct MapObject *mapObject, struct Sprite *sprite) return 1; } +u8 MoveFieldObjectInNextDirectionInSequence(struct MapObject *mapObject, struct Sprite *sprite, u8 *directionSequence) +{ + u8 v0; + u8 goSpeed0AnimId; + if (mapObject->mapobj_unk_21 == 3 && mapObject->coords1.x == mapObject->coords2.x && mapObject->coords1.y == mapObject->coords2.y) + { + mapObject->mapobj_unk_21 = 0; + } + FieldObjectSetDirection(mapObject, directionSequence[mapObject->mapobj_unk_21]); + goSpeed0AnimId = GetGoSpeed0AnimId(mapObject->placeholder18); + v0 = sub_805FF20(mapObject, mapObject->placeholder18); + if (v0 == 1) + { + mapObject->mapobj_unk_21 ++; + FieldObjectSetDirection(mapObject, directionSequence[mapObject->mapobj_unk_21]); + goSpeed0AnimId = GetGoSpeed0AnimId(mapObject->placeholder18); + v0 = sub_805FF20(mapObject, mapObject->placeholder18); + } + if (v0 != 0) + { + goSpeed0AnimId = GetStepInPlaceDelay16AnimId(mapObject->mapobj_unk_18); + } + FieldObjectSetRegularAnim(mapObject, sprite, goSpeed0AnimId); + mapObject->mapobj_bit_1 = 1; + sprite->data1 = 2; + return 1; +} + +u8 sub_805E5B4(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite)) + { + mapObject->mapobj_bit_1 = 0; + sprite->data1 = 1; + } + return 0; +} + void sub_805E5DC(struct Sprite *sprite); void sub_805E668(struct Sprite *sprite); void sub_805E6F4(struct Sprite *sprite); -- cgit v1.2.3 From 5b4191d55480021c5a26a11a0acbd26b8e3f4053 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 22 May 2017 22:30:35 -0400 Subject: Halfway mark on asm/field_map_obj.s --- src/field_map_obj.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 53 insertions(+), 3 deletions(-) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index 845f84a34..f91328805 100755 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -2867,10 +2867,60 @@ u8 sub_805E5B4(struct MapObject *mapObject, struct Sprite *sprite) return 0; } -void sub_805E5DC(struct Sprite *sprite); -void sub_805E668(struct Sprite *sprite); -void sub_805E6F4(struct Sprite *sprite); +fieldmap_object_cb(sub_805E5DC, sub_805E600, gUnknown_0837540C); + +u8 sub_805E620(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_08375418, 4); + if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.x == mapObject->coords2.x) + { + mapObject->mapobj_unk_21 = 3; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +} + +fieldmap_object_cb(sub_805E668, sub_805E68C, gUnknown_0837541C); + +u8 sub_805E6AC(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_08375428, 4); + if (mapObject->mapobj_unk_21 == 1 && mapObject->coords1.x == mapObject->coords2.x) + { + mapObject->mapobj_unk_21 = 2; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +} + +fieldmap_object_cb(sub_805E6F4, sub_805E718, gUnknown_0837542C); + +u8 sub_805E738(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_08375438, 4); + if (mapObject->mapobj_unk_21 == 1 && mapObject->coords1.y == mapObject->coords2.y) + { + mapObject->mapobj_unk_21 = 2; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +} + void sub_805E780(struct Sprite *sprite); + +fieldmap_object_cb(sub_805E780, sub_805E7A4, gUnknown_0837543C); + +u8 sub_805E7C4(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_08375448, 4); + if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.y == mapObject->coords2.y) + { + mapObject->mapobj_unk_21 = 3; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +} + void sub_805E80C(struct Sprite *sprite); void sub_805E898(struct Sprite *sprite); void sub_805E924(struct Sprite *sprite); -- cgit v1.2.3 From 9c3a25305cfa90021caae4f3a64e5de5ebc6cd45 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 23 May 2017 08:52:21 -0400 Subject: Knock off twenty more field object callbacks --- src/field_map_obj.c | 284 ++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 262 insertions(+), 22 deletions(-) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index f91328805..1f48c9aad 100755 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -2906,8 +2906,6 @@ u8 sub_805E738(struct MapObject *mapObject, struct Sprite *sprite) return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); } -void sub_805E780(struct Sprite *sprite); - fieldmap_object_cb(sub_805E780, sub_805E7A4, gUnknown_0837543C); u8 sub_805E7C4(struct MapObject *mapObject, struct Sprite *sprite) @@ -2921,26 +2919,268 @@ u8 sub_805E7C4(struct MapObject *mapObject, struct Sprite *sprite) return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); } -void sub_805E80C(struct Sprite *sprite); -void sub_805E898(struct Sprite *sprite); -void sub_805E924(struct Sprite *sprite); -void sub_805E9B0(struct Sprite *sprite); -void sub_805EA3C(struct Sprite *sprite); -void sub_805EAC8(struct Sprite *sprite); -void sub_805EB54(struct Sprite *sprite); -void sub_805EBE0(struct Sprite *sprite); -void sub_805EC6C(struct Sprite *sprite); -void sub_805ECF8(struct Sprite *sprite); -void sub_805ED84(struct Sprite *sprite); -void sub_805EE10(struct Sprite *sprite); -void sub_805EE9C(struct Sprite *sprite); -void sub_805EF28(struct Sprite *sprite); -void sub_805EFB4(struct Sprite *sprite); -void sub_805F040(struct Sprite *sprite); -void sub_805F0CC(struct Sprite *sprite); -void sub_805F158(struct Sprite *sprite); -void sub_805F1E4(struct Sprite *sprite); -void sub_805F270(struct Sprite *sprite); + + +fieldmap_object_cb(sub_805E80C, sub_805E830, gUnknown_0837544C); + +u8 sub_805E850(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_08375458, 4); + if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.x == mapObject->coords2.x) + { + mapObject->mapobj_unk_21 = 3; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +} + +fieldmap_object_cb(sub_805E898, sub_805E8BC, gUnknown_0837545C); + +u8 sub_805E8DC(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_08375468, 4); + if (mapObject->mapobj_unk_21 == 1 && mapObject->coords1.x == mapObject->coords2.x) + { + mapObject->mapobj_unk_21 = 2; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +} + +fieldmap_object_cb(sub_805E924, sub_805E948, gUnknown_0837546C); + +u8 sub_805E968(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_08375240, 4); + if (mapObject->mapobj_unk_21 == 1 && mapObject->coords1.y == mapObject->coords2.y) + { + mapObject->mapobj_unk_21 = 2; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +} + +fieldmap_object_cb(sub_805E9B0, sub_805E9D4, gUnknown_08375478); + +u8 sub_805E9F4(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_08375484, 4); + if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.y == mapObject->coords2.y) + { + mapObject->mapobj_unk_21 = 3; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +} + +fieldmap_object_cb(sub_805EA3C, sub_805EA60, gUnknown_08375488); + +u8 sub_805EA80(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_08375494, 4); + if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.y == mapObject->coords2.y) + { + mapObject->mapobj_unk_21 = 3; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +} + +fieldmap_object_cb(sub_805EAC8, sub_805EAEC, gUnknown_08375498); + +u8 sub_805EB0C(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_083754A4, 4); + if (mapObject->mapobj_unk_21 == 1 && mapObject->coords1.y == mapObject->coords2.y) + { + mapObject->mapobj_unk_21 = 2; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +} + +fieldmap_object_cb(sub_805EB54, sub_805EB78, gUnknown_083754A8); + +u8 sub_805EB98(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_083754B4, 4); + if (mapObject->mapobj_unk_21 == 1 && mapObject->coords1.x == mapObject->coords2.x) + { + mapObject->mapobj_unk_21 = 2; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +} + +fieldmap_object_cb(sub_805EBE0, sub_805EC04, gUnknown_083754B8); + +u8 sub_805EC24(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_083754C4, 4); + if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.x == mapObject->coords2.x) + { + mapObject->mapobj_unk_21 = 3; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +} + +fieldmap_object_cb(sub_805EC6C, sub_805EC90, gUnknown_083754C8); + +u8 sub_805ECB0(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_083754D4, 4); + if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.y == mapObject->coords2.y) + { + mapObject->mapobj_unk_21 = 3; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +} + +fieldmap_object_cb(sub_805ECF8, sub_805ED1C, gUnknown_083754D8); + +u8 sub_805ED3C(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_083754E4, 4); + if (mapObject->mapobj_unk_21 == 1 && mapObject->coords1.y == mapObject->coords2.y) + { + mapObject->mapobj_unk_21 = 2; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +} + +fieldmap_object_cb(sub_805ED84, sub_805EDA8, gUnknown_083754E8); + +u8 sub_805EDC8(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_083754F4, 4); + if (mapObject->mapobj_unk_21 == 1 && mapObject->coords1.x == mapObject->coords2.x) + { + mapObject->mapobj_unk_21 = 2; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +} + +fieldmap_object_cb(sub_805EE10, sub_805EE34, gUnknown_083754F8); + +u8 sub_805EE54(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_08375504, 4); + if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.x == mapObject->coords2.x) + { + mapObject->mapobj_unk_21 = 3; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +} + +fieldmap_object_cb(sub_805EE9C, sub_805EEC0, gUnknown_08375508); + +u8 sub_805EEE0(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_08375514, 4); + if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.y == mapObject->coords2.y) + { + mapObject->mapobj_unk_21 = 3; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +} + +fieldmap_object_cb(sub_805EF28, sub_805EF4C, gUnknown_08375518); + +u8 sub_805EF6C(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_08375524, 4); + if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.y == mapObject->coords2.y) + { + mapObject->mapobj_unk_21 = 3; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +} + +fieldmap_object_cb(sub_805EFB4, sub_805EFD8, gUnknown_08375528); + +u8 sub_805EFF8(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_08375534, 4); + if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.x == mapObject->coords2.x) + { + mapObject->mapobj_unk_21 = 3; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +} + +fieldmap_object_cb(sub_805F040, sub_805F064, gUnknown_08375538); + +u8 sub_805F084(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_08375544, 4); + if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.x == mapObject->coords2.x) + { + mapObject->mapobj_unk_21 = 3; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +} + +fieldmap_object_cb(sub_805F0CC, sub_805F0F0, gUnknown_08375548); + +u8 sub_805F110(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_08375554, 4); + if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.y == mapObject->coords2.y) + { + mapObject->mapobj_unk_21 = 3; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +} + +fieldmap_object_cb(sub_805F158, sub_805F17C, gUnknown_08375558); + +u8 sub_805F19C(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_08375564, 4); + if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.y == mapObject->coords2.y) + { + mapObject->mapobj_unk_21 = 3; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +} + +fieldmap_object_cb(sub_805F1E4, sub_805F208, gUnknown_08375568); + +u8 sub_805F228(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_08375574, 4); + if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.x == mapObject->coords2.x) + { + mapObject->mapobj_unk_21 = 3; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +} + +fieldmap_object_cb(sub_805F270, sub_805F294, gUnknown_08375578); + +u8 sub_805F2B4(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_08375584, 4); + if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.x == mapObject->coords2.x) + { + mapObject->mapobj_unk_21 = 3; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +}; + void sub_805F2FC(struct Sprite *sprite); void FieldObjectCB_TreeDisguise(struct Sprite *sprite); void FieldObjectCB_MountainDisguise(struct Sprite *sprite); -- cgit v1.2.3 From 48a3b78f82095fb2bd77db7c1c296158deacd76e Mon Sep 17 00:00:00 2001 From: scnorton Date: Tue, 23 May 2017 10:16:08 -0400 Subject: IsMetatileDirectionallyImpassable, CheckForCollisionBetweenFieldObjects --- src/field_map_obj.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index 1f48c9aad..c94b5a180 100755 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -3440,3 +3440,34 @@ bool8 IsCoordOutsideFieldObjectMovementRect(struct MapObject2 *mapObject, s16 x, } return 0; } + +bool8 IsMetatileDirectionallyImpassable(struct MapObject *mapObject, s16 x, s16 y, u8 direction) +{ + if (gUnknown_08375684[direction - 1](mapObject->mapobj_unk_1E) || gUnknown_08375694[direction - 1](MapGridGetMetatileBehaviorAt(x, y))) + { + return 1; + } + return 0; +} + +bool8 CheckForCollisionBetweenFieldObjects(struct MapObject *mapObject, s16 x, s16 y) +{ + struct MapObject *mapObject2; + u8 i; + for (i=0; i<16; i++) + { + mapObject2 = &gMapObjects[i]; + if (mapObject2->active && mapObject2 != mapObject) + { + if ((mapObject2->coords2.x != x || mapObject2->coords2.y != y) && (mapObject2->coords3.x != x || mapObject2->coords3.y != y)) + { + continue; + } + if (AreZCoordsCompatible(mapObject->mapobj_unk_0B_0, mapObject2->mapobj_unk_0B_0)) + { + return 1; + } + } + } + return 0; +} -- cgit v1.2.3 From 8155a807befd4f55f31a38a4535225221708783d Mon Sep 17 00:00:00 2001 From: scnorton Date: Tue, 23 May 2017 11:13:36 -0400 Subject: Another set of functions related to adjusting coordinates --- src/field_map_obj.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index c94b5a180..8ca2970ab 100755 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -3471,3 +3471,68 @@ bool8 CheckForCollisionBetweenFieldObjects(struct MapObject *mapObject, s16 x, s } return 0; } + +bool8 sub_8060234(u8 localId, u8 mapNum, u8 mapGroup) +{ + u8 mapObjectId; + if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId)) + { + if (gSprites[gMapObjects[mapObjectId].spriteId].data7 & 2) + { + return 1; + } + } + return 0; +} + +void sub_8060288(u8 localId, u8 mapNum, u8 mapGroup) +{ + u8 mapObjectId; + if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId)) + { + gSprites[gMapObjects[mapObjectId].spriteId].data7 |= 4; + } +} + +void MoveCoords(u8 direction, s16 *x, s16 *y) +{ + *x += gDirectionToVector[direction].x; + *y += gDirectionToVector[direction].y; +} + +void unref_sub_80602F8(u8 direction, s16 *x, s16 *y) +{ + *x += gDirectionToVector[direction].x << 4; + *y += gDirectionToVector[direction].y << 4; +} + +void sub_8060320(u8 direction, s16 *x, s16 *y, s16 deltaX, s16 deltaY) +{ + if (gDirectionToVector[direction].x > 0) + { + *x += deltaX; + } + if (gDirectionToVector[direction].x < 0) + { + *x -= deltaX; + } + if (gDirectionToVector[direction].y > 0) + { + *y += deltaY; + } + if (gDirectionToVector[direction].y < 0) + { + *y -= deltaY; + } +} + +extern s16 gUnknown_03004898; +extern s16 gUnknown_0300489C; + +void sub_8060388(s16 x1, s16 y1, s16 *x2, s16 *y2) +{ + *x2 = (x1 - gSaveBlock1.pos.x) << 4; + *y2 = (y1 - gSaveBlock1.pos.y) << 4; + *x2 -= gUnknown_0300489C; + *y2 -= gUnknown_03004898; +} -- cgit v1.2.3 From 9684b862198f763e66a4f6348cc1f1cdef075ec0 Mon Sep 17 00:00:00 2001 From: scnorton Date: Tue, 23 May 2017 12:06:33 -0400 Subject: Some more functions related to FMO camera and special anims --- src/field_map_obj.c | 102 +++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 97 insertions(+), 5 deletions(-) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index 8ca2970ab..bd77ad2be 100755 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -1,5 +1,6 @@ #include "global.h" #include "field_map_obj.h" +#include "field_map_obj_helpers.h" #include "fieldmap.h" #include "asm.h" #include "berry.h" @@ -11,6 +12,7 @@ #include "rom4.h" #include "rng.h" #include "sprite.h" +#include "field_camera.h" extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[36]; @@ -22,7 +24,6 @@ extern void npc_load_two_palettes__and_record(u16, u8); extern void sub_8060388(s16, s16, s16 *, s16 *); extern void sub_80634D0(); extern void pal_patch_for_npc(u16, u16); -extern void sub_80603CC(s16, s16, s16 *, s16 *); extern void CameraObjectReset1(void); void sub_805AAB0(void); @@ -614,7 +615,7 @@ u8 AddPseudoFieldObject(u16 graphicsId, void (*callback)(struct Sprite *), s16 c } extern void sub_8064970(struct Sprite *); -extern void sub_8060470(); +extern void sub_8060470(s16 *, s16 *, s16, s16); extern void InitObjectPriorityByZCoord(); u8 sub_805B410(u8 a, u8 b, s16 c, s16 d, u8 e, u8 f) @@ -3526,9 +3527,6 @@ void sub_8060320(u8 direction, s16 *x, s16 *y, s16 deltaX, s16 deltaY) } } -extern s16 gUnknown_03004898; -extern s16 gUnknown_0300489C; - void sub_8060388(s16 x1, s16 y1, s16 *x2, s16 *y2) { *x2 = (x1 - gSaveBlock1.pos.x) << 4; @@ -3536,3 +3534,97 @@ void sub_8060388(s16 x1, s16 y1, s16 *x2, s16 *y2) *x2 -= gUnknown_0300489C; *y2 -= gUnknown_03004898; } + +void sub_80603CC(s16 x1, s16 y1, s16 *x2, s16 *y2) +{ + s16 x3; + s16 y3; + x3 = -gUnknown_0300489C - gUnknown_03004880.unk10; + y3 = -gUnknown_03004898 - gUnknown_03004880.unk14; + if (gUnknown_03004880.unk10 > 0) + { + x3 += 0x10; + } + if (gUnknown_03004880.unk10 < 0) + { + x3 -= 0x10; + } + if (gUnknown_03004880.unk14 > 0) + { + y3 += 0x10; + } + if (gUnknown_03004880.unk14 < 0) + { + y3 -= 0x10; + } + *x2 = ((x1 - gSaveBlock1.pos.x) << 4) + x3; + *y2 = ((y1 - gSaveBlock1.pos.y) << 4) + y3; +} + +void sub_8060470(s16 *x, s16 *y, s16 dx, s16 dy) +{ + sub_80603CC(*x, *y, x, y); + *x += dx; + *y += dy; +} + +void GetFieldObjectMovingCameraOffset(s16 *x, s16 *y) +{ + *x = 0; + *y = 0; + if (gUnknown_03004880.unk10 > 0) + { + (*x)++; + } + if (gUnknown_03004880.unk10 < 0) + { + (*x)--; + } + if (gUnknown_03004880.unk14 > 0) + { + (*y)++; + } + if (gUnknown_03004880.unk14 < 0) + { + (*y)--; + } +} + +void FieldObjectMoveDestCoords(struct MapObject *mapObject, u8 direction, s16 *x, s16 *y) +{ + *x = mapObject->coords2.x; + *y = mapObject->coords2.y; + MoveCoords(direction, x, y); +} + +bool8 FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(struct MapObject *mapObject) +{ + if (mapObject->mapobj_bit_1 || mapObject->mapobj_bit_6) + { + return TRUE; + } + return FALSE; +} + +bool8 FieldObjectIsSpecialAnimActive(struct MapObject *mapObject) +{ + if (mapObject->mapobj_bit_6 && mapObject->mapobj_unk_1C != 0xff) + { + return TRUE; + } + return FALSE; +} + +bool8 FieldObjectSetSpecialAnim(struct MapObject *mapObject, u8 specialAnimId) +{ + if (FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject)) + { + return TRUE; + } + UnfreezeMapObject(mapObject); + mapObject->mapobj_unk_1C = specialAnimId; + mapObject->mapobj_bit_6 = 1; + mapObject->mapobj_bit_7 = 0; + gSprites[mapObject->spriteId].data2 = 0; + return FALSE; +} -- cgit v1.2.3 From f9c54affb68b5aa35ef97fad29db67935d2c7d8d Mon Sep 17 00:00:00 2001 From: scnorton Date: Tue, 23 May 2017 13:18:23 -0400 Subject: Special anims; meta_step --- src/field_map_obj.c | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 80 insertions(+), 1 deletion(-) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index bd77ad2be..29dbc4bd0 100755 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -22,7 +22,7 @@ extern void ClearPlayerAvatarInfo(void); extern void npc_load_two_palettes__no_record(u16, u8); extern void npc_load_two_palettes__and_record(u16, u8); extern void sub_8060388(s16, s16, s16 *, s16 *); -extern void sub_80634D0(); +extern void sub_80634D0(struct MapObject *, struct Sprite *); extern void pal_patch_for_npc(u16, u16); extern void CameraObjectReset1(void); @@ -3628,3 +3628,82 @@ bool8 FieldObjectSetSpecialAnim(struct MapObject *mapObject, u8 specialAnimId) gSprites[mapObject->spriteId].data2 = 0; return FALSE; } + +void FieldObjectForceSetSpecialAnim(struct MapObject *mapObject, u8 specialAnimId) +{ + FieldObjectClearAnimIfSpecialAnimActive(mapObject); + FieldObjectSetSpecialAnim(mapObject, specialAnimId); +} + +void FieldObjectClearAnimIfSpecialAnimActive(struct MapObject *mapObject) +{ + if (mapObject->mapobj_bit_6) + { + FieldObjectClearAnim(mapObject); + } +} + +void FieldObjectClearAnim(struct MapObject *mapObject) +{ + mapObject->mapobj_unk_1C = 0xFF; + mapObject->mapobj_bit_6 = 0; + mapObject->mapobj_bit_7 = 0; + gSprites[mapObject->spriteId].data1 = 0; + gSprites[mapObject->spriteId].data2 = 0; +} + +bool8 FieldObjectCheckIfSpecialAnimFinishedOrInactive(struct MapObject *mapObject) +{ + if (mapObject->mapobj_bit_6) + return mapObject->mapobj_bit_7; + return 0x10; +} + +bool8 FieldObjectClearAnimIfSpecialAnimFinished(struct MapObject *mapObject) +{ + u8 specialAnimStatus; + specialAnimStatus = FieldObjectCheckIfSpecialAnimFinishedOrInactive(mapObject); + if (specialAnimStatus != 0 && specialAnimStatus != 0x10) + { + FieldObjectClearAnimIfSpecialAnimActive(mapObject); + } + return specialAnimStatus; +} + +u8 FieldObjectGetSpecialAnim(struct MapObject *mapObject) +{ + if (mapObject->mapobj_bit_6) + { + return mapObject->mapobj_unk_1C; + } + return 0xFF; +} + +extern void DoGroundEffects_OnSpawn(struct MapObject *mapObject, struct Sprite *sprite); +extern void DoGroundEffects_OnBeginStep(struct MapObject *mapObject, struct Sprite *sprite); +extern void DoGroundEffects_OnFinishStep(struct MapObject *mapObject, struct Sprite *sprite); +extern void npc_obj_transfer_image_anim_pause_flag(struct MapObject *mapObject, struct Sprite *sprite); +void sub_80634A0(struct MapObject *mapObject, struct Sprite *sprite); +void FieldObjectExecSpecialAnim(struct MapObject *mapObject, struct Sprite *sprite); +void FieldObjectUpdateSubpriority(struct MapObject *mapObject, struct Sprite *sprite); + +void meta_step(struct MapObject *mapObject, struct Sprite *sprite, u8 (*callback)(struct MapObject *, struct Sprite *)) +{ + DoGroundEffects_OnSpawn(mapObject, sprite); + sub_80634A0(mapObject, sprite); + if (FieldObjectIsSpecialAnimActive(mapObject)) + { + FieldObjectExecSpecialAnim(mapObject, sprite); + } else + { + if (!mapObject->mapobj_bit_8) + { + while (callback(mapObject, sprite)); + } + } + DoGroundEffects_OnBeginStep(mapObject, sprite); + DoGroundEffects_OnFinishStep(mapObject, sprite); + npc_obj_transfer_image_anim_pause_flag(mapObject, sprite); + sub_80634D0(mapObject, sprite); + FieldObjectUpdateSubpriority(mapObject, sprite); +} -- cgit v1.2.3 From f678fe263da7deeeb060672a3520b4b1d71ce848 Mon Sep 17 00:00:00 2001 From: scnorton Date: Tue, 23 May 2017 13:50:14 -0400 Subject: Another chunk of largely-identical FMO functions --- src/field_map_obj.c | 357 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 357 insertions(+) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index 29dbc4bd0..211bc919f 100755 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -3707,3 +3707,360 @@ void meta_step(struct MapObject *mapObject, struct Sprite *sprite, u8 (*callback sub_80634D0(mapObject, sprite); FieldObjectUpdateSubpriority(mapObject, sprite); } + + +const u8 gUnknown_083756C8[5]; + +u8 GetFaceDirectionAnimId(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_083756C8, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +const u8 gUnknown_083756CD[5]; + +u8 GetSimpleGoAnimId(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_083756CD, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +const u8 gUnknown_083756D2[5]; + +u8 GetGoSpeed0AnimId(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_083756D2, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +const u8 gUnknown_083756D7[5]; + +u8 sub_8060744(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_083756D7, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +const u8 gUnknown_083756DC[5]; + +u8 d2s_08064034(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_083756DC, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +const u8 gUnknown_083756E1[5]; + +u8 sub_806079C(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_083756E1, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +const u8 gUnknown_083756E6[5]; + +u8 sub_80607C8(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_083756E6, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +const u8 gUnknown_083756EB[5]; + +u8 sub_80607F4(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_083756EB, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +const u8 gUnknown_083756F0[5]; + +u8 GetJumpLedgeAnimId(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_083756F0, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +const u8 gUnknown_083756F5[5]; + +u8 sub_806084C(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_083756F5, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +const u8 gUnknown_083756FA[5]; + +u8 sub_8060878(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_083756FA, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +const u8 gUnknown_083756FF[5]; + +u8 sub_80608A4(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_083756FF, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +const u8 gUnknown_08375704[5]; + +u8 sub_80608D0(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_08375704, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +const u8 gUnknown_08375709[5]; + +u8 GetStepInPlaceDelay32AnimId(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_08375709, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +const u8 gUnknown_0837570E[5]; + +u8 GetStepInPlaceDelay16AnimId(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_0837570E, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +const u8 gUnknown_08375713[5]; + +u8 GetStepInPlaceDelay8AnimId(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_08375713, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +const u8 gUnknown_08375718[5]; + +u8 GetStepInPlaceDelay4AnimId(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_08375718, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +u8 FieldObjectFaceOppositeDirection(struct MapObject *mapObject, u8 direction) +{ + return FieldObjectSetSpecialAnim(mapObject, GetFaceDirectionAnimId(GetOppositeDirection(direction))); +} + +const u8 gUnknown_0837571D[5]; + +u8 sub_80609D8(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_0837571D, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +const u8 gUnknown_08375722[5]; + +u8 sub_8060A04(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_08375722, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +const u8 gUnknown_08375727[5]; + +u8 sub_8060A30(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_08375727, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +const u8 gUnknown_0837572C[5]; + +u8 sub_8060A5C(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_0837572C, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +const u8 gUnknown_08375731[5]; + +u8 sub_8060A88(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_08375731, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +const u8 gUnknown_08375736[5]; + +u8 sub_8060AB4(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_08375736, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +const u8 gUnknown_0837573B[5]; + +u8 sub_8060AE0(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_0837573B, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +const u8 gUnknown_08375740[5]; + +u8 sub_8060B0C(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_08375740, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +const u8 gUnknown_08375745[5]; + +u8 sub_8060B38(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_08375745, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +const u8 gUnknown_0837574A[5]; + +u8 sub_8060B64(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_0837574A, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} -- cgit v1.2.3 From 39e0ce9f6d6dab0f9d72f967ba6fef23398bb342 Mon Sep 17 00:00:00 2001 From: scnorton Date: Tue, 23 May 2017 14:27:22 -0400 Subject: up through state_to_direction, which is nonmatching (help, registers are misbehaving) --- src/field_map_obj.c | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index 211bc919f..108f9cc20 100755 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -4064,3 +4064,73 @@ u8 sub_8060B64(u8 index) } return directions[index]; } + +u8 GetOppositeDirection(u8 direction) +{ + u8 directions[8]; + memcpy(directions, gUnknown_0837574F, 8); + if (direction == 0 || direction > 8) + { + return direction; + } + return directions[direction - 1]; +} + +int zffu_offset_calc(u8 a0, u8 a1) +{ + return gUnknown_08375757[a0 - 1][a1 - 1]; +} + +#ifdef NONMATCHING +u8 state_to_direction(u8 a0, u8 a1, u8 a2) +{ + int zffuOffset; + if (a1 == 0 || a2 == 0 || a1 > 4 || a2 > 4) + { + return 0; + } + zffuOffset = zffu_offset_calc(a1, a2); + return gUnknown_08375767[a0 - 1][zffuOffset - 1]; +} +#else +__attribute__((naked)) +u8 state_to_direction(u8 a0, u8 a1, u8 a2) +{ + asm(".syntax unified\n\ + push {r4,lr}\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + adds r0, r1, 0\n\ + lsls r2, 24\n\ + lsrs r2, 24\n\ + cmp r1, 0\n\ + beq _08060BFC\n\ + cmp r2, 0\n\ + beq _08060BFC\n\ + cmp r1, 0x4\n\ + bhi _08060BFC\n\ + cmp r2, 0x4\n\ + bls _08060C00\n\ +_08060BFC:\n\ + movs r0, 0\n\ + b _08060C12\n\ +_08060C00:\n\ + adds r1, r2, 0\n\ + bl zffu_offset_calc\n\ + ldr r2, _08060C18 @ =gUnknown_08375767\n\ + lsls r1, r4, 2\n\ + subs r1, 0x5\n\ + adds r0, r1\n\ + adds r0, r2\n\ + ldrb r0, [r0]\n\ +_08060C12:\n\ + pop {r4}\n\ + pop {r1}\n\ + bx r1\n\ + .align 2, 0\n\ +_08060C18: .4byte gUnknown_08375767\n\ +.syntax divided\n"); +} +#endif -- cgit v1.2.3 From d44cefb06d4d2e160db450a27b74a739753d24dd Mon Sep 17 00:00:00 2001 From: scnorton Date: Tue, 23 May 2017 15:26:25 -0400 Subject: Some more field map object functions; asm/field_map_obj.s down to 7k lines --- src/field_map_obj.c | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index 108f9cc20..ae5d65ce2 100755 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -4085,6 +4085,7 @@ int zffu_offset_calc(u8 a0, u8 a1) u8 state_to_direction(u8 a0, u8 a1, u8 a2) { int zffuOffset; + asm_comment("For some reason, r2 is being backed up to r3 and restored ahead of the zffu call.") if (a1 == 0 || a2 == 0 || a1 > 4 || a2 > 4) { return 0; @@ -4134,3 +4135,106 @@ _08060C18: .4byte gUnknown_08375767\n\ .syntax divided\n"); } #endif + +void FieldObjectExecSpecialAnim(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (gUnknown_08375778[mapObject->mapobj_unk_1C][sprite->data2](mapObject, sprite)) + { + mapObject->mapobj_bit_7 = 1; + } +} + +bool8 FieldObjectExecRegularAnim(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (gUnknown_08375778[mapObject->mapobj_unk_1C][sprite->data2](mapObject, sprite)) + { + mapObject->mapobj_unk_1C = 0xFF; + sprite->data2 = 0; + return 1; + } + return 0; +} + +void FieldObjectSetRegularAnim(struct MapObject *mapObject, struct Sprite *sprite, u8 animId) +{ + mapObject->mapobj_unk_1C = animId; + sprite->data2 = 0; +} + +void an_look_any(struct MapObject *mapObject, struct Sprite *sprite, u8 direction) +{ + FieldObjectSetDirection(mapObject, direction); + npc_coords_shift_still(mapObject); + sub_805FE64(mapObject, sprite, get_go_image_anim_num(mapObject->mapobj_unk_18)); + sprite->animPaused = 1; + sprite->data2 = 1; +} + +u8 sub_8060CE0(struct MapObject *mapObject, struct Sprite *sprite) +{ + an_look_any(mapObject, sprite, DIR_SOUTH); + return 1; +} + +u8 sub_8060CF0(struct MapObject *mapObject, struct Sprite *sprite) +{ + an_look_any(mapObject, sprite, DIR_NORTH); + return 1; +} + +u8 sub_8060D00(struct MapObject *mapObject, struct Sprite *sprite) +{ + an_look_any(mapObject, sprite, DIR_WEST); + return 1; +} + +u8 sub_8060D10(struct MapObject *mapObject, struct Sprite *sprite) +{ + an_look_any(mapObject, sprite, DIR_EAST); + return 1; +} + +void sub_8060D20(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 a2) +{ + s16 x; + s16 y; + x = mapObject->coords2.x; + y = mapObject->coords2.y; + FieldObjectSetDirection(mapObject, direction); + MoveCoords(direction, &x, &y); + npc_coords_shift(mapObject, x, y); + oamt_npc_ministep_reset(sprite, direction, a2); + sprite->animPaused = 0; + mapObject->mapobj_bit_2 = 1; + sprite->data2 = 1; +} + +extern u8 (*const gUnknown_083759C0[5])(u8); + +void do_go_anim(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 a2) +{ + u8 (*functions[5])(u8); + memcpy(functions, gUnknown_083759C0, sizeof(gUnknown_083759C0)); + sub_8060D20(mapObject, sprite, direction, a2); + sub_805FE28(mapObject, sprite, functions[a2](mapObject->mapobj_unk_18)); +} + +void do_run_anim(struct MapObject *mapObject, struct Sprite *sprite, u8 direction) +{ + sub_8060D20(mapObject, sprite, direction, 1); + sub_805FE28(mapObject, sprite, get_run_image_anim_num(mapObject->mapobj_unk_18)); +} + +bool8 obj_npc_ministep(struct Sprite *); + +bool8 npc_obj_ministep_stop_on_arrival(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (obj_npc_ministep(sprite)) + { + npc_coords_shift_still(mapObject); + mapObject->mapobj_bit_3 = 1; + sprite->animPaused = 1; + return 1; + } + return 0; +} -- cgit v1.2.3 From d60a59a62738c9c56119b607f6a875556723d0bb Mon Sep 17 00:00:00 2001 From: scnorton Date: Tue, 23 May 2017 19:21:07 -0400 Subject: Another chunk of functions with similar (and, in some cases, identical) decompilation --- src/field_map_obj.c | 106 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index ae5d65ce2..cb68b0140 100755 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -4238,3 +4238,109 @@ bool8 npc_obj_ministep_stop_on_arrival(struct MapObject *mapObject, struct Sprit } return 0; } + +void sub_8060E68(struct MapObject *mapObject, struct Sprite *sprite, u8 direction) +{ + s16 x; + s16 y; + x = mapObject->coords2.x; + y = mapObject->coords2.y; + FieldObjectSetDirection(mapObject, direction); + MoveCoords(direction, &x, &y); + npc_coords_shift(mapObject, x, y); + sub_806467C(sprite, direction); + sprite->animPaused = 0; + mapObject->mapobj_bit_2 = 1; + sprite->data2 = 1; +} + +void sub_8060ED8(struct MapObject *mapObject, struct Sprite *sprite, u8 direction) +{ + sub_8060E68(mapObject, sprite, direction); + sub_805FE28(mapObject, sprite, get_go_image_anim_num(mapObject->mapobj_unk_18)); +} + +bool8 an_walk_any_2(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_806468C(sprite)) + { + npc_coords_shift_still(mapObject); + mapObject->mapobj_bit_3 = 1; + sprite->animPaused = 1; + return TRUE; + } + return FALSE; +} + +bool8 sub_8060F5C(struct MapObject *, struct Sprite *); + +bool8 sub_8060F3C(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8060ED8(mapObject, sprite, DIR_SOUTH); + return sub_8060F5C(mapObject, sprite); +} + +bool8 sub_8060F5C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (an_walk_any_2(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8060F9C(struct MapObject *, struct Sprite *); + +bool8 sub_8060F7C(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8060ED8(mapObject, sprite, DIR_NORTH); + return sub_8060F9C(mapObject, sprite); +} + +bool8 sub_8060F9C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (an_walk_any_2(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8060FDC(struct MapObject *, struct Sprite *); + +bool8 sub_8060FBC(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8060ED8(mapObject, sprite, DIR_WEST); + return sub_8060FDC(mapObject, sprite); +} + +bool8 sub_8060FDC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (an_walk_any_2(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_806101C(struct MapObject *, struct Sprite *); + +bool8 sub_8060FFC(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8060ED8(mapObject, sprite, DIR_EAST); + return sub_806101C(mapObject, sprite); +} + +bool8 sub_806101C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (an_walk_any_2(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + -- cgit v1.2.3 From 989316f66a7175ff8a25b10ceb9de51d6d0f7de7 Mon Sep 17 00:00:00 2001 From: scnorton Date: Tue, 23 May 2017 19:29:49 -0400 Subject: Yet another chunk of functions with similar (and, in some cases, identical) decompilation --- src/field_map_obj.c | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index cb68b0140..21dcb90bc 100755 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -4344,3 +4344,75 @@ bool8 sub_806101C(struct MapObject *mapObject, struct Sprite *sprite) return FALSE; } +bool8 sub_806105C(struct MapObject *, struct Sprite *); + +bool8 sub_806103C(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_SOUTH, 0); + return sub_806105C(mapObject, sprite); +} + +bool8 sub_806105C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_806109C(struct MapObject *, struct Sprite *); + +bool8 sub_806107C(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_NORTH, 0); + return sub_806109C(mapObject, sprite); +} + +bool8 sub_806109C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_80610DC(struct MapObject *, struct Sprite *); + +bool8 sub_80610BC(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_WEST, 0); + return sub_80610DC(mapObject, sprite); +} + +bool8 sub_80610DC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_806111C(struct MapObject *, struct Sprite *); + +bool8 sub_80610FC(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_EAST, 0); + return sub_806111C(mapObject, sprite); +} + +bool8 sub_806111C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + -- cgit v1.2.3 From 4a352535b994fa3c277d5c64e7f6ece4d5e94b5f Mon Sep 17 00:00:00 2001 From: yenatch Date: Tue, 23 May 2017 22:32:52 -0400 Subject: Fix ld warnings for undeclared externs. --- src/field_map_obj.c | 54 ++++++++++++++++++++++++++--------------------------- 1 file changed, 27 insertions(+), 27 deletions(-) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index 21dcb90bc..8c85e7b6d 100755 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -3709,7 +3709,7 @@ void meta_step(struct MapObject *mapObject, struct Sprite *sprite, u8 (*callback } -const u8 gUnknown_083756C8[5]; +extern const u8 gUnknown_083756C8[5]; u8 GetFaceDirectionAnimId(u8 index) { @@ -3722,7 +3722,7 @@ u8 GetFaceDirectionAnimId(u8 index) return directions[index]; } -const u8 gUnknown_083756CD[5]; +extern const u8 gUnknown_083756CD[5]; u8 GetSimpleGoAnimId(u8 index) { @@ -3735,7 +3735,7 @@ u8 GetSimpleGoAnimId(u8 index) return directions[index]; } -const u8 gUnknown_083756D2[5]; +extern const u8 gUnknown_083756D2[5]; u8 GetGoSpeed0AnimId(u8 index) { @@ -3748,7 +3748,7 @@ u8 GetGoSpeed0AnimId(u8 index) return directions[index]; } -const u8 gUnknown_083756D7[5]; +extern const u8 gUnknown_083756D7[5]; u8 sub_8060744(u8 index) { @@ -3761,7 +3761,7 @@ u8 sub_8060744(u8 index) return directions[index]; } -const u8 gUnknown_083756DC[5]; +extern const u8 gUnknown_083756DC[5]; u8 d2s_08064034(u8 index) { @@ -3774,7 +3774,7 @@ u8 d2s_08064034(u8 index) return directions[index]; } -const u8 gUnknown_083756E1[5]; +extern const u8 gUnknown_083756E1[5]; u8 sub_806079C(u8 index) { @@ -3787,7 +3787,7 @@ u8 sub_806079C(u8 index) return directions[index]; } -const u8 gUnknown_083756E6[5]; +extern const u8 gUnknown_083756E6[5]; u8 sub_80607C8(u8 index) { @@ -3800,7 +3800,7 @@ u8 sub_80607C8(u8 index) return directions[index]; } -const u8 gUnknown_083756EB[5]; +extern const u8 gUnknown_083756EB[5]; u8 sub_80607F4(u8 index) { @@ -3813,7 +3813,7 @@ u8 sub_80607F4(u8 index) return directions[index]; } -const u8 gUnknown_083756F0[5]; +extern const u8 gUnknown_083756F0[5]; u8 GetJumpLedgeAnimId(u8 index) { @@ -3826,7 +3826,7 @@ u8 GetJumpLedgeAnimId(u8 index) return directions[index]; } -const u8 gUnknown_083756F5[5]; +extern const u8 gUnknown_083756F5[5]; u8 sub_806084C(u8 index) { @@ -3839,7 +3839,7 @@ u8 sub_806084C(u8 index) return directions[index]; } -const u8 gUnknown_083756FA[5]; +extern const u8 gUnknown_083756FA[5]; u8 sub_8060878(u8 index) { @@ -3852,7 +3852,7 @@ u8 sub_8060878(u8 index) return directions[index]; } -const u8 gUnknown_083756FF[5]; +extern const u8 gUnknown_083756FF[5]; u8 sub_80608A4(u8 index) { @@ -3865,7 +3865,7 @@ u8 sub_80608A4(u8 index) return directions[index]; } -const u8 gUnknown_08375704[5]; +extern const u8 gUnknown_08375704[5]; u8 sub_80608D0(u8 index) { @@ -3878,7 +3878,7 @@ u8 sub_80608D0(u8 index) return directions[index]; } -const u8 gUnknown_08375709[5]; +extern const u8 gUnknown_08375709[5]; u8 GetStepInPlaceDelay32AnimId(u8 index) { @@ -3891,7 +3891,7 @@ u8 GetStepInPlaceDelay32AnimId(u8 index) return directions[index]; } -const u8 gUnknown_0837570E[5]; +extern const u8 gUnknown_0837570E[5]; u8 GetStepInPlaceDelay16AnimId(u8 index) { @@ -3904,7 +3904,7 @@ u8 GetStepInPlaceDelay16AnimId(u8 index) return directions[index]; } -const u8 gUnknown_08375713[5]; +extern const u8 gUnknown_08375713[5]; u8 GetStepInPlaceDelay8AnimId(u8 index) { @@ -3917,7 +3917,7 @@ u8 GetStepInPlaceDelay8AnimId(u8 index) return directions[index]; } -const u8 gUnknown_08375718[5]; +extern const u8 gUnknown_08375718[5]; u8 GetStepInPlaceDelay4AnimId(u8 index) { @@ -3935,7 +3935,7 @@ u8 FieldObjectFaceOppositeDirection(struct MapObject *mapObject, u8 direction) return FieldObjectSetSpecialAnim(mapObject, GetFaceDirectionAnimId(GetOppositeDirection(direction))); } -const u8 gUnknown_0837571D[5]; +extern const u8 gUnknown_0837571D[5]; u8 sub_80609D8(u8 index) { @@ -3948,7 +3948,7 @@ u8 sub_80609D8(u8 index) return directions[index]; } -const u8 gUnknown_08375722[5]; +extern const u8 gUnknown_08375722[5]; u8 sub_8060A04(u8 index) { @@ -3961,7 +3961,7 @@ u8 sub_8060A04(u8 index) return directions[index]; } -const u8 gUnknown_08375727[5]; +extern const u8 gUnknown_08375727[5]; u8 sub_8060A30(u8 index) { @@ -3974,7 +3974,7 @@ u8 sub_8060A30(u8 index) return directions[index]; } -const u8 gUnknown_0837572C[5]; +extern const u8 gUnknown_0837572C[5]; u8 sub_8060A5C(u8 index) { @@ -3987,7 +3987,7 @@ u8 sub_8060A5C(u8 index) return directions[index]; } -const u8 gUnknown_08375731[5]; +extern const u8 gUnknown_08375731[5]; u8 sub_8060A88(u8 index) { @@ -4000,7 +4000,7 @@ u8 sub_8060A88(u8 index) return directions[index]; } -const u8 gUnknown_08375736[5]; +extern const u8 gUnknown_08375736[5]; u8 sub_8060AB4(u8 index) { @@ -4013,7 +4013,7 @@ u8 sub_8060AB4(u8 index) return directions[index]; } -const u8 gUnknown_0837573B[5]; +extern const u8 gUnknown_0837573B[5]; u8 sub_8060AE0(u8 index) { @@ -4026,7 +4026,7 @@ u8 sub_8060AE0(u8 index) return directions[index]; } -const u8 gUnknown_08375740[5]; +extern const u8 gUnknown_08375740[5]; u8 sub_8060B0C(u8 index) { @@ -4039,7 +4039,7 @@ u8 sub_8060B0C(u8 index) return directions[index]; } -const u8 gUnknown_08375745[5]; +extern const u8 gUnknown_08375745[5]; u8 sub_8060B38(u8 index) { @@ -4052,7 +4052,7 @@ u8 sub_8060B38(u8 index) return directions[index]; } -const u8 gUnknown_0837574A[5]; +extern const u8 gUnknown_0837574A[5]; u8 sub_8060B64(u8 index) { -- cgit v1.2.3 From 6bfb9af365db91947ee65ceaa15ad0c2dba4147d Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 24 May 2017 15:59:43 -0400 Subject: sub_806113C --- src/field_map_obj.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index 8c85e7b6d..7e245410c 100755 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -4416,3 +4416,22 @@ bool8 sub_806111C(struct MapObject *mapObject, struct Sprite *sprite) return FALSE; } +extern const s16 gUnknown_08375A34[3]; + +void sub_806113C(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 a4, u8 a5) +{ + s16 vSPp4[3]; + s16 x; + s16 y; + memcpy(vSPp4, gUnknown_08375A34, sizeof gUnknown_08375A34); + x = 0; + y = 0; + FieldObjectSetDirection(mapObject, direction); + sub_8060320(direction, &x, &y, vSPp4[a4], vSPp4[a4]); + npc_coords_shift(mapObject, mapObject->coords2.x + x, mapObject->coords2.y + y); + sub_80646E4(sprite, direction, a4, a5); + sprite->data2 = 1; + sprite->animPaused = 0; + mapObject->mapobj_bit_2 = 1; + mapObject->mapobj_bit_4 = 1; +} -- cgit v1.2.3 From 3a1e42f8f1929d5c74ee931de511d7f481db9756 Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 24 May 2017 16:12:44 -0400 Subject: maybe_shadow_1 --- src/field_map_obj.c | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index 7e245410c..f8fd87c64 100755 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -4435,3 +4435,10 @@ void sub_806113C(struct MapObject *mapObject, struct Sprite *sprite, u8 directio mapObject->mapobj_bit_2 = 1; mapObject->mapobj_bit_4 = 1; } + +void maybe_shadow_1(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 a4, u8 a5) +{ + sub_806113C(mapObject, sprite, direction, a4, a5); + sub_805FE28(mapObject, sprite, get_go_image_anim_num(mapObject->mapobj_unk_18)); + DoShadowFieldEffect(mapObject); +} -- cgit v1.2.3 From 7f47c3b8eeece77252c0564c4677e8432caf33ed Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 24 May 2017 16:48:48 -0400 Subject: sub_806123C --- src/field_map_obj.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index f8fd87c64..65ef99b3b 100755 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -4417,6 +4417,7 @@ bool8 sub_806111C(struct MapObject *mapObject, struct Sprite *sprite) } extern const s16 gUnknown_08375A34[3]; +extern const s16 gUnknown_08375A3A[3]; void sub_806113C(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 a4, u8 a5) { @@ -4442,3 +4443,29 @@ void maybe_shadow_1(struct MapObject *mapObject, struct Sprite *sprite, u8 direc sub_805FE28(mapObject, sprite, get_go_image_anim_num(mapObject->mapobj_unk_18)); DoShadowFieldEffect(mapObject); } + +u8 sub_806123C(struct MapObject *mapObject, struct Sprite *sprite, u8 (*const callback)(struct Sprite *)) +{ + s16 vSPp4[3]; + s16 x; + s16 y; + u8 retval; + memcpy(vSPp4, gUnknown_08375A3A, sizeof gUnknown_08375A3A); + retval = callback(sprite); + if (retval == 1 && vSPp4[sprite->data4] != 0) + { + x = 0; + y = 0; + sub_8060320(mapObject->placeholder18, &x, &y, vSPp4[sprite->data4], vSPp4[sprite->data4]); + npc_coords_shift(mapObject, mapObject->coords2.x + x, mapObject->coords2.y + y); + mapObject->mapobj_bit_2 = 1; + mapObject->mapobj_bit_4 = 1; + } else if (retval == 0xff) + { + npc_coords_shift_still(mapObject); + mapObject->mapobj_bit_3 = 1; + mapObject->mapobj_bit_5 = 1; + sprite->animPaused = 1; + } + return retval; +} -- cgit v1.2.3 From 0cb48e9bb08b4efd157748d7e2446c12450b9b46 Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 24 May 2017 17:10:40 -0400 Subject: A couple more functions in FMO --- src/field_map_obj.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index 65ef99b3b..eedb74033 100755 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -4469,3 +4469,68 @@ u8 sub_806123C(struct MapObject *mapObject, struct Sprite *sprite, u8 (*const ca } return retval; } + +u8 sub_8061300(struct MapObject *mapObject, struct Sprite *sprite) +{ + return sub_806123C(mapObject, sprite, sub_8064704); +} + +u8 sub_8061314(struct MapObject *mapObject, struct Sprite *sprite) +{ + return sub_806123C(mapObject, sprite, sub_806478C); +} + +bool8 sub_8061328(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061300(mapObject, sprite) == 0xFF) + { + return TRUE; + } + return FALSE; +} + +bool8 sub_8061340(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061314(mapObject, sprite) == 0xFF) + { + return TRUE; + } + return FALSE; +} + +bool8 sub_8061358(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 retval; + + retval = sub_8061300(mapObject, sprite); + if (retval != 1) + { + if (retval == 0xFF) + { + return TRUE; + } + return FALSE; + } + FieldObjectSetDirection(mapObject, GetOppositeDirection(mapObject->placeholder18)); + sub_805FE64(mapObject, sprite, get_go_image_anim_num(mapObject->mapobj_unk_18)); + return FALSE; +} + +bool8 sub_80613D4(struct MapObject *, struct Sprite *); + +bool8 sub_80613A8(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_SOUTH, 2, 0); + return sub_80613D4(mapObject, sprite); +} + +bool8 sub_80613D4(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} -- cgit v1.2.3 From 82ad1f63c4b0516e2c8e0975c8bfd750480b9e3d Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 24 May 2017 17:26:58 -0400 Subject: FMO under 6k lines --- src/field_map_obj.c | 101 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index eedb74033..ddf76fef6 100755 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -4517,6 +4517,9 @@ bool8 sub_8061358(struct MapObject *mapObject, struct Sprite *sprite) } bool8 sub_80613D4(struct MapObject *, struct Sprite *); +bool8 sub_806142C(struct MapObject *, struct Sprite *); +bool8 sub_8061484(struct MapObject *, struct Sprite *); +bool8 sub_80614DC(struct MapObject *, struct Sprite *); bool8 sub_80613A8(struct MapObject *mapObject, struct Sprite *sprite) { @@ -4534,3 +4537,101 @@ bool8 sub_80613D4(struct MapObject *mapObject, struct Sprite *sprite) } return FALSE; } + +bool8 sub_8061400(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_NORTH, 2, 0); + return sub_806142C(mapObject, sprite); +} + +bool8 sub_806142C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8061458(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_WEST, 2, 0); + return sub_8061484(mapObject, sprite); +} + +bool8 sub_8061484(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_80614B0(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_EAST, 2, 0); + return sub_80614DC(mapObject, sprite); +} + +bool8 sub_80614DC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +void sub_8061508(struct Sprite *sprite, u16 duration) +{ + sprite->data2 = 1; + sprite->data3 = duration; +} + +bool8 sub_8061510(struct MapObject *mapObject, struct Sprite *sprite) +{ + sprite->data3--; + if (!sprite->data3) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_806152C(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8061508(sprite, 1); + return sub_8061510(mapObject, sprite); +} + +bool8 sub_806154C(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8061508(sprite, 2); + return sub_8061510(mapObject, sprite); +} + +bool8 sub_806156C(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8061508(sprite, 4); + return sub_8061510(mapObject, sprite); +} + +bool8 sub_806158C(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8061508(sprite, 8); + return sub_8061510(mapObject, sprite); +} + +bool8 sub_80615AC(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8061508(sprite, 16); + return sub_8061510(mapObject, sprite); +} -- cgit v1.2.3 From 4e3874a3febde4ba5f8c247004b4f84bf098bc9c Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 24 May 2017 20:19:30 -0400 Subject: Swiss cheese to put off these functions for later --- src/field_map_obj.c | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 74 insertions(+), 4 deletions(-) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index ddf76fef6..ede9b2901 100755 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -3182,9 +3182,79 @@ u8 sub_805F2B4(struct MapObject *mapObject, struct Sprite *sprite) return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); }; -void sub_805F2FC(struct Sprite *sprite); +fieldmap_object_cb(sub_805F2FC, sub_805F320, gUnknown_08375588); + +u8 mss_npc_reset_oampriv3_1_unk2_unk3(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + if (mapObject->mapobj_unk_21 == 0) + { + mapObject->mapobj_unk_21 = player_get_direction_lower_nybble(); + } + sprite->data1 = 1; + return 1; +} + +extern u8 (*const gUnknown_08375594[])(struct MapObject *, struct Sprite *, u8, u8); + +u8 sub_805F364(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1C == 0xFF || gPlayerAvatar.running1 == 2) + { + return 0; + } + return gUnknown_08375594[player_get_x22()](mapObject, sprite, player_get_direction_upper_nybble(), 0); +} + +u8 sub_805F3C4(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite)) + { + mapObject->mapobj_bit_1 = 0; + sprite->data1 = 1; + } + return 0; +} + +#ifdef NONMATCHING + +u8 sub_805F3EC(struct MapObject *mapObject, struct Sprite *sprite, u8 a2, u8 *a3(u8)) +{ + return 0; +} + +u8 sub_805F3F0(struct MapObject *mapObject, struct Sprite *sprite, u8 a2, u8 *a3(u8)) +{ + int direction; + direction = state_to_direction(gUnknown_0836DC09[mapObject->animPattern], mapObject->mapobj_unk_21, a2); + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(direction)); + mapObject->mapobj_bit_1 = 1; + sprite->data1 = 2; + return 1; +} + +u8 sub_805F438(struct MapObject *mapObject, struct Sprite *sprite, u8 a2, u8 *a3(u8)) +{ + s16 x; + s16 y; + int direction; + direction = state_to_direction(gUnknown_0836DC09[mapObject->animPattern], mapObject->mapobj_unk_21, a2); + FieldObjectMoveDestCoords(mapObject, direction, &x, &y); + FieldObjectSetRegularAnim(mapObject, sprite, GetGoSpeed0AnimId(direction)); + if (!npc_block_way(mapObject, x, y, direction) || (a3 != NULL && !a3(MapGridGetMetatileBehaviorAt(x, y)))) + { + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(direction)); + } + mapObject->mapobj_bit_1 = 1; + sprite->data1 = 2; + return 1; +} +#endif + void FieldObjectCB_TreeDisguise(struct Sprite *sprite); void FieldObjectCB_MountainDisguise(struct Sprite *sprite); + +asm(".section .text_fmocb2_c\n"); void sub_805F8E0(struct Sprite *sprite); void FieldObjectCB_Hidden1(struct Sprite *sprite); void sub_805FB20(struct Sprite *sprite); @@ -4082,10 +4152,10 @@ int zffu_offset_calc(u8 a0, u8 a1) } #ifdef NONMATCHING -u8 state_to_direction(u8 a0, u8 a1, u8 a2) +int state_to_direction(u8 a0, u8 a1, u8 a2) { int zffuOffset; - asm_comment("For some reason, r2 is being backed up to r3 and restored ahead of the zffu call.") + asm_comment("For some reason, r2 is being backed up to r3 and restored ahead of the zffu call."); if (a1 == 0 || a2 == 0 || a1 > 4 || a2 > 4) { return 0; @@ -4095,7 +4165,7 @@ u8 state_to_direction(u8 a0, u8 a1, u8 a2) } #else __attribute__((naked)) -u8 state_to_direction(u8 a0, u8 a1, u8 a2) +int state_to_direction(u8 a0, u8 a1, u8 a2) { asm(".syntax unified\n\ push {r4,lr}\n\ -- cgit v1.2.3 From fc8cc3767f0e424fbc590e24852a1ca73f89d9a9 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 25 May 2017 08:46:38 -0400 Subject: A couple more map object callbacks --- src/field_map_obj.c | 93 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 86 insertions(+), 7 deletions(-) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index ede9b2901..1982affac 100755 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -13,6 +13,7 @@ #include "rng.h" #include "sprite.h" #include "field_camera.h" +#include "metatile_behavior.h" extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[36]; @@ -3195,7 +3196,7 @@ u8 mss_npc_reset_oampriv3_1_unk2_unk3(struct MapObject *mapObject, struct Sprite return 1; } -extern u8 (*const gUnknown_08375594[])(struct MapObject *, struct Sprite *, u8, u8); +extern u8 (*const gUnknown_08375594[])(struct MapObject *, struct Sprite *, u8, bool8 (*const)(u8)); u8 sub_805F364(struct MapObject *mapObject, struct Sprite *sprite) { @@ -3203,7 +3204,7 @@ u8 sub_805F364(struct MapObject *mapObject, struct Sprite *sprite) { return 0; } - return gUnknown_08375594[player_get_x22()](mapObject, sprite, player_get_direction_upper_nybble(), 0); + return gUnknown_08375594[player_get_x22()](mapObject, sprite, player_get_direction_upper_nybble(), NULL); } u8 sub_805F3C4(struct MapObject *mapObject, struct Sprite *sprite) @@ -3251,12 +3252,90 @@ u8 sub_805F438(struct MapObject *mapObject, struct Sprite *sprite, u8 a2, u8 *a3 } #endif -void FieldObjectCB_TreeDisguise(struct Sprite *sprite); -void FieldObjectCB_MountainDisguise(struct Sprite *sprite); - asm(".section .text_fmocb2_c\n"); -void sub_805F8E0(struct Sprite *sprite); -void FieldObjectCB_Hidden1(struct Sprite *sprite); + +fieldmap_object_cb(sub_805F8E0, sub_805F904, gUnknown_083755C0); + +u8 mss_08062EA4(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1C == 0xFF || gPlayerAvatar.running1 == 2) + { + return 0; + } + return gUnknown_08375594[player_get_x22()](mapObject, sprite, player_get_direction_upper_nybble(), MetatileBehavior_IsPokeGrass); +} + +u8 sub_805F9F8(struct MapObject *, struct Sprite *); + +void FieldObjectCB_TreeDisguise(struct Sprite *sprite) +{ + struct MapObject *mapObject; + mapObject = &gMapObjects[sprite->data0]; + if (mapObject->mapobj_unk_21 == 0 || (mapObject->mapobj_unk_21 == 1 && sprite->data7 == 0)) + { + FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gUnknown_0202FF84[0], (u8 *)&gUnknown_0202FF84[1], (u8 *)&gUnknown_0202FF84[2]); + mapObject->mapobj_unk_1A = FieldEffectStart(0x1c); + mapObject->mapobj_unk_21 = 1; + sprite->data7 ++; + } + meta_step(&gMapObjects[sprite->data0], sprite, sub_805F9F8); +} + +u8 sub_805F9F8(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + return 0; +} + +void FieldObjectCB_MountainDisguise(struct Sprite *sprite) +{ + struct MapObject *mapObject; + mapObject = &gMapObjects[sprite->data0]; + if (mapObject->mapobj_unk_21 == 0 || (mapObject->mapobj_unk_21 == 1 && sprite->data7 == 0)) + { + FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gUnknown_0202FF84[0], (u8 *)&gUnknown_0202FF84[1], (u8 *)&gUnknown_0202FF84[2]); + mapObject->mapobj_unk_1A = FieldEffectStart(0x1d); + mapObject->mapobj_unk_21 = 1; + sprite->data7 ++; + } + meta_step(&gMapObjects[sprite->data0], sprite, sub_805F9F8); +} + +u8 sub_805FAD8(struct MapObject *mapObject, struct Sprite *sprite); +extern u8 (*const gUnknown_083755CC[])(struct MapObject *, struct Sprite *); + +void FieldObjectCB_Hidden1(struct Sprite *sprite) +{ + if (sprite->data7 == 0) + { + gMapObjects[sprite->data0].mapobj_bit_26 = 1; + sprite->subspriteMode = 2; + sprite->oam.priority = 3; + sprite->data7 ++; + } + meta_step(&gMapObjects[sprite->data0], sprite, sub_805FAD8); +} + +u8 sub_805FAD8(struct MapObject *mapObject, struct Sprite *sprite) +{ + return gUnknown_083755CC[sprite->data1](mapObject, sprite); +} + +u8 sub_805FAF8(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + return 0; +} + +u8 sub_805FB04(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite)) + { + sprite->data1 = 0; + } + return 0; +} + void sub_805FB20(struct Sprite *sprite); void sub_805FB90(struct Sprite *sprite); void sub_805FC00(struct Sprite *sprite); -- cgit v1.2.3 From 9ad379c53b64ad7592490f10c324d21064e8863b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 25 May 2017 10:56:39 -0400 Subject: Finish field map object callbacks (except functions known or predicted not to match) --- src/field_map_obj.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 57 insertions(+), 5 deletions(-) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index 1982affac..4fdec1919 100755 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -3336,12 +3336,64 @@ u8 sub_805FB04(struct MapObject *mapObject, struct Sprite *sprite) return 0; } -void sub_805FB20(struct Sprite *sprite); -void sub_805FB90(struct Sprite *sprite); -void sub_805FC00(struct Sprite *sprite); -void sub_805FC70(struct Sprite *sprite); +fieldmap_object_cb(sub_805FB20, sub_805FB44, gUnknown_083755D0); + +u8 sub_805FB64(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + FieldObjectSetRegularAnim(mapObject, sprite, GetStepInPlaceDelay16AnimId(mapObject->mapobj_unk_18)); + sprite->data1 = 1; + return 1; +} + +fieldmap_object_cb(sub_805FB90, sub_805FBB4, gUnknown_083755D8); -asm(".section .text_b\n"); +u8 sub_805FBD4(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + FieldObjectSetRegularAnim(mapObject, sprite, GetStepInPlaceDelay8AnimId(mapObject->mapobj_unk_18)); + sprite->data1 = 1; + return 1; +} + +fieldmap_object_cb(sub_805FC00, sub_805FC24, gUnknown_083755E0); + +u8 sub_805FC44(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + FieldObjectSetRegularAnim(mapObject, sprite, GetStepInPlaceDelay4AnimId(mapObject->mapobj_unk_18)); + sprite->data1 = 1; + return 1; +} + +fieldmap_object_cb(sub_805FC70, sub_805FC94, gUnknown_083755E8); + +u8 sub_805FCB4(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); + mapObject->mapobj_bit_13 = 1; + sprite->data1 = 1; + return 1; +} + +u8 sub_805FCE8(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite)) + { + sprite->data1 = 2; + return 1; + } + return 0; +} + +u8 sub_805FD08(struct MapObject *mapObject, struct Sprite *sprite) +{ + mapObject->mapobj_bit_1 = 0; + return 0; +} + +void sub_805FC70(struct Sprite *sprite); void npc_reset(struct MapObject *mapObject, struct Sprite *sprite) { -- cgit v1.2.3 From f41eba1ffe419c43727732a4aa665c25467e7db2 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 25 May 2017 11:01:50 -0400 Subject: Another group of directional functions --- src/field_map_obj.c | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index 4fdec1919..3d49465da 100755 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -4836,3 +4836,69 @@ bool8 sub_80615AC(struct MapObject *mapObject, struct Sprite *sprite) sub_8061508(sprite, 16); return sub_8061510(mapObject, sprite); } + +bool8 sub_80615EC(struct MapObject *mapObject, struct Sprite *sprite); +bool8 sub_806162C(struct MapObject *mapObject, struct Sprite *sprite); +bool8 sub_806166C(struct MapObject *mapObject, struct Sprite *sprite); +bool8 sub_80616AC(struct MapObject *mapObject, struct Sprite *sprite); + +bool8 sub_80615CC(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_SOUTH, 1); + return sub_80615EC(mapObject, sprite); +} + +bool8 sub_80615EC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} +bool8 sub_806160C(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_NORTH, 1); + return sub_806162C(mapObject, sprite); +} + +bool8 sub_806162C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} +bool8 sub_806164C(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_WEST, 1); + return sub_806166C(mapObject, sprite); +} + +bool8 sub_806166C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} +bool8 sub_806168C(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_EAST, 1); + return sub_80616AC(mapObject, sprite); +} + +bool8 sub_80616AC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} -- cgit v1.2.3 From 65ce0eeb8a83c570679a66e768c55cc45991b4ec Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 25 May 2017 11:33:48 -0400 Subject: Another chunk of functions with similar templates --- src/field_map_obj.c | 126 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index 3d49465da..f70237c34 100755 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -4902,3 +4902,129 @@ bool8 sub_80616AC(struct MapObject *mapObject, struct Sprite *sprite) } return FALSE; } + +void sub_80616CC(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 animId, u16 duration) +{ + FieldObjectSetDirection(mapObject, direction); + sub_805FE28(mapObject, sprite, animId); + sprite->animPaused = 0; + sprite->data2 = 1; + sprite->data3 = duration; +} + +bool8 sub_8061714(struct MapObject *mapObject, struct Sprite *sprite) +{ + sprite->data3--; + if (sprite->data3 == 0) + { + sprite->data2 = 2; + sprite->animPaused = 1; + return TRUE; + } + return FALSE; +} + +bool8 sub_806173C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sprite->data3 & 1) + { + sprite->animDelayCounter++; + } + return sub_8061714(mapObject, sprite); +} + +bool8 sub_8061778(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_SOUTH, get_go_image_anim_num(DIR_SOUTH), 32); + return sub_806173C(mapObject, sprite); +} + +bool8 sub_80617B0(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_NORTH, get_go_image_anim_num(DIR_NORTH), 32); + return sub_806173C(mapObject, sprite); +} + +bool8 sub_80617E8(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_WEST, get_go_image_anim_num(DIR_WEST), 32); + return sub_806173C(mapObject, sprite); +} + +bool8 sub_8061820(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_EAST, get_go_image_anim_num(DIR_EAST), 32); + return sub_806173C(mapObject, sprite); +} + +bool8 sub_8061858(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_SOUTH, get_go_image_anim_num(DIR_SOUTH), 16); + return sub_8061714(mapObject, sprite); +} + +bool8 sub_8061890(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_NORTH, get_go_image_anim_num(DIR_NORTH), 16); + return sub_8061714(mapObject, sprite); +} + +bool8 sub_80618C8(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_WEST, get_go_image_anim_num(DIR_WEST), 16); + return sub_8061714(mapObject, sprite); +} + +bool8 sub_8061900(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_EAST, get_go_image_anim_num(DIR_EAST), 16); + return sub_8061714(mapObject, sprite); +} + +bool8 sub_8061938(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_SOUTH, get_go_fast_image_anim_num(DIR_SOUTH), 8); + return sub_8061714(mapObject, sprite); +} + +bool8 sub_8061970(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_NORTH, get_go_fast_image_anim_num(DIR_NORTH), 8); + return sub_8061714(mapObject, sprite); +} + +bool8 sub_80619A8(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_WEST, get_go_fast_image_anim_num(DIR_WEST), 8); + return sub_8061714(mapObject, sprite); +} + +bool8 sub_80619E0(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_EAST, get_go_fast_image_anim_num(DIR_EAST), 8); + return sub_8061714(mapObject, sprite); +} + +bool8 sub_8061A18(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_SOUTH, get_go_faster_image_anim_num(DIR_SOUTH), 4); + return sub_8061714(mapObject, sprite); +} + +bool8 sub_8061A50(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_NORTH, get_go_faster_image_anim_num(DIR_NORTH), 4); + return sub_8061714(mapObject, sprite); +} + +bool8 sub_8061A88(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_WEST, get_go_faster_image_anim_num(DIR_WEST), 4); + return sub_8061714(mapObject, sprite); +} + +bool8 sub_8061AC0(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_EAST, get_go_faster_image_anim_num(DIR_EAST), 4); + return sub_8061714(mapObject, sprite); +} -- cgit v1.2.3 From ae24650fbd7814f28d50365881ff388ba9b576b6 Mon Sep 17 00:00:00 2001 From: scnorton Date: Thu, 25 May 2017 16:00:29 -0400 Subject: Decompile another group of functions --- src/field_map_obj.c | 668 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 668 insertions(+) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index f70237c34..0aba02e1a 100755 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -14,6 +14,7 @@ #include "sprite.h" #include "field_camera.h" #include "metatile_behavior.h" +#include "map_constants.h" extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[36]; @@ -5028,3 +5029,670 @@ bool8 sub_8061AC0(struct MapObject *mapObject, struct Sprite *sprite) sub_80616CC(mapObject, sprite, DIR_EAST, get_go_faster_image_anim_num(DIR_EAST), 4); return sub_8061714(mapObject, sprite); } + +bool8 sub_8061B18(struct MapObject *, struct Sprite *); + +bool8 sub_8061AF8(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_SOUTH, 2); + return sub_8061B18(mapObject, sprite); +} + +bool8 sub_8061B18(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + + +bool8 sub_8061B58(struct MapObject *, struct Sprite *); + +bool8 sub_8061B38(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_NORTH, 2); + return sub_8061B58(mapObject, sprite); +} + +bool8 sub_8061B58(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + + +bool8 sub_8061B98(struct MapObject *, struct Sprite *); + +bool8 sub_8061B78(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_WEST, 2); + return sub_8061B98(mapObject, sprite); +} + +bool8 sub_8061B98(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + + +bool8 sub_8061BD8(struct MapObject *, struct Sprite *); + +bool8 sub_8061BB8(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_EAST, 2); + return sub_8061BD8(mapObject, sprite); +} + +bool8 sub_8061BD8(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8061C18(struct MapObject *, struct Sprite *); + +bool8 sub_8061BF8(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_SOUTH, 3); + return sub_8061C18(mapObject, sprite); +} + +bool8 sub_8061C18(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8061C58(struct MapObject *, struct Sprite *); + +bool8 sub_8061C38(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_NORTH, 3); + return sub_8061C58(mapObject, sprite); +} + +bool8 sub_8061C58(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + + +bool8 sub_8061C98(struct MapObject *, struct Sprite *); + +bool8 sub_8061C78(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_WEST, 3); + return sub_8061C98(mapObject, sprite); +} + +bool8 sub_8061C98(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + + +bool8 sub_8061CD8(struct MapObject *, struct Sprite *); + +bool8 sub_8061CB8(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_EAST, 3); + return sub_8061CD8(mapObject, sprite); +} + +bool8 sub_8061CD8(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8061D18(struct MapObject *, struct Sprite *); + +bool8 sub_8061CF8(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_SOUTH, 4); + return sub_8061D18(mapObject, sprite); +} + +bool8 sub_8061D18(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8061D58(struct MapObject *, struct Sprite *); + +bool8 sub_8061D38(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_NORTH, 4); + return sub_8061D58(mapObject, sprite); +} + +bool8 sub_8061D58(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + + +bool8 sub_8061D98(struct MapObject *, struct Sprite *); + +bool8 sub_8061D78(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_WEST, 4); + return sub_8061D98(mapObject, sprite); +} + +bool8 sub_8061D98(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + + +bool8 sub_8061DD8(struct MapObject *, struct Sprite *); + +bool8 sub_8061DB8(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_EAST, 4); + return sub_8061DD8(mapObject, sprite); +} + +bool8 sub_8061DD8(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8061E18(struct MapObject *, struct Sprite *); + +bool8 do_run_south_anim(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_run_anim(mapObject, sprite, DIR_SOUTH); + return sub_8061E18(mapObject, sprite); +} + +bool8 sub_8061E18(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8061E58(struct MapObject *, struct Sprite *); + +bool8 do_run_north_anim(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_run_anim(mapObject, sprite, DIR_NORTH); + return sub_8061E58(mapObject, sprite); +} + +bool8 sub_8061E58(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8061E98(struct MapObject *, struct Sprite *); + +bool8 do_run_west_anim(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_run_anim(mapObject, sprite, DIR_WEST); + return sub_8061E98(mapObject, sprite); +} + +bool8 sub_8061E98(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8061ED8(struct MapObject *, struct Sprite *); + +bool8 do_run_east_anim(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_run_anim(mapObject, sprite, DIR_EAST); + return sub_8061ED8(mapObject, sprite); +} + +bool8 sub_8061ED8(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +void npc_set_direction_and_anim__an_proceed(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 animNum) +{ + obj_anim_image_set_and_seek(sprite, animNum, 0); + FieldObjectSetDirection(mapObject, direction); + sprite->data2 = 1; +} + +u8 sub_8061F24(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_set_direction_and_anim__an_proceed(mapObject, sprite, mapObject->placeholder18, sprite->animNum); + return 0; +} + +bool8 sub_8064864(struct Sprite *); + +bool8 sub_8061F3C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8064864(sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +void sub_8061F5C(struct MapObject *mapObject, struct Sprite *sprite, u8 direction) +{ + sub_806113C(mapObject, sprite, direction, 1, 0); + StartSpriteAnim(sprite, sub_805FD88(direction)); +} + +bool8 sub_8061FB0(struct MapObject *, struct Sprite *); + +bool8 sub_8061F90(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8061F5C(mapObject, sprite, DIR_SOUTH); + return sub_8061FB0(mapObject, sprite); +} + +bool8 sub_8061FB0(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061340(mapObject, sprite)) + { + sprite->data2 = 2; + mapObject->mapobj_bit_5 = 0; + return TRUE; + } + return FALSE; +} + +bool8 sub_8061FF8(struct MapObject *, struct Sprite *); + +bool8 sub_8061FD8(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8061F5C(mapObject, sprite, DIR_NORTH); + return sub_8061FF8(mapObject, sprite); +} + +bool8 sub_8061FF8(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061340(mapObject, sprite)) + { + sprite->data2 = 2; + mapObject->mapobj_bit_5 = 0; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062040(struct MapObject *, struct Sprite *); + +bool8 sub_8062020(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8061F5C(mapObject, sprite, DIR_WEST); + return sub_8062040(mapObject, sprite); +} + +bool8 sub_8062040(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061340(mapObject, sprite)) + { + sprite->data2 = 2; + mapObject->mapobj_bit_5 = 0; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062088(struct MapObject *, struct Sprite *); + +bool8 sub_8062068(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8061F5C(mapObject, sprite, DIR_EAST); + return sub_8062088(mapObject, sprite); +} + +bool8 sub_8062088(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061340(mapObject, sprite)) + { + sprite->data2 = 2; + mapObject->mapobj_bit_5 = 0; + return TRUE; + } + return FALSE; +} + +bool8 sub_80620B0(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 objectId; + if (!TryGetFieldObjectIdByLocalIdAndMap(0xFF, MAP_GROUP_PETALBURG_CITY, MAP_ID_PETALBURG_CITY, &objectId)) + { + an_look_any(mapObject, sprite, sub_805FE90(mapObject->coords2.x, mapObject->coords2.y, gMapObjects[objectId].coords2.x, gMapObjects[objectId].coords2.y)); + } + sprite->data2 = 1; + return TRUE; +} + +bool8 sub_806210C(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 objectId; + if (!TryGetFieldObjectIdByLocalIdAndMap(0xFF, MAP_GROUP_PETALBURG_CITY, MAP_ID_PETALBURG_CITY, &objectId)) + { + an_look_any(mapObject, sprite, GetOppositeDirection(sub_805FE90(mapObject->coords2.x, mapObject->coords2.y, gMapObjects[objectId].coords2.x, gMapObjects[objectId].coords2.y))); + } + sprite->data2 = 1; + return TRUE; +} + +bool8 sub_8062170(struct MapObject *mapObject, struct Sprite *sprite) +{ + mapObject->mapobj_bit_9 = 1; + sprite->data2 = 1; + return TRUE; +} + +bool8 sub_8062180(struct MapObject *mapObject, struct Sprite *sprite) +{ + mapObject->mapobj_bit_9 = 0; + sprite->data2 = 1; + return TRUE; +} + +bool8 sub_80621BC(struct MapObject *mapObject, struct Sprite *sprite); + +bool8 sub_8062190(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_SOUTH, 1, 2); + return sub_80621BC(mapObject, sprite); +} + +bool8 sub_80621BC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062214(struct MapObject *mapObject, struct Sprite *sprite); + +bool8 sub_80621E8(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_NORTH, 1, 2); + return sub_8062214(mapObject, sprite); +} + +bool8 sub_8062214(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_806226C(struct MapObject *mapObject, struct Sprite *sprite); + +bool8 sub_8062240(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_WEST, 1, 2); + return sub_806226C(mapObject, sprite); +} + +bool8 sub_806226C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_80622C4(struct MapObject *mapObject, struct Sprite *sprite); + +bool8 sub_8062298(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_EAST, 1, 2); + return sub_80622C4(mapObject, sprite); +} + +bool8 sub_80622C4(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_806231C(struct MapObject *mapObject, struct Sprite *sprite); + +bool8 sub_80622F0(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_SOUTH, 0, 0); + return sub_806231C(mapObject, sprite); +} + +bool8 sub_806231C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062374(struct MapObject *mapObject, struct Sprite *sprite); + +bool8 sub_8062348(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_NORTH, 0, 0); + return sub_8062374(mapObject, sprite); +} + +bool8 sub_8062374(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_80623CC(struct MapObject *mapObject, struct Sprite *sprite); + +bool8 sub_80623A0(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_WEST, 0, 0); + return sub_80623CC(mapObject, sprite); +} + +bool8 sub_80623CC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062424(struct MapObject *mapObject, struct Sprite *sprite); + +bool8 sub_80623F8(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_EAST, 0, 0); + return sub_8062424(mapObject, sprite); +} + +bool8 sub_8062424(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_806247C(struct MapObject *mapObject, struct Sprite *sprite); + +bool8 sub_8062450(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_SOUTH, 0, 2); + return sub_806247C(mapObject, sprite); +} + +bool8 sub_806247C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061358(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_80624D4(struct MapObject *mapObject, struct Sprite *sprite); + +bool8 sub_80624A8(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_NORTH, 0, 2); + return sub_80624D4(mapObject, sprite); +} + +bool8 sub_80624D4(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061358(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_806252C(struct MapObject *mapObject, struct Sprite *sprite); + +bool8 sub_8062500(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_WEST, 0, 2); + return sub_806252C(mapObject, sprite); +} + +bool8 sub_806252C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061358(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062584(struct MapObject *mapObject, struct Sprite *sprite); + +bool8 sub_8062558(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_EAST, 0, 2); + return sub_8062584(mapObject, sprite); +} + +bool8 sub_8062584(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061358(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + -- cgit v1.2.3 From ad0aac31f1d19717ff71c9eab6a404ef546e146f Mon Sep 17 00:00:00 2001 From: scnorton Date: Thu, 25 May 2017 18:39:51 -0400 Subject: A few more functions in asm/field_map_obj.s --- src/field_map_obj.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 55 insertions(+), 2 deletions(-) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index 0aba02e1a..aa2169677 100755 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -5332,10 +5332,10 @@ void npc_set_direction_and_anim__an_proceed(struct MapObject *mapObject, struct sprite->data2 = 1; } -u8 sub_8061F24(struct MapObject *mapObject, struct Sprite *sprite) +bool8 sub_8061F24(struct MapObject *mapObject, struct Sprite *sprite) { npc_set_direction_and_anim__an_proceed(mapObject, sprite, mapObject->placeholder18, sprite->animNum); - return 0; + return FALSE; } bool8 sub_8064864(struct Sprite *); @@ -5696,3 +5696,56 @@ bool8 sub_8062584(struct MapObject *mapObject, struct Sprite *sprite) return FALSE; } +bool8 sub_80625B0(struct MapObject *mapObject, struct Sprite *sprite) +{ + an_look_any(mapObject, sprite, gUnknown_0836DC09[mapObject->animPattern]); + return TRUE; +} + +bool8 sub_80625C8(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_SOUTH, 0x14); + return FALSE; +} + +bool8 sub_80625D8(struct MapObject *mapObject, struct Sprite *sprite) +{ + mapObject->mapobj_bit_25 = 0; + sprite->data2 = 1; + return TRUE; +} + +bool8 sub_80625E8(struct MapObject *mapObject, struct Sprite *sprite) +{ + mapObject->mapobj_bit_25 = 1; + sprite->data2 = 1; + return TRUE; +} + +bool8 sub_80625F8(struct MapObject *mapObject, struct Sprite *sprite) +{ + mapObject->mapobj_bit_12 = 1; + sprite->data2 = 1; + return TRUE; +} + +bool8 sub_8062608(struct MapObject *mapObject, struct Sprite *sprite) +{ + mapObject->mapobj_bit_12 = GetFieldObjectGraphicsInfo(mapObject->graphicsId)->inanimate; + sprite->data2 = 1; + return TRUE; +} + +bool8 sub_8062634(struct MapObject *mapObject, struct Sprite *sprite) +{ + mapObject->mapobj_bit_13 = 1; + sprite->data2 = 1; + return TRUE; +} + +bool8 sub_8062644(struct MapObject *mapObject, struct Sprite *sprite) +{ + mapObject->mapobj_bit_13 = 0; + sprite->data2 = 1; + return TRUE; +} -- cgit v1.2.3 From a349844cf1dd164cb309438b53deff4cf1fc8b0a Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 25 May 2017 21:19:46 -0400 Subject: Another set of fns --- src/field_map_obj.c | 166 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 166 insertions(+) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index aa2169677..d12e4cfe1 100755 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -15,6 +15,8 @@ #include "field_camera.h" #include "metatile_behavior.h" #include "map_constants.h" +#include "trainer_see.h" +#include "field_effect_helpers.h" extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[36]; @@ -5749,3 +5751,167 @@ bool8 sub_8062644(struct MapObject *mapObject, struct Sprite *sprite) sprite->data2 = 1; return TRUE; } + +bool8 do_exclamation_mark_bubble_1(struct MapObject *mapObject, struct Sprite *sprite) +{ + FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gUnknown_0202FF84[0], (u8 *)&gUnknown_0202FF84[1], (u8 *)&gUnknown_0202FF84[2]); + FieldEffectStart(0x0); + sprite->data2 = 1; + return TRUE; +} + +bool8 do_exclamation_mark_bubble_2(struct MapObject *mapObject, struct Sprite *sprite) +{ + FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gUnknown_0202FF84[0], (u8 *)&gUnknown_0202FF84[1], (u8 *)&gUnknown_0202FF84[2]); + FieldEffectStart(0x21); + sprite->data2 = 1; + return TRUE; +} + +bool8 do_heart_bubble(struct MapObject *mapObject, struct Sprite *sprite) +{ + FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gUnknown_0202FF84[0], (u8 *)&gUnknown_0202FF84[1], (u8 *)&gUnknown_0202FF84[2]); + FieldEffectStart(0x2e); + sprite->data2 = 1; + return TRUE; +} + +bool8 sub_8062704(struct MapObject *, struct Sprite *); + +bool8 sub_80626C0(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (mapObject->animPattern == 0x3F) + { + sub_8084794(mapObject); + return FALSE; + } + else if (mapObject->animPattern != 0x39 && mapObject->animPattern != 0x3A) + { + sprite->data2 = 2; + return TRUE; + } + else + { + sub_812869C(mapObject); + sprite->data2 = 1; + return sub_8062704(mapObject, sprite); + } +} + +bool8 sub_8062704(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_81286C4(mapObject)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062724(struct MapObject *mapObject, struct Sprite *sprite) +{ + obj_anim_image_set_and_seek(sprite, 1, 0); + sprite->data2 = 1; + return FALSE; +} + +bool8 sub_8062740(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8064864(sprite)) + { + sub_8064820(sprite, 0x20); + sprite->data2 = 2; + } + return FALSE; +} + +bool8 sub_8062764(struct MapObject *mapObject, struct Sprite *sprite) +{ + mapObject->mapobj_bit_13 ^= 1; + if (sub_8064824(sprite)) + { + mapObject->mapobj_bit_13 = 1; + sprite->data2 = 3; + } + return FALSE; +} + +bool8 sub_80627A0(struct MapObject *mapObject, struct Sprite *sprite) +{ + obj_anim_image_set_and_seek(sprite, 1, 0); + sprite->data2 = 1; + return FALSE; +} + +bool8 sub_80627BC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8064864(sprite)) + { + sub_8064820(sprite, 0x20); + sprite->data2 = 2; + } + return FALSE; +} + +bool8 sub_80627E0(struct MapObject *mapObject, struct Sprite *sprite) +{ + mapObject->mapobj_bit_13 ^= 1; + if (sub_8064824(sprite)) + { + mapObject->mapobj_bit_13 = 1; + sprite->data2 = 3; + } + return FALSE; +} + +bool8 sub_806281C(struct MapObject *mapObject, struct Sprite *sprite) +{ + mapObject->mapobj_bit_26 = 1; + sprite->data2 = 1; + return TRUE; +} + +bool8 sub_806282C(struct MapObject *mapObject, struct Sprite *sprite) +{ + mapObject->mapobj_bit_26 = 0; + sprite->data2 = 1; + return TRUE; +} + +bool8 sub_806283C(struct MapObject *mapObject, struct Sprite *sprite) +{ + sprite->oam.affineMode = 3; + InitSpriteAffineAnim(sprite); + sprite->affineAnimPaused = 1; + sprite->subspriteMode = 0; + return TRUE; +} + +bool8 sub_806286C(struct MapObject *mapObject, struct Sprite *sprite) +{ + FreeOamMatrix(sprite->oam.matrixNum); + sprite->oam.affineMode = 0; + CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode); + return TRUE; +} + +bool8 sub_80628D0(struct MapObject *, struct Sprite *); + +bool8 sub_806289C(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8060ED8(mapObject, sprite, DIR_SOUTH); + sprite->affineAnimPaused = 0; + StartSpriteAffineAnimIfDifferent(sprite, 0); + return sub_80628D0(mapObject, sprite); +} + +bool8 sub_80628D0(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (an_walk_any_2(mapObject, sprite)) + { + sprite->affineAnimPaused = 1; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} -- cgit v1.2.3 From 65cca21dddc7ae26f96c7757504b2b39765d9eb0 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 26 May 2017 12:04:13 -0400 Subject: Finish decompiling functions which can reasonably be decompiled in field_map_obj.s --- src/field_map_obj.c | 835 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 828 insertions(+), 7 deletions(-) (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index d12e4cfe1..eaad98cb0 100755 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -26,7 +26,7 @@ extern void ClearPlayerAvatarInfo(void); extern void npc_load_two_palettes__no_record(u16, u8); extern void npc_load_two_palettes__and_record(u16, u8); extern void sub_8060388(s16, s16, s16 *, s16 *); -extern void sub_80634D0(struct MapObject *, struct Sprite *); +void sub_80634D0(struct MapObject *, struct Sprite *); extern void pal_patch_for_npc(u16, u16); extern void CameraObjectReset1(void); @@ -3886,7 +3886,7 @@ u8 FieldObjectGetSpecialAnim(struct MapObject *mapObject) extern void DoGroundEffects_OnSpawn(struct MapObject *mapObject, struct Sprite *sprite); extern void DoGroundEffects_OnBeginStep(struct MapObject *mapObject, struct Sprite *sprite); extern void DoGroundEffects_OnFinishStep(struct MapObject *mapObject, struct Sprite *sprite); -extern void npc_obj_transfer_image_anim_pause_flag(struct MapObject *mapObject, struct Sprite *sprite); +void npc_obj_transfer_image_anim_pause_flag(struct MapObject *mapObject, struct Sprite *sprite); void sub_80634A0(struct MapObject *mapObject, struct Sprite *sprite); void FieldObjectExecSpecialAnim(struct MapObject *mapObject, struct Sprite *sprite); void FieldObjectUpdateSubpriority(struct MapObject *mapObject, struct Sprite *sprite); @@ -4398,7 +4398,7 @@ u8 sub_8060D10(struct MapObject *mapObject, struct Sprite *sprite) return 1; } -void sub_8060D20(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 a2) +void sub_8060D20(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 a3) { s16 x; s16 y; @@ -4407,7 +4407,7 @@ void sub_8060D20(struct MapObject *mapObject, struct Sprite *sprite, u8 directio FieldObjectSetDirection(mapObject, direction); MoveCoords(direction, &x, &y); npc_coords_shift(mapObject, x, y); - oamt_npc_ministep_reset(sprite, direction, a2); + oamt_npc_ministep_reset(sprite, direction, a3); sprite->animPaused = 0; mapObject->mapobj_bit_2 = 1; sprite->data2 = 1; @@ -4415,12 +4415,12 @@ void sub_8060D20(struct MapObject *mapObject, struct Sprite *sprite, u8 directio extern u8 (*const gUnknown_083759C0[5])(u8); -void do_go_anim(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 a2) +void do_go_anim(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 a3) { u8 (*functions[5])(u8); memcpy(functions, gUnknown_083759C0, sizeof(gUnknown_083759C0)); - sub_8060D20(mapObject, sprite, direction, a2); - sub_805FE28(mapObject, sprite, functions[a2](mapObject->mapobj_unk_18)); + sub_8060D20(mapObject, sprite, direction, a3); + sub_805FE28(mapObject, sprite, functions[a3](mapObject->mapobj_unk_18)); } void do_run_anim(struct MapObject *mapObject, struct Sprite *sprite, u8 direction) @@ -5915,3 +5915,824 @@ bool8 sub_80628D0(struct MapObject *mapObject, struct Sprite *sprite) } return FALSE; } + +bool8 sub_8062930(struct MapObject *, struct Sprite *); + +bool8 sub_80628FC(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8060ED8(mapObject, sprite, DIR_SOUTH); + sprite->affineAnimPaused = 0; + ChangeSpriteAffineAnimIfDifferent(sprite, 1); + return sub_8062930(mapObject, sprite); +} + +bool8 sub_8062930(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (an_walk_any_2(mapObject, sprite)) + { + sprite->affineAnimPaused = 1; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +void sub_806295C(struct MapObject *mapObject, struct Sprite *sprite, u8 direction) +{ + FieldObjectSetDirection(mapObject, direction); + npc_coords_shift_still(mapObject); + sub_805FE64(mapObject, sprite, sub_805FDD8(direction)); + sprite->animPaused = 1; + sprite->data2 = 1; +} + +bool8 sub_806299C(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_806295C(mapObject, sprite, DIR_SOUTH); + return TRUE; +} + +bool8 sub_80629AC(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_806295C(mapObject, sprite, DIR_NORTH); + return TRUE; +} + +bool8 sub_80629BC(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_806295C(mapObject, sprite, DIR_WEST); + return TRUE; +} + +bool8 sub_80629CC(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_806295C(mapObject, sprite, DIR_EAST); + return TRUE; +} + +bool8 sub_80629DC(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_SOUTH, sub_805FD98(DIR_SOUTH)); + return FALSE; +} + +bool8 sub_8062A00(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_NORTH, sub_805FD98(DIR_NORTH)); + return FALSE; +} + +bool8 sub_8062A24(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_WEST, sub_805FD98(DIR_WEST)); + return FALSE; +} + +bool8 sub_8062A48(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_EAST, sub_805FD98(DIR_EAST)); + return FALSE; +} + +bool8 sub_8062A6C(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_SOUTH, sub_805FDB8(DIR_SOUTH)); + return FALSE; +} + +bool8 sub_8062A90(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_NORTH, sub_805FDB8(DIR_NORTH)); + return FALSE; +} + +bool8 sub_8062AB4(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_WEST, sub_805FDB8(DIR_WEST)); + return FALSE; +} + +bool8 sub_8062AD8(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_EAST, sub_805FDB8(DIR_EAST)); + return FALSE; +} + +bool8 sub_8062AFC(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_SOUTH, sub_805FDC8(DIR_SOUTH)); + return FALSE; +} + +bool8 sub_8062B20(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_NORTH, sub_805FDC8(DIR_NORTH)); + return FALSE; +} + +bool8 sub_8062B44(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_WEST, sub_805FDC8(DIR_WEST)); + return FALSE; +} + +bool8 sub_8062B68(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_EAST, sub_805FDC8(DIR_EAST)); + return FALSE; +} + +void sub_8062B8C(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 a3, u8 a4) +{ + sub_806113C(mapObject, sprite, direction, a3, a4); + StartSpriteAnimIfDifferent(sprite, sub_805FD98(direction)); + DoShadowFieldEffect(mapObject); +} + +bool8 sub_8062BFC(struct MapObject *, struct Sprite *); + +bool8 sub_8062BD0(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8062B8C(mapObject, sprite, DIR_SOUTH, 0, 1); + return sub_8062BFC(mapObject, sprite); +} + +bool8 sub_8062BFC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062C54(struct MapObject *, struct Sprite *); + +bool8 sub_8062C28(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8062B8C(mapObject, sprite, DIR_NORTH, 0, 1); + return sub_8062C54(mapObject, sprite); +} + +bool8 sub_8062C54(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062CAC(struct MapObject *, struct Sprite *); + +bool8 sub_8062C80(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8062B8C(mapObject, sprite, DIR_WEST, 0, 1); + return sub_8062CAC(mapObject, sprite); +} + +bool8 sub_8062CAC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062D04(struct MapObject *, struct Sprite *); + +bool8 sub_8062CD8(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8062B8C(mapObject, sprite, DIR_EAST, 0, 1); + return sub_8062D04(mapObject, sprite); +} + +bool8 sub_8062D04(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062D5C(struct MapObject *, struct Sprite *); + +bool8 sub_8062D30(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8062B8C(mapObject, sprite, DIR_SOUTH, 1, 1); + return sub_8062D5C(mapObject, sprite); +} + +bool8 sub_8062D5C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062DB4(struct MapObject *, struct Sprite *); + +bool8 sub_8062D88(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8062B8C(mapObject, sprite, DIR_NORTH, 1, 1); + return sub_8062DB4(mapObject, sprite); +} + +bool8 sub_8062DB4(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062E0C(struct MapObject *, struct Sprite *); + +bool8 sub_8062DE0(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8062B8C(mapObject, sprite, DIR_WEST, 1, 1); + return sub_8062E0C(mapObject, sprite); +} + +bool8 sub_8062E0C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062E64(struct MapObject *, struct Sprite *); + +bool8 sub_8062E38(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8062B8C(mapObject, sprite, DIR_EAST, 1, 1); + return sub_8062E64(mapObject, sprite); +} + +bool8 sub_8062E64(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062EBC(struct MapObject *, struct Sprite *); + +bool8 sub_8062E90(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8062B8C(mapObject, sprite, DIR_SOUTH, 2, 0); + return sub_8062EBC(mapObject, sprite); +} + +bool8 sub_8062EBC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062F14(struct MapObject *, struct Sprite *); + +bool8 sub_8062EE8(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8062B8C(mapObject, sprite, DIR_NORTH, 2, 0); + return sub_8062F14(mapObject, sprite); +} + +bool8 sub_8062F14(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062F6C(struct MapObject *, struct Sprite *); + +bool8 sub_8062F40(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8062B8C(mapObject, sprite, DIR_WEST, 2, 0); + return sub_8062F6C(mapObject, sprite); +} + +bool8 sub_8062F6C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062FC4(struct MapObject *, struct Sprite *); + +bool8 sub_8062F98(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8062B8C(mapObject, sprite, DIR_EAST, 2, 0); + return sub_8062FC4(mapObject, sprite); +} + +bool8 sub_8062FC4(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062FF0(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_SOUTH, sub_805FDD8(DIR_SOUTH), 8); + return sub_8061714(mapObject, sprite); +} + +bool8 sub_8063028(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_NORTH, sub_805FDD8(DIR_NORTH), 8); + return sub_8061714(mapObject, sprite); +} + +bool8 sub_8063060(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_WEST, sub_805FDD8(DIR_WEST), 8); + return sub_8061714(mapObject, sprite); +} + +bool8 sub_8063098(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_EAST, sub_805FDD8(DIR_EAST), 8); + return sub_8061714(mapObject, sprite); +} + +void sub_80630D0(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 a3) +{ + sub_8060D20(mapObject, sprite, direction, a3); + StartSpriteAnim(sprite, sub_805FD98(mapObject->mapobj_unk_18)); + SeekSpriteAnim(sprite, 0); +} + +bool8 sub_8063128(struct MapObject *, struct Sprite *); + +bool8 sub_8063108(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80630D0(mapObject, sprite, DIR_SOUTH, 1); + return sub_8063128(mapObject, sprite); +} + +bool8 sub_8063128(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8063168(struct MapObject *, struct Sprite *); + +bool8 sub_8063148(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80630D0(mapObject, sprite, DIR_NORTH, 1); + return sub_8063168(mapObject, sprite); +} + +bool8 sub_8063168(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_80631A8(struct MapObject *, struct Sprite *); + +bool8 sub_8063188(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80630D0(mapObject, sprite, DIR_WEST, 1); + return sub_80631A8(mapObject, sprite); +} + +bool8 sub_80631A8(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_80631E8(struct MapObject *, struct Sprite *); + +bool8 sub_80631C8(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80630D0(mapObject, sprite, DIR_EAST, 1); + return sub_80631E8(mapObject, sprite); +} + +bool8 sub_80631E8(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +void sub_8063208(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 a3) +{ + sub_8060D20(mapObject, sprite, direction, a3); + sub_805FE28(mapObject, sprite, sub_805FDD8(mapObject->mapobj_unk_18)); +} + +bool8 sub_8063258(struct MapObject *, struct Sprite *); + +bool8 sub_8063238(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8063208(mapObject, sprite, DIR_SOUTH, 1); + return sub_8063258(mapObject, sprite); +} + +bool8 sub_8063258(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8063298(struct MapObject *, struct Sprite *); + +bool8 sub_8063278(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8063208(mapObject, sprite, DIR_NORTH, 1); + return sub_8063298(mapObject, sprite); +} + +bool8 sub_8063298(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_80632D8(struct MapObject *, struct Sprite *); + +bool8 sub_80632B8(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8063208(mapObject, sprite, DIR_WEST, 1); + return sub_80632D8(mapObject, sprite); +} + +bool8 sub_80632D8(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8063318(struct MapObject *, struct Sprite *); + +bool8 sub_80632F8(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8063208(mapObject, sprite, DIR_EAST, 1); + return sub_8063318(mapObject, sprite); +} + +bool8 sub_8063318(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +void sub_8063338(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 a3) +{ + sub_8060D20(mapObject, sprite, direction, a3); + StartSpriteAnim(sprite, sub_805FDB8(mapObject->mapobj_unk_18)); + SeekSpriteAnim(sprite, 0); +} + +bool8 sub_8063390(struct MapObject *, struct Sprite *); + +bool8 sub_8063370(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8063338(mapObject, sprite, DIR_SOUTH, 1); + return sub_8063390(mapObject, sprite); +} + +bool8 sub_8063390(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_80633D0(struct MapObject *, struct Sprite *); + +bool8 sub_80633B0(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8063338(mapObject, sprite, DIR_NORTH, 1); + return sub_80633D0(mapObject, sprite); +} + +bool8 sub_80633D0(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8063410(struct MapObject *, struct Sprite *); + +bool8 sub_80633F0(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8063338(mapObject, sprite, DIR_WEST, 1); + return sub_8063410(mapObject, sprite); +} + +bool8 sub_8063410(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8063450(struct MapObject *, struct Sprite *); + +bool8 sub_8063430(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8063338(mapObject, sprite, DIR_EAST, 1); + return sub_8063450(mapObject, sprite); +} + +bool8 sub_8063450(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8063470(struct MapObject *mapObject, struct Sprite *sprite) +{ + return TRUE; +} + +bool8 sub_8063474(struct MapObject *mapObject, struct Sprite *sprite) +{ + sprite->animPaused = 1; + return TRUE; +} + +void npc_obj_transfer_image_anim_pause_flag(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (mapObject->mapobj_bit_10) + { + sprite->animPaused = 1; + } +} + +void sub_80634A0(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (mapObject->mapobj_bit_11) + { + sprite->animPaused = 0; + mapObject->mapobj_bit_10 = 0; + mapObject->mapobj_bit_11 = 0; + } +} + +void sub_80634E8(struct MapObject *, struct Sprite *); +void npc_update_obj_anim_flag(struct MapObject *, struct Sprite *); + +void sub_80634D0(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80634E8(mapObject, sprite); + npc_update_obj_anim_flag(mapObject, sprite); +} + +#ifdef NONMATCHING +void sub_80634E8(struct MapObject *mapObject, struct Sprite *sprite) +{ + u16 x; + u16 y; + s16 x2; + s16 y2; + const struct MapObjectGraphicsInfo *graphicsInfo; + mapObject->mapobj_bit_14 = 0; + graphicsInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId); + if (sprite->coordOffsetEnabled) + { + x = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX + gSpriteCoordOffsetX; + y = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY; + } else + { + x = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX; + y = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY; + } + x2 = graphicsInfo->width + x; // offending line + y2 = graphicsInfo->height + y; // similarly offending line + if ((s16)x >= 0x100 || x2 < -0x10) + { + mapObject->mapobj_bit_14 = 1; + } + if ((s16)y >= 0xB0 || y2 < -0x10) + { + mapObject->mapobj_bit_14 = 1; + } +} +#else +__attribute__((naked)) +void sub_80634E8(struct MapObject *mapObject, struct Sprite *sprite) { + asm(".syntax unified\n\ + push {r4-r6,lr}\n\ + adds r5, r0, 0\n\ + adds r4, r1, 0\n\ + ldrb r1, [r5, 0x1]\n\ + movs r0, 0x41\n\ + negs r0, r0\n\ + ands r0, r1\n\ + strb r0, [r5, 0x1]\n\ + ldrb r0, [r5, 0x5]\n\ + bl GetFieldObjectGraphicsInfo\n\ + adds r6, r0, 0\n\ + adds r0, r4, 0\n\ + adds r0, 0x3E\n\ + ldrb r1, [r0]\n\ + movs r0, 0x2\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0806354C\n\ + ldrh r1, [r4, 0x24]\n\ + ldrh r0, [r4, 0x20]\n\ + adds r1, r0\n\ + adds r0, r4, 0\n\ + adds r0, 0x28\n\ + ldrb r0, [r0]\n\ + lsls r0, 24\n\ + asrs r0, 24\n\ + ldr r2, _08063544 @ =gSpriteCoordOffsetX\n\ + adds r0, r1\n\ + ldrh r2, [r2]\n\ + adds r0, r2\n\ + lsls r0, 16\n\ + lsrs r3, r0, 16\n\ + ldrh r1, [r4, 0x26]\n\ + ldrh r0, [r4, 0x22]\n\ + adds r1, r0\n\ + adds r0, r4, 0\n\ + adds r0, 0x29\n\ + ldrb r0, [r0]\n\ + lsls r0, 24\n\ + asrs r0, 24\n\ + ldr r2, _08063548 @ =gSpriteCoordOffsetY\n\ + adds r0, r1\n\ + ldrh r2, [r2]\n\ + adds r0, r2\n\ + b _08063574\n\ + .align 2, 0\n\ +_08063544: .4byte gSpriteCoordOffsetX\n\ +_08063548: .4byte gSpriteCoordOffsetY\n\ +_0806354C:\n\ + ldrh r1, [r4, 0x24]\n\ + ldrh r0, [r4, 0x20]\n\ + adds r1, r0\n\ + adds r0, r4, 0\n\ + adds r0, 0x28\n\ + ldrb r0, [r0]\n\ + lsls r0, 24\n\ + asrs r0, 24\n\ + adds r0, r1\n\ + lsls r0, 16\n\ + lsrs r3, r0, 16\n\ + ldrh r1, [r4, 0x26]\n\ + ldrh r0, [r4, 0x22]\n\ + adds r1, r0\n\ + adds r0, r4, 0\n\ + adds r0, 0x29\n\ + ldrb r0, [r0]\n\ + lsls r0, 24\n\ + asrs r0, 24\n\ + adds r0, r1\n\ +_08063574:\n\ + lsls r0, 16\n\ + lsrs r2, r0, 16\n\ + ldrh r0, [r6, 0x8]\n\ + adds r0, r3\n\ + lsls r0, 16\n\ + lsrs r1, r0, 16\n\ + ldrh r0, [r6, 0xA]\n\ + adds r0, r2\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + lsls r0, r3, 16\n\ + asrs r0, 16\n\ + cmp r0, 0xFF\n\ + bgt _0806359C\n\ + lsls r0, r1, 16\n\ + asrs r0, 16\n\ + movs r1, 0x10\n\ + negs r1, r1\n\ + cmp r0, r1\n\ + bge _080635A4\n\ +_0806359C:\n\ + ldrb r0, [r5, 0x1]\n\ + movs r1, 0x40\n\ + orrs r0, r1\n\ + strb r0, [r5, 0x1]\n\ +_080635A4:\n\ + lsls r0, r2, 16\n\ + asrs r0, 16\n\ + cmp r0, 0xAF\n\ + bgt _080635B8\n\ + lsls r0, r4, 16\n\ + asrs r0, 16\n\ + movs r1, 0x10\n\ + negs r1, r1\n\ + cmp r0, r1\n\ + bge _080635C0\n\ +_080635B8:\n\ + ldrb r0, [r5, 0x1]\n\ + movs r1, 0x40\n\ + orrs r0, r1\n\ + strb r0, [r5, 0x1]\n\ +_080635C0:\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0\n\ +.syntax divided\n"); +} +#endif + +void npc_update_obj_anim_flag(struct MapObject *mapObject, struct Sprite *sprite) +{ + sprite->invisible = 0; + if (mapObject->mapobj_bit_13 || mapObject->mapobj_bit_14) + { + sprite->invisible = 1; + } +} -- cgit v1.2.3 From 21efe53b6805a0dcc5dcba7d1f78e9a7e7bd93c4 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 26 May 2017 12:43:22 -0400 Subject: Make C and ASM files non-executable --- src/field_map_obj.c | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 src/field_map_obj.c (limited to 'src/field_map_obj.c') diff --git a/src/field_map_obj.c b/src/field_map_obj.c old mode 100755 new mode 100644 -- cgit v1.2.3