diff options
-rwxr-xr-x | asm/field_effect.s | 186 | ||||
-rwxr-xr-x[-rw-r--r--] | include/asm.inc.h | 6 | ||||
-rwxr-xr-x[-rw-r--r--] | include/field_effect.h | 2 | ||||
-rwxr-xr-x[-rw-r--r--] | include/rom4.h | 2 | ||||
-rwxr-xr-x | src/field_effect.c | 91 |
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); + } +} |