summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xasm/field_effect.s186
-rwxr-xr-x[-rw-r--r--]include/asm.inc.h6
-rwxr-xr-x[-rw-r--r--]include/field_effect.h2
-rwxr-xr-x[-rw-r--r--]include/rom4.h2
-rwxr-xr-xsrc/field_effect.c91
5 files changed, 97 insertions, 190 deletions
diff --git a/asm/field_effect.s b/asm/field_effect.s
index 0bd7dc9d6..5ea82d1ca 100755
--- a/asm/field_effect.s
+++ b/asm/field_effect.s
@@ -6,192 +6,6 @@
.text
- thumb_func_start sub_80865BC
-sub_80865BC: @ 80865BC
- push {lr}
- ldr r0, _080865D0 @ =c2_exit_to_overworld_2_switch
- bl SetMainCallback2
- ldr r1, _080865D4 @ =gUnknown_0300485C
- ldr r0, _080865D8 @ =mapldr_080842E8
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_080865D0: .4byte c2_exit_to_overworld_2_switch
-_080865D4: .4byte gUnknown_0300485C
-_080865D8: .4byte mapldr_080842E8
- thumb_func_end sub_80865BC
-
- thumb_func_start mapldr_080842E8
-mapldr_080842E8: @ 80865DC
- push {lr}
- bl pal_fill_black
- ldr r0, _080865FC @ =task00_8084310
- movs r1, 0
- bl CreateTask
- bl ScriptContext2_Enable
- bl FreezeMapObjects
- ldr r1, _08086600 @ =gUnknown_0300485C
- movs r0, 0
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_080865FC: .4byte task00_8084310
-_08086600: .4byte gUnknown_0300485C
- thumb_func_end mapldr_080842E8
-
- thumb_func_start task00_8084310
-task00_8084310: @ 8086604
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- ldr r1, _0808666C @ =gTasks
- adds r4, r0, r1
- movs r0, 0x8
- ldrsh r5, [r4, r0]
- cmp r5, 0
- bne _08086640
- bl sub_807D770
- lsls r0, 24
- cmp r0, 0
- beq _08086666
- ldr r1, _08086670 @ =gUnknown_0202FF84
- ldr r0, _08086674 @ =gLastFieldPokeMenuOpened
- ldrb r0, [r0]
- str r0, [r1]
- cmp r0, 0x5
- ble _08086634
- str r5, [r1]
-_08086634:
- movs r0, 0x1F
- bl FieldEffectStart
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_08086640:
- movs r0, 0x1F
- bl FieldEffectActiveListContains
- lsls r0, 24
- cmp r0, 0
- bne _08086666
- bl flag_var_implications_of_teleport_
- bl warp_in
- ldr r0, _08086678 @ =CB2_LoadMap
- bl SetMainCallback2
- ldr r1, _0808667C @ =gUnknown_0300485C
- ldr r0, _08086680 @ =mapldr_08084390
- str r0, [r1]
- adds r0, r6, 0
- bl DestroyTask
-_08086666:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0808666C: .4byte gTasks
-_08086670: .4byte gUnknown_0202FF84
-_08086674: .4byte gLastFieldPokeMenuOpened
-_08086678: .4byte CB2_LoadMap
-_0808667C: .4byte gUnknown_0300485C
-_08086680: .4byte mapldr_08084390
- thumb_func_end task00_8084310
-
- thumb_func_start mapldr_08084390
-mapldr_08084390: @ 8086684
- push {r4,lr}
- bl sub_8053E90
- bl pal_fill_black
- ldr r0, _080866DC @ =c3_080843F8
- movs r1, 0
- bl CreateTask
- ldr r4, _080866E0 @ =gMapObjects
- ldr r3, _080866E4 @ =gPlayerAvatar
- ldrb r1, [r3, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r1, [r0, 0x1]
- movs r2, 0x20
- orrs r1, r2
- strb r1, [r0, 0x1]
- ldrb r1, [r3]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _080866C6
- ldrb r1, [r3, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- movs r1, 0x3
- bl FieldObjectTurn
-_080866C6:
- bl ScriptContext2_Enable
- bl FreezeMapObjects
- ldr r1, _080866E8 @ =gUnknown_0300485C
- movs r0, 0
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080866DC: .4byte c3_080843F8
-_080866E0: .4byte gMapObjects
-_080866E4: .4byte gPlayerAvatar
-_080866E8: .4byte gUnknown_0300485C
- thumb_func_end mapldr_08084390
-
- thumb_func_start c3_080843F8
-c3_080843F8: @ 80866EC
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- adds r5, r0, 0
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, _08086740 @ =gTasks
- adds r4, r0, r1
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _0808671E
- ldr r0, _08086744 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08086738
- movs r0, 0x20
- bl FieldEffectStart
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_0808671E:
- movs r0, 0x20
- bl FieldEffectActiveListContains
- lsls r0, 24
- cmp r0, 0
- bne _08086738
- bl ScriptContext2_Disable
- bl UnfreezeMapObjects
- adds r0, r5, 0
- bl DestroyTask
-_08086738:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08086740: .4byte gTasks
-_08086744: .4byte gPaletteFade
- thumb_func_end c3_080843F8
-
thumb_func_start sub_8086748
sub_8086748: @ 8086748
push {lr}
diff --git a/include/asm.inc.h b/include/asm.inc.h
index 7c090dec2..3837af64b 100644..100755
--- a/include/asm.inc.h
+++ b/include/asm.inc.h
@@ -207,9 +207,9 @@ void sub_8083A84(TaskFunc);
s32 sub_8083BF4(u8 id);
// asm/field_effect.o
-u8 CreateTrainerSprite_BirchSpeech(u8, u16, u16, u8, void *);
-void LoadTrainerGfx_TrainerCard(u8 gender, int, void *);
-u8 CreateBirchSprite(u8, u8, u8);
+u8 CreateTrainerSprite_BirchSpeech(u8, s16, s16, u8, u8 *);
+void LoadTrainerGfx_TrainerCard(u8 gender, u16, u8 *);
+u8 CreateBirchSprite(s16, s16, u8);
// asm/unknown_task.o
void remove_some_task(void);
diff --git a/include/field_effect.h b/include/field_effect.h
index e3e80b3df..d35ca599b 100644..100755
--- a/include/field_effect.h
+++ b/include/field_effect.h
@@ -80,6 +80,8 @@ extern struct SpriteTemplate gUnknown_02024E8C;
extern const struct SpritePalette *sub_80409C8(u16, u32, u32);
+extern u8 gLastFieldPokeMenuOpened;
+
u32 FieldEffectStart(u8 id);
bool8 FieldEffectCmd_loadtiles(u8 **script, u32 *val);
bool8 FieldEffectCmd_loadfadedpal(u8 **script, u32 *val);
diff --git a/include/rom4.h b/include/rom4.h
index 476a0e103..ab63068b2 100644..100755
--- a/include/rom4.h
+++ b/include/rom4.h
@@ -18,7 +18,7 @@ struct LinkPlayerMapObject
};
// sub_8052F5C
-// flag_var_implications_of_teleport_
+void flag_var_implications_of_teleport_(void);
void new_game(void);
void sub_8053014(void);
void sub_8053050(void);
diff --git a/src/field_effect.c b/src/field_effect.c
index 1dfc7e107..931116c16 100755
--- a/src/field_effect.c
+++ b/src/field_effect.c
@@ -1,13 +1,20 @@
#include "global.h"
+#include "asm.h"
#include "data2.h"
+#include "script.h"
+#include "main.h"
#include "field_weather.h"
#include "decompress.h"
#include "sprite.h"
#include "palette.h"
#include "text.h"
+#include "rom4.h"
#include "task.h"
#include "sound.h"
#include "songs.h"
+#include "decoration.h"
+#include "field_map_obj_helpers.h"
+#include "field_map_obj.h"
#include "field_effect.h"
typedef bool8 (*FldEffCmd)(u8 **, u32 *);
@@ -782,3 +789,87 @@ void SpriteCB_HallOfFameMonitor(struct Sprite *sprite)
FieldEffectFreeGraphicsResources(sprite);
}
}
+
+void mapldr_080842E8(void);
+void mapldr_08084390(void);
+void task00_8084310(u8);
+void c3_080843F8(u8);
+
+void sub_80865BC(void)
+{
+ SetMainCallback2(c2_exit_to_overworld_2_switch);
+ gUnknown_0300485C = mapldr_080842E8;
+}
+
+void mapldr_080842E8(void)
+{
+ pal_fill_black();
+ CreateTask(task00_8084310, 0);
+ ScriptContext2_Enable();
+ FreezeMapObjects();
+ gUnknown_0300485C = NULL;
+}
+
+void task00_8084310(u8 taskId)
+{
+ struct Task *task;
+ task = &gTasks[taskId];
+ if (!task->data[0])
+ {
+ if (!sub_807D770())
+ {
+ return;
+ }
+ gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened;
+ if ((int)gUnknown_0202FF84[0] > 5)
+ {
+ gUnknown_0202FF84[0] = 0;
+ }
+ FieldEffectStart(FLDEFF_USE_FLY);
+ task->data[0]++;
+ }
+ if (!FieldEffectActiveListContains(FLDEFF_USE_FLY))
+ {
+ flag_var_implications_of_teleport_();
+ warp_in();
+ SetMainCallback2(CB2_LoadMap);
+ gUnknown_0300485C = mapldr_08084390;
+ DestroyTask(taskId);
+ }
+}
+
+void mapldr_08084390(void)
+{
+ sub_8053E90();
+ pal_fill_black();
+ CreateTask(c3_080843F8, 0);
+ gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_13 = 1;
+ if (gPlayerAvatar.flags & 0x08)
+ {
+ FieldObjectTurn(&gMapObjects[gPlayerAvatar.mapObjectId], DIR_WEST);
+ }
+ ScriptContext2_Enable();
+ FreezeMapObjects();
+ gUnknown_0300485C = NULL;
+}
+
+void c3_080843F8(u8 taskId)
+{
+ struct Task *task;
+ task = &gTasks[taskId];
+ if (task->data[0] == 0)
+ {
+ if (gPaletteFade.active)
+ {
+ return;
+ }
+ FieldEffectStart(FLDEFF_FLY_IN);
+ task->data[0]++;
+ }
+ if (!FieldEffectActiveListContains(FLDEFF_FLY_IN))
+ {
+ ScriptContext2_Disable();
+ UnfreezeMapObjects();
+ DestroyTask(taskId);
+ }
+}