diff options
author | sceptillion <33798691+sceptillion@users.noreply.github.com> | 2017-11-19 02:21:18 -0800 |
---|---|---|
committer | sceptillion <33798691+sceptillion@users.noreply.github.com> | 2017-11-19 02:21:18 -0800 |
commit | f3f3af1027ca1c0459e077f4dc98391bbbe821e4 (patch) | |
tree | 43189b3a970aed5e709f197a8d50853ea182507d | |
parent | 98c1ea205b7d700ae466acbed9910fa1d55eb94c (diff) |
decompile fldeff_berrytree
-rwxr-xr-x | asm/fldeff_berrytree.s | 164 | ||||
-rw-r--r-- | include/field_player_avatar.h | 4 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/field/fldeff_berrytree.c | 56 |
4 files changed, 59 insertions, 167 deletions
diff --git a/asm/fldeff_berrytree.s b/asm/fldeff_berrytree.s deleted file mode 100755 index a36ba0519..000000000 --- a/asm/fldeff_berrytree.s +++ /dev/null @@ -1,164 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start Task_WateringBerryTreeAnim_0 -Task_WateringBerryTreeAnim_0: @ 80C70A0 - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080C70B4 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldr r0, _080C70B8 @ =Task_WateringBerryTreeAnim_1 - str r0, [r1] - bx lr - .align 2, 0 -_080C70B4: .4byte gTasks -_080C70B8: .4byte Task_WateringBerryTreeAnim_1 - thumb_func_end Task_WateringBerryTreeAnim_0 - - thumb_func_start Task_WateringBerryTreeAnim_1 -Task_WateringBerryTreeAnim_1: @ 80C70BC - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, _080C7120 @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _080C7124 @ =gMapObjects - adds r4, r0, r1 - adds r0, r4, 0 - bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive - lsls r0, 24 - cmp r0, 0 - beq _080C70E8 - adds r0, r4, 0 - bl FieldObjectClearAnimIfSpecialAnimFinished - lsls r0, 24 - cmp r0, 0 - beq _080C711A -_080C70E8: - bl player_get_direction_lower_nybble - lsls r0, 24 - lsrs r0, 24 - bl sub_8059D08 - bl player_get_direction_lower_nybble - lsls r0, 24 - lsrs r0, 24 - bl GetStepInPlaceDelay16AnimId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl FieldObjectSetSpecialAnim - ldr r1, _080C7128 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - ldr r1, _080C712C @ =Task_WateringBerryTreeAnim_2 - str r1, [r0] -_080C711A: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080C7120: .4byte gPlayerAvatar -_080C7124: .4byte gMapObjects -_080C7128: .4byte gTasks -_080C712C: .4byte Task_WateringBerryTreeAnim_2 - thumb_func_end Task_WateringBerryTreeAnim_1 - - thumb_func_start Task_WateringBerryTreeAnim_2 -Task_WateringBerryTreeAnim_2: @ 80C7130 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080C7184 @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _080C7188 @ =gMapObjects - adds r5, r0, r1 - adds r0, r5, 0 - bl FieldObjectClearAnimIfSpecialAnimFinished - lsls r0, 24 - cmp r0, 0 - beq _080C7194 - ldr r1, _080C718C @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r2, r0, r1 - ldrh r0, [r2, 0xA] - adds r1, r0, 0x1 - strh r1, [r2, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x9 - bgt _080C7190 - bl player_get_direction_lower_nybble - lsls r0, 24 - lsrs r0, 24 - bl GetStepInPlaceDelay16AnimId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r5, 0 - bl FieldObjectSetSpecialAnim - b _080C7194 - .align 2, 0 -_080C7184: .4byte gPlayerAvatar -_080C7188: .4byte gMapObjects -_080C718C: .4byte gTasks -_080C7190: - ldr r0, _080C719C @ =Task_WateringBerryTreeAnim_3 - str r0, [r2] -_080C7194: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080C719C: .4byte Task_WateringBerryTreeAnim_3 - thumb_func_end Task_WateringBerryTreeAnim_2 - - thumb_func_start Task_WateringBerryTreeAnim_3 -Task_WateringBerryTreeAnim_3: @ 80C71A0 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl sub_80597D0 - lsls r0, 24 - lsrs r0, 24 - bl SetPlayerAvatarTransitionFlags - adds r0, r4, 0 - bl DestroyTask - bl EnableBothScriptContexts - pop {r4} - pop {r0} - bx r0 - thumb_func_end Task_WateringBerryTreeAnim_3 - - thumb_func_start DoWateringBerryTreeAnim -DoWateringBerryTreeAnim: @ 80C71C4 - push {lr} - ldr r0, _080C71D4 @ =Task_WateringBerryTreeAnim_0 - movs r1, 0x50 - bl CreateTask - pop {r0} - bx r0 - .align 2, 0 -_080C71D4: .4byte Task_WateringBerryTreeAnim_0 - thumb_func_end DoWateringBerryTreeAnim - - .align 2, 0 @ Don't pad with nop. diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h index 250ed8469..1b25aad24 100644 --- a/include/field_player_avatar.h +++ b/include/field_player_avatar.h @@ -64,7 +64,7 @@ u8 player_get_direction_lower_nybble(void); u8 player_get_direction_upper_nybble(void); u8 PlayerGetZCoord(void); u8 TestPlayerAvatarFlags(u8); -// sub_80597D0 +u8 sub_80597D0(void); u8 GetPlayerAvatarObjectId(void); void sub_80597E8(void); void sub_80597F4(void); @@ -83,7 +83,7 @@ void sub_8059B88(u8); void sub_8059BF4(void); // sub_8059C3C void sub_8059C94(u8); -// sub_8059D08 +void sub_8059D08(u8); u8 sub_8059E84(struct Task *task, struct MapObject *b, struct MapObject *c); u8 sub_8059EA4(struct Task *task, struct MapObject *b, struct MapObject *c); u8 sub_8059F40(struct Task *task, struct MapObject *b, struct MapObject *c); diff --git a/ld_script.txt b/ld_script.txt index 4a3c224d2..0842c74e0 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -163,7 +163,7 @@ SECTIONS { src/field/fldeff_secret_base_pc.o(.text); asm/fldeff_decoration.o(.text); src/field/fldeff_poison.o(.text); - asm/fldeff_berrytree.o(.text); + src/field/fldeff_berrytree.o(.text); src/field/fldeff_recordmixing.o(.text); src/field/field_special_scene.o(.text); src/field/rotating_gate.o(.text); diff --git a/src/field/fldeff_berrytree.c b/src/field/fldeff_berrytree.c new file mode 100644 index 000000000..0763c0314 --- /dev/null +++ b/src/field/fldeff_berrytree.c @@ -0,0 +1,56 @@ +#include "global.h" +#include "field_map_obj.h" +#include "field_player_avatar.h" +#include "script.h" + +static void Task_WateringBerryTreeAnim_0(u8); +static void Task_WateringBerryTreeAnim_1(u8); +static void Task_WateringBerryTreeAnim_2(u8); +static void Task_WateringBerryTreeAnim_3(u8); + +static void Task_WateringBerryTreeAnim_0(u8 taskId) +{ + gTasks[taskId].func = Task_WateringBerryTreeAnim_1; +} + +static void Task_WateringBerryTreeAnim_1(u8 taskId) +{ + struct MapObject *mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject) + || FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) + { + sub_8059D08(player_get_direction_lower_nybble()); + FieldObjectSetSpecialAnim(mapObject, GetStepInPlaceDelay16AnimId(player_get_direction_lower_nybble())); + gTasks[taskId].func = Task_WateringBerryTreeAnim_2; + } +} + +static void Task_WateringBerryTreeAnim_2(u8 taskId) +{ + struct MapObject *mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) + { + s16 value = gTasks[taskId].data[1]++; + + if (value < 10) + { + FieldObjectSetSpecialAnim(mapObject, GetStepInPlaceDelay16AnimId(player_get_direction_lower_nybble())); + } + else + { + gTasks[taskId].func = Task_WateringBerryTreeAnim_3; + } + } +} + +static void Task_WateringBerryTreeAnim_3(u8 taskId) +{ + SetPlayerAvatarTransitionFlags(sub_80597D0()); + DestroyTask(taskId); + EnableBothScriptContexts(); +} + +void DoWateringBerryTreeAnim(void) +{ + CreateTask(Task_WateringBerryTreeAnim_0, 80); +} |