summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/field_map_obj.s298
-rw-r--r--src/field_map_obj.c111
2 files changed, 110 insertions, 299 deletions
diff --git a/asm/field_map_obj.s b/asm/field_map_obj.s
index 8ce2ecb70..88703f251 100644
--- a/asm/field_map_obj.s
+++ b/asm/field_map_obj.s
@@ -6,304 +6,6 @@
.text
- thumb_func_start FieldObjectCB_BerryTree
-FieldObjectCB_BerryTree: @ 805D2D0
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r0, 0x2E
- ldrsh r1, [r4, r0]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _0805D30C @ =gMapObjects
- adds r5, r0, r1
- ldrh r1, [r4, 0x3C]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _0805D2FC
- adds r0, r5, 0
- adds r1, r4, 0
- bl get_berry_tree_graphics
- ldrh r1, [r4, 0x3C]
- movs r0, 0x1
- orrs r0, r1
- strh r0, [r4, 0x3C]
-_0805D2FC:
- ldr r2, _0805D310 @ =sub_805D314
- adds r0, r5, 0
- adds r1, r4, 0
- bl meta_step
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0805D30C: .4byte gMapObjects
-_0805D310: .4byte sub_805D314
- thumb_func_end FieldObjectCB_BerryTree
-
- thumb_func_start sub_805D314
-sub_805D314: @ 805D314
- push {r4,lr}
- ldr r3, _0805D330 @ =gUnknown_083752D0
- movs r4, 0x30
- ldrsh r2, [r1, r4]
- lsls r2, 2
- adds r2, r3
- ldr r2, [r2]
- bl _call_via_r2
- lsls r0, 24
- lsrs r0, 24
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0805D330: .4byte gUnknown_083752D0
- thumb_func_end sub_805D314
-
- thumb_func_start do_berry_tree_growth_sparkle_1
-do_berry_tree_growth_sparkle_1: @ 805D334
- push {r4-r7,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- bl npc_reset
- ldrb r0, [r4, 0x1]
- movs r1, 0x20
- orrs r0, r1
- strb r0, [r4, 0x1]
- adds r6, r5, 0
- adds r6, 0x3E
- ldrb r0, [r6]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r6]
- ldrb r0, [r4, 0x1D]
- bl GetStageByBerryTreeId
- lsls r0, 24
- lsrs r7, r0, 24
- cmp r7, 0
- bne _0805D3A4
- ldrh r1, [r5, 0x3C]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- bne _0805D39A
- subs r6, 0x14
- ldrb r0, [r6]
- cmp r0, 0x4
- bne _0805D39A
- ldr r1, _0805D3A0 @ =gUnknown_0202FF84
- movs r2, 0x10
- ldrsh r0, [r4, r2]
- str r0, [r1]
- movs r2, 0x12
- ldrsh r0, [r4, r2]
- str r0, [r1, 0x4]
- adds r0, r5, 0
- adds r0, 0x43
- ldrb r0, [r0]
- subs r0, 0x1
- str r0, [r1, 0x8]
- ldrb r0, [r5, 0x5]
- lsls r0, 28
- lsrs r0, 30
- str r0, [r1, 0xC]
- movs r0, 0x17
- bl FieldEffectStart
- strb r7, [r6]
-_0805D39A:
- movs r0, 0
- b _0805D3E6
- .align 2, 0
-_0805D3A0: .4byte gUnknown_0202FF84
-_0805D3A4:
- ldrb r1, [r4, 0x1]
- movs r0, 0x21
- negs r0, r0
- ands r0, r1
- strb r0, [r4, 0x1]
- ldrb r1, [r6]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r6]
- subs r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
- adds r0, r5, 0
- adds r0, 0x2A
- ldrb r0, [r0]
- cmp r0, r7
- bne _0805D3E0
- adds r0, r4, 0
- adds r1, r5, 0
- bl get_berry_tree_graphics
- adds r0, r4, 0
- adds r1, r5, 0
- movs r2, 0x39
- bl FieldObjectSetRegularAnim
- movs r0, 0x1
- strh r0, [r5, 0x30]
- b _0805D3E6
-_0805D3E0:
- movs r0, 0x2
- strh r0, [r5, 0x30]
- movs r0, 0x1
-_0805D3E6:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end do_berry_tree_growth_sparkle_1
-
- thumb_func_start sub_805D3EC
-sub_805D3EC: @ 805D3EC
- push {r4,lr}
- adds r4, r1, 0
- bl FieldObjectExecRegularAnim
- lsls r0, 24
- cmp r0, 0
- bne _0805D3FE
- movs r0, 0
- b _0805D404
-_0805D3FE:
- movs r0, 0
- strh r0, [r4, 0x30]
- movs r0, 0x1
-_0805D404:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_805D3EC
-
- thumb_func_start do_berry_tree_growth_sparkle_2
-do_berry_tree_growth_sparkle_2: @ 805D40C
- push {r4,lr}
- ldrb r2, [r0]
- movs r3, 0x2
- orrs r2, r3
- strb r2, [r0]
- movs r3, 0
- movs r2, 0x3
- strh r2, [r1, 0x30]
- strh r3, [r1, 0x32]
- ldrh r3, [r1, 0x3C]
- movs r2, 0x2
- orrs r2, r3
- strh r2, [r1, 0x3C]
- ldr r3, _0805D454 @ =gUnknown_0202FF84
- movs r4, 0x10
- ldrsh r2, [r0, r4]
- str r2, [r3]
- movs r2, 0x12
- ldrsh r0, [r0, r2]
- str r0, [r3, 0x4]
- adds r0, r1, 0
- adds r0, 0x43
- ldrb r0, [r0]
- subs r0, 0x1
- str r0, [r3, 0x8]
- ldrb r0, [r1, 0x5]
- lsls r0, 28
- lsrs r0, 30
- str r0, [r3, 0xC]
- movs r0, 0x17
- bl FieldEffectStart
- movs r0, 0x1
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0805D454: .4byte gUnknown_0202FF84
- thumb_func_end do_berry_tree_growth_sparkle_2
-
- thumb_func_start sub_805D458
-sub_805D458: @ 805D458
- push {r4,lr}
- adds r3, r0, 0
- adds r4, r1, 0
- ldrh r1, [r4, 0x32]
- adds r1, 0x1
- strh r1, [r4, 0x32]
- movs r0, 0x2
- ands r1, r0
- lsls r1, 16
- lsrs r1, 17
- lsls r1, 5
- ldrb r2, [r3, 0x1]
- subs r0, 0x23
- ands r0, r2
- orrs r0, r1
- strb r0, [r3, 0x1]
- adds r2, r4, 0
- adds r2, 0x2C
- ldrb r0, [r2]
- movs r1, 0x40
- orrs r0, r1
- strb r0, [r2]
- movs r1, 0x32
- ldrsh r0, [r4, r1]
- cmp r0, 0x40
- bgt _0805D490
- movs r0, 0
- b _0805D4A2
-_0805D490:
- adds r0, r3, 0
- adds r1, r4, 0
- bl get_berry_tree_graphics
- movs r0, 0x4
- strh r0, [r4, 0x30]
- movs r0, 0
- strh r0, [r4, 0x32]
- movs r0, 0x1
-_0805D4A2:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_805D458
-
- thumb_func_start sub_805D4A8
-sub_805D4A8: @ 805D4A8
- push {r4,lr}
- adds r4, r1, 0
- ldrh r2, [r4, 0x32]
- adds r2, 0x1
- strh r2, [r4, 0x32]
- movs r1, 0x2
- ands r2, r1
- lsls r2, 16
- lsrs r2, 17
- lsls r2, 5
- ldrb r3, [r0, 0x1]
- subs r1, 0x23
- ands r1, r3
- orrs r1, r2
- strb r1, [r0, 0x1]
- adds r2, r4, 0
- adds r2, 0x2C
- ldrb r0, [r2]
- movs r1, 0x40
- orrs r0, r1
- strb r0, [r2]
- movs r1, 0x32
- ldrsh r0, [r4, r1]
- cmp r0, 0x40
- bgt _0805D4DE
- movs r0, 0
- b _0805D4EC
-_0805D4DE:
- movs r0, 0
- strh r0, [r4, 0x30]
- ldrh r1, [r4, 0x3C]
- subs r0, 0x3
- ands r0, r1
- strh r0, [r4, 0x3C]
- movs r0, 0x1
-_0805D4EC:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_805D4A8
-
thumb_func_start sub_805D4F4
sub_805D4F4: @ 805D4F4
push {lr}
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);