From 456c817338e3ce899e524eff603f47c583de24aa Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 27 Feb 2020 09:18:54 -0500 Subject: [PATCH 01/26] Decompile fldeff hooks --- asm/field_effect.s | 576 --------------------------------- data/field_effect.s | 4 +- data/field_effect_scripts.s | 2 +- include/field_effect_scripts.h | 6 + include/field_weather.h | 1 + include/quest_log.h | 2 +- ld_script.txt | 1 + src/field_effect.c | 243 ++++++++++++++ src/fieldmap.c | 2 +- sym_bss.txt | 4 +- 10 files changed, 257 insertions(+), 584 deletions(-) create mode 100644 include/field_effect_scripts.h create mode 100644 src/field_effect.c diff --git a/asm/field_effect.s b/asm/field_effect.s index 91ea68461..67215c081 100644 --- a/asm/field_effect.s +++ b/asm/field_effect.s @@ -5,582 +5,6 @@ .text - thumb_func_start FieldEffectStart -FieldEffectStart: @ 8083444 - push {r4,r5,lr} - sub sp, 0x8 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r4, 0 - bl FieldEffectActiveListAdd - ldr r0, _08083484 @ =gUnknown_81D96AC - lsls r4, 2 - adds r4, r0 - ldr r0, [r4] - str r0, [sp] - add r4, sp, 0x4 - ldr r5, _08083488 @ =gUnknown_83CBE30 -_08083462: - ldr r0, [sp] - ldrb r0, [r0] - lsls r0, 2 - adds r0, r5 - ldr r2, [r0] - mov r0, sp - adds r1, r4, 0 - bl _call_via_r2 - lsls r0, 24 - cmp r0, 0 - bne _08083462 - ldr r0, [sp, 0x4] - add sp, 0x8 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08083484: .4byte gUnknown_81D96AC -_08083488: .4byte gUnknown_83CBE30 - thumb_func_end FieldEffectStart - - thumb_func_start FieldEffectCmd_loadtiles -FieldEffectCmd_loadtiles: @ 808348C - push {lr} - ldr r1, [r0] - adds r1, 0x1 - str r1, [r0] - bl FieldEffectScript_LoadTiles - movs r0, 0x1 - pop {r1} - bx r1 - thumb_func_end FieldEffectCmd_loadtiles - - thumb_func_start FieldEffectCmd_loadfadedpal -FieldEffectCmd_loadfadedpal: @ 80834A0 - push {lr} - ldr r1, [r0] - adds r1, 0x1 - str r1, [r0] - bl sub_8083614 - movs r0, 0x1 - pop {r1} - bx r1 - thumb_func_end FieldEffectCmd_loadfadedpal - - thumb_func_start FieldEffectCmd_loadpal -FieldEffectCmd_loadpal: @ 80834B4 - push {lr} - ldr r1, [r0] - adds r1, 0x1 - str r1, [r0] - bl sub_808365C - movs r0, 0x1 - pop {r1} - bx r1 - thumb_func_end FieldEffectCmd_loadpal - - thumb_func_start FieldEffectCmd_callnative -FieldEffectCmd_callnative: @ 80834C8 - push {lr} - ldr r2, [r0] - adds r2, 0x1 - str r2, [r0] - bl FieldEffectScript_CallNative - movs r0, 0x1 - pop {r1} - bx r1 - thumb_func_end FieldEffectCmd_callnative - - thumb_func_start sub_80834DC -sub_80834DC: @ 80834DC - movs r0, 0 - bx lr - thumb_func_end sub_80834DC - - thumb_func_start FieldEffectCmd_loadgfx_callnative -FieldEffectCmd_loadgfx_callnative: @ 80834E0 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - ldr r0, [r4] - adds r0, 0x1 - str r0, [r4] - adds r0, r4, 0 - bl FieldEffectScript_LoadTiles - adds r0, r4, 0 - bl sub_8083614 - adds r0, r4, 0 - adds r1, r5, 0 - bl FieldEffectScript_CallNative - movs r0, 0x1 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end FieldEffectCmd_loadgfx_callnative - - thumb_func_start FieldEffectCmd_loadtiles_callnative -FieldEffectCmd_loadtiles_callnative: @ 8083508 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - ldr r0, [r4] - adds r0, 0x1 - str r0, [r4] - adds r0, r4, 0 - bl FieldEffectScript_LoadTiles - adds r0, r4, 0 - adds r1, r5, 0 - bl FieldEffectScript_CallNative - movs r0, 0x1 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end FieldEffectCmd_loadtiles_callnative - - thumb_func_start FieldEffectCmd_loadfadedpal_callnative -FieldEffectCmd_loadfadedpal_callnative: @ 808352C - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - ldr r0, [r4] - adds r0, 0x1 - str r0, [r4] - adds r0, r4, 0 - bl sub_8083614 - adds r0, r4, 0 - adds r1, r5, 0 - bl FieldEffectScript_CallNative - movs r0, 0x1 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end FieldEffectCmd_loadfadedpal_callnative - - thumb_func_start FieldEffectScript_ReadWord -FieldEffectScript_ReadWord: @ 8083550 - ldr r2, [r0] - ldrb r0, [r2] - ldrb r1, [r2, 0x1] - lsls r1, 8 - adds r0, r1 - ldrb r1, [r2, 0x2] - lsls r1, 16 - adds r0, r1 - ldrb r1, [r2, 0x3] - lsls r1, 24 - adds r0, r1 - bx lr - thumb_func_end FieldEffectScript_ReadWord - - thumb_func_start FieldEffectScript_LoadTiles -FieldEffectScript_LoadTiles: @ 8083568 - push {r4,r5,lr} - adds r4, r0, 0 - bl FieldEffectScript_ReadWord - adds r5, r0, 0 - ldrh r0, [r5, 0x6] - bl GetSpriteTileStartByTag - lsls r0, 16 - ldr r1, _08083594 @ =0xffff0000 - cmp r0, r1 - bne _08083586 - adds r0, r5, 0 - bl LoadSpriteSheet -_08083586: - ldr r0, [r4] - adds r0, 0x4 - str r0, [r4] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08083594: .4byte 0xffff0000 - thumb_func_end FieldEffectScript_LoadTiles - - thumb_func_start sub_8083598 -sub_8083598: @ 8083598 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080835B4 @ =gUnknown_2036E28 - ldrb r0, [r0] - cmp r0, 0x1 - beq _080835B8 - cmp r0, 0x1 - ble _08083606 - cmp r0, 0x2 - beq _080835CC - cmp r0, 0x3 - beq _080835E0 - b _08083606 - .align 2, 0 -_080835B4: .4byte gUnknown_2036E28 -_080835B8: - adds r4, 0x10 - lsls r0, r4, 5 - ldr r1, _080835C8 @ =gPlttBufferUnfaded - adds r0, r1 - movs r1, 0x10 - bl TintPalette_GrayScale - b _080835F6 - .align 2, 0 -_080835C8: .4byte gPlttBufferUnfaded -_080835CC: - adds r4, 0x10 - lsls r0, r4, 5 - ldr r1, _080835DC @ =gPlttBufferUnfaded - adds r0, r1 - movs r1, 0x10 - bl TintPalette_SepiaTone - b _080835F6 - .align 2, 0 -_080835DC: .4byte gPlttBufferUnfaded -_080835E0: - adds r4, 0x10 - lsls r0, r4, 4 - movs r1, 0x10 - bl sub_8111F38 - lsls r0, r4, 5 - ldr r1, _0808360C @ =gPlttBufferUnfaded - adds r0, r1 - movs r1, 0x10 - bl TintPalette_GrayScale -_080835F6: - lsls r1, r4, 5 - ldr r0, _0808360C @ =gPlttBufferUnfaded - adds r0, r1, r0 - ldr r2, _08083610 @ =gPlttBufferFaded - adds r1, r2 - movs r2, 0x8 - bl CpuFastSet -_08083606: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0808360C: .4byte gPlttBufferUnfaded -_08083610: .4byte gPlttBufferFaded - thumb_func_end sub_8083598 - - thumb_func_start sub_8083614 -sub_8083614: @ 8083614 - push {r4-r6,lr} - adds r6, r0, 0 - bl FieldEffectScript_ReadWord - adds r5, r0, 0 - ldrh r0, [r5, 0x4] - bl IndexOfSpritePaletteTag - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r5, 0 - bl LoadSpritePalette - cmp r4, 0xFF - bne _08083642 - ldrh r0, [r5, 0x4] - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 24 - bl sub_8083598 -_08083642: - ldrh r0, [r5, 0x4] - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 24 - bl sub_807AA8C - ldr r0, [r6] - adds r0, 0x4 - str r0, [r6] - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8083614 - - thumb_func_start sub_808365C -sub_808365C: @ 808365C - push {r4-r6,lr} - adds r6, r0, 0 - bl FieldEffectScript_ReadWord - adds r5, r0, 0 - ldrh r0, [r5, 0x4] - bl IndexOfSpritePaletteTag - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r5, 0 - bl LoadSpritePalette - cmp r4, 0xFF - beq _0808368A - ldrh r0, [r5, 0x4] - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 24 - bl sub_8083598 -_0808368A: - ldr r0, [r6] - adds r0, 0x4 - str r0, [r6] - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_808365C - - thumb_func_start FieldEffectScript_CallNative -FieldEffectScript_CallNative: @ 8083698 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - bl FieldEffectScript_ReadWord - bl _call_via_r0 - str r0, [r5] - ldr r0, [r4] - adds r0, 0x4 - str r0, [r4] - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end FieldEffectScript_CallNative - - thumb_func_start FieldEffectFreeGraphicsResources -FieldEffectFreeGraphicsResources: @ 80836B4 - push {r4,r5,lr} - adds r1, r0, 0 - adds r1, 0x40 - ldrh r5, [r1] - ldrb r4, [r0, 0x5] - lsrs r4, 4 - bl DestroySprite - adds r0, r5, 0 - bl FieldEffectFreeTilesIfUnused - adds r0, r4, 0 - bl FieldEffectFreePaletteIfUnused - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end FieldEffectFreeGraphicsResources - - thumb_func_start FieldEffectStop -FieldEffectStop: @ 80836D8 - push {r4,lr} - lsls r4, r1, 24 - lsrs r4, 24 - bl FieldEffectFreeGraphicsResources - adds r0, r4, 0 - bl FieldEffectActiveListRemove - pop {r4} - pop {r0} - bx r0 - thumb_func_end FieldEffectStop - - thumb_func_start FieldEffectFreeTilesIfUnused -FieldEffectFreeTilesIfUnused: @ 80836F0 - push {r4,r5,lr} - lsls r0, 16 - lsrs r4, r0, 16 - adds r0, r4, 0 - bl GetSpriteTileTagByTileStart - lsls r0, 16 - lsrs r3, r0, 16 - ldr r0, _0808374C @ =0x0000ffff - cmp r3, r0 - beq _08083744 - movs r2, 0 - ldr r5, _08083750 @ =gSprites -_0808370A: - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r1, r0, r5 - adds r0, r1, 0 - adds r0, 0x3E - ldrb r0, [r0] - lsls r0, 31 - cmp r0, 0 - beq _08083734 - adds r0, r1, 0 - adds r0, 0x3F - ldrb r0, [r0] - lsls r0, 25 - cmp r0, 0 - bge _08083734 - adds r0, r1, 0 - adds r0, 0x40 - ldrh r0, [r0] - cmp r4, r0 - beq _08083744 -_08083734: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x3F - bls _0808370A - adds r0, r3, 0 - bl FreeSpriteTilesByTag -_08083744: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0808374C: .4byte 0x0000ffff -_08083750: .4byte gSprites - thumb_func_end FieldEffectFreeTilesIfUnused - - thumb_func_start FieldEffectFreePaletteIfUnused -FieldEffectFreePaletteIfUnused: @ 8083754 - push {r4-r6,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - bl GetSpritePaletteTagByPaletteNum - lsls r0, 16 - lsrs r5, r0, 16 - ldr r0, _080837A4 @ =0x0000ffff - cmp r5, r0 - beq _0808379C - movs r2, 0 - ldr r6, _080837A8 @ =gSprites - adds r3, r4, 0 -_08083770: - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r1, r0, r6 - adds r0, r1, 0 - adds r0, 0x3E - ldrb r0, [r0] - lsls r0, 31 - cmp r0, 0 - beq _0808378C - ldrb r0, [r1, 0x5] - lsrs r0, 4 - cmp r0, r3 - beq _0808379C -_0808378C: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x3F - bls _08083770 - adds r0, r5, 0 - bl FreeSpritePaletteByTag -_0808379C: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080837A4: .4byte 0x0000ffff -_080837A8: .4byte gSprites - thumb_func_end FieldEffectFreePaletteIfUnused - - thumb_func_start FieldEffectActiveListClear -FieldEffectActiveListClear: @ 80837AC - push {r4,lr} - movs r2, 0 - ldr r4, _080837CC @ =gUnknown_3000FC8 - movs r3, 0xFF -_080837B4: - adds r0, r2, r4 - ldrb r1, [r0] - orrs r1, r3 - strb r1, [r0] - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x1F - bls _080837B4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080837CC: .4byte gUnknown_3000FC8 - thumb_func_end FieldEffectActiveListClear - - thumb_func_start FieldEffectActiveListAdd -FieldEffectActiveListAdd: @ 80837D0 - push {r4,lr} - lsls r0, 24 - lsrs r3, r0, 24 - movs r2, 0 - ldr r4, _080837E8 @ =gUnknown_3000FC8 -_080837DA: - adds r1, r2, r4 - ldrb r0, [r1] - cmp r0, 0xFF - bne _080837EC - strb r3, [r1] - b _080837F6 - .align 2, 0 -_080837E8: .4byte gUnknown_3000FC8 -_080837EC: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x1F - bls _080837DA -_080837F6: - pop {r4} - pop {r0} - bx r0 - thumb_func_end FieldEffectActiveListAdd - - thumb_func_start FieldEffectActiveListRemove -FieldEffectActiveListRemove: @ 80837FC - push {r4,r5,lr} - lsls r0, 24 - lsrs r3, r0, 24 - movs r2, 0 - ldr r4, _08083818 @ =gUnknown_3000FC8 - movs r5, 0xFF -_08083808: - adds r1, r2, r4 - ldrb r0, [r1] - cmp r0, r3 - bne _0808381C - orrs r0, r5 - strb r0, [r1] - b _08083826 - .align 2, 0 -_08083818: .4byte gUnknown_3000FC8 -_0808381C: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x1F - bls _08083808 -_08083826: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end FieldEffectActiveListRemove - - thumb_func_start FieldEffectActiveListContains -FieldEffectActiveListContains: @ 808382C - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - movs r1, 0 - ldr r3, _08083844 @ =gUnknown_3000FC8 -_08083836: - adds r0, r1, r3 - ldrb r0, [r0] - cmp r0, r2 - bne _08083848 - movs r0, 0x1 - b _08083854 - .align 2, 0 -_08083844: .4byte gUnknown_3000FC8 -_08083848: - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x1F - bls _08083836 - movs r0, 0 -_08083854: - pop {r1} - bx r1 - thumb_func_end FieldEffectActiveListContains - thumb_func_start CreateTrainerSprite CreateTrainerSprite: @ 8083858 push {r4-r7,lr} diff --git a/data/field_effect.s b/data/field_effect.s index 7e797c560..0c76e9d0d 100644 --- a/data/field_effect.s +++ b/data/field_effect.s @@ -49,12 +49,12 @@ gUnknown_83CBDB0:: .incbin "graphics/field_effects/unk_83CBDB0.4bpp" .align 2 -gUnknown_83CBE30:: @ 83CBE30 dataptr +sFldEffScrcmdTable:: @ 83CBE30 dataptr .4byte FieldEffectCmd_loadtiles .4byte FieldEffectCmd_loadfadedpal .4byte FieldEffectCmd_loadpal .4byte FieldEffectCmd_callnative - .4byte sub_80834DC + .4byte FieldEffectCmd_end .4byte FieldEffectCmd_loadgfx_callnative .4byte FieldEffectCmd_loadtiles_callnative .4byte FieldEffectCmd_loadfadedpal_callnative diff --git a/data/field_effect_scripts.s b/data/field_effect_scripts.s index cac76bea9..fd8681fbf 100644 --- a/data/field_effect_scripts.s +++ b/data/field_effect_scripts.s @@ -1,7 +1,7 @@ .include "asm/macros/field_effect_script.inc" .section script_data, "aw", %progbits .align 2 -gUnknown_81D96AC:: @ 81D96AC +gFieldEffectScriptPointers:: @ 81D96AC .4byte gFldEffScript_ExclamationMarkIcon .4byte gFldEffScript_UseCutOnGrass .4byte gFldEffScript_UseCutOnTree diff --git a/include/field_effect_scripts.h b/include/field_effect_scripts.h new file mode 100644 index 000000000..fd3609d93 --- /dev/null +++ b/include/field_effect_scripts.h @@ -0,0 +1,6 @@ +#ifndef GUARD_FIELD_EFFECT_SCRIPTS_H +#define GUARD_FIELD_EFFECT_SCRIPTS_H + +extern const u8 *const gFieldEffectScriptPointers[]; + +#endif //GUARD_FIELD_EFFECT_SCRIPTS_H diff --git a/include/field_weather.h b/include/field_weather.h index de2543edb..3cb17f9e2 100644 --- a/include/field_weather.h +++ b/include/field_weather.h @@ -18,5 +18,6 @@ void SetWeatherScreenFadeOut(void); void sub_807B070(void); u8 GetCurrentWeather(void); void FieldWeather_StartFadingOutCreditsMap(u8, u8, u32); +void sub_807AA8C(u8 palIdx); #endif // GUARD_WEATHER_H diff --git a/include/quest_log.h b/include/quest_log.h index 25d0d5871..752cb3921 100644 --- a/include/quest_log.h +++ b/include/quest_log.h @@ -29,7 +29,7 @@ void sub_811539C(void); void sub_8115748(u16); u8 sub_8112CAC(void); bool8 QuestLog_SchedulePlaybackCB(void (*func)(void)); -void sub_8111F38(u16, u16); +void sub_8111F38(u16 offset, u16 idx); void sub_8111134(void); void DestroyHelpMessageWindow(u8 a0); u8 CreateHelpMessageWindow(void); diff --git a/ld_script.txt b/ld_script.txt index aed18fed9..4e4953097 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -123,6 +123,7 @@ SECTIONS { asm/cable_club.o(.text); src/trainer_see.o(.text); src/wild_encounter.o(.text); + src/field_effect.o(.text); asm/field_effect.o(.text); src/scanline_effect.o(.text); src/option_menu.o(.text); diff --git a/src/field_effect.c b/src/field_effect.c new file mode 100644 index 000000000..c9c388966 --- /dev/null +++ b/src/field_effect.c @@ -0,0 +1,243 @@ +#include "global.h" +#include "gflib.h" +#include "field_effect.h" +#include "field_effect_scripts.h" +#include "field_weather.h" +#include "overworld.h" +#include "quest_log.h" + +#define FIELD_EFFECT_COUNT 32 + +static u8 sFieldEffectActiveList[FIELD_EFFECT_COUNT]; + +void FieldEffectActiveListAdd(u8 fldeff); +void FieldEffectScript_LoadTiles(const u8 **script); +void FieldEffectScript_LoadFadedPal(const u8 **script); +void FieldEffectScript_LoadPal(const u8 **script); +void FieldEffectScript_CallNative(const u8 **script, u32 *result); +void FieldEffectFreeTilesIfUnused(u16 tilesTag); +void FieldEffectFreePaletteIfUnused(u8 paletteNum); + +extern bool8 (*const sFldEffScrcmdTable[])(const u8 **script, u32 *result); + +u32 FieldEffectStart(u8 fldeff) +{ + const u8 *script; + u32 result; + FieldEffectActiveListAdd(fldeff); + script = gFieldEffectScriptPointers[fldeff]; + while (sFldEffScrcmdTable[*script](&script, &result)) + ; + return result; +} + +bool8 FieldEffectCmd_loadtiles(const u8 **script, u32 *result) +{ + (*script)++; + FieldEffectScript_LoadTiles(script); + return TRUE; +} + +bool8 FieldEffectCmd_loadfadedpal(const u8 **script, u32 *result) +{ + (*script)++; + FieldEffectScript_LoadFadedPal(script); + return TRUE; +} + +bool8 FieldEffectCmd_loadpal(const u8 **script, u32 *result) +{ + (*script)++; + FieldEffectScript_LoadPal(script); + return TRUE; +} +bool8 FieldEffectCmd_callnative(const u8 **script, u32 *result) +{ + (*script)++; + FieldEffectScript_CallNative(script, result); + return TRUE; +} + +bool8 FieldEffectCmd_end(const u8 **script, u32 *result) +{ + return FALSE; +} + +bool8 FieldEffectCmd_loadgfx_callnative(const u8 **script, u32 *result) +{ + (*script)++; + FieldEffectScript_LoadTiles(script); + FieldEffectScript_LoadFadedPal(script); + FieldEffectScript_CallNative(script, result); + return TRUE; +} + +bool8 FieldEffectCmd_loadtiles_callnative(const u8 **script, u32 *result) +{ + (*script)++; + FieldEffectScript_LoadTiles(script); + FieldEffectScript_CallNative(script, result); + return TRUE; +} + +bool8 FieldEffectCmd_loadfadedpal_callnative(const u8 **script, u32 *result) +{ + (*script)++; + FieldEffectScript_LoadFadedPal(script); + FieldEffectScript_CallNative(script, result); + return TRUE; +} + +u32 FieldEffectScript_ReadWord(const u8 **script) +{ + return T2_READ_32(*script); +} + +void FieldEffectScript_LoadTiles(const u8 **script) +{ + const struct SpriteSheet * spriteSheet = (const struct SpriteSheet *)FieldEffectScript_ReadWord(script); + if (GetSpriteTileStartByTag(spriteSheet->tag) == 0xFFFF) + LoadSpriteSheet(spriteSheet); + *script += sizeof(u32); +} + +void sub_8083598(u8 paletteIdx) +{ + switch (gUnknown_2036E28) + { + case 0: + return; + case 1: + TintPalette_GrayScale(&gPlttBufferUnfaded[(paletteIdx + 16) * 16], 0x10); + break; + case 2: + TintPalette_SepiaTone(&gPlttBufferUnfaded[(paletteIdx + 16) * 16], 0x10); + break; + case 3: + sub_8111F38((paletteIdx + 16) * 16, 0x10); + TintPalette_GrayScale(&gPlttBufferUnfaded[(paletteIdx + 16) * 16], 0x10); + break; + default: + return; + } + CpuFastCopy(&gPlttBufferUnfaded[(paletteIdx + 16) * 16], &gPlttBufferFaded[(paletteIdx + 16) * 16], 0x20); +} + +void FieldEffectScript_LoadFadedPal(const u8 **script) +{ + const struct SpritePalette * spritePalette = (const struct SpritePalette *)FieldEffectScript_ReadWord(script); + u8 idx = IndexOfSpritePaletteTag(spritePalette->tag); + LoadSpritePalette(spritePalette); + if (idx == 0xFF) + sub_8083598(IndexOfSpritePaletteTag(spritePalette->tag)); + sub_807AA8C(IndexOfSpritePaletteTag(spritePalette->tag)); + *script += sizeof(u32); +} + +void FieldEffectScript_LoadPal(const u8 **script) +{ + const struct SpritePalette * spritePalette = (const struct SpritePalette *)FieldEffectScript_ReadWord(script); + u8 idx = IndexOfSpritePaletteTag(spritePalette->tag); + LoadSpritePalette(spritePalette); + if (idx != 0xFF) + sub_8083598(IndexOfSpritePaletteTag(spritePalette->tag)); + *script += sizeof(u32); +} + +void FieldEffectScript_CallNative(const u8 **script, u32 *result) +{ + u32 (*func)(void) = (u32 (*)(void))FieldEffectScript_ReadWord(script); + *result = func(); + *script += sizeof(u32); +} + +void FieldEffectFreeGraphicsResources(struct Sprite * sprite) +{ + u16 tileStart = sprite->sheetTileStart; + u8 paletteNum = sprite->oam.paletteNum; + DestroySprite(sprite); + FieldEffectFreeTilesIfUnused(tileStart); + FieldEffectFreePaletteIfUnused(paletteNum); +} + +void FieldEffectStop(struct Sprite * sprite, u8 fldeff) +{ + FieldEffectFreeGraphicsResources(sprite); + FieldEffectActiveListRemove(fldeff); +} + +void FieldEffectFreeTilesIfUnused(u16 tileStart) +{ + u8 i; + u16 tileTag = GetSpriteTileTagByTileStart(tileStart); + if (tileTag == 0xFFFF) + return; + for (i = 0; i < MAX_SPRITES; i++) + { + if (gSprites[i].inUse && gSprites[i].usingSheet && tileStart == gSprites[i].sheetTileStart) + return; + } + FreeSpriteTilesByTag(tileTag); +} + +void FieldEffectFreePaletteIfUnused(u8 paletteNum) +{ + u8 i; + u16 paletteTag = GetSpritePaletteTagByPaletteNum(paletteNum); + if (paletteTag == 0xFFFF) + return; + for (i = 0; i < MAX_SPRITES; i++) + { + if (gSprites[i].inUse && gSprites[i].oam.paletteNum == paletteNum) + return; + } + FreeSpritePaletteByTag(paletteTag); +} + +void FieldEffectActiveListClear(void) +{ + u8 i; + for (i = 0; i < FIELD_EFFECT_COUNT; i++) + { + sFieldEffectActiveList[i] = 0xFF; + } +} + +void FieldEffectActiveListAdd(u8 fldeff) +{ + u8 i; + for (i = 0; i < FIELD_EFFECT_COUNT; i++) + { + if (sFieldEffectActiveList[i] == 0xFF) + { + sFieldEffectActiveList[i] = fldeff; + return; + } + } +} + +void FieldEffectActiveListRemove(u8 fldeff) +{ + u8 i; + for (i = 0; i < FIELD_EFFECT_COUNT; i++) + { + if (sFieldEffectActiveList[i] == fldeff) + { + sFieldEffectActiveList[i] = 0xFF; + return; + } + } +} + +bool8 FieldEffectActiveListContains(u8 fldeff) +{ + u8 i; + for (i = 0; i < FIELD_EFFECT_COUNT; i++) + { + if (sFieldEffectActiveList[i] == fldeff) + { + return TRUE; + } + } + return FALSE; +} diff --git a/src/fieldmap.c b/src/fieldmap.c index 60ff70f10..c1c0bf15c 100644 --- a/src/fieldmap.c +++ b/src/fieldmap.c @@ -946,7 +946,7 @@ void sub_8059948(u8 a0, u8 a1) TintPalette_SepiaTone(gPlttBufferUnfaded + a0 * 16, a1 * 16); break; case 3: - sub_8111F38(a0 * 16, a1 * 16); + sub_8111F38((a0 * 16), a1 * 16); TintPalette_GrayScale(gPlttBufferUnfaded + a0 * 16, a1 * 16); break; default: diff --git a/sym_bss.txt b/sym_bss.txt index ec3d7d947..b877b6532 100644 --- a/sym_bss.txt +++ b/sym_bss.txt @@ -60,10 +60,8 @@ gUnknown_3000EA0: @ 3000EA0 .include "src/tileset_anims.o" .align 2 .include "src/sound.o" - .align 2 -gUnknown_3000FC8: @ 3000FC8 - .space 0x20 + .include "src/field_effect.o" gUnknown_3000FE8: @ 3000FE8 .space 0x184 From c93915120f23a9545ff0743f506af3d58a1fabff Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 27 Feb 2020 11:45:08 -0500 Subject: [PATCH 02/26] Port many field_effect.c names from Emerald --- asm/event_object_movement.s | 2 +- asm/field_effect.s | 895 +++++++++++++++++---------------- asm/field_weather.s | 6 +- asm/overworld.s | 20 +- asm/pokemon_storage_system.s | 2 +- data/event_object_movement.s | 4 +- data/field_effect.s | 173 +++---- data/field_effect_scripts.s | 6 +- include/field_effect.h | 16 +- include/field_fadetransition.h | 2 +- include/field_screen_effect.h | 2 +- include/overworld.h | 2 +- src/field_fadetransition.c | 22 +- src/field_screen_effect.c | 2 +- src/item_use.c | 6 +- src/map_preview_screen.c | 2 +- src/party_menu.c | 4 +- src/player_pc.c | 8 +- src/region_map.c | 2 +- src/script_menu.c | 8 +- src/shop.c | 2 +- 21 files changed, 596 insertions(+), 590 deletions(-) diff --git a/asm/event_object_movement.s b/asm/event_object_movement.s index 811182517..163ebe51f 100644 --- a/asm/event_object_movement.s +++ b/asm/event_object_movement.s @@ -669,7 +669,7 @@ sub_805E2E8: @ 805E2E8 bl GetCurrentMapType lsls r0, 24 lsrs r0, 24 - bl is_light_level_1_2_3_5_or_6 + bl IsMapTypeOutdoors lsls r0, 24 cmp r0, 0 beq _0805E37C diff --git a/asm/field_effect.s b/asm/field_effect.s index 67215c081..957d70a93 100644 --- a/asm/field_effect.s +++ b/asm/field_effect.s @@ -45,7 +45,7 @@ CreateTrainerSprite: @ 8083858 mov r3, r8 ldrh r0, [r3, 0x4] strh r0, [r1, 0x2] - ldr r0, _080838E8 @ =gUnknown_83CBE50 + ldr r0, _080838E8 @ =gNewGameBirchOamAttributes str r0, [sp, 0x4] ldr r0, _080838EC @ =gDummySpriteAnimTable str r0, [sp, 0x8] @@ -75,7 +75,7 @@ CreateTrainerSprite: @ 8083858 .align 2, 0 _080838E0: .4byte gTrainerFrontPicPaletteTable _080838E4: .4byte gTrainerFrontPicTable -_080838E8: .4byte gUnknown_83CBE50 +_080838E8: .4byte gNewGameBirchOamAttributes _080838EC: .4byte gDummySpriteAnimTable _080838F0: .4byte gDummySpriteAffineAnimTable _080838F4: .4byte SpriteCallbackDummy @@ -121,9 +121,9 @@ AddNewGameBirchObject: @ 8083930 lsrs r5, 16 lsls r6, 24 lsrs r6, 24 - ldr r0, _08083968 @ =gUnknown_83CBE70 + ldr r0, _08083968 @ =gNewGameBirchObjectPaletteInfo bl LoadSpritePalette - ldr r0, _0808396C @ =gUnknown_83CBE84 + ldr r0, _0808396C @ =gNewGameBirchObjectTemplate lsls r4, 16 asrs r4, 16 lsls r5, 16 @@ -138,12 +138,12 @@ AddNewGameBirchObject: @ 8083930 pop {r1} bx r1 .align 2, 0 -_08083968: .4byte gUnknown_83CBE70 -_0808396C: .4byte gUnknown_83CBE84 +_08083968: .4byte gNewGameBirchObjectPaletteInfo +_0808396C: .4byte gNewGameBirchObjectTemplate thumb_func_end AddNewGameBirchObject - thumb_func_start sub_8083970 -sub_8083970: @ 8083970 + thumb_func_start CreateMonSprite_PicBox +CreateMonSprite_PicBox: @ 8083970 push {r4,r5,lr} sub sp, 0x10 lsls r0, 16 @@ -191,10 +191,10 @@ _080839CA: pop {r4,r5} pop {r1} bx r1 - thumb_func_end sub_8083970 + thumb_func_end CreateMonSprite_PicBox - thumb_func_start sub_80839D4 -sub_80839D4: @ 80839D4 + thumb_func_start CreateMonSprite_FieldMove +CreateMonSprite_FieldMove: @ 80839D4 push {r4-r6,lr} mov r6, r10 mov r5, r9 @@ -259,15 +259,15 @@ _08083A4A: pop {r4-r6} pop {r1} bx r1 - thumb_func_end sub_80839D4 + thumb_func_end CreateMonSprite_FieldMove - thumb_func_start sub_8083A5C -sub_8083A5C: @ 8083A5C + thumb_func_start FreeResourcesAndDestroySprite +FreeResourcesAndDestroySprite: @ 8083A5C push {r4,r5,lr} adds r4, r0, 0 lsls r1, 24 lsrs r5, r1, 24 - bl sub_807B0B4 + bl ResetPreservedPalettesInWeather ldrb r0, [r4, 0x1] lsls r0, 30 cmp r0, 0 @@ -282,7 +282,7 @@ _08083A7A: pop {r4,r5} pop {r0} bx r0 - thumb_func_end sub_8083A5C + thumb_func_end FreeResourcesAndDestroySprite thumb_func_start MultiplyInvertedPaletteRGBComponents MultiplyInvertedPaletteRGBComponents: @ 8083A88 @@ -418,14 +418,14 @@ _08083B84: .4byte gPlttBufferUnfaded _08083B88: .4byte gPlttBufferFaded thumb_func_end MultiplyPaletteRGBComponents - thumb_func_start sub_8083B8C -sub_8083B8C: @ 8083B8C + thumb_func_start FldEff_PokecenterHeal +FldEff_PokecenterHeal: @ 8083B8C push {r4,lr} bl CalculatePlayerPartyCount adds r4, r0, 0 lsls r4, 24 lsrs r4, 24 - ldr r0, _08083BC8 @ =sub_8083BD0 + ldr r0, _08083BC8 @ =Task_PokecenterHeal movs r1, 0xFF bl CreateTask lsls r0, 24 @@ -449,12 +449,12 @@ sub_8083B8C: @ 8083B8C pop {r1} bx r1 .align 2, 0 -_08083BC8: .4byte sub_8083BD0 +_08083BC8: .4byte Task_PokecenterHeal _08083BCC: .4byte gTasks - thumb_func_end sub_8083B8C + thumb_func_end FldEff_PokecenterHeal - thumb_func_start sub_8083BD0 -sub_8083BD0: @ 8083BD0 + thumb_func_start Task_PokecenterHeal +Task_PokecenterHeal: @ 8083BD0 push {lr} lsls r0, 24 lsrs r0, 24 @@ -463,7 +463,7 @@ sub_8083BD0: @ 8083BD0 lsls r1, 3 ldr r0, _08083BF8 @ =gTasks adds r1, r0 - ldr r2, _08083BFC @ =gUnknown_83CBFD0 + ldr r2, _08083BFC @ =sPokecenterHealTaskCBTable movs r3, 0x8 ldrsh r0, [r1, r3] lsls r0, 2 @@ -475,8 +475,8 @@ sub_8083BD0: @ 8083BD0 bx r0 .align 2, 0 _08083BF8: .4byte gTasks -_08083BFC: .4byte gUnknown_83CBFD0 - thumb_func_end sub_8083BD0 +_08083BFC: .4byte sPokecenterHealTaskCBTable + thumb_func_end Task_PokecenterHeal thumb_func_start PokecenterHealEffect_0 PokecenterHealEffect_0: @ 8083C00 @@ -492,7 +492,7 @@ PokecenterHealEffect_0: @ 8083C00 movs r3, 0xE ldrsh r2, [r4, r3] movs r3, 0x1 - bl sub_8083E14 + bl CreatePokeballGlowSprite lsls r0, 24 lsrs r0, 24 strh r0, [r4, 0x14] @@ -544,8 +544,8 @@ _08083C6E: _08083C74: .4byte gSprites thumb_func_end PokecenterHealEffect_1 - thumb_func_start sub_8083C78 -sub_8083C78: @ 8083C78 + thumb_func_start PokecenterHealEffect_2 +PokecenterHealEffect_2: @ 8083C78 push {lr} adds r3, r0, 0 ldr r2, _08083C9C @ =gSprites @@ -567,7 +567,7 @@ _08083C98: bx r0 .align 2, 0 _08083C9C: .4byte gSprites - thumb_func_end sub_8083C78 + thumb_func_end PokecenterHealEffect_2 thumb_func_start PokecenterHealEffect_3 PokecenterHealEffect_3: @ 8083CA0 @@ -587,7 +587,7 @@ PokecenterHealEffect_3: @ 8083CA0 bl DestroySprite movs r0, 0x19 bl FieldEffectActiveListRemove - ldr r0, _08083CDC @ =sub_8083BD0 + ldr r0, _08083CDC @ =Task_PokecenterHeal bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 @@ -597,17 +597,17 @@ _08083CD2: bx r0 .align 2, 0 _08083CD8: .4byte gSprites -_08083CDC: .4byte sub_8083BD0 +_08083CDC: .4byte Task_PokecenterHeal thumb_func_end PokecenterHealEffect_3 - thumb_func_start sub_8083CE0 -sub_8083CE0: @ 8083CE0 + thumb_func_start FldEff_HallOfFameRecord +FldEff_HallOfFameRecord: @ 8083CE0 push {r4,lr} bl CalculatePlayerPartyCount adds r4, r0, 0 lsls r4, 24 lsrs r4, 24 - ldr r0, _08083D14 @ =sub_8083D1C + ldr r0, _08083D14 @ =Task_HallOfFameRecord movs r1, 0xFF bl CreateTask lsls r0, 24 @@ -627,12 +627,12 @@ sub_8083CE0: @ 8083CE0 pop {r1} bx r1 .align 2, 0 -_08083D14: .4byte sub_8083D1C +_08083D14: .4byte Task_HallOfFameRecord _08083D18: .4byte gTasks - thumb_func_end sub_8083CE0 + thumb_func_end FldEff_HallOfFameRecord - thumb_func_start sub_8083D1C -sub_8083D1C: @ 8083D1C + thumb_func_start Task_HallOfFameRecord +Task_HallOfFameRecord: @ 8083D1C push {lr} lsls r0, 24 lsrs r0, 24 @@ -641,7 +641,7 @@ sub_8083D1C: @ 8083D1C lsls r1, 3 ldr r0, _08083D44 @ =gTasks adds r1, r0 - ldr r2, _08083D48 @ =gUnknown_83CBFE0 + ldr r2, _08083D48 @ =sHallOfFameRecordTaskCBTable movs r3, 0x8 ldrsh r0, [r1, r3] lsls r0, 2 @@ -653,8 +653,8 @@ sub_8083D1C: @ 8083D1C bx r0 .align 2, 0 _08083D44: .4byte gTasks -_08083D48: .4byte gUnknown_83CBFE0 - thumb_func_end sub_8083D1C +_08083D48: .4byte sHallOfFameRecordTaskCBTable + thumb_func_end Task_HallOfFameRecord thumb_func_start HallOfFameRecordEffect_0 HallOfFameRecordEffect_0: @ 8083D4C @@ -670,7 +670,7 @@ HallOfFameRecordEffect_0: @ 8083D4C movs r3, 0xE ldrsh r2, [r4, r3] movs r3, 0 - bl sub_8083E14 + bl CreatePokeballGlowSprite lsls r0, 24 lsrs r0, 24 strh r0, [r4, 0x14] @@ -679,8 +679,8 @@ HallOfFameRecordEffect_0: @ 8083D4C bx r0 thumb_func_end HallOfFameRecordEffect_0 - thumb_func_start sub_8083D74 -sub_8083D74: @ 8083D74 + thumb_func_start HallOfFameRecordEffect_1 +HallOfFameRecordEffect_1: @ 8083D74 push {r4,lr} adds r4, r0, 0 ldr r2, _08083DA8 @ =gSprites @@ -696,7 +696,7 @@ sub_8083D74: @ 8083D74 ble _08083DA2 movs r0, 0x78 movs r1, 0x19 - bl sub_808428C + bl HallOfFameRecordEffectHelper ldrh r0, [r4, 0x26] adds r0, 0x1 strh r0, [r4, 0x26] @@ -709,10 +709,10 @@ _08083DA2: bx r0 .align 2, 0 _08083DA8: .4byte gSprites - thumb_func_end sub_8083D74 + thumb_func_end HallOfFameRecordEffect_1 - thumb_func_start sub_8083DAC -sub_8083DAC: @ 8083DAC + thumb_func_start HallOfFameRecordEffect_2 +HallOfFameRecordEffect_2: @ 8083DAC push {lr} adds r3, r0, 0 ldr r2, _08083DD0 @ =gSprites @@ -734,10 +734,10 @@ _08083DCC: bx r0 .align 2, 0 _08083DD0: .4byte gSprites - thumb_func_end sub_8083DAC + thumb_func_end HallOfFameRecordEffect_2 - thumb_func_start sub_8083DD4 -sub_8083DD4: @ 8083DD4 + thumb_func_start HallOfFameRecordEffect_3 +HallOfFameRecordEffect_3: @ 8083DD4 push {lr} ldr r2, _08083E0C @ =gSprites movs r3, 0x14 @@ -754,7 +754,7 @@ sub_8083DD4: @ 8083DD4 bl DestroySprite movs r0, 0x3E bl FieldEffectActiveListRemove - ldr r0, _08083E10 @ =sub_8083D1C + ldr r0, _08083E10 @ =Task_HallOfFameRecord bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 @@ -764,11 +764,11 @@ _08083E06: bx r0 .align 2, 0 _08083E0C: .4byte gSprites -_08083E10: .4byte sub_8083D1C - thumb_func_end sub_8083DD4 +_08083E10: .4byte Task_HallOfFameRecord + thumb_func_end HallOfFameRecordEffect_3 - thumb_func_start sub_8083E14 -sub_8083E14: @ 8083E14 + thumb_func_start CreatePokeballGlowSprite +CreatePokeballGlowSprite: @ 8083E14 push {r4-r6,lr} mov r6, r8 push {r6} @@ -785,7 +785,7 @@ sub_8083E14: @ 8083E14 lsrs r5, 16 lsls r6, 16 lsrs r6, 16 - ldr r0, _08083E68 @ =sub_8083E70 + ldr r0, _08083E68 @ =SpriteCB_PokeballGlowEffect bl CreateInvisibleSprite lsls r0, 24 lsrs r0, 24 @@ -810,14 +810,14 @@ sub_8083E14: @ 8083E14 pop {r1} bx r1 .align 2, 0 -_08083E68: .4byte sub_8083E70 +_08083E68: .4byte SpriteCB_PokeballGlowEffect _08083E6C: .4byte gSprites - thumb_func_end sub_8083E14 + thumb_func_end CreatePokeballGlowSprite - thumb_func_start sub_8083E70 -sub_8083E70: @ 8083E70 + thumb_func_start SpriteCB_PokeballGlowEffect +SpriteCB_PokeballGlowEffect: @ 8083E70 push {lr} - ldr r2, _08083E88 @ =gUnknown_83CBFF0 + ldr r2, _08083E88 @ =sPokeballGlowSpriteCBTable movs r3, 0x2E ldrsh r1, [r0, r3] lsls r1, 2 @@ -827,8 +827,8 @@ sub_8083E70: @ 8083E70 pop {r0} bx r0 .align 2, 0 -_08083E88: .4byte gUnknown_83CBFF0 - thumb_func_end sub_8083E70 +_08083E88: .4byte sPokeballGlowSpriteCBTable + thumb_func_end SpriteCB_PokeballGlowEffect thumb_func_start PokeballGlowEffect_0 PokeballGlowEffect_0: @ 8083E8C @@ -1250,10 +1250,10 @@ _080841CC: bx r0 thumb_func_end PokeballGlowEffect_6 - thumb_func_start nullsub_50 -nullsub_50: @ 80841D4 + thumb_func_start PokeballGlowEffect_7 +PokeballGlowEffect_7: @ 80841D4 bx lr - thumb_func_end nullsub_50 + thumb_func_end PokeballGlowEffect_7 thumb_func_start SpriteCB_PokeballGlow SpriteCB_PokeballGlow: @ 80841D8 @@ -1318,8 +1318,8 @@ _08084244: .4byte gUnknown_83CBFA0 _08084248: .4byte gSprites thumb_func_end PokecenterHealEffectHelper - thumb_func_start sub_808424C -sub_808424C: @ 808424C + thumb_func_start SpriteCB_PokecenterMonitor +SpriteCB_PokecenterMonitor: @ 808424C push {r4,lr} adds r4, r0, 0 movs r1, 0x2E @@ -1351,10 +1351,10 @@ _08084284: pop {r4} pop {r0} bx r0 - thumb_func_end sub_808424C + thumb_func_end SpriteCB_PokecenterMonitor - thumb_func_start sub_808428C -sub_808428C: @ 808428C + thumb_func_start HallOfFameRecordEffectHelper +HallOfFameRecordEffectHelper: @ 808428C push {lr} adds r3, r0, 0 adds r2, r1, 0 @@ -1370,10 +1370,10 @@ sub_808428C: @ 808428C bx r0 .align 2, 0 _080842A8: .4byte gUnknown_83CBFB8 - thumb_func_end sub_808428C + thumb_func_end HallOfFameRecordEffectHelper - thumb_func_start sub_80842AC -sub_80842AC: @ 80842AC + thumb_func_start SpriteCB_HallOfFameMonitor +SpriteCB_HallOfFameMonitor: @ 80842AC push {lr} adds r2, r0, 0 adds r0, 0x3F @@ -1387,29 +1387,29 @@ sub_80842AC: @ 80842AC _080842C2: pop {r0} bx r0 - thumb_func_end sub_80842AC + thumb_func_end SpriteCB_HallOfFameMonitor - thumb_func_start sub_80842C8 -sub_80842C8: @ 80842C8 + thumb_func_start ReturnToFieldFromFlyMapSelect +ReturnToFieldFromFlyMapSelect: @ 80842C8 push {lr} ldr r0, _080842DC @ =CB2_ReturnToField bl SetMainCallback2 ldr r1, _080842E0 @ =gFieldCallback - ldr r0, _080842E4 @ =mapldr_080842E8 + ldr r0, _080842E4 @ =FieldCallback_Fly str r0, [r1] pop {r0} bx r0 .align 2, 0 _080842DC: .4byte CB2_ReturnToField _080842E0: .4byte gFieldCallback -_080842E4: .4byte mapldr_080842E8 - thumb_func_end sub_80842C8 +_080842E4: .4byte FieldCallback_Fly + thumb_func_end ReturnToFieldFromFlyMapSelect - thumb_func_start mapldr_080842E8 -mapldr_080842E8: @ 80842E8 + thumb_func_start FieldCallback_Fly +FieldCallback_Fly: @ 80842E8 push {lr} - bl sub_807DC00 - ldr r0, _08084308 @ =task00_8084310 + bl FadeInFromBlack + ldr r0, _08084308 @ =Task_FlyOut movs r1, 0 bl CreateTask bl ScriptContext2_Enable @@ -1420,12 +1420,12 @@ mapldr_080842E8: @ 80842E8 pop {r0} bx r0 .align 2, 0 -_08084308: .4byte task00_8084310 +_08084308: .4byte Task_FlyOut _0808430C: .4byte gFieldCallback - thumb_func_end mapldr_080842E8 + thumb_func_end FieldCallback_Fly - thumb_func_start task00_8084310 -task00_8084310: @ 8084310 + thumb_func_start Task_FlyOut +Task_FlyOut: @ 8084310 push {r4-r6,lr} lsls r0, 24 lsrs r5, r0, 24 @@ -1462,12 +1462,12 @@ _08084350: lsls r0, 24 cmp r0, 0 bne _08084376 - bl sub_8054CA0 + bl Overworld_ResetStateAfterFly bl WarpIntoMap ldr r0, _08084384 @ =CB2_LoadMap bl SetMainCallback2 ldr r1, _08084388 @ =gFieldCallback - ldr r0, _0808438C @ =mapldr_08084390 + ldr r0, _0808438C @ =FieldCallback_FlyArrive str r0, [r1] adds r0, r5, 0 bl DestroyTask @@ -1480,15 +1480,15 @@ _0808437C: .4byte gTasks _08084380: .4byte gFieldEffectArguments _08084384: .4byte CB2_LoadMap _08084388: .4byte gFieldCallback -_0808438C: .4byte mapldr_08084390 - thumb_func_end task00_8084310 +_0808438C: .4byte FieldCallback_FlyArrive + thumb_func_end Task_FlyOut - thumb_func_start mapldr_08084390 -mapldr_08084390: @ 8084390 + thumb_func_start FieldCallback_FlyArrive +FieldCallback_FlyArrive: @ 8084390 push {r4,lr} bl Overworld_PlaySpecialMapMusic - bl sub_807DC00 - ldr r0, _080843E8 @ =c3_080843F8 + bl FadeInFromBlack + ldr r0, _080843E8 @ =Task_FlyIn movs r1, 0 bl CreateTask ldr r4, _080843EC @ =gObjectEvents @@ -1524,14 +1524,14 @@ _080843D2: pop {r0} bx r0 .align 2, 0 -_080843E8: .4byte c3_080843F8 +_080843E8: .4byte Task_FlyIn _080843EC: .4byte gObjectEvents _080843F0: .4byte gPlayerAvatar _080843F4: .4byte gFieldCallback - thumb_func_end mapldr_08084390 + thumb_func_end FieldCallback_FlyArrive - thumb_func_start c3_080843F8 -c3_080843F8: @ 80843F8 + thumb_func_start Task_FlyIn +Task_FlyIn: @ 80843F8 push {r4,r5,lr} lsls r0, 24 lsrs r0, 24 @@ -1573,17 +1573,17 @@ _08084444: .align 2, 0 _0808444C: .4byte gTasks _08084450: .4byte gPaletteFade - thumb_func_end c3_080843F8 + thumb_func_end Task_FlyIn - thumb_func_start sub_8084454 -sub_8084454: @ 8084454 + thumb_func_start FieldCB_FallWarpExit +FieldCB_FallWarpExit: @ 8084454 push {lr} bl Overworld_PlaySpecialMapMusic bl pal_fill_for_maplights bl sub_8111CF0 bl ScriptContext2_Enable bl FreezeObjectEvents - ldr r0, _0808447C @ =sub_8084484 + ldr r0, _0808447C @ =Task_FallWarpFieldEffect movs r1, 0 bl CreateTask ldr r1, _08084480 @ =gFieldCallback @@ -1592,12 +1592,12 @@ sub_8084454: @ 8084454 pop {r0} bx r0 .align 2, 0 -_0808447C: .4byte sub_8084484 +_0808447C: .4byte Task_FallWarpFieldEffect _08084480: .4byte gFieldCallback - thumb_func_end sub_8084454 + thumb_func_end FieldCB_FallWarpExit - thumb_func_start sub_8084484 -sub_8084484: @ 8084484 + thumb_func_start Task_FallWarpFieldEffect +Task_FallWarpFieldEffect: @ 8084484 push {r4,r5,lr} lsls r0, 24 lsrs r0, 24 @@ -1606,7 +1606,7 @@ sub_8084484: @ 8084484 lsls r1, 3 ldr r0, _080844B4 @ =gTasks adds r4, r1, r0 - ldr r5, _080844B8 @ =gUnknown_83CC034 + ldr r5, _080844B8 @ =sFallWarpEffectCBPtrs _08084496: movs r1, 0x8 ldrsh r0, [r4, r1] @@ -1623,11 +1623,11 @@ _08084496: bx r0 .align 2, 0 _080844B4: .4byte gTasks -_080844B8: .4byte gUnknown_83CC034 - thumb_func_end sub_8084484 +_080844B8: .4byte sFallWarpEffectCBPtrs + thumb_func_end Task_FallWarpFieldEffect - thumb_func_start sub_80844BC -sub_80844BC: @ 80844BC + thumb_func_start FallWarpEffect_1 +FallWarpEffect_1: @ 80844BC push {r4-r6,lr} mov r6, r9 mov r5, r8 @@ -1705,10 +1705,10 @@ sub_80844BC: @ 80844BC _08084558: .4byte gPlayerAvatar _0808455C: .4byte gObjectEvents _08084560: .4byte gSprites - thumb_func_end sub_80844BC + thumb_func_end FallWarpEffect_1 - thumb_func_start sub_8084564 -sub_8084564: @ 8084564 + thumb_func_start FallWarpEffect_2 +FallWarpEffect_2: @ 8084564 push {r4,lr} adds r4, r0, 0 bl IsWeatherNotFadingIn @@ -1723,10 +1723,10 @@ _08084578: pop {r4} pop {r1} bx r1 - thumb_func_end sub_8084564 + thumb_func_end FallWarpEffect_2 - thumb_func_start sub_8084580 -sub_8084580: @ 8084580 + thumb_func_start FallWarpEffect_3 +FallWarpEffect_3: @ 8084580 push {r4-r6,lr} adds r5, r0, 0 ldr r6, _080845E4 @ =gPlayerAvatar @@ -1780,10 +1780,10 @@ _080845E4: .4byte gPlayerAvatar _080845E8: .4byte gSprites _080845EC: .4byte gSpriteCoordOffsetY _080845F0: .4byte gObjectEvents - thumb_func_end sub_8084580 + thumb_func_end FallWarpEffect_3 - thumb_func_start sub_80845F4 -sub_80845F4: @ 80845F4 + thumb_func_start FallWarpEffect_4 +FallWarpEffect_4: @ 80845F4 push {r4-r6,lr} adds r4, r0, 0 ldr r2, _080846A0 @ =gPlayerAvatar @@ -1876,10 +1876,10 @@ _08084698: _080846A0: .4byte gPlayerAvatar _080846A4: .4byte gObjectEvents _080846A8: .4byte gSprites - thumb_func_end sub_80845F4 + thumb_func_end FallWarpEffect_4 - thumb_func_start sub_80846AC -sub_80846AC: @ 80846AC + thumb_func_start FallWarpEffect_5 +FallWarpEffect_5: @ 80846AC push {lr} ldrh r1, [r0, 0x8] adds r1, 0x1 @@ -1893,10 +1893,10 @@ sub_80846AC: @ 80846AC movs r0, 0x1 pop {r1} bx r1 - thumb_func_end sub_80846AC + thumb_func_end FallWarpEffect_5 - thumb_func_start sub_80846C8 -sub_80846C8: @ 80846C8 + thumb_func_start FallWarpEffect_6 +FallWarpEffect_6: @ 80846C8 push {r4,lr} adds r4, r0, 0 movs r0, 0xA @@ -1929,10 +1929,10 @@ _080846FE: pop {r4} pop {r1} bx r1 - thumb_func_end sub_80846C8 + thumb_func_end FallWarpEffect_6 - thumb_func_start sub_8084708 -sub_8084708: @ 8084708 + thumb_func_start FallWarpEffect_7 +FallWarpEffect_7: @ 8084708 push {r4,lr} sub sp, 0x4 ldr r1, _08084778 @ =gPlayerAvatar @@ -1968,7 +1968,7 @@ sub_8084708: @ 8084708 movs r0, 0x16 bl HelpSystem_SetSomeVariable2 _08084760: - ldr r0, _08084780 @ =sub_8084484 + ldr r0, _08084780 @ =Task_FallWarpFieldEffect bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 @@ -1981,18 +1981,18 @@ _08084760: .align 2, 0 _08084778: .4byte gPlayerAvatar _0808477C: .4byte 0x00004001 -_08084780: .4byte sub_8084484 - thumb_func_end sub_8084708 +_08084780: .4byte Task_FallWarpFieldEffect + thumb_func_end FallWarpEffect_7 - thumb_func_start sub_8084784 -sub_8084784: @ 8084784 + thumb_func_start StartEscalatorWarp +StartEscalatorWarp: @ 8084784 push {r4,lr} adds r4, r0, 0 lsls r4, 24 lsrs r4, 24 lsls r1, 24 lsrs r1, 24 - ldr r0, _080847B8 @ =sub_80847C0 + ldr r0, _080847B8 @ =Task_EscalatorWarpFieldEffect bl CreateTask lsls r0, 24 lsrs r0, 24 @@ -2012,12 +2012,12 @@ _080847B0: pop {r0} bx r0 .align 2, 0 -_080847B8: .4byte sub_80847C0 +_080847B8: .4byte Task_EscalatorWarpFieldEffect _080847BC: .4byte gTasks - thumb_func_end sub_8084784 + thumb_func_end StartEscalatorWarp - thumb_func_start sub_80847C0 -sub_80847C0: @ 80847C0 + thumb_func_start Task_EscalatorWarpFieldEffect +Task_EscalatorWarpFieldEffect: @ 80847C0 push {r4,r5,lr} lsls r0, 24 lsrs r0, 24 @@ -2026,7 +2026,7 @@ sub_80847C0: @ 80847C0 lsls r1, 3 ldr r0, _080847F0 @ =gTasks adds r4, r1, r0 - ldr r5, _080847F4 @ =gUnknown_83CC050 + ldr r5, _080847F4 @ =sEscalatorWarpFieldEffectFuncs _080847D2: movs r1, 0x8 ldrsh r0, [r4, r1] @@ -2043,11 +2043,11 @@ _080847D2: bx r0 .align 2, 0 _080847F0: .4byte gTasks -_080847F4: .4byte gUnknown_83CC050 - thumb_func_end sub_80847C0 +_080847F4: .4byte sEscalatorWarpFieldEffectFuncs + thumb_func_end Task_EscalatorWarpFieldEffect - thumb_func_start sub_80847F8 -sub_80847F8: @ 80847F8 + thumb_func_start EscalatorWarpEffect_1 +EscalatorWarpEffect_1: @ 80847F8 push {r4,lr} adds r4, r0, 0 bl FreezeObjectEvents @@ -2063,10 +2063,10 @@ sub_80847F8: @ 80847F8 pop {r4} pop {r1} bx r1 - thumb_func_end sub_80847F8 + thumb_func_end EscalatorWarpEffect_1 - thumb_func_start sub_8084820 -sub_8084820: @ 8084820 + thumb_func_start EscalatorWarpEffect_2 +EscalatorWarpEffect_2: @ 8084820 push {r4,r5,lr} adds r5, r0, 0 ldr r0, _08084888 @ =gPlayerAvatar @@ -2118,10 +2118,10 @@ _0808487E: .align 2, 0 _08084888: .4byte gPlayerAvatar _0808488C: .4byte gObjectEvents - thumb_func_end sub_8084820 + thumb_func_end EscalatorWarpEffect_2 - thumb_func_start sub_8084890 -sub_8084890: @ 8084890 + thumb_func_start EscalatorWarpEffect_3 +EscalatorWarpEffect_3: @ 8084890 push {r4,lr} adds r4, r0, 0 bl sub_80848F8 @@ -2138,20 +2138,20 @@ _080848AA: pop {r4} pop {r1} bx r1 - thumb_func_end sub_8084890 + thumb_func_end EscalatorWarpEffect_3 - thumb_func_start sub_80848B4 -sub_80848B4: @ 80848B4 + thumb_func_start EscalatorWarpEffect_4 +EscalatorWarpEffect_4: @ 80848B4 push {lr} bl sub_80848F8 bl sub_80849A0 movs r0, 0 pop {r1} bx r1 - thumb_func_end sub_80848B4 + thumb_func_end EscalatorWarpEffect_4 - thumb_func_start sub_80848C4 -sub_80848C4: @ 80848C4 + thumb_func_start EscalatorWarpEffect_5 +EscalatorWarpEffect_5: @ 80848C4 push {r4,lr} adds r4, r0, 0 bl sub_8084944 @@ -2168,17 +2168,17 @@ _080848DE: pop {r4} pop {r1} bx r1 - thumb_func_end sub_80848C4 + thumb_func_end EscalatorWarpEffect_5 - thumb_func_start sub_80848E8 -sub_80848E8: @ 80848E8 + thumb_func_start EscalatorWarpEffect_6 +EscalatorWarpEffect_6: @ 80848E8 push {lr} bl sub_8084944 bl sub_80849A0 movs r0, 0 pop {r1} bx r1 - thumb_func_end sub_80848E8 + thumb_func_end EscalatorWarpEffect_6 thumb_func_start sub_80848F8 sub_80848F8: @ 80848F8 @@ -2290,7 +2290,7 @@ sub_80849A0: @ 80849A0 str r0, [r1] ldr r0, _080849EC @ =CB2_LoadMap bl SetMainCallback2 - ldr r0, _080849F0 @ =sub_80847C0 + ldr r0, _080849F0 @ =Task_EscalatorWarpFieldEffect bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 @@ -2303,7 +2303,7 @@ _080849E0: .4byte gPaletteFade _080849E4: .4byte gFieldCallback _080849E8: .4byte sub_80849F4 _080849EC: .4byte CB2_LoadMap -_080849F0: .4byte sub_80847C0 +_080849F0: .4byte Task_EscalatorWarpFieldEffect thumb_func_end sub_80849A0 thumb_func_start sub_80849F4 @@ -2648,10 +2648,10 @@ _08084C98: .4byte gObjectEvents _08084C9C: .4byte sub_8084A24 thumb_func_end sub_8084C3C - thumb_func_start oei_waterfall -oei_waterfall: @ 8084CA0 + thumb_func_start FldEff_UseWaterfall +FldEff_UseWaterfall: @ 8084CA0 push {r4,lr} - ldr r4, _08084CCC @ =sub_8084CD8 + ldr r4, _08084CCC @ =Task_UseWaterfall adds r0, r4, 0 movs r1, 0xFF bl CreateTask @@ -2671,17 +2671,17 @@ oei_waterfall: @ 8084CA0 pop {r1} bx r1 .align 2, 0 -_08084CCC: .4byte sub_8084CD8 +_08084CCC: .4byte Task_UseWaterfall _08084CD0: .4byte gTasks _08084CD4: .4byte gFieldEffectArguments - thumb_func_end oei_waterfall + thumb_func_end FldEff_UseWaterfall - thumb_func_start sub_8084CD8 -sub_8084CD8: @ 8084CD8 + thumb_func_start Task_UseWaterfall +Task_UseWaterfall: @ 8084CD8 push {r4,r5,lr} lsls r0, 24 lsrs r0, 24 - ldr r5, _08084D14 @ =gUnknown_83CC084 + ldr r5, _08084D14 @ =sUseWaterfallFieldEffectFuncs ldr r2, _08084D18 @ =gTasks lsls r1, r0, 2 adds r1, r0 @@ -2709,14 +2709,14 @@ _08084CEA: pop {r0} bx r0 .align 2, 0 -_08084D14: .4byte gUnknown_83CC084 +_08084D14: .4byte sUseWaterfallFieldEffectFuncs _08084D18: .4byte gTasks _08084D1C: .4byte gPlayerAvatar _08084D20: .4byte gObjectEvents - thumb_func_end sub_8084CD8 + thumb_func_end Task_UseWaterfall - thumb_func_start sub_8084D24 -sub_8084D24: @ 8084D24 + thumb_func_start waterfall_0_setup +waterfall_0_setup: @ 8084D24 push {r4,lr} adds r4, r0, 0 bl ScriptContext2_Enable @@ -2732,7 +2732,7 @@ sub_8084D24: @ 8084D24 bx r1 .align 2, 0 _08084D40: .4byte gPlayerAvatar - thumb_func_end sub_8084D24 + thumb_func_end waterfall_0_setup thumb_func_start waterfall_1_do_anim_probably waterfall_1_do_anim_probably: @ 8084D44 @@ -2787,8 +2787,8 @@ _08084D9C: bx r1 thumb_func_end waterfall_2_wait_anim_finish_probably - thumb_func_start sub_8084DA4 -sub_8084DA4: @ 8084DA4 + thumb_func_start waterfall_3_move_player_probably +waterfall_3_move_player_probably: @ 8084DA4 push {r4,r5,lr} adds r5, r0, 0 adds r4, r1, 0 @@ -2806,10 +2806,10 @@ sub_8084DA4: @ 8084DA4 pop {r4,r5} pop {r1} bx r1 - thumb_func_end sub_8084DA4 + thumb_func_end waterfall_3_move_player_probably - thumb_func_start sub_8084DCC -sub_8084DCC: @ 8084DCC + thumb_func_start waterfall_4_wait_player_move_probably +waterfall_4_wait_player_move_probably: @ 8084DCC push {r4,r5,lr} adds r5, r0, 0 adds r4, r1, 0 @@ -2830,7 +2830,7 @@ _08084DE2: bl ScriptContext2_Disable ldr r0, _08084E10 @ =gPlayerAvatar strb r4, [r0, 0x6] - ldr r0, _08084E14 @ =sub_8084CD8 + ldr r0, _08084E14 @ =Task_UseWaterfall bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 @@ -2841,7 +2841,7 @@ _08084DE2: b _08084E1E .align 2, 0 _08084E10: .4byte gPlayerAvatar -_08084E14: .4byte sub_8084CD8 +_08084E14: .4byte Task_UseWaterfall _08084E18: movs r0, 0x3 strh r0, [r5, 0x8] @@ -2850,12 +2850,13 @@ _08084E1E: pop {r4,r5} pop {r1} bx r1 - thumb_func_end sub_8084DCC + thumb_func_end waterfall_4_wait_player_move_probably + @ These are leftovers from RS thumb_func_start FldEff_UseDive FldEff_UseDive: @ 8084E24 push {r4,lr} - ldr r4, _08084E54 @ =sub_8084E60 + ldr r4, _08084E54 @ =Task_Dive adds r0, r4, 0 movs r1, 0xFF bl CreateTask @@ -2877,17 +2878,17 @@ FldEff_UseDive: @ 8084E24 pop {r1} bx r1 .align 2, 0 -_08084E54: .4byte sub_8084E60 +_08084E54: .4byte Task_Dive _08084E58: .4byte gTasks _08084E5C: .4byte gFieldEffectArguments thumb_func_end FldEff_UseDive - thumb_func_start sub_8084E60 -sub_8084E60: @ 8084E60 + thumb_func_start Task_Dive +Task_Dive: @ 8084E60 push {r4,r5,lr} lsls r0, 24 lsrs r0, 24 - ldr r5, _08084E90 @ =gUnknown_83CC098 + ldr r5, _08084E90 @ =sDiveFieldEffectFuncPtrs ldr r2, _08084E94 @ =gTasks lsls r1, r0, 2 adds r1, r0 @@ -2908,9 +2909,9 @@ _08084E72: pop {r0} bx r0 .align 2, 0 -_08084E90: .4byte gUnknown_83CC098 +_08084E90: .4byte sDiveFieldEffectFuncPtrs _08084E94: .4byte gTasks - thumb_func_end sub_8084E60 + thumb_func_end Task_Dive thumb_func_start dive_1_lock dive_1_lock: @ 8084E98 @@ -2971,7 +2972,7 @@ dive_3_unknown: @ 8084ED4 ldrb r1, [r0, 0x1E] mov r0, sp bl dive_warp - ldr r0, _08084F28 @ =sub_8084E60 + ldr r0, _08084F28 @ =Task_Dive bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 @@ -2986,29 +2987,29 @@ _08084F18: .align 2, 0 _08084F20: .4byte gObjectEvents _08084F24: .4byte gPlayerAvatar -_08084F28: .4byte sub_8084E60 +_08084F28: .4byte Task_Dive thumb_func_end dive_3_unknown - thumb_func_start sub_8084F2C -sub_8084F2C: @ 8084F2C + thumb_func_start StartLavaridgeGymB1FWarp +StartLavaridgeGymB1FWarp: @ 8084F2C push {lr} adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 - ldr r0, _08084F40 @ =sub_8084F44 + ldr r0, _08084F40 @ =Task_LavaridgeGymB1FWarp bl CreateTask pop {r0} bx r0 .align 2, 0 -_08084F40: .4byte sub_8084F44 - thumb_func_end sub_8084F2C +_08084F40: .4byte Task_LavaridgeGymB1FWarp + thumb_func_end StartLavaridgeGymB1FWarp - thumb_func_start sub_8084F44 -sub_8084F44: @ 8084F44 + thumb_func_start Task_LavaridgeGymB1FWarp +Task_LavaridgeGymB1FWarp: @ 8084F44 push {r4-r6,lr} lsls r0, 24 lsrs r0, 24 - ldr r6, _08084F8C @ =gUnknown_83CC0A4 + ldr r6, _08084F8C @ =sLavaridgeGymB1FWarpEffectFuncs ldr r2, _08084F90 @ =gTasks ldr r5, _08084F94 @ =gPlayerAvatar lsls r1, r0, 2 @@ -3042,15 +3043,15 @@ _08084F58: pop {r0} bx r0 .align 2, 0 -_08084F8C: .4byte gUnknown_83CC0A4 +_08084F8C: .4byte sLavaridgeGymB1FWarpEffectFuncs _08084F90: .4byte gTasks _08084F94: .4byte gPlayerAvatar _08084F98: .4byte gObjectEvents _08084F9C: .4byte gSprites - thumb_func_end sub_8084F44 + thumb_func_end Task_LavaridgeGymB1FWarp - thumb_func_start sub_8084FA0 -sub_8084FA0: @ 8084FA0 + thumb_func_start LavaridgeGymB1FWarpEffect_1 +LavaridgeGymB1FWarpEffect_1: @ 8084FA0 push {r4,r5,lr} adds r4, r0, 0 adds r5, r1, 0 @@ -3075,10 +3076,10 @@ sub_8084FA0: @ 8084FA0 bx r1 .align 2, 0 _08084FD4: .4byte gPlayerAvatar - thumb_func_end sub_8084FA0 + thumb_func_end LavaridgeGymB1FWarpEffect_1 - thumb_func_start sub_8084FD8 -sub_8084FD8: @ 8084FD8 + thumb_func_start LavaridgeGymB1FWarpEffect_2 +LavaridgeGymB1FWarpEffect_2: @ 8084FD8 push {r4,lr} adds r4, r0, 0 movs r0, 0xA @@ -3105,10 +3106,10 @@ _08085004: pop {r4} pop {r1} bx r1 - thumb_func_end sub_8084FD8 + thumb_func_end LavaridgeGymB1FWarpEffect_2 - thumb_func_start sub_808500C -sub_808500C: @ 808500C + thumb_func_start LavaridgeGymB1FWarpEffect_3 +LavaridgeGymB1FWarpEffect_3: @ 808500C push {r4,r5,lr} adds r4, r0, 0 movs r0, 0 @@ -3144,10 +3145,10 @@ sub_808500C: @ 808500C bx r1 .align 2, 0 _08085054: .4byte gFieldEffectArguments - thumb_func_end sub_808500C + thumb_func_end LavaridgeGymB1FWarpEffect_3 - thumb_func_start sub_8085058 -sub_8085058: @ 8085058 + thumb_func_start LavaridgeGymB1FWarpEffect_4 +LavaridgeGymB1FWarpEffect_4: @ 8085058 push {r4-r7,lr} adds r4, r0, 0 adds r6, r1, 0 @@ -3276,10 +3277,10 @@ _08085144: pop {r4-r7} pop {r1} bx r1 - thumb_func_end sub_8085058 + thumb_func_end LavaridgeGymB1FWarpEffect_4 - thumb_func_start sub_808514C -sub_808514C: @ 808514C + thumb_func_start LavaridgeGymB1FWarpEffect_5 +LavaridgeGymB1FWarpEffect_5: @ 808514C push {r4,lr} adds r4, r0, 0 bl sub_8055F88 @@ -3291,10 +3292,10 @@ sub_808514C: @ 808514C pop {r4} pop {r1} bx r1 - thumb_func_end sub_808514C + thumb_func_end LavaridgeGymB1FWarpEffect_5 - thumb_func_start sub_8085168 -sub_8085168: @ 8085168 + thumb_func_start LavaridgeGymB1FWarpEffect_6 +LavaridgeGymB1FWarpEffect_6: @ 8085168 push {lr} ldr r0, _080851A8 @ =gPaletteFade ldrb r1, [r0, 0x7] @@ -3309,11 +3310,11 @@ sub_8085168: @ 8085168 bne _080851A0 bl WarpIntoMap ldr r1, _080851AC @ =gFieldCallback - ldr r0, _080851B0 @ =mapldr_080851BC + ldr r0, _080851B0 @ =FieldCB_LavaridgeGymB1FWarpExit str r0, [r1] ldr r0, _080851B4 @ =CB2_LoadMap bl SetMainCallback2 - ldr r0, _080851B8 @ =sub_8084F44 + ldr r0, _080851B8 @ =Task_LavaridgeGymB1FWarp bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 @@ -3325,13 +3326,13 @@ _080851A0: .align 2, 0 _080851A8: .4byte gPaletteFade _080851AC: .4byte gFieldCallback -_080851B0: .4byte mapldr_080851BC +_080851B0: .4byte FieldCB_LavaridgeGymB1FWarpExit _080851B4: .4byte CB2_LoadMap -_080851B8: .4byte sub_8084F44 - thumb_func_end sub_8085168 +_080851B8: .4byte Task_LavaridgeGymB1FWarp + thumb_func_end LavaridgeGymB1FWarpEffect_6 - thumb_func_start mapldr_080851BC -mapldr_080851BC: @ 80851BC + thumb_func_start FieldCB_LavaridgeGymB1FWarpExit +FieldCB_LavaridgeGymB1FWarpExit: @ 80851BC push {lr} bl Overworld_PlaySpecialMapMusic bl pal_fill_for_maplights @@ -3340,21 +3341,21 @@ mapldr_080851BC: @ 80851BC ldr r0, _080851E0 @ =gFieldCallback movs r1, 0 str r1, [r0] - ldr r0, _080851E4 @ =sub_80851E8 + ldr r0, _080851E4 @ =Task_LavaridgeGymB1FWarpExit bl CreateTask pop {r0} bx r0 .align 2, 0 _080851E0: .4byte gFieldCallback -_080851E4: .4byte sub_80851E8 - thumb_func_end mapldr_080851BC +_080851E4: .4byte Task_LavaridgeGymB1FWarpExit + thumb_func_end FieldCB_LavaridgeGymB1FWarpExit - thumb_func_start sub_80851E8 -sub_80851E8: @ 80851E8 + thumb_func_start Task_LavaridgeGymB1FWarpExit +Task_LavaridgeGymB1FWarpExit: @ 80851E8 push {r4-r6,lr} lsls r0, 24 lsrs r0, 24 - ldr r6, _08085230 @ =gUnknown_83CC0BC + ldr r6, _08085230 @ =sLavaridgeGymB1FWarpExitEffectFuncs ldr r2, _08085234 @ =gTasks ldr r5, _08085238 @ =gPlayerAvatar lsls r1, r0, 2 @@ -3388,15 +3389,15 @@ _080851FC: pop {r0} bx r0 .align 2, 0 -_08085230: .4byte gUnknown_83CC0BC +_08085230: .4byte sLavaridgeGymB1FWarpExitEffectFuncs _08085234: .4byte gTasks _08085238: .4byte gPlayerAvatar _0808523C: .4byte gObjectEvents _08085240: .4byte gSprites - thumb_func_end sub_80851E8 + thumb_func_end Task_LavaridgeGymB1FWarpExit - thumb_func_start sub_8085244 -sub_8085244: @ 8085244 + thumb_func_start LavaridgeGymB1FWarpExitEffect_1 +LavaridgeGymB1FWarpExitEffect_1: @ 8085244 push {r4,r5,lr} adds r5, r0, 0 adds r4, r1, 0 @@ -3418,10 +3419,10 @@ sub_8085244: @ 8085244 bx r1 .align 2, 0 _08085270: .4byte gPlayerAvatar - thumb_func_end sub_8085244 + thumb_func_end LavaridgeGymB1FWarpExitEffect_1 - thumb_func_start sub_8085274 -sub_8085274: @ 8085274 + thumb_func_start LavaridgeGymB1FWarpExitEffect_2 +LavaridgeGymB1FWarpExitEffect_2: @ 8085274 push {r4-r6,lr} adds r4, r0, 0 adds r5, r1, 0 @@ -3459,10 +3460,10 @@ _080852B4: bx r1 .align 2, 0 _080852BC: .4byte gFieldEffectArguments - thumb_func_end sub_8085274 + thumb_func_end LavaridgeGymB1FWarpExitEffect_2 - thumb_func_start sub_80852C0 -sub_80852C0: @ 80852C0 + thumb_func_start LavaridgeGymB1FWarpExitEffect_3 +LavaridgeGymB1FWarpExitEffect_3: @ 80852C0 push {r4,lr} adds r2, r0, 0 adds r4, r1, 0 @@ -3502,10 +3503,10 @@ _08085308: bx r1 .align 2, 0 _08085310: .4byte gSprites - thumb_func_end sub_80852C0 + thumb_func_end LavaridgeGymB1FWarpExitEffect_3 - thumb_func_start sub_8085314 -sub_8085314: @ 8085314 + thumb_func_start LavaridgeGymB1FWarpExitEffect_4 +LavaridgeGymB1FWarpExitEffect_4: @ 8085314 push {lr} adds r0, r1, 0 bl ObjectEventClearHeldMovementIfFinished @@ -3517,7 +3518,7 @@ sub_8085314: @ 8085314 strb r0, [r1, 0x6] bl ScriptContext2_Disable bl UnfreezeObjectEvents - ldr r0, _08085348 @ =sub_80851E8 + ldr r0, _08085348 @ =Task_LavaridgeGymB1FWarpExit bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 @@ -3528,8 +3529,8 @@ _0808533E: bx r1 .align 2, 0 _08085344: .4byte gPlayerAvatar -_08085348: .4byte sub_80851E8 - thumb_func_end sub_8085314 +_08085348: .4byte Task_LavaridgeGymB1FWarpExit + thumb_func_end LavaridgeGymB1FWarpExitEffect_4 thumb_func_start FldEff_LavaridgeGymWarp FldEff_LavaridgeGymWarp: @ 808534C @@ -3580,8 +3581,8 @@ _080853A8: .4byte gFieldEffectObjectTemplatePointers _080853AC: .4byte gSprites thumb_func_end FldEff_LavaridgeGymWarp - thumb_func_start sub_80853B0 -sub_80853B0: @ 80853B0 + thumb_func_start SpriteCB_LavaridgeGymWarp +SpriteCB_LavaridgeGymWarp: @ 80853B0 push {lr} adds r2, r0, 0 adds r0, 0x3F @@ -3596,28 +3597,28 @@ sub_80853B0: @ 80853B0 _080853C8: pop {r0} bx r0 - thumb_func_end sub_80853B0 + thumb_func_end SpriteCB_LavaridgeGymWarp - thumb_func_start sub_80853CC -sub_80853CC: @ 80853CC + thumb_func_start StartLavaridgeGym1FWarp +StartLavaridgeGym1FWarp: @ 80853CC push {lr} adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 - ldr r0, _080853E0 @ =sub_80853E4 + ldr r0, _080853E0 @ =Task_LavaridgeGym1FWarp bl CreateTask pop {r0} bx r0 .align 2, 0 -_080853E0: .4byte sub_80853E4 - thumb_func_end sub_80853CC +_080853E0: .4byte Task_LavaridgeGym1FWarp + thumb_func_end StartLavaridgeGym1FWarp - thumb_func_start sub_80853E4 -sub_80853E4: @ 80853E4 + thumb_func_start Task_LavaridgeGym1FWarp +Task_LavaridgeGym1FWarp: @ 80853E4 push {r4-r6,lr} lsls r0, 24 lsrs r0, 24 - ldr r6, _0808542C @ =gUnknown_83CC0CC + ldr r6, _0808542C @ =sLavaridgeGym1FWarpEffectFuncs ldr r2, _08085430 @ =gTasks ldr r5, _08085434 @ =gPlayerAvatar lsls r1, r0, 2 @@ -3651,15 +3652,15 @@ _080853F8: pop {r0} bx r0 .align 2, 0 -_0808542C: .4byte gUnknown_83CC0CC +_0808542C: .4byte sLavaridgeGym1FWarpEffectFuncs _08085430: .4byte gTasks _08085434: .4byte gPlayerAvatar _08085438: .4byte gObjectEvents _0808543C: .4byte gSprites - thumb_func_end sub_80853E4 + thumb_func_end Task_LavaridgeGym1FWarp - thumb_func_start sub_8085440 -sub_8085440: @ 8085440 + thumb_func_start LavaridgeGym1FWarpEffect_1 +LavaridgeGym1FWarpEffect_1: @ 8085440 push {r4,r5,lr} adds r5, r0, 0 adds r4, r1, 0 @@ -3681,10 +3682,10 @@ sub_8085440: @ 8085440 bx r1 .align 2, 0 _0808546C: .4byte gPlayerAvatar - thumb_func_end sub_8085440 + thumb_func_end LavaridgeGym1FWarpEffect_1 - thumb_func_start sub_8085470 -sub_8085470: @ 8085470 + thumb_func_start LavaridgeGym1FWarpEffect_2 +LavaridgeGym1FWarpEffect_2: @ 8085470 push {r4-r6,lr} adds r5, r0, 0 adds r4, r1, 0 @@ -3743,10 +3744,10 @@ _080854E4: pop {r4-r6} pop {r1} bx r1 - thumb_func_end sub_8085470 + thumb_func_end LavaridgeGym1FWarpEffect_2 - thumb_func_start sub_80854EC -sub_80854EC: @ 80854EC + thumb_func_start LavaridgeGym1FWarpEffect_3 +LavaridgeGym1FWarpEffect_3: @ 80854EC push {r4,lr} adds r3, r0, 0 adds r4, r1, 0 @@ -3775,10 +3776,10 @@ _08085516: bx r1 .align 2, 0 _08085520: .4byte gSprites - thumb_func_end sub_80854EC + thumb_func_end LavaridgeGym1FWarpEffect_3 - thumb_func_start sub_8085524 -sub_8085524: @ 8085524 + thumb_func_start LavaridgeGym1FWarpEffect_4 +LavaridgeGym1FWarpEffect_4: @ 8085524 push {r4,lr} adds r4, r0, 0 movs r0, 0x31 @@ -3796,10 +3797,10 @@ _08085542: pop {r4} pop {r1} bx r1 - thumb_func_end sub_8085524 + thumb_func_end LavaridgeGym1FWarpEffect_4 - thumb_func_start sub_808554C -sub_808554C: @ 808554C + thumb_func_start LavaridgeGym1FWarpEffect_5 +LavaridgeGym1FWarpEffect_5: @ 808554C push {lr} ldr r0, _0808558C @ =gPaletteFade ldrb r1, [r0, 0x7] @@ -3814,11 +3815,11 @@ sub_808554C: @ 808554C bne _08085584 bl WarpIntoMap ldr r1, _08085590 @ =gFieldCallback - ldr r0, _08085594 @ =sub_8084454 + ldr r0, _08085594 @ =FieldCB_FallWarpExit str r0, [r1] ldr r0, _08085598 @ =CB2_LoadMap bl SetMainCallback2 - ldr r0, _0808559C @ =sub_80853E4 + ldr r0, _0808559C @ =Task_LavaridgeGym1FWarp bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 @@ -3830,10 +3831,10 @@ _08085584: .align 2, 0 _0808558C: .4byte gPaletteFade _08085590: .4byte gFieldCallback -_08085594: .4byte sub_8084454 +_08085594: .4byte FieldCB_FallWarpExit _08085598: .4byte CB2_LoadMap -_0808559C: .4byte sub_80853E4 - thumb_func_end sub_808554C +_0808559C: .4byte Task_LavaridgeGym1FWarp + thumb_func_end LavaridgeGym1FWarpEffect_5 thumb_func_start FldEff_PopOutOfAsh FldEff_PopOutOfAsh: @ 80855A0 @@ -3884,8 +3885,8 @@ _080855FC: .4byte gFieldEffectObjectTemplatePointers _08085600: .4byte gSprites thumb_func_end FldEff_PopOutOfAsh - thumb_func_start sub_8085604 -sub_8085604: @ 8085604 + thumb_func_start SpriteCB_PopOutOfAsh +SpriteCB_PopOutOfAsh: @ 8085604 push {lr} adds r2, r0, 0 adds r0, 0x3F @@ -3900,29 +3901,29 @@ sub_8085604: @ 8085604 _0808561C: pop {r0} bx r0 - thumb_func_end sub_8085604 + thumb_func_end SpriteCB_PopOutOfAsh - thumb_func_start sub_8085620 -sub_8085620: @ 8085620 + thumb_func_start StartEscapeRopeFieldEffect +StartEscapeRopeFieldEffect: @ 8085620 push {lr} bl ScriptContext2_Enable bl FreezeObjectEvents - ldr r0, _08085638 @ =sub_808563C + ldr r0, _08085638 @ =Task_DoEscapeRopeFieldEffect movs r1, 0x50 bl CreateTask pop {r0} bx r0 .align 2, 0 -_08085638: .4byte sub_808563C - thumb_func_end sub_8085620 +_08085638: .4byte Task_DoEscapeRopeFieldEffect + thumb_func_end StartEscapeRopeFieldEffect - thumb_func_start sub_808563C -sub_808563C: @ 808563C + thumb_func_start Task_DoEscapeRopeFieldEffect +Task_DoEscapeRopeFieldEffect: @ 808563C push {lr} adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 - ldr r3, _08085664 @ =gUnknown_83CC0E0 + ldr r3, _08085664 @ =gEscapeRopeFieldEffectFuncs ldr r2, _08085668 @ =gTasks lsls r0, r1, 2 adds r0, r1 @@ -3937,12 +3938,12 @@ sub_808563C: @ 808563C pop {r0} bx r0 .align 2, 0 -_08085664: .4byte gUnknown_83CC0E0 +_08085664: .4byte gEscapeRopeFieldEffectFuncs _08085668: .4byte gTasks - thumb_func_end sub_808563C + thumb_func_end Task_DoEscapeRopeFieldEffect - thumb_func_start sub_808566C -sub_808566C: @ 808566C + thumb_func_start EscapeRopeFieldEffect_Step0 +EscapeRopeFieldEffect_Step0: @ 808566C push {r4,r5,lr} adds r4, r0, 0 ldrh r0, [r4, 0x8] @@ -3959,10 +3960,10 @@ sub_808566C: @ 808566C pop {r4,r5} pop {r0} bx r0 - thumb_func_end sub_808566C + thumb_func_end EscapeRopeFieldEffect_Step0 - thumb_func_start sub_8085690 -sub_8085690: @ 8085690 + thumb_func_start EscapeRopeFieldEffect_Step1 +EscapeRopeFieldEffect_Step1: @ 8085690 push {r4-r6,lr} adds r5, r0, 0 ldr r0, _080856D4 @ =gPlayerAvatar @@ -4038,11 +4039,11 @@ _08085702: bl sub_80555E0 bl WarpIntoMap ldr r1, _0808575C @ =gFieldCallback - ldr r0, _08085760 @ =sub_80859D4 + ldr r0, _08085760 @ =FieldCallback_EscapeRopeExit str r0, [r1] ldr r0, _08085764 @ =CB2_LoadMap bl SetMainCallback2 - ldr r0, _08085768 @ =sub_808563C + ldr r0, _08085768 @ =Task_DoEscapeRopeFieldEffect bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 @@ -4054,10 +4055,10 @@ _08085750: .align 2, 0 _08085758: .4byte gPaletteFade _0808575C: .4byte gFieldCallback -_08085760: .4byte sub_80859D4 +_08085760: .4byte FieldCallback_EscapeRopeExit _08085764: .4byte CB2_LoadMap -_08085768: .4byte sub_808563C - thumb_func_end sub_8085690 +_08085768: .4byte Task_DoEscapeRopeFieldEffect + thumb_func_end EscapeRopeFieldEffect_Step1 thumb_func_start sub_808576C sub_808576C: @ 808576C @@ -4386,8 +4387,8 @@ _080859C4: bx r1 thumb_func_end sub_80858A4 - thumb_func_start sub_80859D4 -sub_80859D4: @ 80859D4 + thumb_func_start FieldCallback_EscapeRopeExit +FieldCallback_EscapeRopeExit: @ 80859D4 push {lr} bl Overworld_PlaySpecialMapMusic bl pal_fill_for_maplights @@ -4408,7 +4409,7 @@ sub_80859D4: @ 80859D4 movs r2, 0x20 orrs r1, r2 strb r1, [r0, 0x1] - ldr r0, _08085A20 @ =sub_8085A24 + ldr r0, _08085A20 @ =Task_DoEscapeRopeExitFieldEffect movs r1, 0 bl CreateTask pop {r0} @@ -4417,16 +4418,16 @@ sub_80859D4: @ 80859D4 _08085A14: .4byte gFieldCallback _08085A18: .4byte gObjectEvents _08085A1C: .4byte gPlayerAvatar -_08085A20: .4byte sub_8085A24 - thumb_func_end sub_80859D4 +_08085A20: .4byte Task_DoEscapeRopeExitFieldEffect + thumb_func_end FieldCallback_EscapeRopeExit - thumb_func_start sub_8085A24 -sub_8085A24: @ 8085A24 + thumb_func_start Task_DoEscapeRopeExitFieldEffect +Task_DoEscapeRopeExitFieldEffect: @ 8085A24 push {lr} adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 - ldr r3, _08085A4C @ =gUnknown_83CC0F0 + ldr r3, _08085A4C @ =sEscapeRopeExitEffectFuncs ldr r2, _08085A50 @ =gTasks lsls r0, r1, 2 adds r0, r1 @@ -4441,12 +4442,12 @@ sub_8085A24: @ 8085A24 pop {r0} bx r0 .align 2, 0 -_08085A4C: .4byte gUnknown_83CC0F0 +_08085A4C: .4byte sEscapeRopeExitEffectFuncs _08085A50: .4byte gTasks - thumb_func_end sub_8085A24 + thumb_func_end Task_DoEscapeRopeExitFieldEffect - thumb_func_start sub_8085A54 -sub_8085A54: @ 8085A54 + thumb_func_start EscapeRopeExitFieldEffect_Step0 +EscapeRopeExitFieldEffect_Step0: @ 8085A54 push {r4,lr} adds r4, r0, 0 bl IsWeatherNotFadingIn @@ -4466,10 +4467,10 @@ _08085A78: pop {r4} pop {r0} bx r0 - thumb_func_end sub_8085A54 + thumb_func_end EscapeRopeExitFieldEffect_Step0 - thumb_func_start sub_8085A80 -sub_8085A80: @ 8085A80 + thumb_func_start EscapeRopeExitFieldEffect_Step1 +EscapeRopeExitFieldEffect_Step1: @ 8085A80 push {r4-r7,lr} sub sp, 0x8 adds r4, r0, 0 @@ -4566,7 +4567,7 @@ _08085B10: strb r0, [r6, 0x3] bl ScriptContext2_Disable bl UnfreezeObjectEvents - ldr r0, _08085B60 @ =sub_8085A24 + ldr r0, _08085B60 @ =Task_DoEscapeRopeExitFieldEffect bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 @@ -4577,28 +4578,28 @@ _08085B58: pop {r0} bx r0 .align 2, 0 -_08085B60: .4byte sub_8085A24 - thumb_func_end sub_8085A80 +_08085B60: .4byte Task_DoEscapeRopeExitFieldEffect + thumb_func_end EscapeRopeExitFieldEffect_Step1 thumb_func_start CreateTeleportFieldEffectTask CreateTeleportFieldEffectTask: @ 8085B64 push {lr} - ldr r0, _08085B74 @ =sub_8085B78 + ldr r0, _08085B74 @ =Task_DoTeleportFieldEffect movs r1, 0 bl CreateTask pop {r0} bx r0 .align 2, 0 -_08085B74: .4byte sub_8085B78 +_08085B74: .4byte Task_DoTeleportFieldEffect thumb_func_end CreateTeleportFieldEffectTask - thumb_func_start sub_8085B78 -sub_8085B78: @ 8085B78 + thumb_func_start Task_DoTeleportFieldEffect +Task_DoTeleportFieldEffect: @ 8085B78 push {lr} adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 - ldr r3, _08085BA0 @ =gUnknown_83CC0F8 + ldr r3, _08085BA0 @ =sTeleportEffectFuncs ldr r2, _08085BA4 @ =gTasks lsls r0, r1, 2 adds r0, r1 @@ -4613,12 +4614,12 @@ sub_8085B78: @ 8085B78 pop {r0} bx r0 .align 2, 0 -_08085BA0: .4byte gUnknown_83CC0F8 +_08085BA0: .4byte sTeleportEffectFuncs _08085BA4: .4byte gTasks - thumb_func_end sub_8085B78 + thumb_func_end Task_DoTeleportFieldEffect - thumb_func_start sub_8085BA8 -sub_8085BA8: @ 8085BA8 + thumb_func_start TeleportFieldEffectTask1 +TeleportFieldEffectTask1: @ 8085BA8 push {r4,lr} adds r4, r0, 0 bl ScriptContext2_Enable @@ -4634,10 +4635,10 @@ sub_8085BA8: @ 8085BA8 pop {r4} pop {r0} bx r0 - thumb_func_end sub_8085BA8 + thumb_func_end TeleportFieldEffectTask1 - thumb_func_start sub_8085BD0 -sub_8085BD0: @ 8085BD0 + thumb_func_start TeleportFieldEffectTask2 +TeleportFieldEffectTask2: @ 8085BD0 push {r4,r5,lr} sub sp, 0x8 adds r4, r0, 0 @@ -4707,10 +4708,10 @@ _08085C4A: _08085C54: .4byte gUnknown_83CC108 _08085C58: .4byte gPlayerAvatar _08085C5C: .4byte gObjectEvents - thumb_func_end sub_8085BD0 + thumb_func_end TeleportFieldEffectTask2 - thumb_func_start sub_8085C60 -sub_8085C60: @ 8085C60 + thumb_func_start TeleportFieldEffectTask3 +TeleportFieldEffectTask3: @ 8085C60 push {r4,r5,lr} sub sp, 0x8 adds r4, r0, 0 @@ -4813,10 +4814,10 @@ _08085D24: .4byte gUnknown_83CC108 _08085D28: .4byte gPlayerAvatar _08085D2C: .4byte gObjectEvents _08085D30: .4byte gSprites - thumb_func_end sub_8085C60 + thumb_func_end TeleportFieldEffectTask3 - thumb_func_start sub_8085D34 -sub_8085D34: @ 8085D34 + thumb_func_start TeleportFieldEffectTask4 +TeleportFieldEffectTask4: @ 8085D34 push {lr} ldr r0, _08085D74 @ =gPaletteFade ldrb r1, [r0, 0x7] @@ -4834,9 +4835,9 @@ sub_8085D34: @ 8085D34 ldr r0, _08085D78 @ =CB2_LoadMap bl SetMainCallback2 ldr r1, _08085D7C @ =gFieldCallback - ldr r0, _08085D80 @ =mapldr_08085D88 + ldr r0, _08085D80 @ =FieldCallback_TeleportIn str r0, [r1] - ldr r0, _08085D84 @ =sub_8085B78 + ldr r0, _08085D84 @ =Task_DoTeleportFieldEffect bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 @@ -4848,12 +4849,12 @@ _08085D70: _08085D74: .4byte gPaletteFade _08085D78: .4byte CB2_LoadMap _08085D7C: .4byte gFieldCallback -_08085D80: .4byte mapldr_08085D88 -_08085D84: .4byte sub_8085B78 - thumb_func_end sub_8085D34 +_08085D80: .4byte FieldCallback_TeleportIn +_08085D84: .4byte Task_DoTeleportFieldEffect + thumb_func_end TeleportFieldEffectTask4 - thumb_func_start mapldr_08085D88 -mapldr_08085D88: @ 8085D88 + thumb_func_start FieldCallback_TeleportIn +FieldCallback_TeleportIn: @ 8085D88 push {lr} bl Overworld_PlaySpecialMapMusic bl pal_fill_for_maplights @@ -4875,7 +4876,7 @@ mapldr_08085D88: @ 8085D88 orrs r1, r2 strb r1, [r0, 0x1] bl CameraObjectReset2 - ldr r0, _08085DD8 @ =sub_8085DDC + ldr r0, _08085DD8 @ =Task_DoTeleportInFieldEffect movs r1, 0 bl CreateTask pop {r0} @@ -4884,16 +4885,16 @@ mapldr_08085D88: @ 8085D88 _08085DCC: .4byte gFieldCallback _08085DD0: .4byte gObjectEvents _08085DD4: .4byte gPlayerAvatar -_08085DD8: .4byte sub_8085DDC - thumb_func_end mapldr_08085D88 +_08085DD8: .4byte Task_DoTeleportInFieldEffect + thumb_func_end FieldCallback_TeleportIn - thumb_func_start sub_8085DDC -sub_8085DDC: @ 8085DDC + thumb_func_start Task_DoTeleportInFieldEffect +Task_DoTeleportInFieldEffect: @ 8085DDC push {lr} adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 - ldr r3, _08085E04 @ =gUnknown_83CC110 + ldr r3, _08085E04 @ =sTeleportInEffectFuncs ldr r2, _08085E08 @ =gTasks lsls r0, r1, 2 adds r0, r1 @@ -4908,12 +4909,12 @@ sub_8085DDC: @ 8085DDC pop {r0} bx r0 .align 2, 0 -_08085E04: .4byte gUnknown_83CC110 +_08085E04: .4byte sTeleportInEffectFuncs _08085E08: .4byte gTasks - thumb_func_end sub_8085DDC + thumb_func_end Task_DoTeleportInFieldEffect - thumb_func_start sub_8085E0C -sub_8085E0C: @ 8085E0C + thumb_func_start TeleportInFieldEffectTask1 +TeleportInFieldEffectTask1: @ 8085E0C push {r4-r6,lr} adds r6, r0, 0 bl IsWeatherNotFadingIn @@ -4979,10 +4980,10 @@ _08085E88: .4byte gPlayerAvatar _08085E8C: .4byte gSprites _08085E90: .4byte gSpriteCoordOffsetY _08085E94: .4byte gObjectEvents - thumb_func_end sub_8085E0C + thumb_func_end TeleportInFieldEffectTask1 - thumb_func_start sub_8085E98 -sub_8085E98: @ 8085E98 + thumb_func_start TeleportInFieldEffectTask2 +TeleportInFieldEffectTask2: @ 8085E98 push {r4-r7,lr} sub sp, 0x8 adds r4, r0, 0 @@ -5112,10 +5113,10 @@ _08085F92: pop {r4-r7} pop {r0} bx r0 - thumb_func_end sub_8085E98 + thumb_func_end TeleportInFieldEffectTask2 - thumb_func_start sub_8085F9C -sub_8085F9C: @ 8085F9C + thumb_func_start TeleportInFieldEffectTask3 +TeleportInFieldEffectTask3: @ 8085F9C push {r4,r5,lr} sub sp, 0x8 adds r4, r0, 0 @@ -5162,7 +5163,7 @@ sub_8085F9C: @ 8085F9C bl ScriptContext2_Disable bl CameraObjectReset1 bl UnfreezeObjectEvents - ldr r0, _08086024 @ =sub_8085DDC + ldr r0, _08086024 @ =Task_DoTeleportInFieldEffect bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 @@ -5176,8 +5177,8 @@ _08086010: _08086018: .4byte gUnknown_83CC108 _0808601C: .4byte gPlayerAvatar _08086020: .4byte gObjectEvents -_08086024: .4byte sub_8085DDC - thumb_func_end sub_8085F9C +_08086024: .4byte Task_DoTeleportInFieldEffect + thumb_func_end TeleportInFieldEffectTask3 thumb_func_start FldEff_FieldMoveShowMon FldEff_FieldMoveShowMon: @ 8086028 @@ -5185,17 +5186,17 @@ FldEff_FieldMoveShowMon: @ 8086028 bl GetCurrentMapType lsls r0, 24 lsrs r0, 24 - bl is_light_level_1_2_3_5_or_6 + bl IsMapTypeOutdoors lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 bne _08086048 - ldr r0, _08086044 @ =sub_80860E0 + ldr r0, _08086044 @ =Task_ShowMon_Outdoors b _0808604A .align 2, 0 -_08086044: .4byte sub_80860E0 +_08086044: .4byte Task_ShowMon_Outdoors _08086048: - ldr r0, _08086078 @ =sub_8086468 + ldr r0, _08086078 @ =Task_ShowMon_Indoors _0808604A: movs r1, 0xFF bl CreateTask @@ -5219,7 +5220,7 @@ _0808604A: pop {r1} bx r1 .align 2, 0 -_08086078: .4byte sub_8086468 +_08086078: .4byte Task_ShowMon_Indoors _0808607C: .4byte gFieldEffectArguments _08086080: .4byte gTasks thumb_func_end FldEff_FieldMoveShowMon @@ -5267,13 +5268,13 @@ _080860D8: .4byte gFieldEffectArguments _080860DC: .4byte gPlayerParty thumb_func_end FldEff_FieldMoveShowMonInit - thumb_func_start sub_80860E0 -sub_80860E0: @ 80860E0 + thumb_func_start Task_ShowMon_Outdoors +Task_ShowMon_Outdoors: @ 80860E0 push {lr} adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 - ldr r3, _08086108 @ =gUnknown_83CC11C + ldr r3, _08086108 @ =sShowMonOutdoorsEffectFuncs ldr r2, _0808610C @ =gTasks lsls r0, r1, 2 adds r0, r1 @@ -5288,12 +5289,12 @@ sub_80860E0: @ 80860E0 pop {r0} bx r0 .align 2, 0 -_08086108: .4byte gUnknown_83CC11C +_08086108: .4byte sShowMonOutdoorsEffectFuncs _0808610C: .4byte gTasks - thumb_func_end sub_80860E0 + thumb_func_end Task_ShowMon_Outdoors - thumb_func_start sub_8086110 -sub_8086110: @ 8086110 + thumb_func_start ShowMonEffect_Outdoors_1 +ShowMonEffect_Outdoors_1: @ 8086110 push {r4,lr} adds r4, r0, 0 movs r0, 0x48 @@ -5326,7 +5327,7 @@ sub_8086110: @ 8086110 ldrh r1, [r4, 0x10] movs r0, 0x4A bl SetGpuReg - ldr r0, _0808617C @ =sub_80863C0 + ldr r0, _0808617C @ =VBlankCB_ShowMonEffect_Outdoors bl SetVBlankCallback ldrh r0, [r4, 0x8] adds r0, 0x1 @@ -5338,11 +5339,11 @@ sub_8086110: @ 8086110 _08086170: .4byte gMain _08086174: .4byte 0x0000f0f1 _08086178: .4byte 0x00005051 -_0808617C: .4byte sub_80863C0 - thumb_func_end sub_8086110 +_0808617C: .4byte VBlankCB_ShowMonEffect_Outdoors + thumb_func_end ShowMonEffect_Outdoors_1 - thumb_func_start sub_8086180 -sub_8086180: @ 8086180 + thumb_func_start ShowMonEffect_Outdoors_2 +ShowMonEffect_Outdoors_2: @ 8086180 push {r4-r6,lr} mov r6, r8 push {r6} @@ -5397,10 +5398,10 @@ sub_8086180: @ 8086180 _080861F0: .4byte gUnknown_83CB5F0 _080861F4: .4byte 0x05000200 _080861F8: .4byte gUnknown_83CB7F0 - thumb_func_end sub_8086180 + thumb_func_end ShowMonEffect_Outdoors_2 - thumb_func_start sub_80861FC -sub_80861FC: @ 80861FC + thumb_func_start ShowMonEffect_Outdoors_3 +ShowMonEffect_Outdoors_3: @ 80861FC push {r4-r7,lr} adds r3, r0, 0 ldrh r0, [r3, 0x12] @@ -5473,10 +5474,10 @@ _08086278: .align 2, 0 _08086280: .4byte gSprites _08086284: .4byte sub_80868C0 - thumb_func_end sub_80861FC + thumb_func_end ShowMonEffect_Outdoors_3 - thumb_func_start sub_8086288 -sub_8086288: @ 8086288 + thumb_func_start ShowMonEffect_Outdoors_4 +ShowMonEffect_Outdoors_4: @ 8086288 push {lr} adds r3, r0, 0 ldrh r0, [r3, 0x12] @@ -5501,10 +5502,10 @@ _080862AE: bx r0 .align 2, 0 _080862B4: .4byte gSprites - thumb_func_end sub_8086288 + thumb_func_end ShowMonEffect_Outdoors_4 - thumb_func_start sub_80862B8 -sub_80862B8: @ 80862B8 + thumb_func_start ShowMonEffect_Outdoors_5 +ShowMonEffect_Outdoors_5: @ 80862B8 push {r4,lr} adds r3, r0, 0 ldrh r0, [r3, 0x12] @@ -5550,10 +5551,10 @@ _08086306: pop {r4} pop {r0} bx r0 - thumb_func_end sub_80862B8 + thumb_func_end ShowMonEffect_Outdoors_5 - thumb_func_start sub_808630C -sub_808630C: @ 808630C + thumb_func_start ShowMonEffect_Outdoors_6 +ShowMonEffect_Outdoors_6: @ 808630C push {r4,lr} sub sp, 0x4 adds r4, r0, 0 @@ -5589,10 +5590,10 @@ sub_808630C: @ 808630C bx r0 .align 2, 0 _08086354: .4byte 0x05000200 - thumb_func_end sub_808630C + thumb_func_end ShowMonEffect_Outdoors_6 - thumb_func_start sub_8086358 -sub_8086358: @ 8086358 + thumb_func_start ShowMonEffect_Outdoors_7 +ShowMonEffect_Outdoors_7: @ 8086358 push {r4,lr} sub sp, 0x4 adds r4, r0, 0 @@ -5620,10 +5621,10 @@ sub_8086358: @ 8086358 ldrh r1, [r4, 0x26] lsls r1, 24 lsrs r1, 24 - bl sub_8083A5C + bl FreeResourcesAndDestroySprite movs r0, 0x6 bl FieldEffectActiveListRemove - ldr r0, _080863BC @ =sub_80860E0 + ldr r0, _080863BC @ =Task_ShowMon_Outdoors bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 @@ -5634,14 +5635,14 @@ sub_8086358: @ 8086358 bx r0 .align 2, 0 _080863B8: .4byte gSprites -_080863BC: .4byte sub_80860E0 - thumb_func_end sub_8086358 +_080863BC: .4byte Task_ShowMon_Outdoors + thumb_func_end ShowMonEffect_Outdoors_7 - thumb_func_start sub_80863C0 -sub_80863C0: @ 80863C0 + thumb_func_start VBlankCB_ShowMonEffect_Outdoors +VBlankCB_ShowMonEffect_Outdoors: @ 80863C0 push {r4,lr} sub sp, 0x4 - ldr r0, _08086420 @ =sub_80860E0 + ldr r0, _08086420 @ =Task_ShowMon_Outdoors bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 @@ -5679,9 +5680,9 @@ sub_80863C0: @ 80863C0 pop {r0} bx r0 .align 2, 0 -_08086420: .4byte sub_80860E0 +_08086420: .4byte Task_ShowMon_Outdoors _08086424: .4byte gTasks - thumb_func_end sub_80863C0 + thumb_func_end VBlankCB_ShowMonEffect_Outdoors thumb_func_start sub_8086428 sub_8086428: @ 8086428 @@ -5717,13 +5718,13 @@ _08086460: .4byte gUnknown_83CB810 _08086464: .4byte 0x0000013f thumb_func_end sub_8086428 - thumb_func_start sub_8086468 -sub_8086468: @ 8086468 + thumb_func_start Task_ShowMon_Indoors +Task_ShowMon_Indoors: @ 8086468 push {lr} adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 - ldr r3, _08086490 @ =gUnknown_83CC138 + ldr r3, _08086490 @ =sShowMonIndoorsEffectFuncs ldr r2, _08086494 @ =gTasks lsls r0, r1, 2 adds r0, r1 @@ -5738,12 +5739,12 @@ sub_8086468: @ 8086468 pop {r0} bx r0 .align 2, 0 -_08086490: .4byte gUnknown_83CC138 +_08086490: .4byte sShowMonIndoorsEffectFuncs _08086494: .4byte gTasks - thumb_func_end sub_8086468 + thumb_func_end Task_ShowMon_Indoors - thumb_func_start sub_8086498 -sub_8086498: @ 8086498 + thumb_func_start ShowMonEffect_Indoors_1 +ShowMonEffect_Indoors_1: @ 8086498 push {r4,lr} adds r4, r0, 0 ldrh r1, [r4, 0xA] @@ -5757,7 +5758,7 @@ sub_8086498: @ 8086498 ldr r1, _080864CC @ =gMain ldr r1, [r1, 0xC] bl StoreWordInTwoHalfwords - ldr r0, _080864D0 @ =sub_80866E0 + ldr r0, _080864D0 @ =VBlankCB_ShowMonEffect_Indoors bl SetVBlankCallback ldrh r0, [r4, 0x8] adds r0, 0x1 @@ -5767,11 +5768,11 @@ sub_8086498: @ 8086498 bx r0 .align 2, 0 _080864CC: .4byte gMain -_080864D0: .4byte sub_80866E0 - thumb_func_end sub_8086498 +_080864D0: .4byte VBlankCB_ShowMonEffect_Indoors + thumb_func_end ShowMonEffect_Indoors_1 - thumb_func_start sub_80864D4 -sub_80864D4: @ 80864D4 + thumb_func_start ShowMonEffect_Indoors_2 +ShowMonEffect_Indoors_2: @ 80864D4 push {r4-r6,lr} mov r6, r9 mov r5, r8 @@ -5829,10 +5830,10 @@ sub_80864D4: @ 80864D4 _08086548: .4byte gUnknown_83CBA90 _0808654C: .4byte 0x05000200 _08086550: .4byte gUnknown_83CBB10 - thumb_func_end sub_80864D4 + thumb_func_end ShowMonEffect_Indoors_2 - thumb_func_start sub_8086554 -sub_8086554: @ 8086554 + thumb_func_start ShowMonEffect_Indoors_3 +ShowMonEffect_Indoors_3: @ 8086554 push {r4,lr} adds r4, r0, 0 bl sub_8086738 @@ -5879,10 +5880,10 @@ _080865A6: _080865B4: .4byte 0x00002878 _080865B8: .4byte gSprites _080865BC: .4byte sub_80868C0 - thumb_func_end sub_8086554 + thumb_func_end ShowMonEffect_Indoors_3 - thumb_func_start sub_80865C0 -sub_80865C0: @ 80865C0 + thumb_func_start ShowMonEffect_Indoors_4 +ShowMonEffect_Indoors_4: @ 80865C0 push {r4,lr} adds r4, r0, 0 bl sub_8086728 @@ -5906,10 +5907,10 @@ _080865E4: bx r0 .align 2, 0 _080865EC: .4byte gSprites - thumb_func_end sub_80865C0 + thumb_func_end ShowMonEffect_Indoors_4 - thumb_func_start sub_80865F0 -sub_80865F0: @ 80865F0 + thumb_func_start ShowMonEffect_Indoors_5 +ShowMonEffect_Indoors_5: @ 80865F0 push {r4,r5,lr} adds r4, r0, 0 bl sub_8086728 @@ -5937,10 +5938,10 @@ sub_80865F0: @ 80865F0 bx r0 .align 2, 0 _0808662C: .4byte 0x0000ffff - thumb_func_end sub_80865F0 + thumb_func_end ShowMonEffect_Indoors_5 - thumb_func_start sub_8086630 -sub_8086630: @ 8086630 + thumb_func_start ShowMonEffect_Indoors_6 +ShowMonEffect_Indoors_6: @ 8086630 push {r4,lr} adds r4, r0, 0 bl sub_8086728 @@ -5956,10 +5957,10 @@ _0808664A: pop {r4} pop {r0} bx r0 - thumb_func_end sub_8086630 + thumb_func_end ShowMonEffect_Indoors_6 - thumb_func_start sub_8086650 -sub_8086650: @ 8086650 + thumb_func_start ShowMonEffect_Indoors_7 +ShowMonEffect_Indoors_7: @ 8086650 push {r4,lr} sub sp, 0x8 adds r4, r0, 0 @@ -6003,10 +6004,10 @@ sub_8086650: @ 8086650 ldrh r1, [r4, 0x26] lsls r1, 24 lsrs r1, 24 - bl sub_8083A5C + bl FreeResourcesAndDestroySprite movs r0, 0x6 bl FieldEffectActiveListRemove - ldr r0, _080866DC @ =sub_8086468 + ldr r0, _080866DC @ =Task_ShowMon_Indoors bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 @@ -6018,14 +6019,14 @@ sub_8086650: @ 8086650 .align 2, 0 _080866D4: .4byte 0x05000200 _080866D8: .4byte gSprites -_080866DC: .4byte sub_8086468 - thumb_func_end sub_8086650 +_080866DC: .4byte Task_ShowMon_Indoors + thumb_func_end ShowMonEffect_Indoors_7 - thumb_func_start sub_80866E0 -sub_80866E0: @ 80866E0 + thumb_func_start VBlankCB_ShowMonEffect_Indoors +VBlankCB_ShowMonEffect_Indoors: @ 80866E0 push {r4,lr} sub sp, 0x4 - ldr r0, _08086720 @ =sub_8086468 + ldr r0, _08086720 @ =Task_ShowMon_Indoors bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 @@ -6051,9 +6052,9 @@ sub_80866E0: @ 80866E0 pop {r0} bx r0 .align 2, 0 -_08086720: .4byte sub_8086468 +_08086720: .4byte Task_ShowMon_Indoors _08086724: .4byte gTasks - thumb_func_end sub_80866E0 + thumb_func_end VBlankCB_ShowMonEffect_Indoors thumb_func_start sub_8086728 sub_8086728: @ 8086728 @@ -6249,7 +6250,7 @@ sub_8086860: @ 8086860 str r4, [sp] movs r4, 0 str r4, [sp, 0x4] - bl sub_80839D4 + bl CreateMonSprite_FieldMove lsls r0, 24 lsrs r0, 24 lsls r2, r0, 4 diff --git a/asm/field_weather.s b/asm/field_weather.s index 7960543a6..4462fec77 100644 --- a/asm/field_weather.s +++ b/asm/field_weather.s @@ -2723,8 +2723,8 @@ _0807B0AC: .4byte gUnknown_2038684 _0807B0B0: .4byte gUnknown_20386A4 thumb_func_end sub_807B084 - thumb_func_start sub_807B0B4 -sub_807B0B4: @ 807B0B4 + thumb_func_start ResetPreservedPalettesInWeather +ResetPreservedPalettesInWeather: @ 807B0B4 ldr r1, _0807B0BC @ =gUnknown_20386A4 ldr r0, _0807B0C0 @ =gUnknown_83C2CC0 str r0, [r1] @@ -2732,7 +2732,7 @@ sub_807B0B4: @ 807B0B4 .align 2, 0 _0807B0BC: .4byte gUnknown_20386A4 _0807B0C0: .4byte gUnknown_83C2CC0 - thumb_func_end sub_807B0B4 + thumb_func_end ResetPreservedPalettesInWeather thumb_func_start sub_807B0C4 sub_807B0C4: @ 807B0C4 diff --git a/asm/overworld.s b/asm/overworld.s index f18086650..930b94de1 100644 --- a/asm/overworld.s +++ b/asm/overworld.s @@ -115,8 +115,8 @@ _08054C8A: _08054C9C: .4byte sWhiteOutMoneyLossBadgeFlagIDs thumb_func_end CountBadgesForOverworldWhiteOutLossCalculation - thumb_func_start sub_8054CA0 -sub_8054CA0: @ 8054CA0 + thumb_func_start Overworld_ResetStateAfterFly +Overworld_ResetStateAfterFly: @ 8054CA0 push {lr} bl ResetInitialPlayerAvatarState movs r0, 0x83 @@ -152,7 +152,7 @@ _08054CF8: .4byte 0x00000805 _08054CFC: .4byte 0x00000806 _08054D00: .4byte 0x00000808 _08054D04: .4byte 0x0000404d - thumb_func_end sub_8054CA0 + thumb_func_end Overworld_ResetStateAfterFly thumb_func_start Overworld_ResetStateAfterTeleport Overworld_ResetStateAfterTeleport: @ 8054D08 @@ -1242,12 +1242,12 @@ sub_805550C: @ 805550C lsls r0, 24 lsrs r5, r0, 24 adds r0, r4, 0 - bl is_light_level_1_2_3_5_or_6 + bl IsMapTypeOutdoors lsls r0, 24 cmp r0, 0 beq _08055590 adds r0, r5, 0 - bl is_light_level_1_2_3_5_or_6 + bl IsMapTypeOutdoors lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 @@ -1764,7 +1764,7 @@ sub_8055920: @ 8055920 bl sub_8054F68 ldr r0, _0805599C @ =gMapHeader ldrb r0, [r0, 0x17] - bl is_light_level_1_2_3_5_or_6 + bl IsMapTypeOutdoors adds r4, r0, 0 lsls r4, 24 lsrs r4, 24 @@ -1815,7 +1815,7 @@ sub_80559A8: @ 80559A8 bl sub_8054F68 ldr r0, _080559E0 @ =gMapHeader ldrb r0, [r0, 0x17] - bl is_light_level_1_2_3_5_or_6 + bl IsMapTypeOutdoors bl TrySetMapSaveWarpStatus bl SetSav1WeatherFromCurrMapHeader bl sub_805610C @@ -2933,8 +2933,8 @@ sub_80561B4: @ 80561B4 _080561D4: .4byte gUnknown_2031DB4 thumb_func_end sub_80561B4 - thumb_func_start is_light_level_1_2_3_5_or_6 -is_light_level_1_2_3_5_or_6: @ 80561D8 + thumb_func_start IsMapTypeOutdoors +IsMapTypeOutdoors: @ 80561D8 push {lr} lsls r0, 24 lsrs r0, 24 @@ -2956,7 +2956,7 @@ _080561F6: _080561F8: pop {r1} bx r1 - thumb_func_end is_light_level_1_2_3_5_or_6 + thumb_func_end IsMapTypeOutdoors thumb_func_start Overworld_MapTypeAllowsTeleportAndFly Overworld_MapTypeAllowsTeleportAndFly: @ 80561FC diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index 115c9567b..79966093f 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -1801,7 +1801,7 @@ mapldr_0808C6D8: @ 808C6D8 bl _call_via_r4 adds r0, r5, 0 bl SetVBlankCallback - bl sub_807DC00 + bl FadeInFromBlack pop {r4,r5} pop {r0} bx r0 diff --git a/data/event_object_movement.s b/data/event_object_movement.s index 17adf3ef4..5920835c4 100644 --- a/data/event_object_movement.s +++ b/data/event_object_movement.s @@ -7028,7 +7028,7 @@ gUnknown_83A5EBC:: @ 83A5EBC .4byte gUnknown_83A5EA4 gUnknown_83A5EC0:: @ 83A5EC0 - spr_template 0xFFFF, 0x100D, gObjectEventBaseOam_16x16, gUnknown_83A5EBC, gUnknown_83A5E7C, gDummySpriteAffineAnimTable, sub_8085604 + spr_template 0xFFFF, 0x100D, gObjectEventBaseOam_16x16, gUnknown_83A5EBC, gUnknown_83A5E7C, gDummySpriteAffineAnimTable, SpriteCB_PopOutOfAsh gUnknown_83A5ED8:: @ 83A5ED8 obj_pal gUnknown_839C588, 0x100D @@ -7052,7 +7052,7 @@ gUnknown_83A5F20:: @ 83A5F20 .4byte gUnknown_83A5F08 gUnknown_83A5F24:: @ 83A5F24 - spr_template 0xFFFF, 0x100D, gObjectEventBaseOam_16x16, gUnknown_83A5F20, gUnknown_83A5EE0, gDummySpriteAffineAnimTable, sub_80853B0 + spr_template 0xFFFF, 0x100D, gObjectEventBaseOam_16x16, gUnknown_83A5F20, gUnknown_83A5EE0, gDummySpriteAffineAnimTable, SpriteCB_LavaridgeGymWarp gUnknown_83A5F3C:: @ 83A5F3C overworld_frame gUnknown_839CAA8, 2, 4, 0 diff --git a/data/field_effect.s b/data/field_effect.s index 0c76e9d0d..607ae6142 100644 --- a/data/field_effect.s +++ b/data/field_effect.s @@ -59,7 +59,7 @@ sFldEffScrcmdTable:: @ 83CBE30 dataptr .4byte FieldEffectCmd_loadtiles_callnative .4byte FieldEffectCmd_loadfadedpal_callnative -gUnknown_83CBE50:: @ 83CBE50 oamdata +gNewGameBirchOamAttributes:: @ 83CBE50 oamdata .4byte 0xc0000000, 0x00000000 gOamData_83CBE58:: @ 83CBE58 oamdata @@ -71,7 +71,7 @@ gOamData_83CBE60:: @ 83CBE60 oamdata gUnknown_83CBE68:: @ 83CBE68 sprite_frames obj_frame_tiles gUnknown_83CA770, 0x0800 -gUnknown_83CBE70:: @ 83CBE70 sprite_palette +gNewGameBirchObjectPaletteInfo:: @ 83CBE70 sprite_palette obj_pal gUnknown_83CAF70, 4102 gUnknown_83CBE78:: @ 83CBE78 @@ -82,8 +82,8 @@ gUnknown_83CBE78:: @ 83CBE78 gUnknown_83CBE80:: @ 83CBE80 dataptr .4byte gUnknown_83CBE78 -gUnknown_83CBE84:: @ 83CBE84 spr_template - spr_template 65535, 4102, gUnknown_83CBE50, gUnknown_83CBE80, gUnknown_83CBE68, gDummySpriteAffineAnimTable, SpriteCallbackDummy +gNewGameBirchObjectTemplate:: @ 83CBE84 spr_template + spr_template 65535, 4102, gNewGameBirchOamAttributes, gUnknown_83CBE80, gUnknown_83CBE68, gDummySpriteAffineAnimTable, SpriteCallbackDummy gUnknown_83CBE9C:: @ 83CBE9C sprite_palette obj_pal gUnknown_83CAFB0, 4103 @@ -168,27 +168,27 @@ gUnknown_83CBF88:: @ 83CBF88 spr_template spr_template 65535, 4103, gOamData_83CBE58, gUnknown_83CBF54, gUnknown_83CBEB4, gDummySpriteAffineAnimTable, SpriteCB_PokeballGlow gUnknown_83CBFA0:: @ 83CBFA0 spr_template - spr_template 65535, 4103, gOamData_83CBEAC, gUnknown_83CBF54, gUnknown_83CBEBC, gDummySpriteAffineAnimTable, sub_808424C + spr_template 65535, 4103, gOamData_83CBEAC, gUnknown_83CBF54, gUnknown_83CBEBC, gDummySpriteAffineAnimTable, SpriteCB_PokecenterMonitor gUnknown_83CBFB8:: @ 83CBFB8 spr_template - spr_template 65535, 4112, gOamData_83CBE60, gUnknown_83CBF84, gUnknown_83CBEDC, gDummySpriteAffineAnimTable, sub_80842AC + spr_template 65535, 4112, gOamData_83CBE60, gUnknown_83CBF84, gUnknown_83CBEDC, gDummySpriteAffineAnimTable, SpriteCB_HallOfFameMonitor .align 2 -gUnknown_83CBFD0:: @ 83CBFD0 dataptr +sPokecenterHealTaskCBTable:: @ 83CBFD0 dataptr .4byte PokecenterHealEffect_0 .4byte PokecenterHealEffect_1 - .4byte sub_8083C78 + .4byte PokecenterHealEffect_2 .4byte PokecenterHealEffect_3 .align 2 -gUnknown_83CBFE0:: @ 83CBFE0 dataptr +sHallOfFameRecordTaskCBTable:: @ 83CBFE0 dataptr .4byte HallOfFameRecordEffect_0 - .4byte sub_8083D74 - .4byte sub_8083DAC - .4byte sub_8083DD4 + .4byte HallOfFameRecordEffect_1 + .4byte HallOfFameRecordEffect_2 + .4byte HallOfFameRecordEffect_3 .align 2 -gUnknown_83CBFF0:: @ 83CBFF0 dataptr +sPokeballGlowSpriteCBTable:: @ 83CBFF0 dataptr .4byte PokeballGlowEffect_0 .4byte PokeballGlowEffect_1 .4byte PokeballGlowEffect_2 @@ -196,10 +196,15 @@ gUnknown_83CBFF0:: @ 83CBFF0 dataptr .4byte PokeballGlowEffect_4 .4byte PokeballGlowEffect_5 .4byte PokeballGlowEffect_6 - .4byte nullsub_50 + .4byte PokeballGlowEffect_7 gUnknown_83CC010:: @ 83CC010 data16 - .2byte 0x0000, 0x0000, 0x0006, 0x0000, 0x0000, 0x0004, 0x0006, 0x0004, 0x0000, 0x0008, 0x0006, 0x0008 + .2byte 0, 0 + .2byte 6, 0 + .2byte 0, 4 + .2byte 6, 4 + .2byte 0, 8 + .2byte 6, 8 gUnknown_83CC028:: @ 83CC028 data8 .byte 0x10, 0x0c, 0x08, 0x00 @@ -211,23 +216,23 @@ gUnknown_83CC030:: @ 83CC030 data8 .byte 0x00, 0x00, 0x00, 0x00 .align 2 -gUnknown_83CC034:: @ 83CC034 dataptr - .4byte sub_80844BC - .4byte sub_8084564 - .4byte sub_8084580 - .4byte sub_80845F4 - .4byte sub_80846AC - .4byte sub_80846C8 - .4byte sub_8084708 +sFallWarpEffectCBPtrs:: @ 83CC034 dataptr + .4byte FallWarpEffect_1 + .4byte FallWarpEffect_2 + .4byte FallWarpEffect_3 + .4byte FallWarpEffect_4 + .4byte FallWarpEffect_5 + .4byte FallWarpEffect_6 + .4byte FallWarpEffect_7 .align 2 -gUnknown_83CC050:: @ 83CC050 dataptr - .4byte sub_80847F8 - .4byte sub_8084820 - .4byte sub_8084890 - .4byte sub_80848B4 - .4byte sub_80848C4 - .4byte sub_80848E8 +sEscalatorWarpFieldEffectFuncs:: @ 83CC050 dataptr + .4byte EscalatorWarpEffect_1 + .4byte EscalatorWarpEffect_2 + .4byte EscalatorWarpEffect_3 + .4byte EscalatorWarpEffect_4 + .4byte EscalatorWarpEffect_5 + .4byte EscalatorWarpEffect_6 .align 2 gUnknown_83CC068:: @ 83CC068 dataptr @@ -240,91 +245,91 @@ gUnknown_83CC068:: @ 83CC068 dataptr .4byte sub_8084C3C .align 2 -gUnknown_83CC084:: @ 83CC084 dataptr - .4byte sub_8084D24 +sUseWaterfallFieldEffectFuncs:: @ 83CC084 dataptr + .4byte waterfall_0_setup .4byte waterfall_1_do_anim_probably .4byte waterfall_2_wait_anim_finish_probably - .4byte sub_8084DA4 - .4byte sub_8084DCC + .4byte waterfall_3_move_player_probably + .4byte waterfall_4_wait_player_move_probably .align 2 -gUnknown_83CC098:: @ 83CC098 dataptr +sDiveFieldEffectFuncPtrs:: @ 83CC098 dataptr .4byte dive_1_lock .4byte dive_2_unknown .4byte dive_3_unknown .align 2 -gUnknown_83CC0A4:: @ 83CC0A4 dataptr - .4byte sub_8084FA0 - .4byte sub_8084FD8 - .4byte sub_808500C - .4byte sub_8085058 - .4byte sub_808514C - .4byte sub_8085168 +sLavaridgeGymB1FWarpEffectFuncs:: @ 83CC0A4 dataptr + .4byte LavaridgeGymB1FWarpEffect_1 + .4byte LavaridgeGymB1FWarpEffect_2 + .4byte LavaridgeGymB1FWarpEffect_3 + .4byte LavaridgeGymB1FWarpEffect_4 + .4byte LavaridgeGymB1FWarpEffect_5 + .4byte LavaridgeGymB1FWarpEffect_6 .align 2 -gUnknown_83CC0BC:: @ 83CC0BC dataptr - .4byte sub_8085244 - .4byte sub_8085274 - .4byte sub_80852C0 - .4byte sub_8085314 +sLavaridgeGymB1FWarpExitEffectFuncs:: @ 83CC0BC dataptr + .4byte LavaridgeGymB1FWarpExitEffect_1 + .4byte LavaridgeGymB1FWarpExitEffect_2 + .4byte LavaridgeGymB1FWarpExitEffect_3 + .4byte LavaridgeGymB1FWarpExitEffect_4 .align 2 -gUnknown_83CC0CC:: @ 83CC0CC dataptr - .4byte sub_8085440 - .4byte sub_8085470 - .4byte sub_80854EC - .4byte sub_8085524 - .4byte sub_808554C +sLavaridgeGym1FWarpEffectFuncs:: @ 83CC0CC dataptr + .4byte LavaridgeGym1FWarpEffect_1 + .4byte LavaridgeGym1FWarpEffect_2 + .4byte LavaridgeGym1FWarpEffect_3 + .4byte LavaridgeGym1FWarpEffect_4 + .4byte LavaridgeGym1FWarpEffect_5 .align 2 -gUnknown_83CC0E0:: @ 83CC0E0 dataptr - .4byte sub_808566C - .4byte sub_8085690 +gEscapeRopeFieldEffectFuncs:: @ 83CC0E0 dataptr + .4byte EscapeRopeFieldEffect_Step0 + .4byte EscapeRopeFieldEffect_Step1 gUnknown_83CC0E8:: @ 83CC0E8 data8 .byte 0x01, 0x03, 0x04, 0x02, 0x01 .align 2 -gUnknown_83CC0F0:: @ 83CC0F0 dataptr - .4byte sub_8085A54 - .4byte sub_8085A80 +sEscapeRopeExitEffectFuncs:: @ 83CC0F0 dataptr + .4byte EscapeRopeExitFieldEffect_Step0 + .4byte EscapeRopeExitFieldEffect_Step1 .align 2 -gUnknown_83CC0F8:: @ 83CC0F8 dataptr - .4byte sub_8085BA8 - .4byte sub_8085BD0 - .4byte sub_8085C60 - .4byte sub_8085D34 +sTeleportEffectFuncs:: @ 83CC0F8 dataptr + .4byte TeleportFieldEffectTask1 + .4byte TeleportFieldEffectTask2 + .4byte TeleportFieldEffectTask3 + .4byte TeleportFieldEffectTask4 gUnknown_83CC108:: @ 83CC108 data8 .byte 0x01, 0x03, 0x04, 0x02, 0x01 .align 2 -gUnknown_83CC110:: @ 83CC110 dataptr - .4byte sub_8085E0C - .4byte sub_8085E98 - .4byte sub_8085F9C +sTeleportInEffectFuncs:: @ 83CC110 dataptr + .4byte TeleportInFieldEffectTask1 + .4byte TeleportInFieldEffectTask2 + .4byte TeleportInFieldEffectTask3 .align 2 -gUnknown_83CC11C:: @ 83CC11C dataptr - .4byte sub_8086110 - .4byte sub_8086180 - .4byte sub_80861FC - .4byte sub_8086288 - .4byte sub_80862B8 - .4byte sub_808630C - .4byte sub_8086358 +sShowMonOutdoorsEffectFuncs:: @ 83CC11C dataptr + .4byte ShowMonEffect_Outdoors_1 + .4byte ShowMonEffect_Outdoors_2 + .4byte ShowMonEffect_Outdoors_3 + .4byte ShowMonEffect_Outdoors_4 + .4byte ShowMonEffect_Outdoors_5 + .4byte ShowMonEffect_Outdoors_6 + .4byte ShowMonEffect_Outdoors_7 .align 2 -gUnknown_83CC138:: @ 83CC138 dataptr - .4byte sub_8086498 - .4byte sub_80864D4 - .4byte sub_8086554 - .4byte sub_80865C0 - .4byte sub_80865F0 - .4byte sub_8086630 - .4byte sub_8086650 +sShowMonIndoorsEffectFuncs:: @ 83CC138 dataptr + .4byte ShowMonEffect_Indoors_1 + .4byte ShowMonEffect_Indoors_2 + .4byte ShowMonEffect_Indoors_3 + .4byte ShowMonEffect_Indoors_4 + .4byte ShowMonEffect_Indoors_5 + .4byte ShowMonEffect_Indoors_6 + .4byte ShowMonEffect_Indoors_7 .align 2 gUnknown_83CC154:: @ 83CC154 dataptr diff --git a/data/field_effect_scripts.s b/data/field_effect_scripts.s index fd8681fbf..49f14d251 100644 --- a/data/field_effect_scripts.s +++ b/data/field_effect_scripts.s @@ -174,7 +174,7 @@ gFldEffScript_DeepSandFootprints:: @ 81D988B gFldEffScript_PokecenterHeal:: @ 81D9895 loadfadedpal gUnknown_83CBE9C - loadfadedpal_callnative gUnknown_83A5340, sub_8083B8C + loadfadedpal_callnative gUnknown_83A5340, FldEff_PokecenterHeal end gFldEffScript_UseSecretPowerTree:: @ 81D98A4 @@ -244,7 +244,7 @@ gFldEffScript_HotSpringsWater:: @ 81D990A end gFldEffScript_UseWaterfall:: @ 81D9914 - callnative oei_waterfall + callnative FldEff_UseWaterfall end gFldEffScript_UseDive:: @ 81D991A @@ -314,7 +314,7 @@ gFldEffScript_PcturnOn:: @ 81D9976 gFldEffScript_HallOfFameRecord:: @ 81D9977 loadfadedpal gUnknown_83CBE9C - loadfadedpal_callnative gUnknown_83CBEA4, sub_8083CE0 + loadfadedpal_callnative gUnknown_83CBEA4, FldEff_HallOfFameRecord end gFldEffScript_UseTeleport:: @ 81D9986 diff --git a/include/field_effect.h b/include/field_effect.h index 3e30fa897..7e980bd22 100644 --- a/include/field_effect.h +++ b/include/field_effect.h @@ -13,16 +13,16 @@ bool8 FieldEffectActiveListContains(u8 id); void sub_80B69DC(void); void CreateTeleportFieldEffectTask(void); void FieldEffectActiveListRemove(u8 id); -void sub_8085620(void); +void StartEscapeRopeFieldEffect(void); void FieldEffectStop(struct Sprite *sprite, u8 id); u8 CreateTrainerSprite(u8 trainerSpriteID, s16 x, s16 y, u8 subpriority, u8 *buffer); -void sub_8084454(void); -void sub_8084784(u8 a0, u8 a1); -void sub_8084F2C(u8 a0); -void sub_80853CC(u8 a0); +void FieldCB_FallWarpExit(void); +void StartEscalatorWarp(u8 a0, u8 a1); +void StartLavaridgeGymB1FWarp(u8 a0); +void StartLavaridgeGym1FWarp(u8 a0); void sub_8083598(u8 a0); -void sub_8083A5C(struct Sprite * sprite, u8 spriteId); -u8 sub_8083970(u16 species, s16 x, s16 y, bool8 unused); -void sub_80842C8(void); +void FreeResourcesAndDestroySprite(struct Sprite * sprite, u8 spriteId); +u8 CreateMonSprite_PicBox(u16 species, s16 x, s16 y, bool8 unused); +void ReturnToFieldFromFlyMapSelect(void); #endif //GUARD_FIELD_EFFECTS_H diff --git a/include/field_fadetransition.h b/include/field_fadetransition.h index 6683f5e2e..ada9acbb7 100644 --- a/include/field_fadetransition.h +++ b/include/field_fadetransition.h @@ -14,7 +14,7 @@ void sub_807E500(void); void sub_807DF64(void); void sub_807DC18(void); void FieldCallback_ReturnToEventScript2(void); -void sub_807DC00(void); +void FadeInFromBlack(void); void FadeTransition_FadeInOnReturnToStartMenu(void); void sub_807DCE4(void); diff --git a/include/field_screen_effect.h b/include/field_screen_effect.h index ca7625782..2537ca94d 100644 --- a/include/field_screen_effect.h +++ b/include/field_screen_effect.h @@ -9,7 +9,7 @@ void sub_80B0244(void); void sub_807E3EC(void); void DoOutwardBarnDoorWipe(void); void Task_BarnDoorWipe(u8 taskId); -void sub_807DC00(void); +void FadeInFromBlack(void); void sub_807F5F0(void); #endif // GUARD_FIELD_SCREEN_EFFECT_H diff --git a/include/overworld.h b/include/overworld.h index f0a168052..a1cd888a9 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -87,7 +87,7 @@ void player_avatar_init_params_reset(void); void Overworld_SetFlashLevel(s32 a1); u8 Overworld_GetFlashLevel(void); -void sub_8085524(u16); +void LavaridgeGym1FWarpEffect_4(u16); void Overworld_SetSavedMusic(u16); void Overworld_ChangeMusicToDefault(void); diff --git a/src/field_fadetransition.c b/src/field_fadetransition.c index 16f691a2d..738dbd7a0 100644 --- a/src/field_fadetransition.c +++ b/src/field_fadetransition.c @@ -84,7 +84,7 @@ static void sub_807DBAC(void) } } -void sub_807DC00(void) +void FadeInFromBlack(void) { palette_bg_faded_fill_black(); FadeScreen(0, 0); @@ -138,7 +138,7 @@ void sub_807DCE4(void) { ScriptContext2_Enable(); Overworld_PlaySpecialMapMusic(); - sub_807DC00(); + FadeInFromBlack(); CreateTask(task0A_nop_for_a_while, 10); } @@ -155,14 +155,14 @@ void FieldCallback_ReturnToEventScript2(void) { ScriptContext2_Enable(); Overworld_PlaySpecialMapMusic(); - sub_807DC00(); + FadeInFromBlack(); CreateTask(task0A_asap_script_env_2_enable_and_set_ctx_running, 10); } void sub_807DD44(void) { ScriptContext2_Enable(); - sub_807DC00(); + FadeInFromBlack(); CreateTask(task0A_asap_script_env_2_enable_and_set_ctx_running, 10); } @@ -280,7 +280,7 @@ static void sub_807DF4C(bool8 a0) if (!a0) pal_fill_for_maplights(); else - sub_807DC00(); + FadeInFromBlack(); } void sub_807DF64(void) @@ -485,7 +485,7 @@ static void Task_WaitFadeAndCreateStartMenuTask(u8 taskId) void FadeTransition_FadeInOnReturnToStartMenu(void) { - sub_807DC00(); + FadeInFromBlack(); CreateTask(Task_WaitFadeAndCreateStartMenuTask, 80); ScriptContext2_Enable(); } @@ -510,7 +510,7 @@ void sub_807E3EC(void) { ScriptContext2_Enable(); Overworld_PlaySpecialMapMusic(); - sub_807DC00(); + FadeInFromBlack(); CreateTask(task_mpl_807E3C8, 10); } @@ -580,25 +580,25 @@ void sub_807E524(void) void DoFallWarp(void) { DoDiveWarp(); - gFieldCallback = sub_8084454; + gFieldCallback = FieldCB_FallWarpExit; } void sub_807E560(u8 a0) { ScriptContext2_Enable(); - sub_8084784(a0, 10); + StartEscalatorWarp(a0, 10); } void sub_807E57C(void) { ScriptContext2_Enable(); - sub_8084F2C(10); + StartLavaridgeGymB1FWarp(10); } void sub_807E58C(void) { ScriptContext2_Enable(); - sub_80853CC(10); + StartLavaridgeGym1FWarp(10); } void sub_807E59C(void) diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c index 0a3224cfa..39d7a2312 100644 --- a/src/field_screen_effect.c +++ b/src/field_screen_effect.c @@ -430,7 +430,7 @@ static void sub_807F45C(u8 taskId) CopyWindowToVram(windowId, 1); RemoveWindow(windowId); palette_bg_faded_fill_black(); - sub_807DC00(); + FadeInFromBlack(); ++gTasks[taskId].data[0]; break; case 3: diff --git a/src/item_use.c b/src/item_use.c index f5e880f98..ec8155eb1 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -170,7 +170,7 @@ static void sub_80A103C(u8 taskId) static void sub_80A1084(void) { - sub_807DC00(); + FadeInFromBlack(); CreateTask(sub_80A109C, 8); } @@ -223,7 +223,7 @@ static bool8 sub_80A1194(void) { FreezeObjectEvents(); ScriptContext2_Enable(); - sub_807DC00(); + FadeInFromBlack(); CreateTask(sub_80A11C0, 10); gUnknown_2031DE0 = 0; return TRUE; @@ -646,7 +646,7 @@ static void sub_80A1C08(u8 taskId) void sub_80A1C44(u8 taskId) { ResetInitialPlayerAvatarState(); - sub_8085620(); + StartEscapeRopeFieldEffect(); DestroyTask(taskId); } diff --git a/src/map_preview_screen.c b/src/map_preview_screen.c index bb748ae91..b5c68acf9 100644 --- a/src/map_preview_screen.c +++ b/src/map_preview_screen.c @@ -490,7 +490,7 @@ static void sub_80F83D0(u8 taskId) case 1: if (!IsDma3ManagerBusyWithBgCopy()) { - sub_807DC00(); + FadeInFromBlack(); data[0]++; } break; diff --git a/src/party_menu.c b/src/party_menu.c index 6f2feaaad..d28abea8c 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -4044,7 +4044,7 @@ static void Task_HandleFieldMoveExitAreaYesNoInput(u8 taskId) bool8 FieldCallback_PrepareFadeInFromMenu(void) { - sub_807DC00(); + FadeInFromBlack(); CreateTask(Task_FieldMoveWaitForFade, 8); return TRUE; } @@ -6361,7 +6361,7 @@ void ChoosePartyMonByMenuType(u8 menuType) static bool8 CB2_FadeFromPartyMenu(void) { - sub_807DC00(); + FadeInFromBlack(); CreateTask(Task_PartyMenuWaitForFade, 10); return TRUE; } diff --git a/src/player_pc.c b/src/player_pc.c index 928676844..8943e0796 100644 --- a/src/player_pc.c +++ b/src/player_pc.c @@ -347,7 +347,7 @@ static void CB2_ReturnFromDepositMenu(void) DrawDialogueFrame(0, TRUE); taskId = CreateTask(Task_ReturnToItemStorageSubmenu, 0); Task_CreateItemStorageSubmenu(taskId, 1); - sub_807DC00(); + FadeInFromBlack(); } static void Task_PlayerPcWithdrawItem(u8 taskId) @@ -376,7 +376,7 @@ static void CB2_ReturnFromWithdrawMenu(void) DrawDialogueFrame(0, TRUE); taskId = CreateTask(Task_ReturnToItemStorageSubmenu, 0); Task_CreateItemStorageSubmenu(taskId, 0); - sub_807DC00(); + FadeInFromBlack(); } static void Task_WithdrawItem_WaitFadeAndGoToItemStorage(u8 taskId) @@ -590,7 +590,7 @@ static void CB2_ReturnToMailbox(void) Task_DrawMailboxPcMenu(taskId); else DestroyTask(taskId); - sub_807DC00(); + FadeInFromBlack(); } static void CB2_SetCbToReturnToMailbox(void) @@ -705,7 +705,7 @@ static void CB2_ReturnToMailboxPc_UpdateScrollVariables(void) Task_DrawMailboxPcMenu(taskId); else DestroyTask(taskId); - sub_807DC00(); + FadeInFromBlack(); } void Mailbox_ReturnToMailListAfterDeposit(void) diff --git a/src/region_map.c b/src/region_map.c index 4335b7d96..0c2d511bf 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -4395,5 +4395,5 @@ static void sub_80C527C(u16 mapsec) { warp1_set_2(sMapsecToSpawn[idx][0], sMapsecToSpawn[idx][1], -1); } - sub_80842C8(); + ReturnToFieldFromFlyMapSelect(); } diff --git a/src/script_menu.c b/src/script_menu.c index 72ff1dc9e..12e89832c 100644 --- a/src/script_menu.c +++ b/src/script_menu.c @@ -1022,7 +1022,7 @@ static void Task_ScriptShowMonPic(u8 taskId) case 1: break; case 2: - sub_8083A5C(&gSprites[task->data[2]], task->data[2]); + FreeResourcesAndDestroySprite(&gSprites[task->data[2]], task->data[2]); task->data[0]++; break; case 3: @@ -1040,7 +1040,7 @@ bool8 ScriptMenu_ShowPokemonPic(u16 species, u8 x, u8 y) return TRUE; if (FindTaskIdByFunc(Task_ScriptShowMonPic) != 0xFF) return FALSE; - spriteId = sub_8083970(species, 8 * x + 40, 8 * y + 40, FALSE); + spriteId = CreateMonSprite_PicBox(species, 8 * x + 40, 8 * y + 40, FALSE); taskId = CreateTask(Task_ScriptShowMonPic, 80); gTasks[taskId].data[5] = CreateWindowFromRect(x, y, 8, 8); gTasks[taskId].data[0] = 0; @@ -1082,7 +1082,7 @@ void sub_809D424(void) case 0: case 1: case 2: - sub_8083A5C(&gSprites[task->data[2]], task->data[2]); + FreeResourcesAndDestroySprite(&gSprites[task->data[2]], task->data[2]); DestroyScriptMenuWindow(task->data[5]); DestroyTask(taskId); break; @@ -1183,7 +1183,7 @@ void QLPlaybackCB_DestroyScriptMenuMonPicSprites(void) { data = gTasks[taskId].data; if (data[0] < 2) - sub_8083A5C(&gSprites[data[2]], data[2]); + FreeResourcesAndDestroySprite(&gSprites[data[2]], data[2]); } taskId = FindTaskIdByFunc(Task_WaitMuseumFossilPic); if (taskId != 0xFF) diff --git a/src/shop.c b/src/shop.c index efbbbd979..5a9ee6b95 100644 --- a/src/shop.c +++ b/src/shop.c @@ -336,7 +336,7 @@ static void Task_GoToBuyOrSellMenu(u8 taskId) static void MapPostLoadHook_ReturnToShopMenu(void) { - sub_807DC00(); + FadeInFromBlack(); CreateTask(Task_ReturnToShopMenu, 8); } From 0d88e2d1de7135d7cc3d724398fa8d9022831511 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 27 Feb 2020 14:08:26 -0500 Subject: [PATCH 03/26] through MultiplyPaletteRGBComponents --- asm/field_effect.s | 413 ---------------------- asm/field_weather.s | 6 +- data/field_effect.s | 79 ----- include/data.h | 2 +- include/field_weather.h | 2 + ld_script.txt | 1 + src/data/pokemon_graphics/palette_table.h | 3 +- src/field_effect.c | 212 ++++++++++- 8 files changed, 220 insertions(+), 498 deletions(-) diff --git a/asm/field_effect.s b/asm/field_effect.s index 957d70a93..a484b28ac 100644 --- a/asm/field_effect.s +++ b/asm/field_effect.s @@ -5,419 +5,6 @@ .text - thumb_func_start CreateTrainerSprite -CreateTrainerSprite: @ 8083858 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x18 - adds r4, r0, 0 - adds r5, r1, 0 - adds r6, r2, 0 - mov r9, r3 - ldr r7, [sp, 0x34] - lsls r4, 24 - lsls r5, 16 - lsrs r5, 16 - lsls r6, 16 - lsrs r6, 16 - mov r0, r9 - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - lsrs r4, 21 - ldr r3, _080838E0 @ =gTrainerFrontPicPaletteTable - mov r8, r3 - add r8, r4 - mov r0, r8 - adds r1, r7, 0 - bl LoadCompressedSpritePaletteOverrideBuffer - ldr r0, _080838E4 @ =gTrainerFrontPicTable - adds r4, r0 - adds r0, r4, 0 - adds r1, r7, 0 - bl LoadCompressedSpriteSheetOverrideBuffer - mov r1, sp - ldrh r0, [r4, 0x6] - movs r2, 0 - strh r0, [r1] - mov r3, r8 - ldrh r0, [r3, 0x4] - strh r0, [r1, 0x2] - ldr r0, _080838E8 @ =gNewGameBirchOamAttributes - str r0, [sp, 0x4] - ldr r0, _080838EC @ =gDummySpriteAnimTable - str r0, [sp, 0x8] - str r2, [sp, 0xC] - ldr r0, _080838F0 @ =gDummySpriteAffineAnimTable - str r0, [sp, 0x10] - ldr r0, _080838F4 @ =SpriteCallbackDummy - str r0, [sp, 0x14] - lsls r5, 16 - asrs r5, 16 - lsls r6, 16 - asrs r6, 16 - mov r0, sp - adds r1, r5, 0 - adds r2, r6, 0 - mov r3, r9 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - add sp, 0x18 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080838E0: .4byte gTrainerFrontPicPaletteTable -_080838E4: .4byte gTrainerFrontPicTable -_080838E8: .4byte gNewGameBirchOamAttributes -_080838EC: .4byte gDummySpriteAnimTable -_080838F0: .4byte gDummySpriteAffineAnimTable -_080838F4: .4byte SpriteCallbackDummy - thumb_func_end CreateTrainerSprite - - thumb_func_start LoadTrainerGfx_TrainerCard -LoadTrainerGfx_TrainerCard: @ 80838F8 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - adds r1, r2, 0 - lsls r4, 24 - lsls r5, 16 - lsrs r5, 16 - ldr r0, _08083928 @ =gTrainerFrontPicTable - lsrs r4, 21 - adds r0, r4, r0 - ldr r0, [r0] - bl LZDecompressVram - ldr r0, _0808392C @ =gTrainerFrontPicPaletteTable - adds r4, r0 - ldr r0, [r4] - adds r1, r5, 0 - movs r2, 0x20 - bl LoadCompressedPalette - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08083928: .4byte gTrainerFrontPicTable -_0808392C: .4byte gTrainerFrontPicPaletteTable - thumb_func_end LoadTrainerGfx_TrainerCard - - thumb_func_start AddNewGameBirchObject -AddNewGameBirchObject: @ 8083930 - push {r4-r6,lr} - adds r4, r0, 0 - adds r5, r1, 0 - adds r6, r2, 0 - lsls r4, 16 - lsrs r4, 16 - lsls r5, 16 - lsrs r5, 16 - lsls r6, 24 - lsrs r6, 24 - ldr r0, _08083968 @ =gNewGameBirchObjectPaletteInfo - bl LoadSpritePalette - ldr r0, _0808396C @ =gNewGameBirchObjectTemplate - lsls r4, 16 - asrs r4, 16 - lsls r5, 16 - asrs r5, 16 - adds r1, r4, 0 - adds r2, r5, 0 - adds r3, r6, 0 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08083968: .4byte gNewGameBirchObjectPaletteInfo -_0808396C: .4byte gNewGameBirchObjectTemplate - thumb_func_end AddNewGameBirchObject - - thumb_func_start CreateMonSprite_PicBox -CreateMonSprite_PicBox: @ 8083970 - push {r4,r5,lr} - sub sp, 0x10 - lsls r0, 16 - lsrs r0, 16 - movs r3, 0x80 - lsls r3, 8 - lsls r1, 16 - asrs r1, 16 - str r1, [sp] - lsls r2, 16 - asrs r2, 16 - str r2, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - ldr r1, _080839C0 @ =gMonPaletteTable - lsls r4, r0, 3 - adds r4, r1 - ldrh r1, [r4, 0x4] - str r1, [sp, 0xC] - movs r1, 0 - adds r2, r3, 0 - movs r3, 0x1 - bl CreateMonPicSprite_HandleDeoxys - lsls r0, 16 - lsrs r5, r0, 16 - ldrh r0, [r4, 0x4] - bl IndexOfSpritePaletteTag - adds r0, 0x10 - lsls r0, 24 - lsrs r0, 24 - bl sub_807B084 - ldr r0, _080839C4 @ =0x0000ffff - cmp r5, r0 - beq _080839C8 - lsls r0, r5, 24 - lsrs r0, 24 - b _080839CA - .align 2, 0 -_080839C0: .4byte gMonPaletteTable -_080839C4: .4byte 0x0000ffff -_080839C8: - movs r0, 0x40 -_080839CA: - add sp, 0x10 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end CreateMonSprite_PicBox - - thumb_func_start CreateMonSprite_FieldMove -CreateMonSprite_FieldMove: @ 80839D4 - push {r4-r6,lr} - mov r6, r10 - mov r5, r9 - mov r4, r8 - push {r4-r6} - sub sp, 0x10 - adds r6, r0, 0 - mov r9, r1 - mov r10, r2 - adds r4, r3, 0 - ldr r5, [sp, 0x2C] - lsls r6, 16 - lsrs r6, 16 - lsls r4, 16 - lsrs r4, 16 - lsls r5, 16 - lsrs r5, 16 - adds r0, r6, 0 - bl GetMonSpritePalStructFromOtIdPersonality - mov r8, r0 - lsls r4, 16 - asrs r4, 16 - str r4, [sp] - lsls r5, 16 - asrs r5, 16 - str r5, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x8] - mov r1, r8 - ldrh r0, [r1, 0x4] - str r0, [sp, 0xC] - adds r0, r6, 0 - mov r1, r9 - mov r2, r10 - movs r3, 0x1 - bl CreateMonPicSprite_HandleDeoxys - lsls r0, 16 - lsrs r4, r0, 16 - mov r1, r8 - ldrh r0, [r1, 0x4] - bl IndexOfSpritePaletteTag - adds r0, 0x10 - lsls r0, 24 - lsrs r0, 24 - bl sub_807B084 - ldr r0, _08083A44 @ =0x0000ffff - cmp r4, r0 - beq _08083A48 - lsls r0, r4, 24 - lsrs r0, 24 - b _08083A4A - .align 2, 0 -_08083A44: .4byte 0x0000ffff -_08083A48: - movs r0, 0x40 -_08083A4A: - add sp, 0x10 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end CreateMonSprite_FieldMove - - thumb_func_start FreeResourcesAndDestroySprite -FreeResourcesAndDestroySprite: @ 8083A5C - push {r4,r5,lr} - adds r4, r0, 0 - lsls r1, 24 - lsrs r5, r1, 24 - bl ResetPreservedPalettesInWeather - ldrb r0, [r4, 0x1] - lsls r0, 30 - cmp r0, 0 - beq _08083A7A - ldrb r0, [r4, 0x3] - lsls r0, 26 - lsrs r0, 27 - bl FreeOamMatrix -_08083A7A: - adds r0, r5, 0 - bl FreeAndDestroyMonPicSprite - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end FreeResourcesAndDestroySprite - - thumb_func_start MultiplyInvertedPaletteRGBComponents -MultiplyInvertedPaletteRGBComponents: @ 8083A88 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - lsls r0, 16 - lsls r1, 24 - lsrs r1, 24 - lsls r2, 24 - lsrs r2, 24 - lsls r3, 24 - lsrs r3, 24 - ldr r4, _08083B0C @ =gPlttBufferUnfaded - lsrs r0, 15 - adds r4, r0, r4 - ldrh r4, [r4] - movs r5, 0x1F - mov r9, r5 - mov r8, r4 - mov r6, r8 - ands r6, r5 - mov r8, r6 - movs r6, 0xF8 - lsls r6, 2 - ands r6, r4 - lsrs r6, 5 - movs r5, 0xF8 - lsls r5, 7 - ands r4, r5 - lsrs r4, 10 - mov r7, r9 - mov r5, r8 - subs r7, r5 - mov r12, r7 - mov r7, r12 - muls r7, r1 - adds r1, r7, 0 - asrs r1, 4 - add r8, r1 - mov r5, r9 - subs r1, r5, r6 - muls r1, r2 - asrs r1, 4 - adds r6, r1 - subs r5, r4 - mov r9, r5 - mov r1, r9 - muls r1, r3 - asrs r1, 4 - adds r4, r1 - mov r7, r8 - lsls r7, 16 - lsls r6, 21 - orrs r6, r7 - lsls r4, 26 - orrs r4, r6 - lsrs r4, 16 - ldr r1, _08083B10 @ =gPlttBufferFaded - adds r0, r1 - strh r4, [r0] - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08083B0C: .4byte gPlttBufferUnfaded -_08083B10: .4byte gPlttBufferFaded - thumb_func_end MultiplyInvertedPaletteRGBComponents - - thumb_func_start MultiplyPaletteRGBComponents -MultiplyPaletteRGBComponents: @ 8083B14 - push {r4-r6,lr} - mov r6, r8 - push {r6} - lsls r0, 16 - lsls r1, 24 - lsrs r1, 24 - lsls r2, 24 - lsrs r2, 24 - lsls r3, 24 - lsrs r3, 24 - ldr r4, _08083B84 @ =gPlttBufferUnfaded - lsrs r0, 15 - adds r4, r0, r4 - ldrh r4, [r4] - movs r5, 0x1F - mov r8, r5 - mov r6, r8 - ands r6, r4 - mov r8, r6 - movs r5, 0xF8 - lsls r5, 2 - ands r5, r4 - lsrs r5, 5 - movs r6, 0xF8 - lsls r6, 7 - ands r4, r6 - lsrs r4, 10 - mov r6, r8 - muls r6, r1 - adds r1, r6, 0 - asrs r1, 4 - mov r6, r8 - subs r6, r1 - adds r1, r5, 0 - muls r1, r2 - asrs r1, 4 - subs r5, r1 - adds r1, r4, 0 - muls r1, r3 - asrs r1, 4 - subs r4, r1 - lsls r6, 16 - lsls r5, 21 - orrs r5, r6 - lsls r4, 26 - orrs r4, r5 - lsrs r4, 16 - ldr r1, _08083B88 @ =gPlttBufferFaded - adds r0, r1 - strh r4, [r0] - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08083B84: .4byte gPlttBufferUnfaded -_08083B88: .4byte gPlttBufferFaded - thumb_func_end MultiplyPaletteRGBComponents - thumb_func_start FldEff_PokecenterHeal FldEff_PokecenterHeal: @ 8083B8C push {r4,lr} diff --git a/asm/field_weather.s b/asm/field_weather.s index 4462fec77..2c7ef2128 100644 --- a/asm/field_weather.s +++ b/asm/field_weather.s @@ -2698,8 +2698,8 @@ _0807B07C: .4byte gUnknown_2037F34 _0807B080: .4byte 0x000006c6 thumb_func_end sub_807B070 - thumb_func_start sub_807B084 -sub_807B084: @ 807B084 + thumb_func_start PreservePaletteInWeather +PreservePaletteInWeather: @ 807B084 push {r4,r5,lr} adds r4, r0, 0 lsls r4, 24 @@ -2721,7 +2721,7 @@ sub_807B084: @ 807B084 _0807B0A8: .4byte gUnknown_83C2CC0 _0807B0AC: .4byte gUnknown_2038684 _0807B0B0: .4byte gUnknown_20386A4 - thumb_func_end sub_807B084 + thumb_func_end PreservePaletteInWeather thumb_func_start ResetPreservedPalettesInWeather ResetPreservedPalettesInWeather: @ 807B0B4 diff --git a/data/field_effect.s b/data/field_effect.s index 607ae6142..d79644860 100644 --- a/data/field_effect.s +++ b/data/field_effect.s @@ -6,85 +6,6 @@ .section .rodata .align 2 -gUnknown_83CA770:: @ 3CA770 4bpp - .incbin "graphics/field_effects/unk_83CA770.4bpp" - -gUnknown_83CAF70:: @ 83CAF70 gbapal - .incbin "graphics/field_effects/unk_83CAF70.gbapal" - -gUnknown_83CAF90:: @ 83CAF90 4bpp - .incbin "graphics/field_effects/unk_83CAF90.4bpp" - -gUnknown_83CAFB0:: @ 83CAFB0 gbapal - .incbin "graphics/field_effects/unk_83CAFB0.gbapal" - -gUnknown_83CAFD0:: @ 83CAFD0 4bpp - .incbin "graphics/field_effects/unk_83CAFD0.4bpp" - -gUnknown_83CB3D0:: @ 83CB3D0 gbapal - .incbin "graphics/field_effects/unk_83CB3D0.gbapal" - -gUnknown_83CB3F0:: @ 83CB3F0 4bpp - .incbin "graphics/field_effects/unk_83CB3F0.4bpp" - -gUnknown_83CB5F0:: @ 83CB5F0 4bpp - .incbin "graphics/field_effects/unk_83CB5F0.4bpp" - -gUnknown_83CB7F0:: @ 83CB7F0 gbapal gUnknown_83CB5F0 - .incbin "graphics/field_effects/unk_83CB7F0.gbapal" - -gUnknown_83CB810:: @ 83CB810 4bpp - .incbin "graphics/field_effects/unk_83CB810.bin" - -gUnknown_83CBA90:: @ 83CBA90 4bpp - .incbin "graphics/field_effects/unk_83CBA90.4bpp" - -gUnknown_83CBB10:: @ 83CBB10 gbapal gUnknown_83CBA90 - .incbin "graphics/field_effects/unk_83CBB10.gbapal" - -gUnknown_83CBB30:: @ 83CBB30 4bpp - .incbin "graphics/field_effects/unk_83CBB30.bin" - -gUnknown_83CBDB0:: - .incbin "graphics/field_effects/unk_83CBDB0.4bpp" - - .align 2 -sFldEffScrcmdTable:: @ 83CBE30 dataptr - .4byte FieldEffectCmd_loadtiles - .4byte FieldEffectCmd_loadfadedpal - .4byte FieldEffectCmd_loadpal - .4byte FieldEffectCmd_callnative - .4byte FieldEffectCmd_end - .4byte FieldEffectCmd_loadgfx_callnative - .4byte FieldEffectCmd_loadtiles_callnative - .4byte FieldEffectCmd_loadfadedpal_callnative - -gNewGameBirchOamAttributes:: @ 83CBE50 oamdata - .4byte 0xc0000000, 0x00000000 - -gOamData_83CBE58:: @ 83CBE58 oamdata - .4byte 0x00000000, 0x00000000 - -gOamData_83CBE60:: @ 83CBE60 oamdata - .4byte 0x40000000, 0x00000000 - -gUnknown_83CBE68:: @ 83CBE68 sprite_frames - obj_frame_tiles gUnknown_83CA770, 0x0800 - -gNewGameBirchObjectPaletteInfo:: @ 83CBE70 sprite_palette - obj_pal gUnknown_83CAF70, 4102 - -gUnknown_83CBE78:: @ 83CBE78 - obj_image_anim_frame 0x0000, 1 - obj_image_anim_end - - .align 2 -gUnknown_83CBE80:: @ 83CBE80 dataptr - .4byte gUnknown_83CBE78 - -gNewGameBirchObjectTemplate:: @ 83CBE84 spr_template - spr_template 65535, 4102, gNewGameBirchOamAttributes, gUnknown_83CBE80, gUnknown_83CBE68, gDummySpriteAffineAnimTable, SpriteCallbackDummy - gUnknown_83CBE9C:: @ 83CBE9C sprite_palette obj_pal gUnknown_83CAFB0, 4103 diff --git a/include/data.h b/include/data.h index f308b044c..90c8e0ace 100644 --- a/include/data.h +++ b/include/data.h @@ -28,7 +28,7 @@ extern const struct MonCoords gMonFrontPicCoords[]; extern const struct CompressedSpriteSheet gMonFrontPicTable[]; extern const struct MonCoords gMonBackPicCoords[]; extern const struct CompressedSpriteSheet gMonBackPicTable[]; -extern const struct CompressedSpritePalette gMonPaletteTable[]; +extern struct CompressedSpritePalette gMonPaletteTable[]; extern const struct CompressedSpritePalette gMonShinyPaletteTable[]; extern const union AnimCmd *const *const gTrainerFrontAnimsPtrTable[]; extern const struct MonCoords gTrainerFrontPicCoords[]; diff --git a/include/field_weather.h b/include/field_weather.h index 3cb17f9e2..7488c8c5a 100644 --- a/include/field_weather.h +++ b/include/field_weather.h @@ -19,5 +19,7 @@ void sub_807B070(void); u8 GetCurrentWeather(void); void FieldWeather_StartFadingOutCreditsMap(u8, u8, u32); void sub_807AA8C(u8 palIdx); +void ResetPreservedPalettesInWeather(void); +void PreservePaletteInWeather(u8 palIdx); #endif // GUARD_WEATHER_H diff --git a/ld_script.txt b/ld_script.txt index 4e4953097..bf1c0a26a 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -445,6 +445,7 @@ SECTIONS { data/cable_club.o(.rodata); src/trainer_see.o(.rodata); src/wild_encounter.o(.rodata); + src/field_effect.o(.rodata); data/field_effect.o(.rodata); src/option_menu.o(.rodata); src/trainer_card.o(.rodata); diff --git a/src/data/pokemon_graphics/palette_table.h b/src/data/pokemon_graphics/palette_table.h index 35edcc76c..bb4f64a07 100644 --- a/src/data/pokemon_graphics/palette_table.h +++ b/src/data/pokemon_graphics/palette_table.h @@ -1,4 +1,5 @@ -const struct CompressedSpritePalette gMonPaletteTable[] = +// A dirty hack because field_effect.c requires this not be const +__attribute__((section(".rodata"))) struct CompressedSpritePalette gMonPaletteTable[] = { SPECIES_PAL(NONE, gMonPalette_CircledQuestionMark), SPECIES_PAL(BULBASAUR, gMonPalette_Bulbasaur), diff --git a/src/field_effect.c b/src/field_effect.c index c9c388966..35a56389a 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -1,16 +1,27 @@ #include "global.h" #include "gflib.h" +#include "data.h" +#include "decompress.h" #include "field_effect.h" #include "field_effect_scripts.h" #include "field_weather.h" #include "overworld.h" #include "quest_log.h" +#include "trainer_pokemon_sprites.h" #define FIELD_EFFECT_COUNT 32 static u8 sFieldEffectActiveList[FIELD_EFFECT_COUNT]; void FieldEffectActiveListAdd(u8 fldeff); +bool8 FieldEffectCmd_loadtiles(const u8 **script, u32 *result); +bool8 FieldEffectCmd_loadfadedpal(const u8 **script, u32 *result); +bool8 FieldEffectCmd_loadpal(const u8 **script, u32 *result); +bool8 FieldEffectCmd_callnative(const u8 **script, u32 *result); +bool8 FieldEffectCmd_end(const u8 **script, u32 *result); +bool8 FieldEffectCmd_loadgfx_callnative(const u8 **script, u32 *result); +bool8 FieldEffectCmd_loadtiles_callnative(const u8 **script, u32 *result); +bool8 FieldEffectCmd_loadfadedpal_callnative(const u8 **script, u32 *result); void FieldEffectScript_LoadTiles(const u8 **script); void FieldEffectScript_LoadFadedPal(const u8 **script); void FieldEffectScript_LoadPal(const u8 **script); @@ -18,7 +29,106 @@ void FieldEffectScript_CallNative(const u8 **script, u32 *result); void FieldEffectFreeTilesIfUnused(u16 tilesTag); void FieldEffectFreePaletteIfUnused(u8 paletteNum); -extern bool8 (*const sFldEffScrcmdTable[])(const u8 **script, u32 *result); +const u16 sNewGameOakObjectSpriteTiles[] = INCBIN_U16("graphics/field_effects/unk_83CA770.4bpp"); +const u16 sNewGameOakObjectPals[] = INCBIN_U16("graphics/field_effects/unk_83CAF70.gbapal"); +const u16 gUnknown_83CAF90[] = INCBIN_U16("graphics/field_effects/unk_83CAF90.4bpp"); +const u16 gUnknown_83CAFB0[] = INCBIN_U16("graphics/field_effects/unk_83CAFB0.gbapal"); +const u16 gUnknown_83CAFD0[] = INCBIN_U16("graphics/field_effects/unk_83CAFD0.4bpp"); +const u16 gUnknown_83CB3D0[] = INCBIN_U16("graphics/field_effects/unk_83CB3D0.gbapal"); +const u16 gUnknown_83CB3F0[] = INCBIN_U16("graphics/field_effects/unk_83CB3F0.4bpp"); +const u16 gUnknown_83CB5F0[] = INCBIN_U16("graphics/field_effects/unk_83CB5F0.4bpp"); +const u16 gUnknown_83CB7F0[] = INCBIN_U16("graphics/field_effects/unk_83CB7F0.gbapal"); +const u16 gUnknown_83CB810[] = INCBIN_U16("graphics/field_effects/unk_83CB810.bin"); +const u16 gUnknown_83CBA90[] = INCBIN_U16("graphics/field_effects/unk_83CBA90.4bpp"); +const u16 gUnknown_83CBB10[] = INCBIN_U16("graphics/field_effects/unk_83CBB10.gbapal"); +const u16 gUnknown_83CBB30[] = INCBIN_U16("graphics/field_effects/unk_83CBB30.bin"); +const u16 gUnknown_83CBDB0[] = INCBIN_U16("graphics/field_effects/unk_83CBDB0.4bpp"); + +bool8 (*const sFldEffScrcmdTable[])(const u8 **script, u32 *result) = { + FieldEffectCmd_loadtiles, + FieldEffectCmd_loadfadedpal, + FieldEffectCmd_loadpal, + FieldEffectCmd_callnative, + FieldEffectCmd_end, + FieldEffectCmd_loadgfx_callnative, + FieldEffectCmd_loadtiles_callnative, + FieldEffectCmd_loadfadedpal_callnative +}; + +const struct OamData gNewGameOakOamAttributes = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = FALSE, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(64x64), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(64x64), + .tileNum = 0x000, + .priority = 0, + .paletteNum = 0x0, + .affineParam = 0 +}; + +const struct OamData gOamData_83CBE58 = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = FALSE, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(8x8), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(8x8), + .tileNum = 0x000, + .priority = 0, + .paletteNum = 0x0, + .affineParam = 0 +}; + +const struct OamData gOamData_83CBE60 = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = FALSE, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(16x16), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(16x16), + .tileNum = 0x000, + .priority = 0, + .paletteNum = 0x0, + .affineParam = 0 +}; + +const struct SpriteFrameImage gNewGameOakObjectSpriteFrames[] = { + {sNewGameOakObjectSpriteTiles, 0x800} +}; + +const struct SpritePalette gNewGameOakObjectPaletteInfo = { + sNewGameOakObjectPals, 4102 +}; + +const union AnimCmd gNewGameOakAnim[] = { + ANIMCMD_FRAME(0, 1), + ANIMCMD_END +}; + +const union AnimCmd *const gNewGameOakAnimTable[] = { + gNewGameOakAnim +}; + +const struct SpriteTemplate gNewGameOakObjectTemplate = { + .tileTag = 0xFFFF, + .paletteTag = 4102, + .oam = &gNewGameOakOamAttributes, + .anims = gNewGameOakAnimTable, + .images = gNewGameOakObjectSpriteFrames, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; u32 FieldEffectStart(u8 fldeff) { @@ -241,3 +351,103 @@ bool8 FieldEffectActiveListContains(u8 fldeff) } return FALSE; } + +u8 CreateTrainerSprite(u8 trainerSpriteID, s16 x, s16 y, u8 subpriority, u8 *buffer) +{ + struct SpriteTemplate spriteTemplate; + LoadCompressedSpritePaletteOverrideBuffer(&gTrainerFrontPicPaletteTable[trainerSpriteID], buffer); + LoadCompressedSpriteSheetOverrideBuffer(&gTrainerFrontPicTable[trainerSpriteID], buffer); + spriteTemplate.tileTag = gTrainerFrontPicTable[trainerSpriteID].tag; + spriteTemplate.paletteTag = gTrainerFrontPicPaletteTable[trainerSpriteID].tag; + spriteTemplate.oam = &gNewGameOakOamAttributes; + spriteTemplate.anims = gDummySpriteAnimTable; + spriteTemplate.images = NULL; + spriteTemplate.affineAnims = gDummySpriteAffineAnimTable; + spriteTemplate.callback = SpriteCallbackDummy; + return CreateSprite(&spriteTemplate, x, y, subpriority); +} + +void LoadTrainerGfx_TrainerCard(u8 gender, u16 palOffset, u8 *dest) +{ + LZDecompressVram(gTrainerFrontPicTable[gender].data, dest); + LoadCompressedPalette(gTrainerFrontPicPaletteTable[gender].data, palOffset, 0x20); +} + +u8 AddNewGameBirchObject(s16 x, s16 y, u8 subpriority) +{ + LoadSpritePalette(&gNewGameOakObjectPaletteInfo); + return CreateSprite(&gNewGameOakObjectTemplate, x, y, subpriority); +} + +u8 CreateMonSprite_PicBox(u16 species, s16 x, s16 y, u8 subpriority) +{ + u16 spriteId = CreateMonPicSprite_HandleDeoxys(species, 0, 0x8000, TRUE, x, y, 0, gMonPaletteTable[species].tag); + PreservePaletteInWeather(IndexOfSpritePaletteTag(gMonPaletteTable[species].tag) + 0x10); + if (spriteId == 0xFFFF) + return MAX_SPRITES; + else + return spriteId; +} + +u8 CreateMonSprite_FieldMove(u16 species, u32 d, u32 g, s16 x, s16 y, u8 subpriority) +{ + const struct CompressedSpritePalette *spritePalette = GetMonSpritePalStructFromOtIdPersonality(species, d, g); + u16 spriteId = CreateMonPicSprite_HandleDeoxys(species, d, g, 1, x, y, 0, spritePalette->tag); + PreservePaletteInWeather(IndexOfSpritePaletteTag(spritePalette->tag) + 0x10); + if (spriteId == 0xFFFF) + return MAX_SPRITES; + else + return spriteId; +} + +void FreeResourcesAndDestroySprite(struct Sprite *sprite, u8 spriteId) +{ + ResetPreservedPalettesInWeather(); + if (sprite->oam.affineMode != ST_OAM_AFFINE_OFF) + { + FreeOamMatrix(sprite->oam.matrixNum); + } + FreeAndDestroyMonPicSprite(spriteId); +} + +// r, g, b are between 0 and 16 +void MultiplyInvertedPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b) +{ + int curRed; + int curGreen; + int curBlue; + u16 outPal; + + outPal = gPlttBufferUnfaded[i]; + curRed = outPal & 0x1f; + curGreen = (outPal & (0x1f << 5)) >> 5; + curBlue = (outPal & (0x1f << 10)) >> 10; + curRed += (((0x1f - curRed) * r) >> 4); + curGreen += (((0x1f - curGreen) * g) >> 4); + curBlue += (((0x1f - curBlue) * b) >> 4); + outPal = curRed; + outPal |= curGreen << 5; + outPal |= curBlue << 10; + gPlttBufferFaded[i] = outPal; +} + +// r, g, b are between 0 and 16 +void MultiplyPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b) +{ + int curRed; + int curGreen; + int curBlue; + u16 outPal; + + outPal = gPlttBufferUnfaded[i]; + curRed = outPal & 0x1f; + curGreen = (outPal & (0x1f << 5)) >> 5; + curBlue = (outPal & (0x1f << 10)) >> 10; + curRed -= ((curRed * r) >> 4); + curGreen -= ((curGreen * g) >> 4); + curBlue -= ((curBlue * b) >> 4); + outPal = curRed; + outPal |= curGreen << 5; + outPal |= curBlue << 10; + gPlttBufferFaded[i] = outPal; +} From 701d4635b4880fd9055e0b0f3e5032b5d0353ab1 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 27 Feb 2020 16:19:33 -0500 Subject: [PATCH 04/26] Pokecenter heal and HOF field effects --- asm/field_effect.s | 971 -------------------------------------------- data/field_effect.s | 130 ------ src/field_effect.c | 531 ++++++++++++++++++++++++ 3 files changed, 531 insertions(+), 1101 deletions(-) diff --git a/asm/field_effect.s b/asm/field_effect.s index a484b28ac..ab3c8063d 100644 --- a/asm/field_effect.s +++ b/asm/field_effect.s @@ -5,977 +5,6 @@ .text - thumb_func_start FldEff_PokecenterHeal -FldEff_PokecenterHeal: @ 8083B8C - push {r4,lr} - bl CalculatePlayerPartyCount - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _08083BC8 @ =Task_PokecenterHeal - movs r1, 0xFF - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _08083BCC @ =gTasks - adds r1, r0 - strh r4, [r1, 0xA] - movs r0, 0x5D - strh r0, [r1, 0xC] - movs r0, 0x24 - strh r0, [r1, 0xE] - movs r0, 0x80 - strh r0, [r1, 0x10] - movs r0, 0x18 - strh r0, [r1, 0x12] - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08083BC8: .4byte Task_PokecenterHeal -_08083BCC: .4byte gTasks - thumb_func_end FldEff_PokecenterHeal - - thumb_func_start Task_PokecenterHeal -Task_PokecenterHeal: @ 8083BD0 - push {lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _08083BF8 @ =gTasks - adds r1, r0 - ldr r2, _08083BFC @ =sPokecenterHealTaskCBTable - movs r3, 0x8 - ldrsh r0, [r1, r3] - lsls r0, 2 - adds r0, r2 - ldr r2, [r0] - adds r0, r1, 0 - bl _call_via_r2 - pop {r0} - bx r0 - .align 2, 0 -_08083BF8: .4byte gTasks -_08083BFC: .4byte sPokecenterHealTaskCBTable - thumb_func_end Task_PokecenterHeal - - thumb_func_start PokecenterHealEffect_0 -PokecenterHealEffect_0: @ 8083C00 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r1, 0xA - ldrsh r0, [r4, r1] - movs r2, 0xC - ldrsh r1, [r4, r2] - movs r3, 0xE - ldrsh r2, [r4, r3] - movs r3, 0x1 - bl CreatePokeballGlowSprite - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x14] - movs r1, 0x10 - ldrsh r0, [r4, r1] - movs r2, 0x12 - ldrsh r1, [r4, r2] - bl PokecenterHealEffectHelper - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x16] - pop {r4} - pop {r0} - bx r0 - thumb_func_end PokecenterHealEffect_0 - - thumb_func_start PokecenterHealEffect_1 -PokecenterHealEffect_1: @ 8083C3C - push {r4,lr} - adds r2, r0, 0 - ldr r3, _08083C74 @ =gSprites - movs r1, 0x14 - ldrsh r0, [r2, r1] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r3 - movs r4, 0x2E - ldrsh r0, [r1, r4] - cmp r0, 0x1 - ble _08083C6E - movs r0, 0x16 - ldrsh r1, [r2, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - ldrh r1, [r0, 0x2E] - adds r1, 0x1 - strh r1, [r0, 0x2E] - ldrh r0, [r2, 0x8] - adds r0, 0x1 - strh r0, [r2, 0x8] -_08083C6E: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08083C74: .4byte gSprites - thumb_func_end PokecenterHealEffect_1 - - thumb_func_start PokecenterHealEffect_2 -PokecenterHealEffect_2: @ 8083C78 - push {lr} - adds r3, r0, 0 - ldr r2, _08083C9C @ =gSprites - movs r0, 0x14 - ldrsh r1, [r3, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - movs r1, 0x2E - ldrsh r0, [r0, r1] - cmp r0, 0x4 - ble _08083C98 - ldrh r0, [r3, 0x8] - adds r0, 0x1 - strh r0, [r3, 0x8] -_08083C98: - pop {r0} - bx r0 - .align 2, 0 -_08083C9C: .4byte gSprites - thumb_func_end PokecenterHealEffect_2 - - thumb_func_start PokecenterHealEffect_3 -PokecenterHealEffect_3: @ 8083CA0 - push {lr} - ldr r2, _08083CD8 @ =gSprites - movs r3, 0x14 - ldrsh r1, [r0, r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r0, r2 - movs r2, 0x2E - ldrsh r0, [r1, r2] - cmp r0, 0x6 - ble _08083CD2 - adds r0, r1, 0 - bl DestroySprite - movs r0, 0x19 - bl FieldEffectActiveListRemove - ldr r0, _08083CDC @ =Task_PokecenterHeal - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_08083CD2: - pop {r0} - bx r0 - .align 2, 0 -_08083CD8: .4byte gSprites -_08083CDC: .4byte Task_PokecenterHeal - thumb_func_end PokecenterHealEffect_3 - - thumb_func_start FldEff_HallOfFameRecord -FldEff_HallOfFameRecord: @ 8083CE0 - push {r4,lr} - bl CalculatePlayerPartyCount - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _08083D14 @ =Task_HallOfFameRecord - movs r1, 0xFF - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _08083D18 @ =gTasks - adds r1, r0 - strh r4, [r1, 0xA] - movs r0, 0x75 - strh r0, [r1, 0xC] - movs r0, 0x3C - strh r0, [r1, 0xE] - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08083D14: .4byte Task_HallOfFameRecord -_08083D18: .4byte gTasks - thumb_func_end FldEff_HallOfFameRecord - - thumb_func_start Task_HallOfFameRecord -Task_HallOfFameRecord: @ 8083D1C - push {lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _08083D44 @ =gTasks - adds r1, r0 - ldr r2, _08083D48 @ =sHallOfFameRecordTaskCBTable - movs r3, 0x8 - ldrsh r0, [r1, r3] - lsls r0, 2 - adds r0, r2 - ldr r2, [r0] - adds r0, r1, 0 - bl _call_via_r2 - pop {r0} - bx r0 - .align 2, 0 -_08083D44: .4byte gTasks -_08083D48: .4byte sHallOfFameRecordTaskCBTable - thumb_func_end Task_HallOfFameRecord - - thumb_func_start HallOfFameRecordEffect_0 -HallOfFameRecordEffect_0: @ 8083D4C - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r1, 0xA - ldrsh r0, [r4, r1] - movs r2, 0xC - ldrsh r1, [r4, r2] - movs r3, 0xE - ldrsh r2, [r4, r3] - movs r3, 0 - bl CreatePokeballGlowSprite - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x14] - pop {r4} - pop {r0} - bx r0 - thumb_func_end HallOfFameRecordEffect_0 - - thumb_func_start HallOfFameRecordEffect_1 -HallOfFameRecordEffect_1: @ 8083D74 - push {r4,lr} - adds r4, r0, 0 - ldr r2, _08083DA8 @ =gSprites - movs r0, 0x14 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - movs r1, 0x2E - ldrsh r0, [r0, r1] - cmp r0, 0x1 - ble _08083DA2 - movs r0, 0x78 - movs r1, 0x19 - bl HallOfFameRecordEffectHelper - ldrh r0, [r4, 0x26] - adds r0, 0x1 - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_08083DA2: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08083DA8: .4byte gSprites - thumb_func_end HallOfFameRecordEffect_1 - - thumb_func_start HallOfFameRecordEffect_2 -HallOfFameRecordEffect_2: @ 8083DAC - push {lr} - adds r3, r0, 0 - ldr r2, _08083DD0 @ =gSprites - movs r0, 0x14 - ldrsh r1, [r3, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - movs r1, 0x2E - ldrsh r0, [r0, r1] - cmp r0, 0x4 - ble _08083DCC - ldrh r0, [r3, 0x8] - adds r0, 0x1 - strh r0, [r3, 0x8] -_08083DCC: - pop {r0} - bx r0 - .align 2, 0 -_08083DD0: .4byte gSprites - thumb_func_end HallOfFameRecordEffect_2 - - thumb_func_start HallOfFameRecordEffect_3 -HallOfFameRecordEffect_3: @ 8083DD4 - push {lr} - ldr r2, _08083E0C @ =gSprites - movs r3, 0x14 - ldrsh r1, [r0, r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r0, r2 - movs r2, 0x2E - ldrsh r0, [r1, r2] - cmp r0, 0x6 - ble _08083E06 - adds r0, r1, 0 - bl DestroySprite - movs r0, 0x3E - bl FieldEffectActiveListRemove - ldr r0, _08083E10 @ =Task_HallOfFameRecord - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_08083E06: - pop {r0} - bx r0 - .align 2, 0 -_08083E0C: .4byte gSprites -_08083E10: .4byte Task_HallOfFameRecord - thumb_func_end HallOfFameRecordEffect_3 - - thumb_func_start CreatePokeballGlowSprite -CreatePokeballGlowSprite: @ 8083E14 - push {r4-r6,lr} - mov r6, r8 - push {r6} - mov r8, r0 - adds r4, r1, 0 - adds r5, r2, 0 - adds r6, r3, 0 - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - lsls r4, 16 - lsrs r4, 16 - lsls r5, 16 - lsrs r5, 16 - lsls r6, 16 - lsrs r6, 16 - ldr r0, _08083E68 @ =SpriteCB_PokeballGlowEffect - bl CreateInvisibleSprite - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r2, _08083E6C @ =gSprites - adds r1, r2 - strh r4, [r1, 0x24] - strh r5, [r1, 0x26] - adds r3, r1, 0 - adds r3, 0x43 - movs r2, 0xFF - strb r2, [r3] - strh r6, [r1, 0x38] - mov r2, r8 - strh r2, [r1, 0x3A] - strh r0, [r1, 0x3C] - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08083E68: .4byte SpriteCB_PokeballGlowEffect -_08083E6C: .4byte gSprites - thumb_func_end CreatePokeballGlowSprite - - thumb_func_start SpriteCB_PokeballGlowEffect -SpriteCB_PokeballGlowEffect: @ 8083E70 - push {lr} - ldr r2, _08083E88 @ =sPokeballGlowSpriteCBTable - movs r3, 0x2E - ldrsh r1, [r0, r3] - lsls r1, 2 - adds r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {r0} - bx r0 - .align 2, 0 -_08083E88: .4byte sPokeballGlowSpriteCBTable - thumb_func_end SpriteCB_PokeballGlowEffect - - thumb_func_start PokeballGlowEffect_0 -PokeballGlowEffect_0: @ 8083E8C - push {r4,lr} - adds r4, r0, 0 - ldrh r1, [r4, 0x30] - movs r2, 0x30 - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _08083EA4 - subs r0, r1, 0x1 - strh r0, [r4, 0x30] - lsls r0, 16 - cmp r0, 0 - bne _08083F00 -_08083EA4: - movs r0, 0x19 - strh r0, [r4, 0x30] - ldr r0, _08083F18 @ =gUnknown_83CBF88 - ldr r1, _08083F1C @ =gUnknown_83CC010 - movs r2, 0x32 - ldrsh r3, [r4, r2] - lsls r3, 2 - adds r3, r1 - ldrh r1, [r4, 0x24] - ldrh r2, [r3] - adds r1, r2 - lsls r1, 16 - asrs r1, 16 - ldrh r2, [r4, 0x26] - ldrh r3, [r3, 0x2] - adds r2, r3 - lsls r2, 16 - asrs r2, 16 - movs r3, 0xFF - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08083F20 @ =gSprites - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - ldrb r2, [r1, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r2 - movs r2, 0x8 - orrs r0, r2 - strb r0, [r1, 0x5] - ldrh r0, [r4, 0x3C] - strh r0, [r1, 0x2E] - ldrh r0, [r4, 0x32] - adds r0, 0x1 - strh r0, [r4, 0x32] - ldrh r0, [r4, 0x3A] - subs r0, 0x1 - strh r0, [r4, 0x3A] - movs r0, 0x17 - bl PlaySE -_08083F00: - movs r1, 0x3A - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _08083F12 - movs r0, 0x20 - strh r0, [r4, 0x30] - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] -_08083F12: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08083F18: .4byte gUnknown_83CBF88 -_08083F1C: .4byte gUnknown_83CC010 -_08083F20: .4byte gSprites - thumb_func_end PokeballGlowEffect_0 - - thumb_func_start PokeballGlowEffect_1 -PokeballGlowEffect_1: @ 8083F24 - push {lr} - adds r1, r0, 0 - ldrh r0, [r1, 0x30] - subs r0, 0x1 - strh r0, [r1, 0x30] - lsls r0, 16 - asrs r2, r0, 16 - cmp r2, 0 - bne _08083F54 - ldrh r0, [r1, 0x2E] - adds r0, 0x1 - strh r0, [r1, 0x2E] - movs r0, 0x8 - strh r0, [r1, 0x30] - strh r2, [r1, 0x32] - strh r2, [r1, 0x34] - movs r2, 0x38 - ldrsh r0, [r1, r2] - cmp r0, 0 - beq _08083F54 - movs r0, 0x80 - lsls r0, 1 - bl PlayFanfare -_08083F54: - pop {r0} - bx r0 - thumb_func_end PokeballGlowEffect_1 - - thumb_func_start PokeballGlowEffect_2 -PokeballGlowEffect_2: @ 8083F58 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - adds r7, r0, 0 - ldrh r0, [r7, 0x30] - subs r0, 0x1 - strh r0, [r7, 0x30] - lsls r0, 16 - cmp r0, 0 - bne _08083F88 - movs r0, 0x8 - strh r0, [r7, 0x30] - ldrh r0, [r7, 0x32] - adds r0, 0x1 - movs r1, 0x3 - ands r0, r1 - strh r0, [r7, 0x32] - cmp r0, 0 - bne _08083F88 - ldrh r0, [r7, 0x34] - adds r0, 0x1 - strh r0, [r7, 0x34] -_08083F88: - ldrh r4, [r7, 0x32] - adds r4, 0x3 - movs r0, 0x3 - mov r8, r0 - mov r1, r8 - ands r4, r1 - ldr r3, _08084080 @ =0x00001007 - mov r10, r3 - mov r0, r10 - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 4 - movs r1, 0x84 - lsls r1, 17 - adds r0, r1 - lsrs r0, 16 - ldr r6, _08084084 @ =gUnknown_83CC028 - adds r1, r4, r6 - ldrb r1, [r1] - ldr r5, _08084088 @ =gUnknown_83CC02C - adds r2, r4, r5 - ldrb r2, [r2] - ldr r3, _0808408C @ =gUnknown_83CC030 - mov r9, r3 - add r4, r9 - ldrb r3, [r4] - bl MultiplyInvertedPaletteRGBComponents - ldrh r4, [r7, 0x32] - adds r4, 0x2 - mov r0, r8 - ands r4, r0 - mov r0, r10 - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 4 - movs r1, 0x83 - lsls r1, 17 - adds r0, r1 - lsrs r0, 16 - adds r1, r4, r6 - ldrb r1, [r1] - adds r2, r4, r5 - ldrb r2, [r2] - add r4, r9 - ldrb r3, [r4] - bl MultiplyInvertedPaletteRGBComponents - ldrh r4, [r7, 0x32] - adds r4, 0x1 - mov r3, r8 - ands r4, r3 - mov r0, r10 - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 4 - movs r1, 0x81 - lsls r1, 17 - adds r0, r1 - lsrs r0, 16 - adds r1, r4, r6 - ldrb r1, [r1] - adds r2, r4, r5 - ldrb r2, [r2] - add r4, r9 - ldrb r3, [r4] - bl MultiplyInvertedPaletteRGBComponents - ldrh r4, [r7, 0x32] - lsls r4, 24 - lsrs r4, 24 - mov r0, r10 - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 4 - ldr r3, _08084090 @ =0x01050000 - adds r0, r3 - lsrs r0, 16 - adds r6, r4, r6 - ldrb r6, [r6] - adds r5, r4, r5 - ldrb r5, [r5] - add r4, r9 - ldrb r4, [r4] - adds r1, r6, 0 - adds r2, r5, 0 - adds r3, r4, 0 - bl MultiplyInvertedPaletteRGBComponents - mov r0, r10 - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 4 - ldr r1, _08084094 @ =0x01030000 - adds r0, r1 - lsrs r0, 16 - adds r1, r6, 0 - adds r2, r5, 0 - adds r3, r4, 0 - bl MultiplyInvertedPaletteRGBComponents - movs r3, 0x34 - ldrsh r0, [r7, r3] - cmp r0, 0x2 - ble _08084072 - ldrh r0, [r7, 0x2E] - adds r0, 0x1 - movs r1, 0 - strh r0, [r7, 0x2E] - movs r0, 0x8 - strh r0, [r7, 0x30] - strh r1, [r7, 0x32] -_08084072: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08084080: .4byte 0x00001007 -_08084084: .4byte gUnknown_83CC028 -_08084088: .4byte gUnknown_83CC02C -_0808408C: .4byte gUnknown_83CC030 -_08084090: .4byte 0x01050000 -_08084094: .4byte 0x01030000 - thumb_func_end PokeballGlowEffect_2 - - thumb_func_start PokeballGlowEffect_3 -PokeballGlowEffect_3: @ 8084098 - push {r4-r6,lr} - mov r6, r8 - push {r6} - adds r2, r0, 0 - ldrh r0, [r2, 0x30] - subs r0, 0x1 - strh r0, [r2, 0x30] - lsls r0, 16 - cmp r0, 0 - bne _080840C8 - movs r0, 0x8 - strh r0, [r2, 0x30] - ldrh r0, [r2, 0x32] - adds r0, 0x1 - movs r1, 0x3 - ands r0, r1 - strh r0, [r2, 0x32] - cmp r0, 0x3 - bne _080840C8 - ldrh r0, [r2, 0x2E] - adds r0, 0x1 - strh r0, [r2, 0x2E] - movs r0, 0x1E - strh r0, [r2, 0x30] -_080840C8: - ldrh r4, [r2, 0x32] - lsls r4, 24 - lsrs r4, 24 - ldr r0, _08084174 @ =0x00001007 - mov r8, r0 - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 4 - movs r1, 0x84 - lsls r1, 17 - adds r0, r1 - lsrs r0, 16 - ldr r1, _08084178 @ =gUnknown_83CC028 - adds r1, r4, r1 - ldrb r6, [r1] - ldr r1, _0808417C @ =gUnknown_83CC02C - adds r1, r4, r1 - ldrb r5, [r1] - ldr r1, _08084180 @ =gUnknown_83CC030 - adds r4, r1 - ldrb r4, [r4] - adds r1, r6, 0 - adds r2, r5, 0 - adds r3, r4, 0 - bl MultiplyInvertedPaletteRGBComponents - mov r0, r8 - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 4 - movs r1, 0x83 - lsls r1, 17 - adds r0, r1 - lsrs r0, 16 - adds r1, r6, 0 - adds r2, r5, 0 - adds r3, r4, 0 - bl MultiplyInvertedPaletteRGBComponents - mov r0, r8 - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 4 - movs r1, 0x81 - lsls r1, 17 - adds r0, r1 - lsrs r0, 16 - adds r1, r6, 0 - adds r2, r5, 0 - adds r3, r4, 0 - bl MultiplyInvertedPaletteRGBComponents - mov r0, r8 - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 4 - ldr r1, _08084184 @ =0x01050000 - adds r0, r1 - lsrs r0, 16 - adds r1, r6, 0 - adds r2, r5, 0 - adds r3, r4, 0 - bl MultiplyInvertedPaletteRGBComponents - mov r0, r8 - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 4 - ldr r1, _08084188 @ =0x01030000 - adds r0, r1 - lsrs r0, 16 - adds r1, r6, 0 - adds r2, r5, 0 - adds r3, r4, 0 - bl MultiplyInvertedPaletteRGBComponents - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08084174: .4byte 0x00001007 -_08084178: .4byte gUnknown_83CC028 -_0808417C: .4byte gUnknown_83CC02C -_08084180: .4byte gUnknown_83CC030 -_08084184: .4byte 0x01050000 -_08084188: .4byte 0x01030000 - thumb_func_end PokeballGlowEffect_3 - - thumb_func_start PokeballGlowEffect_4 -PokeballGlowEffect_4: @ 808418C - push {lr} - adds r1, r0, 0 - ldrh r0, [r1, 0x30] - subs r0, 0x1 - strh r0, [r1, 0x30] - lsls r0, 16 - cmp r0, 0 - bne _080841A2 - ldrh r0, [r1, 0x2E] - adds r0, 0x1 - strh r0, [r1, 0x2E] -_080841A2: - pop {r0} - bx r0 - thumb_func_end PokeballGlowEffect_4 - - thumb_func_start PokeballGlowEffect_5 -PokeballGlowEffect_5: @ 80841A8 - ldrh r1, [r0, 0x2E] - adds r1, 0x1 - strh r1, [r0, 0x2E] - bx lr - thumb_func_end PokeballGlowEffect_5 - - thumb_func_start PokeballGlowEffect_6 -PokeballGlowEffect_6: @ 80841B0 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x38 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _080841C6 - bl IsFanfareTaskInactive - lsls r0, 24 - cmp r0, 0 - beq _080841CC -_080841C6: - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] -_080841CC: - pop {r4} - pop {r0} - bx r0 - thumb_func_end PokeballGlowEffect_6 - - thumb_func_start PokeballGlowEffect_7 -PokeballGlowEffect_7: @ 80841D4 - bx lr - thumb_func_end PokeballGlowEffect_7 - - thumb_func_start SpriteCB_PokeballGlow -SpriteCB_PokeballGlow: @ 80841D8 - push {lr} - adds r3, r0, 0 - ldr r2, _080841FC @ =gSprites - movs r0, 0x2E - ldrsh r1, [r3, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - movs r1, 0x2E - ldrsh r0, [r0, r1] - cmp r0, 0x4 - ble _080841F8 - adds r0, r3, 0 - bl FieldEffectFreeGraphicsResources -_080841F8: - pop {r0} - bx r0 - .align 2, 0 -_080841FC: .4byte gSprites - thumb_func_end SpriteCB_PokeballGlow - - thumb_func_start PokecenterHealEffectHelper -PokecenterHealEffectHelper: @ 8084200 - push {lr} - adds r3, r0, 0 - adds r2, r1, 0 - ldr r0, _08084244 @ =gUnknown_83CBFA0 - lsls r3, 16 - asrs r3, 16 - lsls r2, 16 - asrs r2, 16 - adds r1, r3, 0 - movs r3, 0 - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r0, 24 - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - ldr r1, _08084248 @ =gSprites - adds r2, r1 - ldrb r3, [r2, 0x5] - movs r1, 0xD - negs r1, r1 - ands r1, r3 - movs r3, 0x8 - orrs r1, r3 - strb r1, [r2, 0x5] - adds r2, 0x3E - ldrb r1, [r2] - movs r3, 0x4 - orrs r1, r3 - strb r1, [r2] - pop {r1} - bx r1 - .align 2, 0 -_08084244: .4byte gUnknown_83CBFA0 -_08084248: .4byte gSprites - thumb_func_end PokecenterHealEffectHelper - - thumb_func_start SpriteCB_PokecenterMonitor -SpriteCB_PokecenterMonitor: @ 808424C - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _08084270 - movs r0, 0 - strh r0, [r4, 0x2E] - adds r2, r4, 0 - adds r2, 0x3E - ldrb r1, [r2] - subs r0, 0x5 - ands r0, r1 - strb r0, [r2] - adds r0, r4, 0 - movs r1, 0x1 - bl StartSpriteAnim -_08084270: - adds r0, r4, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _08084284 - adds r0, r4, 0 - bl FieldEffectFreeGraphicsResources -_08084284: - pop {r4} - pop {r0} - bx r0 - thumb_func_end SpriteCB_PokecenterMonitor - - thumb_func_start HallOfFameRecordEffectHelper -HallOfFameRecordEffectHelper: @ 808428C - push {lr} - adds r3, r0, 0 - adds r2, r1, 0 - ldr r0, _080842A8 @ =gUnknown_83CBFB8 - lsls r3, 16 - asrs r3, 16 - lsls r2, 16 - asrs r2, 16 - adds r1, r3, 0 - movs r3, 0 - bl CreateSpriteAtEnd - pop {r0} - bx r0 - .align 2, 0 -_080842A8: .4byte gUnknown_83CBFB8 - thumb_func_end HallOfFameRecordEffectHelper - - thumb_func_start SpriteCB_HallOfFameMonitor -SpriteCB_HallOfFameMonitor: @ 80842AC - push {lr} - adds r2, r0, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _080842C2 - adds r0, r2, 0 - bl FieldEffectFreeGraphicsResources -_080842C2: - pop {r0} - bx r0 - thumb_func_end SpriteCB_HallOfFameMonitor - thumb_func_start ReturnToFieldFromFlyMapSelect ReturnToFieldFromFlyMapSelect: @ 80842C8 push {lr} diff --git a/data/field_effect.s b/data/field_effect.s index d79644860..288529090 100644 --- a/data/field_effect.s +++ b/data/field_effect.s @@ -6,136 +6,6 @@ .section .rodata .align 2 -gUnknown_83CBE9C:: @ 83CBE9C sprite_palette - obj_pal gUnknown_83CAFB0, 4103 - -gUnknown_83CBEA4:: @ 83CBEA4 sprite_palette - obj_pal gUnknown_83CB3D0, 4112 - -gOamData_83CBEAC:: @ 83CBEAC oam_data - .4byte 0x80004000, 0x00000000 - -gUnknown_83CBEB4:: @ 83CBEB4 sprite_frames - obj_frame_tiles gUnknown_83CAF90, 0x0020 - -gUnknown_83CBEBC:: @ 83CBEBC sprite_frames - obj_frame_tiles gUnknown_83CAFD0 + 0x000, 0x0100 - obj_frame_tiles gUnknown_83CAFD0 + 0x100, 0x0100 - obj_frame_tiles gUnknown_83CAFD0 + 0x200, 0x0100 - obj_frame_tiles gUnknown_83CAFD0 + 0x300, 0x0100 - -gUnknown_83CBEDC:: @ 83CBEDC sprite_frames - obj_frame_tiles gUnknown_83CB3F0 + 0x000, 0x0080 - obj_frame_tiles gUnknown_83CB3F0 + 0x080, 0x0080 - obj_frame_tiles gUnknown_83CB3F0 + 0x100, 0x0080 - obj_frame_tiles gUnknown_83CB3F0 + 0x180, 0x0080 - -gUnknown_83CBEFC:: @ 83CBEFC unknown - .byte 0xf4, 0xf8, 0x01, 0x80 - .byte 0x04, 0xf8, 0x20, 0x80 - .byte 0xf4, 0x00, 0x31, 0x80 - .byte 0x04, 0x00, 0x50, 0x80 - .byte 0x04, 0x00, 0x00, 0x00 - -gUnknown_83CBF10:: @ 83CBF10 dataptr - .4byte gUnknown_83CBEFC - -gUnknown_83CBF14:: @ 83CBF14 unknown - .byte 0xe0, 0xf8, 0x05, 0x80 - .byte 0x00, 0xf8, 0x45, 0x80 - .byte 0xe0, 0x00, 0x85, 0x80 - .byte 0x00, 0x00, 0xc5, 0x80 - .byte 0x04, 0x00, 0x00, 0x00 - -gUnknown_83CBF28:: @ 83CBE28 dataptr - .4byte gUnknown_83CBF14 - -gUnknown_83CBF2C:: @ 83CBF2C animcmd - obj_image_anim_frame 0x0000, 1 - obj_image_anim_jump 0 - -gUnknown_83CBF34:: @ 83CBF34 animcmd - obj_image_anim_frame 0x0001, 5 - obj_image_anim_frame 0x0002, 5 - obj_image_anim_frame 0x0003, 7 - obj_image_anim_frame 0x0002, 5 - obj_image_anim_frame 0x0001, 5 - obj_image_anim_frame 0x0000, 5 - obj_image_anim_loop 3 - obj_image_anim_end - - .align 2 -gUnknown_83CBF54:: @ 83CBF54 dataptr - .4byte gUnknown_83CBF2C - .4byte gUnknown_83CBF34 - -gUnknown_83CBF5C:: @ 83CBF5C animcmd - obj_image_anim_frame 0x0003, 8 - obj_image_anim_frame 0x0002, 8 - obj_image_anim_frame 0x0001, 8 - obj_image_anim_frame 0x0000, 8 - obj_image_anim_frame 0x0001, 8 - obj_image_anim_frame 0x0002, 8 - obj_image_anim_loop 2 - obj_image_anim_frame 0x0001, 8 - obj_image_anim_frame 0x0000, 8 - obj_image_anim_end - - .align 2 -gUnknown_83CBF84:: @ 83CBF84 dataptr - .4byte gUnknown_83CBF5C - -gUnknown_83CBF88:: @ 83CBF88 spr_template - spr_template 65535, 4103, gOamData_83CBE58, gUnknown_83CBF54, gUnknown_83CBEB4, gDummySpriteAffineAnimTable, SpriteCB_PokeballGlow - -gUnknown_83CBFA0:: @ 83CBFA0 spr_template - spr_template 65535, 4103, gOamData_83CBEAC, gUnknown_83CBF54, gUnknown_83CBEBC, gDummySpriteAffineAnimTable, SpriteCB_PokecenterMonitor - -gUnknown_83CBFB8:: @ 83CBFB8 spr_template - spr_template 65535, 4112, gOamData_83CBE60, gUnknown_83CBF84, gUnknown_83CBEDC, gDummySpriteAffineAnimTable, SpriteCB_HallOfFameMonitor - - .align 2 -sPokecenterHealTaskCBTable:: @ 83CBFD0 dataptr - .4byte PokecenterHealEffect_0 - .4byte PokecenterHealEffect_1 - .4byte PokecenterHealEffect_2 - .4byte PokecenterHealEffect_3 - - .align 2 -sHallOfFameRecordTaskCBTable:: @ 83CBFE0 dataptr - .4byte HallOfFameRecordEffect_0 - .4byte HallOfFameRecordEffect_1 - .4byte HallOfFameRecordEffect_2 - .4byte HallOfFameRecordEffect_3 - - .align 2 -sPokeballGlowSpriteCBTable:: @ 83CBFF0 dataptr - .4byte PokeballGlowEffect_0 - .4byte PokeballGlowEffect_1 - .4byte PokeballGlowEffect_2 - .4byte PokeballGlowEffect_3 - .4byte PokeballGlowEffect_4 - .4byte PokeballGlowEffect_5 - .4byte PokeballGlowEffect_6 - .4byte PokeballGlowEffect_7 - -gUnknown_83CC010:: @ 83CC010 data16 - .2byte 0, 0 - .2byte 6, 0 - .2byte 0, 4 - .2byte 6, 4 - .2byte 0, 8 - .2byte 6, 8 - -gUnknown_83CC028:: @ 83CC028 data8 - .byte 0x10, 0x0c, 0x08, 0x00 - -gUnknown_83CC02C:: @ 83CC02C data8 - .byte 0x10, 0x0c, 0x08, 0x00 - -gUnknown_83CC030:: @ 83CC030 data8 - .byte 0x00, 0x00, 0x00, 0x00 - .align 2 sFallWarpEffectCBPtrs:: @ 83CC034 dataptr .4byte FallWarpEffect_1 diff --git a/src/field_effect.c b/src/field_effect.c index 35a56389a..b7498d316 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -7,8 +7,11 @@ #include "field_weather.h" #include "overworld.h" #include "quest_log.h" +#include "task.h" #include "trainer_pokemon_sprites.h" +#include "constants/songs.h" +#define subsprite_table(ptr) {.subsprites = ptr, .subspriteCount = (sizeof ptr) / (sizeof(struct Subsprite))} #define FIELD_EFFECT_COUNT 32 static u8 sFieldEffectActiveList[FIELD_EFFECT_COUNT]; @@ -28,6 +31,10 @@ void FieldEffectScript_LoadPal(const u8 **script); void FieldEffectScript_CallNative(const u8 **script, u32 *result); void FieldEffectFreeTilesIfUnused(u16 tilesTag); void FieldEffectFreePaletteIfUnused(u8 paletteNum); +void Task_PokecenterHeal(u8 taskId); +void SpriteCB_PokeballGlow(struct Sprite * sprite); +void SpriteCB_PokecenterMonitor(struct Sprite * sprite); +void SpriteCB_HallOfFameMonitor(struct Sprite * sprite); const u16 sNewGameOakObjectSpriteTiles[] = INCBIN_U16("graphics/field_effects/unk_83CA770.4bpp"); const u16 sNewGameOakObjectPals[] = INCBIN_U16("graphics/field_effects/unk_83CAF70.gbapal"); @@ -130,6 +137,187 @@ const struct SpriteTemplate gNewGameOakObjectTemplate = { .callback = SpriteCallbackDummy }; +const struct SpritePalette gUnknown_83CBE9C = { + gUnknown_83CAFB0, 4103 +}; + +const struct SpritePalette gUnknown_83CBEA4 = { + gUnknown_83CB3D0, 4112 +}; + +const struct OamData gOamData_83CBEAC = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = FALSE, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x16), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(32x16), + .tileNum = 0x000, + .priority = 0, + .paletteNum = 0x0, + .affineParam = 0 +}; + +const struct SpriteFrameImage gUnknown_83CBEB4[] = { + {gUnknown_83CAF90, 0x20} +}; + +const struct SpriteFrameImage gUnknown_83CBEBC[] = { + {gUnknown_83CAFD0 + 0x000, 0x100}, + {gUnknown_83CAFD0 + 0x080, 0x100}, + {gUnknown_83CAFD0 + 0x100, 0x100}, + {gUnknown_83CAFD0 + 0x180, 0x100} +}; + +const struct SpriteFrameImage gUnknown_83CBEDC[] = { + {gUnknown_83CB3F0 + 0x00, 0x80}, + {gUnknown_83CB3F0 + 0x40, 0x80}, + {gUnknown_83CB3F0 + 0x80, 0x80}, + {gUnknown_83CB3F0 + 0xC0, 0x80} +}; + +const struct Subsprite gUnknown_83CBEFC[] = +{ + { + .x = -12, + .y = -8, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 0, + .priority = 2 + }, { + .x = 4, + .y = -8, + .shape = SPRITE_SHAPE(8x8), + .size = SPRITE_SIZE(8x8), + .tileOffset = 2, + .priority = 2 + }, { + .x = -12, + .y = 0, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 3, + .priority = 2 + }, { + .x = 4, + .y = 0, + .shape = SPRITE_SHAPE(8x8), + .size = SPRITE_SIZE(8x8), + .tileOffset = 5, + .priority = 2 + } +}; + +const struct SubspriteTable gUnknown_83CBF0C = subsprite_table(gUnknown_83CBEFC); + +const struct Subsprite gUnknown_83CBF14[] = +{ + { + .x = -32, + .y = -8, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 0, + .priority = 2 + }, { + .x = 0, + .y = -8, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 4, + .priority = 2 + }, { + .x = -32, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 8, + .priority = 2 + }, { + .x = 0, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 12, + .priority = 2 + } +}; + +const struct SubspriteTable gUnknown_83CBF24 = subsprite_table(gUnknown_83CBF14); + +const union AnimCmd gUnknown_83CBF2C[] = { + ANIMCMD_FRAME(0, 1), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gUnknown_83CBF34[] = { + ANIMCMD_FRAME(1, 5), + ANIMCMD_FRAME(2, 5), + ANIMCMD_FRAME(3, 7), + ANIMCMD_FRAME(2, 5), + ANIMCMD_FRAME(1, 5), + ANIMCMD_FRAME(0, 5), + ANIMCMD_LOOP(3), + ANIMCMD_END +}; + +const union AnimCmd *const gUnknown_83CBF54[] = { + gUnknown_83CBF2C, + gUnknown_83CBF34 +}; + +const union AnimCmd gUnknown_83CBF5C[] = { + ANIMCMD_FRAME(3, 8), + ANIMCMD_FRAME(2, 8), + ANIMCMD_FRAME(1, 8), + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(1, 8), + ANIMCMD_FRAME(2, 8), + ANIMCMD_LOOP(2), + ANIMCMD_FRAME(1, 8), + ANIMCMD_FRAME(0, 8), + ANIMCMD_END +}; + +const union AnimCmd *const gUnknown_83CBF84[] = { + gUnknown_83CBF5C +}; + +const struct SpriteTemplate gUnknown_83CBF88 = { + .tileTag = 65535, + .paletteTag = 4103, + .oam = &gOamData_83CBE58, + .anims = gUnknown_83CBF54, + .images = gUnknown_83CBEB4, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_PokeballGlow +}; + +const struct SpriteTemplate gUnknown_83CBFA0 = { + .tileTag = 65535, + .paletteTag = 4103, + .oam = &gOamData_83CBEAC, + .anims = gUnknown_83CBF54, + .images = gUnknown_83CBEBC, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_PokecenterMonitor +}; + +const struct SpriteTemplate gUnknown_83CBFB8 = { + .tileTag = 65535, + .paletteTag = 4112, + .oam = &gOamData_83CBE60, + .anims = gUnknown_83CBF84, + .images = gUnknown_83CBEDC, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_HallOfFameMonitor +}; + + u32 FieldEffectStart(u8 fldeff) { const u8 *script; @@ -451,3 +639,346 @@ void MultiplyPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b) outPal |= curBlue << 10; gPlttBufferFaded[i] = outPal; } + +void PokecenterHealEffect_0(struct Task * task); +void PokecenterHealEffect_1(struct Task * task); +void PokecenterHealEffect_2(struct Task * task); +void PokecenterHealEffect_3(struct Task * task); +void HallOfFameRecordEffect_0(struct Task * task); +void HallOfFameRecordEffect_1(struct Task * task); +void HallOfFameRecordEffect_2(struct Task * task); +void HallOfFameRecordEffect_3(struct Task * task); +void Task_HallOfFameRecord(u8 taskId); +u8 CreatePokeballGlowSprite(s16 duration, s16 x, s16 y, bool16 fanfare); +void SpriteCB_PokeballGlowEffect(struct Sprite * sprite); +void PokeballGlowEffect_0(struct Sprite * sprite); +void PokeballGlowEffect_1(struct Sprite * sprite); +void PokeballGlowEffect_2(struct Sprite * sprite); +void PokeballGlowEffect_3(struct Sprite * sprite); +void PokeballGlowEffect_4(struct Sprite * sprite); +void PokeballGlowEffect_5(struct Sprite * sprite); +void PokeballGlowEffect_6(struct Sprite * sprite); +void PokeballGlowEffect_7(struct Sprite * sprite); +u8 PokecenterHealEffectHelper(s32 x, s32 y); +void HallOfFameRecordEffectHelper(s32 x, s32 y); + +void (*const sPokecenterHealTaskCBTable[])(struct Task *) = { + PokecenterHealEffect_0, + PokecenterHealEffect_1, + PokecenterHealEffect_2, + PokecenterHealEffect_3 +}; + +void (*const sHallOfFameRecordTaskCBTable[])(struct Task *) = { + HallOfFameRecordEffect_0, + HallOfFameRecordEffect_1, + HallOfFameRecordEffect_2, + HallOfFameRecordEffect_3 +}; + +void (*const sPokeballGlowSpriteCBTable[])(struct Sprite *) = { + PokeballGlowEffect_0, + PokeballGlowEffect_1, + PokeballGlowEffect_2, + PokeballGlowEffect_3, + PokeballGlowEffect_4, + PokeballGlowEffect_5, + PokeballGlowEffect_6, + PokeballGlowEffect_7 +}; + +bool8 FldEff_PokecenterHeal(void) +{ + u8 nPokemon; + struct Task *task; + + nPokemon = CalculatePlayerPartyCount(); + task = &gTasks[CreateTask(Task_PokecenterHeal, 0xff)]; + task->data[1] = nPokemon; + task->data[2] = 0x5d; + task->data[3] = 0x24; + task->data[4] = 0x80; + task->data[5] = 0x18; + return FALSE; +} + +void Task_PokecenterHeal(u8 taskId) +{ + struct Task * task = &gTasks[taskId]; + sPokecenterHealTaskCBTable[task->data[0]](task); +} + +void PokecenterHealEffect_0(struct Task *task) +{ + task->data[0]++; + task->data[6] = CreatePokeballGlowSprite(task->data[1], task->data[2], task->data[3], TRUE); + task->data[7] = PokecenterHealEffectHelper(task->data[4], task->data[5]); +} + +void PokecenterHealEffect_1(struct Task *task) +{ + if (gSprites[task->data[6]].data[0] > 1) + { + gSprites[task->data[7]].data[0]++; + task->data[0]++; + } +} + +void PokecenterHealEffect_2(struct Task *task) +{ + if (gSprites[task->data[6]].data[0] > 4) + { + task->data[0]++; + } +} + +void PokecenterHealEffect_3(struct Task *task) +{ + if (gSprites[task->data[6]].data[0] > 6) + { + DestroySprite(&gSprites[task->data[6]]); + FieldEffectActiveListRemove(FLDEFF_POKECENTER_HEAL); + DestroyTask(FindTaskIdByFunc(Task_PokecenterHeal)); + } +} + + +bool8 FldEff_HallOfFameRecord(void) +{ + u8 nPokemon; + struct Task *task; + + nPokemon = CalculatePlayerPartyCount(); + task = &gTasks[CreateTask(Task_HallOfFameRecord, 0xff)]; + task->data[1] = nPokemon; + task->data[2] = 0x75; + task->data[3] = 0x3C; + return FALSE; +} + +void Task_HallOfFameRecord(u8 taskId) +{ + struct Task *task; + task = &gTasks[taskId]; + sHallOfFameRecordTaskCBTable[task->data[0]](task); +} + +void HallOfFameRecordEffect_0(struct Task *task) +{ + u8 taskId; + task->data[0]++; + task->data[6] = CreatePokeballGlowSprite(task->data[1], task->data[2], task->data[3], FALSE); +} + +void HallOfFameRecordEffect_1(struct Task *task) +{ + if (gSprites[task->data[6]].data[0] > 1) + { + HallOfFameRecordEffectHelper(0x78, 0x19); + task->data[15]++; // was this ever initialized? is this ever used? + task->data[0]++; + } +} + +void HallOfFameRecordEffect_2(struct Task *task) +{ + if (gSprites[task->data[6]].data[0] > 4) + { + task->data[0]++; + } +} + +void HallOfFameRecordEffect_3(struct Task *task) +{ + if (gSprites[task->data[6]].data[0] > 6) + { + DestroySprite(&gSprites[task->data[6]]); + FieldEffectActiveListRemove(FLDEFF_HALL_OF_FAME_RECORD); + DestroyTask(FindTaskIdByFunc(Task_HallOfFameRecord)); + } +} + +u8 CreatePokeballGlowSprite(s16 duration, s16 x, s16 y, bool16 fanfare) +{ + u8 spriteId; + struct Sprite *sprite; + spriteId = CreateInvisibleSprite(SpriteCB_PokeballGlowEffect); + sprite = &gSprites[spriteId]; + sprite->pos2.x = x; + sprite->pos2.y = y; + sprite->subpriority = 0xFF; + sprite->data[5] = fanfare; + sprite->data[6] = duration; + sprite->data[7] = spriteId; + return spriteId; +} + +void SpriteCB_PokeballGlowEffect(struct Sprite * sprite) +{ + sPokeballGlowSpriteCBTable[sprite->data[0]](sprite); +} + +const struct Coords16 gUnknown_83CC010[] = { + {0, 0}, + {6, 0}, + {0, 4}, + {6, 4}, + {0, 8}, + {6, 8} +}; + +const u8 gUnknown_83CC028[] = {16, 12, 8, 0}; +const u8 gUnknown_83CC02C[] = {16, 12, 8, 0}; +const u8 gUnknown_83CC030[] = { 0, 0, 0, 0}; + +void PokeballGlowEffect_0(struct Sprite *sprite) +{ + u8 endSpriteId; + if (sprite->data[1] == 0 || (--sprite->data[1]) == 0) + { + sprite->data[1] = 25; + endSpriteId = CreateSpriteAtEnd(&gUnknown_83CBF88, gUnknown_83CC010[sprite->data[2]].x + sprite->pos2.x, gUnknown_83CC010[sprite->data[2]].y + sprite->pos2.y, 0xFF); + gSprites[endSpriteId].oam.priority = 2; + gSprites[endSpriteId].data[0] = sprite->data[7]; + sprite->data[2]++; + sprite->data[6]--; + PlaySE(SE_BOWA); + } + if (sprite->data[6] == 0) + { + sprite->data[1] = 32; + sprite->data[0]++; + } +} + +void PokeballGlowEffect_1(struct Sprite *sprite) +{ + if ((--sprite->data[1]) == 0) + { + sprite->data[0]++; + sprite->data[1] = 8; + sprite->data[2] = 0; + sprite->data[3] = 0; + if (sprite->data[5]) + { + PlayFanfare(MUS_ME_ASA); + } + } +} + +void PokeballGlowEffect_2(struct Sprite *sprite) +{ + u8 phase; + if ((--sprite->data[1]) == 0) + { + sprite->data[1] = 8; + sprite->data[2]++; + sprite->data[2] &= 3; + if (sprite->data[2] == 0) + { + sprite->data[3]++; + } + } + phase = (sprite->data[2] + 3) & 3; + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x108, gUnknown_83CC028[phase], gUnknown_83CC02C[phase], gUnknown_83CC030[phase]); + phase = (sprite->data[2] + 2) & 3; + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x106, gUnknown_83CC028[phase], gUnknown_83CC02C[phase], gUnknown_83CC030[phase]); + phase = (sprite->data[2] + 1) & 3; + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x102, gUnknown_83CC028[phase], gUnknown_83CC02C[phase], gUnknown_83CC030[phase]); + phase = sprite->data[2]; + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x105, gUnknown_83CC028[phase], gUnknown_83CC02C[phase], gUnknown_83CC030[phase]); + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x103, gUnknown_83CC028[phase], gUnknown_83CC02C[phase], gUnknown_83CC030[phase]); + if (sprite->data[3] > 2) + { + sprite->data[0]++; + sprite->data[1] = 8; + sprite->data[2] = 0; + } +} + +void PokeballGlowEffect_3(struct Sprite *sprite) +{ + u8 phase; + if ((--sprite->data[1]) == 0) + { + sprite->data[1] = 8; + sprite->data[2]++; + sprite->data[2] &= 3; + if (sprite->data[2] == 3) + { + sprite->data[0]++; + sprite->data[1] = 30; + } + } + phase = sprite->data[2]; + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x108, gUnknown_83CC028[phase], gUnknown_83CC02C[phase], gUnknown_83CC030[phase]); + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x106, gUnknown_83CC028[phase], gUnknown_83CC02C[phase], gUnknown_83CC030[phase]); + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x102, gUnknown_83CC028[phase], gUnknown_83CC02C[phase], gUnknown_83CC030[phase]); + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x105, gUnknown_83CC028[phase], gUnknown_83CC02C[phase], gUnknown_83CC030[phase]); + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x103, gUnknown_83CC028[phase], gUnknown_83CC02C[phase], gUnknown_83CC030[phase]); +} + +void PokeballGlowEffect_4(struct Sprite *sprite) +{ + if ((--sprite->data[1]) == 0) + { + sprite->data[0]++; + } +} + +void PokeballGlowEffect_5(struct Sprite *sprite) +{ + sprite->data[0]++; +} + +void PokeballGlowEffect_6(struct Sprite *sprite) +{ + if (sprite->data[5] == 0 || IsFanfareTaskInactive()) + { + sprite->data[0]++; + } +} + +void PokeballGlowEffect_7(struct Sprite *sprite) +{ +} + +void SpriteCB_PokeballGlow(struct Sprite * sprite) +{ + if (gSprites[sprite->data[0]].data[0] > 4) + FieldEffectFreeGraphicsResources(sprite); +} + +u8 PokecenterHealEffectHelper(s32 x, s32 y) +{ + u8 spriteId; + struct Sprite * sprite; + spriteId = CreateSpriteAtEnd(&gUnknown_83CBFA0, x, y, 0); + sprite = &gSprites[spriteId]; + sprite->oam.priority = 2; + sprite->invisible = TRUE; + return spriteId; +} + +void SpriteCB_PokecenterMonitor(struct Sprite * sprite) +{ + if (sprite->data[0] != 0) + { + sprite->data[0] = 0; + sprite->invisible = FALSE; + StartSpriteAnim(sprite, 1); + } + if (sprite->animEnded) + FieldEffectFreeGraphicsResources(sprite); +} + +void HallOfFameRecordEffectHelper(s32 x, s32 y) +{ + CreateSpriteAtEnd(&gUnknown_83CBFB8, x, y, 0); +} + +void SpriteCB_HallOfFameMonitor(struct Sprite * sprite) +{ + if (sprite->animEnded) + FieldEffectFreeGraphicsResources(sprite); +} From 9c03c850a2bfbedc3ccadf8b0f1a895607c113ae Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 27 Feb 2020 16:35:06 -0500 Subject: [PATCH 05/26] Fly field effect --- asm/field_effect.s | 186 ---------------------------------- include/field_screen_effect.h | 1 - include/overworld.h | 1 + src/field_effect.c | 84 +++++++++++++++ src/party_menu.c | 11 +- 5 files changed, 87 insertions(+), 196 deletions(-) diff --git a/asm/field_effect.s b/asm/field_effect.s index ab3c8063d..10b068904 100644 --- a/asm/field_effect.s +++ b/asm/field_effect.s @@ -5,192 +5,6 @@ .text - thumb_func_start ReturnToFieldFromFlyMapSelect -ReturnToFieldFromFlyMapSelect: @ 80842C8 - push {lr} - ldr r0, _080842DC @ =CB2_ReturnToField - bl SetMainCallback2 - ldr r1, _080842E0 @ =gFieldCallback - ldr r0, _080842E4 @ =FieldCallback_Fly - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_080842DC: .4byte CB2_ReturnToField -_080842E0: .4byte gFieldCallback -_080842E4: .4byte FieldCallback_Fly - thumb_func_end ReturnToFieldFromFlyMapSelect - - thumb_func_start FieldCallback_Fly -FieldCallback_Fly: @ 80842E8 - push {lr} - bl FadeInFromBlack - ldr r0, _08084308 @ =Task_FlyOut - movs r1, 0 - bl CreateTask - bl ScriptContext2_Enable - bl FreezeObjectEvents - ldr r1, _0808430C @ =gFieldCallback - movs r0, 0 - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_08084308: .4byte Task_FlyOut -_0808430C: .4byte gFieldCallback - thumb_func_end FieldCallback_Fly - - thumb_func_start Task_FlyOut -Task_FlyOut: @ 8084310 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _0808437C @ =gTasks - adds r4, r0, r1 - movs r0, 0x8 - ldrsh r6, [r4, r0] - cmp r6, 0 - bne _08084350 - bl IsWeatherNotFadingIn - lsls r0, 24 - cmp r0, 0 - beq _08084376 - bl GetCursorSelectionMonId - ldr r1, _08084380 @ =gFieldEffectArguments - lsls r0, 24 - lsrs r0, 24 - str r0, [r1] - cmp r0, 0x5 - ble _08084344 - str r6, [r1] -_08084344: - movs r0, 0x1F - bl FieldEffectStart - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_08084350: - movs r0, 0x1F - bl FieldEffectActiveListContains - lsls r0, 24 - cmp r0, 0 - bne _08084376 - bl Overworld_ResetStateAfterFly - bl WarpIntoMap - ldr r0, _08084384 @ =CB2_LoadMap - bl SetMainCallback2 - ldr r1, _08084388 @ =gFieldCallback - ldr r0, _0808438C @ =FieldCallback_FlyArrive - str r0, [r1] - adds r0, r5, 0 - bl DestroyTask -_08084376: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0808437C: .4byte gTasks -_08084380: .4byte gFieldEffectArguments -_08084384: .4byte CB2_LoadMap -_08084388: .4byte gFieldCallback -_0808438C: .4byte FieldCallback_FlyArrive - thumb_func_end Task_FlyOut - - thumb_func_start FieldCallback_FlyArrive -FieldCallback_FlyArrive: @ 8084390 - push {r4,lr} - bl Overworld_PlaySpecialMapMusic - bl FadeInFromBlack - ldr r0, _080843E8 @ =Task_FlyIn - movs r1, 0 - bl CreateTask - ldr r4, _080843EC @ =gObjectEvents - ldr r3, _080843F0 @ =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 _080843D2 - ldrb r1, [r3, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r1, 0x3 - bl ObjectEventTurn -_080843D2: - bl ScriptContext2_Enable - bl FreezeObjectEvents - ldr r1, _080843F4 @ =gFieldCallback - movs r0, 0 - str r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080843E8: .4byte Task_FlyIn -_080843EC: .4byte gObjectEvents -_080843F0: .4byte gPlayerAvatar -_080843F4: .4byte gFieldCallback - thumb_func_end FieldCallback_FlyArrive - - thumb_func_start Task_FlyIn -Task_FlyIn: @ 80843F8 - 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, _0808444C @ =gTasks - adds r4, r0, r1 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _0808442A - ldr r0, _08084450 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08084444 - movs r0, 0x20 - bl FieldEffectStart - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_0808442A: - movs r0, 0x20 - bl FieldEffectActiveListContains - lsls r0, 24 - cmp r0, 0 - bne _08084444 - bl ScriptContext2_Disable - bl UnfreezeObjectEvents - adds r0, r5, 0 - bl DestroyTask -_08084444: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0808444C: .4byte gTasks -_08084450: .4byte gPaletteFade - thumb_func_end Task_FlyIn - thumb_func_start FieldCB_FallWarpExit FieldCB_FallWarpExit: @ 8084454 push {lr} diff --git a/include/field_screen_effect.h b/include/field_screen_effect.h index 2537ca94d..aee7dc5a7 100644 --- a/include/field_screen_effect.h +++ b/include/field_screen_effect.h @@ -9,7 +9,6 @@ void sub_80B0244(void); void sub_807E3EC(void); void DoOutwardBarnDoorWipe(void); void Task_BarnDoorWipe(u8 taskId); -void FadeInFromBlack(void); void sub_807F5F0(void); #endif // GUARD_FIELD_SCREEN_EFFECT_H diff --git a/include/overworld.h b/include/overworld.h index a1cd888a9..ac50f9c80 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -177,6 +177,7 @@ void sub_805546C(u8 a0); bool32 sub_80582E0(void); bool32 sub_8058274(void); u8 GetCurrentMapBattleScene(void); +void Overworld_ResetStateAfterFly(void); extern u16 gHeldKeyCodeToSend; diff --git a/src/field_effect.c b/src/field_effect.c index b7498d316..9a30088c1 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -2,11 +2,15 @@ #include "gflib.h" #include "data.h" #include "decompress.h" +#include "event_object_movement.h" #include "field_effect.h" #include "field_effect_scripts.h" +#include "field_fadetransition.h" #include "field_weather.h" #include "overworld.h" +#include "party_menu.h" #include "quest_log.h" +#include "script.h" #include "task.h" #include "trainer_pokemon_sprites.h" #include "constants/songs.h" @@ -982,3 +986,83 @@ void SpriteCB_HallOfFameMonitor(struct Sprite * sprite) if (sprite->animEnded) FieldEffectFreeGraphicsResources(sprite); } + +void FieldCallback_Fly(void); +void Task_FlyOut(u8 taskId); +void FieldCallback_FlyArrive(void); +void Task_FlyIn(u8 taskId); + +void ReturnToFieldFromFlyMapSelect(void) +{ + SetMainCallback2(CB2_ReturnToField); + gFieldCallback = FieldCallback_Fly; +} + +void FieldCallback_Fly(void) +{ + FadeInFromBlack(); + CreateTask(Task_FlyOut, 0); + ScriptContext2_Enable(); + FreezeObjectEvents(); + gFieldCallback = NULL; +} + +void Task_FlyOut(u8 taskId) +{ + struct Task * task; + task = &gTasks[taskId]; + if (task->data[0] == 0) + { + if (!IsWeatherNotFadingIn()) + return; + gFieldEffectArguments[0] = GetCursorSelectionMonId(); + if ((int)gFieldEffectArguments[0] >= PARTY_SIZE) + gFieldEffectArguments[0] = 0; + FieldEffectStart(FLDEFF_USE_FLY); + task->data[0]++; + } + if (!FieldEffectActiveListContains(FLDEFF_USE_FLY)) + { + Overworld_ResetStateAfterFly(); + WarpIntoMap(); + SetMainCallback2(CB2_LoadMap); + gFieldCallback = FieldCallback_FlyArrive; + DestroyTask(taskId); + } +} + +void FieldCallback_FlyArrive(void) +{ + Overworld_PlaySpecialMapMusic(); + FadeInFromBlack(); + CreateTask(Task_FlyIn, 0); + gObjectEvents[gPlayerAvatar.objectEventId].invisible = TRUE; + if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING) + { + ObjectEventTurn(&gObjectEvents[gPlayerAvatar.objectEventId], DIR_WEST); + } + ScriptContext2_Enable(); + FreezeObjectEvents(); + gFieldCallback = NULL; +} + +void Task_FlyIn(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(); + UnfreezeObjectEvents(); + DestroyTask(taskId); + } +} diff --git a/src/party_menu.c b/src/party_menu.c index d28abea8c..626ce70f8 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -1,5 +1,5 @@ #include "global.h" -#include "malloc.h" +#include "gflib.h" #include "battle.h" #include "battle_anim.h" #include "battle_controllers.h" @@ -7,7 +7,6 @@ #include "battle_interface.h" #include "battle_tower.h" #include "berry_pouch.h" -#include "bg.h" #include "data.h" #include "decompress.h" #include "easy_chat.h" @@ -15,11 +14,10 @@ #include "evolution_scene.h" #include "field_effect.h" #include "field_player_avatar.h" -#include "field_screen_effect.h" +#include "field_fadetransition.h" #include "field_weather.h" #include "fieldmap.h" #include "fldeff.h" -#include "gpu_regs.h" #include "graphics.h" #include "help_system.h" #include "item.h" @@ -36,7 +34,6 @@ #include "new_menu_helpers.h" #include "metatile_behavior.h" #include "overworld.h" -#include "palette.h" #include "party_menu.h" #include "player_pc.h" #include "pokedex.h" @@ -50,19 +47,15 @@ #include "reshow_battle_screen.h" #include "scanline_effect.h" #include "script.h" -#include "sound.h" -#include "sprite.h" #include "start_menu.h" #include "string_util.h" #include "strings.h" #include "task.h" #include "teachy_tv.h" -#include "text.h" #include "text_window.h" #include "tm_case.h" #include "trade.h" #include "union_room.h" -#include "window.h" #include "constants/battle.h" #include "constants/easy_chat.h" #include "constants/field_effects.h" From e07c771f1840fe614ac1040d55ce842602f44c4c Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 27 Feb 2020 16:59:05 -0500 Subject: [PATCH 06/26] through Task_FallWarpFieldEffect --- asm/field_effect.s | 51 ---------------------------------- data/field_effect.s | 10 ------- include/field_fadetransition.h | 1 + src/field_effect.c | 37 ++++++++++++++++++++++++ 4 files changed, 38 insertions(+), 61 deletions(-) diff --git a/asm/field_effect.s b/asm/field_effect.s index 10b068904..fde6d7022 100644 --- a/asm/field_effect.s +++ b/asm/field_effect.s @@ -5,57 +5,6 @@ .text - thumb_func_start FieldCB_FallWarpExit -FieldCB_FallWarpExit: @ 8084454 - push {lr} - bl Overworld_PlaySpecialMapMusic - bl pal_fill_for_maplights - bl sub_8111CF0 - bl ScriptContext2_Enable - bl FreezeObjectEvents - ldr r0, _0808447C @ =Task_FallWarpFieldEffect - movs r1, 0 - bl CreateTask - ldr r1, _08084480 @ =gFieldCallback - movs r0, 0 - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_0808447C: .4byte Task_FallWarpFieldEffect -_08084480: .4byte gFieldCallback - thumb_func_end FieldCB_FallWarpExit - - thumb_func_start Task_FallWarpFieldEffect -Task_FallWarpFieldEffect: @ 8084484 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _080844B4 @ =gTasks - adds r4, r1, r0 - ldr r5, _080844B8 @ =sFallWarpEffectCBPtrs -_08084496: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _08084496 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080844B4: .4byte gTasks -_080844B8: .4byte sFallWarpEffectCBPtrs - thumb_func_end Task_FallWarpFieldEffect - thumb_func_start FallWarpEffect_1 FallWarpEffect_1: @ 80844BC push {r4-r6,lr} diff --git a/data/field_effect.s b/data/field_effect.s index 288529090..3e5eba818 100644 --- a/data/field_effect.s +++ b/data/field_effect.s @@ -6,16 +6,6 @@ .section .rodata .align 2 - .align 2 -sFallWarpEffectCBPtrs:: @ 83CC034 dataptr - .4byte FallWarpEffect_1 - .4byte FallWarpEffect_2 - .4byte FallWarpEffect_3 - .4byte FallWarpEffect_4 - .4byte FallWarpEffect_5 - .4byte FallWarpEffect_6 - .4byte FallWarpEffect_7 - .align 2 sEscalatorWarpFieldEffectFuncs:: @ 83CC050 dataptr .4byte EscalatorWarpEffect_1 diff --git a/include/field_fadetransition.h b/include/field_fadetransition.h index ada9acbb7..70aa7d023 100644 --- a/include/field_fadetransition.h +++ b/include/field_fadetransition.h @@ -16,6 +16,7 @@ void sub_807DC18(void); void FieldCallback_ReturnToEventScript2(void); void FadeInFromBlack(void); void FadeTransition_FadeInOnReturnToStartMenu(void); +void pal_fill_for_maplights(void); void sub_807DCE4(void); diff --git a/src/field_effect.c b/src/field_effect.c index 9a30088c1..f85a9aef5 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -1066,3 +1066,40 @@ void Task_FlyIn(u8 taskId) DestroyTask(taskId); } } + +void Task_FallWarpFieldEffect(u8 taskId); +bool8 FallWarpEffect_1(struct Task * task); +bool8 FallWarpEffect_2(struct Task * task); +bool8 FallWarpEffect_3(struct Task * task); +bool8 FallWarpEffect_4(struct Task * task); +bool8 FallWarpEffect_5(struct Task * task); +bool8 FallWarpEffect_6(struct Task * task); +bool8 FallWarpEffect_7(struct Task * task); + +bool8 (*const sFallWarpEffectCBPtrs[])(struct Task * task) = { + FallWarpEffect_1, + FallWarpEffect_2, + FallWarpEffect_3, + FallWarpEffect_4, + FallWarpEffect_5, + FallWarpEffect_6, + FallWarpEffect_7 +}; + +void FieldCB_FallWarpExit(void) +{ + Overworld_PlaySpecialMapMusic(); + pal_fill_for_maplights(); + sub_8111CF0(); + ScriptContext2_Enable(); + FreezeObjectEvents(); + CreateTask(Task_FallWarpFieldEffect, 0); + gFieldCallback = NULL; +} + +void Task_FallWarpFieldEffect(u8 taskId) +{ + struct Task * task = &gTasks[taskId]; + while (sFallWarpEffectCBPtrs[task->data[0]](task)) + ; +} From db12644f0001346604c19e4004eead5cd2203fea Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 28 Feb 2020 09:06:19 -0500 Subject: [PATCH 07/26] FallWarpEffect funcs --- asm/field_effect.s | 358 -------------------------------------- include/global.fieldmap.h | 2 +- include/overworld.h | 1 + src/field_effect.c | 126 ++++++++++++++ src/fldeff_rocksmash.c | 4 +- src/quest_log_player.c | 2 +- 6 files changed, 131 insertions(+), 362 deletions(-) diff --git a/asm/field_effect.s b/asm/field_effect.s index fde6d7022..a1ecaf384 100644 --- a/asm/field_effect.s +++ b/asm/field_effect.s @@ -5,364 +5,6 @@ .text - thumb_func_start FallWarpEffect_1 -FallWarpEffect_1: @ 80844BC - push {r4-r6,lr} - mov r6, r9 - mov r5, r8 - push {r5,r6} - mov r9, r0 - ldr r6, _08084558 @ =gPlayerAvatar - ldrb r0, [r6, 0x5] - lsls r5, r0, 3 - adds r5, r0 - lsls r5, 2 - ldr r0, _0808455C @ =gObjectEvents - mov r8, r0 - add r5, r8 - ldrb r0, [r6, 0x4] - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - ldr r0, _08084560 @ =gSprites - adds r4, r0 - bl CameraObjectReset2 - ldrb r1, [r6, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - add r0, r8 - ldrb r1, [r0, 0x1] - movs r2, 0x20 - orrs r1, r2 - strb r1, [r0, 0x1] - movs r0, 0x1 - strb r0, [r6, 0x6] - bl GetPlayerFacingDirection - lsls r0, 24 - lsrs r0, 24 - bl GetFaceDirectionMovementAction - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r5, 0 - bl ObjectEventSetHeldMovement - adds r3, r4, 0 - adds r3, 0x42 - ldrb r0, [r3] - lsrs r0, 6 - mov r1, r9 - strh r0, [r1, 0x10] - ldrb r0, [r5, 0x3] - movs r2, 0x4 - orrs r0, r2 - strb r0, [r5, 0x3] - ldrb r1, [r4, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r1 - orrs r0, r2 - strb r0, [r4, 0x5] - ldrb r1, [r3] - movs r0, 0x3F - ands r0, r1 - movs r1, 0x80 - orrs r0, r1 - strb r0, [r3] - mov r1, r9 - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - movs r0, 0x1 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08084558: .4byte gPlayerAvatar -_0808455C: .4byte gObjectEvents -_08084560: .4byte gSprites - thumb_func_end FallWarpEffect_1 - - thumb_func_start FallWarpEffect_2 -FallWarpEffect_2: @ 8084564 - push {r4,lr} - adds r4, r0, 0 - bl IsWeatherNotFadingIn - lsls r0, 24 - cmp r0, 0 - beq _08084578 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_08084578: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end FallWarpEffect_2 - - thumb_func_start FallWarpEffect_3 -FallWarpEffect_3: @ 8084580 - push {r4-r6,lr} - adds r5, r0, 0 - ldr r6, _080845E4 @ =gPlayerAvatar - ldrb r0, [r6, 0x4] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - ldr r0, _080845E8 @ =gSprites - adds r2, r0 - adds r0, r2, 0 - adds r0, 0x29 - movs r4, 0 - ldrsb r4, [r0, r4] - lsls r0, r4, 17 - negs r0, r0 - ldrh r1, [r2, 0x22] - ldr r3, _080845EC @ =gSpriteCoordOffsetY - adds r1, r4 - ldrh r3, [r3] - adds r1, r3 - asrs r0, 16 - adds r0, r1 - negs r0, r0 - movs r1, 0 - strh r0, [r2, 0x26] - movs r0, 0x1 - strh r0, [r5, 0xA] - strh r1, [r5, 0xC] - ldr r2, _080845F0 @ =gObjectEvents - ldrb r0, [r6, 0x5] - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - ldrb r2, [r1, 0x1] - movs r0, 0x21 - negs r0, r0 - ands r0, r2 - strb r0, [r1, 0x1] - movs r0, 0x25 - bl PlaySE - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - movs r0, 0 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080845E4: .4byte gPlayerAvatar -_080845E8: .4byte gSprites -_080845EC: .4byte gSpriteCoordOffsetY -_080845F0: .4byte gObjectEvents - thumb_func_end FallWarpEffect_3 - - thumb_func_start FallWarpEffect_4 -FallWarpEffect_4: @ 80845F4 - push {r4-r6,lr} - adds r4, r0, 0 - ldr r2, _080846A0 @ =gPlayerAvatar - ldrb r1, [r2, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _080846A4 @ =gObjectEvents - adds r6, r0, r1 - ldrb r1, [r2, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _080846A8 @ =gSprites - adds r5, r0, r1 - ldrh r0, [r4, 0xA] - ldrh r1, [r5, 0x26] - adds r0, r1 - strh r0, [r5, 0x26] - ldrh r2, [r4, 0xA] - movs r1, 0xA - ldrsh r0, [r4, r1] - cmp r0, 0x7 - bgt _08084636 - ldrh r1, [r4, 0xC] - adds r0, r2, r1 - strh r0, [r4, 0xC] - movs r1, 0xF - ands r0, r1 - cmp r0, 0 - beq _08084636 - lsls r0, r2, 1 - strh r0, [r4, 0xA] -_08084636: - ldrh r2, [r4, 0xE] - movs r1, 0xE - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _08084674 - movs r0, 0x26 - ldrsh r1, [r5, r0] - movs r0, 0x10 - negs r0, r0 - cmp r1, r0 - blt _08084674 - adds r0, r2, 0x1 - strh r0, [r4, 0xE] - ldrb r1, [r6, 0x3] - movs r0, 0x5 - negs r0, r0 - ands r0, r1 - strb r0, [r6, 0x3] - ldrb r1, [r4, 0x10] - adds r3, r5, 0 - adds r3, 0x42 - lsls r1, 6 - ldrb r2, [r3] - movs r0, 0x3F - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - ldrb r0, [r6] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r6] -_08084674: - movs r1, 0x26 - ldrsh r0, [r5, r1] - cmp r0, 0 - blt _08084698 - movs r0, 0xCF - bl PlaySE - ldrb r0, [r6] - movs r1, 0x8 - orrs r0, r1 - movs r1, 0x20 - orrs r0, r1 - strb r0, [r6] - movs r0, 0 - strh r0, [r5, 0x26] - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_08084698: - movs r0, 0 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080846A0: .4byte gPlayerAvatar -_080846A4: .4byte gObjectEvents -_080846A8: .4byte gSprites - thumb_func_end FallWarpEffect_4 - - thumb_func_start FallWarpEffect_5 -FallWarpEffect_5: @ 80846AC - push {lr} - ldrh r1, [r0, 0x8] - adds r1, 0x1 - movs r2, 0 - strh r1, [r0, 0x8] - movs r1, 0x4 - strh r1, [r0, 0xA] - strh r2, [r0, 0xC] - movs r0, 0 - bl SetCameraPanningCallback - movs r0, 0x1 - pop {r1} - bx r1 - thumb_func_end FallWarpEffect_5 - - thumb_func_start FallWarpEffect_6 -FallWarpEffect_6: @ 80846C8 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0xA - ldrsh r1, [r4, r0] - movs r0, 0 - bl SetCameraPanning - ldrh r0, [r4, 0xA] - negs r2, r0 - strh r2, [r4, 0xA] - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] - movs r1, 0x3 - ands r0, r1 - cmp r0, 0 - bne _080846F0 - lsls r0, r2, 16 - asrs r0, 17 - strh r0, [r4, 0xA] -_080846F0: - movs r1, 0xA - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080846FE - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_080846FE: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end FallWarpEffect_6 - - thumb_func_start FallWarpEffect_7 -FallWarpEffect_7: @ 8084708 - push {r4,lr} - sub sp, 0x4 - ldr r1, _08084778 @ =gPlayerAvatar - movs r0, 0 - strb r0, [r1, 0x6] - bl ScriptContext2_Disable - bl CameraObjectReset1 - bl UnfreezeObjectEvents - bl InstallCameraPanAheadCallback - mov r4, sp - adds r4, 0x2 - mov r0, sp - adds r1, r4, 0 - bl PlayerGetDestCoords - mov r0, sp - movs r1, 0 - ldrsh r0, [r0, r1] - movs r2, 0 - ldrsh r1, [r4, r2] - bl MapGridGetMetatileBehaviorAt - lsls r0, 16 - lsrs r0, 16 - bl sub_8055B38 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08084760 - ldr r0, _0808477C @ =0x00004001 - movs r1, 0x1 - bl VarSet - movs r0, 0x8 - bl SetPlayerAvatarTransitionFlags - movs r0, 0x16 - bl HelpSystem_SetSomeVariable2 -_08084760: - ldr r0, _08084780 @ =Task_FallWarpFieldEffect - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - movs r0, 0 - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08084778: .4byte gPlayerAvatar -_0808477C: .4byte 0x00004001 -_08084780: .4byte Task_FallWarpFieldEffect - thumb_func_end FallWarpEffect_7 - thumb_func_start StartEscalatorWarp StartEscalatorWarp: @ 8084784 push {r4,lr} diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index 57d8d0a35..aa1bb43ee 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -280,7 +280,7 @@ struct PlayerAvatar /* 0x202E858 */ /*0x03*/ u8 tileTransitionState; // this is a transition running state: 00 is not moving, 01 is transition between tiles, 02 means you are on the frame in which you have centered on a tile but are about to keep moving, even if changing directions. 2 is also used for a ledge hop, since you are transitioning. /*0x04*/ u8 spriteId; /*0x05*/ u8 objectEventId; - /*0x06*/ u8 unk6; + /*0x06*/ u8 preventStep; /*0x07*/ u8 gender; u8 acroBikeState; u8 unk9; diff --git a/include/overworld.h b/include/overworld.h index ac50f9c80..8fdbfabe3 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -178,6 +178,7 @@ bool32 sub_80582E0(void); bool32 sub_8058274(void); u8 GetCurrentMapBattleScene(void); void Overworld_ResetStateAfterFly(void); +bool8 sub_8055B38(u16 metatileBehavior); extern u16 gHeldKeyCodeToSend; diff --git a/src/field_effect.c b/src/field_effect.c index f85a9aef5..a8102c1d9 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -2,11 +2,16 @@ #include "gflib.h" #include "data.h" #include "decompress.h" +#include "event_data.h" #include "event_object_movement.h" +#include "field_camera.h" #include "field_effect.h" #include "field_effect_scripts.h" #include "field_fadetransition.h" +#include "field_player_avatar.h" #include "field_weather.h" +#include "fieldmap.h" +#include "help_system.h" #include "overworld.h" #include "party_menu.h" #include "quest_log.h" @@ -1103,3 +1108,124 @@ void Task_FallWarpFieldEffect(u8 taskId) while (sFallWarpEffectCBPtrs[task->data[0]](task)) ; } + +bool8 FallWarpEffect_1(struct Task *task) +{ + struct ObjectEvent *playerObject; + struct Sprite *playerSprite; + playerObject = &gObjectEvents[gPlayerAvatar.objectEventId]; + playerSprite = &gSprites[gPlayerAvatar.spriteId]; + CameraObjectReset2(); + gObjectEvents[gPlayerAvatar.objectEventId].invisible = TRUE; + gPlayerAvatar.preventStep = TRUE; + ObjectEventSetHeldMovement(playerObject, GetFaceDirectionMovementAction(GetPlayerFacingDirection())); + task->data[4] = playerSprite->subspriteMode; + playerObject->fixedPriority = 1; + playerSprite->oam.priority = 1; + playerSprite->subspriteMode = SUBSPRITES_IGNORE_PRIORITY; + task->data[0]++; + return TRUE; +} + +bool8 FallWarpEffect_2(struct Task *task) +{ + if (IsWeatherNotFadingIn()) + { + task->data[0]++; + } + return FALSE; +} + +bool8 FallWarpEffect_3(struct Task *task) +{ + struct Sprite *sprite; + s16 centerToCornerVecY; + sprite = &gSprites[gPlayerAvatar.spriteId]; + centerToCornerVecY = -(sprite->centerToCornerVecY << 1); + sprite->pos2.y = -(sprite->pos1.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY + centerToCornerVecY); + task->data[1] = 1; + task->data[2] = 0; + gObjectEvents[gPlayerAvatar.objectEventId].invisible = FALSE; + PlaySE(SE_RU_HYUU); + task->data[0]++; + return FALSE; +} + +bool8 FallWarpEffect_4(struct Task *task) +{ + struct ObjectEvent *objectEvent; + struct Sprite *sprite; + + objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + sprite = &gSprites[gPlayerAvatar.spriteId]; + sprite->pos2.y += task->data[1]; + if (task->data[1] < 8) + { + task->data[2] += task->data[1]; + if (task->data[2] & 0xf) + { + task->data[1] <<= 1; + } + } + if (task->data[3] == 0 && sprite->pos2.y >= -16) + { + task->data[3]++; + objectEvent->fixedPriority = 0; + sprite->subspriteMode = task->data[4]; + objectEvent->triggerGroundEffectsOnMove = 1; + } + if (sprite->pos2.y >= 0) + { + PlaySE(SE_W070); + objectEvent->triggerGroundEffectsOnStop = 1; + objectEvent->landingJump = 1; + sprite->pos2.y = 0; + task->data[0]++; + } + return FALSE; +} + +bool8 FallWarpEffect_5(struct Task *task) +{ + task->data[0]++; + task->data[1] = 4; + task->data[2] = 0; + SetCameraPanningCallback(NULL); + return TRUE; +} + +bool8 FallWarpEffect_6(struct Task *task) +{ + SetCameraPanning(0, task->data[1]); + task->data[1] = -task->data[1]; + task->data[2]++; + if ((task->data[2] & 3) == 0) + { + task->data[1] >>= 1; + } + if (task->data[1] == 0) + { + task->data[0]++; + } + return FALSE; +} + +bool8 FallWarpEffect_7(struct Task *task) +{ + s16 x, y; + gPlayerAvatar.preventStep = FALSE; + ScriptContext2_Disable(); + CameraObjectReset1(); + UnfreezeObjectEvents(); + InstallCameraPanAheadCallback(); + PlayerGetDestCoords(&x, &y); + // Seafoam Islands + if (sub_8055B38(MapGridGetMetatileBehaviorAt(x, y)) == TRUE) + { + VarSet(VAR_TEMP_1, 1); + SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_SURFING); + HelpSystem_SetSomeVariable2(22); + } + DestroyTask(FindTaskIdByFunc(Task_FallWarpFieldEffect)); + return FALSE; +} diff --git a/src/fldeff_rocksmash.c b/src/fldeff_rocksmash.c index 397741806..7ea18f40f 100644 --- a/src/fldeff_rocksmash.c +++ b/src/fldeff_rocksmash.c @@ -48,7 +48,7 @@ static void Task_FieldEffectShowMon_Init(u8 taskId) u8 mapObjId; ScriptContext2_Enable(); - gPlayerAvatar.unk6 = TRUE; + gPlayerAvatar.preventStep = TRUE; mapObjId = gPlayerAvatar.objectEventId; if (!ObjectEventIsMovementOverridden(&gObjectEvents[mapObjId]) || ObjectEventClearHeldMovementIfFinished(&gObjectEvents[mapObjId])) @@ -100,7 +100,7 @@ static void Task_FieldEffectShowMon_WaitFldeff(u8 taskId) static void Task_FieldEffectShowMon_Cleanup(u8 taskId) { FLDEFF_CALL_FUNC_IN_DATA(); - gPlayerAvatar.unk6 = FALSE; + gPlayerAvatar.preventStep = FALSE; DestroyTask(taskId); } diff --git a/src/quest_log_player.c b/src/quest_log_player.c index b6167a7bf..32832a04a 100644 --- a/src/quest_log_player.c +++ b/src/quest_log_player.c @@ -80,7 +80,7 @@ static void sub_8150530(void) { u8 taskId; ScriptContext2_Enable(); - gPlayerAvatar.unk6 = 1; + gPlayerAvatar.preventStep = TRUE; taskId = CreateTask(sub_81505C4, 0xFF); gTasks[taskId].data[0] = 0; } From 1779aedbf0e321188ff239095a3e20f38cf22575 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 28 Feb 2020 10:02:40 -0500 Subject: [PATCH 08/26] Escalator field effect --- asm/field_effect.s | 682 +-------------------------------- asm/overworld.s | 6 +- data/field_effect.s | 19 - include/field_effect.h | 2 +- include/field_fadetransition.h | 2 +- include/overworld.h | 2 +- include/quest_log.h | 1 + include/special_field_anim.h | 2 +- src/field_effect.c | 381 ++++++++++++++++-- src/field_fadetransition.c | 32 +- src/seagallop.c | 2 +- 11 files changed, 374 insertions(+), 757 deletions(-) diff --git a/asm/field_effect.s b/asm/field_effect.s index a1ecaf384..a331a0882 100644 --- a/asm/field_effect.s +++ b/asm/field_effect.s @@ -5,670 +5,6 @@ .text - thumb_func_start StartEscalatorWarp -StartEscalatorWarp: @ 8084784 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - lsls r1, 24 - lsrs r1, 24 - ldr r0, _080847B8 @ =Task_EscalatorWarpFieldEffect - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080847BC @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r0, 0 - strh r0, [r1, 0xA] - cmp r4, 0x6A - bne _080847B0 - movs r0, 0x1 - strh r0, [r1, 0xA] -_080847B0: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080847B8: .4byte Task_EscalatorWarpFieldEffect -_080847BC: .4byte gTasks - thumb_func_end StartEscalatorWarp - - thumb_func_start Task_EscalatorWarpFieldEffect -Task_EscalatorWarpFieldEffect: @ 80847C0 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _080847F0 @ =gTasks - adds r4, r1, r0 - ldr r5, _080847F4 @ =sEscalatorWarpFieldEffectFuncs -_080847D2: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _080847D2 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080847F0: .4byte gTasks -_080847F4: .4byte sEscalatorWarpFieldEffectFuncs - thumb_func_end Task_EscalatorWarpFieldEffect - - thumb_func_start EscalatorWarpEffect_1 -EscalatorWarpEffect_1: @ 80847F8 - push {r4,lr} - adds r4, r0, 0 - bl FreezeObjectEvents - bl CameraObjectReset2 - ldrb r0, [r4, 0xA] - bl StartEscalator - movs r0, 0x1 - bl sub_81128BC - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end EscalatorWarpEffect_1 - - thumb_func_start EscalatorWarpEffect_2 -EscalatorWarpEffect_2: @ 8084820 - push {r4,r5,lr} - adds r5, r0, 0 - ldr r0, _08084888 @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _0808488C @ =gObjectEvents - adds r4, r0, r1 - adds r0, r4, 0 - bl ObjectEventIsMovementOverridden - lsls r0, 24 - cmp r0, 0 - beq _0808484A - adds r0, r4, 0 - bl ObjectEventClearHeldMovementIfFinished - lsls r0, 24 - cmp r0, 0 - beq _0808487E -_0808484A: - bl GetPlayerFacingDirection - lsls r0, 24 - lsrs r0, 24 - bl GetFaceDirectionMovementAction - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl ObjectEventSetHeldMovement - ldrh r0, [r5, 0x8] - adds r0, 0x1 - movs r1, 0 - strh r0, [r5, 0x8] - strh r1, [r5, 0xC] - strh r1, [r5, 0xE] - ldrb r0, [r5, 0xA] - cmp r0, 0 - bne _08084878 - movs r0, 0x4 - strh r0, [r5, 0x8] -_08084878: - movs r0, 0x49 - bl PlaySE -_0808487E: - movs r0, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08084888: .4byte gPlayerAvatar -_0808488C: .4byte gObjectEvents - thumb_func_end EscalatorWarpEffect_2 - - thumb_func_start EscalatorWarpEffect_3 -EscalatorWarpEffect_3: @ 8084890 - push {r4,lr} - adds r4, r0, 0 - bl sub_80848F8 - movs r1, 0xC - ldrsh r0, [r4, r1] - cmp r0, 0x3 - ble _080848AA - bl sub_8084990 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_080848AA: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end EscalatorWarpEffect_3 - - thumb_func_start EscalatorWarpEffect_4 -EscalatorWarpEffect_4: @ 80848B4 - push {lr} - bl sub_80848F8 - bl sub_80849A0 - movs r0, 0 - pop {r1} - bx r1 - thumb_func_end EscalatorWarpEffect_4 - - thumb_func_start EscalatorWarpEffect_5 -EscalatorWarpEffect_5: @ 80848C4 - push {r4,lr} - adds r4, r0, 0 - bl sub_8084944 - movs r1, 0xC - ldrsh r0, [r4, r1] - cmp r0, 0x3 - ble _080848DE - bl sub_8084990 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_080848DE: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end EscalatorWarpEffect_5 - - thumb_func_start EscalatorWarpEffect_6 -EscalatorWarpEffect_6: @ 80848E8 - push {lr} - bl sub_8084944 - bl sub_80849A0 - movs r0, 0 - pop {r1} - bx r1 - thumb_func_end EscalatorWarpEffect_6 - - thumb_func_start sub_80848F8 -sub_80848F8: @ 80848F8 - push {r4,r5,lr} - adds r5, r0, 0 - ldr r0, _0808493C @ =gPlayerAvatar - ldrb r0, [r0, 0x4] - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - ldr r0, _08084940 @ =gSprites - adds r4, r0 - movs r0, 0xC - ldrsh r1, [r5, r0] - movs r0, 0x84 - bl Cos - strh r0, [r4, 0x24] - movs r0, 0xC - ldrsh r1, [r5, r0] - movs r0, 0x94 - bl Sin - strh r0, [r4, 0x26] - ldrh r0, [r5, 0xE] - adds r0, 0x1 - strh r0, [r5, 0xE] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08084936 - ldrh r0, [r5, 0xC] - adds r0, 0x1 - strh r0, [r5, 0xC] -_08084936: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0808493C: .4byte gPlayerAvatar -_08084940: .4byte gSprites - thumb_func_end sub_80848F8 - - thumb_func_start sub_8084944 -sub_8084944: @ 8084944 - push {r4,r5,lr} - adds r5, r0, 0 - ldr r0, _08084988 @ =gPlayerAvatar - ldrb r0, [r0, 0x4] - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - ldr r0, _0808498C @ =gSprites - adds r4, r0 - movs r0, 0xC - ldrsh r1, [r5, r0] - movs r0, 0x7C - bl Cos - strh r0, [r4, 0x24] - movs r0, 0xC - ldrsh r1, [r5, r0] - movs r0, 0x76 - bl Sin - strh r0, [r4, 0x26] - ldrh r0, [r5, 0xE] - adds r0, 0x1 - strh r0, [r5, 0xE] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08084982 - ldrh r0, [r5, 0xC] - adds r0, 0x1 - strh r0, [r5, 0xC] -_08084982: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08084988: .4byte gPlayerAvatar -_0808498C: .4byte gSprites - thumb_func_end sub_8084944 - - thumb_func_start sub_8084990 -sub_8084990: @ 8084990 - push {lr} - bl sub_8055F88 - bl sub_807DC18 - pop {r0} - bx r0 - thumb_func_end sub_8084990 - - thumb_func_start sub_80849A0 -sub_80849A0: @ 80849A0 - push {lr} - ldr r0, _080849E0 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080849DC - bl BGMusicStopped - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080849DC - bl StopEscalator - bl WarpIntoMap - ldr r1, _080849E4 @ =gFieldCallback - ldr r0, _080849E8 @ =sub_80849F4 - str r0, [r1] - ldr r0, _080849EC @ =CB2_LoadMap - bl SetMainCallback2 - ldr r0, _080849F0 @ =Task_EscalatorWarpFieldEffect - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_080849DC: - pop {r0} - bx r0 - .align 2, 0 -_080849E0: .4byte gPaletteFade -_080849E4: .4byte gFieldCallback -_080849E8: .4byte sub_80849F4 -_080849EC: .4byte CB2_LoadMap -_080849F0: .4byte Task_EscalatorWarpFieldEffect - thumb_func_end sub_80849A0 - - thumb_func_start sub_80849F4 -sub_80849F4: @ 80849F4 - push {lr} - bl Overworld_PlaySpecialMapMusic - bl pal_fill_for_maplights - bl sub_8111CF0 - bl ScriptContext2_Enable - bl FreezeObjectEvents - ldr r0, _08084A1C @ =sub_8084A24 - movs r1, 0 - bl CreateTask - ldr r1, _08084A20 @ =gFieldCallback - movs r0, 0 - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_08084A1C: .4byte sub_8084A24 -_08084A20: .4byte gFieldCallback - thumb_func_end sub_80849F4 - - thumb_func_start sub_8084A24 -sub_8084A24: @ 8084A24 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _08084A54 @ =gTasks - adds r4, r1, r0 - ldr r5, _08084A58 @ =gUnknown_83CC068 -_08084A36: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _08084A36 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08084A54: .4byte gTasks -_08084A58: .4byte gUnknown_83CC068 - thumb_func_end sub_8084A24 - - thumb_func_start sub_8084A5C -sub_8084A5C: @ 8084A5C - push {r4,r5,lr} - sub sp, 0x4 - adds r5, r0, 0 - bl CameraObjectReset2 - ldr r0, _08084ABC @ =gPlayerAvatar - ldrb r0, [r0, 0x5] - lsls r4, r0, 3 - adds r4, r0 - lsls r4, 2 - ldr r0, _08084AC0 @ =gObjectEvents - adds r4, r0 - movs r0, 0x4 - bl GetFaceDirectionMovementAction - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl ObjectEventSetHeldMovement - mov r4, sp - adds r4, 0x2 - mov r0, sp - adds r1, r4, 0 - bl PlayerGetDestCoords - mov r0, sp - movs r1, 0 - ldrsh r0, [r0, r1] - movs r2, 0 - ldrsh r1, [r4, r2] - bl MapGridGetMetatileBehaviorAt - lsls r0, 24 - lsrs r1, r0, 24 - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - movs r0, 0x10 - strh r0, [r5, 0xA] - cmp r1, 0x6B - bne _08084AC4 - movs r1, 0x1 - movs r0, 0x3 - strh r0, [r5, 0x8] - b _08084AC6 - .align 2, 0 -_08084ABC: .4byte gPlayerAvatar -_08084AC0: .4byte gObjectEvents -_08084AC4: - movs r1, 0 -_08084AC6: - adds r0, r1, 0 - bl StartEscalator - movs r0, 0x1 - add sp, 0x4 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8084A5C - - thumb_func_start sub_8084AD8 -sub_8084AD8: @ 8084AD8 - push {r4,r5,lr} - adds r5, r0, 0 - ldr r0, _08084B10 @ =gPlayerAvatar - ldrb r0, [r0, 0x4] - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - ldr r0, _08084B14 @ =gSprites - adds r4, r0 - movs r0, 0xA - ldrsh r1, [r5, r0] - movs r0, 0x84 - bl Cos - strh r0, [r4, 0x24] - movs r0, 0xA - ldrsh r1, [r5, r0] - movs r0, 0x94 - bl Sin - strh r0, [r4, 0x26] - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - movs r0, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08084B10: .4byte gPlayerAvatar -_08084B14: .4byte gSprites - thumb_func_end sub_8084AD8 - - thumb_func_start sub_8084B18 -sub_8084B18: @ 8084B18 - push {r4,r5,lr} - adds r4, r0, 0 - ldr r0, _08084B70 @ =gPlayerAvatar - ldrb r1, [r0, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08084B74 @ =gSprites - adds r5, r0, r1 - movs r0, 0xA - ldrsh r1, [r4, r0] - movs r0, 0x84 - bl Cos - strh r0, [r5, 0x24] - movs r0, 0xA - ldrsh r1, [r4, r0] - movs r0, 0x94 - bl Sin - strh r0, [r5, 0x26] - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08084B56 - ldrh r0, [r4, 0xA] - subs r0, 0x1 - strh r0, [r4, 0xA] -_08084B56: - movs r1, 0xA - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _08084B66 - strh r0, [r5, 0x24] - strh r0, [r5, 0x26] - movs r0, 0x5 - strh r0, [r4, 0x8] -_08084B66: - movs r0, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08084B70: .4byte gPlayerAvatar -_08084B74: .4byte gSprites - thumb_func_end sub_8084B18 - - thumb_func_start sub_8084B78 -sub_8084B78: @ 8084B78 - push {r4,r5,lr} - adds r5, r0, 0 - ldr r0, _08084BB0 @ =gPlayerAvatar - ldrb r0, [r0, 0x4] - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - ldr r0, _08084BB4 @ =gSprites - adds r4, r0 - movs r0, 0xA - ldrsh r1, [r5, r0] - movs r0, 0x7C - bl Cos - strh r0, [r4, 0x24] - movs r0, 0xA - ldrsh r1, [r5, r0] - movs r0, 0x76 - bl Sin - strh r0, [r4, 0x26] - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - movs r0, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08084BB0: .4byte gPlayerAvatar -_08084BB4: .4byte gSprites - thumb_func_end sub_8084B78 - - thumb_func_start sub_8084BB8 -sub_8084BB8: @ 8084BB8 - push {r4,r5,lr} - adds r4, r0, 0 - ldr r0, _08084C10 @ =gPlayerAvatar - ldrb r1, [r0, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08084C14 @ =gSprites - adds r5, r0, r1 - movs r0, 0xA - ldrsh r1, [r4, r0] - movs r0, 0x7C - bl Cos - strh r0, [r5, 0x24] - movs r0, 0xA - ldrsh r1, [r4, r0] - movs r0, 0x76 - bl Sin - strh r0, [r5, 0x26] - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08084BF6 - ldrh r0, [r4, 0xA] - subs r0, 0x1 - strh r0, [r4, 0xA] -_08084BF6: - movs r1, 0xA - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _08084C08 - strh r0, [r5, 0x24] - strh r0, [r5, 0x26] - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_08084C08: - movs r0, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08084C10: .4byte gPlayerAvatar -_08084C14: .4byte gSprites - thumb_func_end sub_8084BB8 - - thumb_func_start sub_8084C18 -sub_8084C18: @ 8084C18 - push {r4,lr} - adds r4, r0, 0 - bl IsEscalatorMoving - lsls r0, 24 - cmp r0, 0 - bne _08084C34 - bl StopEscalator - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0x1 - b _08084C36 -_08084C34: - movs r0, 0 -_08084C36: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8084C18 - - thumb_func_start sub_8084C3C -sub_8084C3C: @ 8084C3C - push {r4,lr} - ldr r0, _08084C94 @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08084C98 @ =gObjectEvents - adds r4, r0, r1 - adds r0, r4, 0 - bl ObjectEventClearHeldMovementIfFinished - lsls r0, 24 - cmp r0, 0 - beq _08084C8A - bl CameraObjectReset1 - bl ScriptContext2_Disable - bl UnfreezeObjectEvents - movs r0, 0x4 - bl GetWalkNormalMovementAction - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl ObjectEventSetHeldMovement - ldr r0, _08084C9C @ =sub_8084A24 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - movs r0, 0x2 - bl sub_81128BC -_08084C8A: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08084C94: .4byte gPlayerAvatar -_08084C98: .4byte gObjectEvents -_08084C9C: .4byte sub_8084A24 - thumb_func_end sub_8084C3C - thumb_func_start FldEff_UseWaterfall FldEff_UseWaterfall: @ 8084CA0 push {r4,lr} @@ -1304,8 +640,8 @@ _08085144: LavaridgeGymB1FWarpEffect_5: @ 808514C push {r4,lr} adds r4, r0, 0 - bl sub_8055F88 - bl sub_807DC18 + bl TryFadeOutOldMapMusic + bl WarpFadeOutScreen ldrh r0, [r4, 0x8] adds r0, 0x1 strh r0, [r4, 0x8] @@ -1808,8 +1144,8 @@ LavaridgeGym1FWarpEffect_4: @ 8085524 lsls r0, 24 cmp r0, 0 bne _08085542 - bl sub_8055F88 - bl sub_807DC18 + bl TryFadeOutOldMapMusic + bl WarpFadeOutScreen ldrh r0, [r4, 0x8] adds r0, 0x1 strh r0, [r4, 0x8] @@ -2032,8 +1368,8 @@ _080856DC: bl sub_80857F0 cmp r0, 0 bne _08085702 - bl sub_8055F88 - bl sub_807DC18 + bl TryFadeOutOldMapMusic + bl WarpFadeOutScreen movs r0, 0x1 strh r0, [r4, 0x8] _08085702: @@ -2823,8 +2159,8 @@ _08085D04: ldrh r0, [r4, 0x8] adds r0, 0x1 strh r0, [r4, 0x8] - bl sub_8055F88 - bl sub_807DC18 + bl TryFadeOutOldMapMusic + bl WarpFadeOutScreen _08085D1A: add sp, 0x8 pop {r4,r5} @@ -5376,7 +4712,7 @@ sub_8087118: @ 8087118 lsls r0, 24 cmp r0, 0 beq _08087132 - bl sub_807DC18 + bl WarpFadeOutScreen ldrh r0, [r4, 0x8] adds r0, 0x1 strh r0, [r4, 0x8] diff --git a/asm/overworld.s b/asm/overworld.s index 930b94de1..d8b87c987 100644 --- a/asm/overworld.s +++ b/asm/overworld.s @@ -2611,8 +2611,8 @@ _08055F82: bx r1 thumb_func_end GetMapMusicFadeoutSpeed - thumb_func_start sub_8055F88 -sub_8055F88: @ 8055F88 + thumb_func_start TryFadeOutOldMapMusic +TryFadeOutOldMapMusic: @ 8055F88 push {r4,lr} bl sub_8055DA4 lsls r0, 16 @@ -2638,7 +2638,7 @@ _08055FB8: bx r0 .align 2, 0 _08055FC0: .4byte 0x00004001 - thumb_func_end sub_8055F88 + thumb_func_end TryFadeOutOldMapMusic thumb_func_start BGMusicStopped BGMusicStopped: @ 8055FC4 diff --git a/data/field_effect.s b/data/field_effect.s index 3e5eba818..d6ae15de2 100644 --- a/data/field_effect.s +++ b/data/field_effect.s @@ -6,25 +6,6 @@ .section .rodata .align 2 - .align 2 -sEscalatorWarpFieldEffectFuncs:: @ 83CC050 dataptr - .4byte EscalatorWarpEffect_1 - .4byte EscalatorWarpEffect_2 - .4byte EscalatorWarpEffect_3 - .4byte EscalatorWarpEffect_4 - .4byte EscalatorWarpEffect_5 - .4byte EscalatorWarpEffect_6 - - .align 2 -gUnknown_83CC068:: @ 83CC068 dataptr - .4byte sub_8084A5C - .4byte sub_8084AD8 - .4byte sub_8084B18 - .4byte sub_8084B78 - .4byte sub_8084BB8 - .4byte sub_8084C18 - .4byte sub_8084C3C - .align 2 sUseWaterfallFieldEffectFuncs:: @ 83CC084 dataptr .4byte waterfall_0_setup diff --git a/include/field_effect.h b/include/field_effect.h index 7e980bd22..3c92afb6a 100644 --- a/include/field_effect.h +++ b/include/field_effect.h @@ -17,7 +17,7 @@ void StartEscapeRopeFieldEffect(void); void FieldEffectStop(struct Sprite *sprite, u8 id); u8 CreateTrainerSprite(u8 trainerSpriteID, s16 x, s16 y, u8 subpriority, u8 *buffer); void FieldCB_FallWarpExit(void); -void StartEscalatorWarp(u8 a0, u8 a1); +void StartEscalatorWarp(u8 metatileBehavior, u8 priority); void StartLavaridgeGymB1FWarp(u8 a0); void StartLavaridgeGym1FWarp(u8 a0); void sub_8083598(u8 a0); diff --git a/include/field_fadetransition.h b/include/field_fadetransition.h index 70aa7d023..c23f201dc 100644 --- a/include/field_fadetransition.h +++ b/include/field_fadetransition.h @@ -12,7 +12,7 @@ void DoFallWarp(void); void sub_807E59C(void); void sub_807E500(void); void sub_807DF64(void); -void sub_807DC18(void); +void WarpFadeOutScreen(void); void FieldCallback_ReturnToEventScript2(void); void FadeInFromBlack(void); void FadeTransition_FadeInOnReturnToStartMenu(void); diff --git a/include/overworld.h b/include/overworld.h index 8fdbfabe3..754094907 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -155,7 +155,7 @@ u8 GetCurrentMapType(void); u8 get_map_light_from_warp0(void); const struct MapHeader *warp1_get_mapheader(void); -void sub_8055F88(void); +void TryFadeOutOldMapMusic(void); void CB2_ReturnToFieldCableClub(void); void ResetGameStats(void); diff --git a/include/quest_log.h b/include/quest_log.h index 752cb3921..016a94267 100644 --- a/include/quest_log.h +++ b/include/quest_log.h @@ -50,5 +50,6 @@ void QuestLogSetFlagOrVar(bool8 isFlag, u16 idx, u16 value); void sub_8110840(void *oldSave); void sub_8112F18(u8 windowId); bool8 sub_8111C2C(void); +void sub_81128BC(u8 a0); #endif //GUARD_QUEST_LOG_H diff --git a/include/special_field_anim.h b/include/special_field_anim.h index d21c932bf..37c31f97b 100644 --- a/include/special_field_anim.h +++ b/include/special_field_anim.h @@ -3,7 +3,7 @@ #include "global.h" -void StartEscalator(u8 a0); +void StartEscalator(bool8 goingUp); void StopEscalator(void); bool8 IsEscalatorMoving(void); diff --git a/src/field_effect.c b/src/field_effect.c index a8102c1d9..a35fbfe7f 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -16,8 +16,11 @@ #include "party_menu.h" #include "quest_log.h" #include "script.h" +#include "special_field_anim.h" #include "task.h" #include "trainer_pokemon_sprites.h" +#include "trig.h" +#include "constants/metatile_behaviors.h" #include "constants/songs.h" #define subsprite_table(ptr) {.subsprites = ptr, .subspriteCount = (sizeof ptr) / (sizeof(struct Subsprite))} @@ -402,7 +405,7 @@ u32 FieldEffectScript_ReadWord(const u8 **script) void FieldEffectScript_LoadTiles(const u8 **script) { - const struct SpriteSheet * spriteSheet = (const struct SpriteSheet *)FieldEffectScript_ReadWord(script); + const struct SpriteSheet * spriteSheet = (const struct SpriteSheet * )FieldEffectScript_ReadWord(script); if (GetSpriteTileStartByTag(spriteSheet->tag) == 0xFFFF) LoadSpriteSheet(spriteSheet); *script += sizeof(u32); @@ -432,7 +435,7 @@ void sub_8083598(u8 paletteIdx) void FieldEffectScript_LoadFadedPal(const u8 **script) { - const struct SpritePalette * spritePalette = (const struct SpritePalette *)FieldEffectScript_ReadWord(script); + const struct SpritePalette * spritePalette = (const struct SpritePalette * )FieldEffectScript_ReadWord(script); u8 idx = IndexOfSpritePaletteTag(spritePalette->tag); LoadSpritePalette(spritePalette); if (idx == 0xFF) @@ -443,7 +446,7 @@ void FieldEffectScript_LoadFadedPal(const u8 **script) void FieldEffectScript_LoadPal(const u8 **script) { - const struct SpritePalette * spritePalette = (const struct SpritePalette *)FieldEffectScript_ReadWord(script); + const struct SpritePalette * spritePalette = (const struct SpritePalette * )FieldEffectScript_ReadWord(script); u8 idx = IndexOfSpritePaletteTag(spritePalette->tag); LoadSpritePalette(spritePalette); if (idx != 0xFF) @@ -588,7 +591,7 @@ u8 CreateMonSprite_PicBox(u16 species, s16 x, s16 y, u8 subpriority) u8 CreateMonSprite_FieldMove(u16 species, u32 d, u32 g, s16 x, s16 y, u8 subpriority) { - const struct CompressedSpritePalette *spritePalette = GetMonSpritePalStructFromOtIdPersonality(species, d, g); + const struct CompressedSpritePalette * spritePalette = GetMonSpritePalStructFromOtIdPersonality(species, d, g); u16 spriteId = CreateMonPicSprite_HandleDeoxys(species, d, g, 1, x, y, 0, spritePalette->tag); PreservePaletteInWeather(IndexOfSpritePaletteTag(spritePalette->tag) + 0x10); if (spriteId == 0xFFFF) @@ -597,7 +600,7 @@ u8 CreateMonSprite_FieldMove(u16 species, u32 d, u32 g, s16 x, s16 y, u8 subprio return spriteId; } -void FreeResourcesAndDestroySprite(struct Sprite *sprite, u8 spriteId) +void FreeResourcesAndDestroySprite(struct Sprite * sprite, u8 spriteId) { ResetPreservedPalettesInWeather(); if (sprite->oam.affineMode != ST_OAM_AFFINE_OFF) @@ -671,21 +674,21 @@ void PokeballGlowEffect_7(struct Sprite * sprite); u8 PokecenterHealEffectHelper(s32 x, s32 y); void HallOfFameRecordEffectHelper(s32 x, s32 y); -void (*const sPokecenterHealTaskCBTable[])(struct Task *) = { +void (*const sPokecenterHealTaskCBTable[])(struct Task * ) = { PokecenterHealEffect_0, PokecenterHealEffect_1, PokecenterHealEffect_2, PokecenterHealEffect_3 }; -void (*const sHallOfFameRecordTaskCBTable[])(struct Task *) = { +void (*const sHallOfFameRecordTaskCBTable[])(struct Task * ) = { HallOfFameRecordEffect_0, HallOfFameRecordEffect_1, HallOfFameRecordEffect_2, HallOfFameRecordEffect_3 }; -void (*const sPokeballGlowSpriteCBTable[])(struct Sprite *) = { +void (*const sPokeballGlowSpriteCBTable[])(struct Sprite * ) = { PokeballGlowEffect_0, PokeballGlowEffect_1, PokeballGlowEffect_2, @@ -699,7 +702,7 @@ void (*const sPokeballGlowSpriteCBTable[])(struct Sprite *) = { bool8 FldEff_PokecenterHeal(void) { u8 nPokemon; - struct Task *task; + struct Task * task; nPokemon = CalculatePlayerPartyCount(); task = &gTasks[CreateTask(Task_PokecenterHeal, 0xff)]; @@ -717,14 +720,14 @@ void Task_PokecenterHeal(u8 taskId) sPokecenterHealTaskCBTable[task->data[0]](task); } -void PokecenterHealEffect_0(struct Task *task) +void PokecenterHealEffect_0(struct Task * task) { task->data[0]++; task->data[6] = CreatePokeballGlowSprite(task->data[1], task->data[2], task->data[3], TRUE); task->data[7] = PokecenterHealEffectHelper(task->data[4], task->data[5]); } -void PokecenterHealEffect_1(struct Task *task) +void PokecenterHealEffect_1(struct Task * task) { if (gSprites[task->data[6]].data[0] > 1) { @@ -733,7 +736,7 @@ void PokecenterHealEffect_1(struct Task *task) } } -void PokecenterHealEffect_2(struct Task *task) +void PokecenterHealEffect_2(struct Task * task) { if (gSprites[task->data[6]].data[0] > 4) { @@ -741,7 +744,7 @@ void PokecenterHealEffect_2(struct Task *task) } } -void PokecenterHealEffect_3(struct Task *task) +void PokecenterHealEffect_3(struct Task * task) { if (gSprites[task->data[6]].data[0] > 6) { @@ -755,7 +758,7 @@ void PokecenterHealEffect_3(struct Task *task) bool8 FldEff_HallOfFameRecord(void) { u8 nPokemon; - struct Task *task; + struct Task * task; nPokemon = CalculatePlayerPartyCount(); task = &gTasks[CreateTask(Task_HallOfFameRecord, 0xff)]; @@ -767,19 +770,19 @@ bool8 FldEff_HallOfFameRecord(void) void Task_HallOfFameRecord(u8 taskId) { - struct Task *task; + struct Task * task; task = &gTasks[taskId]; sHallOfFameRecordTaskCBTable[task->data[0]](task); } -void HallOfFameRecordEffect_0(struct Task *task) +void HallOfFameRecordEffect_0(struct Task * task) { u8 taskId; task->data[0]++; task->data[6] = CreatePokeballGlowSprite(task->data[1], task->data[2], task->data[3], FALSE); } -void HallOfFameRecordEffect_1(struct Task *task) +void HallOfFameRecordEffect_1(struct Task * task) { if (gSprites[task->data[6]].data[0] > 1) { @@ -789,7 +792,7 @@ void HallOfFameRecordEffect_1(struct Task *task) } } -void HallOfFameRecordEffect_2(struct Task *task) +void HallOfFameRecordEffect_2(struct Task * task) { if (gSprites[task->data[6]].data[0] > 4) { @@ -797,7 +800,7 @@ void HallOfFameRecordEffect_2(struct Task *task) } } -void HallOfFameRecordEffect_3(struct Task *task) +void HallOfFameRecordEffect_3(struct Task * task) { if (gSprites[task->data[6]].data[0] > 6) { @@ -810,7 +813,7 @@ void HallOfFameRecordEffect_3(struct Task *task) u8 CreatePokeballGlowSprite(s16 duration, s16 x, s16 y, bool16 fanfare) { u8 spriteId; - struct Sprite *sprite; + struct Sprite * sprite; spriteId = CreateInvisibleSprite(SpriteCB_PokeballGlowEffect); sprite = &gSprites[spriteId]; sprite->pos2.x = x; @@ -840,7 +843,7 @@ const u8 gUnknown_83CC028[] = {16, 12, 8, 0}; const u8 gUnknown_83CC02C[] = {16, 12, 8, 0}; const u8 gUnknown_83CC030[] = { 0, 0, 0, 0}; -void PokeballGlowEffect_0(struct Sprite *sprite) +void PokeballGlowEffect_0(struct Sprite * sprite) { u8 endSpriteId; if (sprite->data[1] == 0 || (--sprite->data[1]) == 0) @@ -860,7 +863,7 @@ void PokeballGlowEffect_0(struct Sprite *sprite) } } -void PokeballGlowEffect_1(struct Sprite *sprite) +void PokeballGlowEffect_1(struct Sprite * sprite) { if ((--sprite->data[1]) == 0) { @@ -875,7 +878,7 @@ void PokeballGlowEffect_1(struct Sprite *sprite) } } -void PokeballGlowEffect_2(struct Sprite *sprite) +void PokeballGlowEffect_2(struct Sprite * sprite) { u8 phase; if ((--sprite->data[1]) == 0) @@ -905,7 +908,7 @@ void PokeballGlowEffect_2(struct Sprite *sprite) } } -void PokeballGlowEffect_3(struct Sprite *sprite) +void PokeballGlowEffect_3(struct Sprite * sprite) { u8 phase; if ((--sprite->data[1]) == 0) @@ -927,7 +930,7 @@ void PokeballGlowEffect_3(struct Sprite *sprite) MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x103, gUnknown_83CC028[phase], gUnknown_83CC02C[phase], gUnknown_83CC030[phase]); } -void PokeballGlowEffect_4(struct Sprite *sprite) +void PokeballGlowEffect_4(struct Sprite * sprite) { if ((--sprite->data[1]) == 0) { @@ -935,12 +938,12 @@ void PokeballGlowEffect_4(struct Sprite *sprite) } } -void PokeballGlowEffect_5(struct Sprite *sprite) +void PokeballGlowEffect_5(struct Sprite * sprite) { sprite->data[0]++; } -void PokeballGlowEffect_6(struct Sprite *sprite) +void PokeballGlowEffect_6(struct Sprite * sprite) { if (sprite->data[5] == 0 || IsFanfareTaskInactive()) { @@ -948,7 +951,7 @@ void PokeballGlowEffect_6(struct Sprite *sprite) } } -void PokeballGlowEffect_7(struct Sprite *sprite) +void PokeballGlowEffect_7(struct Sprite * sprite) { } @@ -1053,7 +1056,7 @@ void FieldCallback_FlyArrive(void) void Task_FlyIn(u8 taskId) { - struct Task *task; + struct Task * task; task = &gTasks[taskId]; if (task->data[0] == 0) { @@ -1109,10 +1112,10 @@ void Task_FallWarpFieldEffect(u8 taskId) ; } -bool8 FallWarpEffect_1(struct Task *task) +bool8 FallWarpEffect_1(struct Task * task) { - struct ObjectEvent *playerObject; - struct Sprite *playerSprite; + struct ObjectEvent * playerObject; + struct Sprite * playerSprite; playerObject = &gObjectEvents[gPlayerAvatar.objectEventId]; playerSprite = &gSprites[gPlayerAvatar.spriteId]; CameraObjectReset2(); @@ -1127,7 +1130,7 @@ bool8 FallWarpEffect_1(struct Task *task) return TRUE; } -bool8 FallWarpEffect_2(struct Task *task) +bool8 FallWarpEffect_2(struct Task * task) { if (IsWeatherNotFadingIn()) { @@ -1136,9 +1139,9 @@ bool8 FallWarpEffect_2(struct Task *task) return FALSE; } -bool8 FallWarpEffect_3(struct Task *task) +bool8 FallWarpEffect_3(struct Task * task) { - struct Sprite *sprite; + struct Sprite * sprite; s16 centerToCornerVecY; sprite = &gSprites[gPlayerAvatar.spriteId]; centerToCornerVecY = -(sprite->centerToCornerVecY << 1); @@ -1151,10 +1154,10 @@ bool8 FallWarpEffect_3(struct Task *task) return FALSE; } -bool8 FallWarpEffect_4(struct Task *task) +bool8 FallWarpEffect_4(struct Task * task) { - struct ObjectEvent *objectEvent; - struct Sprite *sprite; + struct ObjectEvent * objectEvent; + struct Sprite * sprite; objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; sprite = &gSprites[gPlayerAvatar.spriteId]; @@ -1185,7 +1188,7 @@ bool8 FallWarpEffect_4(struct Task *task) return FALSE; } -bool8 FallWarpEffect_5(struct Task *task) +bool8 FallWarpEffect_5(struct Task * task) { task->data[0]++; task->data[1] = 4; @@ -1194,7 +1197,7 @@ bool8 FallWarpEffect_5(struct Task *task) return TRUE; } -bool8 FallWarpEffect_6(struct Task *task) +bool8 FallWarpEffect_6(struct Task * task) { SetCameraPanning(0, task->data[1]); task->data[1] = -task->data[1]; @@ -1210,7 +1213,7 @@ bool8 FallWarpEffect_6(struct Task *task) return FALSE; } -bool8 FallWarpEffect_7(struct Task *task) +bool8 FallWarpEffect_7(struct Task * task) { s16 x, y; gPlayerAvatar.preventStep = FALSE; @@ -1229,3 +1232,299 @@ bool8 FallWarpEffect_7(struct Task *task) DestroyTask(FindTaskIdByFunc(Task_FallWarpFieldEffect)); return FALSE; } + +void Task_EscalatorWarpFieldEffect(u8 taskId); +bool8 EscalatorWarpEffect_1(struct Task * task); +bool8 EscalatorWarpEffect_2(struct Task * task); +bool8 EscalatorWarpEffect_3(struct Task * task); +bool8 EscalatorWarpEffect_4(struct Task * task); +bool8 EscalatorWarpEffect_5(struct Task * task); +bool8 EscalatorWarpEffect_6(struct Task * task); +void Escalator_AnimatePlayerGoingDown(struct Task * task); +void Escalator_AnimatePlayerGoingUp(struct Task * task); +void Escalator_BeginFadeOutToNewMap(void); +void Escalator_TransitionToWarpInEffect(void); +void FieldCB_EscalatorWarpIn(void); +void Task_EscalatorWarpInFieldEffect(u8 taskId); +bool8 EscalatorWarpInEffect_1(struct Task * task); +bool8 EscalatorWarpInEffect_2(struct Task * task); +bool8 EscalatorWarpInEffect_3(struct Task * task); +bool8 EscalatorWarpInEffect_4(struct Task * task); +bool8 EscalatorWarpInEffect_5(struct Task * task); +bool8 EscalatorWarpInEffect_6(struct Task * task); +bool8 EscalatorWarpInEffect_7(struct Task * task); + +bool8 (*const sEscalatorWarpFieldEffectFuncs[])(struct Task * task) = { + EscalatorWarpEffect_1, + EscalatorWarpEffect_2, + EscalatorWarpEffect_3, + EscalatorWarpEffect_4, + EscalatorWarpEffect_5, + EscalatorWarpEffect_6 +}; + +bool8 (*const sEscalatorWarpInFieldEffectFuncs[])(struct Task * task) = { + EscalatorWarpInEffect_1, + EscalatorWarpInEffect_2, + EscalatorWarpInEffect_3, + EscalatorWarpInEffect_4, + EscalatorWarpInEffect_5, + EscalatorWarpInEffect_6, + EscalatorWarpInEffect_7 +}; + +void StartEscalatorWarp(u8 metatileBehavior, u8 priority) +{ + u8 taskId = CreateTask(Task_EscalatorWarpFieldEffect, priority); + gTasks[taskId].data[1] = 0; + if (metatileBehavior == MB_UP_ESCALATOR) + gTasks[taskId].data[1] = 1; +} + +void Task_EscalatorWarpFieldEffect(u8 taskId) +{ + struct Task * task = &gTasks[taskId]; + while (sEscalatorWarpFieldEffectFuncs[task->data[0]](task)) + ; +} + +bool8 EscalatorWarpEffect_1(struct Task * task) +{ + FreezeObjectEvents(); + CameraObjectReset2(); + StartEscalator(task->data[1]); + sub_81128BC(1); + task->data[0]++; + return FALSE; +} + +bool8 EscalatorWarpEffect_2(struct Task * task) +{ + struct ObjectEvent * objectEvent; + objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + if (!ObjectEventIsMovementOverridden(objectEvent) || ObjectEventClearHeldMovementIfFinished(objectEvent)) + { + ObjectEventSetHeldMovement(objectEvent, GetFaceDirectionMovementAction(GetPlayerFacingDirection())); + task->data[0]++; + task->data[2] = 0; + task->data[3] = 0; + if ((u8)task->data[1] == 0) + { + task->data[0] = 4; + } + PlaySE(SE_ESUKA); + } + return FALSE; +} + +bool8 EscalatorWarpEffect_3(struct Task * task) +{ + Escalator_AnimatePlayerGoingDown(task); + if (task->data[2] > 3) + { + Escalator_BeginFadeOutToNewMap(); + task->data[0]++; + } + return FALSE; +} + +bool8 EscalatorWarpEffect_4(struct Task * task) +{ + Escalator_AnimatePlayerGoingDown(task); + Escalator_TransitionToWarpInEffect(); + return FALSE; +} + +bool8 EscalatorWarpEffect_5(struct Task * task) +{ + Escalator_AnimatePlayerGoingUp(task); + if (task->data[2] > 3) + { + Escalator_BeginFadeOutToNewMap(); + task->data[0]++; + } + return FALSE; +} + +bool8 EscalatorWarpEffect_6(struct Task * task) +{ + Escalator_AnimatePlayerGoingUp(task); + Escalator_TransitionToWarpInEffect(); + return FALSE; +} + + +void Escalator_AnimatePlayerGoingDown(struct Task *task) +{ + struct Sprite *sprite; + sprite = &gSprites[gPlayerAvatar.spriteId]; + sprite->pos2.x = Cos(0x84, task->data[2]); + sprite->pos2.y = Sin(0x94, task->data[2]); + task->data[3]++; + if (task->data[3] & 1) + { + task->data[2]++; + } +} + +void Escalator_AnimatePlayerGoingUp(struct Task *task) +{ + struct Sprite *sprite; + sprite = &gSprites[gPlayerAvatar.spriteId]; + sprite->pos2.x = Cos(0x7c, task->data[2]); + sprite->pos2.y = Sin(0x76, task->data[2]); + task->data[3]++; + if (task->data[3] & 1) + { + task->data[2]++; + } +} + +void Escalator_BeginFadeOutToNewMap(void) +{ + TryFadeOutOldMapMusic(); + WarpFadeOutScreen(); +} + +void Escalator_TransitionToWarpInEffect(void) +{ + if (!gPaletteFade.active && BGMusicStopped() == TRUE) + { + StopEscalator(); + WarpIntoMap(); + gFieldCallback = FieldCB_EscalatorWarpIn; + SetMainCallback2(CB2_LoadMap); + DestroyTask(FindTaskIdByFunc(Task_EscalatorWarpFieldEffect)); + } +} + +void FieldCB_EscalatorWarpIn(void) +{ + Overworld_PlaySpecialMapMusic(); + pal_fill_for_maplights(); + sub_8111CF0(); + ScriptContext2_Enable(); + FreezeObjectEvents(); + CreateTask(Task_EscalatorWarpInFieldEffect, 0); + gFieldCallback = NULL; +} + +void Task_EscalatorWarpInFieldEffect(u8 taskId) +{ + struct Task * task = &gTasks[taskId]; + while (sEscalatorWarpInFieldEffectFuncs[task->data[0]](task)) + ; +} + +bool8 EscalatorWarpInEffect_1(struct Task *task) +{ + struct ObjectEvent *objectEvent; + s16 x; + s16 y; + u8 behavior; + CameraObjectReset2(); + objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + ObjectEventSetHeldMovement(objectEvent, GetFaceDirectionMovementAction(DIR_EAST)); + PlayerGetDestCoords(&x, &y); + behavior = MapGridGetMetatileBehaviorAt(x, y); + task->data[0]++; + task->data[1] = 16; + if (behavior == MB_DOWN_ESCALATOR) + { + behavior = 1; + task->data[0] = 3; + } else + { + behavior = 0; + } + StartEscalator(behavior); + return TRUE; +} + +bool8 EscalatorWarpInEffect_2(struct Task *task) +{ + struct Sprite *sprite; + sprite = &gSprites[gPlayerAvatar.spriteId]; + sprite->pos2.x = Cos(0x84, task->data[1]); + sprite->pos2.y = Sin(0x94, task->data[1]); + task->data[0]++; + return FALSE; +} + +bool8 EscalatorWarpInEffect_3(struct Task *task) +{ + struct Sprite *sprite; + sprite = &gSprites[gPlayerAvatar.spriteId]; + sprite->pos2.x = Cos(0x84, task->data[1]); + sprite->pos2.y = Sin(0x94, task->data[1]); + task->data[2]++; + if (task->data[2] & 1) + { + task->data[1]--; + } + if (task->data[1] == 0) + { + sprite->pos2.x = 0; + sprite->pos2.y = 0; + task->data[0] = 5; + } + return FALSE; +} + + +bool8 EscalatorWarpInEffect_4(struct Task *task) +{ + struct Sprite *sprite; + sprite = &gSprites[gPlayerAvatar.spriteId]; + sprite->pos2.x = Cos(0x7c, task->data[1]); + sprite->pos2.y = Sin(0x76, task->data[1]); + task->data[0]++; + return FALSE; +} + +bool8 EscalatorWarpInEffect_5(struct Task *task) +{ + struct Sprite *sprite; + sprite = &gSprites[gPlayerAvatar.spriteId]; + sprite->pos2.x = Cos(0x7c, task->data[1]); + sprite->pos2.y = Sin(0x76, task->data[1]); + task->data[2]++; + if (task->data[2] & 1) + { + task->data[1]--; + } + if (task->data[1] == 0) + { + sprite->pos2.x = 0; + sprite->pos2.y = 0; + task->data[0]++; + } + return FALSE; +} + +bool8 EscalatorWarpInEffect_6(struct Task *task) +{ + if (IsEscalatorMoving()) + { + return FALSE; + } + StopEscalator(); + task->data[0]++; + return TRUE; +} + +bool8 EscalatorWarpInEffect_7(struct Task *task) +{ + struct ObjectEvent *objectEvent; + objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + if (ObjectEventClearHeldMovementIfFinished(objectEvent)) + { + CameraObjectReset1(); + ScriptContext2_Disable(); + UnfreezeObjectEvents(); + ObjectEventSetHeldMovement(objectEvent, GetWalkNormalMovementAction(DIR_EAST)); + DestroyTask(FindTaskIdByFunc(Task_EscalatorWarpInFieldEffect)); + sub_81128BC(2); + } + return FALSE; +} diff --git a/src/field_fadetransition.c b/src/field_fadetransition.c index 738dbd7a0..0076c2d8f 100644 --- a/src/field_fadetransition.c +++ b/src/field_fadetransition.c @@ -91,7 +91,7 @@ void FadeInFromBlack(void) palette_bg_faded_fill_black(); } -void sub_807DC18(void) +void WarpFadeOutScreen(void) { const struct MapHeader *header = warp1_get_mapheader(); if (header->regionMapSectionId != gMapHeader.regionMapSectionId && sub_80F8110(header->regionMapSectionId, FALSE)) @@ -530,8 +530,8 @@ bool32 sub_807E418(void) void DoWarp(void) { ScriptContext2_Enable(); - sub_8055F88(); - sub_807DC18(); + TryFadeOutOldMapMusic(); + WarpFadeOutScreen(); PlayRainStoppingSoundEffect(); PlaySE(SE_KAIDAN); gFieldCallback = sub_807DF64; @@ -541,8 +541,8 @@ void DoWarp(void) void DoDiveWarp(void) { ScriptContext2_Enable(); - sub_8055F88(); - sub_807DC18(); + TryFadeOutOldMapMusic(); + WarpFadeOutScreen(); PlayRainStoppingSoundEffect(); gFieldCallback = sub_807DF64; CreateTask(sub_807E718, 10); @@ -604,7 +604,7 @@ void sub_807E58C(void) void sub_807E59C(void) { ScriptContext2_Enable(); - sub_8055F88(); + TryFadeOutOldMapMusic(); CreateTask(sub_807E784, 10); gFieldCallback = sub_807DF94; } @@ -612,7 +612,7 @@ void sub_807E59C(void) void sub_807E5C4(void) { ScriptContext2_Enable(); - sub_807DC18(); + WarpFadeOutScreen(); CreateTask(sub_807E718, 10); gFieldCallback = nullsub_60; } @@ -641,8 +641,8 @@ static void sub_807E5EC(u8 taskId) void DoCableClubWarp(void) { ScriptContext2_Enable(); - sub_8055F88(); - sub_807DC18(); + TryFadeOutOldMapMusic(); + WarpFadeOutScreen(); PlaySE(SE_KAIDAN); CreateTask(sub_807E5EC, 10); } @@ -655,7 +655,7 @@ static void sub_807E678(u8 taskId) case 0: ClearLinkCallback_2(); FadeScreen(1, 0); - sub_8055F88(); + TryFadeOutOldMapMusic(); PlaySE(SE_KAIDAN); data[0]++; break; @@ -719,7 +719,7 @@ static void sub_807E784(u8 taskId) case 1: if (!sub_805DAD0()) { - sub_807DC18(); + WarpFadeOutScreen(); task->data[0]++; } break; @@ -773,14 +773,14 @@ static void sub_807E80C(u8 taskId) } break; case 4: - sub_8055F88(); - sub_807DC18(); + TryFadeOutOldMapMusic(); + WarpFadeOutScreen(); PlayRainStoppingSoundEffect(); task->data[0] = 0; task->func = sub_807E718; break; case 5: - sub_8055F88(); + TryFadeOutOldMapMusic(); PlayRainStoppingSoundEffect(); task->data[0] = 0; task->func = sub_807E718; @@ -808,7 +808,7 @@ static void sub_807E980(u8 taskId) data[15]--; else { - sub_8055F88(); + TryFadeOutOldMapMusic(); PlayRainStoppingSoundEffect(); playerSpr->oam.priority = 1; sub_807EB64(data[1], &data[2], &data[3]); @@ -822,7 +822,7 @@ static void sub_807E980(u8 taskId) data[15]++; if (data[15] >= 12) { - sub_807DC18(); + WarpFadeOutScreen(); data[0]++; } break; diff --git a/src/seagallop.c b/src/seagallop.c index aa0c48da1..3257819aa 100644 --- a/src/seagallop.c +++ b/src/seagallop.c @@ -295,7 +295,7 @@ static void Task_Seagallop_1(u8 taskId) if (++task->data[1] == 140) { Overworld_FadeOutMapMusic(); - sub_807DC18(); + WarpFadeOutScreen(); task->func = Task_Seagallop_2; } } From c117bc6864b951c1f6ea124aa8176e64ad25f5c8 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 28 Feb 2020 10:19:34 -0500 Subject: [PATCH 09/26] Waterfall field effect --- asm/field_effect.s | 204 -------------------------------- data/field_effect.s | 8 -- include/event_object_movement.h | 1 + src/field_effect.c | 83 +++++++++++++ 4 files changed, 84 insertions(+), 212 deletions(-) diff --git a/asm/field_effect.s b/asm/field_effect.s index a331a0882..7ebfd7a77 100644 --- a/asm/field_effect.s +++ b/asm/field_effect.s @@ -5,210 +5,6 @@ .text - thumb_func_start FldEff_UseWaterfall -FldEff_UseWaterfall: @ 8084CA0 - push {r4,lr} - ldr r4, _08084CCC @ =Task_UseWaterfall - adds r0, r4, 0 - movs r1, 0xFF - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08084CD0 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldr r2, _08084CD4 @ =gFieldEffectArguments - ldr r2, [r2] - strh r2, [r1, 0xA] - bl _call_via_r4 - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08084CCC: .4byte Task_UseWaterfall -_08084CD0: .4byte gTasks -_08084CD4: .4byte gFieldEffectArguments - thumb_func_end FldEff_UseWaterfall - - thumb_func_start Task_UseWaterfall -Task_UseWaterfall: @ 8084CD8 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _08084D14 @ =sUseWaterfallFieldEffectFuncs - ldr r2, _08084D18 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_08084CEA: - movs r0, 0x8 - ldrsh r2, [r4, r0] - lsls r2, 2 - adds r2, r5 - ldr r0, _08084D1C @ =gPlayerAvatar - ldrb r0, [r0, 0x5] - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 2 - ldr r0, _08084D20 @ =gObjectEvents - adds r1, r0 - ldr r2, [r2] - adds r0, r4, 0 - bl _call_via_r2 - lsls r0, 24 - cmp r0, 0 - bne _08084CEA - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08084D14: .4byte sUseWaterfallFieldEffectFuncs -_08084D18: .4byte gTasks -_08084D1C: .4byte gPlayerAvatar -_08084D20: .4byte gObjectEvents - thumb_func_end Task_UseWaterfall - - thumb_func_start waterfall_0_setup -waterfall_0_setup: @ 8084D24 - push {r4,lr} - adds r4, r0, 0 - bl ScriptContext2_Enable - ldr r1, _08084D40 @ =gPlayerAvatar - movs r0, 0x1 - strb r0, [r1, 0x6] - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08084D40: .4byte gPlayerAvatar - thumb_func_end waterfall_0_setup - - thumb_func_start waterfall_1_do_anim_probably -waterfall_1_do_anim_probably: @ 8084D44 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - bl ScriptContext2_Enable - adds r0, r5, 0 - bl ObjectEventIsMovementOverridden - lsls r0, 24 - cmp r0, 0 - bne _08084D74 - adds r0, r5, 0 - bl ObjectEventClearHeldMovementIfFinished - ldr r1, _08084D7C @ =gFieldEffectArguments - movs r2, 0xA - ldrsh r0, [r4, r2] - str r0, [r1] - movs r0, 0x3B - bl FieldEffectStart - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_08084D74: - movs r0, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08084D7C: .4byte gFieldEffectArguments - thumb_func_end waterfall_1_do_anim_probably - - thumb_func_start waterfall_2_wait_anim_finish_probably -waterfall_2_wait_anim_finish_probably: @ 8084D80 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x6 - bl FieldEffectActiveListContains - lsls r0, 24 - cmp r0, 0 - bne _08084D9A - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0x1 - b _08084D9C -_08084D9A: - movs r0, 0 -_08084D9C: - pop {r4} - pop {r1} - bx r1 - thumb_func_end waterfall_2_wait_anim_finish_probably - - thumb_func_start waterfall_3_move_player_probably -waterfall_3_move_player_probably: @ 8084DA4 - push {r4,r5,lr} - adds r5, r0, 0 - adds r4, r1, 0 - movs r0, 0x2 - bl sub_8063F2C - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl ObjectEventSetHeldMovement - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - movs r0, 0 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end waterfall_3_move_player_probably - - thumb_func_start waterfall_4_wait_player_move_probably -waterfall_4_wait_player_move_probably: @ 8084DCC - push {r4,r5,lr} - adds r5, r0, 0 - adds r4, r1, 0 - adds r0, r4, 0 - bl ObjectEventClearHeldMovementIfFinished - lsls r0, 24 - cmp r0, 0 - bne _08084DE2 - movs r0, 0 - b _08084E1E -_08084DE2: - ldrb r0, [r4, 0x1E] - bl MetatileBehavior_IsWaterfall - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0 - bne _08084E18 - bl ScriptContext2_Disable - ldr r0, _08084E10 @ =gPlayerAvatar - strb r4, [r0, 0x6] - ldr r0, _08084E14 @ =Task_UseWaterfall - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - movs r0, 0x2B - bl FieldEffectActiveListRemove - movs r0, 0 - b _08084E1E - .align 2, 0 -_08084E10: .4byte gPlayerAvatar -_08084E14: .4byte Task_UseWaterfall -_08084E18: - movs r0, 0x3 - strh r0, [r5, 0x8] - movs r0, 0x1 -_08084E1E: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end waterfall_4_wait_player_move_probably - @ These are leftovers from RS thumb_func_start FldEff_UseDive FldEff_UseDive: @ 8084E24 diff --git a/data/field_effect.s b/data/field_effect.s index d6ae15de2..d2b02436f 100644 --- a/data/field_effect.s +++ b/data/field_effect.s @@ -6,14 +6,6 @@ .section .rodata .align 2 - .align 2 -sUseWaterfallFieldEffectFuncs:: @ 83CC084 dataptr - .4byte waterfall_0_setup - .4byte waterfall_1_do_anim_probably - .4byte waterfall_2_wait_anim_finish_probably - .4byte waterfall_3_move_player_probably - .4byte waterfall_4_wait_player_move_probably - .align 2 sDiveFieldEffectFuncPtrs:: @ 83CC098 dataptr .4byte dive_1_lock diff --git a/include/event_object_movement.h b/include/event_object_movement.h index baf66d737..ebd5b44db 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -116,6 +116,7 @@ void RfuUnionObjectToggleInvisibility(u8 objectEventId, bool32 invisible); bool32 RfuUnionObjectIsInvisible(u8 objectEventId); void RfuUnionObjectStartWarp(u8 objectEventId, u8 animNo); bool32 RfuUnionObjectIsWarping(u8 objectEventId); +u8 sub_8063F2C(u8 direction); void sub_805F378(s16 x, s16 y); diff --git a/src/field_effect.c b/src/field_effect.c index a35fbfe7f..ff1e41146 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -12,6 +12,7 @@ #include "field_weather.h" #include "fieldmap.h" #include "help_system.h" +#include "metatile_behavior.h" #include "overworld.h" #include "party_menu.h" #include "quest_log.h" @@ -1528,3 +1529,85 @@ bool8 EscalatorWarpInEffect_7(struct Task *task) } return FALSE; } + +void Task_UseWaterfall(u8 taskId); + +bool8 waterfall_0_setup(struct Task * task, struct ObjectEvent * playerObj); +bool8 waterfall_1_do_anim_probably(struct Task * task, struct ObjectEvent * playerObj); +bool8 waterfall_2_wait_anim_finish_probably(struct Task * task, struct ObjectEvent * playerObj); +bool8 waterfall_3_move_player_probably(struct Task * task, struct ObjectEvent * playerObj); +bool8 waterfall_4_wait_player_move_probably(struct Task * task, struct ObjectEvent * playerObj); + +bool8 (*const sUseWaterfallFieldEffectFuncs[])(struct Task * task, struct ObjectEvent * playerObj) = { + waterfall_0_setup, + waterfall_1_do_anim_probably, + waterfall_2_wait_anim_finish_probably, + waterfall_3_move_player_probably, + waterfall_4_wait_player_move_probably +}; + +u32 FldEff_UseWaterfall(void) +{ + u8 taskId = CreateTask(Task_UseWaterfall, 0xFF); + gTasks[taskId].data[1] = gFieldEffectArguments[0]; + Task_UseWaterfall(taskId); + return 0; +} + +void Task_UseWaterfall(u8 taskId) +{ + while (sUseWaterfallFieldEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId], &gObjectEvents[gPlayerAvatar.objectEventId])) + ; +} + +bool8 waterfall_0_setup(struct Task * task, struct ObjectEvent * playerObj) +{ + ScriptContext2_Enable(); + gPlayerAvatar.preventStep = TRUE; + task->data[0]++; + return FALSE; +} + +bool8 waterfall_1_do_anim_probably(struct Task * task, struct ObjectEvent * playerObj) +{ + ScriptContext2_Enable(); + if (!ObjectEventIsMovementOverridden(playerObj)) + { + ObjectEventClearHeldMovementIfFinished(playerObj); + gFieldEffectArguments[0] = task->data[1]; + FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); + task->data[0]++; + } + return FALSE; +} + +bool8 waterfall_2_wait_anim_finish_probably(struct Task * task, struct ObjectEvent * playerObj) +{ + if (FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON)) + return FALSE; + task->data[0]++; + return TRUE; +} + +bool8 waterfall_3_move_player_probably(struct Task * task, struct ObjectEvent * playerObj) +{ + ObjectEventSetHeldMovement(playerObj, sub_8063F2C(DIR_NORTH)); + task->data[0]++; + return FALSE; +} + +bool8 waterfall_4_wait_player_move_probably(struct Task * task, struct ObjectEvent * playerObj) +{ + if (!ObjectEventClearHeldMovementIfFinished(playerObj)) + return FALSE; + if (MetatileBehavior_IsWaterfall(playerObj->mapobj_unk_1E)) + { + task->data[0] = 3; + return TRUE; + } + ScriptContext2_Disable(); + gPlayerAvatar.preventStep = FALSE; + DestroyTask(FindTaskIdByFunc(Task_UseWaterfall)); + FieldEffectActiveListRemove(FLDEFF_USE_WATERFALL); + return FALSE; +} From 8a092738468de1f4bbe11b7ef4d338735312e9dd Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 28 Feb 2020 11:16:03 -0500 Subject: [PATCH 10/26] Unused dive field effect --- asm/field_effect.s | 138 --------------------------------- data/field_effect.s | 6 -- include/field_control_avatar.h | 1 + src/field_effect.c | 56 +++++++++++++ 4 files changed, 57 insertions(+), 144 deletions(-) diff --git a/asm/field_effect.s b/asm/field_effect.s index 7ebfd7a77..4d6b6984a 100644 --- a/asm/field_effect.s +++ b/asm/field_effect.s @@ -5,144 +5,6 @@ .text - @ These are leftovers from RS - thumb_func_start FldEff_UseDive -FldEff_UseDive: @ 8084E24 - push {r4,lr} - ldr r4, _08084E54 @ =Task_Dive - adds r0, r4, 0 - movs r1, 0xFF - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08084E58 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldr r3, _08084E5C @ =gFieldEffectArguments - ldr r2, [r3] - strh r2, [r1, 0x26] - ldr r2, [r3, 0x4] - strh r2, [r1, 0x24] - bl _call_via_r4 - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08084E54: .4byte Task_Dive -_08084E58: .4byte gTasks -_08084E5C: .4byte gFieldEffectArguments - thumb_func_end FldEff_UseDive - - thumb_func_start Task_Dive -Task_Dive: @ 8084E60 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _08084E90 @ =sDiveFieldEffectFuncPtrs - ldr r2, _08084E94 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_08084E72: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _08084E72 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08084E90: .4byte sDiveFieldEffectFuncPtrs -_08084E94: .4byte gTasks - thumb_func_end Task_Dive - - thumb_func_start dive_1_lock -dive_1_lock: @ 8084E98 - ldr r2, _08084EA8 @ =gPlayerAvatar - movs r1, 0x1 - strb r1, [r2, 0x6] - ldrh r1, [r0, 0x8] - adds r1, 0x1 - strh r1, [r0, 0x8] - movs r0, 0 - bx lr - .align 2, 0 -_08084EA8: .4byte gPlayerAvatar - thumb_func_end dive_1_lock - - thumb_func_start dive_2_unknown -dive_2_unknown: @ 8084EAC - push {r4,lr} - adds r4, r0, 0 - bl ScriptContext2_Enable - ldr r1, _08084ED0 @ =gFieldEffectArguments - movs r2, 0x26 - ldrsh r0, [r4, r2] - str r0, [r1] - movs r0, 0x3B - bl FieldEffectStart - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08084ED0: .4byte gFieldEffectArguments - thumb_func_end dive_2_unknown - - thumb_func_start dive_3_unknown -dive_3_unknown: @ 8084ED4 - push {lr} - sub sp, 0x8 - mov r1, sp - adds r1, 0x2 - mov r0, sp - bl PlayerGetDestCoords - movs r0, 0x6 - bl FieldEffectActiveListContains - lsls r0, 24 - cmp r0, 0 - bne _08084F18 - ldr r2, _08084F20 @ =gObjectEvents - ldr r0, _08084F24 @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r1, [r0, 0x1E] - mov r0, sp - bl dive_warp - ldr r0, _08084F28 @ =Task_Dive - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - movs r0, 0x2C - bl FieldEffectActiveListRemove -_08084F18: - movs r0, 0 - add sp, 0x8 - pop {r1} - bx r1 - .align 2, 0 -_08084F20: .4byte gObjectEvents -_08084F24: .4byte gPlayerAvatar -_08084F28: .4byte Task_Dive - thumb_func_end dive_3_unknown - thumb_func_start StartLavaridgeGymB1FWarp StartLavaridgeGymB1FWarp: @ 8084F2C push {lr} diff --git a/data/field_effect.s b/data/field_effect.s index d2b02436f..596084514 100644 --- a/data/field_effect.s +++ b/data/field_effect.s @@ -6,12 +6,6 @@ .section .rodata .align 2 - .align 2 -sDiveFieldEffectFuncPtrs:: @ 83CC098 dataptr - .4byte dive_1_lock - .4byte dive_2_unknown - .4byte dive_3_unknown - .align 2 sLavaridgeGymB1FWarpEffectFuncs:: @ 83CC0A4 dataptr .4byte LavaridgeGymB1FWarpEffect_1 diff --git a/include/field_control_avatar.h b/include/field_control_avatar.h index 57a2fab66..a9ddd4b5c 100644 --- a/include/field_control_avatar.h +++ b/include/field_control_avatar.h @@ -8,5 +8,6 @@ extern u32 gUnknown_3005078; void RestartWildEncounterImmunitySteps(void); void ClearPoisonStepCounter(void); void SetCableClubWarp(void); +void dive_warp(struct MapPosition * pos, u16 behavior); #endif //GUARD_FIELD_CONTROL_AVATAR_H diff --git a/src/field_effect.c b/src/field_effect.c index ff1e41146..c848a43c5 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -5,6 +5,7 @@ #include "event_data.h" #include "event_object_movement.h" #include "field_camera.h" +#include "field_control_avatar.h" #include "field_effect.h" #include "field_effect_scripts.h" #include "field_fadetransition.h" @@ -1611,3 +1612,58 @@ bool8 waterfall_4_wait_player_move_probably(struct Task * task, struct ObjectEve FieldEffectActiveListRemove(FLDEFF_USE_WATERFALL); return FALSE; } + +void Task_Dive(u8 taskId); +bool8 dive_1_lock(struct Task * task); +bool8 dive_2_unknown(struct Task * task); +bool8 dive_3_unknown(struct Task * task); + +bool8 (*const sDiveFieldEffectFuncPtrs[])(struct Task * task) = { + dive_1_lock, + dive_2_unknown, + dive_3_unknown +}; + +u32 FldEff_UseDive(void) +{ + u8 taskId = CreateTask(Task_Dive, 0xFF); + gTasks[taskId].data[15] = gFieldEffectArguments[0]; + gTasks[taskId].data[14] = gFieldEffectArguments[1]; + Task_Dive(taskId); + return 0; +} + +void Task_Dive(u8 taskId) +{ + while (sDiveFieldEffectFuncPtrs[gTasks[taskId].data[0]](&gTasks[taskId])) + ; +} + +bool8 dive_1_lock(struct Task * task) +{ + gPlayerAvatar.preventStep = TRUE; + task->data[0]++; + return FALSE; +} + +bool8 dive_2_unknown(struct Task * task) +{ + ScriptContext2_Enable(); + gFieldEffectArguments[0] = task->data[15]; + FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); + task->data[0]++; + return FALSE; +} + +bool8 dive_3_unknown(struct Task * task) +{ + struct MapPosition pos; + PlayerGetDestCoords(&pos.x, &pos.y); + if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON)) + { + dive_warp(&pos, gObjectEvents[gPlayerAvatar.objectEventId].mapobj_unk_1E); + DestroyTask(FindTaskIdByFunc(Task_Dive)); + FieldEffectActiveListRemove(FLDEFF_USE_DIVE); + } + return FALSE; +} From 9cf19244fa1fe925d4273eb32c8b7c68c5271152 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 28 Feb 2020 13:18:21 -0500 Subject: [PATCH 11/26] Port Lavaridge Gym B1F Warp from Emerald --- asm/field_effect.s | 652 +++----------------------------- asm/field_effect_helpers.s | 12 +- data/field_effect.s | 38 +- data/field_effect_scripts.s | 8 +- include/event_object_movement.h | 1 + include/field_fadetransition.h | 2 +- src/field_effect.c | 211 ++++++++++- src/field_fadetransition.c | 12 +- src/quest_log_player.c | 2 +- 9 files changed, 294 insertions(+), 644 deletions(-) diff --git a/asm/field_effect.s b/asm/field_effect.s index 4d6b6984a..afd25e8b3 100644 --- a/asm/field_effect.s +++ b/asm/field_effect.s @@ -5,548 +5,6 @@ .text - thumb_func_start StartLavaridgeGymB1FWarp -StartLavaridgeGymB1FWarp: @ 8084F2C - push {lr} - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - ldr r0, _08084F40 @ =Task_LavaridgeGymB1FWarp - bl CreateTask - pop {r0} - bx r0 - .align 2, 0 -_08084F40: .4byte Task_LavaridgeGymB1FWarp - thumb_func_end StartLavaridgeGymB1FWarp - - thumb_func_start Task_LavaridgeGymB1FWarp -Task_LavaridgeGymB1FWarp: @ 8084F44 - push {r4-r6,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r6, _08084F8C @ =sLavaridgeGymB1FWarpEffectFuncs - ldr r2, _08084F90 @ =gTasks - ldr r5, _08084F94 @ =gPlayerAvatar - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_08084F58: - movs r0, 0x8 - ldrsh r3, [r4, r0] - lsls r3, 2 - adds r3, r6 - ldrb r0, [r5, 0x5] - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 2 - ldr r0, _08084F98 @ =gObjectEvents - adds r1, r0 - ldrb r0, [r5, 0x4] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - ldr r0, _08084F9C @ =gSprites - adds r2, r0 - ldr r3, [r3] - adds r0, r4, 0 - bl _call_via_r3 - lsls r0, 24 - cmp r0, 0 - bne _08084F58 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08084F8C: .4byte sLavaridgeGymB1FWarpEffectFuncs -_08084F90: .4byte gTasks -_08084F94: .4byte gPlayerAvatar -_08084F98: .4byte gObjectEvents -_08084F9C: .4byte gSprites - thumb_func_end Task_LavaridgeGymB1FWarp - - thumb_func_start LavaridgeGymB1FWarpEffect_1 -LavaridgeGymB1FWarpEffect_1: @ 8084FA0 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - bl FreezeObjectEvents - bl CameraObjectReset2 - movs r0, 0 - bl SetCameraPanningCallback - ldr r0, _08084FD4 @ =gPlayerAvatar - movs r2, 0x1 - strb r2, [r0, 0x6] - ldrb r0, [r5, 0x3] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r5, 0x3] - strh r2, [r4, 0xA] - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0x1 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08084FD4: .4byte gPlayerAvatar - thumb_func_end LavaridgeGymB1FWarpEffect_1 - - thumb_func_start LavaridgeGymB1FWarpEffect_2 -LavaridgeGymB1FWarpEffect_2: @ 8084FD8 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0xA - ldrsh r1, [r4, r0] - movs r0, 0 - bl SetCameraPanning - ldrh r0, [r4, 0xA] - negs r0, r0 - strh r0, [r4, 0xA] - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x7 - ble _08085004 - movs r0, 0 - strh r0, [r4, 0xC] - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_08085004: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end LavaridgeGymB1FWarpEffect_2 - - thumb_func_start LavaridgeGymB1FWarpEffect_3 -LavaridgeGymB1FWarpEffect_3: @ 808500C - push {r4,r5,lr} - adds r4, r0, 0 - movs r0, 0 - strh r0, [r2, 0x26] - movs r0, 0x1 - strh r0, [r4, 0xE] - ldr r3, _08085054 @ =gFieldEffectArguments - movs r5, 0x10 - ldrsh r0, [r1, r5] - str r0, [r3] - movs r5, 0x12 - ldrsh r0, [r1, r5] - str r0, [r3, 0x4] - adds r0, r2, 0 - adds r0, 0x43 - ldrb r0, [r0] - subs r0, 0x1 - str r0, [r3, 0x8] - ldrb r0, [r2, 0x5] - lsls r0, 28 - lsrs r0, 30 - str r0, [r3, 0xC] - movs r0, 0x32 - bl FieldEffectStart - movs r0, 0xAB - bl PlaySE - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0x1 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08085054: .4byte gFieldEffectArguments - thumb_func_end LavaridgeGymB1FWarpEffect_3 - - thumb_func_start LavaridgeGymB1FWarpEffect_4 -LavaridgeGymB1FWarpEffect_4: @ 8085058 - push {r4-r7,lr} - adds r4, r0, 0 - adds r6, r1, 0 - adds r5, r2, 0 - movs r0, 0xA - ldrsh r1, [r4, r0] - movs r0, 0 - bl SetCameraPanning - ldrh r0, [r4, 0xA] - negs r2, r0 - strh r2, [r4, 0xA] - ldrh r0, [r4, 0xC] - adds r1, r0, 0x1 - strh r1, [r4, 0xC] - lsls r0, r1, 16 - asrs r0, 16 - cmp r0, 0x11 - bgt _08085092 - movs r0, 0x1 - ands r1, r0 - cmp r1, 0 - bne _080850A4 - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, 0x3 - bgt _080850A4 - lsls r0, r2, 1 - b _080850A2 -_08085092: - movs r0, 0x4 - ands r1, r0 - cmp r1, 0 - bne _080850A4 - lsls r0, r2, 16 - cmp r0, 0 - ble _080850A4 - asrs r0, 17 -_080850A2: - strh r0, [r4, 0xA] -_080850A4: - movs r1, 0xC - ldrsh r0, [r4, r1] - cmp r0, 0x6 - ble _080850F0 - adds r0, r5, 0 - adds r0, 0x29 - movs r1, 0 - ldrsb r1, [r0, r1] - lsls r2, r1, 17 - negs r2, r2 - movs r7, 0x26 - ldrsh r3, [r5, r7] - movs r7, 0x22 - ldrsh r0, [r5, r7] - adds r0, r1 - ldr r1, _080850E8 @ =gSpriteCoordOffsetY - movs r7, 0 - ldrsh r1, [r1, r7] - adds r0, r1 - asrs r2, 16 - adds r0, r2 - cmn r3, r0 - ble _080850EC - ldrh r0, [r5, 0x26] - ldrh r1, [r4, 0xE] - subs r0, r1 - strh r0, [r5, 0x26] - lsls r0, r1, 16 - asrs r0, 16 - cmp r0, 0x7 - bgt _080850F0 - adds r0, r1, 0x1 - strh r0, [r4, 0xE] - b _080850F0 - .align 2, 0 -_080850E8: .4byte gSpriteCoordOffsetY -_080850EC: - movs r0, 0x1 - strh r0, [r4, 0x10] -_080850F0: - ldrh r2, [r4, 0x12] - movs r1, 0x12 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _0808512E - movs r7, 0x26 - ldrsh r1, [r5, r7] - movs r0, 0x10 - negs r0, r0 - cmp r1, r0 - bge _0808512E - adds r0, r2, 0x1 - strh r0, [r4, 0x12] - ldrb r0, [r6, 0x3] - movs r2, 0x4 - orrs r0, r2 - strb r0, [r6, 0x3] - ldrb r1, [r5, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r1 - orrs r0, r2 - strb r0, [r5, 0x5] - adds r2, r5, 0 - adds r2, 0x42 - ldrb r1, [r2] - movs r0, 0x3F - ands r0, r1 - movs r1, 0x80 - orrs r0, r1 - strb r0, [r2] -_0808512E: - movs r1, 0xA - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _08085144 - movs r7, 0x10 - ldrsh r0, [r4, r7] - cmp r0, 0 - beq _08085144 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_08085144: - movs r0, 0 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end LavaridgeGymB1FWarpEffect_4 - - thumb_func_start LavaridgeGymB1FWarpEffect_5 -LavaridgeGymB1FWarpEffect_5: @ 808514C - push {r4,lr} - adds r4, r0, 0 - bl TryFadeOutOldMapMusic - bl WarpFadeOutScreen - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end LavaridgeGymB1FWarpEffect_5 - - thumb_func_start LavaridgeGymB1FWarpEffect_6 -LavaridgeGymB1FWarpEffect_6: @ 8085168 - push {lr} - ldr r0, _080851A8 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080851A0 - bl BGMusicStopped - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080851A0 - bl WarpIntoMap - ldr r1, _080851AC @ =gFieldCallback - ldr r0, _080851B0 @ =FieldCB_LavaridgeGymB1FWarpExit - str r0, [r1] - ldr r0, _080851B4 @ =CB2_LoadMap - bl SetMainCallback2 - ldr r0, _080851B8 @ =Task_LavaridgeGymB1FWarp - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_080851A0: - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_080851A8: .4byte gPaletteFade -_080851AC: .4byte gFieldCallback -_080851B0: .4byte FieldCB_LavaridgeGymB1FWarpExit -_080851B4: .4byte CB2_LoadMap -_080851B8: .4byte Task_LavaridgeGymB1FWarp - thumb_func_end LavaridgeGymB1FWarpEffect_6 - - thumb_func_start FieldCB_LavaridgeGymB1FWarpExit -FieldCB_LavaridgeGymB1FWarpExit: @ 80851BC - push {lr} - bl Overworld_PlaySpecialMapMusic - bl pal_fill_for_maplights - bl sub_8111CF0 - bl ScriptContext2_Enable - ldr r0, _080851E0 @ =gFieldCallback - movs r1, 0 - str r1, [r0] - ldr r0, _080851E4 @ =Task_LavaridgeGymB1FWarpExit - bl CreateTask - pop {r0} - bx r0 - .align 2, 0 -_080851E0: .4byte gFieldCallback -_080851E4: .4byte Task_LavaridgeGymB1FWarpExit - thumb_func_end FieldCB_LavaridgeGymB1FWarpExit - - thumb_func_start Task_LavaridgeGymB1FWarpExit -Task_LavaridgeGymB1FWarpExit: @ 80851E8 - push {r4-r6,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r6, _08085230 @ =sLavaridgeGymB1FWarpExitEffectFuncs - ldr r2, _08085234 @ =gTasks - ldr r5, _08085238 @ =gPlayerAvatar - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_080851FC: - movs r0, 0x8 - ldrsh r3, [r4, r0] - lsls r3, 2 - adds r3, r6 - ldrb r0, [r5, 0x5] - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 2 - ldr r0, _0808523C @ =gObjectEvents - adds r1, r0 - ldrb r0, [r5, 0x4] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - ldr r0, _08085240 @ =gSprites - adds r2, r0 - ldr r3, [r3] - adds r0, r4, 0 - bl _call_via_r3 - lsls r0, 24 - cmp r0, 0 - bne _080851FC - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08085230: .4byte sLavaridgeGymB1FWarpExitEffectFuncs -_08085234: .4byte gTasks -_08085238: .4byte gPlayerAvatar -_0808523C: .4byte gObjectEvents -_08085240: .4byte gSprites - thumb_func_end Task_LavaridgeGymB1FWarpExit - - thumb_func_start LavaridgeGymB1FWarpExitEffect_1 -LavaridgeGymB1FWarpExitEffect_1: @ 8085244 - push {r4,r5,lr} - adds r5, r0, 0 - adds r4, r1, 0 - bl CameraObjectReset2 - bl FreezeObjectEvents - ldr r1, _08085270 @ =gPlayerAvatar - movs r0, 0x1 - strb r0, [r1, 0x6] - ldrb r0, [r4, 0x1] - movs r1, 0x20 - orrs r0, r1 - strb r0, [r4, 0x1] - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - movs r0, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08085270: .4byte gPlayerAvatar - thumb_func_end LavaridgeGymB1FWarpExitEffect_1 - - thumb_func_start LavaridgeGymB1FWarpExitEffect_2 -LavaridgeGymB1FWarpExitEffect_2: @ 8085274 - push {r4-r6,lr} - adds r4, r0, 0 - adds r5, r1, 0 - adds r6, r2, 0 - bl IsWeatherNotFadingIn - lsls r0, 24 - cmp r0, 0 - beq _080852B4 - ldr r1, _080852BC @ =gFieldEffectArguments - movs r2, 0x10 - ldrsh r0, [r5, r2] - str r0, [r1] - movs r2, 0x12 - ldrsh r0, [r5, r2] - str r0, [r1, 0x4] - adds r0, r6, 0 - adds r0, 0x43 - ldrb r0, [r0] - subs r0, 0x1 - str r0, [r1, 0x8] - ldrb r0, [r6, 0x5] - lsls r0, 28 - lsrs r0, 30 - str r0, [r1, 0xC] - movs r0, 0x31 - bl FieldEffectStart - strh r0, [r4, 0xA] - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_080852B4: - movs r0, 0 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080852BC: .4byte gFieldEffectArguments - thumb_func_end LavaridgeGymB1FWarpExitEffect_2 - - thumb_func_start LavaridgeGymB1FWarpExitEffect_3 -LavaridgeGymB1FWarpExitEffect_3: @ 80852C0 - push {r4,lr} - adds r2, r0, 0 - adds r4, r1, 0 - movs r0, 0xA - ldrsh r1, [r2, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08085310 @ =gSprites - adds r0, r1 - adds r0, 0x2B - ldrb r0, [r0] - cmp r0, 0x1 - bls _08085308 - ldrh r0, [r2, 0x8] - adds r0, 0x1 - strh r0, [r2, 0x8] - ldrb r1, [r4, 0x1] - movs r0, 0x21 - negs r0, r0 - ands r0, r1 - strb r0, [r4, 0x1] - bl CameraObjectReset1 - movs r0, 0xA8 - bl PlaySE - movs r0, 0x4 - bl sub_8064194 - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl ObjectEventSetHeldMovement -_08085308: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08085310: .4byte gSprites - thumb_func_end LavaridgeGymB1FWarpExitEffect_3 - - thumb_func_start LavaridgeGymB1FWarpExitEffect_4 -LavaridgeGymB1FWarpExitEffect_4: @ 8085314 - push {lr} - adds r0, r1, 0 - bl ObjectEventClearHeldMovementIfFinished - lsls r0, 24 - cmp r0, 0 - beq _0808533E - ldr r1, _08085344 @ =gPlayerAvatar - movs r0, 0 - strb r0, [r1, 0x6] - bl ScriptContext2_Disable - bl UnfreezeObjectEvents - ldr r0, _08085348 @ =Task_LavaridgeGymB1FWarpExit - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_0808533E: - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_08085344: .4byte gPlayerAvatar -_08085348: .4byte Task_LavaridgeGymB1FWarpExit - thumb_func_end LavaridgeGymB1FWarpExitEffect_4 - thumb_func_start FldEff_LavaridgeGymWarp FldEff_LavaridgeGymWarp: @ 808534C push {r4,lr} @@ -1406,7 +864,7 @@ _080859C4: FieldCallback_EscapeRopeExit: @ 80859D4 push {lr} bl Overworld_PlaySpecialMapMusic - bl pal_fill_for_maplights + bl WarpFadeInScreen bl sub_8111CF0 bl ScriptContext2_Enable bl FreezeObjectEvents @@ -1872,7 +1330,7 @@ _08085D84: .4byte Task_DoTeleportFieldEffect FieldCallback_TeleportIn: @ 8085D88 push {lr} bl Overworld_PlaySpecialMapMusic - bl pal_fill_for_maplights + bl WarpFadeInScreen bl sub_8111CF0 bl ScriptContext2_Enable bl FreezeObjectEvents @@ -3372,10 +2830,10 @@ _0808693E: bx r0 thumb_func_end sub_8086920 - thumb_func_start sub_8086944 -sub_8086944: @ 8086944 + thumb_func_start FldEff_UseSurf +FldEff_UseSurf: @ 8086944 push {r4,lr} - ldr r0, _08086980 @ =sub_8086990 + ldr r0, _08086980 @ =Task_FldEffUseSurf movs r1, 0xFF bl CreateTask lsls r0, 24 @@ -3389,7 +2847,7 @@ sub_8086944: @ 8086944 ldr r0, [r0] strh r0, [r1, 0x26] bl sav1_reset_battle_music_maybe - ldr r4, _0808698C @ =0x00000131 + ldr r4, _0808698C @ =0x00000131 @MUS_NAMINORI adds r0, r4, 0 bl sub_8056124 cmp r0, 0 @@ -3402,19 +2860,19 @@ _08086978: pop {r1} bx r1 .align 2, 0 -_08086980: .4byte sub_8086990 +_08086980: .4byte Task_FldEffUseSurf _08086984: .4byte gTasks _08086988: .4byte gFieldEffectArguments -_0808698C: .4byte 0x00000131 - thumb_func_end sub_8086944 +_0808698C: .4byte 0x00000131 @MUS_NAMINORI + thumb_func_end FldEff_UseSurf - thumb_func_start sub_8086990 -sub_8086990: @ 8086990 + thumb_func_start Task_FldEffUseSurf +Task_FldEffUseSurf: @ 8086990 push {lr} adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 - ldr r3, _080869B8 @ =gUnknown_83CC154 + ldr r3, _080869B8 @ =sUseSurfEffectFuncs ldr r2, _080869BC @ =gTasks lsls r0, r1, 2 adds r0, r1 @@ -3429,12 +2887,12 @@ sub_8086990: @ 8086990 pop {r0} bx r0 .align 2, 0 -_080869B8: .4byte gUnknown_83CC154 +_080869B8: .4byte sUseSurfEffectFuncs _080869BC: .4byte gTasks - thumb_func_end sub_8086990 + thumb_func_end Task_FldEffUseSurf - thumb_func_start sub_80869C0 -sub_80869C0: @ 80869C0 + thumb_func_start UseSurfEffect_1 +UseSurfEffect_1: @ 80869C0 push {r4-r6,lr} mov r6, r8 push {r6} @@ -3476,10 +2934,10 @@ sub_80869C0: @ 80869C0 .align 2, 0 _08086A18: .4byte gPlayerAvatar _08086A1C: .4byte gObjectEvents - thumb_func_end sub_80869C0 + thumb_func_end UseSurfEffect_1 - thumb_func_start sub_8086A20 -sub_8086A20: @ 8086A20 + thumb_func_start UseSurfEffect_2 +UseSurfEffect_2: @ 8086A20 push {r4,r5,lr} adds r5, r0, 0 ldr r0, _08086A64 @ =gPlayerAvatar @@ -3514,10 +2972,10 @@ _08086A5C: .align 2, 0 _08086A64: .4byte gPlayerAvatar _08086A68: .4byte gObjectEvents - thumb_func_end sub_8086A20 + thumb_func_end UseSurfEffect_2 - thumb_func_start sub_8086A6C -sub_8086A6C: @ 8086A6C + thumb_func_start UseSurfEffect_3 +UseSurfEffect_3: @ 8086A6C push {r4,lr} adds r4, r0, 0 ldr r0, _08086AA8 @ =gPlayerAvatar @@ -3551,10 +3009,10 @@ _08086AA2: _08086AA8: .4byte gPlayerAvatar _08086AAC: .4byte gObjectEvents _08086AB0: .4byte gFieldEffectArguments - thumb_func_end sub_8086A6C + thumb_func_end UseSurfEffect_3 - thumb_func_start sub_8086AB4 -sub_8086AB4: @ 8086AB4 + thumb_func_start UseSurfEffect_4 +UseSurfEffect_4: @ 8086AB4 push {r4-r6,lr} adds r6, r0, 0 movs r0, 0x6 @@ -3609,10 +3067,10 @@ _08086B1E: _08086B24: .4byte gPlayerAvatar _08086B28: .4byte gObjectEvents _08086B2C: .4byte gFieldEffectArguments - thumb_func_end sub_8086AB4 + thumb_func_end UseSurfEffect_4 - thumb_func_start sub_8086B30 -sub_8086B30: @ 8086B30 + thumb_func_start UseSurfEffect_5 +UseSurfEffect_5: @ 8086B30 push {r4,r5,lr} ldr r5, _08086B9C @ =gPlayerAvatar ldrb r1, [r5, 0x5] @@ -3647,7 +3105,7 @@ sub_8086B30: @ 8086B30 bl ScriptContext2_Disable movs r0, 0x9 bl FieldEffectActiveListRemove - ldr r0, _08086BA4 @ =sub_8086990 + ldr r0, _08086BA4 @ =Task_FldEffUseSurf bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 @@ -3661,11 +3119,11 @@ _08086B96: .align 2, 0 _08086B9C: .4byte gPlayerAvatar _08086BA0: .4byte gObjectEvents -_08086BA4: .4byte sub_8086990 - thumb_func_end sub_8086B30 +_08086BA4: .4byte Task_FldEffUseSurf + thumb_func_end UseSurfEffect_5 - thumb_func_start sub_8086BA8 -sub_8086BA8: @ 8086BA8 + thumb_func_start FldEff_Unk41 +FldEff_Unk41: @ 8086BA8 push {lr} ldr r0, _08086BC8 @ =gQuestLogState ldrb r0, [r0] @@ -3675,7 +3133,7 @@ sub_8086BA8: @ 8086BA8 movs r1, 0x59 bl sub_811278C _08086BBA: - ldr r0, _08086BCC @ =sub_8086BD0 + ldr r0, _08086BCC @ =Task_FldEffUnk41 movs r1, 0xFF bl CreateTask movs r0, 0 @@ -3683,16 +3141,16 @@ _08086BBA: bx r1 .align 2, 0 _08086BC8: .4byte gQuestLogState -_08086BCC: .4byte sub_8086BD0 - thumb_func_end sub_8086BA8 +_08086BCC: .4byte Task_FldEffUnk41 + thumb_func_end FldEff_Unk41 - thumb_func_start sub_8086BD0 -sub_8086BD0: @ 8086BD0 + thumb_func_start Task_FldEffUnk41 +Task_FldEffUnk41: @ 8086BD0 push {lr} adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 - ldr r3, _08086BF8 @ =gUnknown_83CC168 + ldr r3, _08086BF8 @ =sUnk41EffectFuncs ldr r2, _08086BFC @ =gTasks lsls r0, r1, 2 adds r0, r1 @@ -3707,12 +3165,12 @@ sub_8086BD0: @ 8086BD0 pop {r0} bx r0 .align 2, 0 -_08086BF8: .4byte gUnknown_83CC168 +_08086BF8: .4byte sUnk41EffectFuncs _08086BFC: .4byte gTasks - thumb_func_end sub_8086BD0 + thumb_func_end Task_FldEffUnk41 - thumb_func_start sub_8086C00 -sub_8086C00: @ 8086C00 + thumb_func_start Unk41Effect_1 +Unk41Effect_1: @ 8086C00 push {r4,lr} adds r4, r0, 0 bl ScriptContext2_Enable @@ -3728,10 +3186,10 @@ sub_8086C00: @ 8086C00 bx r0 .align 2, 0 _08086C20: .4byte gPlayerAvatar - thumb_func_end sub_8086C00 + thumb_func_end Unk41Effect_1 - thumb_func_start sub_8086C24 -sub_8086C24: @ 8086C24 + thumb_func_start Unk41Effect_2 +Unk41Effect_2: @ 8086C24 push {r4,r5,lr} adds r5, r0, 0 ldr r0, _08086C68 @ =gPlayerAvatar @@ -3766,10 +3224,10 @@ _08086C60: .align 2, 0 _08086C68: .4byte gPlayerAvatar _08086C6C: .4byte gObjectEvents - thumb_func_end sub_8086C24 + thumb_func_end Unk41Effect_2 - thumb_func_start sub_8086C70 -sub_8086C70: @ 8086C70 + thumb_func_start Unk41Effect_3 +Unk41Effect_3: @ 8086C70 push {r4-r6,lr} adds r6, r0, 0 ldr r5, _08086C9C @ =gPlayerAvatar @@ -3833,10 +3291,10 @@ _08086CEE: pop {r4-r6} pop {r0} bx r0 - thumb_func_end sub_8086C70 + thumb_func_end Unk41Effect_3 - thumb_func_start sub_8086CF4 -sub_8086CF4: @ 8086CF4 + thumb_func_start Unk41Effect_4 +Unk41Effect_4: @ 8086CF4 push {r4,lr} ldr r4, _08086D2C @ =gPlayerAvatar ldrb r1, [r4, 0x5] @@ -3853,7 +3311,7 @@ sub_8086CF4: @ 8086CF4 strb r0, [r4, 0x6] movs r0, 0x41 bl FieldEffectActiveListRemove - ldr r0, _08086D34 @ =sub_8086BD0 + ldr r0, _08086D34 @ =Task_FldEffUnk41 bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 @@ -3865,8 +3323,8 @@ _08086D26: .align 2, 0 _08086D2C: .4byte gPlayerAvatar _08086D30: .4byte gObjectEvents -_08086D34: .4byte sub_8086BD0 - thumb_func_end sub_8086CF4 +_08086D34: .4byte Task_FldEffUnk41 + thumb_func_end Unk41Effect_4 thumb_func_start sub_8086D38 sub_8086D38: @ 8086D38 diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index db64b77db..3f128f799 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -2720,8 +2720,8 @@ StartAshFieldEffect: @ 80DC23C _080DC26C: .4byte gFieldEffectArguments thumb_func_end StartAshFieldEffect - thumb_func_start oei_ash -oei_ash: @ 80DC270 + thumb_func_start FldEff_Ash +FldEff_Ash: @ 80DC270 push {r4,r5,lr} sub sp, 0x4 ldr r5, _080DC2F0 @ =gFieldEffectArguments @@ -2789,7 +2789,7 @@ _080DC2E6: _080DC2F0: .4byte gFieldEffectArguments _080DC2F4: .4byte gFieldEffectObjectTemplatePointers _080DC2F8: .4byte gSprites - thumb_func_end oei_ash + thumb_func_end FldEff_Ash thumb_func_start sub_80DC2FC sub_80DC2FC: @ 80DC2FC @@ -2906,8 +2906,8 @@ _080DC3C8: bx r0 thumb_func_end sub_80DC3A8 - thumb_func_start sub_80DC3D0 -sub_80DC3D0: @ 80DC3D0 + thumb_func_start FldEff_SurfBlob +FldEff_SurfBlob: @ 80DC3D0 push {r4,r5,lr} ldr r4, _080DC43C @ =gFieldEffectArguments adds r1, r4, 0x4 @@ -2964,7 +2964,7 @@ _080DC43C: .4byte gFieldEffectArguments _080DC440: .4byte gFieldEffectObjectTemplatePointers _080DC444: .4byte gSprites _080DC448: .4byte 0x0000ffff - thumb_func_end sub_80DC3D0 + thumb_func_end FldEff_SurfBlob thumb_func_start sub_80DC44C sub_80DC44C: @ 80DC44C diff --git a/data/field_effect.s b/data/field_effect.s index 596084514..7d9a50f3f 100644 --- a/data/field_effect.s +++ b/data/field_effect.s @@ -6,22 +6,6 @@ .section .rodata .align 2 - .align 2 -sLavaridgeGymB1FWarpEffectFuncs:: @ 83CC0A4 dataptr - .4byte LavaridgeGymB1FWarpEffect_1 - .4byte LavaridgeGymB1FWarpEffect_2 - .4byte LavaridgeGymB1FWarpEffect_3 - .4byte LavaridgeGymB1FWarpEffect_4 - .4byte LavaridgeGymB1FWarpEffect_5 - .4byte LavaridgeGymB1FWarpEffect_6 - - .align 2 -sLavaridgeGymB1FWarpExitEffectFuncs:: @ 83CC0BC dataptr - .4byte LavaridgeGymB1FWarpExitEffect_1 - .4byte LavaridgeGymB1FWarpExitEffect_2 - .4byte LavaridgeGymB1FWarpExitEffect_3 - .4byte LavaridgeGymB1FWarpExitEffect_4 - .align 2 sLavaridgeGym1FWarpEffectFuncs:: @ 83CC0CC dataptr .4byte LavaridgeGym1FWarpEffect_1 @@ -80,19 +64,19 @@ sShowMonIndoorsEffectFuncs:: @ 83CC138 dataptr .4byte ShowMonEffect_Indoors_7 .align 2 -gUnknown_83CC154:: @ 83CC154 dataptr - .4byte sub_80869C0 - .4byte sub_8086A20 - .4byte sub_8086A6C - .4byte sub_8086AB4 - .4byte sub_8086B30 +sUseSurfEffectFuncs:: @ 83CC154 dataptr + .4byte UseSurfEffect_1 + .4byte UseSurfEffect_2 + .4byte UseSurfEffect_3 + .4byte UseSurfEffect_4 + .4byte UseSurfEffect_5 .align 2 -gUnknown_83CC168:: @ 83CC168 dataptr - .4byte sub_8086C00 - .4byte sub_8086C24 - .4byte sub_8086C70 - .4byte sub_8086CF4 +sUnk41EffectFuncs:: @ 83CC168 dataptr + .4byte Unk41Effect_1 + .4byte Unk41Effect_2 + .4byte Unk41Effect_3 + .4byte Unk41Effect_4 gUnknown_83CC178:: @ 83CC178 dataptr (incomplete) .4byte sub_8086E70 diff --git a/data/field_effect_scripts.s b/data/field_effect_scripts.s index 49f14d251..0f8295871 100644 --- a/data/field_effect_scripts.s +++ b/data/field_effect_scripts.s @@ -102,15 +102,15 @@ gFldEffScript_FieldMoveShowMon:: @ 81D97F0 end gFldEffScript_Ash:: @ 81D97F6 - loadfadedpal_callnative gUnknown_83A5348, oei_ash + loadfadedpal_callnative gUnknown_83A5348, FldEff_Ash end gFldEffScript_SurfBlob:: @ 81D9800 - callnative sub_80DC3D0 + callnative FldEff_SurfBlob end gFldEffScript_UseSurf:: @ 81D9806 - callnative sub_8086944 + callnative FldEff_UseSurf end gFldEffScript_Dust:: @ 81D980C @@ -326,7 +326,7 @@ gFldEffScript_SmileyFaceIcon:: @ 81D998C end gFldEffScript_Unk41:: @ 81D9992 - callnative sub_8086BA8 + callnative FldEff_Unk41 end gFldEffScript_DoubleExclMarkIcon:: @ 81D9998 diff --git a/include/event_object_movement.h b/include/event_object_movement.h index ebd5b44db..bbf34a23b 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -117,6 +117,7 @@ bool32 RfuUnionObjectIsInvisible(u8 objectEventId); void RfuUnionObjectStartWarp(u8 objectEventId, u8 animNo); bool32 RfuUnionObjectIsWarping(u8 objectEventId); u8 sub_8063F2C(u8 direction); +u8 sub_8064194(u8 direction); void sub_805F378(s16 x, s16 y); diff --git a/include/field_fadetransition.h b/include/field_fadetransition.h index c23f201dc..a1fe590fa 100644 --- a/include/field_fadetransition.h +++ b/include/field_fadetransition.h @@ -16,7 +16,7 @@ void WarpFadeOutScreen(void); void FieldCallback_ReturnToEventScript2(void); void FadeInFromBlack(void); void FadeTransition_FadeInOnReturnToStartMenu(void); -void pal_fill_for_maplights(void); +void WarpFadeInScreen(void); void sub_807DCE4(void); diff --git a/src/field_effect.c b/src/field_effect.c index c848a43c5..5f07311e2 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -1099,7 +1099,7 @@ bool8 (*const sFallWarpEffectCBPtrs[])(struct Task * task) = { void FieldCB_FallWarpExit(void) { Overworld_PlaySpecialMapMusic(); - pal_fill_for_maplights(); + WarpFadeInScreen(); sub_8111CF0(); ScriptContext2_Enable(); FreezeObjectEvents(); @@ -1403,7 +1403,7 @@ void Escalator_TransitionToWarpInEffect(void) void FieldCB_EscalatorWarpIn(void) { Overworld_PlaySpecialMapMusic(); - pal_fill_for_maplights(); + WarpFadeInScreen(); sub_8111CF0(); ScriptContext2_Enable(); FreezeObjectEvents(); @@ -1667,3 +1667,210 @@ bool8 dive_3_unknown(struct Task * task) } return FALSE; } + +void Task_LavaridgeGymB1FWarp(u8 taskId); +bool8 LavaridgeGymB1FWarpEffect_1(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); +bool8 LavaridgeGymB1FWarpEffect_2(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); +bool8 LavaridgeGymB1FWarpEffect_3(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); +bool8 LavaridgeGymB1FWarpEffect_4(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); +bool8 LavaridgeGymB1FWarpEffect_5(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); +bool8 LavaridgeGymB1FWarpEffect_6(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); +void FieldCB_LavaridgeGymB1FWarpExit(void); +void Task_LavaridgeGymB1FWarpExit(u8 taskId); +bool8 LavaridgeGymB1FWarpExitEffect_1(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); +bool8 LavaridgeGymB1FWarpExitEffect_2(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); +bool8 LavaridgeGymB1FWarpExitEffect_3(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); +bool8 LavaridgeGymB1FWarpExitEffect_4(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); + +bool8 (*const sLavaridgeGymB1FWarpEffectFuncs[])(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) = { + LavaridgeGymB1FWarpEffect_1, + LavaridgeGymB1FWarpEffect_2, + LavaridgeGymB1FWarpEffect_3, + LavaridgeGymB1FWarpEffect_4, + LavaridgeGymB1FWarpEffect_5, + LavaridgeGymB1FWarpEffect_6 +}; + +bool8 (*const sLavaridgeGymB1FWarpExitEffectFuncs[])(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) = { + LavaridgeGymB1FWarpExitEffect_1, + LavaridgeGymB1FWarpExitEffect_2, + LavaridgeGymB1FWarpExitEffect_3, + LavaridgeGymB1FWarpExitEffect_4 +}; + +void StartLavaridgeGymB1FWarp(u8 priority) +{ + CreateTask(Task_LavaridgeGymB1FWarp, priority); +} + +void Task_LavaridgeGymB1FWarp(u8 taskId) +{ + while (sLavaridgeGymB1FWarpEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId], &gObjectEvents[gPlayerAvatar.objectEventId], &gSprites[gPlayerAvatar.spriteId])); +} + +bool8 LavaridgeGymB1FWarpEffect_1(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) +{ + FreezeObjectEvents(); + CameraObjectReset2(); + SetCameraPanningCallback(NULL); + gPlayerAvatar.preventStep = TRUE; + objectEvent->fixedPriority = 1; + task->data[1] = 1; + task->data[0]++; + return TRUE; +} + +bool8 LavaridgeGymB1FWarpEffect_2(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) +{ + SetCameraPanning(0, task->data[1]); + task->data[1] = -task->data[1]; + task->data[2]++; + if (task->data[2] > 7) + { + task->data[2] = 0; + task->data[0]++; + } + return FALSE; +} + +bool8 LavaridgeGymB1FWarpEffect_3(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) +{ + sprite->pos2.y = 0; + task->data[3] = 1; + gFieldEffectArguments[0] = objectEvent->currentCoords.x; + gFieldEffectArguments[1] = objectEvent->currentCoords.y; + gFieldEffectArguments[2] = sprite->subpriority - 1; + gFieldEffectArguments[3] = sprite->oam.priority; + FieldEffectStart(FLDEFF_LAVARIDGE_GYM_WARP); + PlaySE(SE_W153); + task->data[0]++; + return TRUE; +} + +bool8 LavaridgeGymB1FWarpEffect_4(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) +{ + s16 centerToCornerVecY; + SetCameraPanning(0, task->data[1]); + if (task->data[1] = -task->data[1], ++task->data[2] <= 17) + { + if (!(task->data[2] & 1) && (task->data[1] <= 3)) + { + task->data[1] <<= 1; + } + } else if (!(task->data[2] & 4) && (task->data[1] > 0)) + { + task->data[1] >>= 1; + } + if (task->data[2] > 6) + { + centerToCornerVecY = -(sprite->centerToCornerVecY << 1); + if (sprite->pos2.y > -(sprite->pos1.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY + centerToCornerVecY)) + { + sprite->pos2.y -= task->data[3]; + if (task->data[3] <= 7) + { + task->data[3]++; + } + } else + { + task->data[4] = 1; + } + } + if (task->data[5] == 0 && sprite->pos2.y < -0x10) + { + task->data[5]++; + objectEvent->fixedPriority = 1; + sprite->oam.priority = 1; + sprite->subspriteMode = SUBSPRITES_IGNORE_PRIORITY; + } + if (task->data[1] == 0 && task->data[4] != 0) + { + task->data[0]++; + } + return FALSE; +} + +bool8 LavaridgeGymB1FWarpEffect_5(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) +{ + TryFadeOutOldMapMusic(); + WarpFadeOutScreen(); + task->data[0]++; + return FALSE; +} + +bool8 LavaridgeGymB1FWarpEffect_6(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) +{ + if (!gPaletteFade.active && BGMusicStopped() == TRUE) + { + WarpIntoMap(); + gFieldCallback = FieldCB_LavaridgeGymB1FWarpExit; + SetMainCallback2(CB2_LoadMap); + DestroyTask(FindTaskIdByFunc(Task_LavaridgeGymB1FWarp)); + } + return FALSE; +} + +void FieldCB_LavaridgeGymB1FWarpExit(void) +{ + Overworld_PlaySpecialMapMusic(); + WarpFadeInScreen(); + sub_8111CF0(); + ScriptContext2_Enable(); + gFieldCallback = NULL; + CreateTask(Task_LavaridgeGymB1FWarpExit, 0); +} + +void Task_LavaridgeGymB1FWarpExit(u8 taskId) +{ + while (sLavaridgeGymB1FWarpExitEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId], &gObjectEvents[gPlayerAvatar.objectEventId], &gSprites[gPlayerAvatar.spriteId])); +} + +bool8 LavaridgeGymB1FWarpExitEffect_1(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) +{ + CameraObjectReset2(); + FreezeObjectEvents(); + gPlayerAvatar.preventStep = TRUE; + objectEvent->invisible = TRUE; + task->data[0]++; + return FALSE; +} + +bool8 LavaridgeGymB1FWarpExitEffect_2(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) +{ + if (IsWeatherNotFadingIn()) + { + gFieldEffectArguments[0] = objectEvent->currentCoords.x; + gFieldEffectArguments[1] = objectEvent->currentCoords.y; + gFieldEffectArguments[2] = sprite->subpriority - 1; + gFieldEffectArguments[3] = sprite->oam.priority; + task->data[1] = FieldEffectStart(FLDEFF_POP_OUT_OF_ASH); + task->data[0]++; + } + return FALSE; +} + +bool8 LavaridgeGymB1FWarpExitEffect_3(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) +{ + sprite = &gSprites[task->data[1]]; + if (sprite->animCmdIndex > 1) + { + task->data[0]++; + objectEvent->invisible = FALSE; + CameraObjectReset1(); + PlaySE(SE_W091); + ObjectEventSetHeldMovement(objectEvent, sub_8064194(DIR_EAST)); + } + return FALSE; +} + +bool8 LavaridgeGymB1FWarpExitEffect_4(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) +{ + if (ObjectEventClearHeldMovementIfFinished(objectEvent)) + { + gPlayerAvatar.preventStep = FALSE; + ScriptContext2_Disable(); + UnfreezeObjectEvents(); + DestroyTask(FindTaskIdByFunc(Task_LavaridgeGymB1FWarpExit)); + } + return FALSE; +} diff --git a/src/field_fadetransition.c b/src/field_fadetransition.c index 0076c2d8f..02a51087f 100644 --- a/src/field_fadetransition.c +++ b/src/field_fadetransition.c @@ -50,7 +50,7 @@ void palette_bg_faded_fill_black(void) CpuFastFill16(RGB_BLACK, gPlttBufferFaded, 0x400); } -void pal_fill_for_maplights(void) +void WarpFadeInScreen(void) { switch (sub_80C9DCC(get_map_light_from_warp0(), GetCurrentMapType())) { @@ -178,7 +178,7 @@ static void task_mpl_807DD60(u8 taskId) case 1: if (gTasks[task->data[1]].isActive != TRUE) { - pal_fill_for_maplights(); + WarpFadeInScreen(); task->data[0]++; } break; @@ -212,7 +212,7 @@ static void sub_807DDF0(u8 taskId) case 1: if (IsLinkTaskFinished()) { - pal_fill_for_maplights(); + WarpFadeInScreen(); task->data[0]++; } break; @@ -278,7 +278,7 @@ static void sub_807DE78(bool8 a0) static void sub_807DF4C(bool8 a0) { if (!a0) - pal_fill_for_maplights(); + WarpFadeInScreen(); else FadeInFromBlack(); } @@ -302,7 +302,7 @@ void sub_807DF7C(void) static void sub_807DF94(void) { Overworld_PlaySpecialMapMusic(); - pal_fill_for_maplights(); + WarpFadeInScreen(); sub_8111CF0(); PlaySE(SE_TK_WARPOUT); CreateTask(sub_807E31C, 10); @@ -906,7 +906,7 @@ static void sub_807EC34(u8 taskId) break; case 0: Overworld_PlaySpecialMapMusic(); - pal_fill_for_maplights(); + WarpFadeInScreen(); ScriptContext2_Enable(); sub_807ECBC(&data[1], &data[2], &data[3], &data[4], &data[5]); data[0]++; diff --git a/src/quest_log_player.c b/src/quest_log_player.c index 32832a04a..c6b5db4f9 100644 --- a/src/quest_log_player.c +++ b/src/quest_log_player.c @@ -162,7 +162,7 @@ static void sub_815077C(void) static void sub_8150794(u8 taskId) { - if (!FieldEffectActiveListContains(0x41)) + if (!FieldEffectActiveListContains(FLDEFF_UNK_41)) { UnfreezeObjectEvents(); ScriptContext2_Disable(); From 8f42b7b56d887b6bca517499a841c259652af372 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 28 Feb 2020 13:23:51 -0500 Subject: [PATCH 12/26] Lavaridge Gym 1F Warp field effect --- asm/field_effect.s | 304 -------------------------------- data/field_effect.s | 8 - include/event_object_movement.h | 2 +- include/overworld.h | 1 - src/field_effect.c | 109 ++++++++++++ 5 files changed, 110 insertions(+), 314 deletions(-) diff --git a/asm/field_effect.s b/asm/field_effect.s index afd25e8b3..7e95d422c 100644 --- a/asm/field_effect.s +++ b/asm/field_effect.s @@ -5,310 +5,6 @@ .text - thumb_func_start FldEff_LavaridgeGymWarp -FldEff_LavaridgeGymWarp: @ 808534C - push {r4,lr} - ldr r4, _080853A4 @ =gFieldEffectArguments - adds r1, r4, 0x4 - adds r0, r4, 0 - movs r2, 0x8 - movs r3, 0x8 - bl sub_8063BC4 - ldr r0, _080853A8 @ =gFieldEffectObjectTemplatePointers - adds r0, 0x84 - ldr r0, [r0] - movs r2, 0 - ldrsh r1, [r4, r2] - movs r3, 0x4 - ldrsh r2, [r4, r3] - ldrb r3, [r4, 0x8] - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r0, 24 - ldr r1, _080853AC @ =gSprites - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r1 - movs r1, 0x3 - ldrb r3, [r4, 0xC] - ands r3, r1 - lsls r3, 2 - ldrb r4, [r2, 0x5] - movs r1, 0xD - negs r1, r1 - ands r1, r4 - orrs r1, r3 - strb r1, [r2, 0x5] - adds r2, 0x3E - ldrb r1, [r2] - movs r3, 0x2 - orrs r1, r3 - strb r1, [r2] - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080853A4: .4byte gFieldEffectArguments -_080853A8: .4byte gFieldEffectObjectTemplatePointers -_080853AC: .4byte gSprites - thumb_func_end FldEff_LavaridgeGymWarp - - thumb_func_start SpriteCB_LavaridgeGymWarp -SpriteCB_LavaridgeGymWarp: @ 80853B0 - push {lr} - adds r2, r0, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _080853C8 - adds r0, r2, 0 - movs r1, 0x32 - bl FieldEffectStop -_080853C8: - pop {r0} - bx r0 - thumb_func_end SpriteCB_LavaridgeGymWarp - - thumb_func_start StartLavaridgeGym1FWarp -StartLavaridgeGym1FWarp: @ 80853CC - push {lr} - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - ldr r0, _080853E0 @ =Task_LavaridgeGym1FWarp - bl CreateTask - pop {r0} - bx r0 - .align 2, 0 -_080853E0: .4byte Task_LavaridgeGym1FWarp - thumb_func_end StartLavaridgeGym1FWarp - - thumb_func_start Task_LavaridgeGym1FWarp -Task_LavaridgeGym1FWarp: @ 80853E4 - push {r4-r6,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r6, _0808542C @ =sLavaridgeGym1FWarpEffectFuncs - ldr r2, _08085430 @ =gTasks - ldr r5, _08085434 @ =gPlayerAvatar - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_080853F8: - movs r0, 0x8 - ldrsh r3, [r4, r0] - lsls r3, 2 - adds r3, r6 - ldrb r0, [r5, 0x5] - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 2 - ldr r0, _08085438 @ =gObjectEvents - adds r1, r0 - ldrb r0, [r5, 0x4] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - ldr r0, _0808543C @ =gSprites - adds r2, r0 - ldr r3, [r3] - adds r0, r4, 0 - bl _call_via_r3 - lsls r0, 24 - cmp r0, 0 - bne _080853F8 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0808542C: .4byte sLavaridgeGym1FWarpEffectFuncs -_08085430: .4byte gTasks -_08085434: .4byte gPlayerAvatar -_08085438: .4byte gObjectEvents -_0808543C: .4byte gSprites - thumb_func_end Task_LavaridgeGym1FWarp - - thumb_func_start LavaridgeGym1FWarpEffect_1 -LavaridgeGym1FWarpEffect_1: @ 8085440 - push {r4,r5,lr} - adds r5, r0, 0 - adds r4, r1, 0 - bl FreezeObjectEvents - bl CameraObjectReset2 - ldr r1, _0808546C @ =gPlayerAvatar - movs r0, 0x1 - strb r0, [r1, 0x6] - ldrb r0, [r4, 0x3] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r4, 0x3] - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - movs r0, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0808546C: .4byte gPlayerAvatar - thumb_func_end LavaridgeGym1FWarpEffect_1 - - thumb_func_start LavaridgeGym1FWarpEffect_2 -LavaridgeGym1FWarpEffect_2: @ 8085470 - push {r4-r6,lr} - adds r5, r0, 0 - adds r4, r1, 0 - adds r6, r2, 0 - adds r0, r4, 0 - bl ObjectEventClearHeldMovementIfFinished - lsls r0, 24 - cmp r0, 0 - beq _080854E4 - ldrh r1, [r5, 0xA] - movs r2, 0xA - ldrsh r0, [r5, r2] - cmp r0, 0x3 - ble _080854C4 - ldr r1, _080854C0 @ =gFieldEffectArguments - movs r2, 0x10 - ldrsh r0, [r4, r2] - str r0, [r1] - movs r2, 0x12 - ldrsh r0, [r4, r2] - str r0, [r1, 0x4] - adds r0, r6, 0 - adds r0, 0x43 - ldrb r0, [r0] - subs r0, 0x1 - str r0, [r1, 0x8] - ldrb r0, [r6, 0x5] - lsls r0, 28 - lsrs r0, 30 - str r0, [r1, 0xC] - movs r0, 0x31 - bl FieldEffectStart - strh r0, [r5, 0xA] - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - b _080854E4 - .align 2, 0 -_080854C0: .4byte gFieldEffectArguments -_080854C4: - adds r0, r1, 0x1 - strh r0, [r5, 0xA] - ldrb r0, [r4, 0x18] - lsls r0, 28 - lsrs r0, 28 - bl GetStepInPlaceDelay4AnimId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl ObjectEventSetHeldMovement - movs r0, 0x21 - bl PlaySE -_080854E4: - movs r0, 0 - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end LavaridgeGym1FWarpEffect_2 - - thumb_func_start LavaridgeGym1FWarpEffect_3 -LavaridgeGym1FWarpEffect_3: @ 80854EC - push {r4,lr} - adds r3, r0, 0 - adds r4, r1, 0 - ldr r2, _08085520 @ =gSprites - movs r0, 0xA - ldrsh r1, [r3, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - adds r0, 0x2B - ldrb r0, [r0] - cmp r0, 0x2 - bne _08085516 - ldrb r0, [r4, 0x1] - movs r1, 0x20 - orrs r0, r1 - strb r0, [r4, 0x1] - ldrh r0, [r3, 0x8] - adds r0, 0x1 - strh r0, [r3, 0x8] -_08085516: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08085520: .4byte gSprites - thumb_func_end LavaridgeGym1FWarpEffect_3 - - thumb_func_start LavaridgeGym1FWarpEffect_4 -LavaridgeGym1FWarpEffect_4: @ 8085524 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x31 - bl FieldEffectActiveListContains - lsls r0, 24 - cmp r0, 0 - bne _08085542 - bl TryFadeOutOldMapMusic - bl WarpFadeOutScreen - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_08085542: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end LavaridgeGym1FWarpEffect_4 - - thumb_func_start LavaridgeGym1FWarpEffect_5 -LavaridgeGym1FWarpEffect_5: @ 808554C - push {lr} - ldr r0, _0808558C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08085584 - bl BGMusicStopped - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08085584 - bl WarpIntoMap - ldr r1, _08085590 @ =gFieldCallback - ldr r0, _08085594 @ =FieldCB_FallWarpExit - str r0, [r1] - ldr r0, _08085598 @ =CB2_LoadMap - bl SetMainCallback2 - ldr r0, _0808559C @ =Task_LavaridgeGym1FWarp - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_08085584: - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_0808558C: .4byte gPaletteFade -_08085590: .4byte gFieldCallback -_08085594: .4byte FieldCB_FallWarpExit -_08085598: .4byte CB2_LoadMap -_0808559C: .4byte Task_LavaridgeGym1FWarp - thumb_func_end LavaridgeGym1FWarpEffect_5 - thumb_func_start FldEff_PopOutOfAsh FldEff_PopOutOfAsh: @ 80855A0 push {r4,lr} diff --git a/data/field_effect.s b/data/field_effect.s index 7d9a50f3f..c3fd0f35f 100644 --- a/data/field_effect.s +++ b/data/field_effect.s @@ -6,14 +6,6 @@ .section .rodata .align 2 - .align 2 -sLavaridgeGym1FWarpEffectFuncs:: @ 83CC0CC dataptr - .4byte LavaridgeGym1FWarpEffect_1 - .4byte LavaridgeGym1FWarpEffect_2 - .4byte LavaridgeGym1FWarpEffect_3 - .4byte LavaridgeGym1FWarpEffect_4 - .4byte LavaridgeGym1FWarpEffect_5 - .align 2 gEscapeRopeFieldEffectFuncs:: @ 83CC0E0 dataptr .4byte EscapeRopeFieldEffect_Step0 diff --git a/include/event_object_movement.h b/include/event_object_movement.h index bbf34a23b..29254ec5d 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -41,7 +41,7 @@ void sub_808E16C(s16, s16); void sub_808F28C(u8 localId, u8 mapNum, u8 mapGroup, u8 decorCat); void sub_8092FF0(s16, s16, s16 *, s16 *); u8 ObjectEventDirectionToImageAnimId(u8); -void sub_80930E0(s16 *, s16 *, s16, s16); +void sub_8063BC4(s16 *, s16 *, s16, s16); void ObjectEventClearAnim(struct ObjectEvent *); void ObjectEventClearAnimIfSpecialAnimActive(struct ObjectEvent *); void SpawnObjectEventsInView(s16, s16); diff --git a/include/overworld.h b/include/overworld.h index 754094907..90c11443f 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -87,7 +87,6 @@ void player_avatar_init_params_reset(void); void Overworld_SetFlashLevel(s32 a1); u8 Overworld_GetFlashLevel(void); -void LavaridgeGym1FWarpEffect_4(u16); void Overworld_SetSavedMusic(u16); void Overworld_ChangeMusicToDefault(void); diff --git a/src/field_effect.c b/src/field_effect.c index 5f07311e2..81ba91b1c 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -1874,3 +1874,112 @@ bool8 LavaridgeGymB1FWarpExitEffect_4(struct Task * task, struct ObjectEvent * o } return FALSE; } + +void Task_LavaridgeGym1FWarp(u8 taskId); +bool8 LavaridgeGym1FWarpEffect_1(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite); +bool8 LavaridgeGym1FWarpEffect_2(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite); +bool8 LavaridgeGym1FWarpEffect_3(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite); +bool8 LavaridgeGym1FWarpEffect_4(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite); +bool8 LavaridgeGym1FWarpEffect_5(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite); + +bool8 (*const sLavaridgeGym1FWarpEffectFuncs[])(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) = { + LavaridgeGym1FWarpEffect_1, + LavaridgeGym1FWarpEffect_2, + LavaridgeGym1FWarpEffect_3, + LavaridgeGym1FWarpEffect_4, + LavaridgeGym1FWarpEffect_5 +}; + +// For the ash puff effect when warping off the B1F ash tiles +u8 FldEff_LavaridgeGymWarp(void) +{ + u8 spriteId; + sub_8063BC4((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[33], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + gSprites[spriteId].oam.priority = gFieldEffectArguments[3]; + gSprites[spriteId].coordOffsetEnabled = 1; + return spriteId; +} + +void SpriteCB_LavaridgeGymWarp(struct Sprite *sprite) +{ + if (sprite->animEnded) + { + FieldEffectStop(sprite, FLDEFF_LAVARIDGE_GYM_WARP); + } +} + +void StartLavaridgeGym1FWarp(u8 priority) +{ + CreateTask(Task_LavaridgeGym1FWarp, priority); +} + +void Task_LavaridgeGym1FWarp(u8 taskId) +{ + while(sLavaridgeGym1FWarpEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId], &gObjectEvents[gPlayerAvatar.objectEventId], &gSprites[gPlayerAvatar.spriteId])); +} + +bool8 LavaridgeGym1FWarpEffect_1(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + FreezeObjectEvents(); + CameraObjectReset2(); + gPlayerAvatar.preventStep = TRUE; + objectEvent->fixedPriority = 1; + task->data[0]++; + return FALSE; +} + +bool8 LavaridgeGym1FWarpEffect_2(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + if (ObjectEventClearHeldMovementIfFinished(objectEvent)) + { + if (task->data[1] > 3) + { + gFieldEffectArguments[0] = objectEvent->currentCoords.x; + gFieldEffectArguments[1] = objectEvent->currentCoords.y; + gFieldEffectArguments[2] = sprite->subpriority - 1; + gFieldEffectArguments[3] = sprite->oam.priority; + task->data[1] = FieldEffectStart(FLDEFF_POP_OUT_OF_ASH); + task->data[0]++; + } else + { + task->data[1]++; + ObjectEventSetHeldMovement(objectEvent, GetStepInPlaceDelay4AnimId(objectEvent->facingDirection)); + PlaySE(SE_FU_ZUZUZU); + } + } + return FALSE; +} + +bool8 LavaridgeGym1FWarpEffect_3(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + if (gSprites[task->data[1]].animCmdIndex == 2) + { + objectEvent->invisible = TRUE; + task->data[0]++; + } + return FALSE; +} + +bool8 LavaridgeGym1FWarpEffect_4(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + if (!FieldEffectActiveListContains(FLDEFF_POP_OUT_OF_ASH)) + { + TryFadeOutOldMapMusic(); + WarpFadeOutScreen(); + task->data[0]++; + } + return FALSE; +} + +bool8 LavaridgeGym1FWarpEffect_5(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + if (!gPaletteFade.active && BGMusicStopped() == TRUE) + { + WarpIntoMap(); + gFieldCallback = FieldCB_FallWarpExit; + SetMainCallback2(CB2_LoadMap); + DestroyTask(FindTaskIdByFunc(Task_LavaridgeGym1FWarp)); + } + return FALSE; +} From fb56341fe4fedeeca53b17fc693b4b3dd7824ff2 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 28 Feb 2020 14:14:34 -0500 Subject: [PATCH 13/26] Escape Rope field effect --- asm/field_effect.s | 745 -------------------------------------------- data/field_effect.s | 13 - include/overworld.h | 1 + src/field_effect.c | 246 +++++++++++++++ 4 files changed, 247 insertions(+), 758 deletions(-) diff --git a/asm/field_effect.s b/asm/field_effect.s index 7e95d422c..ae5af2898 100644 --- a/asm/field_effect.s +++ b/asm/field_effect.s @@ -5,751 +5,6 @@ .text - thumb_func_start FldEff_PopOutOfAsh -FldEff_PopOutOfAsh: @ 80855A0 - push {r4,lr} - ldr r4, _080855F8 @ =gFieldEffectArguments - adds r1, r4, 0x4 - adds r0, r4, 0 - movs r2, 0x8 - movs r3, 0x8 - bl sub_8063BC4 - ldr r0, _080855FC @ =gFieldEffectObjectTemplatePointers - adds r0, 0x80 - ldr r0, [r0] - movs r2, 0 - ldrsh r1, [r4, r2] - movs r3, 0x4 - ldrsh r2, [r4, r3] - ldrb r3, [r4, 0x8] - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r0, 24 - ldr r1, _08085600 @ =gSprites - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r1 - movs r1, 0x3 - ldrb r3, [r4, 0xC] - ands r3, r1 - lsls r3, 2 - ldrb r4, [r2, 0x5] - movs r1, 0xD - negs r1, r1 - ands r1, r4 - orrs r1, r3 - strb r1, [r2, 0x5] - adds r2, 0x3E - ldrb r1, [r2] - movs r3, 0x2 - orrs r1, r3 - strb r1, [r2] - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080855F8: .4byte gFieldEffectArguments -_080855FC: .4byte gFieldEffectObjectTemplatePointers -_08085600: .4byte gSprites - thumb_func_end FldEff_PopOutOfAsh - - thumb_func_start SpriteCB_PopOutOfAsh -SpriteCB_PopOutOfAsh: @ 8085604 - push {lr} - adds r2, r0, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _0808561C - adds r0, r2, 0 - movs r1, 0x31 - bl FieldEffectStop -_0808561C: - pop {r0} - bx r0 - thumb_func_end SpriteCB_PopOutOfAsh - - thumb_func_start StartEscapeRopeFieldEffect -StartEscapeRopeFieldEffect: @ 8085620 - push {lr} - bl ScriptContext2_Enable - bl FreezeObjectEvents - ldr r0, _08085638 @ =Task_DoEscapeRopeFieldEffect - movs r1, 0x50 - bl CreateTask - pop {r0} - bx r0 - .align 2, 0 -_08085638: .4byte Task_DoEscapeRopeFieldEffect - thumb_func_end StartEscapeRopeFieldEffect - - thumb_func_start Task_DoEscapeRopeFieldEffect -Task_DoEscapeRopeFieldEffect: @ 808563C - push {lr} - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - ldr r3, _08085664 @ =gEscapeRopeFieldEffectFuncs - ldr r2, _08085668 @ =gTasks - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - movs r2, 0x8 - ldrsh r1, [r0, r2] - lsls r1, 2 - adds r1, r3 - ldr r1, [r1] - bl _call_via_r1 - pop {r0} - bx r0 - .align 2, 0 -_08085664: .4byte gEscapeRopeFieldEffectFuncs -_08085668: .4byte gTasks - thumb_func_end Task_DoEscapeRopeFieldEffect - - thumb_func_start EscapeRopeFieldEffect_Step0 -EscapeRopeFieldEffect_Step0: @ 808566C - push {r4,r5,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - movs r5, 0 - strh r0, [r4, 0x8] - movs r0, 0x40 - strh r0, [r4, 0x22] - bl GetPlayerFacingDirection - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x24] - strh r5, [r4, 0x26] - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end EscapeRopeFieldEffect_Step0 - - thumb_func_start EscapeRopeFieldEffect_Step1 -EscapeRopeFieldEffect_Step1: @ 8085690 - push {r4-r6,lr} - adds r5, r0, 0 - ldr r0, _080856D4 @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _080856D8 @ =gObjectEvents - adds r6, r0, r1 - adds r4, r5, 0 - adds r4, 0x8 - adds r1, r5, 0 - adds r1, 0xA - adds r2, r5, 0 - adds r2, 0xC - adds r0, r6, 0 - bl sub_808576C - ldrh r1, [r4, 0x6] - movs r2, 0x6 - ldrsh r0, [r4, r2] - cmp r0, 0x3B - bgt _080856DC - adds r0, r1, 0x1 - strh r0, [r4, 0x6] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x14 - bne _08085702 - movs r0, 0x27 - bl PlaySE - b _08085702 - .align 2, 0 -_080856D4: .4byte gPlayerAvatar -_080856D8: .4byte gObjectEvents -_080856DC: - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _08085702 - adds r1, r5, 0 - adds r1, 0x12 - adds r2, r5, 0 - adds r2, 0x14 - adds r0, r6, 0 - bl sub_80857F0 - cmp r0, 0 - bne _08085702 - bl TryFadeOutOldMapMusic - bl WarpFadeOutScreen - movs r0, 0x1 - strh r0, [r4, 0x8] -_08085702: - movs r2, 0x8 - ldrsh r0, [r4, r2] - cmp r0, 0x1 - bne _08085750 - ldr r0, _08085758 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08085750 - bl BGMusicStopped - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08085750 - ldrh r1, [r5, 0x26] - lsls r1, 24 - lsrs r1, 24 - adds r0, r6, 0 - bl ObjectEventSetDirection - bl sub_80555E0 - bl WarpIntoMap - ldr r1, _0808575C @ =gFieldCallback - ldr r0, _08085760 @ =FieldCallback_EscapeRopeExit - str r0, [r1] - ldr r0, _08085764 @ =CB2_LoadMap - bl SetMainCallback2 - ldr r0, _08085768 @ =Task_DoEscapeRopeFieldEffect - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_08085750: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08085758: .4byte gPaletteFade -_0808575C: .4byte gFieldCallback -_08085760: .4byte FieldCallback_EscapeRopeExit -_08085764: .4byte CB2_LoadMap -_08085768: .4byte Task_DoEscapeRopeFieldEffect - thumb_func_end EscapeRopeFieldEffect_Step1 - - thumb_func_start sub_808576C -sub_808576C: @ 808576C - push {r4-r7,lr} - adds r4, r0, 0 - adds r6, r1, 0 - adds r5, r2, 0 - bl ObjectEventIsMovementOverridden - lsls r0, 24 - cmp r0, 0 - beq _0808578A - adds r0, r4, 0 - bl ObjectEventClearHeldMovementIfFinished - lsls r0, 24 - cmp r0, 0 - beq _080857E4 -_0808578A: - ldrh r1, [r6] - movs r2, 0 - ldrsh r0, [r6, r2] - cmp r0, 0 - beq _0808579E - subs r0, r1, 0x1 - strh r0, [r6] - lsls r0, 16 - cmp r0, 0 - bne _080857E4 -_0808579E: - ldr r7, _080857E0 @ =gUnknown_83CC0E8 - ldrb r0, [r4, 0x18] - lsls r0, 28 - lsrs r0, 28 - adds r0, r7 - ldrb r0, [r0] - bl GetFaceDirectionMovementAction - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl ObjectEventSetHeldMovement - ldrh r1, [r5] - movs r2, 0 - ldrsh r0, [r5, r2] - cmp r0, 0xB - bgt _080857C8 - adds r0, r1, 0x1 - strh r0, [r5] -_080857C8: - movs r0, 0 - ldrsh r1, [r5, r0] - movs r0, 0xC - asrs r0, r1 - strh r0, [r6] - ldrb r0, [r4, 0x18] - lsls r0, 28 - lsrs r0, 28 - adds r0, r7 - ldrb r0, [r0] - b _080857EA - .align 2, 0 -_080857E0: .4byte gUnknown_83CC0E8 -_080857E4: - ldrb r0, [r4, 0x18] - lsls r0, 28 - lsrs r0, 28 -_080857EA: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_808576C - - thumb_func_start sub_80857F0 -sub_80857F0: @ 80857F0 - push {r4-r7,lr} - adds r7, r0, 0 - adds r5, r1, 0 - adds r6, r2, 0 - ldrb r0, [r7, 0x4] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _08085818 @ =gSprites - adds r4, r1, r0 - movs r1, 0 - ldrsh r0, [r5, r1] - cmp r0, 0x1 - beq _08085830 - cmp r0, 0x1 - bgt _0808581C - cmp r0, 0 - beq _08085826 - b _0808589A - .align 2, 0 -_08085818: .4byte gSprites -_0808581C: - cmp r0, 0x2 - beq _08085878 - cmp r0, 0x3 - beq _08085896 - b _0808589A -_08085826: - bl CameraObjectReset2 - ldrh r0, [r5] - adds r0, 0x1 - strh r0, [r5] -_08085830: - ldrh r0, [r4, 0x26] - subs r0, 0x8 - strh r0, [r4, 0x26] - ldrh r0, [r6] - subs r0, 0x8 - strh r0, [r6] - lsls r0, 16 - asrs r0, 16 - movs r1, 0x10 - negs r1, r1 - cmp r0, r1 - bgt _0808589A - ldrb r0, [r7, 0x3] - movs r2, 0x4 - orrs r0, r2 - strb r0, [r7, 0x3] - ldrb r1, [r4, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r1 - orrs r0, r2 - strb r0, [r4, 0x5] - adds r1, r4, 0 - adds r1, 0x43 - movs r0, 0 - strb r0, [r1] - adds r2, r4, 0 - adds r2, 0x42 - ldrb r1, [r2] - movs r0, 0x3F - ands r0, r1 - strb r0, [r2] - ldrh r0, [r5] - adds r0, 0x1 - strh r0, [r5] - b _0808589A -_08085878: - ldrh r0, [r4, 0x26] - subs r0, 0x8 - strh r0, [r4, 0x26] - ldrh r0, [r6] - subs r0, 0x8 - strh r0, [r6] - lsls r0, 16 - asrs r0, 16 - movs r1, 0x58 - negs r1, r1 - cmp r0, r1 - bgt _0808589A - ldrh r0, [r5] - adds r0, 0x1 - strh r0, [r5] -_08085896: - movs r0, 0 - b _0808589C -_0808589A: - movs r0, 0x1 -_0808589C: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80857F0 - - thumb_func_start sub_80858A4 -sub_80858A4: @ 80858A4 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - adds r6, r0, 0 - adds r5, r1, 0 - adds r7, r2, 0 - mov r9, r3 - ldr r0, [sp, 0x20] - mov r10, r0 - ldrb r0, [r6, 0x4] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _080858D8 @ =gSprites - adds r4, r1, r0 - movs r1, 0 - ldrsh r0, [r5, r1] - cmp r0, 0x1 - beq _08085948 - cmp r0, 0x1 - bgt _080858DC - cmp r0, 0 - beq _080858E6 - b _080859C2 - .align 2, 0 -_080858D8: .4byte gSprites -_080858DC: - cmp r0, 0x2 - beq _0808599C - cmp r0, 0x3 - beq _080859BE - b _080859C2 -_080858E6: - bl CameraObjectReset2 - movs r2, 0x58 - negs r2, r2 - adds r0, r2, 0 - strh r0, [r7] - ldrh r0, [r4, 0x26] - subs r0, 0x58 - movs r3, 0 - strh r0, [r4, 0x26] - ldrb r0, [r4, 0x5] - lsls r0, 28 - lsrs r0, 30 - mov r1, r9 - strh r0, [r1] - movs r2, 0x43 - adds r2, r4 - mov r8, r2 - ldrb r0, [r2] - mov r1, r10 - strh r0, [r1] - movs r2, 0x42 - adds r2, r4 - mov r12, r2 - ldrb r0, [r2] - lsrs r0, 6 - ldr r1, [sp, 0x24] - strh r0, [r1] - ldrb r0, [r6, 0x3] - movs r2, 0x4 - orrs r0, r2 - strb r0, [r6, 0x3] - ldrb r1, [r4, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r1 - orrs r0, r2 - strb r0, [r4, 0x5] - mov r2, r8 - strb r3, [r2] - mov r0, r12 - ldrb r1, [r0] - movs r0, 0x3F - ands r0, r1 - mov r1, r12 - strb r0, [r1] - ldrh r0, [r5] - adds r0, 0x1 - strh r0, [r5] -_08085948: - ldrh r0, [r4, 0x26] - adds r0, 0x4 - strh r0, [r4, 0x26] - ldrh r0, [r7] - adds r0, 0x4 - strh r0, [r7] - lsls r0, 16 - asrs r0, 16 - movs r1, 0x10 - negs r1, r1 - cmp r0, r1 - blt _080859C2 - movs r0, 0x3 - mov r2, r9 - ldrb r1, [r2] - ands r1, r0 - lsls r1, 2 - ldrb r2, [r4, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r4, 0x5] - mov r1, r10 - ldrh r0, [r1] - adds r1, r4, 0 - adds r1, 0x43 - strb r0, [r1] - ldr r2, [sp, 0x24] - ldrb r1, [r2] - adds r3, r4, 0 - adds r3, 0x42 - lsls r1, 6 - ldrb r2, [r3] - movs r0, 0x3F - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - ldrh r0, [r5] - adds r0, 0x1 - strh r0, [r5] - b _080859C2 -_0808599C: - ldrh r0, [r4, 0x26] - adds r0, 0x4 - strh r0, [r4, 0x26] - ldrh r0, [r7] - adds r0, 0x4 - strh r0, [r7] - lsls r0, 16 - cmp r0, 0 - blt _080859C2 - movs r0, 0x1E - bl PlaySE - bl CameraObjectReset1 - ldrh r0, [r5] - adds r0, 0x1 - strh r0, [r5] -_080859BE: - movs r0, 0 - b _080859C4 -_080859C2: - movs r0, 0x1 -_080859C4: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80858A4 - - thumb_func_start FieldCallback_EscapeRopeExit -FieldCallback_EscapeRopeExit: @ 80859D4 - push {lr} - bl Overworld_PlaySpecialMapMusic - bl WarpFadeInScreen - bl sub_8111CF0 - bl ScriptContext2_Enable - bl FreezeObjectEvents - ldr r1, _08085A14 @ =gFieldCallback - movs r0, 0 - str r0, [r1] - ldr r2, _08085A18 @ =gObjectEvents - ldr r0, _08085A1C @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r1, [r0, 0x1] - movs r2, 0x20 - orrs r1, r2 - strb r1, [r0, 0x1] - ldr r0, _08085A20 @ =Task_DoEscapeRopeExitFieldEffect - movs r1, 0 - bl CreateTask - pop {r0} - bx r0 - .align 2, 0 -_08085A14: .4byte gFieldCallback -_08085A18: .4byte gObjectEvents -_08085A1C: .4byte gPlayerAvatar -_08085A20: .4byte Task_DoEscapeRopeExitFieldEffect - thumb_func_end FieldCallback_EscapeRopeExit - - thumb_func_start Task_DoEscapeRopeExitFieldEffect -Task_DoEscapeRopeExitFieldEffect: @ 8085A24 - push {lr} - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - ldr r3, _08085A4C @ =sEscapeRopeExitEffectFuncs - ldr r2, _08085A50 @ =gTasks - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - movs r2, 0x8 - ldrsh r1, [r0, r2] - lsls r1, 2 - adds r1, r3 - ldr r1, [r1] - bl _call_via_r1 - pop {r0} - bx r0 - .align 2, 0 -_08085A4C: .4byte sEscapeRopeExitEffectFuncs -_08085A50: .4byte gTasks - thumb_func_end Task_DoEscapeRopeExitFieldEffect - - thumb_func_start EscapeRopeExitFieldEffect_Step0 -EscapeRopeExitFieldEffect_Step0: @ 8085A54 - push {r4,lr} - adds r4, r0, 0 - bl IsWeatherNotFadingIn - lsls r0, 24 - cmp r0, 0 - beq _08085A78 - movs r0, 0x28 - bl PlaySE - bl GetPlayerFacingDirection - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_08085A78: - pop {r4} - pop {r0} - bx r0 - thumb_func_end EscapeRopeExitFieldEffect_Step0 - - thumb_func_start EscapeRopeExitFieldEffect_Step1 -EscapeRopeExitFieldEffect_Step1: @ 8085A80 - push {r4-r7,lr} - sub sp, 0x8 - adds r4, r0, 0 - adds r5, r4, 0 - adds r5, 0x8 - ldr r0, _08085AD4 @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08085AD8 @ =gObjectEvents - adds r6, r0, r1 - adds r1, r4, 0 - adds r1, 0xA - adds r2, r4, 0 - adds r2, 0xC - adds r3, r4, 0 - adds r3, 0xE - adds r0, r5, 0 - adds r0, 0x8 - str r0, [sp] - adds r0, r4, 0 - adds r0, 0x12 - str r0, [sp, 0x4] - adds r0, r6, 0 - bl sub_80858A4 - adds r7, r0, 0 - ldrb r1, [r6, 0x1] - movs r0, 0x21 - negs r0, r0 - ands r0, r1 - strb r0, [r6, 0x1] - ldrh r1, [r5, 0xC] - movs r2, 0xC - ldrsh r0, [r5, r2] - cmp r0, 0x7 - bgt _08085ADC - adds r0, r1, 0x1 - strh r0, [r5, 0xC] - b _08085B10 - .align 2, 0 -_08085AD4: .4byte gPlayerAvatar -_08085AD8: .4byte gObjectEvents -_08085ADC: - movs r2, 0xE - ldrsh r0, [r5, r2] - cmp r0, 0 - bne _08085B10 - adds r0, r1, 0x1 - strh r0, [r5, 0xC] - adds r1, r4, 0 - adds r1, 0x1A - adds r2, r4, 0 - adds r2, 0x1C - adds r0, r6, 0 - bl sub_808576C - lsls r0, 24 - lsrs r1, r0, 24 - strh r1, [r5, 0x10] - movs r2, 0xC - ldrsh r0, [r5, r2] - cmp r0, 0x31 - ble _08085B10 - movs r2, 0x1E - ldrsh r0, [r5, r2] - cmp r1, r0 - bne _08085B10 - movs r0, 0x1 - strh r0, [r5, 0xE] -_08085B10: - cmp r7, 0 - bne _08085B58 - movs r0, 0x10 - ldrsh r1, [r5, r0] - movs r2, 0x1E - ldrsh r0, [r5, r2] - cmp r1, r0 - bne _08085B58 - adds r0, r6, 0 - bl ObjectEventCheckHeldMovementStatus - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08085B58 - ldrb r1, [r6, 0x1] - movs r0, 0x21 - negs r0, r0 - ands r0, r1 - strb r0, [r6, 0x1] - ldrb r1, [r6, 0x3] - movs r0, 0x5 - negs r0, r0 - ands r0, r1 - strb r0, [r6, 0x3] - bl ScriptContext2_Disable - bl UnfreezeObjectEvents - ldr r0, _08085B60 @ =Task_DoEscapeRopeExitFieldEffect - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_08085B58: - add sp, 0x8 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08085B60: .4byte Task_DoEscapeRopeExitFieldEffect - thumb_func_end EscapeRopeExitFieldEffect_Step1 - thumb_func_start CreateTeleportFieldEffectTask CreateTeleportFieldEffectTask: @ 8085B64 push {lr} diff --git a/data/field_effect.s b/data/field_effect.s index c3fd0f35f..baa7625a7 100644 --- a/data/field_effect.s +++ b/data/field_effect.s @@ -6,19 +6,6 @@ .section .rodata .align 2 - .align 2 -gEscapeRopeFieldEffectFuncs:: @ 83CC0E0 dataptr - .4byte EscapeRopeFieldEffect_Step0 - .4byte EscapeRopeFieldEffect_Step1 - -gUnknown_83CC0E8:: @ 83CC0E8 data8 - .byte 0x01, 0x03, 0x04, 0x02, 0x01 - - .align 2 -sEscapeRopeExitEffectFuncs:: @ 83CC0F0 dataptr - .4byte EscapeRopeExitFieldEffect_Step0 - .4byte EscapeRopeExitFieldEffect_Step1 - .align 2 sTeleportEffectFuncs:: @ 83CC0F8 dataptr .4byte TeleportFieldEffectTask1 diff --git a/include/overworld.h b/include/overworld.h index 90c11443f..d613b5f41 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -82,6 +82,7 @@ void sub_8084DD4(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y); void sub_8084E2C(s8, s8, s8, s8, s8); void sub_8084E80(s8, s8, s8, s8, s8); void sub_8084EBC(s16, s16); +void sub_80555E0(void); void player_avatar_init_params_reset(void); diff --git a/src/field_effect.c b/src/field_effect.c index 81ba91b1c..4886a4729 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -1983,3 +1983,249 @@ bool8 LavaridgeGym1FWarpEffect_5(struct Task *task, struct ObjectEvent *objectEv } return FALSE; } + +u8 FldEff_PopOutOfAsh(void) +{ + u8 spriteId; + sub_8063BC4((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[32], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + gSprites[spriteId].oam.priority = gFieldEffectArguments[3]; + gSprites[spriteId].coordOffsetEnabled = 1; + return spriteId; +} + +void SpriteCB_PopOutOfAsh(struct Sprite *sprite) +{ + if (sprite->animEnded) + { + FieldEffectStop(sprite, FLDEFF_POP_OUT_OF_ASH); + } +} + +void Task_DoEscapeRopeFieldEffect(u8 taskId); +void EscapeRopeFieldEffect_Step0(struct Task * task); +void EscapeRopeFieldEffect_Step1(struct Task * task); +u8 sub_808576C(struct ObjectEvent * playerObj, s16 *a1p, s16 *a2p); +bool32 sub_80857F0(struct ObjectEvent * playerObj, s16 *a1p, s16 *a2p); +void FieldCallback_EscapeRopeExit(void); +void Task_DoEscapeRopeExitFieldEffect(u8 taskId); +void EscapeRopeExitFieldEffect_Step0(struct Task * task); +void EscapeRopeExitFieldEffect_Step1(struct Task * task); + +void (*const gEscapeRopeFieldEffectFuncs[])(struct Task * task) = { + EscapeRopeFieldEffect_Step0, + EscapeRopeFieldEffect_Step1 +}; + +const u8 gUnknown_83CC0E8[] = { + [DIR_NONE] = DIR_SOUTH, + [DIR_SOUTH] = DIR_WEST, + [DIR_WEST] = DIR_NORTH, + [DIR_NORTH] = DIR_EAST, + [DIR_EAST] = DIR_SOUTH, +}; + +void (*const sEscapeRopeExitEffectFuncs[])(struct Task * task) = { + EscapeRopeExitFieldEffect_Step0, + EscapeRopeExitFieldEffect_Step1 +}; + +void StartEscapeRopeFieldEffect(void) +{ + ScriptContext2_Enable(); + FreezeObjectEvents(); + CreateTask(Task_DoEscapeRopeFieldEffect, 80); +} + +void Task_DoEscapeRopeFieldEffect(u8 taskId) +{ + gEscapeRopeFieldEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); +} + +void EscapeRopeFieldEffect_Step0(struct Task * task) +{ + task->data[0]++; + task->data[13] = 64; + task->data[14] = GetPlayerFacingDirection(); + task->data[15] = 0; +} + +void EscapeRopeFieldEffect_Step1(struct Task * task) +{ + struct ObjectEvent * playerObj = &gObjectEvents[gPlayerAvatar.objectEventId]; + s16 *data = task->data; + sub_808576C(playerObj, &task->data[1], &task->data[2]); + if (data[3] < 60) + { + data[3]++; + if (data[3] == 20) + { + PlaySE(SE_TK_WARPIN); + } + } + else if (data[4] == 0 && !sub_80857F0(playerObj, &task->data[5], &task->data[6])) + { + TryFadeOutOldMapMusic(); + WarpFadeOutScreen(); + data[4] = 1; + } + if (data[4] == 1 && !gPaletteFade.active && BGMusicStopped() == TRUE) + { + ObjectEventSetDirection(playerObj, task->data[15]); + sub_80555E0(); + WarpIntoMap(); + gFieldCallback = FieldCallback_EscapeRopeExit; + SetMainCallback2(CB2_LoadMap); + DestroyTask(FindTaskIdByFunc(Task_DoEscapeRopeFieldEffect)); + } +} + + +u8 sub_808576C(struct ObjectEvent * playerObj, s16 *delay_p, s16 *stage_p) +{ + if (!ObjectEventIsMovementOverridden(playerObj) || ObjectEventClearHeldMovementIfFinished(playerObj)) + { + if (*delay_p != 0 && --(*delay_p) != 0) + return playerObj->facingDirection; + ObjectEventSetHeldMovement(playerObj, GetFaceDirectionMovementAction(gUnknown_83CC0E8[playerObj->facingDirection])); + if (*stage_p < 12) + (*stage_p)++; + *delay_p = 12 >> (*stage_p); // 12 >> 4 = 0 + return gUnknown_83CC0E8[playerObj->facingDirection]; + } + return playerObj->facingDirection; +} + +bool32 sub_80857F0(struct ObjectEvent * playerObj, s16 *state_p, s16 *y_p) +{ + struct Sprite * sprite = &gSprites[playerObj->spriteId]; + switch (*state_p) + { + case 0: + CameraObjectReset2(); + (*state_p)++; + // fallthrough + case 1: + sprite->pos2.y -= 8; + (*y_p) -= 8; + if (*y_p <= -16) + { + playerObj->fixedPriority = TRUE; + sprite->oam.priority = 1; + sprite->subpriority = 0; + sprite->subspriteMode = SUBSPRITES_OFF; + (*state_p)++; + } + break; + case 2: + sprite->pos2.y -= 8; + (*y_p) -= 8; + if (*y_p <= -88) + { + (*state_p)++; + return FALSE; + } + break; + case 3: + return FALSE; + } + return TRUE; +} + +bool32 sub_80858A4(struct ObjectEvent * playerObj, s16 *state_p, s16 *y_p, s16 *priority_p, s16 *subpriority_p, s16 *subspriteMode_p) +{ + struct Sprite * sprite = &gSprites[playerObj->spriteId]; + switch (*state_p) + { + case 0: + CameraObjectReset2(); + *y_p = -88; + sprite->pos2.y -= 88; + *priority_p = sprite->oam.priority; + *subpriority_p = sprite->subpriority; + *subspriteMode_p = sprite->subspriteMode; + playerObj->fixedPriority = TRUE; + sprite->oam.priority = 1; + sprite->subpriority = 0; + sprite->subspriteMode = SUBSPRITES_OFF; + (*state_p)++; + // fallthrough + case 1: + sprite->pos2.y += 4; + (*y_p) += 4; + if (*y_p >= -16) + { + sprite->oam.priority = *priority_p; + sprite->subpriority = *subpriority_p; + sprite->subspriteMode = *subspriteMode_p; + (*state_p)++; + } + break; + case 2: + sprite->pos2.y += 4; + (*y_p) += 4; + if (*y_p >= 0) + { + PlaySE(SE_TK_KASYA); + CameraObjectReset1(); + (*state_p)++; + return FALSE; + } + break; + case 3: + return FALSE; + } + return TRUE; +} + +void FieldCallback_EscapeRopeExit(void) +{ + Overworld_PlaySpecialMapMusic(); + WarpFadeInScreen(); + sub_8111CF0(); + ScriptContext2_Enable(); + FreezeObjectEvents(); + gFieldCallback = NULL; + gObjectEvents[gPlayerAvatar.objectEventId].invisible = TRUE; + CreateTask(Task_DoEscapeRopeExitFieldEffect, 0); +} + +void Task_DoEscapeRopeExitFieldEffect(u8 taskId) +{ + sEscapeRopeExitEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); +} + +void EscapeRopeExitFieldEffect_Step0(struct Task * task) +{ + if (IsWeatherNotFadingIn()) + { + PlaySE(SE_TK_WARPOUT); + task->data[15] = GetPlayerFacingDirection(); + task->data[0]++; + } +} + +void EscapeRopeExitFieldEffect_Step1(struct Task * task) +{ + s16 *data = task->data; + struct ObjectEvent * playerObj = &gObjectEvents[gPlayerAvatar.objectEventId]; + bool32 finished = sub_80858A4(playerObj, &data[1], &data[2], &data[3], &data[4], &data[5]); + playerObj->invisible = FALSE; + if (data[6] < 8) + data[6]++; + else if (data[7] == 0) + { + data[6]++; + data[8] = sub_808576C(playerObj, &data[9], &data[10]); + if (data[6] >= 50 && data[8] == data[15]) + data[7] = 1; + } + if (!finished && data[8] == data[15] && ObjectEventCheckHeldMovementStatus(playerObj) == TRUE) + { + playerObj->invisible = FALSE; + playerObj->fixedPriority = FALSE; + ScriptContext2_Disable(); + UnfreezeObjectEvents(); + DestroyTask(FindTaskIdByFunc(Task_DoEscapeRopeExitFieldEffect)); + } +} From 410aaa00ff6bb8d0e9dae755b60e216be24b9660 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 28 Feb 2020 14:26:54 -0500 Subject: [PATCH 14/26] Teleport field effect --- asm/field_effect.s | 599 -------------------------------------------- data/field_effect.s | 16 -- include/overworld.h | 1 + src/field_effect.c | 265 +++++++++++++++++--- 4 files changed, 236 insertions(+), 645 deletions(-) diff --git a/asm/field_effect.s b/asm/field_effect.s index ae5af2898..825682f09 100644 --- a/asm/field_effect.s +++ b/asm/field_effect.s @@ -5,605 +5,6 @@ .text - thumb_func_start CreateTeleportFieldEffectTask -CreateTeleportFieldEffectTask: @ 8085B64 - push {lr} - ldr r0, _08085B74 @ =Task_DoTeleportFieldEffect - movs r1, 0 - bl CreateTask - pop {r0} - bx r0 - .align 2, 0 -_08085B74: .4byte Task_DoTeleportFieldEffect - thumb_func_end CreateTeleportFieldEffectTask - - thumb_func_start Task_DoTeleportFieldEffect -Task_DoTeleportFieldEffect: @ 8085B78 - push {lr} - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - ldr r3, _08085BA0 @ =sTeleportEffectFuncs - ldr r2, _08085BA4 @ =gTasks - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - movs r2, 0x8 - ldrsh r1, [r0, r2] - lsls r1, 2 - adds r1, r3 - ldr r1, [r1] - bl _call_via_r1 - pop {r0} - bx r0 - .align 2, 0 -_08085BA0: .4byte sTeleportEffectFuncs -_08085BA4: .4byte gTasks - thumb_func_end Task_DoTeleportFieldEffect - - thumb_func_start TeleportFieldEffectTask1 -TeleportFieldEffectTask1: @ 8085BA8 - push {r4,lr} - adds r4, r0, 0 - bl ScriptContext2_Enable - bl FreezeObjectEvents - bl CameraObjectReset2 - bl GetPlayerFacingDirection - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - pop {r4} - pop {r0} - bx r0 - thumb_func_end TeleportFieldEffectTask1 - - thumb_func_start TeleportFieldEffectTask2 -TeleportFieldEffectTask2: @ 8085BD0 - push {r4,r5,lr} - sub sp, 0x8 - adds r4, r0, 0 - ldr r1, _08085C54 @ =gUnknown_83CC108 - mov r0, sp - movs r2, 0x5 - bl memcpy - ldr r0, _08085C58 @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08085C5C @ =gObjectEvents - adds r5, r0, r1 - ldrh r1, [r4, 0xA] - movs r2, 0xA - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _08085C02 - subs r0, r1, 0x1 - strh r0, [r4, 0xA] - lsls r0, 16 - cmp r0, 0 - bne _08085C1C -_08085C02: - ldrb r0, [r5, 0x18] - lsls r0, 28 - lsrs r0, 28 - add r0, sp - ldrb r1, [r0] - adds r0, r5, 0 - bl ObjectEventTurn - movs r0, 0x8 - strh r0, [r4, 0xA] - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] -_08085C1C: - movs r1, 0xC - ldrsh r0, [r4, r1] - cmp r0, 0x7 - ble _08085C4A - movs r2, 0x26 - ldrsh r1, [r4, r2] - ldrb r0, [r5, 0x18] - lsls r0, 28 - lsrs r0, 28 - cmp r1, r0 - bne _08085C4A - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0x4 - strh r0, [r4, 0xA] - movs r0, 0x8 - strh r0, [r4, 0xC] - movs r0, 0x1 - strh r0, [r4, 0xE] - movs r0, 0x27 - bl PlaySE -_08085C4A: - add sp, 0x8 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08085C54: .4byte gUnknown_83CC108 -_08085C58: .4byte gPlayerAvatar -_08085C5C: .4byte gObjectEvents - thumb_func_end TeleportFieldEffectTask2 - - thumb_func_start TeleportFieldEffectTask3 -TeleportFieldEffectTask3: @ 8085C60 - push {r4,r5,lr} - sub sp, 0x8 - adds r4, r0, 0 - ldr r1, _08085D24 @ =gUnknown_83CC108 - mov r0, sp - movs r2, 0x5 - bl memcpy - ldr r2, _08085D28 @ =gPlayerAvatar - ldrb r1, [r2, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08085D2C @ =gObjectEvents - adds r3, r0, r1 - ldrb r1, [r2, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08085D30 @ =gSprites - adds r5, r0, r1 - ldrh r0, [r4, 0xA] - subs r0, 0x1 - strh r0, [r4, 0xA] - lsls r0, 16 - cmp r0, 0 - bgt _08085CAA - movs r0, 0x4 - strh r0, [r4, 0xA] - ldrb r0, [r3, 0x18] - lsls r0, 28 - lsrs r0, 28 - add r0, sp - ldrb r1, [r0] - adds r0, r3, 0 - bl ObjectEventTurn -_08085CAA: - ldrh r0, [r5, 0x22] - ldrh r1, [r4, 0xE] - subs r0, r1 - strh r0, [r5, 0x22] - ldrh r1, [r4, 0xE] - ldrh r2, [r4, 0x10] - adds r0, r1, r2 - strh r0, [r4, 0x10] - ldrh r0, [r4, 0xC] - subs r0, 0x1 - strh r0, [r4, 0xC] - lsls r0, 16 - cmp r0, 0 - bgt _08085CD6 - movs r0, 0x4 - strh r0, [r4, 0xC] - lsls r0, r1, 16 - asrs r0, 16 - cmp r0, 0x7 - bgt _08085CD6 - lsls r0, r1, 1 - strh r0, [r4, 0xE] -_08085CD6: - movs r1, 0x10 - ldrsh r0, [r4, r1] - cmp r0, 0x8 - ble _08085D04 - ldrb r1, [r5, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r1 - movs r1, 0x4 - orrs r0, r1 - strb r0, [r5, 0x5] - adds r2, r5, 0 - adds r2, 0x42 - ldrb r1, [r2] - movs r0, 0xC0 - ands r0, r1 - cmp r0, 0 - beq _08085D04 - movs r0, 0x3F - ands r0, r1 - movs r1, 0x80 - orrs r0, r1 - strb r0, [r2] -_08085D04: - movs r2, 0x10 - ldrsh r0, [r4, r2] - cmp r0, 0xA7 - ble _08085D1A - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - bl TryFadeOutOldMapMusic - bl WarpFadeOutScreen -_08085D1A: - add sp, 0x8 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08085D24: .4byte gUnknown_83CC108 -_08085D28: .4byte gPlayerAvatar -_08085D2C: .4byte gObjectEvents -_08085D30: .4byte gSprites - thumb_func_end TeleportFieldEffectTask3 - - thumb_func_start TeleportFieldEffectTask4 -TeleportFieldEffectTask4: @ 8085D34 - push {lr} - ldr r0, _08085D74 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08085D70 - bl BGMusicStopped - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08085D70 - bl copy_saved_warp3_bank_and_enter_x_to_warp1 - bl WarpIntoMap - ldr r0, _08085D78 @ =CB2_LoadMap - bl SetMainCallback2 - ldr r1, _08085D7C @ =gFieldCallback - ldr r0, _08085D80 @ =FieldCallback_TeleportIn - str r0, [r1] - ldr r0, _08085D84 @ =Task_DoTeleportFieldEffect - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_08085D70: - pop {r0} - bx r0 - .align 2, 0 -_08085D74: .4byte gPaletteFade -_08085D78: .4byte CB2_LoadMap -_08085D7C: .4byte gFieldCallback -_08085D80: .4byte FieldCallback_TeleportIn -_08085D84: .4byte Task_DoTeleportFieldEffect - thumb_func_end TeleportFieldEffectTask4 - - thumb_func_start FieldCallback_TeleportIn -FieldCallback_TeleportIn: @ 8085D88 - push {lr} - bl Overworld_PlaySpecialMapMusic - bl WarpFadeInScreen - bl sub_8111CF0 - bl ScriptContext2_Enable - bl FreezeObjectEvents - ldr r1, _08085DCC @ =gFieldCallback - movs r0, 0 - str r0, [r1] - ldr r2, _08085DD0 @ =gObjectEvents - ldr r0, _08085DD4 @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r1, [r0, 0x1] - movs r2, 0x20 - orrs r1, r2 - strb r1, [r0, 0x1] - bl CameraObjectReset2 - ldr r0, _08085DD8 @ =Task_DoTeleportInFieldEffect - movs r1, 0 - bl CreateTask - pop {r0} - bx r0 - .align 2, 0 -_08085DCC: .4byte gFieldCallback -_08085DD0: .4byte gObjectEvents -_08085DD4: .4byte gPlayerAvatar -_08085DD8: .4byte Task_DoTeleportInFieldEffect - thumb_func_end FieldCallback_TeleportIn - - thumb_func_start Task_DoTeleportInFieldEffect -Task_DoTeleportInFieldEffect: @ 8085DDC - push {lr} - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - ldr r3, _08085E04 @ =sTeleportInEffectFuncs - ldr r2, _08085E08 @ =gTasks - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - movs r2, 0x8 - ldrsh r1, [r0, r2] - lsls r1, 2 - adds r1, r3 - ldr r1, [r1] - bl _call_via_r1 - pop {r0} - bx r0 - .align 2, 0 -_08085E04: .4byte sTeleportInEffectFuncs -_08085E08: .4byte gTasks - thumb_func_end Task_DoTeleportInFieldEffect - - thumb_func_start TeleportInFieldEffectTask1 -TeleportInFieldEffectTask1: @ 8085E0C - push {r4-r6,lr} - adds r6, r0, 0 - bl IsWeatherNotFadingIn - lsls r0, 24 - cmp r0, 0 - beq _08085E82 - ldr r5, _08085E88 @ =gPlayerAvatar - ldrb r0, [r5, 0x4] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - ldr r0, _08085E8C @ =gSprites - adds r2, r0 - adds r0, r2, 0 - adds r0, 0x29 - movs r4, 0 - ldrsb r4, [r0, r4] - lsls r0, r4, 17 - negs r0, r0 - ldrh r1, [r2, 0x22] - ldr r3, _08085E90 @ =gSpriteCoordOffsetY - adds r1, r4 - ldrh r3, [r3] - adds r1, r3 - asrs r0, 16 - adds r0, r1 - negs r0, r0 - strh r0, [r2, 0x26] - ldr r3, _08085E94 @ =gObjectEvents - ldrb r0, [r5, 0x5] - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 2 - adds r1, r3 - ldrb r3, [r1, 0x1] - movs r0, 0x21 - negs r0, r0 - ands r0, r3 - strb r0, [r1, 0x1] - ldrh r0, [r6, 0x8] - adds r0, 0x1 - strh r0, [r6, 0x8] - movs r0, 0x8 - strh r0, [r6, 0xA] - movs r0, 0x1 - strh r0, [r6, 0xC] - adds r2, 0x42 - ldrb r0, [r2] - lsrs r0, 6 - strh r0, [r6, 0x24] - bl GetPlayerFacingDirection - lsls r0, 24 - lsrs r0, 24 - strh r0, [r6, 0x26] - movs r0, 0x27 - bl PlaySE -_08085E82: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08085E88: .4byte gPlayerAvatar -_08085E8C: .4byte gSprites -_08085E90: .4byte gSpriteCoordOffsetY -_08085E94: .4byte gObjectEvents - thumb_func_end TeleportInFieldEffectTask1 - - thumb_func_start TeleportInFieldEffectTask2 -TeleportInFieldEffectTask2: @ 8085E98 - push {r4-r7,lr} - sub sp, 0x8 - adds r4, r0, 0 - ldr r1, _08085F00 @ =gUnknown_83CC108 - mov r0, sp - movs r2, 0x5 - bl memcpy - ldr r2, _08085F04 @ =gPlayerAvatar - ldrb r1, [r2, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08085F08 @ =gObjectEvents - adds r6, r0, r1 - ldrb r1, [r2, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08085F0C @ =gSprites - adds r5, r0, r1 - ldrh r0, [r4, 0xA] - ldrh r1, [r5, 0x26] - adds r0, r1 - strh r0, [r5, 0x26] - lsls r0, 16 - asrs r0, 16 - movs r1, 0x8 - negs r1, r1 - cmp r0, r1 - blt _08085F10 - ldrh r1, [r4, 0x22] - movs r2, 0x22 - ldrsh r0, [r4, r2] - cmp r0, 0 - bne _08085F36 - adds r0, r1, 0x1 - strh r0, [r4, 0x22] - ldrb r0, [r6] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r6] - ldrh r1, [r4, 0x24] - adds r3, r5, 0 - adds r3, 0x42 - lsls r1, 6 - ldrb r2, [r3] - movs r0, 0x3F - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - b _08085F36 - .align 2, 0 -_08085F00: .4byte gUnknown_83CC108 -_08085F04: .4byte gPlayerAvatar -_08085F08: .4byte gObjectEvents -_08085F0C: .4byte gSprites -_08085F10: - ldrb r1, [r5, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r1 - movs r1, 0x4 - orrs r0, r1 - strb r0, [r5, 0x5] - adds r2, r5, 0 - adds r2, 0x42 - ldrb r1, [r2] - movs r0, 0xC0 - ands r0, r1 - cmp r0, 0 - beq _08085F36 - movs r0, 0x3F - ands r0, r1 - movs r1, 0x80 - orrs r0, r1 - strb r0, [r2] -_08085F36: - ldrh r2, [r5, 0x26] - movs r3, 0x26 - ldrsh r1, [r5, r3] - movs r0, 0x30 - negs r0, r0 - cmp r1, r0 - blt _08085F5A - ldrh r1, [r4, 0xA] - movs r3, 0xA - ldrsh r0, [r4, r3] - cmp r0, 0x1 - ble _08085F5A - movs r0, 0x1 - ands r0, r2 - cmp r0, 0 - bne _08085F5A - subs r0, r1, 0x1 - strh r0, [r4, 0xA] -_08085F5A: - ldrh r0, [r4, 0xC] - subs r0, 0x1 - movs r7, 0 - strh r0, [r4, 0xC] - lsls r0, 16 - cmp r0, 0 - bne _08085F7C - movs r0, 0x4 - strh r0, [r4, 0xC] - ldrb r0, [r6, 0x18] - lsls r0, 28 - lsrs r0, 28 - add r0, sp - ldrb r1, [r0] - adds r0, r6, 0 - bl ObjectEventTurn -_08085F7C: - movs r1, 0x26 - ldrsh r0, [r5, r1] - cmp r0, 0 - blt _08085F92 - strh r7, [r5, 0x26] - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0x1 - strh r0, [r4, 0xA] - strh r7, [r4, 0xC] -_08085F92: - add sp, 0x8 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end TeleportInFieldEffectTask2 - - thumb_func_start TeleportInFieldEffectTask3 -TeleportInFieldEffectTask3: @ 8085F9C - push {r4,r5,lr} - sub sp, 0x8 - adds r4, r0, 0 - ldr r1, _08086018 @ =gUnknown_83CC108 - mov r0, sp - movs r2, 0x5 - bl memcpy - ldr r0, _0808601C @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08086020 @ =gObjectEvents - adds r5, r0, r1 - ldrh r0, [r4, 0xA] - subs r0, 0x1 - strh r0, [r4, 0xA] - lsls r0, 16 - cmp r0, 0 - bne _08086010 - ldrb r0, [r5, 0x18] - lsls r0, 28 - lsrs r0, 28 - add r0, sp - ldrb r1, [r0] - adds r0, r5, 0 - bl ObjectEventTurn - movs r0, 0x8 - strh r0, [r4, 0xA] - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - ble _08086010 - movs r0, 0x24 - ldrsh r1, [r4, r0] - ldrb r0, [r5, 0x18] - lsls r0, 28 - lsrs r0, 28 - cmp r1, r0 - bne _08086010 - bl ScriptContext2_Disable - bl CameraObjectReset1 - bl UnfreezeObjectEvents - ldr r0, _08086024 @ =Task_DoTeleportInFieldEffect - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_08086010: - add sp, 0x8 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08086018: .4byte gUnknown_83CC108 -_0808601C: .4byte gPlayerAvatar -_08086020: .4byte gObjectEvents -_08086024: .4byte Task_DoTeleportInFieldEffect - thumb_func_end TeleportInFieldEffectTask3 - thumb_func_start FldEff_FieldMoveShowMon FldEff_FieldMoveShowMon: @ 8086028 push {r4,lr} diff --git a/data/field_effect.s b/data/field_effect.s index baa7625a7..3629040b3 100644 --- a/data/field_effect.s +++ b/data/field_effect.s @@ -6,22 +6,6 @@ .section .rodata .align 2 - .align 2 -sTeleportEffectFuncs:: @ 83CC0F8 dataptr - .4byte TeleportFieldEffectTask1 - .4byte TeleportFieldEffectTask2 - .4byte TeleportFieldEffectTask3 - .4byte TeleportFieldEffectTask4 - -gUnknown_83CC108:: @ 83CC108 data8 - .byte 0x01, 0x03, 0x04, 0x02, 0x01 - - .align 2 -sTeleportInEffectFuncs:: @ 83CC110 dataptr - .4byte TeleportInFieldEffectTask1 - .4byte TeleportInFieldEffectTask2 - .4byte TeleportInFieldEffectTask3 - .align 2 sShowMonOutdoorsEffectFuncs:: @ 83CC11C dataptr .4byte ShowMonEffect_Outdoors_1 diff --git a/include/overworld.h b/include/overworld.h index d613b5f41..51e94fe63 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -83,6 +83,7 @@ void sub_8084E2C(s8, s8, s8, s8, s8); void sub_8084E80(s8, s8, s8, s8, s8); void sub_8084EBC(s16, s16); void sub_80555E0(void); +void copy_saved_warp3_bank_and_enter_x_to_warp1(void); void player_avatar_init_params_reset(void); diff --git a/src/field_effect.c b/src/field_effect.c index 4886a4729..6657265dd 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -1265,16 +1265,6 @@ bool8 (*const sEscalatorWarpFieldEffectFuncs[])(struct Task * task) = { EscalatorWarpEffect_6 }; -bool8 (*const sEscalatorWarpInFieldEffectFuncs[])(struct Task * task) = { - EscalatorWarpInEffect_1, - EscalatorWarpInEffect_2, - EscalatorWarpInEffect_3, - EscalatorWarpInEffect_4, - EscalatorWarpInEffect_5, - EscalatorWarpInEffect_6, - EscalatorWarpInEffect_7 -}; - void StartEscalatorWarp(u8 metatileBehavior, u8 priority) { u8 taskId = CreateTask(Task_EscalatorWarpFieldEffect, priority); @@ -1400,6 +1390,16 @@ void Escalator_TransitionToWarpInEffect(void) } } +bool8 (*const sEscalatorWarpInFieldEffectFuncs[])(struct Task * task) = { + EscalatorWarpInEffect_1, + EscalatorWarpInEffect_2, + EscalatorWarpInEffect_3, + EscalatorWarpInEffect_4, + EscalatorWarpInEffect_5, + EscalatorWarpInEffect_6, + EscalatorWarpInEffect_7 +}; + void FieldCB_EscalatorWarpIn(void) { Overworld_PlaySpecialMapMusic(); @@ -1691,13 +1691,6 @@ bool8 (*const sLavaridgeGymB1FWarpEffectFuncs[])(struct Task * task, struct Obje LavaridgeGymB1FWarpEffect_6 }; -bool8 (*const sLavaridgeGymB1FWarpExitEffectFuncs[])(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) = { - LavaridgeGymB1FWarpExitEffect_1, - LavaridgeGymB1FWarpExitEffect_2, - LavaridgeGymB1FWarpExitEffect_3, - LavaridgeGymB1FWarpExitEffect_4 -}; - void StartLavaridgeGymB1FWarp(u8 priority) { CreateTask(Task_LavaridgeGymB1FWarp, priority); @@ -1810,6 +1803,13 @@ bool8 LavaridgeGymB1FWarpEffect_6(struct Task * task, struct ObjectEvent * objec return FALSE; } +bool8 (*const sLavaridgeGymB1FWarpExitEffectFuncs[])(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) = { + LavaridgeGymB1FWarpExitEffect_1, + LavaridgeGymB1FWarpExitEffect_2, + LavaridgeGymB1FWarpExitEffect_3, + LavaridgeGymB1FWarpExitEffect_4 +}; + void FieldCB_LavaridgeGymB1FWarpExit(void) { Overworld_PlaySpecialMapMusic(); @@ -2017,19 +2017,6 @@ void (*const gEscapeRopeFieldEffectFuncs[])(struct Task * task) = { EscapeRopeFieldEffect_Step1 }; -const u8 gUnknown_83CC0E8[] = { - [DIR_NONE] = DIR_SOUTH, - [DIR_SOUTH] = DIR_WEST, - [DIR_WEST] = DIR_NORTH, - [DIR_NORTH] = DIR_EAST, - [DIR_EAST] = DIR_SOUTH, -}; - -void (*const sEscapeRopeExitEffectFuncs[])(struct Task * task) = { - EscapeRopeExitFieldEffect_Step0, - EscapeRopeExitFieldEffect_Step1 -}; - void StartEscapeRopeFieldEffect(void) { ScriptContext2_Enable(); @@ -2080,6 +2067,13 @@ void EscapeRopeFieldEffect_Step1(struct Task * task) } } +const u8 gUnknown_83CC0E8[] = { + [DIR_NONE] = DIR_SOUTH, + [DIR_SOUTH] = DIR_WEST, + [DIR_WEST] = DIR_NORTH, + [DIR_NORTH] = DIR_EAST, + [DIR_EAST] = DIR_SOUTH, +}; u8 sub_808576C(struct ObjectEvent * playerObj, s16 *delay_p, s16 *stage_p) { @@ -2132,6 +2126,11 @@ bool32 sub_80857F0(struct ObjectEvent * playerObj, s16 *state_p, s16 *y_p) return TRUE; } +void (*const sEscapeRopeExitEffectFuncs[])(struct Task * task) = { + EscapeRopeExitFieldEffect_Step0, + EscapeRopeExitFieldEffect_Step1 +}; + bool32 sub_80858A4(struct ObjectEvent * playerObj, s16 *state_p, s16 *y_p, s16 *priority_p, s16 *subpriority_p, s16 *subspriteMode_p) { struct Sprite * sprite = &gSprites[playerObj->spriteId]; @@ -2229,3 +2228,209 @@ void EscapeRopeExitFieldEffect_Step1(struct Task * task) DestroyTask(FindTaskIdByFunc(Task_DoEscapeRopeExitFieldEffect)); } } + +void Task_DoTeleportFieldEffect(u8 taskId); +void TeleportFieldEffectTask1(struct Task * task); +void TeleportFieldEffectTask2(struct Task * task); +void TeleportFieldEffectTask3(struct Task * task); +void TeleportFieldEffectTask4(struct Task * task); +void FieldCallback_TeleportIn(void); +void Task_DoTeleportInFieldEffect(u8 taskId); +void TeleportInFieldEffectTask1(struct Task * task); +void TeleportInFieldEffectTask2(struct Task * task); +void TeleportInFieldEffectTask3(struct Task * task); + +void (*const sTeleportEffectFuncs[])(struct Task *) = { + TeleportFieldEffectTask1, + TeleportFieldEffectTask2, + TeleportFieldEffectTask3, + TeleportFieldEffectTask4 +}; + +void CreateTeleportFieldEffectTask(void) +{ + CreateTask(Task_DoTeleportFieldEffect, 0); +} + +void Task_DoTeleportFieldEffect(u8 taskId) +{ + sTeleportEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); +} + +void TeleportFieldEffectTask1(struct Task *task) +{ + ScriptContext2_Enable(); + FreezeObjectEvents(); + CameraObjectReset2(); + task->data[15] = GetPlayerFacingDirection(); + task->data[0]++; +} + +void TeleportFieldEffectTask2(struct Task *task) +{ + u8 spinDirections[5] = { + [DIR_NONE] = DIR_SOUTH, + [DIR_SOUTH] = DIR_WEST, + [DIR_WEST] = DIR_NORTH, + [DIR_NORTH] = DIR_EAST, + [DIR_EAST] = DIR_SOUTH + }; + struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + if (task->data[1] == 0 || (--task->data[1]) == 0) + { + ObjectEventTurn(objectEvent, spinDirections[objectEvent->facingDirection]); + task->data[1] = 8; + task->data[2]++; + } + if (task->data[2] > 7 && task->data[15] == objectEvent->facingDirection) + { + task->data[0]++; + task->data[1] = 4; + task->data[2] = 8; + task->data[3] = 1; + PlaySE(SE_TK_WARPIN); + } +} + +void TeleportFieldEffectTask3(struct Task *task) +{ + u8 spinDirections[5] = {DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH}; + struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + struct Sprite *sprite = &gSprites[gPlayerAvatar.spriteId]; + if ((--task->data[1]) <= 0) + { + task->data[1] = 4; + ObjectEventTurn(objectEvent, spinDirections[objectEvent->facingDirection]); + } + sprite->pos1.y -= task->data[3]; + task->data[4] += task->data[3]; + if ((--task->data[2]) <= 0 && (task->data[2] = 4, task->data[3] < 8)) + { + task->data[3] <<= 1; + } + if (task->data[4] > 8 && (sprite->oam.priority = 1, sprite->subspriteMode != SUBSPRITES_OFF)) + { + sprite->subspriteMode = SUBSPRITES_IGNORE_PRIORITY; + } + if (task->data[4] >= 0xa8) + { + task->data[0]++; + TryFadeOutOldMapMusic(); + WarpFadeOutScreen(); + } +} + +void TeleportFieldEffectTask4(struct Task *task) +{ + if (!gPaletteFade.active) + { + if (BGMusicStopped() == TRUE) + { + copy_saved_warp3_bank_and_enter_x_to_warp1(); + WarpIntoMap(); + SetMainCallback2(CB2_LoadMap); + gFieldCallback = FieldCallback_TeleportIn; + DestroyTask(FindTaskIdByFunc(Task_DoTeleportFieldEffect)); + } + } +} + +void (*const sTeleportInEffectFuncs[])(struct Task *) = { + TeleportInFieldEffectTask1, + TeleportInFieldEffectTask2, + TeleportInFieldEffectTask3 +}; + +void FieldCallback_TeleportIn(void) +{ + Overworld_PlaySpecialMapMusic(); + WarpFadeInScreen(); + sub_8111CF0(); + ScriptContext2_Enable(); + FreezeObjectEvents(); + gFieldCallback = NULL; + gObjectEvents[gPlayerAvatar.objectEventId].invisible = TRUE; + CameraObjectReset2(); + CreateTask(Task_DoTeleportInFieldEffect, 0); +} + +void Task_DoTeleportInFieldEffect(u8 taskId) +{ + sTeleportInEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); +} + +void TeleportInFieldEffectTask1(struct Task *task) +{ + struct Sprite *sprite; + s16 centerToCornerVecY; + if (IsWeatherNotFadingIn()) + { + sprite = &gSprites[gPlayerAvatar.spriteId]; + centerToCornerVecY = -(sprite->centerToCornerVecY << 1); + sprite->pos2.y = -(sprite->pos1.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY + centerToCornerVecY); + gObjectEvents[gPlayerAvatar.objectEventId].invisible = FALSE; + task->data[0]++; + task->data[1] = 8; + task->data[2] = 1; + task->data[14] = sprite->subspriteMode; + task->data[15] = GetPlayerFacingDirection(); + PlaySE(SE_TK_WARPIN); + } +} + +void TeleportInFieldEffectTask2(struct Task *task) +{ + u8 spinDirections[5] = {1, 3, 4, 2, 1}; + struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + struct Sprite *sprite = &gSprites[gPlayerAvatar.spriteId]; + if ((sprite->pos2.y += task->data[1]) >= -8) + { + if (task->data[13] == 0) + { + task->data[13]++; + objectEvent->triggerGroundEffectsOnMove = 1; + sprite->subspriteMode = task->data[14]; + } + } else + { + sprite->oam.priority = 1; + if (sprite->subspriteMode != SUBSPRITES_OFF) + { + sprite->subspriteMode = SUBSPRITES_IGNORE_PRIORITY; + } + } + if (sprite->pos2.y >= -0x30 && task->data[1] > 1 && !(sprite->pos2.y & 1)) + { + task->data[1]--; + } + if ((--task->data[2]) == 0) + { + task->data[2] = 4; + ObjectEventTurn(objectEvent, spinDirections[objectEvent->facingDirection]); + } + if (sprite->pos2.y >= 0) + { + sprite->pos2.y = 0; + task->data[0]++; + task->data[1] = 1; + task->data[2] = 0; + } +} + +void TeleportInFieldEffectTask3(struct Task *task) +{ + u8 spinDirections[5] = {1, 3, 4, 2, 1}; + struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + if ((--task->data[1]) == 0) + { + ObjectEventTurn(objectEvent, spinDirections[objectEvent->facingDirection]); + task->data[1] = 8; + if ((++task->data[2]) > 4 && task->data[14] == objectEvent->facingDirection) + { + ScriptContext2_Disable(); + CameraObjectReset1(); + UnfreezeObjectEvents(); + DestroyTask(FindTaskIdByFunc(Task_DoTeleportInFieldEffect)); + } + } +} From 0c492c087eca215e7dd29a90b8a3e9232ffe3bf6 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 28 Feb 2020 15:19:50 -0500 Subject: [PATCH 15/26] Show Mon field effect --- asm/field_effect.s | 1177 ------------------------------------- data/field_effect.s | 20 - include/global.fieldmap.h | 9 +- include/overworld.h | 1 + src/field_effect.c | 541 +++++++++++++++-- 5 files changed, 494 insertions(+), 1254 deletions(-) diff --git a/asm/field_effect.s b/asm/field_effect.s index 825682f09..de72a2657 100644 --- a/asm/field_effect.s +++ b/asm/field_effect.s @@ -5,1183 +5,6 @@ .text - thumb_func_start FldEff_FieldMoveShowMon -FldEff_FieldMoveShowMon: @ 8086028 - push {r4,lr} - bl GetCurrentMapType - lsls r0, 24 - lsrs r0, 24 - bl IsMapTypeOutdoors - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08086048 - ldr r0, _08086044 @ =Task_ShowMon_Outdoors - b _0808604A - .align 2, 0 -_08086044: .4byte Task_ShowMon_Outdoors -_08086048: - ldr r0, _08086078 @ =Task_ShowMon_Indoors -_0808604A: - movs r1, 0xFF - bl CreateTask - lsls r0, 24 - lsrs r4, r0, 24 - ldr r2, _0808607C @ =gFieldEffectArguments - ldr r0, [r2] - ldr r1, [r2, 0x4] - ldr r2, [r2, 0x8] - bl sub_8086860 - ldr r2, _08086080 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r2 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r1, 0x26] - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08086078: .4byte Task_ShowMon_Indoors -_0808607C: .4byte gFieldEffectArguments -_08086080: .4byte gTasks - thumb_func_end FldEff_FieldMoveShowMon - - thumb_func_start FldEff_FieldMoveShowMonInit -FldEff_FieldMoveShowMonInit: @ 8086084 - push {r4-r6,lr} - ldr r5, _080860D8 @ =gFieldEffectArguments - ldr r0, [r5] - movs r6, 0x80 - lsls r6, 24 - ands r6, r0 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x64 - adds r4, r0, 0 - muls r4, r1 - ldr r0, _080860DC @ =gPlayerParty - adds r4, r0 - adds r0, r4, 0 - movs r1, 0xB - bl GetMonData - str r0, [r5] - adds r0, r4, 0 - movs r1, 0x1 - bl GetMonData - str r0, [r5, 0x4] - adds r0, r4, 0 - movs r1, 0 - bl GetMonData - str r0, [r5, 0x8] - ldr r0, [r5] - orrs r0, r6 - str r0, [r5] - movs r0, 0x6 - bl FieldEffectStart - movs r0, 0x3B - bl FieldEffectActiveListRemove - movs r0, 0 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080860D8: .4byte gFieldEffectArguments -_080860DC: .4byte gPlayerParty - thumb_func_end FldEff_FieldMoveShowMonInit - - thumb_func_start Task_ShowMon_Outdoors -Task_ShowMon_Outdoors: @ 80860E0 - push {lr} - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - ldr r3, _08086108 @ =sShowMonOutdoorsEffectFuncs - ldr r2, _0808610C @ =gTasks - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - movs r2, 0x8 - ldrsh r1, [r0, r2] - lsls r1, 2 - adds r1, r3 - ldr r1, [r1] - bl _call_via_r1 - pop {r0} - bx r0 - .align 2, 0 -_08086108: .4byte sShowMonOutdoorsEffectFuncs -_0808610C: .4byte gTasks - thumb_func_end Task_ShowMon_Outdoors - - thumb_func_start ShowMonEffect_Outdoors_1 -ShowMonEffect_Outdoors_1: @ 8086110 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x48 - bl GetGpuReg - strh r0, [r4, 0x1E] - movs r0, 0x4A - bl GetGpuReg - strh r0, [r4, 0x20] - adds r0, r4, 0 - adds r0, 0x22 - ldr r1, _08086170 @ =gMain - ldr r1, [r1, 0xC] - bl StoreWordInTwoHalfwords - ldr r1, _08086174 @ =0x0000f0f1 - strh r1, [r4, 0xA] - ldr r0, _08086178 @ =0x00005051 - strh r0, [r4, 0xC] - movs r0, 0x3F - strh r0, [r4, 0xE] - movs r0, 0x3E - strh r0, [r4, 0x10] - movs r0, 0x40 - bl SetGpuReg - ldrh r1, [r4, 0xC] - movs r0, 0x44 - bl SetGpuReg - ldrh r1, [r4, 0xE] - movs r0, 0x48 - bl SetGpuReg - ldrh r1, [r4, 0x10] - movs r0, 0x4A - bl SetGpuReg - ldr r0, _0808617C @ =VBlankCB_ShowMonEffect_Outdoors - bl SetVBlankCallback - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08086170: .4byte gMain -_08086174: .4byte 0x0000f0f1 -_08086178: .4byte 0x00005051 -_0808617C: .4byte VBlankCB_ShowMonEffect_Outdoors - thumb_func_end ShowMonEffect_Outdoors_1 - - thumb_func_start ShowMonEffect_Outdoors_2 -ShowMonEffect_Outdoors_2: @ 8086180 - push {r4-r6,lr} - mov r6, r8 - push {r6} - sub sp, 0x4 - mov r8, r0 - movs r0, 0x8 - bl GetGpuReg - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 18 - lsls r4, 30 - lsrs r4, 16 - movs r0, 0x8 - bl GetGpuReg - adds r5, r0, 0 - lsls r5, 16 - lsrs r5, 24 - lsls r5, 27 - lsrs r5, 16 - ldr r0, _080861F0 @ =gUnknown_83CB5F0 - movs r6, 0xC0 - lsls r6, 19 - adds r4, r6 - movs r2, 0x80 - lsls r2, 1 - adds r1, r4, 0 - bl CpuSet - movs r0, 0 - str r0, [sp] - adds r6, r5, r6 - ldr r2, _080861F4 @ =0x05000200 - mov r0, sp - adds r1, r6, 0 - bl CpuSet - ldr r0, _080861F8 @ =gUnknown_83CB7F0 - movs r1, 0xF0 - movs r2, 0x20 - bl LoadPalette - adds r0, r5, 0 - bl sub_8086428 - mov r1, r8 - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080861F0: .4byte gUnknown_83CB5F0 -_080861F4: .4byte 0x05000200 -_080861F8: .4byte gUnknown_83CB7F0 - thumb_func_end ShowMonEffect_Outdoors_2 - - thumb_func_start ShowMonEffect_Outdoors_3 -ShowMonEffect_Outdoors_3: @ 80861FC - push {r4-r7,lr} - adds r3, r0, 0 - ldrh r0, [r3, 0x12] - subs r0, 0x10 - strh r0, [r3, 0x12] - ldrh r6, [r3, 0xA] - ldrh r2, [r3, 0xC] - movs r7, 0xFF - lsrs r1, r6, 8 - subs r1, 0x10 - lsls r1, 16 - lsrs r0, r2, 8 - subs r0, 0x2 - lsls r0, 16 - lsrs r4, r0, 16 - adds r0, r7, 0 - ands r0, r2 - adds r5, r0, 0x2 - lsrs r2, r1, 16 - cmp r1, 0 - bge _08086228 - movs r2, 0 -_08086228: - lsls r0, r4, 16 - asrs r0, 16 - cmp r0, 0x27 - bgt _08086232 - movs r4, 0x28 -_08086232: - cmp r5, 0x78 - ble _08086238 - movs r5, 0x78 -_08086238: - lsls r2, 16 - asrs r2, 16 - lsls r1, r2, 8 - adds r0, r7, 0 - ands r0, r6 - orrs r1, r0 - strh r1, [r3, 0xA] - lsls r0, r4, 16 - asrs r4, r0, 16 - lsls r0, r4, 8 - adds r1, r5, 0 - orrs r0, r1 - strh r0, [r3, 0xC] - cmp r2, 0 - bne _08086278 - cmp r4, 0x28 - bne _08086278 - cmp r1, 0x78 - bne _08086278 - ldr r2, _08086280 @ =gSprites - movs r0, 0x26 - ldrsh r1, [r3, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r2, 0x1C - adds r0, r2 - ldr r1, _08086284 @ =sub_80868C0 - str r1, [r0] - ldrh r0, [r3, 0x8] - adds r0, 0x1 - strh r0, [r3, 0x8] -_08086278: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08086280: .4byte gSprites -_08086284: .4byte sub_80868C0 - thumb_func_end ShowMonEffect_Outdoors_3 - - thumb_func_start ShowMonEffect_Outdoors_4 -ShowMonEffect_Outdoors_4: @ 8086288 - push {lr} - adds r3, r0, 0 - ldrh r0, [r3, 0x12] - subs r0, 0x10 - strh r0, [r3, 0x12] - ldr r2, _080862B4 @ =gSprites - movs r0, 0x26 - ldrsh r1, [r3, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - movs r1, 0x3C - ldrsh r0, [r0, r1] - cmp r0, 0 - beq _080862AE - ldrh r0, [r3, 0x8] - adds r0, 0x1 - strh r0, [r3, 0x8] -_080862AE: - pop {r0} - bx r0 - .align 2, 0 -_080862B4: .4byte gSprites - thumb_func_end ShowMonEffect_Outdoors_4 - - thumb_func_start ShowMonEffect_Outdoors_5 -ShowMonEffect_Outdoors_5: @ 80862B8 - push {r4,lr} - adds r3, r0, 0 - ldrh r0, [r3, 0x12] - subs r0, 0x10 - strh r0, [r3, 0x12] - ldrh r2, [r3, 0xC] - lsls r1, r2, 16 - movs r0, 0xFF - asrs r1, 24 - adds r1, 0x6 - lsls r1, 16 - ands r0, r2 - subs r0, 0x6 - lsls r0, 16 - lsrs r2, r0, 16 - lsrs r4, r1, 16 - asrs r1, 16 - cmp r1, 0x50 - ble _080862E0 - movs r4, 0x50 -_080862E0: - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, 0x50 - bgt _080862EA - movs r2, 0x51 -_080862EA: - lsls r0, r4, 16 - asrs r0, 16 - lsls r1, r0, 8 - lsls r2, 16 - asrs r2, 16 - orrs r1, r2 - strh r1, [r3, 0xC] - cmp r0, 0x50 - bne _08086306 - cmp r2, 0x51 - bne _08086306 - ldrh r0, [r3, 0x8] - adds r0, 0x1 - strh r0, [r3, 0x8] -_08086306: - pop {r4} - pop {r0} - bx r0 - thumb_func_end ShowMonEffect_Outdoors_5 - - thumb_func_start ShowMonEffect_Outdoors_6 -ShowMonEffect_Outdoors_6: @ 808630C - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - movs r0, 0x8 - bl GetGpuReg - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 24 - lsls r1, 27 - lsrs r1, 16 - movs r0, 0 - str r0, [sp] - movs r0, 0xC0 - lsls r0, 19 - adds r1, r0 - ldr r2, _08086354 @ =0x05000200 - mov r0, sp - bl CpuSet - movs r0, 0xF1 - strh r0, [r4, 0xA] - movs r0, 0xA1 - strh r0, [r4, 0xC] - ldrh r0, [r4, 0x1E] - strh r0, [r4, 0xE] - ldrh r0, [r4, 0x20] - strh r0, [r4, 0x10] - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08086354: .4byte 0x05000200 - thumb_func_end ShowMonEffect_Outdoors_6 - - thumb_func_start ShowMonEffect_Outdoors_7 -ShowMonEffect_Outdoors_7: @ 8086358 - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - adds r0, 0x22 - mov r1, sp - bl LoadWordFromTwoHalfwords - ldr r0, [sp] - bl SetVBlankCallback - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - bl Menu_LoadStdPal - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _080863B8 @ =gSprites - adds r0, r1 - ldrh r1, [r4, 0x26] - lsls r1, 24 - lsrs r1, 24 - bl FreeResourcesAndDestroySprite - movs r0, 0x6 - bl FieldEffectActiveListRemove - ldr r0, _080863BC @ =Task_ShowMon_Outdoors - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080863B8: .4byte gSprites -_080863BC: .4byte Task_ShowMon_Outdoors - thumb_func_end ShowMonEffect_Outdoors_7 - - thumb_func_start VBlankCB_ShowMonEffect_Outdoors -VBlankCB_ShowMonEffect_Outdoors: @ 80863C0 - push {r4,lr} - sub sp, 0x4 - ldr r0, _08086420 @ =Task_ShowMon_Outdoors - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - ldr r0, _08086424 @ =gTasks - adds r4, r0 - adds r0, r4, 0 - adds r0, 0x22 - mov r1, sp - bl LoadWordFromTwoHalfwords - ldr r0, [sp] - bl _call_via_r0 - ldrh r1, [r4, 0xA] - movs r0, 0x40 - bl SetGpuReg - ldrh r1, [r4, 0xC] - movs r0, 0x44 - bl SetGpuReg - ldrh r1, [r4, 0xE] - movs r0, 0x48 - bl SetGpuReg - ldrh r1, [r4, 0x10] - movs r0, 0x4A - bl SetGpuReg - ldrh r1, [r4, 0x12] - movs r0, 0x10 - bl SetGpuReg - ldrh r1, [r4, 0x14] - movs r0, 0x12 - bl SetGpuReg - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08086420: .4byte Task_ShowMon_Outdoors -_08086424: .4byte gTasks - thumb_func_end VBlankCB_ShowMonEffect_Outdoors - - thumb_func_start sub_8086428 -sub_8086428: @ 8086428 - push {r4,r5,lr} - lsls r0, 16 - lsrs r0, 16 - ldr r1, _0808645C @ =0x06000140 - adds r2, r0, r1 - movs r1, 0 - ldr r5, _08086460 @ =gUnknown_83CB810 - movs r0, 0xF0 - lsls r0, 8 - adds r4, r0, 0 - ldr r3, _08086464 @ =0x0000013f -_0808643E: - lsls r0, r1, 1 - adds r0, r5 - ldrh r0, [r0] - orrs r0, r4 - strh r0, [r2] - adds r0, r1, 0x1 - lsls r0, 16 - lsrs r1, r0, 16 - adds r2, 0x2 - cmp r1, r3 - bls _0808643E - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0808645C: .4byte 0x06000140 -_08086460: .4byte gUnknown_83CB810 -_08086464: .4byte 0x0000013f - thumb_func_end sub_8086428 - - thumb_func_start Task_ShowMon_Indoors -Task_ShowMon_Indoors: @ 8086468 - push {lr} - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - ldr r3, _08086490 @ =sShowMonIndoorsEffectFuncs - ldr r2, _08086494 @ =gTasks - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - movs r2, 0x8 - ldrsh r1, [r0, r2] - lsls r1, 2 - adds r1, r3 - ldr r1, [r1] - bl _call_via_r1 - pop {r0} - bx r0 - .align 2, 0 -_08086490: .4byte sShowMonIndoorsEffectFuncs -_08086494: .4byte gTasks - thumb_func_end Task_ShowMon_Indoors - - thumb_func_start ShowMonEffect_Indoors_1 -ShowMonEffect_Indoors_1: @ 8086498 - push {r4,lr} - adds r4, r0, 0 - ldrh r1, [r4, 0xA] - movs r0, 0x10 - bl SetGpuReg - ldrh r1, [r4, 0xC] - movs r0, 0x12 - bl SetGpuReg - adds r0, r4, 0 - adds r0, 0x22 - ldr r1, _080864CC @ =gMain - ldr r1, [r1, 0xC] - bl StoreWordInTwoHalfwords - ldr r0, _080864D0 @ =VBlankCB_ShowMonEffect_Indoors - bl SetVBlankCallback - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080864CC: .4byte gMain -_080864D0: .4byte VBlankCB_ShowMonEffect_Indoors - thumb_func_end ShowMonEffect_Indoors_1 - - thumb_func_start ShowMonEffect_Indoors_2 -ShowMonEffect_Indoors_2: @ 80864D4 - push {r4-r6,lr} - mov r6, r9 - mov r5, r8 - push {r5,r6} - sub sp, 0x4 - mov r9, r0 - movs r0, 0x8 - bl GetGpuReg - adds r5, r0, 0 - lsls r5, 16 - lsrs r5, 18 - lsls r5, 30 - lsrs r5, 16 - movs r0, 0x8 - bl GetGpuReg - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 24 - lsls r4, 27 - lsrs r4, 16 - movs r0, 0 - mov r8, r0 - mov r1, r9 - strh r4, [r1, 0x20] - ldr r0, _08086548 @ =gUnknown_83CBA90 - movs r6, 0xC0 - lsls r6, 19 - adds r5, r6 - adds r1, r5, 0 - movs r2, 0x40 - bl CpuSet - mov r0, r8 - str r0, [sp] - adds r4, r6 - ldr r2, _0808654C @ =0x05000200 - mov r0, sp - adds r1, r4, 0 - bl CpuSet - ldr r0, _08086550 @ =gUnknown_83CBB10 - movs r1, 0xF0 - movs r2, 0x20 - bl LoadPalette - mov r1, r9 - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08086548: .4byte gUnknown_83CBA90 -_0808654C: .4byte 0x05000200 -_08086550: .4byte gUnknown_83CBB10 - thumb_func_end ShowMonEffect_Indoors_2 - - thumb_func_start ShowMonEffect_Indoors_3 -ShowMonEffect_Indoors_3: @ 8086554 - push {r4,lr} - adds r4, r0, 0 - bl sub_8086738 - lsls r0, 24 - cmp r0, 0 - beq _080865A6 - movs r0, 0x48 - bl GetGpuReg - strh r0, [r4, 0x12] - movs r1, 0xFF - ands r1, r0 - movs r2, 0x88 - lsls r2, 5 - adds r0, r2, 0 - orrs r1, r0 - movs r0, 0x48 - bl SetGpuReg - movs r0, 0x42 - movs r1, 0xF0 - bl SetGpuReg - ldr r1, _080865B4 @ =0x00002878 - movs r0, 0x46 - bl SetGpuReg - ldr r2, _080865B8 @ =gSprites - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r2, 0x1C - adds r0, r2 - ldr r1, _080865BC @ =sub_80868C0 - str r1, [r0] - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_080865A6: - adds r0, r4, 0 - bl sub_8086728 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080865B4: .4byte 0x00002878 -_080865B8: .4byte gSprites -_080865BC: .4byte sub_80868C0 - thumb_func_end ShowMonEffect_Indoors_3 - - thumb_func_start ShowMonEffect_Indoors_4 -ShowMonEffect_Indoors_4: @ 80865C0 - push {r4,lr} - adds r4, r0, 0 - bl sub_8086728 - ldr r2, _080865EC @ =gSprites - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - movs r1, 0x3C - ldrsh r0, [r0, r1] - cmp r0, 0 - beq _080865E4 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_080865E4: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080865EC: .4byte gSprites - thumb_func_end ShowMonEffect_Indoors_4 - - thumb_func_start ShowMonEffect_Indoors_5 -ShowMonEffect_Indoors_5: @ 80865F0 - push {r4,r5,lr} - adds r4, r0, 0 - bl sub_8086728 - ldrh r1, [r4, 0xA] - movs r0, 0x7 - ands r0, r1 - movs r1, 0 - strh r0, [r4, 0xE] - strh r1, [r4, 0x10] - ldr r5, _0808662C @ =0x0000ffff - movs r0, 0x42 - adds r1, r5, 0 - bl SetGpuReg - movs r0, 0x46 - adds r1, r5, 0 - bl SetGpuReg - ldrh r1, [r4, 0x12] - movs r0, 0x48 - bl SetGpuReg - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0808662C: .4byte 0x0000ffff - thumb_func_end ShowMonEffect_Indoors_5 - - thumb_func_start ShowMonEffect_Indoors_6 -ShowMonEffect_Indoors_6: @ 8086630 - push {r4,lr} - adds r4, r0, 0 - bl sub_8086728 - adds r0, r4, 0 - bl sub_80867F0 - lsls r0, 24 - cmp r0, 0 - beq _0808664A - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_0808664A: - pop {r4} - pop {r0} - bx r0 - thumb_func_end ShowMonEffect_Indoors_6 - - thumb_func_start ShowMonEffect_Indoors_7 -ShowMonEffect_Indoors_7: @ 8086650 - push {r4,lr} - sub sp, 0x8 - adds r4, r0, 0 - movs r0, 0x8 - bl GetGpuReg - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 24 - lsls r1, 27 - lsrs r1, 16 - movs r0, 0 - str r0, [sp] - movs r0, 0xC0 - lsls r0, 19 - adds r1, r0 - ldr r2, _080866D4 @ =0x05000200 - mov r0, sp - bl CpuSet - adds r0, r4, 0 - adds r0, 0x22 - add r1, sp, 0x4 - bl LoadWordFromTwoHalfwords - ldr r0, [sp, 0x4] - bl SetVBlankCallback - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - bl Menu_LoadStdPal - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _080866D8 @ =gSprites - adds r0, r1 - ldrh r1, [r4, 0x26] - lsls r1, 24 - lsrs r1, 24 - bl FreeResourcesAndDestroySprite - movs r0, 0x6 - bl FieldEffectActiveListRemove - ldr r0, _080866DC @ =Task_ShowMon_Indoors - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - add sp, 0x8 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080866D4: .4byte 0x05000200 -_080866D8: .4byte gSprites -_080866DC: .4byte Task_ShowMon_Indoors - thumb_func_end ShowMonEffect_Indoors_7 - - thumb_func_start VBlankCB_ShowMonEffect_Indoors -VBlankCB_ShowMonEffect_Indoors: @ 80866E0 - push {r4,lr} - sub sp, 0x4 - ldr r0, _08086720 @ =Task_ShowMon_Indoors - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - ldr r0, _08086724 @ =gTasks - adds r4, r0 - adds r0, r4, 0 - adds r0, 0x22 - mov r1, sp - bl LoadWordFromTwoHalfwords - ldr r0, [sp] - bl _call_via_r0 - ldrh r1, [r4, 0xA] - movs r0, 0x10 - bl SetGpuReg - ldrh r1, [r4, 0xC] - movs r0, 0x12 - bl SetGpuReg - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08086720: .4byte Task_ShowMon_Indoors -_08086724: .4byte gTasks - thumb_func_end VBlankCB_ShowMonEffect_Indoors - - thumb_func_start sub_8086728 -sub_8086728: @ 8086728 - ldrh r1, [r0, 0xA] - subs r1, 0x10 - strh r1, [r0, 0xA] - ldrh r1, [r0, 0xE] - adds r1, 0x10 - strh r1, [r0, 0xE] - bx lr - thumb_func_end sub_8086728 - - thumb_func_start sub_8086738 -sub_8086738: @ 8086738 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - adds r5, r0, 0 - ldrh r2, [r5, 0x10] - movs r1, 0x10 - ldrsh r0, [r5, r1] - cmp r0, 0x1F - ble _08086754 - movs r0, 0x1 - b _080867D8 -_08086754: - ldrh r0, [r5, 0xE] - lsls r0, 16 - asrs r3, r0, 19 - movs r1, 0x1F - ands r3, r1 - movs r4, 0x10 - ldrsh r0, [r5, r4] - cmp r3, r0 - blt _080867D6 - movs r0, 0x20 - subs r3, r0, r3 - ands r3, r1 - subs r0, r2 - mov r12, r0 - mov r7, r12 - ands r7, r1 - mov r12, r7 - ldrh r0, [r5, 0x20] - ldr r1, _080867E8 @ =0x06000140 - adds r1, r0 - mov r8, r1 - movs r4, 0 - ldr r7, _080867EC @ =gUnknown_83CBB30 - mov r10, r7 - movs r0, 0xF0 - lsls r0, 8 - mov r9, r0 - adds r1, r3, 0x1 - movs r0, 0x1F - ands r1, r0 - str r1, [sp] - mov r6, r12 - adds r6, 0x1 - ands r6, r0 -_08086798: - lsls r1, r4, 5 - adds r2, r1, r3 - lsls r2, 1 - add r2, r8 - mov r7, r12 - adds r0, r7, r1 - lsls r0, 1 - add r0, r10 - ldrh r0, [r0] - mov r7, r9 - orrs r0, r7 - strh r0, [r2] - ldr r0, [sp] - adds r2, r1, r0 - lsls r2, 1 - add r2, r8 - adds r1, r6, r1 - lsls r1, 1 - add r1, r10 - ldrh r0, [r1] - mov r1, r9 - orrs r0, r1 - strh r0, [r2] - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x9 - bls _08086798 - ldrh r0, [r5, 0x10] - adds r0, 0x2 - strh r0, [r5, 0x10] -_080867D6: - movs r0, 0 -_080867D8: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080867E8: .4byte 0x06000140 -_080867EC: .4byte gUnknown_83CBB30 - thumb_func_end sub_8086738 - - thumb_func_start sub_80867F0 -sub_80867F0: @ 80867F0 - push {r4-r7,lr} - adds r5, r0, 0 - movs r1, 0x10 - ldrsh r0, [r5, r1] - cmp r0, 0x1F - ble _08086800 - movs r0, 0x1 - b _08086854 -_08086800: - ldrh r0, [r5, 0xE] - lsls r0, 16 - asrs r0, 19 - lsls r0, 16 - lsrs r2, r0, 16 - movs r1, 0x10 - ldrsh r0, [r5, r1] - cmp r2, r0 - blt _08086852 - ldrh r0, [r5, 0xA] - lsls r0, 16 - asrs r2, r0, 19 - movs r0, 0x1F - ands r2, r0 - ldrh r0, [r5, 0x20] - ldr r1, _0808685C @ =0x06000140 - adds r6, r0, r1 - movs r3, 0 - movs r0, 0xF0 - lsls r0, 8 - adds r7, r0, 0 - adds r4, r2, 0x1 - movs r0, 0x1F - ands r4, r0 -_08086830: - lsls r0, r3, 5 - adds r1, r0, r2 - lsls r1, 1 - adds r1, r6 - strh r7, [r1] - adds r0, r4 - lsls r0, 1 - adds r0, r6 - strh r7, [r0] - adds r0, r3, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - cmp r3, 0x9 - bls _08086830 - ldrh r0, [r5, 0x10] - adds r0, 0x2 - strh r0, [r5, 0x10] -_08086852: - movs r0, 0 -_08086854: - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0808685C: .4byte 0x06000140 - thumb_func_end sub_80867F0 - - thumb_func_start sub_8086860 -sub_8086860: @ 8086860 - push {r4-r6,lr} - sub sp, 0x8 - adds r6, r0, 0 - movs r5, 0x80 - lsls r5, 24 - ands r5, r6 - lsrs r5, 16 - lsls r5, 16 - lsrs r5, 16 - ldr r0, _080868B4 @ =0x7fffffff - ands r6, r0 - lsls r0, r6, 16 - lsrs r0, 16 - movs r3, 0xA0 - lsls r3, 1 - movs r4, 0x50 - str r4, [sp] - movs r4, 0 - str r4, [sp, 0x4] - bl CreateMonSprite_FieldMove - lsls r0, 24 - lsrs r0, 24 - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - ldr r1, _080868B8 @ =gSprites - adds r2, r1 - ldr r1, _080868BC @ =SpriteCallbackDummy - str r1, [r2, 0x1C] - ldrb r3, [r2, 0x5] - movs r1, 0xD - negs r1, r1 - ands r1, r3 - strb r1, [r2, 0x5] - strh r6, [r2, 0x2E] - strh r5, [r2, 0x3A] - add sp, 0x8 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080868B4: .4byte 0x7fffffff -_080868B8: .4byte gSprites -_080868BC: .4byte SpriteCallbackDummy - thumb_func_end sub_8086860 - - thumb_func_start sub_80868C0 -sub_80868C0: @ 80868C0 - push {lr} - adds r1, r0, 0 - ldrh r0, [r1, 0x20] - subs r0, 0x14 - strh r0, [r1, 0x20] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x78 - bgt _08086900 - movs r0, 0x78 - strh r0, [r1, 0x20] - movs r0, 0x1E - strh r0, [r1, 0x30] - ldr r0, _080868F4 @ =sub_8086904 - str r0, [r1, 0x1C] - movs r2, 0x3A - ldrsh r0, [r1, r2] - cmp r0, 0 - beq _080868F8 - ldrh r0, [r1, 0x2E] - movs r1, 0 - movs r2, 0x7D - movs r3, 0xA - bl PlayCry2 - b _08086900 - .align 2, 0 -_080868F4: .4byte sub_8086904 -_080868F8: - ldrh r0, [r1, 0x2E] - movs r1, 0 - bl PlayCry1 -_08086900: - pop {r0} - bx r0 - thumb_func_end sub_80868C0 - - thumb_func_start sub_8086904 -sub_8086904: @ 8086904 - push {lr} - adds r1, r0, 0 - ldrh r0, [r1, 0x30] - subs r0, 0x1 - strh r0, [r1, 0x30] - lsls r0, 16 - cmp r0, 0 - bne _08086918 - ldr r0, _0808691C @ =sub_8086920 - str r0, [r1, 0x1C] -_08086918: - pop {r0} - bx r0 - .align 2, 0 -_0808691C: .4byte sub_8086920 - thumb_func_end sub_8086904 - - thumb_func_start sub_8086920 -sub_8086920: @ 8086920 - push {lr} - adds r2, r0, 0 - ldrh r3, [r2, 0x20] - movs r0, 0x20 - ldrsh r1, [r2, r0] - movs r0, 0x40 - negs r0, r0 - cmp r1, r0 - bge _08086938 - movs r0, 0x1 - strh r0, [r2, 0x3C] - b _0808693E -_08086938: - adds r0, r3, 0 - subs r0, 0x14 - strh r0, [r2, 0x20] -_0808693E: - pop {r0} - bx r0 - thumb_func_end sub_8086920 - thumb_func_start FldEff_UseSurf FldEff_UseSurf: @ 8086944 push {r4,lr} diff --git a/data/field_effect.s b/data/field_effect.s index 3629040b3..004dd555a 100644 --- a/data/field_effect.s +++ b/data/field_effect.s @@ -6,26 +6,6 @@ .section .rodata .align 2 - .align 2 -sShowMonOutdoorsEffectFuncs:: @ 83CC11C dataptr - .4byte ShowMonEffect_Outdoors_1 - .4byte ShowMonEffect_Outdoors_2 - .4byte ShowMonEffect_Outdoors_3 - .4byte ShowMonEffect_Outdoors_4 - .4byte ShowMonEffect_Outdoors_5 - .4byte ShowMonEffect_Outdoors_6 - .4byte ShowMonEffect_Outdoors_7 - - .align 2 -sShowMonIndoorsEffectFuncs:: @ 83CC138 dataptr - .4byte ShowMonEffect_Indoors_1 - .4byte ShowMonEffect_Indoors_2 - .4byte ShowMonEffect_Indoors_3 - .4byte ShowMonEffect_Indoors_4 - .4byte ShowMonEffect_Indoors_5 - .4byte ShowMonEffect_Indoors_6 - .4byte ShowMonEffect_Indoors_7 - .align 2 sUseSurfEffectFuncs:: @ 83CC154 dataptr .4byte UseSurfEffect_1 diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index aa1bb43ee..c1a4e775e 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -4,6 +4,13 @@ #define OBJECT_EVENTS_COUNT 16 #define METATILE_COLLISION_MASK 0x0C00 +#define METATILE_ID_MASK 0x03FF +#define METATILE_ID_UNDEFINED 0x03FF +#define METATILE_ELEVATION_SHIFT 12 +#define METATILE_COLLISION_SHIFT 10 +#define METATILE_ELEVATION_MASK 0xF000 + +#define METATILE_ID(tileset, name) (METATILE_##tileset##_##name) enum { @@ -17,8 +24,6 @@ enum typedef void (*TilesetCB)(void); -#define METATILE_ID(tileset, name) (METATILE_##tileset##_##name) - struct Tileset { /*0x00*/ bool8 isCompressed; diff --git a/include/overworld.h b/include/overworld.h index 51e94fe63..3b7fd7bc1 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -84,6 +84,7 @@ void sub_8084E80(s8, s8, s8, s8, s8); void sub_8084EBC(s16, s16); void sub_80555E0(void); void copy_saved_warp3_bank_and_enter_x_to_warp1(void); +u8 IsMapTypeOutdoors(u8 mapType); void player_avatar_init_params_reset(void); diff --git a/src/field_effect.c b/src/field_effect.c index 6657265dd..ecdc834ae 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -14,6 +14,7 @@ #include "fieldmap.h" #include "help_system.h" #include "metatile_behavior.h" +#include "new_menu_helpers.h" #include "overworld.h" #include "party_menu.h" #include "quest_log.h" @@ -22,6 +23,7 @@ #include "task.h" #include "trainer_pokemon_sprites.h" #include "trig.h" +#include "util.h" #include "constants/metatile_behaviors.h" #include "constants/songs.h" @@ -57,12 +59,12 @@ const u16 gUnknown_83CAFB0[] = INCBIN_U16("graphics/field_effects/unk_83CAFB0.gb const u16 gUnknown_83CAFD0[] = INCBIN_U16("graphics/field_effects/unk_83CAFD0.4bpp"); const u16 gUnknown_83CB3D0[] = INCBIN_U16("graphics/field_effects/unk_83CB3D0.gbapal"); const u16 gUnknown_83CB3F0[] = INCBIN_U16("graphics/field_effects/unk_83CB3F0.4bpp"); -const u16 gUnknown_83CB5F0[] = INCBIN_U16("graphics/field_effects/unk_83CB5F0.4bpp"); -const u16 gUnknown_83CB7F0[] = INCBIN_U16("graphics/field_effects/unk_83CB7F0.gbapal"); -const u16 gUnknown_83CB810[] = INCBIN_U16("graphics/field_effects/unk_83CB810.bin"); -const u16 gUnknown_83CBA90[] = INCBIN_U16("graphics/field_effects/unk_83CBA90.4bpp"); -const u16 gUnknown_83CBB10[] = INCBIN_U16("graphics/field_effects/unk_83CBB10.gbapal"); -const u16 gUnknown_83CBB30[] = INCBIN_U16("graphics/field_effects/unk_83CBB30.bin"); +const u16 gFieldMoveStreaksTiles[] = INCBIN_U16("graphics/field_effects/unk_83CB5F0.4bpp"); +const u16 gFieldMoveStreaksPalette[] = INCBIN_U16("graphics/field_effects/unk_83CB7F0.gbapal"); +const u16 gFieldMoveStreaksTilemap[] = INCBIN_U16("graphics/field_effects/unk_83CB810.bin"); +const u16 gDarknessFieldMoveStreaksTiles[] = INCBIN_U16("graphics/field_effects/unk_83CBA90.4bpp"); +const u16 gDarknessFieldMoveStreaksPalette[] = INCBIN_U16("graphics/field_effects/unk_83CBB10.gbapal"); +const u16 gDarknessFieldMoveStreaksTilemap[] = INCBIN_U16("graphics/field_effects/unk_83CBB30.bin"); const u16 gUnknown_83CBDB0[] = INCBIN_U16("graphics/field_effects/unk_83CBDB0.4bpp"); bool8 (*const sFldEffScrcmdTable[])(const u8 **script, u32 *result) = { @@ -591,10 +593,10 @@ u8 CreateMonSprite_PicBox(u16 species, s16 x, s16 y, u8 subpriority) return spriteId; } -u8 CreateMonSprite_FieldMove(u16 species, u32 d, u32 g, s16 x, s16 y, u8 subpriority) +u8 CreateMonSprite_FieldMove(u16 species, u32 otId, u32 personality, s16 x, s16 y, u8 subpriority) { - const struct CompressedSpritePalette * spritePalette = GetMonSpritePalStructFromOtIdPersonality(species, d, g); - u16 spriteId = CreateMonPicSprite_HandleDeoxys(species, d, g, 1, x, y, 0, spritePalette->tag); + const struct CompressedSpritePalette * spritePalette = GetMonSpritePalStructFromOtIdPersonality(species, otId, personality); + u16 spriteId = CreateMonPicSprite_HandleDeoxys(species, otId, personality, 1, x, y, 0, spritePalette->tag); PreservePaletteInWeather(IndexOfSpritePaletteTag(spritePalette->tag) + 0x10); if (spriteId == 0xFFFF) return MAX_SPRITES; @@ -1346,9 +1348,9 @@ bool8 EscalatorWarpEffect_6(struct Task * task) } -void Escalator_AnimatePlayerGoingDown(struct Task *task) +void Escalator_AnimatePlayerGoingDown(struct Task * task) { - struct Sprite *sprite; + struct Sprite * sprite; sprite = &gSprites[gPlayerAvatar.spriteId]; sprite->pos2.x = Cos(0x84, task->data[2]); sprite->pos2.y = Sin(0x94, task->data[2]); @@ -1359,9 +1361,9 @@ void Escalator_AnimatePlayerGoingDown(struct Task *task) } } -void Escalator_AnimatePlayerGoingUp(struct Task *task) +void Escalator_AnimatePlayerGoingUp(struct Task * task) { - struct Sprite *sprite; + struct Sprite * sprite; sprite = &gSprites[gPlayerAvatar.spriteId]; sprite->pos2.x = Cos(0x7c, task->data[2]); sprite->pos2.y = Sin(0x76, task->data[2]); @@ -1418,9 +1420,9 @@ void Task_EscalatorWarpInFieldEffect(u8 taskId) ; } -bool8 EscalatorWarpInEffect_1(struct Task *task) +bool8 EscalatorWarpInEffect_1(struct Task * task) { - struct ObjectEvent *objectEvent; + struct ObjectEvent * objectEvent; s16 x; s16 y; u8 behavior; @@ -1443,9 +1445,9 @@ bool8 EscalatorWarpInEffect_1(struct Task *task) return TRUE; } -bool8 EscalatorWarpInEffect_2(struct Task *task) +bool8 EscalatorWarpInEffect_2(struct Task * task) { - struct Sprite *sprite; + struct Sprite * sprite; sprite = &gSprites[gPlayerAvatar.spriteId]; sprite->pos2.x = Cos(0x84, task->data[1]); sprite->pos2.y = Sin(0x94, task->data[1]); @@ -1453,9 +1455,9 @@ bool8 EscalatorWarpInEffect_2(struct Task *task) return FALSE; } -bool8 EscalatorWarpInEffect_3(struct Task *task) +bool8 EscalatorWarpInEffect_3(struct Task * task) { - struct Sprite *sprite; + struct Sprite * sprite; sprite = &gSprites[gPlayerAvatar.spriteId]; sprite->pos2.x = Cos(0x84, task->data[1]); sprite->pos2.y = Sin(0x94, task->data[1]); @@ -1474,9 +1476,9 @@ bool8 EscalatorWarpInEffect_3(struct Task *task) } -bool8 EscalatorWarpInEffect_4(struct Task *task) +bool8 EscalatorWarpInEffect_4(struct Task * task) { - struct Sprite *sprite; + struct Sprite * sprite; sprite = &gSprites[gPlayerAvatar.spriteId]; sprite->pos2.x = Cos(0x7c, task->data[1]); sprite->pos2.y = Sin(0x76, task->data[1]); @@ -1484,9 +1486,9 @@ bool8 EscalatorWarpInEffect_4(struct Task *task) return FALSE; } -bool8 EscalatorWarpInEffect_5(struct Task *task) +bool8 EscalatorWarpInEffect_5(struct Task * task) { - struct Sprite *sprite; + struct Sprite * sprite; sprite = &gSprites[gPlayerAvatar.spriteId]; sprite->pos2.x = Cos(0x7c, task->data[1]); sprite->pos2.y = Sin(0x76, task->data[1]); @@ -1504,7 +1506,7 @@ bool8 EscalatorWarpInEffect_5(struct Task *task) return FALSE; } -bool8 EscalatorWarpInEffect_6(struct Task *task) +bool8 EscalatorWarpInEffect_6(struct Task * task) { if (IsEscalatorMoving()) { @@ -1515,9 +1517,9 @@ bool8 EscalatorWarpInEffect_6(struct Task *task) return TRUE; } -bool8 EscalatorWarpInEffect_7(struct Task *task) +bool8 EscalatorWarpInEffect_7(struct Task * task) { - struct ObjectEvent *objectEvent; + struct ObjectEvent * objectEvent; objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; if (ObjectEventClearHeldMovementIfFinished(objectEvent)) { @@ -1876,13 +1878,13 @@ bool8 LavaridgeGymB1FWarpExitEffect_4(struct Task * task, struct ObjectEvent * o } void Task_LavaridgeGym1FWarp(u8 taskId); -bool8 LavaridgeGym1FWarpEffect_1(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite); -bool8 LavaridgeGym1FWarpEffect_2(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite); -bool8 LavaridgeGym1FWarpEffect_3(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite); -bool8 LavaridgeGym1FWarpEffect_4(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite); -bool8 LavaridgeGym1FWarpEffect_5(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite); +bool8 LavaridgeGym1FWarpEffect_1(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); +bool8 LavaridgeGym1FWarpEffect_2(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); +bool8 LavaridgeGym1FWarpEffect_3(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); +bool8 LavaridgeGym1FWarpEffect_4(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); +bool8 LavaridgeGym1FWarpEffect_5(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); -bool8 (*const sLavaridgeGym1FWarpEffectFuncs[])(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) = { +bool8 (*const sLavaridgeGym1FWarpEffectFuncs[])(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) = { LavaridgeGym1FWarpEffect_1, LavaridgeGym1FWarpEffect_2, LavaridgeGym1FWarpEffect_3, @@ -1901,7 +1903,7 @@ u8 FldEff_LavaridgeGymWarp(void) return spriteId; } -void SpriteCB_LavaridgeGymWarp(struct Sprite *sprite) +void SpriteCB_LavaridgeGymWarp(struct Sprite * sprite) { if (sprite->animEnded) { @@ -1919,7 +1921,7 @@ void Task_LavaridgeGym1FWarp(u8 taskId) while(sLavaridgeGym1FWarpEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId], &gObjectEvents[gPlayerAvatar.objectEventId], &gSprites[gPlayerAvatar.spriteId])); } -bool8 LavaridgeGym1FWarpEffect_1(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) +bool8 LavaridgeGym1FWarpEffect_1(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) { FreezeObjectEvents(); CameraObjectReset2(); @@ -1929,7 +1931,7 @@ bool8 LavaridgeGym1FWarpEffect_1(struct Task *task, struct ObjectEvent *objectEv return FALSE; } -bool8 LavaridgeGym1FWarpEffect_2(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) +bool8 LavaridgeGym1FWarpEffect_2(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) { if (ObjectEventClearHeldMovementIfFinished(objectEvent)) { @@ -1951,7 +1953,7 @@ bool8 LavaridgeGym1FWarpEffect_2(struct Task *task, struct ObjectEvent *objectEv return FALSE; } -bool8 LavaridgeGym1FWarpEffect_3(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) +bool8 LavaridgeGym1FWarpEffect_3(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) { if (gSprites[task->data[1]].animCmdIndex == 2) { @@ -1961,7 +1963,7 @@ bool8 LavaridgeGym1FWarpEffect_3(struct Task *task, struct ObjectEvent *objectEv return FALSE; } -bool8 LavaridgeGym1FWarpEffect_4(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) +bool8 LavaridgeGym1FWarpEffect_4(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) { if (!FieldEffectActiveListContains(FLDEFF_POP_OUT_OF_ASH)) { @@ -1972,7 +1974,7 @@ bool8 LavaridgeGym1FWarpEffect_4(struct Task *task, struct ObjectEvent *objectEv return FALSE; } -bool8 LavaridgeGym1FWarpEffect_5(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) +bool8 LavaridgeGym1FWarpEffect_5(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) { if (!gPaletteFade.active && BGMusicStopped() == TRUE) { @@ -1994,7 +1996,7 @@ u8 FldEff_PopOutOfAsh(void) return spriteId; } -void SpriteCB_PopOutOfAsh(struct Sprite *sprite) +void SpriteCB_PopOutOfAsh(struct Sprite * sprite) { if (sprite->animEnded) { @@ -2240,7 +2242,7 @@ void TeleportInFieldEffectTask1(struct Task * task); void TeleportInFieldEffectTask2(struct Task * task); void TeleportInFieldEffectTask3(struct Task * task); -void (*const sTeleportEffectFuncs[])(struct Task *) = { +void (*const sTeleportEffectFuncs[])(struct Task * ) = { TeleportFieldEffectTask1, TeleportFieldEffectTask2, TeleportFieldEffectTask3, @@ -2257,7 +2259,7 @@ void Task_DoTeleportFieldEffect(u8 taskId) sTeleportEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); } -void TeleportFieldEffectTask1(struct Task *task) +void TeleportFieldEffectTask1(struct Task * task) { ScriptContext2_Enable(); FreezeObjectEvents(); @@ -2266,7 +2268,7 @@ void TeleportFieldEffectTask1(struct Task *task) task->data[0]++; } -void TeleportFieldEffectTask2(struct Task *task) +void TeleportFieldEffectTask2(struct Task * task) { u8 spinDirections[5] = { [DIR_NONE] = DIR_SOUTH, @@ -2275,7 +2277,7 @@ void TeleportFieldEffectTask2(struct Task *task) [DIR_NORTH] = DIR_EAST, [DIR_EAST] = DIR_SOUTH }; - struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + struct ObjectEvent * objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; if (task->data[1] == 0 || (--task->data[1]) == 0) { ObjectEventTurn(objectEvent, spinDirections[objectEvent->facingDirection]); @@ -2292,11 +2294,11 @@ void TeleportFieldEffectTask2(struct Task *task) } } -void TeleportFieldEffectTask3(struct Task *task) +void TeleportFieldEffectTask3(struct Task * task) { u8 spinDirections[5] = {DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH}; - struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; - struct Sprite *sprite = &gSprites[gPlayerAvatar.spriteId]; + struct ObjectEvent * objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + struct Sprite * sprite = &gSprites[gPlayerAvatar.spriteId]; if ((--task->data[1]) <= 0) { task->data[1] = 4; @@ -2320,7 +2322,7 @@ void TeleportFieldEffectTask3(struct Task *task) } } -void TeleportFieldEffectTask4(struct Task *task) +void TeleportFieldEffectTask4(struct Task * task) { if (!gPaletteFade.active) { @@ -2335,7 +2337,7 @@ void TeleportFieldEffectTask4(struct Task *task) } } -void (*const sTeleportInEffectFuncs[])(struct Task *) = { +void (*const sTeleportInEffectFuncs[])(struct Task * ) = { TeleportInFieldEffectTask1, TeleportInFieldEffectTask2, TeleportInFieldEffectTask3 @@ -2359,9 +2361,9 @@ void Task_DoTeleportInFieldEffect(u8 taskId) sTeleportInEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); } -void TeleportInFieldEffectTask1(struct Task *task) +void TeleportInFieldEffectTask1(struct Task * task) { - struct Sprite *sprite; + struct Sprite * sprite; s16 centerToCornerVecY; if (IsWeatherNotFadingIn()) { @@ -2378,11 +2380,11 @@ void TeleportInFieldEffectTask1(struct Task *task) } } -void TeleportInFieldEffectTask2(struct Task *task) +void TeleportInFieldEffectTask2(struct Task * task) { u8 spinDirections[5] = {1, 3, 4, 2, 1}; - struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; - struct Sprite *sprite = &gSprites[gPlayerAvatar.spriteId]; + struct ObjectEvent * objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + struct Sprite * sprite = &gSprites[gPlayerAvatar.spriteId]; if ((sprite->pos2.y += task->data[1]) >= -8) { if (task->data[13] == 0) @@ -2417,10 +2419,10 @@ void TeleportInFieldEffectTask2(struct Task *task) } } -void TeleportInFieldEffectTask3(struct Task *task) +void TeleportInFieldEffectTask3(struct Task * task) { u8 spinDirections[5] = {1, 3, 4, 2, 1}; - struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + struct ObjectEvent * objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; if ((--task->data[1]) == 0) { ObjectEventTurn(objectEvent, spinDirections[objectEvent->facingDirection]); @@ -2434,3 +2436,432 @@ void TeleportInFieldEffectTask3(struct Task *task) } } } + +void Task_ShowMon_Outdoors(u8 taskId); +void ShowMonEffect_Outdoors_1(struct Task * task); +void ShowMonEffect_Outdoors_2(struct Task * task); +void ShowMonEffect_Outdoors_3(struct Task * task); +void ShowMonEffect_Outdoors_4(struct Task * task); +void ShowMonEffect_Outdoors_5(struct Task * task); +void ShowMonEffect_Outdoors_6(struct Task * task); +void ShowMonEffect_Outdoors_7(struct Task * task); +void VBlankCB_ShowMonEffect_Outdoors(void); +void LoadFieldMoveStreaksTilemapToVram(u16 screenbase); +void Task_ShowMon_Indoors(u8 taskId); +void ShowMonEffect_Indoors_1(struct Task * task); +void ShowMonEffect_Indoors_2(struct Task * task); +void ShowMonEffect_Indoors_3(struct Task * task); +void ShowMonEffect_Indoors_4(struct Task * task); +void ShowMonEffect_Indoors_5(struct Task * task); +void ShowMonEffect_Indoors_6(struct Task * task); +void ShowMonEffect_Indoors_7(struct Task * task); +void VBlankCB_ShowMonEffect_Indoors(void); +void sub_8086728(struct Task * task); +bool8 sub_8086738(struct Task * task); +bool8 sub_80867F0(struct Task * task); +u8 sub_8086860(u32 species, u32 otId, u32 personality); +void sub_80868C0(struct Sprite * sprite); +void sub_8086904(struct Sprite * sprite); +void sub_8086920(struct Sprite * sprite); + +void (*const sShowMonOutdoorsEffectFuncs[])(struct Task * task) = { + ShowMonEffect_Outdoors_1, + ShowMonEffect_Outdoors_2, + ShowMonEffect_Outdoors_3, + ShowMonEffect_Outdoors_4, + ShowMonEffect_Outdoors_5, + ShowMonEffect_Outdoors_6, + ShowMonEffect_Outdoors_7 +}; + +u32 FldEff_FieldMoveShowMon(void) +{ + u8 taskId; + if (IsMapTypeOutdoors(GetCurrentMapType()) == TRUE) + taskId = CreateTask(Task_ShowMon_Outdoors, 0xFF); + else + taskId = CreateTask(Task_ShowMon_Indoors, 0xFF); + gTasks[taskId].data[15] = sub_8086860(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + return 0; +} + +u32 FldEff_FieldMoveShowMonInit(void) +{ + u32 r6 = gFieldEffectArguments[0] & 0x80000000; + u8 partyIdx = gFieldEffectArguments[0]; + gFieldEffectArguments[0] = GetMonData(&gPlayerParty[partyIdx], MON_DATA_SPECIES); + gFieldEffectArguments[1] = GetMonData(&gPlayerParty[partyIdx], MON_DATA_OT_ID); + gFieldEffectArguments[2] = GetMonData(&gPlayerParty[partyIdx], MON_DATA_PERSONALITY); + gFieldEffectArguments[0] |= r6; + FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON); + FieldEffectActiveListRemove(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); + return 0; +} + +void Task_ShowMon_Outdoors(u8 taskId) +{ + sShowMonOutdoorsEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); +} + +void ShowMonEffect_Outdoors_1(struct Task * task) +{ + task->data[11] = GetGpuReg(REG_OFFSET_WININ); + task->data[12] = GetGpuReg(REG_OFFSET_WINOUT); + StoreWordInTwoHalfwords((u16*)&task->data[13], (u32)gMain.vblankCallback); + task->data[1] = 0xf0f1; + task->data[2] = 0x5051; + task->data[3] = 0x3f; + task->data[4] = 0x3e; + SetGpuReg(REG_OFFSET_WIN0H, task->data[1]); + SetGpuReg(REG_OFFSET_WIN0V, task->data[2]); + SetGpuReg(REG_OFFSET_WININ, task->data[3]); + SetGpuReg(REG_OFFSET_WINOUT, task->data[4]); + SetVBlankCallback(VBlankCB_ShowMonEffect_Outdoors); + task->data[0]++; +} + +void ShowMonEffect_Outdoors_2(struct Task * task) +{ + u16 charbase = ((GetGpuReg(REG_OFFSET_BG0CNT) >> 2) << 14); + u16 screenbase = ((GetGpuReg(REG_OFFSET_BG0CNT) >> 8) << 11); + CpuCopy16(gFieldMoveStreaksTiles, (void *)(VRAM + charbase), 0x200); + CpuFill32(0, (void *)(VRAM + screenbase), 0x800); + LoadPalette(gFieldMoveStreaksPalette, 0xf0, 0x20); + LoadFieldMoveStreaksTilemapToVram(screenbase); + task->data[0]++; +} + +void ShowMonEffect_Outdoors_3(struct Task * task) +{ + s16 v0; + s16 v2; + s16 v3; + task->data[5] -= 16; + v0 = ((u16)task->data[1] >> 8); + v2 = ((u16)task->data[2] >> 8); + v3 = ((u16)task->data[2] & 0xff); + v0 -= 16; + v2 -= 2; + v3 += 2; + if (v0 < 0) + { + v0 = 0; + } + if (v2 < 0x28) + { + v2 = 0x28; + } + if (v3 > 0x78) + { + v3 = 0x78; + } + task->data[1] = (v0 << 8) | (task->data[1] & 0xff); + task->data[2] = (v2 << 8) | v3; + if (v0 == 0 && v2 == 0x28 && v3 == 0x78) + { + gSprites[task->data[15]].callback = sub_80868C0; + task->data[0]++; + } +} + +void ShowMonEffect_Outdoors_4(struct Task * task) +{ + task->data[5] -= 16; + if (gSprites[task->data[15]].data[7]) + { + task->data[0]++; + } +} + +void ShowMonEffect_Outdoors_5(struct Task * task) +{ + s16 v2; + s16 v3; + task->data[5] -= 16; + v2 = (task->data[2] >> 8); + v3 = (task->data[2] & 0xff); + v2 += 6; + v3 -= 6; + if (v2 > 0x50) + { + v2 = 0x50; + } + if (v3 < 0x51) + { + v3 = 0x51; + } + task->data[2] = (v2 << 8) | v3; + if (v2 == 0x50 && v3 == 0x51) + { + task->data[0]++; + } +} + +void ShowMonEffect_Outdoors_6(struct Task * task) +{ + u16 bg0cnt = (GetGpuReg(REG_OFFSET_BG0CNT) >> 8) << 11; + CpuFill32(0, (void *)VRAM + bg0cnt, 0x800); + task->data[1] = 0xf1; + task->data[2] = 0xa1; + task->data[3] = task->data[11]; + task->data[4] = task->data[12]; + task->data[0]++; +} + +void ShowMonEffect_Outdoors_7(struct Task * task) +{ + IntrCallback callback; + LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&callback); + SetVBlankCallback(callback); + ChangeBgX(0, 0, 0); + ChangeBgY(0, 0, 0); + Menu_LoadStdPal(); + FreeResourcesAndDestroySprite(&gSprites[task->data[15]], task->data[15]); + FieldEffectActiveListRemove(FLDEFF_FIELD_MOVE_SHOW_MON); + DestroyTask(FindTaskIdByFunc(Task_ShowMon_Outdoors)); +} + +void VBlankCB_ShowMonEffect_Outdoors(void) +{ + IntrCallback callback; + struct Task * task = &gTasks[FindTaskIdByFunc(Task_ShowMon_Outdoors)]; + LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&callback); + callback(); + SetGpuReg(REG_OFFSET_WIN0H, task->data[1]); + SetGpuReg(REG_OFFSET_WIN0V, task->data[2]); + SetGpuReg(REG_OFFSET_WININ, task->data[3]); + SetGpuReg(REG_OFFSET_WINOUT, task->data[4]); + SetGpuReg(REG_OFFSET_BG0HOFS, task->data[5]); + SetGpuReg(REG_OFFSET_BG0VOFS, task->data[6]); +} + +void LoadFieldMoveStreaksTilemapToVram(u16 screenbase) +{ + u16 i; + u16 *dest; + dest = (u16 *)(VRAM + (10 * 32) + screenbase); + for (i = 0; i < (10 * 32); i++, dest++) + { + *dest = gFieldMoveStreaksTilemap[i] | METATILE_ELEVATION_MASK; + } +} + +void (*const sShowMonIndoorsEffectFuncs[])(struct Task * ) = { + ShowMonEffect_Indoors_1, + ShowMonEffect_Indoors_2, + ShowMonEffect_Indoors_3, + ShowMonEffect_Indoors_4, + ShowMonEffect_Indoors_5, + ShowMonEffect_Indoors_6, + ShowMonEffect_Indoors_7 +}; + +void Task_ShowMon_Indoors(u8 taskId) +{ + sShowMonIndoorsEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); +} + +void ShowMonEffect_Indoors_1(struct Task * task) +{ + SetGpuReg(REG_OFFSET_BG0HOFS, task->data[1]); + SetGpuReg(REG_OFFSET_BG0VOFS, task->data[2]); + StoreWordInTwoHalfwords((u16 *)&task->data[13], (u32)gMain.vblankCallback); + SetVBlankCallback(VBlankCB_ShowMonEffect_Indoors); + task->data[0]++; +} + +void ShowMonEffect_Indoors_2(struct Task * task) +{ + u16 charbase; + u16 screenbase; + charbase = ((GetGpuReg(REG_OFFSET_BG0CNT) >> 2) << 14); + screenbase = ((GetGpuReg(REG_OFFSET_BG0CNT) >> 8) << 11); + task->data[12] = screenbase; + CpuCopy16(gDarknessFieldMoveStreaksTiles, (void *)(VRAM + charbase), 0x80); + CpuFill32(0, (void *)(VRAM + screenbase), 0x800); + LoadPalette(gDarknessFieldMoveStreaksPalette, 0xf0, 0x20); + task->data[0]++; +} + +void ShowMonEffect_Indoors_3(struct Task * task) +{ + if (sub_8086738(task)) + { + task->data[5] = GetGpuReg(REG_OFFSET_WININ); + SetGpuReg(REG_OFFSET_WININ, (task->data[5] & 0xFF) | 0x1100); + SetGpuReg(REG_OFFSET_WIN1H, 0x00f0); + SetGpuReg(REG_OFFSET_WIN1V, 0x2878); + gSprites[task->data[15]].callback = sub_80868C0; + task->data[0]++; + } + sub_8086728(task); +} + +void ShowMonEffect_Indoors_4(struct Task * task) +{ + sub_8086728(task); + if (gSprites[task->data[15]].data[7]) + { + task->data[0]++; + } +} + +void ShowMonEffect_Indoors_5(struct Task * task) +{ + sub_8086728(task); + task->data[3] = task->data[1] & 7; + task->data[4] = 0; + SetGpuReg(REG_OFFSET_WIN1H, 0xffff); + SetGpuReg(REG_OFFSET_WIN1V, 0xffff); + SetGpuReg(REG_OFFSET_WININ, task->data[5]); + task->data[0]++; +} + +void ShowMonEffect_Indoors_6(struct Task * task) +{ + sub_8086728(task); + if (sub_80867F0(task)) + { + task->data[0]++; + } +} + +void ShowMonEffect_Indoors_7(struct Task * task) +{ + IntrCallback intrCallback; + u16 charbase; + charbase = (GetGpuReg(REG_OFFSET_BG0CNT) >> 8) << 11; + CpuFill32(0, (void *)VRAM + charbase, 0x800); + LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&intrCallback); + SetVBlankCallback(intrCallback); + ChangeBgX(0, 0, 0); + ChangeBgY(0, 0, 0); + Menu_LoadStdPal(); + FreeResourcesAndDestroySprite(&gSprites[task->data[15]], task->data[15]); + FieldEffectActiveListRemove(FLDEFF_FIELD_MOVE_SHOW_MON); + DestroyTask(FindTaskIdByFunc(Task_ShowMon_Indoors)); +} + +void VBlankCB_ShowMonEffect_Indoors(void) +{ + IntrCallback intrCallback; + struct Task * task; + task = &gTasks[FindTaskIdByFunc(Task_ShowMon_Indoors)]; + LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&intrCallback); + intrCallback(); + SetGpuReg(REG_OFFSET_BG0HOFS, task->data[1]); + SetGpuReg(REG_OFFSET_BG0VOFS, task->data[2]); +} + +void sub_8086728(struct Task * task) +{ + task->data[1] -= 16; + task->data[3] += 16; +} + +bool8 sub_8086738(struct Task * task) +{ + u16 i; + u16 srcOffs; + u16 dstOffs; + u16 *dest; + if (task->data[4] >= 32) + { + return TRUE; + } + dstOffs = (task->data[3] >> 3) & 0x1f; + if (dstOffs >= task->data[4]) + { + dstOffs = (32 - dstOffs) & 0x1f; + srcOffs = (32 - task->data[4]) & 0x1f; + dest = (u16 *)(VRAM + 0x140 + (u16)task->data[12]); + for (i = 0; i < 10; i++) + { + dest[dstOffs + i * 32] = gDarknessFieldMoveStreaksTilemap[srcOffs + i * 32]; + dest[dstOffs + i * 32] |= 0xf000; + + dest[((dstOffs + 1) & 0x1f) + i * 32] = gDarknessFieldMoveStreaksTilemap[((srcOffs + 1) & 0x1f) + i * 32] | 0xf000; + dest[((dstOffs + 1) & 0x1f) + i * 32] |= 0xf000; + } + task->data[4] += 2; + } + return FALSE; +} + +bool8 sub_80867F0(struct Task * task) +{ + u16 i; + u16 dstOffs; + u16 *dest; + if (task->data[4] >= 32) + { + return TRUE; + } + dstOffs = task->data[3] >> 3; + if (dstOffs >= task->data[4]) + { + dstOffs = (task->data[1] >> 3) & 0x1f; + dest = (u16 *)(VRAM + 0x140 + (u16)task->data[12]); + for (i = 0; i < 10; i++) + { + dest[dstOffs + i * 32] = 0xf000; + dest[((dstOffs + 1) & 0x1f) + i * 32] = 0xf000; + } + task->data[4] += 2; + } + return FALSE; +} + +u8 sub_8086860(u32 species, u32 otId, u32 personality) +{ + bool16 playCry; + u8 monSprite; + struct Sprite * sprite; + playCry = (species & 0x80000000) >> 16; + species &= 0x7fffffff; + monSprite = CreateMonSprite_FieldMove(species, otId, personality, 0x140, 0x50, 0); + sprite = &gSprites[monSprite]; + sprite->callback = SpriteCallbackDummy; + sprite->oam.priority = 0; + sprite->data[0] = species; + sprite->data[6] = playCry; + return monSprite; +} + +void sub_80868C0(struct Sprite * sprite) +{ + if ((sprite->pos1.x -= 20) <= 0x78) + { + sprite->pos1.x = 0x78; + sprite->data[1] = 30; + sprite->callback = sub_8086904; + if (sprite->data[6]) + { + PlayCry2(sprite->data[0], 0, 0x7d, 0xa); + } + else + { + PlayCry1(sprite->data[0], 0); + } + } +} + +void sub_8086904(struct Sprite * sprite) +{ + if ((--sprite->data[1]) == 0) + { + sprite->callback = sub_8086920; + } +} + +void sub_8086920(struct Sprite * sprite) +{ + if (sprite->pos1.x < -0x40) + { + sprite->data[7] = 1; + } + else + { + sprite->pos1.x -= 20; + } +} From 80e5031619f388ba3274ca573e58451cb443d54b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 28 Feb 2020 15:29:16 -0500 Subject: [PATCH 16/26] Use Surf field effect --- asm/field_effect.s | 292 ---------------------- data/field_effect.s | 8 - include/constants/event_object_movement.h | 2 +- include/event_object_movement.h | 1 + include/overworld.h | 2 + src/field_effect.c | 102 ++++++++ src/fldeff_rocksmash.c | 2 +- 7 files changed, 107 insertions(+), 302 deletions(-) diff --git a/asm/field_effect.s b/asm/field_effect.s index de72a2657..8fc5386b9 100644 --- a/asm/field_effect.s +++ b/asm/field_effect.s @@ -5,298 +5,6 @@ .text - thumb_func_start FldEff_UseSurf -FldEff_UseSurf: @ 8086944 - push {r4,lr} - ldr r0, _08086980 @ =Task_FldEffUseSurf - movs r1, 0xFF - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08086984 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldr r0, _08086988 @ =gFieldEffectArguments - ldr r0, [r0] - strh r0, [r1, 0x26] - bl sav1_reset_battle_music_maybe - ldr r4, _0808698C @ =0x00000131 @MUS_NAMINORI - adds r0, r4, 0 - bl sub_8056124 - cmp r0, 0 - beq _08086978 - adds r0, r4, 0 - bl Overworld_ChangeMusicTo -_08086978: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08086980: .4byte Task_FldEffUseSurf -_08086984: .4byte gTasks -_08086988: .4byte gFieldEffectArguments -_0808698C: .4byte 0x00000131 @MUS_NAMINORI - thumb_func_end FldEff_UseSurf - - thumb_func_start Task_FldEffUseSurf -Task_FldEffUseSurf: @ 8086990 - push {lr} - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - ldr r3, _080869B8 @ =sUseSurfEffectFuncs - ldr r2, _080869BC @ =gTasks - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - movs r2, 0x8 - ldrsh r1, [r0, r2] - lsls r1, 2 - adds r1, r3 - ldr r1, [r1] - bl _call_via_r1 - pop {r0} - bx r0 - .align 2, 0 -_080869B8: .4byte sUseSurfEffectFuncs -_080869BC: .4byte gTasks - thumb_func_end Task_FldEffUseSurf - - thumb_func_start UseSurfEffect_1 -UseSurfEffect_1: @ 80869C0 - push {r4-r6,lr} - mov r6, r8 - push {r6} - adds r4, r0, 0 - bl ScriptContext2_Enable - bl FreezeObjectEvents - ldr r5, _08086A18 @ =gPlayerAvatar - movs r0, 0x1 - strb r0, [r5, 0x6] - movs r0, 0x8 - bl SetPlayerAvatarStateMask - adds r6, r4, 0 - adds r6, 0xA - movs r0, 0xC - adds r0, r4 - mov r8, r0 - adds r0, r6, 0 - mov r1, r8 - bl PlayerGetDestCoords - ldr r2, _08086A1C @ =gObjectEvents - ldrb r1, [r5, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0, 0x18] - lsrs r0, 4 - adds r1, r6, 0 - mov r2, r8 - bl MoveCoords - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08086A18: .4byte gPlayerAvatar -_08086A1C: .4byte gObjectEvents - thumb_func_end UseSurfEffect_1 - - thumb_func_start UseSurfEffect_2 -UseSurfEffect_2: @ 8086A20 - push {r4,r5,lr} - adds r5, r0, 0 - ldr r0, _08086A64 @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08086A68 @ =gObjectEvents - adds r4, r0, r1 - adds r0, r4, 0 - bl ObjectEventIsMovementOverridden - lsls r0, 24 - cmp r0, 0 - beq _08086A4A - adds r0, r4, 0 - bl ObjectEventClearHeldMovementIfFinished - lsls r0, 24 - cmp r0, 0 - beq _08086A5C -_08086A4A: - bl sub_805CB70 - adds r0, r4, 0 - movs r1, 0x45 - bl ObjectEventSetHeldMovement - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] -_08086A5C: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08086A64: .4byte gPlayerAvatar -_08086A68: .4byte gObjectEvents - thumb_func_end UseSurfEffect_2 - - thumb_func_start UseSurfEffect_3 -UseSurfEffect_3: @ 8086A6C - push {r4,lr} - adds r4, r0, 0 - ldr r0, _08086AA8 @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08086AAC @ =gObjectEvents - adds r0, r1 - bl ObjectEventCheckHeldMovementStatus - lsls r0, 24 - cmp r0, 0 - beq _08086AA2 - ldr r2, _08086AB0 @ =gFieldEffectArguments - movs r1, 0x26 - ldrsh r0, [r4, r1] - movs r1, 0x80 - lsls r1, 24 - orrs r0, r1 - str r0, [r2] - movs r0, 0x3B - bl FieldEffectStart - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_08086AA2: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08086AA8: .4byte gPlayerAvatar -_08086AAC: .4byte gObjectEvents -_08086AB0: .4byte gFieldEffectArguments - thumb_func_end UseSurfEffect_3 - - thumb_func_start UseSurfEffect_4 -UseSurfEffect_4: @ 8086AB4 - push {r4-r6,lr} - adds r6, r0, 0 - movs r0, 0x6 - bl FieldEffectActiveListContains - lsls r0, 24 - cmp r0, 0 - bne _08086B1E - ldr r5, _08086B24 @ =gPlayerAvatar - ldrb r0, [r5, 0x5] - lsls r4, r0, 3 - adds r4, r0 - lsls r4, 2 - ldr r0, _08086B28 @ =gObjectEvents - adds r4, r0 - movs r0, 0x2 - bl GetPlayerAvatarGraphicsIdByStateId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl ObjectEventSetGraphicsId - adds r0, r4, 0 - bl ObjectEventClearHeldMovementIfFinished - ldrb r0, [r4, 0x18] - lsrs r0, 4 - bl sub_80641C0 - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl ObjectEventSetHeldMovement - ldr r1, _08086B2C @ =gFieldEffectArguments - movs r2, 0xA - ldrsh r0, [r6, r2] - str r0, [r1] - movs r2, 0xC - ldrsh r0, [r6, r2] - str r0, [r1, 0x4] - ldrb r0, [r5, 0x5] - str r0, [r1, 0x8] - movs r0, 0x8 - bl FieldEffectStart - strb r0, [r4, 0x1A] - ldrh r0, [r6, 0x8] - adds r0, 0x1 - strh r0, [r6, 0x8] -_08086B1E: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08086B24: .4byte gPlayerAvatar -_08086B28: .4byte gObjectEvents -_08086B2C: .4byte gFieldEffectArguments - thumb_func_end UseSurfEffect_4 - - thumb_func_start UseSurfEffect_5 -UseSurfEffect_5: @ 8086B30 - push {r4,r5,lr} - ldr r5, _08086B9C @ =gPlayerAvatar - ldrb r1, [r5, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08086BA0 @ =gObjectEvents - adds r4, r0, r1 - adds r0, r4, 0 - bl ObjectEventClearHeldMovementIfFinished - lsls r0, 24 - cmp r0, 0 - beq _08086B96 - movs r0, 0 - strb r0, [r5, 0x6] - ldrb r1, [r5] - movs r0, 0xDF - ands r0, r1 - strb r0, [r5] - ldrb r0, [r4, 0x18] - lsrs r0, 4 - bl GetFaceDirectionMovementAction - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl ObjectEventSetHeldMovement - ldrb r0, [r4, 0x1A] - movs r1, 0x1 - bl sub_80DC44C - bl UnfreezeObjectEvents - bl ScriptContext2_Disable - movs r0, 0x9 - bl FieldEffectActiveListRemove - ldr r0, _08086BA4 @ =Task_FldEffUseSurf - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - movs r0, 0x16 - bl HelpSystem_SetSomeVariable2 -_08086B96: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08086B9C: .4byte gPlayerAvatar -_08086BA0: .4byte gObjectEvents -_08086BA4: .4byte Task_FldEffUseSurf - thumb_func_end UseSurfEffect_5 - thumb_func_start FldEff_Unk41 FldEff_Unk41: @ 8086BA8 push {lr} diff --git a/data/field_effect.s b/data/field_effect.s index 004dd555a..c24b7d3f6 100644 --- a/data/field_effect.s +++ b/data/field_effect.s @@ -6,14 +6,6 @@ .section .rodata .align 2 - .align 2 -sUseSurfEffectFuncs:: @ 83CC154 dataptr - .4byte UseSurfEffect_1 - .4byte UseSurfEffect_2 - .4byte UseSurfEffect_3 - .4byte UseSurfEffect_4 - .4byte UseSurfEffect_5 - .align 2 sUnk41EffectFuncs:: @ 83CC168 dataptr .4byte Unk41Effect_1 diff --git a/include/constants/event_object_movement.h b/include/constants/event_object_movement.h index 08713a602..d2f0a945b 100644 --- a/include/constants/event_object_movement.h +++ b/include/constants/event_object_movement.h @@ -153,7 +153,7 @@ #define MOVEMENT_ACTION_PLAYER_RUN_UP_SLOW 0x42 #define MOVEMENT_ACTION_PLAYER_RUN_LEFT_SLOW 0x43 #define MOVEMENT_ACTION_PLAYER_RUN_RIGHT_SLOW 0x44 -#define MOVEMENT_ACTION_UNKNOWN_STEP_45 0x45 +#define MOVEMENT_ACTION_START_ANIM_IN_DIRECTION 0x45 #define MOVEMENT_ACTION_JUMP_SPECIAL_DOWN 0x46 #define MOVEMENT_ACTION_JUMP_SPECIAL_UP 0x47 #define MOVEMENT_ACTION_JUMP_SPECIAL_LEFT 0x48 diff --git a/include/event_object_movement.h b/include/event_object_movement.h index 29254ec5d..1e63727fb 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -118,6 +118,7 @@ void RfuUnionObjectStartWarp(u8 objectEventId, u8 animNo); bool32 RfuUnionObjectIsWarping(u8 objectEventId); u8 sub_8063F2C(u8 direction); u8 sub_8064194(u8 direction); +u8 sub_80641C0(u8 direction); void sub_805F378(s16 x, s16 y); diff --git a/include/overworld.h b/include/overworld.h index 3b7fd7bc1..4fceee38b 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -85,6 +85,8 @@ void sub_8084EBC(s16, s16); void sub_80555E0(void); void copy_saved_warp3_bank_and_enter_x_to_warp1(void); u8 IsMapTypeOutdoors(u8 mapType); +void sav1_reset_battle_music_maybe(void); +bool32 sub_8056124(u16 song); void player_avatar_init_params_reset(void); diff --git a/src/field_effect.c b/src/field_effect.c index ecdc834ae..9695e4900 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -7,6 +7,7 @@ #include "field_camera.h" #include "field_control_avatar.h" #include "field_effect.h" +#include "field_effect_helpers.h" #include "field_effect_scripts.h" #include "field_fadetransition.h" #include "field_player_avatar.h" @@ -24,6 +25,7 @@ #include "trainer_pokemon_sprites.h" #include "trig.h" #include "util.h" +#include "constants/event_object_movement.h" #include "constants/metatile_behaviors.h" #include "constants/songs.h" @@ -2865,3 +2867,103 @@ void sub_8086920(struct Sprite * sprite) sprite->pos1.x -= 20; } } + +void Task_FldEffUseSurf(u8 taskId); +void UseSurfEffect_1(struct Task * task); +void UseSurfEffect_2(struct Task * task); +void UseSurfEffect_3(struct Task * task); +void UseSurfEffect_4(struct Task * task); +void UseSurfEffect_5(struct Task * task); + +void (*const sUseSurfEffectFuncs[])(struct Task * ) = { + UseSurfEffect_1, + UseSurfEffect_2, + UseSurfEffect_3, + UseSurfEffect_4, + UseSurfEffect_5, +}; + +u8 FldEff_UseSurf(void) +{ + u8 taskId = CreateTask(Task_FldEffUseSurf, 0xff); + gTasks[taskId].data[15] = gFieldEffectArguments[0]; + sav1_reset_battle_music_maybe(); + if (sub_8056124(MUS_NAMINORI)) + Overworld_ChangeMusicTo(MUS_NAMINORI); + return FALSE; +} + +void Task_FldEffUseSurf(u8 taskId) +{ + sUseSurfEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); +} + +void UseSurfEffect_1(struct Task * task) +{ + ScriptContext2_Enable(); + FreezeObjectEvents(); + gPlayerAvatar.preventStep = TRUE; + SetPlayerAvatarStateMask(8); + PlayerGetDestCoords(&task->data[1], &task->data[2]); + MoveCoords(gObjectEvents[gPlayerAvatar.objectEventId].placeholder18, &task->data[1], &task->data[2]); + task->data[0]++; +} + +void UseSurfEffect_2(struct Task * task) +{ + struct ObjectEvent * objectEvent; + objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + if (!ObjectEventIsMovementOverridden(objectEvent) || ObjectEventClearHeldMovementIfFinished(objectEvent)) + { + sub_805CB70(); + ObjectEventSetHeldMovement(objectEvent, MOVEMENT_ACTION_START_ANIM_IN_DIRECTION); + task->data[0]++; + } +} + +void UseSurfEffect_3(struct Task * task) +{ + struct ObjectEvent * objectEvent; + objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + if (ObjectEventCheckHeldMovementStatus(objectEvent)) + { + gFieldEffectArguments[0] = task->data[15] | 0x80000000; + FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); + task->data[0]++; + } +} + +void UseSurfEffect_4(struct Task * task) +{ + struct ObjectEvent * objectEvent; + if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON)) + { + objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(2)); + ObjectEventClearHeldMovementIfFinished(objectEvent); + ObjectEventSetHeldMovement(objectEvent, sub_80641C0(objectEvent->placeholder18)); + gFieldEffectArguments[0] = task->data[1]; + gFieldEffectArguments[1] = task->data[2]; + gFieldEffectArguments[2] = gPlayerAvatar.objectEventId; + objectEvent->mapobj_unk_1A = FieldEffectStart(FLDEFF_SURF_BLOB); + task->data[0]++; + } +} + +void UseSurfEffect_5(struct Task * task) +{ + struct ObjectEvent * objectEvent; + objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + if (ObjectEventClearHeldMovementIfFinished(objectEvent)) + { + gPlayerAvatar.preventStep = FALSE; + gPlayerAvatar.flags &= 0xdf; + ObjectEventSetHeldMovement(objectEvent, GetFaceDirectionMovementAction(objectEvent->placeholder18)); + sub_80DC44C(objectEvent->mapobj_unk_1A, 1); + UnfreezeObjectEvents(); + ScriptContext2_Disable(); + FieldEffectActiveListRemove(FLDEFF_USE_SURF); + DestroyTask(FindTaskIdByFunc(Task_FldEffUseSurf)); + HelpSystem_SetSomeVariable2(22); + } +} diff --git a/src/fldeff_rocksmash.c b/src/fldeff_rocksmash.c index 7ea18f40f..dc372ce18 100644 --- a/src/fldeff_rocksmash.c +++ b/src/fldeff_rocksmash.c @@ -62,7 +62,7 @@ static void Task_FieldEffectShowMon_Init(u8 taskId) else { sub_805CB70(); - ObjectEventSetHeldMovement(&gObjectEvents[mapObjId], MOVEMENT_ACTION_UNKNOWN_STEP_45); + ObjectEventSetHeldMovement(&gObjectEvents[mapObjId], MOVEMENT_ACTION_START_ANIM_IN_DIRECTION); gTasks[taskId].func = Task_FieldEffectShowMon_WaitPlayerAnim; } } From f8251866551143e2febe55fe47e92f7c826696b3 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 28 Feb 2020 15:55:12 -0500 Subject: [PATCH 17/26] Use VS Seeker field effect --- asm/field_effect.s | 282 +++++------------------------- data/field_effect.s | 27 ++- data/field_effect_scripts.s | 8 +- include/constants/field_effects.h | 2 +- include/field_player_avatar.h | 1 + include/quest_log.h | 1 + src/field_effect.c | 72 ++++++++ src/quest_log_player.c | 4 +- src/vs_seeker.c | 4 +- 9 files changed, 132 insertions(+), 269 deletions(-) diff --git a/asm/field_effect.s b/asm/field_effect.s index 8fc5386b9..370016f84 100644 --- a/asm/field_effect.s +++ b/asm/field_effect.s @@ -5,212 +5,8 @@ .text - thumb_func_start FldEff_Unk41 -FldEff_Unk41: @ 8086BA8 - push {lr} - ldr r0, _08086BC8 @ =gQuestLogState - ldrb r0, [r0] - cmp r0, 0x1 - bne _08086BBA - movs r0, 0x8 - movs r1, 0x59 - bl sub_811278C -_08086BBA: - ldr r0, _08086BCC @ =Task_FldEffUnk41 - movs r1, 0xFF - bl CreateTask - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_08086BC8: .4byte gQuestLogState -_08086BCC: .4byte Task_FldEffUnk41 - thumb_func_end FldEff_Unk41 - - thumb_func_start Task_FldEffUnk41 -Task_FldEffUnk41: @ 8086BD0 - push {lr} - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - ldr r3, _08086BF8 @ =sUnk41EffectFuncs - ldr r2, _08086BFC @ =gTasks - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - movs r2, 0x8 - ldrsh r1, [r0, r2] - lsls r1, 2 - adds r1, r3 - ldr r1, [r1] - bl _call_via_r1 - pop {r0} - bx r0 - .align 2, 0 -_08086BF8: .4byte sUnk41EffectFuncs -_08086BFC: .4byte gTasks - thumb_func_end Task_FldEffUnk41 - - thumb_func_start Unk41Effect_1 -Unk41Effect_1: @ 8086C00 - push {r4,lr} - adds r4, r0, 0 - bl ScriptContext2_Enable - bl FreezeObjectEvents - ldr r1, _08086C20 @ =gPlayerAvatar - movs r0, 0x1 - strb r0, [r1, 0x6] - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08086C20: .4byte gPlayerAvatar - thumb_func_end Unk41Effect_1 - - thumb_func_start Unk41Effect_2 -Unk41Effect_2: @ 8086C24 - push {r4,r5,lr} - adds r5, r0, 0 - ldr r0, _08086C68 @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08086C6C @ =gObjectEvents - adds r4, r0, r1 - adds r0, r4, 0 - bl ObjectEventIsMovementOverridden - lsls r0, 24 - cmp r0, 0 - beq _08086C4E - adds r0, r4, 0 - bl ObjectEventClearHeldMovementIfFinished - lsls r0, 24 - cmp r0, 0 - beq _08086C60 -_08086C4E: - bl sub_805CBE8 - adds r0, r4, 0 - movs r1, 0x45 - bl ObjectEventSetHeldMovement - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] -_08086C60: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08086C68: .4byte gPlayerAvatar -_08086C6C: .4byte gObjectEvents - thumb_func_end Unk41Effect_2 - - thumb_func_start Unk41Effect_3 -Unk41Effect_3: @ 8086C70 - push {r4-r6,lr} - adds r6, r0, 0 - ldr r5, _08086C9C @ =gPlayerAvatar - ldrb r1, [r5, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08086CA0 @ =gObjectEvents - adds r4, r0, r1 - adds r0, r4, 0 - bl ObjectEventClearHeldMovementIfFinished - lsls r0, 24 - cmp r0, 0 - beq _08086CEE - ldrb r1, [r5] - movs r0, 0x6 - ands r0, r1 - cmp r0, 0 - beq _08086CA4 - movs r0, 0x1 - b _08086CAE - .align 2, 0 -_08086C9C: .4byte gPlayerAvatar -_08086CA0: .4byte gObjectEvents -_08086CA4: - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _08086CC0 - movs r0, 0x2 -_08086CAE: - bl GetPlayerAvatarGraphicsIdByStateId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl ObjectEventSetGraphicsId - b _08086CD2 -_08086CC0: - movs r0, 0 - bl GetPlayerAvatarGraphicsIdByStateId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl ObjectEventSetGraphicsId -_08086CD2: - ldrb r0, [r4, 0x18] - lsls r0, 28 - lsrs r0, 28 - bl GetFaceDirectionMovementAction - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl ObjectEventForceSetSpecialAnim - ldrh r0, [r6, 0x8] - adds r0, 0x1 - strh r0, [r6, 0x8] -_08086CEE: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end Unk41Effect_3 - - thumb_func_start Unk41Effect_4 -Unk41Effect_4: @ 8086CF4 - push {r4,lr} - ldr r4, _08086D2C @ =gPlayerAvatar - ldrb r1, [r4, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08086D30 @ =gObjectEvents - adds r0, r1 - bl ObjectEventClearHeldMovementIfFinished - lsls r0, 24 - cmp r0, 0 - beq _08086D26 - movs r0, 0 - strb r0, [r4, 0x6] - movs r0, 0x41 - bl FieldEffectActiveListRemove - ldr r0, _08086D34 @ =Task_FldEffUnk41 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_08086D26: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08086D2C: .4byte gPlayerAvatar -_08086D30: .4byte gObjectEvents -_08086D34: .4byte Task_FldEffUnk41 - thumb_func_end Unk41Effect_4 - - thumb_func_start sub_8086D38 -sub_8086D38: @ 8086D38 + thumb_func_start FldEff_NpcFlyOut +FldEff_NpcFlyOut: @ 8086D38 push {r4,lr} ldr r0, _08086D84 @ =gFieldEffectObjectTemplatePointers ldr r0, [r0, 0x68] @@ -251,7 +47,7 @@ _08086D84: .4byte gFieldEffectObjectTemplatePointers _08086D88: .4byte gSprites _08086D8C: .4byte sub_8086D94 _08086D90: .4byte gFieldEffectArguments - thumb_func_end sub_8086D38 + thumb_func_end FldEff_NpcFlyOut thumb_func_start sub_8086D94 sub_8086D94: @ 8086D94 @@ -321,7 +117,7 @@ _08086E0C: .4byte gSprites thumb_func_start FldEff_UseFly FldEff_UseFly: @ 8086E10 push {lr} - ldr r0, _08086E34 @ =sub_8086E40 + ldr r0, _08086E34 @ =Task_UseFly movs r1, 0xFE bl CreateTask lsls r0, 24 @@ -338,18 +134,18 @@ FldEff_UseFly: @ 8086E10 pop {r1} bx r1 .align 2, 0 -_08086E34: .4byte sub_8086E40 +_08086E34: .4byte Task_UseFly _08086E38: .4byte gTasks _08086E3C: .4byte gFieldEffectArguments thumb_func_end FldEff_UseFly - thumb_func_start sub_8086E40 -sub_8086E40: @ 8086E40 + thumb_func_start Task_UseFly +Task_UseFly: @ 8086E40 push {lr} adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 - ldr r3, _08086E68 @ =gUnknown_83CC178 + ldr r3, _08086E68 @ =sUseFlyEffectFuncs ldr r2, _08086E6C @ =gTasks lsls r0, r1, 2 adds r0, r1 @@ -364,12 +160,12 @@ sub_8086E40: @ 8086E40 pop {r0} bx r0 .align 2, 0 -_08086E68: .4byte gUnknown_83CC178 +_08086E68: .4byte sUseFlyEffectFuncs _08086E6C: .4byte gTasks - thumb_func_end sub_8086E40 + thumb_func_end Task_UseFly - thumb_func_start sub_8086E70 -sub_8086E70: @ 8086E70 + thumb_func_start UseFlyEffect_1 +UseFlyEffect_1: @ 8086E70 push {r4-r6,lr} adds r5, r0, 0 ldr r6, _08086EC0 @ =gPlayerAvatar @@ -409,10 +205,10 @@ _08086EB8: .align 2, 0 _08086EC0: .4byte gPlayerAvatar _08086EC4: .4byte gObjectEvents - thumb_func_end sub_8086E70 + thumb_func_end UseFlyEffect_1 - thumb_func_start sub_8086EC8 -sub_8086EC8: @ 8086EC8 + thumb_func_start UseFlyEffect_2 +UseFlyEffect_2: @ 8086EC8 push {r4,lr} adds r4, r0, 0 ldr r0, _08086F00 @ =gPlayerAvatar @@ -443,10 +239,10 @@ _08086EF8: _08086F00: .4byte gPlayerAvatar _08086F04: .4byte gObjectEvents _08086F08: .4byte gFieldEffectArguments - thumb_func_end sub_8086EC8 + thumb_func_end UseFlyEffect_2 - thumb_func_start sub_8086F0C -sub_8086F0C: @ 8086F0C + thumb_func_start UseFlyEffect_3 +UseFlyEffect_3: @ 8086F0C push {r4,r5,lr} adds r4, r0, 0 movs r0, 0x6 @@ -487,10 +283,10 @@ _08086F54: .align 2, 0 _08086F5C: .4byte gPlayerAvatar _08086F60: .4byte gObjectEvents - thumb_func_end sub_8086F0C + thumb_func_end UseFlyEffect_3 - thumb_func_start sub_8086F64 -sub_8086F64: @ 8086F64 + thumb_func_start UseFlyEffect_4 +UseFlyEffect_4: @ 8086F64 push {r4,lr} adds r4, r0, 0 ldrb r0, [r4, 0xA] @@ -521,10 +317,10 @@ _08086F98: .align 2, 0 _08086FA0: .4byte gPlayerAvatar _08086FA4: .4byte gObjectEvents - thumb_func_end sub_8086F64 + thumb_func_end UseFlyEffect_4 - thumb_func_start sub_8086FA8 -sub_8086FA8: @ 8086FA8 + thumb_func_start UseFlyEffect_5 +UseFlyEffect_5: @ 8086FA8 push {r4,lr} adds r4, r0, 0 ldr r0, _08086FF4 @ =gPlayerAvatar @@ -564,10 +360,10 @@ _08086FEC: .align 2, 0 _08086FF4: .4byte gPlayerAvatar _08086FF8: .4byte gObjectEvents - thumb_func_end sub_8086FA8 + thumb_func_end UseFlyEffect_5 - thumb_func_start sub_8086FFC -sub_8086FFC: @ 8086FFC + thumb_func_start UseFlyEffect_6 +UseFlyEffect_6: @ 8086FFC push {r4,r5,lr} adds r5, r0, 0 ldrh r0, [r5, 0xC] @@ -619,10 +415,10 @@ _0808705A: _08087060: .4byte gPlayerAvatar _08087064: .4byte gObjectEvents _08087068: .4byte gSprites - thumb_func_end sub_8086FFC + thumb_func_end UseFlyEffect_6 - thumb_func_start sub_808706C -sub_808706C: @ 808706C + thumb_func_start UseFlyEffect_7 +UseFlyEffect_7: @ 808706C push {r4,r5,lr} adds r5, r0, 0 ldrh r0, [r5, 0xC] @@ -700,10 +496,10 @@ _08087108: .4byte gObjectEvents _0808710C: .4byte gSprites _08087110: .4byte gSaveBlock2Ptr _08087114: .4byte sub_8087828 - thumb_func_end sub_808706C + thumb_func_end UseFlyEffect_7 - thumb_func_start sub_8087118 -sub_8087118: @ 8087118 + thumb_func_start UseFlyEffect_8 +UseFlyEffect_8: @ 8087118 push {r4,lr} adds r4, r0, 0 ldrb r0, [r4, 0xA] @@ -719,10 +515,10 @@ _08087132: pop {r4} pop {r0} bx r0 - thumb_func_end sub_8087118 + thumb_func_end UseFlyEffect_8 - thumb_func_start sub_8087138 -sub_8087138: @ 8087138 + thumb_func_start UseFlyEffect_9 +UseFlyEffect_9: @ 8087138 push {lr} ldr r0, _08087160 @ =gPaletteFade ldrb r1, [r0, 0x7] @@ -732,7 +528,7 @@ sub_8087138: @ 8087138 bne _0808715A movs r0, 0x1F bl FieldEffectActiveListRemove - ldr r0, _08087164 @ =sub_8086E40 + ldr r0, _08087164 @ =Task_UseFly bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 @@ -742,8 +538,8 @@ _0808715A: bx r0 .align 2, 0 _08087160: .4byte gPaletteFade -_08087164: .4byte sub_8086E40 - thumb_func_end sub_8087138 +_08087164: .4byte Task_UseFly + thumb_func_end UseFlyEffect_9 thumb_func_start sub_8087168 sub_8087168: @ 8087168 diff --git a/data/field_effect.s b/data/field_effect.s index c24b7d3f6..63142e981 100644 --- a/data/field_effect.s +++ b/data/field_effect.s @@ -6,23 +6,16 @@ .section .rodata .align 2 - .align 2 -sUnk41EffectFuncs:: @ 83CC168 dataptr - .4byte Unk41Effect_1 - .4byte Unk41Effect_2 - .4byte Unk41Effect_3 - .4byte Unk41Effect_4 - -gUnknown_83CC178:: @ 83CC178 dataptr (incomplete) - .4byte sub_8086E70 - .4byte sub_8086EC8 - .4byte sub_8086F0C - .4byte sub_8086F64 - .4byte sub_8086FA8 - .4byte sub_8086FFC - .4byte sub_808706C - .4byte sub_8087118 - .4byte sub_8087138 +sUseFlyEffectFuncs:: @ 83CC178 dataptr (incomplete) + .4byte UseFlyEffect_1 + .4byte UseFlyEffect_2 + .4byte UseFlyEffect_3 + .4byte UseFlyEffect_4 + .4byte UseFlyEffect_5 + .4byte UseFlyEffect_6 + .4byte UseFlyEffect_7 + .4byte UseFlyEffect_8 + .4byte UseFlyEffect_9 gUnknown_83CC19C:: @ 83CC19C affineanimcmd obj_rot_scal_anim_frame 8, 8, 226, 0 diff --git a/data/field_effect_scripts.s b/data/field_effect_scripts.s index 0f8295871..3b30c8878 100644 --- a/data/field_effect_scripts.s +++ b/data/field_effect_scripts.s @@ -67,7 +67,7 @@ gFieldEffectScriptPointers:: @ 81D96AC .4byte gFldEffScript_HallOfFameRecord .4byte gFldEffScript_UseTeleport .4byte gFldEffScript_SmileyFaceIcon - .4byte gFldEffScript_Unk41 + .4byte gFldEffScript_UseVsSeeker .4byte gFldEffScript_DoubleExclMarkIcon .4byte gFldEffScript_Unk43 .4byte gFldEffScript_Unk44 @@ -192,7 +192,7 @@ gFldEffScript_MountainDisguise:: @ 81D98AC end gFldEffScript_NpcflyOut:: @ 81D98B2 - callnative sub_8086D38 + callnative FldEff_NpcFlyOut end gFldEffScript_UseFly:: @ 81D98B8 @@ -325,8 +325,8 @@ gFldEffScript_SmileyFaceIcon:: @ 81D998C callnative FldEff_SmileyFaceIcon end -gFldEffScript_Unk41:: @ 81D9992 - callnative FldEff_Unk41 +gFldEffScript_UseVsSeeker:: @ 81D9992 + callnative FldEff_UseVsSeeker end gFldEffScript_DoubleExclMarkIcon:: @ 81D9998 diff --git a/include/constants/field_effects.h b/include/constants/field_effects.h index c56c97d73..80240adc6 100644 --- a/include/constants/field_effects.h +++ b/include/constants/field_effects.h @@ -66,7 +66,7 @@ #define FLDEFF_HALL_OF_FAME_RECORD 62 #define FLDEFF_USE_TELEPORT 63 #define FLDEFF_SMILEY_FACE_ICON 64 -#define FLDEFF_UNK_41 65 // TODO: related to vs_seeker +#define FLDEFF_USE_VS_SEEKER 65 // TODO: related to vs_seeker #define FLDEFF_DOUBLE_EXCL_MARK_ICON 66 #define FLDEFF_UNK_43 67 // TODO: related to deoxys #define FLDEFF_UNK_44 68 // TODO: related to ??? diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h index e9553025c..5565fb64b 100644 --- a/include/field_player_avatar.h +++ b/include/field_player_avatar.h @@ -36,5 +36,6 @@ bool32 sub_805DC24(void); bool8 PartyHasMonWithSurf(void); bool8 IsPlayerSurfingNorth(void); void player_get_pos_including_state_based_drift(s16 *x, s16 *y); +void sub_805CBE8(void); #endif //GUARD_FIELD_PLAYER_AVATAR_H diff --git a/include/quest_log.h b/include/quest_log.h index 016a94267..6cee34bbb 100644 --- a/include/quest_log.h +++ b/include/quest_log.h @@ -51,5 +51,6 @@ void sub_8110840(void *oldSave); void sub_8112F18(u8 windowId); bool8 sub_8111C2C(void); void sub_81128BC(u8 a0); +void sub_811278C(u8, u8); #endif //GUARD_QUEST_LOG_H diff --git a/src/field_effect.c b/src/field_effect.c index 9695e4900..3b710167d 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -2967,3 +2967,75 @@ void UseSurfEffect_5(struct Task * task) HelpSystem_SetSomeVariable2(22); } } + +void Task_FldEffUseVsSeeker(u8 taskId); +void UseVsSeekerEffect_1(struct Task * task); +void UseVsSeekerEffect_2(struct Task * task); +void UseVsSeekerEffect_3(struct Task * task); +void UseVsSeekerEffect_4(struct Task * task); + +void (*const sUseVsSeekerEffectFuncs[])(struct Task * task) = { + UseVsSeekerEffect_1, + UseVsSeekerEffect_2, + UseVsSeekerEffect_3, + UseVsSeekerEffect_4 +}; + +u32 FldEff_UseVsSeeker(void) +{ + if (gQuestLogState == QL_STATE_1) + sub_811278C(8, 89); + CreateTask(Task_FldEffUseVsSeeker, 0xFF); + return 0; +} + +void Task_FldEffUseVsSeeker(u8 taskId) +{ + sUseVsSeekerEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); +} + +void UseVsSeekerEffect_1(struct Task * task) +{ + ScriptContext2_Enable(); + FreezeObjectEvents(); + gPlayerAvatar.preventStep = TRUE; + task->data[0]++; +} + +void UseVsSeekerEffect_2(struct Task * task) +{ + struct ObjectEvent * playerObj = &gObjectEvents[gPlayerAvatar.objectEventId]; + if (!ObjectEventIsMovementOverridden(playerObj) || ObjectEventClearHeldMovementIfFinished(playerObj)) + { + sub_805CBE8(); + ObjectEventSetHeldMovement(playerObj, MOVEMENT_ACTION_START_ANIM_IN_DIRECTION); + task->data[0]++; + } +} + +void UseVsSeekerEffect_3(struct Task * task) +{ + struct ObjectEvent * playerObj = &gObjectEvents[gPlayerAvatar.objectEventId]; + if (ObjectEventClearHeldMovementIfFinished(playerObj)) + { + if (gPlayerAvatar.flags & (PLAYER_AVATAR_FLAG_ACRO_BIKE | PLAYER_AVATAR_FLAG_MACH_BIKE)) + ObjectEventSetGraphicsId(playerObj, GetPlayerAvatarGraphicsIdByStateId(1)); + else if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING) + ObjectEventSetGraphicsId(playerObj, GetPlayerAvatarGraphicsIdByStateId(2)); + else + ObjectEventSetGraphicsId(playerObj, GetPlayerAvatarGraphicsIdByStateId(0)); + ObjectEventForceSetSpecialAnim(playerObj, GetFaceDirectionMovementAction(playerObj->facingDirection)); + task->data[0]++; + } +} + +void UseVsSeekerEffect_4(struct Task * task) +{ + struct ObjectEvent * playerObj = &gObjectEvents[gPlayerAvatar.objectEventId]; + if (ObjectEventClearHeldMovementIfFinished(playerObj)) + { + gPlayerAvatar.preventStep = FALSE; + FieldEffectActiveListRemove(FLDEFF_USE_VS_SEEKER); + DestroyTask(FindTaskIdByFunc(Task_FldEffUseVsSeeker)); + } +} diff --git a/src/quest_log_player.c b/src/quest_log_player.c index c6b5db4f9..ccf0565fb 100644 --- a/src/quest_log_player.c +++ b/src/quest_log_player.c @@ -156,13 +156,13 @@ static void sub_8150708(void) static void sub_815077C(void) { - FieldEffectStart(FLDEFF_UNK_41); + FieldEffectStart(FLDEFF_USE_VS_SEEKER); CreateTask(sub_8150794, 0x00); } static void sub_8150794(u8 taskId) { - if (!FieldEffectActiveListContains(FLDEFF_UNK_41)) + if (!FieldEffectActiveListContains(FLDEFF_USE_VS_SEEKER)) { UnfreezeObjectEvents(); ScriptContext2_Disable(); diff --git a/src/vs_seeker.c b/src/vs_seeker.c index 135a11575..1424cfe29 100644 --- a/src/vs_seeker.c +++ b/src/vs_seeker.c @@ -748,7 +748,7 @@ void Task_VsSeeker_0(u8 taskId) else if (respval == 2) { ItemUse_SetQuestLogEvent(QL_EVENT_USED_ITEM, 0, gSpecialVar_ItemId, 0xffff); - FieldEffectStart(FLDEFF_UNK_41); // TODO: name this enum + FieldEffectStart(FLDEFF_USE_VS_SEEKER); // TODO: name this enum gTasks[taskId].func = Task_VsSeeker_1; gTasks[taskId].data[0] = 15; } @@ -774,7 +774,7 @@ static void Task_VsSeeker_2(u8 taskId) data[2]++; } - if (!FieldEffectActiveListContains(FLDEFF_UNK_41)) + if (!FieldEffectActiveListContains(FLDEFF_USE_VS_SEEKER)) { data[1] = 0; data[2] = 0; From fb064f17ba63a79df09901c874b03665f4bf11e8 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 28 Feb 2020 17:10:06 -0500 Subject: [PATCH 18/26] Fly field effect --- asm/field_effect.s | 1545 ------------------------------- data/field_effect.s | 54 -- include/event_object_movement.h | 1 + include/field_effect_helpers.h | 1 + src/field_effect.c | 585 ++++++++++++ 5 files changed, 587 insertions(+), 1599 deletions(-) diff --git a/asm/field_effect.s b/asm/field_effect.s index 370016f84..b955fe12c 100644 --- a/asm/field_effect.s +++ b/asm/field_effect.s @@ -5,1551 +5,6 @@ .text - thumb_func_start FldEff_NpcFlyOut -FldEff_NpcFlyOut: @ 8086D38 - push {r4,lr} - ldr r0, _08086D84 @ =gFieldEffectObjectTemplatePointers - ldr r0, [r0, 0x68] - movs r1, 0x78 - movs r2, 0 - movs r3, 0x1 - bl CreateSprite - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - lsls r2, r4, 4 - adds r2, r4 - lsls r2, 2 - ldr r0, _08086D88 @ =gSprites - adds r2, r0 - ldrb r1, [r2, 0x5] - movs r0, 0xF - ands r0, r1 - movs r1, 0xD - negs r1, r1 - ands r0, r1 - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2, 0x5] - ldr r0, _08086D8C @ =sub_8086D94 - str r0, [r2, 0x1C] - ldr r0, _08086D90 @ =gFieldEffectArguments - ldr r0, [r0] - strh r0, [r2, 0x30] - movs r0, 0x97 - bl PlaySE - adds r0, r4, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08086D84: .4byte gFieldEffectObjectTemplatePointers -_08086D88: .4byte gSprites -_08086D8C: .4byte sub_8086D94 -_08086D90: .4byte gFieldEffectArguments - thumb_func_end FldEff_NpcFlyOut - - thumb_func_start sub_8086D94 -sub_8086D94: @ 8086D94 - push {r4,r5,lr} - adds r4, r0, 0 - movs r1, 0x32 - ldrsh r0, [r4, r1] - movs r1, 0x8C - bl Cos - movs r5, 0 - strh r0, [r4, 0x24] - movs r2, 0x32 - ldrsh r0, [r4, r2] - movs r1, 0x48 - bl Sin - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x32] - adds r0, 0x4 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x32] - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _08086DF6 - movs r2, 0x30 - ldrsh r0, [r4, r2] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _08086E0C @ =gSprites - adds r1, r0 - adds r3, r1, 0 - adds r3, 0x3E - ldrb r2, [r3] - movs r0, 0x3 - negs r0, r0 - ands r0, r2 - strb r0, [r3] - ldrh r0, [r4, 0x24] - ldrh r2, [r4, 0x20] - adds r0, r2 - strh r0, [r1, 0x20] - ldrh r0, [r4, 0x26] - ldrh r2, [r4, 0x22] - adds r0, r2 - subs r0, 0x8 - strh r0, [r1, 0x22] - strh r5, [r1, 0x24] - strh r5, [r1, 0x26] -_08086DF6: - movs r1, 0x32 - ldrsh r0, [r4, r1] - cmp r0, 0x7F - ble _08086E06 - adds r0, r4, 0 - movs r1, 0x1E - bl FieldEffectStop -_08086E06: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08086E0C: .4byte gSprites - thumb_func_end sub_8086D94 - - thumb_func_start FldEff_UseFly -FldEff_UseFly: @ 8086E10 - push {lr} - ldr r0, _08086E34 @ =Task_UseFly - movs r1, 0xFE - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08086E38 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldr r0, _08086E3C @ =gFieldEffectArguments - ldr r0, [r0] - strh r0, [r1, 0xA] - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_08086E34: .4byte Task_UseFly -_08086E38: .4byte gTasks -_08086E3C: .4byte gFieldEffectArguments - thumb_func_end FldEff_UseFly - - thumb_func_start Task_UseFly -Task_UseFly: @ 8086E40 - push {lr} - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - ldr r3, _08086E68 @ =sUseFlyEffectFuncs - ldr r2, _08086E6C @ =gTasks - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - movs r2, 0x8 - ldrsh r1, [r0, r2] - lsls r1, 2 - adds r1, r3 - ldr r1, [r1] - bl _call_via_r1 - pop {r0} - bx r0 - .align 2, 0 -_08086E68: .4byte sUseFlyEffectFuncs -_08086E6C: .4byte gTasks - thumb_func_end Task_UseFly - - thumb_func_start UseFlyEffect_1 -UseFlyEffect_1: @ 8086E70 - push {r4-r6,lr} - adds r5, r0, 0 - ldr r6, _08086EC0 @ =gPlayerAvatar - ldrb r1, [r6, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08086EC4 @ =gObjectEvents - adds r4, r0, r1 - adds r0, r4, 0 - bl ObjectEventIsMovementOverridden - lsls r0, 24 - cmp r0, 0 - beq _08086E9A - adds r0, r4, 0 - bl ObjectEventClearHeldMovementIfFinished - lsls r0, 24 - cmp r0, 0 - beq _08086EB8 -_08086E9A: - ldrb r0, [r6] - strh r0, [r5, 0x26] - movs r0, 0x1 - strb r0, [r6, 0x6] - bl SetPlayerAvatarStateMask - bl sub_805CB70 - adds r0, r4, 0 - movs r1, 0x45 - bl ObjectEventSetHeldMovement - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] -_08086EB8: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08086EC0: .4byte gPlayerAvatar -_08086EC4: .4byte gObjectEvents - thumb_func_end UseFlyEffect_1 - - thumb_func_start UseFlyEffect_2 -UseFlyEffect_2: @ 8086EC8 - push {r4,lr} - adds r4, r0, 0 - ldr r0, _08086F00 @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08086F04 @ =gObjectEvents - adds r0, r1 - bl ObjectEventClearHeldMovementIfFinished - lsls r0, 24 - cmp r0, 0 - beq _08086EF8 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - ldr r1, _08086F08 @ =gFieldEffectArguments - movs r2, 0xA - ldrsh r0, [r4, r2] - str r0, [r1] - movs r0, 0x3B - bl FieldEffectStart -_08086EF8: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08086F00: .4byte gPlayerAvatar -_08086F04: .4byte gObjectEvents -_08086F08: .4byte gFieldEffectArguments - thumb_func_end UseFlyEffect_2 - - thumb_func_start UseFlyEffect_3 -UseFlyEffect_3: @ 8086F0C - push {r4,r5,lr} - adds r4, r0, 0 - movs r0, 0x6 - bl FieldEffectActiveListContains - lsls r0, 24 - cmp r0, 0 - bne _08086F54 - ldr r0, _08086F5C @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08086F60 @ =gObjectEvents - adds r5, r0, r1 - ldrh r1, [r4, 0x26] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _08086F44 - ldrb r0, [r5, 0x1A] - movs r1, 0x2 - bl sub_80DC44C - ldrb r0, [r5, 0x1A] - movs r1, 0 - bl sub_80DC478 -_08086F44: - bl sub_8087168 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0xA] - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_08086F54: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08086F5C: .4byte gPlayerAvatar -_08086F60: .4byte gObjectEvents - thumb_func_end UseFlyEffect_3 - - thumb_func_start UseFlyEffect_4 -UseFlyEffect_4: @ 8086F64 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4, 0xA] - bl sub_80871AC - lsls r0, 24 - cmp r0, 0 - beq _08086F98 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0x10 - strh r0, [r4, 0xC] - movs r0, 0x1 - bl SetPlayerAvatarTransitionFlags - ldr r0, _08086FA0 @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08086FA4 @ =gObjectEvents - adds r0, r1 - movs r1, 0x2 - bl ObjectEventSetHeldMovement -_08086F98: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08086FA0: .4byte gPlayerAvatar -_08086FA4: .4byte gObjectEvents - thumb_func_end UseFlyEffect_4 - - thumb_func_start UseFlyEffect_5 -UseFlyEffect_5: @ 8086FA8 - push {r4,lr} - adds r4, r0, 0 - ldr r0, _08086FF4 @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08086FF8 @ =gObjectEvents - adds r2, r0, r1 - ldrh r1, [r4, 0xC] - movs r3, 0xC - ldrsh r0, [r4, r3] - cmp r0, 0 - beq _08086FCE - subs r0, r1, 0x1 - strh r0, [r4, 0xC] - lsls r0, 16 - cmp r0, 0 - bne _08086FEC -_08086FCE: - adds r0, r2, 0 - bl ObjectEventClearHeldMovementIfFinished - lsls r0, 24 - cmp r0, 0 - beq _08086FEC - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0x97 - bl PlaySE - ldrb r0, [r4, 0xA] - bl sub_80871C8 -_08086FEC: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08086FF4: .4byte gPlayerAvatar -_08086FF8: .4byte gObjectEvents - thumb_func_end UseFlyEffect_5 - - thumb_func_start UseFlyEffect_6 -UseFlyEffect_6: @ 8086FFC - push {r4,r5,lr} - adds r5, r0, 0 - ldrh r0, [r5, 0xC] - adds r0, 0x1 - strh r0, [r5, 0xC] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x7 - ble _0808705A - ldr r0, _08087060 @ =gPlayerAvatar - ldrb r0, [r0, 0x5] - lsls r4, r0, 3 - adds r4, r0 - lsls r4, 2 - ldr r0, _08087064 @ =gObjectEvents - adds r4, r0 - movs r0, 0x2 - bl GetPlayerAvatarGraphicsIdByStateId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl ObjectEventSetGraphicsId - ldrb r1, [r4, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08087068 @ =gSprites - adds r0, r1 - movs r1, 0x16 - bl StartSpriteAnim - ldrb r0, [r4, 0x1] - movs r1, 0x10 - orrs r0, r1 - strb r0, [r4, 0x1] - adds r0, r4, 0 - movs r1, 0x54 - bl ObjectEventSetHeldMovement - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - movs r0, 0 - strh r0, [r5, 0xC] -_0808705A: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08087060: .4byte gPlayerAvatar -_08087064: .4byte gObjectEvents -_08087068: .4byte gSprites - thumb_func_end UseFlyEffect_6 - - thumb_func_start UseFlyEffect_7 -UseFlyEffect_7: @ 808706C - push {r4,r5,lr} - adds r5, r0, 0 - ldrh r0, [r5, 0xC] - adds r0, 0x1 - strh r0, [r5, 0xC] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x9 - ble _080870FC - ldr r0, _08087104 @ =gPlayerAvatar - ldrb r0, [r0, 0x5] - lsls r4, r0, 3 - adds r4, r0 - lsls r4, 2 - ldr r0, _08087108 @ =gObjectEvents - adds r4, r0 - adds r0, r4, 0 - bl ObjectEventClearAnimIfSpecialAnimActive - ldrb r1, [r4, 0x1] - movs r0, 0x11 - negs r0, r0 - ands r0, r1 - strb r0, [r4, 0x1] - ldrb r1, [r4, 0x2] - movs r0, 0x41 - negs r0, r0 - ands r0, r1 - strb r0, [r4, 0x2] - ldrb r0, [r5, 0xA] - ldrb r1, [r4, 0x4] - bl sub_8087204 - movs r0, 0xA - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r4, _0808710C @ =gSprites - adds r0, r4 - ldr r1, _08087110 @ =gSaveBlock2Ptr - ldr r1, [r1] - ldrb r1, [r1, 0x8] - lsls r1, 1 - adds r1, 0x1 - lsls r1, 24 - lsrs r1, 24 - bl StartSpriteAnim - movs r0, 0xA - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r1, 0 - bl sub_80877FC - movs r0, 0xA - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r4, 0x1C - adds r0, r4 - ldr r1, _08087114 @ =sub_8087828 - str r1, [r0] - bl CameraObjectReset2 - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] -_080870FC: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08087104: .4byte gPlayerAvatar -_08087108: .4byte gObjectEvents -_0808710C: .4byte gSprites -_08087110: .4byte gSaveBlock2Ptr -_08087114: .4byte sub_8087828 - thumb_func_end UseFlyEffect_7 - - thumb_func_start UseFlyEffect_8 -UseFlyEffect_8: @ 8087118 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4, 0xA] - bl sub_80871AC - lsls r0, 24 - cmp r0, 0 - beq _08087132 - bl WarpFadeOutScreen - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_08087132: - pop {r4} - pop {r0} - bx r0 - thumb_func_end UseFlyEffect_8 - - thumb_func_start UseFlyEffect_9 -UseFlyEffect_9: @ 8087138 - push {lr} - ldr r0, _08087160 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0808715A - movs r0, 0x1F - bl FieldEffectActiveListRemove - ldr r0, _08087164 @ =Task_UseFly - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_0808715A: - pop {r0} - bx r0 - .align 2, 0 -_08087160: .4byte gPaletteFade -_08087164: .4byte Task_UseFly - thumb_func_end UseFlyEffect_9 - - thumb_func_start sub_8087168 -sub_8087168: @ 8087168 - push {lr} - ldr r0, _080871A0 @ =gFieldEffectObjectTemplatePointers - ldr r0, [r0, 0x68] - movs r1, 0xFF - movs r2, 0xB4 - movs r3, 0x1 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - ldr r1, _080871A4 @ =gSprites - adds r2, r1 - ldrb r3, [r2, 0x5] - movs r1, 0xF - ands r1, r3 - movs r3, 0xD - negs r3, r3 - ands r1, r3 - movs r3, 0x4 - orrs r1, r3 - strb r1, [r2, 0x5] - ldr r1, _080871A8 @ =sub_8087220 - str r1, [r2, 0x1C] - pop {r1} - bx r1 - .align 2, 0 -_080871A0: .4byte gFieldEffectObjectTemplatePointers -_080871A4: .4byte gSprites -_080871A8: .4byte sub_8087220 - thumb_func_end sub_8087168 - - thumb_func_start sub_80871AC -sub_80871AC: @ 80871AC - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080871C4 @ =gSprites - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - ldrh r0, [r1, 0x3C] - lsls r0, 24 - lsrs r0, 24 - bx lr - .align 2, 0 -_080871C4: .4byte gSprites - thumb_func_end sub_80871AC - - thumb_func_start sub_80871C8 -sub_80871C8: @ 80871C8 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - ldr r0, _080871FC @ =gSprites - adds r4, r0 - ldr r0, _08087200 @ =sub_80872F0 - str r0, [r4, 0x1C] - movs r1, 0 - movs r0, 0x78 - strh r0, [r4, 0x20] - strh r1, [r4, 0x22] - strh r1, [r4, 0x24] - strh r1, [r4, 0x26] - adds r0, r4, 0 - adds r0, 0x2E - movs r2, 0x10 - bl memset - movs r0, 0x40 - strh r0, [r4, 0x3A] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080871FC: .4byte gSprites -_08087200: .4byte sub_80872F0 - thumb_func_end sub_80871C8 - - thumb_func_start sub_8087204 -sub_8087204: @ 8087204 - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r1, 24 - ldr r3, _0808721C @ =gSprites - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r3 - strh r1, [r2, 0x3A] - bx lr - .align 2, 0 -_0808721C: .4byte gSprites - thumb_func_end sub_8087204 - - thumb_func_start sub_8087220 -sub_8087220: @ 8087220 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x3C - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080872E2 - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _0808727A - ldrb r0, [r4, 0x1] - movs r1, 0x3 - orrs r0, r1 - strb r0, [r4, 0x1] - ldr r0, _0808725C @ =gUnknown_83CC1CC - str r0, [r4, 0x10] - adds r0, r4, 0 - bl InitSpriteAffineAnim - adds r0, r4, 0 - movs r1, 0 - bl StartSpriteAffineAnim - ldr r0, _08087260 @ =gSaveBlock2Ptr - ldr r0, [r0] - ldrb r0, [r0, 0x8] - cmp r0, 0 - bne _08087264 - movs r0, 0x80 - b _08087266 - .align 2, 0 -_0808725C: .4byte gUnknown_83CC1CC -_08087260: .4byte gSaveBlock2Ptr -_08087264: - movs r0, 0x76 -_08087266: - strh r0, [r4, 0x20] - ldr r0, _080872E8 @ =0x0000ffd0 - strh r0, [r4, 0x22] - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - movs r0, 0x40 - strh r0, [r4, 0x30] - adds r0, 0xC0 - strh r0, [r4, 0x32] -_0808727A: - ldrh r0, [r4, 0x32] - lsls r0, 16 - asrs r0, 24 - ldrh r1, [r4, 0x30] - adds r0, r1 - strh r0, [r4, 0x30] - movs r1, 0x30 - ldrsh r0, [r4, r1] - movs r1, 0x78 - bl Cos - strh r0, [r4, 0x24] - movs r1, 0x30 - ldrsh r0, [r4, r1] - movs r1, 0x78 - bl Sin - strh r0, [r4, 0x26] - ldrh r2, [r4, 0x32] - movs r0, 0x32 - ldrsh r1, [r4, r0] - ldr r0, _080872EC @ =0x000007ff - cmp r1, r0 - bgt _080872B0 - adds r0, r2, 0 - adds r0, 0x60 - strh r0, [r4, 0x32] -_080872B0: - movs r1, 0x30 - ldrsh r0, [r4, r1] - cmp r0, 0x81 - ble _080872E2 - ldrh r0, [r4, 0x3C] - adds r0, 0x1 - strh r0, [r4, 0x3C] - ldrb r1, [r4, 0x1] - movs r0, 0x4 - negs r0, r0 - ands r0, r1 - strb r0, [r4, 0x1] - ldrb r0, [r4, 0x3] - lsls r0, 26 - lsrs r0, 27 - bl FreeOamMatrix - ldrb r1, [r4, 0x1] - lsrs r1, 6 - ldrb r2, [r4, 0x3] - lsrs r2, 6 - adds r0, r4, 0 - movs r3, 0 - bl CalcCenterToCornerVec -_080872E2: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080872E8: .4byte 0x0000ffd0 -_080872EC: .4byte 0x000007ff - thumb_func_end sub_8087220 - - thumb_func_start sub_80872F0 -sub_80872F0: @ 80872F0 - push {r4,r5,lr} - adds r4, r0, 0 - movs r1, 0x32 - ldrsh r0, [r4, r1] - movs r1, 0x8C - bl Cos - movs r5, 0 - strh r0, [r4, 0x24] - movs r2, 0x32 - ldrsh r0, [r4, r2] - movs r1, 0x48 - bl Sin - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x32] - adds r0, 0x4 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x32] - movs r1, 0x3A - ldrsh r0, [r4, r1] - cmp r0, 0x40 - beq _0808734E - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _08087360 @ =gSprites - adds r1, r0 - adds r3, r1, 0 - adds r3, 0x3E - ldrb r2, [r3] - movs r0, 0x3 - negs r0, r0 - ands r0, r2 - strb r0, [r3] - ldrh r0, [r4, 0x24] - ldrh r2, [r4, 0x20] - adds r0, r2 - strh r0, [r1, 0x20] - ldrh r0, [r4, 0x26] - ldrh r2, [r4, 0x22] - adds r0, r2 - subs r0, 0x8 - strh r0, [r1, 0x22] - strh r5, [r1, 0x24] - strh r5, [r1, 0x26] -_0808734E: - movs r1, 0x32 - ldrsh r0, [r4, r1] - cmp r0, 0x7F - ble _0808735A - movs r0, 0x1 - strh r0, [r4, 0x3C] -_0808735A: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08087360: .4byte gSprites - thumb_func_end sub_80872F0 - - thumb_func_start sub_8087364 -sub_8087364: @ 8087364 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x3C - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _0808744E - movs r2, 0x2E - ldrsh r0, [r4, r2] - cmp r0, 0 - bne _080873C4 - ldrb r0, [r4, 0x1] - movs r1, 0x3 - orrs r0, r1 - strb r0, [r4, 0x1] - ldr r0, _080873A0 @ =gUnknown_83CC1CC - str r0, [r4, 0x10] - adds r0, r4, 0 - bl InitSpriteAffineAnim - adds r0, r4, 0 - movs r1, 0x1 - bl StartSpriteAffineAnim - ldr r0, _080873A4 @ =gSaveBlock2Ptr - ldr r0, [r0] - ldrb r0, [r0, 0x8] - cmp r0, 0 - bne _080873A8 - movs r0, 0x70 - b _080873AA - .align 2, 0 -_080873A0: .4byte gUnknown_83CC1CC -_080873A4: .4byte gSaveBlock2Ptr -_080873A8: - movs r0, 0x64 -_080873AA: - strh r0, [r4, 0x20] - ldr r0, _08087454 @ =0x0000ffe0 - strh r0, [r4, 0x22] - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - movs r0, 0xF0 - strh r0, [r4, 0x30] - movs r0, 0x80 - lsls r0, 4 - strh r0, [r4, 0x32] - movs r0, 0x80 - strh r0, [r4, 0x36] -_080873C4: - ldrh r1, [r4, 0x32] - lsls r1, 16 - asrs r1, 24 - ldrh r2, [r4, 0x30] - adds r2, r1 - ldrh r0, [r4, 0x34] - adds r0, r1 - strh r0, [r4, 0x34] - movs r0, 0xFF - ands r2, r0 - strh r2, [r4, 0x30] - movs r3, 0x30 - ldrsh r0, [r4, r3] - movs r1, 0x20 - bl Cos - strh r0, [r4, 0x24] - movs r1, 0x30 - ldrsh r0, [r4, r1] - movs r1, 0x78 - bl Sin - strh r0, [r4, 0x26] - ldrh r1, [r4, 0x32] - movs r2, 0x32 - ldrsh r0, [r4, r2] - movs r2, 0x80 - lsls r2, 1 - cmp r0, r2 - ble _08087406 - ldrh r0, [r4, 0x36] - subs r0, r1, r0 - strh r0, [r4, 0x32] -_08087406: - ldrh r1, [r4, 0x36] - movs r3, 0x36 - ldrsh r0, [r4, r3] - cmp r0, 0xFF - bgt _08087416 - adds r0, r1, 0 - adds r0, 0x18 - strh r0, [r4, 0x36] -_08087416: - movs r1, 0x32 - ldrsh r0, [r4, r1] - cmp r0, 0xFF - bgt _08087420 - strh r2, [r4, 0x32] -_08087420: - movs r2, 0x34 - ldrsh r0, [r4, r2] - cmp r0, 0x3B - ble _0808744E - ldrh r0, [r4, 0x3C] - adds r0, 0x1 - strh r0, [r4, 0x3C] - ldrb r1, [r4, 0x1] - movs r0, 0x4 - negs r0, r0 - ands r0, r1 - strb r0, [r4, 0x1] - ldrb r0, [r4, 0x3] - lsls r0, 26 - lsrs r0, 27 - bl FreeOamMatrix - adds r2, r4, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] -_0808744E: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08087454: .4byte 0x0000ffe0 - thumb_func_end sub_8087364 - - thumb_func_start sub_8087458 -sub_8087458: @ 8087458 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r4, 0 - bl sub_80871C8 - ldr r1, _0808747C @ =gSprites - lsls r0, r4, 4 - adds r0, r4 - lsls r0, 2 - adds r1, 0x1C - adds r0, r1 - ldr r1, _08087480 @ =sub_8087364 - str r1, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0808747C: .4byte gSprites -_08087480: .4byte sub_8087364 - thumb_func_end sub_8087458 - - thumb_func_start FldEff_FlyIn -FldEff_FlyIn: @ 8087484 - push {lr} - ldr r0, _08087494 @ =sub_8087498 - movs r1, 0xFE - bl CreateTask - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_08087494: .4byte sub_8087498 - thumb_func_end FldEff_FlyIn - - thumb_func_start sub_8087498 -sub_8087498: @ 8087498 - push {lr} - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - ldr r3, _080874C0 @ =gUnknown_83CC1D4 - ldr r2, _080874C4 @ =gTasks - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - movs r2, 0x8 - ldrsh r1, [r0, r2] - lsls r1, 2 - adds r1, r3 - ldr r1, [r1] - bl _call_via_r1 - pop {r0} - bx r0 - .align 2, 0 -_080874C0: .4byte gUnknown_83CC1D4 -_080874C4: .4byte gTasks - thumb_func_end sub_8087498 - - thumb_func_start sub_80874C8 -sub_80874C8: @ 80874C8 - push {r4-r6,lr} - adds r6, r0, 0 - ldr r4, _080875B4 @ =gPlayerAvatar - ldrb r1, [r4, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _080875B8 @ =gObjectEvents - adds r5, r0, r1 - adds r0, r5, 0 - bl ObjectEventIsMovementOverridden - lsls r0, 24 - cmp r0, 0 - beq _080874F2 - adds r0, r5, 0 - bl ObjectEventClearHeldMovementIfFinished - lsls r0, 24 - cmp r0, 0 - beq _080875AE -_080874F2: - ldrh r0, [r6, 0x8] - adds r0, 0x1 - strh r0, [r6, 0x8] - movs r0, 0x21 - strh r0, [r6, 0xC] - ldrb r0, [r4] - strh r0, [r6, 0x26] - movs r0, 0x1 - strb r0, [r4, 0x6] - bl SetPlayerAvatarStateMask - ldrh r1, [r6, 0x26] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _0808751A - ldrb r0, [r5, 0x1A] - movs r1, 0 - bl sub_80DC44C -_0808751A: - movs r0, 0x2 - bl GetPlayerAvatarGraphicsIdByStateId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r5, 0 - bl ObjectEventSetGraphicsId - bl CameraObjectReset2 - adds r0, r5, 0 - movs r1, 0x3 - bl ObjectEventTurn - ldrb r1, [r5, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r4, _080875BC @ =gSprites - adds r0, r4 - movs r1, 0x16 - bl StartSpriteAnim - ldrb r1, [r5, 0x1] - movs r0, 0x21 - negs r0, r0 - ands r0, r1 - strb r0, [r5, 0x1] - bl sub_8087168 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r6, 0xA] - bl sub_80871C8 - ldrb r0, [r6, 0xA] - ldrb r1, [r5, 0x4] - bl sub_8087204 - movs r0, 0xA - ldrsh r1, [r6, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldr r1, _080875C0 @ =gSaveBlock2Ptr - ldr r1, [r1] - ldrb r1, [r1, 0x8] - lsls r1, 25 - movs r2, 0x80 - lsls r2, 18 - adds r1, r2 - lsrs r1, 24 - bl StartSpriteAnim - movs r0, 0xA - ldrsh r1, [r6, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r1, 0x1 - bl sub_80877FC - movs r2, 0xA - ldrsh r1, [r6, r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r4, 0x1C - adds r0, r4 - ldr r1, _080875C4 @ =sub_8087828 - str r1, [r0] -_080875AE: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080875B4: .4byte gPlayerAvatar -_080875B8: .4byte gObjectEvents -_080875BC: .4byte gSprites -_080875C0: .4byte gSaveBlock2Ptr -_080875C4: .4byte sub_8087828 - thumb_func_end sub_80874C8 - - thumb_func_start sub_80875C8 -sub_80875C8: @ 80875C8 - push {r4-r6,lr} - adds r5, r0, 0 - movs r0, 0xA - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r6, _08087638 @ =gSprites - adds r0, r6 - bl sub_80878C0 - ldrh r1, [r5, 0xC] - movs r2, 0xC - ldrsh r0, [r5, r2] - cmp r0, 0 - beq _080875F2 - subs r0, r1, 0x1 - strh r0, [r5, 0xC] - lsls r0, 16 - cmp r0, 0 - bne _08087630 -_080875F2: - ldr r0, _0808763C @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08087640 @ =gObjectEvents - adds r0, r1 - ldrb r0, [r0, 0x4] - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - adds r4, r6 - ldrb r0, [r5, 0xA] - movs r1, 0x40 - bl sub_8087204 - ldrh r0, [r4, 0x24] - ldrh r1, [r4, 0x20] - adds r0, r1 - movs r1, 0 - strh r0, [r4, 0x20] - ldrh r0, [r4, 0x26] - ldrh r2, [r4, 0x22] - adds r0, r2 - strh r0, [r4, 0x22] - strh r1, [r4, 0x24] - strh r1, [r4, 0x26] - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - strh r1, [r5, 0xC] -_08087630: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08087638: .4byte gSprites -_0808763C: .4byte gPlayerAvatar -_08087640: .4byte gObjectEvents - thumb_func_end sub_80875C8 - - thumb_func_start sub_8087644 -sub_8087644: @ 8087644 - push {r4,lr} - sub sp, 0x24 - adds r4, r0, 0 - ldr r1, _0808768C @ =gUnknown_83CC1F0 - mov r0, sp - movs r2, 0x24 - bl memcpy - ldr r0, _08087690 @ =gPlayerAvatar - ldrb r0, [r0, 0x4] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _08087694 @ =gSprites - adds r1, r0 - movs r2, 0xC - ldrsh r0, [r4, r2] - lsls r0, 1 - add r0, sp - ldrh r0, [r0] - strh r0, [r1, 0x26] - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x11 - ble _08087682 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_08087682: - add sp, 0x24 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0808768C: .4byte gUnknown_83CC1F0 -_08087690: .4byte gPlayerAvatar -_08087694: .4byte gSprites - thumb_func_end sub_8087644 - - thumb_func_start sub_8087698 -sub_8087698: @ 8087698 - push {r4-r6,lr} - adds r6, r0, 0 - ldrb r0, [r6, 0xA] - bl sub_80871AC - lsls r0, 24 - cmp r0, 0 - beq _080876FC - ldr r0, _08087704 @ =gPlayerAvatar - ldrb r0, [r0, 0x5] - lsls r5, r0, 3 - adds r5, r0 - lsls r5, 2 - ldr r0, _08087708 @ =gObjectEvents - adds r5, r0 - ldrb r0, [r5, 0x4] - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - ldr r0, _0808770C @ =gSprites - adds r4, r0 - ldrb r1, [r5, 0x1] - movs r0, 0x11 - negs r0, r0 - ands r0, r1 - strb r0, [r5, 0x1] - movs r0, 0x10 - ldrsh r1, [r5, r0] - movs r0, 0x12 - ldrsh r2, [r5, r0] - adds r0, r5, 0 - bl sub_805F724 - movs r0, 0 - strh r0, [r4, 0x24] - strh r0, [r4, 0x26] - adds r4, 0x3E - ldrb r0, [r4] - movs r1, 0x2 - orrs r0, r1 - strb r0, [r4] - bl sub_805CB70 - adds r0, r5, 0 - movs r1, 0x45 - bl ObjectEventSetHeldMovement - ldrh r0, [r6, 0x8] - adds r0, 0x1 - strh r0, [r6, 0x8] -_080876FC: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08087704: .4byte gPlayerAvatar -_08087708: .4byte gObjectEvents -_0808770C: .4byte gSprites - thumb_func_end sub_8087698 - - thumb_func_start sub_8087710 -sub_8087710: @ 8087710 - push {r4,lr} - adds r4, r0, 0 - ldr r0, _08087740 @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08087744 @ =gObjectEvents - adds r0, r1 - bl ObjectEventClearHeldMovementIfFinished - lsls r0, 24 - cmp r0, 0 - beq _08087738 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - ldrb r0, [r4, 0xA] - bl sub_8087458 -_08087738: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08087740: .4byte gPlayerAvatar -_08087744: .4byte gObjectEvents - thumb_func_end sub_8087710 - - thumb_func_start sub_8087748 -sub_8087748: @ 8087748 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4, 0xA] - bl sub_80871AC - lsls r0, 24 - cmp r0, 0 - beq _08087774 - movs r0, 0xA - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0808777C @ =gSprites - adds r0, r1 - bl DestroySprite - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0x10 - strh r0, [r4, 0xA] -_08087774: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0808777C: .4byte gSprites - thumb_func_end sub_8087748 - - thumb_func_start fishE -fishE: @ 8087780 - push {r4-r7,lr} - adds r5, r0, 0 - ldrh r0, [r5, 0xA] - subs r0, 0x1 - strh r0, [r5, 0xA] - lsls r0, 16 - cmp r0, 0 - bne _080877EA - ldr r6, _080877F0 @ =gPlayerAvatar - ldrb r1, [r6, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _080877F4 @ =gObjectEvents - adds r4, r0, r1 - movs r7, 0 - ldrh r1, [r5, 0x26] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _080877B4 - movs r7, 0x2 - ldrb r0, [r4, 0x1A] - movs r1, 0x1 - bl sub_80DC44C -_080877B4: - adds r0, r7, 0 - bl GetPlayerAvatarGraphicsIdByStateId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl ObjectEventSetGraphicsId - adds r0, r4, 0 - movs r1, 0x1 - bl ObjectEventTurn - ldrh r0, [r5, 0x26] - strb r0, [r6] - movs r0, 0 - strb r0, [r6, 0x6] - movs r0, 0x20 - bl FieldEffectActiveListRemove - ldr r0, _080877F8 @ =sub_8087498 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_080877EA: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080877F0: .4byte gPlayerAvatar -_080877F4: .4byte gObjectEvents -_080877F8: .4byte sub_8087498 - thumb_func_end fishE - - thumb_func_start sub_80877FC -sub_80877FC: @ 80877FC - push {r4,r5,lr} - adds r4, r0, 0 - lsls r5, r1, 24 - lsrs r5, 24 - ldrb r0, [r4, 0x1] - movs r1, 0x3 - orrs r0, r1 - strb r0, [r4, 0x1] - ldr r0, _08087824 @ =gUnknown_83CC23C - str r0, [r4, 0x10] - adds r0, r4, 0 - bl InitSpriteAffineAnim - adds r0, r4, 0 - adds r1, r5, 0 - bl StartSpriteAffineAnim - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08087824: .4byte gUnknown_83CC23C - thumb_func_end sub_80877FC - - thumb_func_start sub_8087828 -sub_8087828: @ 8087828 - push {r4,r5,lr} - adds r4, r0, 0 - movs r1, 0x32 - ldrsh r0, [r4, r1] - movs r1, 0xB4 - bl Cos - movs r5, 0 - strh r0, [r4, 0x24] - movs r2, 0x32 - ldrsh r0, [r4, r2] - movs r1, 0x48 - bl Sin - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x32] - adds r0, 0x2 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x32] - movs r1, 0x3A - ldrsh r0, [r4, r1] - cmp r0, 0x40 - beq _08087886 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _080878BC @ =gSprites - adds r1, r0 - adds r3, r1, 0 - adds r3, 0x3E - ldrb r2, [r3] - movs r0, 0x3 - negs r0, r0 - ands r0, r2 - strb r0, [r3] - ldrh r0, [r4, 0x24] - ldrh r2, [r4, 0x20] - adds r0, r2 - strh r0, [r1, 0x20] - ldrh r0, [r4, 0x26] - ldrh r2, [r4, 0x22] - adds r0, r2 - subs r0, 0x8 - strh r0, [r1, 0x22] - strh r5, [r1, 0x24] - strh r5, [r1, 0x26] -_08087886: - movs r1, 0x32 - ldrsh r0, [r4, r1] - cmp r0, 0x7F - ble _080878B4 - movs r0, 0x1 - strh r0, [r4, 0x3C] - ldrb r1, [r4, 0x1] - subs r0, 0x5 - ands r0, r1 - strb r0, [r4, 0x1] - ldrb r0, [r4, 0x3] - lsls r0, 26 - lsrs r0, 27 - bl FreeOamMatrix - ldrb r1, [r4, 0x1] - lsrs r1, 6 - ldrb r2, [r4, 0x3] - lsrs r2, 6 - adds r0, r4, 0 - movs r3, 0 - bl CalcCenterToCornerVec -_080878B4: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080878BC: .4byte gSprites - thumb_func_end sub_8087828 - - thumb_func_start sub_80878C0 -sub_80878C0: @ 80878C0 - push {r4-r6,lr} - adds r4, r0, 0 - ldrb r5, [r4, 0x1] - lsls r0, r5, 30 - cmp r0, 0 - beq _08087916 - ldr r1, _0808791C @ =gOamMatrices - ldrb r0, [r4, 0x3] - lsls r0, 26 - lsrs r3, r0, 27 - lsls r0, r3, 3 - adds r1, r0, r1 - movs r2, 0 - ldrsh r0, [r1, r2] - movs r2, 0x80 - lsls r2, 1 - cmp r0, r2 - beq _080878EC - movs r6, 0x6 - ldrsh r0, [r1, r6] - cmp r0, r2 - bne _08087916 -_080878EC: - movs r0, 0x4 - negs r0, r0 - ands r0, r5 - strb r0, [r4, 0x1] - adds r0, r3, 0 - bl FreeOamMatrix - ldrb r1, [r4, 0x1] - lsrs r1, 6 - ldrb r2, [r4, 0x3] - lsrs r2, 6 - adds r0, r4, 0 - movs r3, 0 - bl CalcCenterToCornerVec - adds r0, r4, 0 - movs r1, 0 - bl StartSpriteAnim - ldr r0, _08087920 @ =sub_80872F0 - str r0, [r4, 0x1C] -_08087916: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0808791C: .4byte gOamMatrices -_08087920: .4byte sub_80872F0 - thumb_func_end sub_80878C0 - thumb_func_start sub_8087924 sub_8087924: @ 8087924 push {r4-r7,lr} diff --git a/data/field_effect.s b/data/field_effect.s index 63142e981..529205a57 100644 --- a/data/field_effect.s +++ b/data/field_effect.s @@ -6,60 +6,6 @@ .section .rodata .align 2 -sUseFlyEffectFuncs:: @ 83CC178 dataptr (incomplete) - .4byte UseFlyEffect_1 - .4byte UseFlyEffect_2 - .4byte UseFlyEffect_3 - .4byte UseFlyEffect_4 - .4byte UseFlyEffect_5 - .4byte UseFlyEffect_6 - .4byte UseFlyEffect_7 - .4byte UseFlyEffect_8 - .4byte UseFlyEffect_9 - -gUnknown_83CC19C:: @ 83CC19C affineanimcmd - obj_rot_scal_anim_frame 8, 8, 226, 0 - obj_rot_scal_anim_frame 28, 28, 0, 30 - obj_rot_scal_anim_end - -gUnknown_83CC1B4:: @ 83CC1B4 affineanimcmd - obj_rot_scal_anim_frame 256, 256, 64, 0 - obj_rot_scal_anim_frame -10, -10, 0, 22 - obj_rot_scal_anim_end - - .align 2 -gUnknown_83CC1CC:: @ 83CC1CC dataptr - .4byte gUnknown_83CC19C - .4byte gUnknown_83CC1B4 - - .align 2 -gUnknown_83CC1D4:: @ 83CC1D4 dataptr - .4byte sub_80874C8 - .4byte sub_80875C8 - .4byte sub_8087644 - .4byte sub_8087698 - .4byte sub_8087710 - .4byte sub_8087748 - .4byte fishE - -gUnknown_83CC1F0:: @ 83CC1F0 data16 - .2byte 0xfffe, 0xfffc, 0xfffb, 0xfffa, 0xfff9, 0xfff8, 0xfff8, 0xfff8, 0xfff9, 0xfff9, 0xfffa, 0xfffb, 0xfffd, 0xfffe, 0x0000, 0x0002 - .2byte 0x0004, 0x0008 - -gUnknown_83CC214:: @ 83CC214 affineanimcmd - obj_rot_scal_anim_frame 24, 24, 0, 1 - obj_rot_scal_anim_jump 0 - -gUnknown_83CC224:: @ 83CC224 affineanimcmd - obj_rot_scal_anim_frame 512, 512, 0, 1 - obj_rot_scal_anim_frame -16, -16, 0, 1 - obj_rot_scal_anim_jump 1 - - .align 2 -gUnknown_83CC23C:: @ 83CC23C dataptr - .4byte gUnknown_83CC214 - .4byte gUnknown_83CC224 - gUnknown_83CC244:: @ 83CC244 dataptr .4byte sub_8087C00 .4byte sub_8087C2C diff --git a/include/event_object_movement.h b/include/event_object_movement.h index 1e63727fb..edc5c8b11 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -131,5 +131,6 @@ extern const struct OamData gObjectEventBaseOam_32x32; extern const struct UCoords16 gUnknown_83A64C8[]; extern const u16 gUnknown_8398648[]; extern const u16 gUnknown_8398688[]; +void sub_805F724(struct ObjectEvent *, s16 x, s16 y); #endif // GUARD_EVENT_OBJECT_MOVEMENT_H diff --git a/include/field_effect_helpers.h b/include/field_effect_helpers.h index e1a56a26c..c3e5ae29a 100644 --- a/include/field_effect_helpers.h +++ b/include/field_effect_helpers.h @@ -15,6 +15,7 @@ u8 sub_8154228(void); bool8 sub_8155DA0(struct ObjectEvent *); void sub_80DC44C(u8, u8); +void sub_80DC478(u8, u8); void StartAshFieldEffect(s16, s16, u16, s16); #endif //GUARD_FIELD_EFFECT_HELPERS_H diff --git a/src/field_effect.c b/src/field_effect.c index 3b710167d..81b572893 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -3039,3 +3039,588 @@ void UseVsSeekerEffect_4(struct Task * task) DestroyTask(FindTaskIdByFunc(Task_FldEffUseVsSeeker)); } } + +void sub_8086D94(struct Sprite * sprite); + +u8 FldEff_NpcFlyOut(void) +{ + u8 spriteId = CreateSprite(gFieldEffectObjectTemplatePointers[26], 0x78, 0, 1); + struct Sprite * sprite = &gSprites[spriteId]; + + sprite->oam.paletteNum = 0; + sprite->oam.priority = 1; + sprite->callback = sub_8086D94; + sprite->data[1] = gFieldEffectArguments[0]; + PlaySE(SE_W019); + return spriteId; +} + +void sub_8086D94(struct Sprite * sprite) +{ + struct Sprite * npcSprite; + + sprite->pos2.x = Cos(sprite->data[2], 0x8c); + sprite->pos2.y = Sin(sprite->data[2], 0x48); + sprite->data[2] = (sprite->data[2] + 4) & 0xff; + if (sprite->data[0]) + { + npcSprite = &gSprites[sprite->data[1]]; + npcSprite->coordOffsetEnabled = 0; + npcSprite->pos1.x = sprite->pos1.x + sprite->pos2.x; + npcSprite->pos1.y = sprite->pos1.y + sprite->pos2.y - 8; + npcSprite->pos2.x = 0; + npcSprite->pos2.y = 0; + } + if (sprite->data[2] >= 0x80) + { + FieldEffectStop(sprite, FLDEFF_NPCFLY_OUT); + } +} + +void Task_UseFly(u8 taskId); +void UseFlyEffect_1(struct Task * task); +void UseFlyEffect_2(struct Task * task); +void UseFlyEffect_3(struct Task * task); +void UseFlyEffect_4(struct Task * task); +void UseFlyEffect_5(struct Task * task); +void UseFlyEffect_6(struct Task * task); +void UseFlyEffect_7(struct Task * task); +void UseFlyEffect_8(struct Task * task); +void UseFlyEffect_9(struct Task * task); +u8 sub_8087168(void); +bool8 sub_80871AC(u8 flyBlobSpriteId); +void sub_80871C8(u8 flyBlobSpriteId); +void sub_8087204(u8 flyBlobSpriteId, u8 playerSpriteId); +void sub_8087220(struct Sprite * sprite); +void sub_80872F0(struct Sprite * sprite); +void sub_80877FC(struct Sprite * sprite, u8 affineAnimId); +void sub_8087828(struct Sprite * sprite); + +void (*const sUseFlyEffectFuncs[])(struct Task * ) = { + UseFlyEffect_1, + UseFlyEffect_2, + UseFlyEffect_3, + UseFlyEffect_4, + UseFlyEffect_5, + UseFlyEffect_6, + UseFlyEffect_7, + UseFlyEffect_8, + UseFlyEffect_9 +}; + +u8 FldEff_UseFly(void) +{ + u8 taskId = CreateTask(Task_UseFly, 0xfe); + gTasks[taskId].data[1] = gFieldEffectArguments[0]; + return 0; +} + +void Task_UseFly(u8 taskId) +{ + sUseFlyEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); +} + +void UseFlyEffect_1(struct Task * task) +{ + struct ObjectEvent * objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + if (!ObjectEventIsMovementOverridden(objectEvent) || ObjectEventClearHeldMovementIfFinished(objectEvent)) + { + task->data[15] = gPlayerAvatar.flags; + gPlayerAvatar.preventStep = TRUE; + SetPlayerAvatarStateMask(1); + sub_805CB70(); + ObjectEventSetHeldMovement(objectEvent, MOVEMENT_ACTION_START_ANIM_IN_DIRECTION); + task->data[0]++; + } +} + +void UseFlyEffect_2(struct Task * task) +{ + struct ObjectEvent * objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + if (ObjectEventClearHeldMovementIfFinished(objectEvent)) + { + task->data[0]++; + gFieldEffectArguments[0] = task->data[1]; + FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); + } +} + +void UseFlyEffect_3(struct Task * task) +{ + if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON)) + { + struct ObjectEvent * objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + if (task->data[15] & 0x08) + { + sub_80DC44C(objectEvent->mapobj_unk_1A, 2); + sub_80DC478(objectEvent->mapobj_unk_1A, 0); + } + task->data[1] = sub_8087168(); + task->data[0]++; + } +} + +void UseFlyEffect_4(struct Task * task) +{ + if (sub_80871AC(task->data[1])) + { + task->data[0]++; + task->data[2] = 16; + SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_ON_FOOT); + ObjectEventSetHeldMovement(&gObjectEvents[gPlayerAvatar.objectEventId], MOVEMENT_ACTION_FACE_LEFT); + } +} + +void UseFlyEffect_5(struct Task * task) +{ + struct ObjectEvent * objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + if ((task->data[2] == 0 || (--task->data[2]) == 0) && ObjectEventClearHeldMovementIfFinished(objectEvent)) + { + task->data[0]++; + PlaySE(SE_W019); + sub_80871C8(task->data[1]); + } +} + +void UseFlyEffect_6(struct Task * task) +{ + if ((++task->data[2]) >= 8) + { + struct ObjectEvent * objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(2)); + StartSpriteAnim(&gSprites[objectEvent->spriteId], 0x16); + objectEvent->inanimate = 1; + ObjectEventSetHeldMovement(objectEvent, MOVEMENT_ACTION_JUMP_IN_PLACE_LEFT); + task->data[0]++; + task->data[2] = 0; + } +} + +void UseFlyEffect_7(struct Task * task) +{ + if ((++task->data[2]) >= 10) + { + struct ObjectEvent * objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + ObjectEventClearAnimIfSpecialAnimActive(objectEvent); + objectEvent->inanimate = 0; + objectEvent->hasShadow = 0; + sub_8087204(task->data[1], objectEvent->spriteId); + StartSpriteAnim(&gSprites[task->data[1]], gSaveBlock2Ptr->playerGender * 2 + 1); + sub_80877FC(&gSprites[task->data[1]], 0); + gSprites[task->data[1]].callback = sub_8087828; + CameraObjectReset2(); + task->data[0]++; + } +} + +void UseFlyEffect_8(struct Task * task) +{ + if (sub_80871AC(task->data[1])) + { + WarpFadeOutScreen(); + task->data[0]++; + } +} + +void UseFlyEffect_9(struct Task * task) +{ + if (!gPaletteFade.active) + { + FieldEffectActiveListRemove(FLDEFF_USE_FLY); + DestroyTask(FindTaskIdByFunc(Task_UseFly)); + } +} + +u8 sub_8087168(void) +{ + u8 spriteId; + struct Sprite * sprite; + spriteId = CreateSprite(gFieldEffectObjectTemplatePointers[26], 0xff, 0xb4, 0x1); + sprite = &gSprites[spriteId]; + sprite->oam.paletteNum = 0; + sprite->oam.priority = 1; + sprite->callback = sub_8087220; + return spriteId; +} + +u8 sub_80871AC(u8 spriteId) +{ + return gSprites[spriteId].data[7]; +} + +void sub_80871C8(u8 spriteId) +{ + struct Sprite * sprite; + sprite = &gSprites[spriteId]; + sprite->callback = sub_80872F0; + sprite->pos1.x = 0x78; + sprite->pos1.y = 0x00; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + memset(&sprite->data[0], 0, 8 * sizeof(u16) /* zero all data cells */); + sprite->data[6] = 0x40; +} + +void sub_8087204(u8 a0, u8 a1) +{ + gSprites[a0].data[6] = a1; +} + +const union AffineAnimCmd gUnknown_83CC19C[] = { + AFFINEANIMCMD_FRAME( 8, 8, 226, 0), + AFFINEANIMCMD_FRAME(28, 28, 0, 30), + AFFINEANIMCMD_END +}; + +const union AffineAnimCmd gUnknown_83CC1B4[] = { + AFFINEANIMCMD_FRAME(256, 256, 64, 0), + AFFINEANIMCMD_FRAME(-10, -10, 0, 22), + AFFINEANIMCMD_END +}; + +const union AffineAnimCmd *const gUnknown_83CC1CC[] = { + gUnknown_83CC19C, + gUnknown_83CC1B4 +}; + +void sub_8087220(struct Sprite * sprite) +{ + if (sprite->data[7] == 0) + { + if (sprite->data[0] == 0) + { + sprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE; + sprite->affineAnims = gUnknown_83CC1CC; + InitSpriteAffineAnim(sprite); + StartSpriteAffineAnim(sprite, 0); + if (gSaveBlock2Ptr->playerGender == MALE) + sprite->pos1.x = 0x80; + else + sprite->pos1.x = 0x76; + sprite->pos1.y = -0x30; + sprite->data[0]++; + sprite->data[1] = 0x40; + sprite->data[2] = 0x100; + } + sprite->data[1] += (sprite->data[2] >> 8); + sprite->pos2.x = Cos(sprite->data[1], 0x78); + sprite->pos2.y = Sin(sprite->data[1], 0x78); + if (sprite->data[2] < 0x800) + { + sprite->data[2] += 0x60; + } + if (sprite->data[1] > 0x81) + { + sprite->data[7]++; + sprite->oam.affineMode = ST_OAM_AFFINE_OFF; + FreeOamMatrix(sprite->oam.matrixNum); + CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, ST_OAM_AFFINE_OFF); + } + } +} + +void sub_80872F0(struct Sprite * sprite) +{ + sprite->pos2.x = Cos(sprite->data[2], 0x8c); + sprite->pos2.y = Sin(sprite->data[2], 0x48); + sprite->data[2] = (sprite->data[2] + 4) & 0xff; + if (sprite->data[6] != MAX_SPRITES) + { + struct Sprite * sprite1 = &gSprites[sprite->data[6]]; + sprite1->coordOffsetEnabled = 0; + sprite1->pos1.x = sprite->pos1.x + sprite->pos2.x; + sprite1->pos1.y = sprite->pos1.y + sprite->pos2.y - 8; + sprite1->pos2.x = 0; + sprite1->pos2.y = 0; + } + if (sprite->data[2] >= 0x80) + { + sprite->data[7] = 1; + } +} + +void sub_8087364(struct Sprite * sprite) +{ + if (sprite->data[7] == 0) + { + if (sprite->data[0] == 0) + { + sprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE; + sprite->affineAnims = gUnknown_83CC1CC; + InitSpriteAffineAnim(sprite); + StartSpriteAffineAnim(sprite, 1); + if (gSaveBlock2Ptr->playerGender == MALE) + sprite->pos1.x = 0x70; + else + sprite->pos1.x = 0x64; + sprite->pos1.y = -0x20; + sprite->data[0]++; + sprite->data[1] = 0xf0; + sprite->data[2] = 0x800; + sprite->data[4] = 0x80; + } + sprite->data[1] += sprite->data[2] >> 8; + sprite->data[3] += sprite->data[2] >> 8; + sprite->data[1] &= 0xff; + sprite->pos2.x = Cos(sprite->data[1], 0x20); + sprite->pos2.y = Sin(sprite->data[1], 0x78); + if (sprite->data[2] > 0x100) + { + sprite->data[2] -= sprite->data[4]; + } + if (sprite->data[4] < 0x100) + { + sprite->data[4] += 24; + } + if (sprite->data[2] < 0x100) + { + sprite->data[2] = 0x100; + } + if (sprite->data[3] >= 60) + { + sprite->data[7]++; + sprite->oam.affineMode = ST_OAM_AFFINE_OFF; + FreeOamMatrix(sprite->oam.matrixNum); + sprite->invisible = TRUE; + } + } +} + +void sub_8087458(u8 spriteId) +{ + sub_80871C8(spriteId); + gSprites[spriteId].callback = sub_8087364; +} + +void Task_FldEffFlyIn(u8 taskId); +void FlyInEffect_1(struct Task * task); +void FlyInEffect_2(struct Task * task); +void FlyInEffect_3(struct Task * task); +void FlyInEffect_4(struct Task * task); +void FlyInEffect_5(struct Task * task); +void FlyInEffect_6(struct Task * task); +void FlyInEffect_7(struct Task * task); +void sub_80878C0(struct Sprite * sprite); + +void (*const sFlyInEffectFuncs[])(struct Task * task) = { + FlyInEffect_1, + FlyInEffect_2, + FlyInEffect_3, + FlyInEffect_4, + FlyInEffect_5, + FlyInEffect_6, + FlyInEffect_7 +}; + +u32 FldEff_FlyIn(void) +{ + CreateTask(Task_FldEffFlyIn, 0xfe); + return 0; +} + +void Task_FldEffFlyIn(u8 taskId) +{ + sFlyInEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); +} + +void FlyInEffect_1(struct Task * task) +{ + struct ObjectEvent * objectEvent; + objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + if (!ObjectEventIsMovementOverridden(objectEvent) || ObjectEventClearHeldMovementIfFinished(objectEvent)) + { + task->data[0]++; + task->data[2] = 33; + task->data[15] = gPlayerAvatar.flags; + gPlayerAvatar.preventStep = TRUE; + SetPlayerAvatarStateMask(0x01); + if (task->data[15] & 0x08) + { + sub_80DC44C(objectEvent->mapobj_unk_1A, 0); + } + ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(2)); + CameraObjectReset2(); + ObjectEventTurn(objectEvent, DIR_WEST); + StartSpriteAnim(&gSprites[objectEvent->spriteId], 0x16); + objectEvent->invisible = FALSE; + task->data[1] = sub_8087168(); + sub_80871C8(task->data[1]); + sub_8087204(task->data[1], objectEvent->spriteId); + StartSpriteAnim(&gSprites[task->data[1]], gSaveBlock2Ptr->playerGender * 2 + 2); + sub_80877FC(&gSprites[task->data[1]], 1); + gSprites[task->data[1]].callback = sub_8087828; + } +} + +void FlyInEffect_2(struct Task * task) +{ + struct ObjectEvent * objectEvent; + struct Sprite * sprite; + sub_80878C0(&gSprites[task->data[1]]); + if (task->data[2] == 0 || (--task->data[2]) == 0) + { + objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + sprite = &gSprites[objectEvent->spriteId]; + sub_8087204(task->data[1], 0x40); + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + task->data[0]++; + task->data[2] = 0; + } +} + +void FlyInEffect_3(struct Task * task) +{ + s16 gUnknown_83CC1F0[18] = { + -2, + -4, + -5, + -6, + -7, + -8, + -8, + -8, + -7, + -7, + -6, + -5, + -3, + -2, + 0, + 2, + 4, + 8 + }; + struct Sprite * sprite = &gSprites[gPlayerAvatar.spriteId]; + sprite->pos2.y = gUnknown_83CC1F0[task->data[2]]; + if ((++task->data[2]) >= 18) + { + task->data[0]++; + } +} + +void FlyInEffect_4(struct Task * task) +{ + struct ObjectEvent * objectEvent; + struct Sprite * sprite; + if (sub_80871AC(task->data[1])) + { + objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + sprite = &gSprites[objectEvent->spriteId]; + objectEvent->inanimate = 0; + sub_805F724(objectEvent, objectEvent->currentCoords.x, objectEvent->currentCoords.y); + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->coordOffsetEnabled = 1; + sub_805CB70(); + ObjectEventSetHeldMovement(objectEvent, MOVEMENT_ACTION_START_ANIM_IN_DIRECTION); + task->data[0]++; + } +} + +void FlyInEffect_5(struct Task * task) +{ + if (ObjectEventClearHeldMovementIfFinished(&gObjectEvents[gPlayerAvatar.objectEventId])) + { + task->data[0]++; + sub_8087458(task->data[1]); + } +} + +void FlyInEffect_6(struct Task * task) +{ + if (sub_80871AC(task->data[1])) + { + DestroySprite(&gSprites[task->data[1]]); + task->data[0]++; + task->data[1] = 0x10; + } +} + +void FlyInEffect_7(struct Task * task) +{ + u8 state; + struct ObjectEvent * objectEvent; + if ((--task->data[1]) == 0) + { + objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + state = 0; + if (task->data[15] & 0x08) + { + state = 2; + sub_80DC44C(objectEvent->mapobj_unk_1A, 1); + } + ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(state)); + ObjectEventTurn(objectEvent, DIR_SOUTH); + gPlayerAvatar.flags = task->data[15]; + gPlayerAvatar.preventStep = FALSE; + FieldEffectActiveListRemove(FLDEFF_FLY_IN); + DestroyTask(FindTaskIdByFunc(Task_FldEffFlyIn)); + } +} + +const union AffineAnimCmd gUnknown_83CC214[] = { + AFFINEANIMCMD_FRAME(24, 24, 0, 1), + AFFINEANIMCMD_JUMP(0) +}; + +const union AffineAnimCmd gUnknown_83CC224[] = { + AFFINEANIMCMD_FRAME(512, 512, 0, 1), + AFFINEANIMCMD_FRAME(-16, -16, 0, 1), + AFFINEANIMCMD_JUMP(1) +}; + +const union AffineAnimCmd *const gUnknown_83CC23C[] = { + gUnknown_83CC214, + gUnknown_83CC224 +}; + +void sub_80877FC(struct Sprite * sprite, u8 affineAnimId) +{ + sprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE; + sprite->affineAnims = gUnknown_83CC23C; + InitSpriteAffineAnim(sprite); + StartSpriteAffineAnim(sprite, affineAnimId); +} + +void sub_8087828(struct Sprite * sprite) +{ + struct Sprite * sprite2; + sprite->pos2.x = Cos(sprite->data[2], 0xB4); + sprite->pos2.y = Sin(sprite->data[2], 0x48); + sprite->data[2] += 2; + sprite->data[2] &= 0xFF; + if (sprite->data[6] != MAX_SPRITES) + { + sprite2 = &gSprites[sprite->data[6]]; + sprite2->coordOffsetEnabled = FALSE; + sprite2->pos1.x = sprite->pos1.x + sprite->pos2.x; + sprite2->pos1.y = sprite->pos1.y + sprite->pos2.y - 8; + sprite2->pos2.x = 0; + sprite2->pos2.y = 0; + } + if (sprite->data[2] >= 0x80) + { + sprite->data[7] = 1; + sprite->oam.affineMode = ST_OAM_AFFINE_OFF; + FreeOamMatrix(sprite->oam.matrixNum); + CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, ST_OAM_AFFINE_OFF); + } +} + +void sub_80878C0(struct Sprite * sprite) +{ + if (sprite->oam.affineMode != ST_OAM_AFFINE_OFF) + { + if (gOamMatrices[sprite->oam.matrixNum].a == 0x100 || gOamMatrices[sprite->oam.matrixNum].d == 0x100) + { + sprite->oam.affineMode = ST_OAM_AFFINE_OFF; + FreeOamMatrix(sprite->oam.matrixNum); + CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, ST_OAM_AFFINE_OFF); + StartSpriteAnim(sprite, 0); + sprite->callback = sub_80872F0; + } + } +} From a506860558e71be26b4c37e9ac67b431ff0674a0 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 2 Mar 2020 09:18:32 -0500 Subject: [PATCH 19/26] field effect 0x43 --- asm/field_effect.s | 199 ------------------------------------ data/field_effect_scripts.s | 2 +- src/field_effect.c | 64 ++++++++++++ 3 files changed, 65 insertions(+), 200 deletions(-) diff --git a/asm/field_effect.s b/asm/field_effect.s index b955fe12c..3c633130e 100644 --- a/asm/field_effect.s +++ b/asm/field_effect.s @@ -5,205 +5,6 @@ .text - thumb_func_start sub_8087924 -sub_8087924: @ 8087924 - push {r4-r7,lr} - sub sp, 0x4 - ldr r7, _080879C4 @ =gFieldEffectArguments - ldrb r0, [r7] - ldrb r1, [r7, 0x4] - ldrb r2, [r7, 0x8] - mov r3, sp - bl TryGetObjectEventIdByLocalIdAndMap - lsls r0, 24 - cmp r0, 0 - bne _080879BA - mov r0, sp - ldrb r0, [r0] - lsls r4, r0, 3 - adds r4, r0 - lsls r4, 2 - ldr r0, _080879C8 @ =gObjectEvents - adds r4, r0 - movs r0, 0x10 - ldrsh r5, [r4, r0] - subs r5, 0x7 - movs r0, 0x12 - ldrsh r6, [r4, r0] - subs r6, 0x7 - ldr r1, [r7, 0xC] - subs r5, r1, r5 - lsls r5, 4 - ldr r2, [r7, 0x10] - subs r6, r2, r6 - lsls r6, 4 - adds r1, 0x7 - lsls r1, 16 - asrs r1, 16 - adds r2, 0x7 - lsls r2, 16 - asrs r2, 16 - adds r0, r4, 0 - bl npc_coords_shift - ldr r0, _080879CC @ =sub_80879D8 - movs r1, 0x50 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r1, _080879D0 @ =gTasks - lsls r2, r0, 2 - adds r2, r0 - lsls r2, 3 - adds r2, r1 - ldrb r0, [r4, 0x4] - strh r0, [r2, 0xA] - ldr r3, _080879D4 @ =gSprites - ldrb r1, [r4, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - ldrh r0, [r0, 0x20] - adds r0, r5 - strh r0, [r2, 0xC] - ldrb r1, [r4, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - ldrh r0, [r0, 0x22] - adds r0, r6 - strh r0, [r2, 0xE] - ldr r0, [r7, 0x14] - strh r0, [r2, 0x18] - mov r0, sp - ldrb r0, [r0] - strh r0, [r2, 0x1A] -_080879BA: - movs r0, 0 - add sp, 0x4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080879C4: .4byte gFieldEffectArguments -_080879C8: .4byte gObjectEvents -_080879CC: .4byte sub_80879D8 -_080879D0: .4byte gTasks -_080879D4: .4byte gSprites - thumb_func_end sub_8087924 - - thumb_func_start sub_80879D8 -sub_80879D8: @ 80879D8 - push {r4-r7,lr} - lsls r0, 24 - lsrs r7, r0, 24 - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - ldr r1, _08087A04 @ =gTasks+0x8 - adds r5, r0, r1 - movs r0, 0x2 - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08087A08 @ =gSprites - adds r6, r0, r1 - movs r1, 0 - ldrsh r0, [r5, r1] - cmp r0, 0 - beq _08087A0C - cmp r0, 0x1 - beq _08087A4A - b _08087AA8 - .align 2, 0 -_08087A04: .4byte gTasks+0x8 -_08087A08: .4byte gSprites -_08087A0C: - ldrh r0, [r6, 0x20] - lsls r0, 4 - strh r0, [r5, 0x8] - ldrh r0, [r6, 0x22] - lsls r0, 4 - strh r0, [r5, 0xA] - movs r2, 0x4 - ldrsh r0, [r5, r2] - lsls r0, 4 - movs r2, 0x8 - ldrsh r1, [r5, r2] - subs r0, r1 - movs r2, 0x10 - ldrsh r1, [r5, r2] - bl __divsi3 - strh r0, [r5, 0xC] - movs r1, 0x6 - ldrsh r0, [r5, r1] - lsls r0, 4 - movs r2, 0xA - ldrsh r1, [r5, r2] - subs r0, r1 - movs r2, 0x10 - ldrsh r1, [r5, r2] - bl __divsi3 - strh r0, [r5, 0xE] - ldrh r0, [r5] - adds r0, 0x1 - strh r0, [r5] -_08087A4A: - ldrh r1, [r5, 0x10] - movs r2, 0x10 - ldrsh r0, [r5, r2] - cmp r0, 0 - beq _08087A78 - subs r0, r1, 0x1 - strh r0, [r5, 0x10] - ldrh r1, [r5, 0xC] - ldrh r0, [r5, 0x8] - adds r1, r0 - strh r1, [r5, 0x8] - ldrh r0, [r5, 0xE] - ldrh r2, [r5, 0xA] - adds r0, r2 - strh r0, [r5, 0xA] - lsls r1, 16 - asrs r1, 20 - strh r1, [r6, 0x20] - ldrh r0, [r5, 0xA] - lsls r0, 16 - asrs r0, 20 - strh r0, [r6, 0x22] - b _08087AA8 -_08087A78: - movs r1, 0x12 - ldrsh r0, [r5, r1] - lsls r4, r0, 3 - adds r4, r0 - lsls r4, 2 - ldr r0, _08087AB0 @ =gObjectEvents - adds r4, r0 - ldrh r0, [r5, 0x4] - strh r0, [r6, 0x20] - ldrh r0, [r5, 0x6] - strh r0, [r6, 0x22] - adds r0, r4, 0 - bl npc_coords_shift_still - ldrb r0, [r4] - movs r1, 0x8 - orrs r0, r1 - strb r0, [r4] - movs r0, 0x43 - bl FieldEffectActiveListRemove - adds r0, r7, 0 - bl DestroyTask -_08087AA8: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08087AB0: .4byte gObjectEvents - thumb_func_end sub_80879D8 - thumb_func_start sub_8087AB4 sub_8087AB4: @ 8087AB4 push {r4,lr} diff --git a/data/field_effect_scripts.s b/data/field_effect_scripts.s index 3b30c8878..484de872b 100644 --- a/data/field_effect_scripts.s +++ b/data/field_effect_scripts.s @@ -334,7 +334,7 @@ gFldEffScript_DoubleExclMarkIcon:: @ 81D9998 end gFldEffScript_Unk43:: @ 81D999E - callnative sub_8087924 + callnative FldEff_Unk43 end gFldEffScript_Unk44:: @ 81D99A4 diff --git a/src/field_effect.c b/src/field_effect.c index 81b572893..a38924549 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -3624,3 +3624,67 @@ void sub_80878C0(struct Sprite * sprite) } } } + +void Task_FldEffUnk43(u8 taskId); + +bool8 FldEff_Unk43(void) +{ + u8 taskId; + u8 objectEventIdBuffer; + s32 x; + s32 y; + struct ObjectEvent * objectEvent; + if (!TryGetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2], &objectEventIdBuffer)) + { + objectEvent = &gObjectEvents[objectEventIdBuffer]; + x = objectEvent->currentCoords.x - 7; + y = objectEvent->currentCoords.y - 7; + x = (gFieldEffectArguments[3] - x) * 16; + y = (gFieldEffectArguments[4] - y) * 16; + npc_coords_shift(objectEvent, gFieldEffectArguments[3] + 7, gFieldEffectArguments[4] + 7); + taskId = CreateTask(Task_FldEffUnk43, 0x50); + gTasks[taskId].data[1] = objectEvent->spriteId; + gTasks[taskId].data[2] = gSprites[objectEvent->spriteId].pos1.x + x; + gTasks[taskId].data[3] = gSprites[objectEvent->spriteId].pos1.y + y; + gTasks[taskId].data[8] = gFieldEffectArguments[5]; + gTasks[taskId].data[9] = objectEventIdBuffer; + } + return FALSE; +} + +void Task_FldEffUnk43(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + struct Sprite * sprite = &gSprites[data[1]]; + struct ObjectEvent * objectEvent; + switch (data[0]) + { + case 0: + data[4] = sprite->pos1.x << 4; + data[5] = sprite->pos1.y << 4; + data[6] = ((data[2] << 4) - data[4]) / data[8]; + data[7] = ((data[3] << 4) - data[5]) / data[8]; + data[0]++; + // fallthrough + case 1: + if (data[8] != 0) + { + data[8]--; + data[4] += data[6]; + data[5] += data[7]; + sprite->pos1.x = data[4] >> 4; + sprite->pos1.y = data[5] >> 4; + } + else + { + objectEvent = &gObjectEvents[data[9]]; + sprite->pos1.x = data[2]; + sprite->pos1.y = data[3]; + npc_coords_shift_still(objectEvent); + objectEvent->triggerGroundEffectsOnStop = TRUE; + FieldEffectActiveListRemove(FLDEFF_UNK_43); + DestroyTask(taskId); + } + break; + } +} From a7966b5047cde2c32d3222847b1a048b5aaef343 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 2 Mar 2020 09:47:33 -0500 Subject: [PATCH 20/26] Finish field_effect.c --- asm/event_object_movement.s | 16 +- asm/field_camera.s | 24 +- asm/field_effect.s | 499 ------------------------------ asm/field_player_avatar.s | 4 +- asm/overworld.s | 16 +- data/field_effect.s | 43 --- data/field_effect_scripts.s | 10 +- include/constants/field_effects.h | 4 +- include/field_camera.h | 7 +- ld_script.txt | 2 - src/field_effect.c | 237 +++++++++++++- src/field_specials.c | 4 +- sym_common.txt | 4 +- 13 files changed, 272 insertions(+), 598 deletions(-) delete mode 100644 asm/field_effect.s delete mode 100644 data/field_effect.s diff --git a/asm/event_object_movement.s b/asm/event_object_movement.s index 163ebe51f..cf5b8c54d 100644 --- a/asm/event_object_movement.s +++ b/asm/event_object_movement.s @@ -12893,12 +12893,12 @@ sub_8063AD4: @ 8063AD4 subs r1, r0 lsls r1, 4 strh r1, [r3] - ldr r1, _08063B14 @ =gUnknown_300506C + ldr r1, _08063B14 @ =gTotalCameraPixelOffsetX ldrh r0, [r2] ldrh r1, [r1] subs r0, r1 strh r0, [r2] - ldr r1, _08063B18 @ =gUnknown_3005068 + ldr r1, _08063B18 @ =gTotalCameraPixelOffsetY ldrh r0, [r3] ldrh r1, [r1] subs r0, r1 @@ -12908,8 +12908,8 @@ sub_8063AD4: @ 8063AD4 bx r0 .align 2, 0 _08063B10: .4byte gSaveBlock1Ptr -_08063B14: .4byte gUnknown_300506C -_08063B18: .4byte gUnknown_3005068 +_08063B14: .4byte gTotalCameraPixelOffsetX +_08063B18: .4byte gTotalCameraPixelOffsetY thumb_func_end sub_8063AD4 thumb_func_start sub_8063B1C @@ -12921,7 +12921,7 @@ sub_8063B1C: @ 8063B1C lsrs r5, r0, 16 lsls r1, 16 lsrs r6, r1, 16 - ldr r0, _08063BB0 @ =gUnknown_300506C + ldr r0, _08063BB0 @ =gTotalCameraPixelOffsetX ldrh r0, [r0] negs r0, r0 ldr r1, _08063BB4 @ =gUnknown_3005050 @@ -12929,7 +12929,7 @@ sub_8063B1C: @ 8063B1C subs r0, r2 lsls r0, 16 lsrs r3, r0, 16 - ldr r0, _08063BB8 @ =gUnknown_3005068 + ldr r0, _08063BB8 @ =gTotalCameraPixelOffsetY ldrh r0, [r0] negs r0, r0 ldr r1, [r1, 0x14] @@ -12992,9 +12992,9 @@ _08063B7C: pop {r0} bx r0 .align 2, 0 -_08063BB0: .4byte gUnknown_300506C +_08063BB0: .4byte gTotalCameraPixelOffsetX _08063BB4: .4byte gUnknown_3005050 -_08063BB8: .4byte gUnknown_3005068 +_08063BB8: .4byte gTotalCameraPixelOffsetY _08063BBC: .4byte 0xfff00000 _08063BC0: .4byte gSaveBlock1Ptr thumb_func_end sub_8063B1C diff --git a/asm/field_camera.s b/asm/field_camera.s index cf9fff21d..aa906d6fc 100644 --- a/asm/field_camera.s +++ b/asm/field_camera.s @@ -956,11 +956,11 @@ _0805AC7E: adds r1, r7, 0 mov r2, r8 bl coords8_add - ldr r1, _0805ACAC @ =gUnknown_300506C + ldr r1, _0805ACAC @ =gTotalCameraPixelOffsetX ldrh r0, [r1] subs r0, r7 strh r0, [r1] - ldr r1, _0805ACB0 @ =gUnknown_3005068 + ldr r1, _0805ACB0 @ =gTotalCameraPixelOffsetY ldrh r0, [r1] mov r2, r8 subs r0, r2 @@ -973,8 +973,8 @@ _0805AC7E: .align 2, 0 _0805ACA4: .4byte gUnknown_3005050 _0805ACA8: .4byte gUnknown_3000E90 -_0805ACAC: .4byte gUnknown_300506C -_0805ACB0: .4byte gUnknown_3005068 +_0805ACAC: .4byte gTotalCameraPixelOffsetX +_0805ACB0: .4byte gTotalCameraPixelOffsetY thumb_func_end CameraUpdate thumb_func_start sub_805ACB4 @@ -989,12 +989,12 @@ sub_805ACB4: @ 805ACB4 asrs r1, 16 bl UpdateObjectEventsForCameraUpdate bl DrawWholeMapView - ldr r1, _0805ACE8 @ =gUnknown_300506C + ldr r1, _0805ACE8 @ =gTotalCameraPixelOffsetX lsls r4, 4 ldrh r0, [r1] subs r0, r4 strh r0, [r1] - ldr r1, _0805ACEC @ =gUnknown_3005068 + ldr r1, _0805ACEC @ =gTotalCameraPixelOffsetY lsls r5, 4 ldrh r0, [r1] subs r0, r5 @@ -1003,8 +1003,8 @@ sub_805ACB4: @ 805ACB4 pop {r0} bx r0 .align 2, 0 -_0805ACE8: .4byte gUnknown_300506C -_0805ACEC: .4byte gUnknown_3005068 +_0805ACE8: .4byte gTotalCameraPixelOffsetX +_0805ACEC: .4byte gTotalCameraPixelOffsetY thumb_func_end sub_805ACB4 thumb_func_start sub_805ACF0 @@ -1184,14 +1184,14 @@ UpdateCameraPanning: @ 805AE28 bl _call_via_r0 _0805AE36: ldr r2, _0805AE5C @ =gSpriteCoordOffsetX - ldr r0, _0805AE60 @ =gUnknown_300506C + ldr r0, _0805AE60 @ =gTotalCameraPixelOffsetX ldr r1, _0805AE64 @ =gUnknown_3000E98 ldrh r0, [r0] ldrh r1, [r1] subs r0, r1 strh r0, [r2] ldr r2, _0805AE68 @ =gSpriteCoordOffsetY - ldr r0, _0805AE6C @ =gUnknown_3005068 + ldr r0, _0805AE6C @ =gTotalCameraPixelOffsetY ldr r1, _0805AE70 @ =gUnknown_3000E9A ldrh r0, [r0] ldrh r1, [r1] @@ -1203,10 +1203,10 @@ _0805AE36: .align 2, 0 _0805AE58: .4byte gUnknown_3000EA0 _0805AE5C: .4byte gSpriteCoordOffsetX -_0805AE60: .4byte gUnknown_300506C +_0805AE60: .4byte gTotalCameraPixelOffsetX _0805AE64: .4byte gUnknown_3000E98 _0805AE68: .4byte gSpriteCoordOffsetY -_0805AE6C: .4byte gUnknown_3005068 +_0805AE6C: .4byte gTotalCameraPixelOffsetY _0805AE70: .4byte gUnknown_3000E9A thumb_func_end UpdateCameraPanning diff --git a/asm/field_effect.s b/asm/field_effect.s deleted file mode 100644 index 3c633130e..000000000 --- a/asm/field_effect.s +++ /dev/null @@ -1,499 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_8087AB4 -sub_8087AB4: @ 8087AB4 - push {r4,lr} - sub sp, 0x4 - ldr r4, _08087AF8 @ =gFieldEffectArguments - ldrb r0, [r4] - ldrb r1, [r4, 0x4] - ldrb r2, [r4, 0x8] - mov r3, sp - bl TryGetObjectEventIdByLocalIdAndMap - lsls r0, 24 - cmp r0, 0 - bne _08087B04 - ldr r0, _08087AFC @ =sub_8087BC0 - movs r1, 0x50 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08087B00 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - mov r0, sp - ldrb r0, [r0] - strh r0, [r1, 0xC] - ldr r0, [r4] - strh r0, [r1, 0x14] - ldr r0, [r4, 0x4] - strh r0, [r1, 0x16] - ldr r0, [r4, 0x8] - strh r0, [r1, 0x18] - b _08087B0A - .align 2, 0 -_08087AF8: .4byte gFieldEffectArguments -_08087AFC: .4byte sub_8087BC0 -_08087B00: .4byte gTasks -_08087B04: - movs r0, 0x44 - bl FieldEffectActiveListRemove -_08087B0A: - movs r0, 0 - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8087AB4 - - thumb_func_start sub_8087B14 -sub_8087B14: @ 8087B14 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _08087B4C @ =gTasks+0x8 - adds r4, r0, r1 - movs r1, 0xE - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _08087B50 - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x14 - ble _08087B54 - movs r0, 0 - strh r0, [r4, 0xC] - ldrh r1, [r4, 0xA] - movs r2, 0xA - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _08087B54 - subs r0, r1, 0x1 - b _08087B52 - .align 2, 0 -_08087B4C: .4byte gTasks+0x8 -_08087B50: - movs r0, 0x4 -_08087B52: - strh r0, [r4, 0xA] -_08087B54: - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _08087B8E - movs r0, 0 - strh r0, [r4] - ldrh r0, [r4, 0x2] - adds r0, 0x1 - strh r0, [r4, 0x2] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08087B84 - ldrh r1, [r4, 0xA] - negs r1, r1 - lsls r1, 16 - asrs r1, 16 - movs r0, 0 - bl SetCameraPanning - b _08087B8E -_08087B84: - movs r0, 0xA - ldrsh r1, [r4, r0] - movs r0, 0 - bl SetCameraPanning -_08087B8E: - bl UpdateCameraPanning - movs r1, 0xA - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _08087BA0 - adds r0, r5, 0 - bl DestroyTask -_08087BA0: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8087B14 - - thumb_func_start sub_8087BA8 -sub_8087BA8: @ 8087BA8 - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08087BBC @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r0, 0x1 - strh r0, [r1, 0x16] - bx lr - .align 2, 0 -_08087BBC: .4byte gTasks - thumb_func_end sub_8087BA8 - - thumb_func_start sub_8087BC0 -sub_8087BC0: @ 8087BC0 - push {r4,r5,lr} - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - lsls r4, r5, 2 - adds r4, r5 - lsls r4, 3 - ldr r0, _08087BF8 @ =gTasks+0x8 - adds r4, r0 - bl InstallCameraPanAheadCallback - movs r0, 0 - bl SetCameraPanningCallback - ldr r1, _08087BFC @ =gUnknown_83CC244 - movs r2, 0x2 - ldrsh r0, [r4, r2] - lsls r0, 2 - adds r0, r1 - ldr r2, [r0] - adds r0, r4, 0 - adds r1, r5, 0 - bl _call_via_r2 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08087BF8: .4byte gTasks+0x8 -_08087BFC: .4byte gUnknown_83CC244 - thumb_func_end sub_8087BC0 - - thumb_func_start sub_8087C00 -sub_8087C00: @ 8087C00 - push {r4,r5,lr} - adds r5, r0, 0 - ldr r0, _08087C28 @ =sub_8087B14 - movs r1, 0x5A - bl CreateTask - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x51 - bl PlaySE - strh r4, [r5, 0xA] - ldrh r0, [r5, 0x2] - adds r0, 0x1 - strh r0, [r5, 0x2] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08087C28: .4byte sub_8087B14 - thumb_func_end sub_8087C00 - - thumb_func_start sub_8087C2C -sub_8087C2C: @ 8087C2C - push {r4-r7,lr} - sub sp, 0x4 - adds r7, r0, 0 - ldrh r0, [r7, 0x6] - adds r0, 0x1 - strh r0, [r7, 0x6] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x78 - ble _08087C9A - ldr r2, _08087CA4 @ =gObjectEvents - movs r1, 0x4 - ldrsh r0, [r7, r1] - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - ldrb r0, [r1, 0x4] - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - ldr r0, _08087CA8 @ =gSprites - adds r4, r0 - ldrb r0, [r1, 0x1] - movs r2, 0x20 - orrs r0, r2 - strb r0, [r1, 0x1] - ldr r6, _08087CAC @ =0x0000ffff - ldr r5, _08087CB0 @ =0x00007fff - adds r0, r6, 0 - movs r1, 0x10 - adds r2, r5, 0 - bl BlendPalettes - str r5, [sp] - adds r0, r6, 0 - movs r1, 0 - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - adds r0, r4, 0 - bl sub_8087CFC - movs r0, 0x50 - bl PlaySE - ldrb r0, [r7, 0xA] - bl sub_8087BA8 - movs r0, 0 - strh r0, [r7, 0x6] - ldrh r0, [r7, 0x2] - adds r0, 0x1 - strh r0, [r7, 0x2] -_08087C9A: - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08087CA4: .4byte gObjectEvents -_08087CA8: .4byte gSprites -_08087CAC: .4byte 0x0000ffff -_08087CB0: .4byte 0x00007fff - thumb_func_end sub_8087C2C - - thumb_func_start sub_8087CB4 -sub_8087CB4: @ 8087CB4 - push {r4,r5,lr} - adds r4, r0, 0 - lsls r1, 24 - lsrs r5, r1, 24 - ldr r0, _08087CF4 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08087CEE - ldr r0, _08087CF8 @ =sub_8087B14 - bl FuncIsActiveTask - lsls r0, 24 - cmp r0, 0 - bne _08087CEE - bl InstallCameraPanAheadCallback - ldrb r0, [r4, 0xC] - ldrb r1, [r4, 0xE] - ldrb r2, [r4, 0x10] - bl RemoveObjectEventByLocalIdAndMap - movs r0, 0x44 - bl FieldEffectActiveListRemove - adds r0, r5, 0 - bl DestroyTask -_08087CEE: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08087CF4: .4byte gPaletteFade -_08087CF8: .4byte sub_8087B14 - thumb_func_end sub_8087CB4 - - thumb_func_start sub_8087CFC -sub_8087CFC: @ 8087CFC - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r6, r0, 0 - ldr r0, _08087D80 @ =gUnknown_300506C - movs r1, 0 - ldrsh r2, [r0, r1] - movs r3, 0x20 - ldrsh r0, [r6, r3] - adds r2, r0 - movs r1, 0x24 - ldrsh r0, [r6, r1] - adds r2, r0 - ldr r0, _08087D84 @ =gUnknown_3005068 - movs r3, 0 - ldrsh r0, [r0, r3] - movs r3, 0x22 - ldrsh r1, [r6, r3] - adds r0, r1 - movs r3, 0x26 - ldrsh r1, [r6, r3] - adds r0, r1 - subs r0, 0x4 - movs r5, 0 - lsls r2, 16 - mov r8, r2 - lsls r7, r0, 16 -_08087D32: - ldr r0, _08087D88 @ =gUnknown_83CC2A0 - mov r2, r8 - asrs r1, r2, 16 - asrs r2, r7, 16 - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x40 - beq _08087D6E - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - ldr r0, _08087D8C @ =gSprites - adds r4, r0 - lsls r1, r5, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl StartSpriteAnim - strh r5, [r4, 0x2E] - ldrb r1, [r6, 0x5] - lsrs r1, 4 - lsls r1, 4 - ldrb r2, [r4, 0x5] - movs r0, 0xF - ands r0, r2 - orrs r0, r1 - strb r0, [r4, 0x5] -_08087D6E: - adds r5, 0x1 - cmp r5, 0x3 - ble _08087D32 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08087D80: .4byte gUnknown_300506C -_08087D84: .4byte gUnknown_3005068 -_08087D88: .4byte gUnknown_83CC2A0 -_08087D8C: .4byte gSprites - thumb_func_end sub_8087CFC - - thumb_func_start sub_8087D90 -sub_8087D90: @ 8087D90 - push {lr} - adds r1, r0, 0 - movs r2, 0x2E - ldrsh r0, [r1, r2] - cmp r0, 0x1 - beq _08087DBC - cmp r0, 0x1 - bgt _08087DA6 - cmp r0, 0 - beq _08087DB0 - b _08087DDA -_08087DA6: - cmp r0, 0x2 - beq _08087DC8 - cmp r0, 0x3 - beq _08087DCE - b _08087DDA -_08087DB0: - ldrh r0, [r1, 0x20] - subs r0, 0x10 - strh r0, [r1, 0x20] - ldrh r0, [r1, 0x22] - subs r0, 0xC - b _08087DD8 -_08087DBC: - ldrh r0, [r1, 0x20] - adds r0, 0x10 - strh r0, [r1, 0x20] - ldrh r0, [r1, 0x22] - subs r0, 0xC - b _08087DD8 -_08087DC8: - ldrh r0, [r1, 0x20] - subs r0, 0x10 - b _08087DD2 -_08087DCE: - ldrh r0, [r1, 0x20] - adds r0, 0x10 -_08087DD2: - strh r0, [r1, 0x20] - ldrh r0, [r1, 0x22] - adds r0, 0xC -_08087DD8: - strh r0, [r1, 0x22] -_08087DDA: - ldrh r0, [r1, 0x20] - adds r0, 0x4 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0xF8 - bhi _08087DF6 - movs r0, 0x22 - ldrsh r2, [r1, r0] - movs r0, 0x4 - negs r0, r0 - cmp r2, r0 - blt _08087DF6 - cmp r2, 0xA4 - ble _08087DFC -_08087DF6: - adds r0, r1, 0 - bl DestroySprite -_08087DFC: - pop {r0} - bx r0 - thumb_func_end sub_8087D90 - - thumb_func_start sub_8087E00 -sub_8087E00: @ 8087E00 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _08087E24 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08087E1E - movs r0, 0x45 - bl FieldEffectActiveListRemove - adds r0, r4, 0 - bl DestroyTask -_08087E1E: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08087E24: .4byte gPaletteFade - thumb_func_end sub_8087E00 - - thumb_func_start sub_8087E28 -sub_8087E28: @ 8087E28 - push {r4,r5,lr} - sub sp, 0x4 - movs r4, 0x1 - negs r4, r4 - ldr r5, _08087E5C @ =0x00007fff - adds r0, r4, 0 - movs r1, 0x10 - adds r2, r5, 0 - bl BlendPalettes - str r5, [sp] - adds r0, r4, 0 - adds r1, r4, 0 - movs r2, 0xF - movs r3, 0 - bl BeginNormalPaletteFade - ldr r0, _08087E60 @ =sub_8087E00 - movs r1, 0x5A - bl CreateTask - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08087E5C: .4byte 0x00007fff -_08087E60: .4byte sub_8087E00 - thumb_func_end sub_8087E28 - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/field_player_avatar.s b/asm/field_player_avatar.s index 6e425d2c7..ccf946752 100644 --- a/asm/field_player_avatar.s +++ b/asm/field_player_avatar.s @@ -5337,7 +5337,7 @@ _0805DBBA: strh r0, [r7, 0x22] movs r2, 0x22 ldrsh r1, [r7, r2] - ldr r0, _0805DBF0 @ =gUnknown_3005068 + ldr r0, _0805DBF0 @ =gTotalCameraPixelOffsetY movs r2, 0 ldrsh r0, [r0, r2] adds r1, r0 @@ -5350,7 +5350,7 @@ _0805DBBA: strh r0, [r5] b _0805DBFA .align 2, 0 -_0805DBF0: .4byte gUnknown_3005068 +_0805DBF0: .4byte gTotalCameraPixelOffsetY _0805DBF4: adds r0, r2, 0 bl DestroyTask diff --git a/asm/overworld.s b/asm/overworld.s index d8b87c987..301b1e01d 100644 --- a/asm/overworld.s +++ b/asm/overworld.s @@ -4659,10 +4659,10 @@ _0805706A: thumb_func_start sub_8057074 sub_8057074: @ 8057074 push {lr} - ldr r0, _08057094 @ =gUnknown_300506C + ldr r0, _08057094 @ =gTotalCameraPixelOffsetX movs r1, 0 strh r1, [r0] - ldr r0, _08057098 @ =gUnknown_3005068 + ldr r0, _08057098 @ =gTotalCameraPixelOffsetY strh r1, [r0] bl sub_805DE74 movs r0, 0 @@ -4672,18 +4672,18 @@ sub_8057074: @ 8057074 pop {r0} bx r0 .align 2, 0 -_08057094: .4byte gUnknown_300506C -_08057098: .4byte gUnknown_3005068 +_08057094: .4byte gTotalCameraPixelOffsetX +_08057098: .4byte gTotalCameraPixelOffsetY thumb_func_end sub_8057074 thumb_func_start mli4_mapscripts_and_other mli4_mapscripts_and_other: @ 805709C push {r4,r5,lr} sub sp, 0x4 - ldr r0, _080570F4 @ =gUnknown_300506C + ldr r0, _080570F4 @ =gTotalCameraPixelOffsetX movs r1, 0 strh r1, [r0] - ldr r0, _080570F8 @ =gUnknown_3005068 + ldr r0, _080570F8 @ =gTotalCameraPixelOffsetY strh r1, [r0] bl sub_805DE74 mov r4, sp @@ -4715,8 +4715,8 @@ mli4_mapscripts_and_other: @ 805709C pop {r0} bx r0 .align 2, 0 -_080570F4: .4byte gUnknown_300506C -_080570F8: .4byte gUnknown_3005068 +_080570F4: .4byte gTotalCameraPixelOffsetX +_080570F8: .4byte gTotalCameraPixelOffsetY _080570FC: .4byte gSaveBlock2Ptr thumb_func_end mli4_mapscripts_and_other diff --git a/data/field_effect.s b/data/field_effect.s deleted file mode 100644 index 529205a57..000000000 --- a/data/field_effect.s +++ /dev/null @@ -1,43 +0,0 @@ -#include "constants/maps.h" -#include "constants/species.h" - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnknown_83CC244:: @ 83CC244 dataptr - .4byte sub_8087C00 - .4byte sub_8087C2C - .4byte sub_8087CB4 - -gUnknown_83CC250:: @ 83CC250 sprite_frames - obj_frame_tiles gUnknown_83CBDB0 + 0x00, 0x0020 - obj_frame_tiles gUnknown_83CBDB0 + 0x20, 0x0020 - obj_frame_tiles gUnknown_83CBDB0 + 0x40, 0x0020 - obj_frame_tiles gUnknown_83CBDB0 + 0x60, 0x0020 - -gUnknown_83CC270:: @ 83CC270 animcmd - obj_image_anim_frame 0x0000, 0 - obj_image_anim_end - -gUnknown_83CC278:: @ 83CC278 animcmd - obj_image_anim_frame 0x0001, 0 - obj_image_anim_end - -gUnknown_83CC280:: @ 83CC280 animcmd - obj_image_anim_frame 0x0002, 0 - obj_image_anim_end - -gUnknown_83CC288:: @ 83CC288 animcmd - obj_image_anim_frame 0x0003, 0 - obj_image_anim_end - -gUnknown_83CC290:: @ 83CC290 dataptr - .4byte gUnknown_83CC270 - .4byte gUnknown_83CC278 - .4byte gUnknown_83CC280 - .4byte gUnknown_83CC288 - -gUnknown_83CC2A0:: @ 83CC2A0 spr_template - spr_template 65535, 4371, gOamData_83CBE58, gUnknown_83CC290, gUnknown_83CC250, gDummySpriteAffineAnimTable, sub_8087D90 diff --git a/data/field_effect_scripts.s b/data/field_effect_scripts.s index 484de872b..010627fb5 100644 --- a/data/field_effect_scripts.s +++ b/data/field_effect_scripts.s @@ -69,7 +69,7 @@ gFieldEffectScriptPointers:: @ 81D96AC .4byte gFldEffScript_SmileyFaceIcon .4byte gFldEffScript_UseVsSeeker .4byte gFldEffScript_DoubleExclMarkIcon - .4byte gFldEffScript_Unk43 + .4byte gFldEffScript_MoveDeoxysRock .4byte gFldEffScript_Unk44 .4byte gFldEffScript_Unk45 @@ -333,14 +333,14 @@ gFldEffScript_DoubleExclMarkIcon:: @ 81D9998 callnative FldEff_DoubleExclMarkIcon end -gFldEffScript_Unk43:: @ 81D999E - callnative FldEff_Unk43 +gFldEffScript_MoveDeoxysRock:: @ 81D999E + callnative Fldeff_MoveDeoxysRock end gFldEffScript_Unk44:: @ 81D99A4 - callnative sub_8087AB4 + callnative FldEff_Unk44 end gFldEffScript_Unk45:: @ 81D99AA - callnative sub_8087E28 + callnative FldEff_Unk45 end diff --git a/include/constants/field_effects.h b/include/constants/field_effects.h index 80240adc6..5aa885b37 100644 --- a/include/constants/field_effects.h +++ b/include/constants/field_effects.h @@ -66,9 +66,9 @@ #define FLDEFF_HALL_OF_FAME_RECORD 62 #define FLDEFF_USE_TELEPORT 63 #define FLDEFF_SMILEY_FACE_ICON 64 -#define FLDEFF_USE_VS_SEEKER 65 // TODO: related to vs_seeker +#define FLDEFF_USE_VS_SEEKER 65 #define FLDEFF_DOUBLE_EXCL_MARK_ICON 66 -#define FLDEFF_UNK_43 67 // TODO: related to deoxys +#define FLDEFF_MOVE_DEOXYS_ROCK 67 #define FLDEFF_UNK_44 68 // TODO: related to ??? #define FLDEFF_UNK_45 69 // TODO: related to fame checker photos diff --git a/include/field_camera.h b/include/field_camera.h index fb9861014..fdab03255 100644 --- a/include/field_camera.h +++ b/include/field_camera.h @@ -15,12 +15,12 @@ struct CameraObject s32 y; }; -extern struct CameraObject gUnknown_03005DD0; +extern struct CameraObject gFieldCamera; // Exported RAM declarations -extern u16 gUnknown_03005DEC; -extern u16 gUnknown_03005DE8; +extern u16 gTotalCameraPixelOffsetX; +extern u16 gTotalCameraPixelOffsetY; // Exported ROM declarations @@ -29,6 +29,7 @@ void CurrentMapDrawMetatileAt(int x, int y); void sub_805A658(s16 *x, s16 *y); void SetCameraPanningCallback(void (*cb)(void)); void SetCameraPanning(s16 x, s16 y); +void UpdateCameraPanning(void); void InstallCameraPanAheadCallback(void); void DrawDoorMetatileAt(int x, int y, const u16 *data); diff --git a/ld_script.txt b/ld_script.txt index bf1c0a26a..a56593731 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -124,7 +124,6 @@ SECTIONS { src/trainer_see.o(.text); src/wild_encounter.o(.text); src/field_effect.o(.text); - asm/field_effect.o(.text); src/scanline_effect.o(.text); src/option_menu.o(.text); src/pokedex.o(.text); @@ -446,7 +445,6 @@ SECTIONS { src/trainer_see.o(.rodata); src/wild_encounter.o(.rodata); src/field_effect.o(.rodata); - data/field_effect.o(.rodata); src/option_menu.o(.rodata); src/trainer_card.o(.rodata); data/pokemon_storage_system.o(.rodata); diff --git a/src/field_effect.c b/src/field_effect.c index a38924549..59c3677f9 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -67,7 +67,7 @@ const u16 gFieldMoveStreaksTilemap[] = INCBIN_U16("graphics/field_effects/unk_83 const u16 gDarknessFieldMoveStreaksTiles[] = INCBIN_U16("graphics/field_effects/unk_83CBA90.4bpp"); const u16 gDarknessFieldMoveStreaksPalette[] = INCBIN_U16("graphics/field_effects/unk_83CBB10.gbapal"); const u16 gDarknessFieldMoveStreaksTilemap[] = INCBIN_U16("graphics/field_effects/unk_83CBB30.bin"); -const u16 gUnknown_83CBDB0[] = INCBIN_U16("graphics/field_effects/unk_83CBDB0.4bpp"); +const u16 sFldEffUnk44_Tiles[] = INCBIN_U16("graphics/field_effects/unk_83CBDB0.4bpp"); bool8 (*const sFldEffScrcmdTable[])(const u8 **script, u32 *result) = { FieldEffectCmd_loadtiles, @@ -96,7 +96,7 @@ const struct OamData gNewGameOakOamAttributes = { .affineParam = 0 }; -const struct OamData gOamData_83CBE58 = { +const struct OamData sOamData_8x8 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, @@ -112,7 +112,7 @@ const struct OamData gOamData_83CBE58 = { .affineParam = 0 }; -const struct OamData gOamData_83CBE60 = { +const struct OamData sOamData_16x16 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, @@ -308,7 +308,7 @@ const union AnimCmd *const gUnknown_83CBF84[] = { const struct SpriteTemplate gUnknown_83CBF88 = { .tileTag = 65535, .paletteTag = 4103, - .oam = &gOamData_83CBE58, + .oam = &sOamData_8x8, .anims = gUnknown_83CBF54, .images = gUnknown_83CBEB4, .affineAnims = gDummySpriteAffineAnimTable, @@ -328,7 +328,7 @@ const struct SpriteTemplate gUnknown_83CBFA0 = { const struct SpriteTemplate gUnknown_83CBFB8 = { .tileTag = 65535, .paletteTag = 4112, - .oam = &gOamData_83CBE60, + .oam = &sOamData_16x16, .anims = gUnknown_83CBF84, .images = gUnknown_83CBEDC, .affineAnims = gDummySpriteAffineAnimTable, @@ -3625,9 +3625,9 @@ void sub_80878C0(struct Sprite * sprite) } } -void Task_FldEffUnk43(u8 taskId); +void Task_MoveDeoxysRock_Step(u8 taskId); -bool8 FldEff_Unk43(void) +u32 Fldeff_MoveDeoxysRock(void) { u8 taskId; u8 objectEventIdBuffer; @@ -3642,7 +3642,7 @@ bool8 FldEff_Unk43(void) x = (gFieldEffectArguments[3] - x) * 16; y = (gFieldEffectArguments[4] - y) * 16; npc_coords_shift(objectEvent, gFieldEffectArguments[3] + 7, gFieldEffectArguments[4] + 7); - taskId = CreateTask(Task_FldEffUnk43, 0x50); + taskId = CreateTask(Task_MoveDeoxysRock_Step, 0x50); gTasks[taskId].data[1] = objectEvent->spriteId; gTasks[taskId].data[2] = gSprites[objectEvent->spriteId].pos1.x + x; gTasks[taskId].data[3] = gSprites[objectEvent->spriteId].pos1.y + y; @@ -3652,7 +3652,7 @@ bool8 FldEff_Unk43(void) return FALSE; } -void Task_FldEffUnk43(u8 taskId) +void Task_MoveDeoxysRock_Step(u8 taskId) { s16 *data = gTasks[taskId].data; struct Sprite * sprite = &gSprites[data[1]]; @@ -3682,9 +3682,226 @@ void Task_FldEffUnk43(u8 taskId) sprite->pos1.y = data[3]; npc_coords_shift_still(objectEvent); objectEvent->triggerGroundEffectsOnStop = TRUE; - FieldEffectActiveListRemove(FLDEFF_UNK_43); + FieldEffectActiveListRemove(FLDEFF_MOVE_DEOXYS_ROCK); DestroyTask(taskId); } break; } } + +void Task_FldEffUnk44(u8 taskId); +void Unk44Effect_0(s16 *data, u8 taskId); +void Unk44Effect_1(s16 *data, u8 taskId); +void Unk44Effect_2(s16 *data, u8 taskId); +void sub_8087CFC(struct Sprite * sprite); +void SpriteCB_FldEffUnk44(struct Sprite * sprite); + +void (*const sUnk44EffectFuncs[])(s16 *data, u8 taskId) = { + Unk44Effect_0, + Unk44Effect_1, + Unk44Effect_2 +}; + +const struct SpriteFrameImage sImages_FldEffUnk44[] = { + {sFldEffUnk44_Tiles + 0x00, 0x20}, + {sFldEffUnk44_Tiles + 0x10, 0x20}, + {sFldEffUnk44_Tiles + 0x20, 0x20}, + {sFldEffUnk44_Tiles + 0x30, 0x20} +}; + +const union AnimCmd sAnimCmd_FldEffUnk44_0[] = { + ANIMCMD_FRAME(0, 0), + ANIMCMD_END +}; + +const union AnimCmd sAnimCmd_FldEffUnk44_1[] = { + ANIMCMD_FRAME(1, 0), + ANIMCMD_END +}; + +const union AnimCmd sAnimCmd_FldEffUnk44_2[] = { + ANIMCMD_FRAME(2, 0), + ANIMCMD_END +}; + +const union AnimCmd sAnimCmd_FldEffUnk44_3[] = { + ANIMCMD_FRAME(3, 0), + ANIMCMD_END +}; + +const union AnimCmd *const sAnimCmdTable_FldEffUnk44[] = { + sAnimCmd_FldEffUnk44_0, + sAnimCmd_FldEffUnk44_1, + sAnimCmd_FldEffUnk44_2, + sAnimCmd_FldEffUnk44_3 +}; + +const struct SpriteTemplate gUnknown_83CC2A0 = { + .tileTag = 0xFFFF, + .paletteTag = 4371, + .oam = &sOamData_8x8, + .anims = sAnimCmdTable_FldEffUnk44, + .images = sImages_FldEffUnk44, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_FldEffUnk44 +}; + +u32 FldEff_Unk44(void) +{ + u8 taskId; + u8 objectEventIdBuffer; + if (!TryGetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2], &objectEventIdBuffer)) + { + taskId = CreateTask(Task_FldEffUnk44, 0x50); + gTasks[taskId].data[2] = objectEventIdBuffer; + gTasks[taskId].data[6] = gFieldEffectArguments[0]; + gTasks[taskId].data[7] = gFieldEffectArguments[1]; + gTasks[taskId].data[8] = gFieldEffectArguments[2]; + } + else + { + FieldEffectActiveListRemove(FLDEFF_UNK_44); + } + return FALSE; +} + +void sub_8087B14(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if (data[7] != 0) + { + if (++data[6] > 20) + { + data[6] = 0; + if (data[5] != 0) + data[5]--; + } + } + else + { + data[5] = 4; + } + + if (++data[0] > 1) + { + data[0] = 0; + if (++data[1] & 1) + { + SetCameraPanning(0, -data[5]); + } + else + { + SetCameraPanning(0, data[5]); + } + } + UpdateCameraPanning(); + if (data[5] == 0) + DestroyTask(taskId); +} + +void sub_8087BA8(u8 taskId) +{ + gTasks[taskId].data[7] = 1; +} + +void Task_FldEffUnk44(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + InstallCameraPanAheadCallback(); + SetCameraPanningCallback(NULL); + sUnk44EffectFuncs[data[1]](data, taskId); +} + +void Unk44Effect_0(s16 *data, u8 taskId) +{ + u8 newTaskId = CreateTask(sub_8087B14, 90); + PlaySE(SE_T_KAMI2); + data[5] = newTaskId; + data[1]++; +} + +void Unk44Effect_1(s16 *data, u8 taskId) +{ + if (++data[3] > 0x78) + { + struct Sprite * sprite = &gSprites[gObjectEvents[data[2]].spriteId]; + gObjectEvents[data[2]].invisible = TRUE; + BlendPalettes(0x0000FFFF, 0x10, RGB_WHITE); + BeginNormalPaletteFade(0x0000FFFF, 0, 0x10, 0, RGB_WHITE); + sub_8087CFC(sprite); + PlaySE(SE_T_KAMI); + sub_8087BA8(data[5]); + data[3] = 0; + data[1]++; + } +} + +void Unk44Effect_2(s16 *data, u8 taskId) +{ + if (!gPaletteFade.active && !FuncIsActiveTask(sub_8087B14)) + { + InstallCameraPanAheadCallback(); + RemoveObjectEventByLocalIdAndMap(data[6], data[7], data[8]); + FieldEffectActiveListRemove(FLDEFF_UNK_44); + DestroyTask(taskId); + } +} + +void sub_8087CFC(struct Sprite* sprite) +{ + int i; + int xPos = (s16)gTotalCameraPixelOffsetX + sprite->pos1.x + sprite->pos2.x; + int yPos = (s16)gTotalCameraPixelOffsetY + sprite->pos1.y + sprite->pos2.y - 4; + + for (i = 0; i < 4; i++) + { + u8 spriteId = CreateSprite(&gUnknown_83CC2A0, xPos, yPos, 0); + if (spriteId != MAX_SPRITES) + { + StartSpriteAnim(&gSprites[spriteId], i); + gSprites[spriteId].data[0] = i; + gSprites[spriteId].oam.paletteNum = sprite->oam.paletteNum; + } + } +} + +void SpriteCB_FldEffUnk44(struct Sprite* sprite) +{ + switch (sprite->data[0]) + { + case 0: + sprite->pos1.x -= 16; + sprite->pos1.y -= 12; + break; + case 1: + sprite->pos1.x += 16; + sprite->pos1.y -= 12; + break; + case 2: + sprite->pos1.x -= 16; + sprite->pos1.y += 12; + break; + case 3: + sprite->pos1.x += 16; + sprite->pos1.y += 12; + break; + } + if (sprite->pos1.x < -4 || sprite->pos1.x > 0xF4 || sprite->pos1.y < -4 || sprite->pos1.y > 0xA4) + DestroySprite(sprite); +} + +void Task_FldEffUnk45(u8 taskId) +{ + if (!gPaletteFade.active) + { + FieldEffectActiveListRemove(FLDEFF_UNK_45); + DestroyTask(taskId); + } +} + +void FldEff_Unk45(void) +{ + BlendPalettes(0xFFFFFFFF, 0x10, RGB_WHITE); + BeginNormalPaletteFade(0xFFFFFFFF, -1, 0x0F, 0x00, RGB_WHITE); + CreateTask(Task_FldEffUnk45, 90); +} diff --git a/src/field_specials.c b/src/field_specials.c index 6554f6116..d3d9816af 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -2389,13 +2389,13 @@ static void MoveDeoxysObject(u8 num) gFieldEffectArguments[5] = 60; else gFieldEffectArguments[5] = 5; - FieldEffectStart(FLDEFF_UNK_43); + FieldEffectStart(FLDEFF_MOVE_DEOXYS_ROCK); Overworld_SetMapObjTemplateCoords(1, sDeoxysCoords[num][0], sDeoxysCoords[num][1]); } static void Task_WaitDeoxysFieldEffect(u8 taskId) { - if (!FieldEffectActiveListContains(FLDEFF_UNK_43)) + if (!FieldEffectActiveListContains(FLDEFF_MOVE_DEOXYS_ROCK)) { EnableBothScriptContexts(); DestroyTask(taskId); diff --git a/sym_common.txt b/sym_common.txt index e729f5515..b20ad7411 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -51,10 +51,10 @@ gFieldLinkPlayerCount: @ 3005030 gUnknown_3005050: @ 3005050 .space 0x18 -gUnknown_3005068: @ 3005068 +gTotalCameraPixelOffsetY: @ 3005068 .space 0x4 -gUnknown_300506C: @ 300506C +gTotalCameraPixelOffsetX: @ 300506C .space 0x4 .align 2 From 875dde7a0cc2229decf41b1ecbac88addbdc8ea4 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 2 Mar 2020 09:51:21 -0500 Subject: [PATCH 21/26] Rename remaining field effect callbacks --- asm/field_effect_helpers.s | 18 +++++++++--------- data/field_effect_scripts.s | 8 ++++---- include/fldeff.h | 2 +- src/field_effect.c | 1 + src/fldeff_strength.c | 14 +++++++------- 5 files changed, 22 insertions(+), 21 deletions(-) diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index 3f128f799..564cc519f 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -1369,8 +1369,8 @@ _080DB800: .4byte gFieldEffectObjectTemplatePointers _080DB804: .4byte gSprites thumb_func_end FldEff_JumpLongGrass - thumb_func_start sub_80DB808 -sub_80DB808: @ 80DB808 + thumb_func_start FldEff_ShortGrass +FldEff_ShortGrass: @ 80DB808 push {r4-r6,lr} ldr r6, _080DB89C @ =gFieldEffectArguments ldrb r0, [r6] @@ -1449,7 +1449,7 @@ _080DB89C: .4byte gFieldEffectArguments _080DB8A0: .4byte gObjectEvents _080DB8A4: .4byte gFieldEffectObjectTemplatePointers _080DB8A8: .4byte gSprites - thumb_func_end sub_80DB808 + thumb_func_end FldEff_ShortGrass thumb_func_start sub_80DB8AC sub_80DB8AC: @ 80DB8AC @@ -2310,8 +2310,8 @@ _080DBF48: .4byte gFieldEffectArguments _080DBF4C: .4byte gSprites thumb_func_end oei_ripples - thumb_func_start sub_80DBF50 -sub_80DBF50: @ 80DBF50 + thumb_func_start FldEff_HotSpringsWater +FldEff_HotSpringsWater: @ 80DBF50 push {r4-r6,lr} ldr r6, _080DBFE4 @ =gFieldEffectArguments ldrb r0, [r6] @@ -2390,7 +2390,7 @@ _080DBFE4: .4byte gFieldEffectArguments _080DBFE8: .4byte gObjectEvents _080DBFEC: .4byte gFieldEffectObjectTemplatePointers _080DBFF0: .4byte gSprites - thumb_func_end sub_80DBF50 + thumb_func_end FldEff_HotSpringsWater thumb_func_start sub_80DBFF4 sub_80DBFF4: @ 80DBFF4 @@ -3723,11 +3723,11 @@ _080DC9D0: _080DC9D8: .4byte 0x00001004 thumb_func_end sub_80DC99C - thumb_func_start sub_80DC9DC -sub_80DC9DC: @ 80DC9DC + thumb_func_start FldEff_BerryTreeGrowthSparkle +FldEff_BerryTreeGrowthSparkle: @ 80DC9DC movs r0, 0 bx lr - thumb_func_end sub_80DC9DC + thumb_func_end FldEff_BerryTreeGrowthSparkle thumb_func_start ShowTreeDisguiseFieldEffect ShowTreeDisguiseFieldEffect: @ 80DC9E0 diff --git a/data/field_effect_scripts.s b/data/field_effect_scripts.s index 010627fb5..5517d1fda 100644 --- a/data/field_effect_scripts.s +++ b/data/field_effect_scripts.s @@ -165,7 +165,7 @@ gFldEffScript_Unknown22:: @ 81D987B end gFldEffScript_BerryTreeGrowthSparkle:: @ 81D9885 - callnative sub_80DC9DC + callnative FldEff_BerryTreeGrowthSparkle end gFldEffScript_DeepSandFootprints:: @ 81D988B @@ -224,7 +224,7 @@ gFldEffScript_UseRockSmash:: @ 81D98E4 end gFldEffScript_UseStrength:: @ 81D98EA - callnative sub_80D0860 + callnative FldEff_UseStrength end gFldEffScript_UseDig:: @ 81D98F0 @@ -236,11 +236,11 @@ gFldEffScript_SandPile:: @ 81D98F6 end gFldEffScript_ShortGrass:: @ 81D9900 - loadfadedpal_callnative gUnknown_83A5348, sub_80DB808 + loadfadedpal_callnative gUnknown_83A5348, FldEff_ShortGrass end gFldEffScript_HotSpringsWater:: @ 81D990A - loadfadedpal_callnative gUnknown_83A5348, sub_80DBF50 + loadfadedpal_callnative gUnknown_83A5348, FldEff_HotSpringsWater end gFldEffScript_UseWaterfall:: @ 81D9914 diff --git a/include/fldeff.h b/include/fldeff.h index 56e2dfbd9..00f2d01f4 100644 --- a/include/fldeff.h +++ b/include/fldeff.h @@ -37,7 +37,7 @@ bool32 FldEffPoison_IsActive(void); // strength bool8 SetUpFieldMove_Strength(void); -bool8 sub_80D0860(void); +bool8 FldEff_UseStrength(void); // teleport bool8 SetUpFieldMove_Teleport(void); diff --git a/src/field_effect.c b/src/field_effect.c index 59c3677f9..dc6976287 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -3899,6 +3899,7 @@ void Task_FldEffUnk45(u8 taskId) } } +// Bug: Return value should be u32, not void void FldEff_Unk45(void) { BlendPalettes(0xFFFFFFFF, 0x10, RGB_WHITE); diff --git a/src/fldeff_strength.c b/src/fldeff_strength.c index 712d9f1c6..c6b92b28c 100644 --- a/src/fldeff_strength.c +++ b/src/fldeff_strength.c @@ -8,8 +8,8 @@ #include "event_scripts.h" #include "constants/event_objects.h" -static void FldEff_UseStrength(void); -static void sub_80D08A8(void); +static void FieldCB_UseStrength(void); +static void ShowMonCB_UseStrength(void); bool8 SetUpFieldMove_Strength(void) { @@ -21,25 +21,25 @@ bool8 SetUpFieldMove_Strength(void) { gSpecialVar_Result = GetCursorSelectionMonId(); gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu; - gPostMenuFieldCallback = FldEff_UseStrength; + gPostMenuFieldCallback = FieldCB_UseStrength; return TRUE; } } -static void FldEff_UseStrength(void) +static void FieldCB_UseStrength(void) { gFieldEffectArguments[0] = GetCursorSelectionMonId(); ScriptContext1_SetupScript(EventScript_FldEffStrength); } -bool8 sub_80D0860(void) +bool8 FldEff_UseStrength(void) { u8 taskId = CreateFieldEffectShowMon(); - FLDEFF_SET_FUNC_TO_DATA(sub_80D08A8); + FLDEFF_SET_FUNC_TO_DATA(ShowMonCB_UseStrength); GetMonNickname(&gPlayerParty[gFieldEffectArguments[0]], gStringVar1); return FALSE; } -static void sub_80D08A8(void) +static void ShowMonCB_UseStrength(void) { FieldEffectActiveListRemove(FLDEFF_USE_STRENGTH); EnableBothScriptContexts(); From 2f8ac698c8a03954d3bf0d05a9ef13dd447eaf53 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 2 Mar 2020 09:57:54 -0500 Subject: [PATCH 22/26] Static symbols in field_effect.c --- data/field_effect_scripts.s | 2 +- src/field_effect.c | 953 ++++++++++++++++++------------------ 2 files changed, 477 insertions(+), 478 deletions(-) diff --git a/data/field_effect_scripts.s b/data/field_effect_scripts.s index 5517d1fda..95d63568c 100644 --- a/data/field_effect_scripts.s +++ b/data/field_effect_scripts.s @@ -334,7 +334,7 @@ gFldEffScript_DoubleExclMarkIcon:: @ 81D9998 end gFldEffScript_MoveDeoxysRock:: @ 81D999E - callnative Fldeff_MoveDeoxysRock + callnative FldEff_MoveDeoxysRock end gFldEffScript_Unk44:: @ 81D99A4 diff --git a/src/field_effect.c b/src/field_effect.c index dc6976287..5553f16dc 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -34,42 +34,42 @@ static u8 sFieldEffectActiveList[FIELD_EFFECT_COUNT]; -void FieldEffectActiveListAdd(u8 fldeff); -bool8 FieldEffectCmd_loadtiles(const u8 **script, u32 *result); -bool8 FieldEffectCmd_loadfadedpal(const u8 **script, u32 *result); -bool8 FieldEffectCmd_loadpal(const u8 **script, u32 *result); -bool8 FieldEffectCmd_callnative(const u8 **script, u32 *result); -bool8 FieldEffectCmd_end(const u8 **script, u32 *result); -bool8 FieldEffectCmd_loadgfx_callnative(const u8 **script, u32 *result); -bool8 FieldEffectCmd_loadtiles_callnative(const u8 **script, u32 *result); -bool8 FieldEffectCmd_loadfadedpal_callnative(const u8 **script, u32 *result); -void FieldEffectScript_LoadTiles(const u8 **script); -void FieldEffectScript_LoadFadedPal(const u8 **script); -void FieldEffectScript_LoadPal(const u8 **script); -void FieldEffectScript_CallNative(const u8 **script, u32 *result); -void FieldEffectFreeTilesIfUnused(u16 tilesTag); -void FieldEffectFreePaletteIfUnused(u8 paletteNum); -void Task_PokecenterHeal(u8 taskId); -void SpriteCB_PokeballGlow(struct Sprite * sprite); -void SpriteCB_PokecenterMonitor(struct Sprite * sprite); -void SpriteCB_HallOfFameMonitor(struct Sprite * sprite); +static void FieldEffectActiveListAdd(u8 fldeff); +static bool8 FieldEffectCmd_loadtiles(const u8 **script, u32 *result); +static bool8 FieldEffectCmd_loadfadedpal(const u8 **script, u32 *result); +static bool8 FieldEffectCmd_loadpal(const u8 **script, u32 *result); +static bool8 FieldEffectCmd_callnative(const u8 **script, u32 *result); +static bool8 FieldEffectCmd_end(const u8 **script, u32 *result); +static bool8 FieldEffectCmd_loadgfx_callnative(const u8 **script, u32 *result); +static bool8 FieldEffectCmd_loadtiles_callnative(const u8 **script, u32 *result); +static bool8 FieldEffectCmd_loadfadedpal_callnative(const u8 **script, u32 *result); +static void FieldEffectScript_LoadTiles(const u8 **script); +static void FieldEffectScript_LoadFadedPal(const u8 **script); +static void FieldEffectScript_LoadPal(const u8 **script); +static void FieldEffectScript_CallNative(const u8 **script, u32 *result); +static void FieldEffectFreeTilesIfUnused(u16 tilesTag); +static void FieldEffectFreePaletteIfUnused(u8 paletteNum); +static void Task_PokecenterHeal(u8 taskId); +static void SpriteCB_PokeballGlow(struct Sprite * sprite); +static void SpriteCB_PokecenterMonitor(struct Sprite * sprite); +static void SpriteCB_HallOfFameMonitor(struct Sprite * sprite); -const u16 sNewGameOakObjectSpriteTiles[] = INCBIN_U16("graphics/field_effects/unk_83CA770.4bpp"); -const u16 sNewGameOakObjectPals[] = INCBIN_U16("graphics/field_effects/unk_83CAF70.gbapal"); -const u16 gUnknown_83CAF90[] = INCBIN_U16("graphics/field_effects/unk_83CAF90.4bpp"); -const u16 gUnknown_83CAFB0[] = INCBIN_U16("graphics/field_effects/unk_83CAFB0.gbapal"); -const u16 gUnknown_83CAFD0[] = INCBIN_U16("graphics/field_effects/unk_83CAFD0.4bpp"); -const u16 gUnknown_83CB3D0[] = INCBIN_U16("graphics/field_effects/unk_83CB3D0.gbapal"); -const u16 gUnknown_83CB3F0[] = INCBIN_U16("graphics/field_effects/unk_83CB3F0.4bpp"); -const u16 gFieldMoveStreaksTiles[] = INCBIN_U16("graphics/field_effects/unk_83CB5F0.4bpp"); -const u16 gFieldMoveStreaksPalette[] = INCBIN_U16("graphics/field_effects/unk_83CB7F0.gbapal"); -const u16 gFieldMoveStreaksTilemap[] = INCBIN_U16("graphics/field_effects/unk_83CB810.bin"); -const u16 gDarknessFieldMoveStreaksTiles[] = INCBIN_U16("graphics/field_effects/unk_83CBA90.4bpp"); -const u16 gDarknessFieldMoveStreaksPalette[] = INCBIN_U16("graphics/field_effects/unk_83CBB10.gbapal"); -const u16 gDarknessFieldMoveStreaksTilemap[] = INCBIN_U16("graphics/field_effects/unk_83CBB30.bin"); -const u16 sFldEffUnk44_Tiles[] = INCBIN_U16("graphics/field_effects/unk_83CBDB0.4bpp"); +static const u16 sNewGameOakObjectSpriteTiles[] = INCBIN_U16("graphics/field_effects/unk_83CA770.4bpp"); +static const u16 sNewGameOakObjectPals[] = INCBIN_U16("graphics/field_effects/unk_83CAF70.gbapal"); +static const u16 gUnknown_83CAF90[] = INCBIN_U16("graphics/field_effects/unk_83CAF90.4bpp"); +static const u16 gUnknown_83CAFB0[] = INCBIN_U16("graphics/field_effects/unk_83CAFB0.gbapal"); +static const u16 gUnknown_83CAFD0[] = INCBIN_U16("graphics/field_effects/unk_83CAFD0.4bpp"); +static const u16 gUnknown_83CB3D0[] = INCBIN_U16("graphics/field_effects/unk_83CB3D0.gbapal"); +static const u16 gUnknown_83CB3F0[] = INCBIN_U16("graphics/field_effects/unk_83CB3F0.4bpp"); +static const u16 gFieldMoveStreaksTiles[] = INCBIN_U16("graphics/field_effects/unk_83CB5F0.4bpp"); +static const u16 gFieldMoveStreaksPalette[] = INCBIN_U16("graphics/field_effects/unk_83CB7F0.gbapal"); +static const u16 gFieldMoveStreaksTilemap[] = INCBIN_U16("graphics/field_effects/unk_83CB810.bin"); +static const u16 gDarknessFieldMoveStreaksTiles[] = INCBIN_U16("graphics/field_effects/unk_83CBA90.4bpp"); +static const u16 gDarknessFieldMoveStreaksPalette[] = INCBIN_U16("graphics/field_effects/unk_83CBB10.gbapal"); +static const u16 gDarknessFieldMoveStreaksTilemap[] = INCBIN_U16("graphics/field_effects/unk_83CBB30.bin"); +static const u16 sFldEffUnk44_Tiles[] = INCBIN_U16("graphics/field_effects/unk_83CBDB0.4bpp"); -bool8 (*const sFldEffScrcmdTable[])(const u8 **script, u32 *result) = { +static bool8 (*const sFldEffScrcmdTable[])(const u8 **script, u32 *result) = { FieldEffectCmd_loadtiles, FieldEffectCmd_loadfadedpal, FieldEffectCmd_loadpal, @@ -80,7 +80,7 @@ bool8 (*const sFldEffScrcmdTable[])(const u8 **script, u32 *result) = { FieldEffectCmd_loadfadedpal_callnative }; -const struct OamData gNewGameOakOamAttributes = { +static const struct OamData gNewGameOakOamAttributes = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, @@ -96,7 +96,7 @@ const struct OamData gNewGameOakOamAttributes = { .affineParam = 0 }; -const struct OamData sOamData_8x8 = { +static const struct OamData sOamData_8x8 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, @@ -112,7 +112,7 @@ const struct OamData sOamData_8x8 = { .affineParam = 0 }; -const struct OamData sOamData_16x16 = { +static const struct OamData sOamData_16x16 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, @@ -128,24 +128,24 @@ const struct OamData sOamData_16x16 = { .affineParam = 0 }; -const struct SpriteFrameImage gNewGameOakObjectSpriteFrames[] = { +static const struct SpriteFrameImage gNewGameOakObjectSpriteFrames[] = { {sNewGameOakObjectSpriteTiles, 0x800} }; -const struct SpritePalette gNewGameOakObjectPaletteInfo = { +static const struct SpritePalette gNewGameOakObjectPaletteInfo = { sNewGameOakObjectPals, 4102 }; -const union AnimCmd gNewGameOakAnim[] = { +static const union AnimCmd gNewGameOakAnim[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END }; -const union AnimCmd *const gNewGameOakAnimTable[] = { +static const union AnimCmd *const gNewGameOakAnimTable[] = { gNewGameOakAnim }; -const struct SpriteTemplate gNewGameOakObjectTemplate = { +static const struct SpriteTemplate gNewGameOakObjectTemplate = { .tileTag = 0xFFFF, .paletteTag = 4102, .oam = &gNewGameOakOamAttributes, @@ -163,7 +163,7 @@ const struct SpritePalette gUnknown_83CBEA4 = { gUnknown_83CB3D0, 4112 }; -const struct OamData gOamData_83CBEAC = { +static const struct OamData gOamData_83CBEAC = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, @@ -179,25 +179,25 @@ const struct OamData gOamData_83CBEAC = { .affineParam = 0 }; -const struct SpriteFrameImage gUnknown_83CBEB4[] = { +static const struct SpriteFrameImage gUnknown_83CBEB4[] = { {gUnknown_83CAF90, 0x20} }; -const struct SpriteFrameImage gUnknown_83CBEBC[] = { +static const struct SpriteFrameImage gUnknown_83CBEBC[] = { {gUnknown_83CAFD0 + 0x000, 0x100}, {gUnknown_83CAFD0 + 0x080, 0x100}, {gUnknown_83CAFD0 + 0x100, 0x100}, {gUnknown_83CAFD0 + 0x180, 0x100} }; -const struct SpriteFrameImage gUnknown_83CBEDC[] = { +static const struct SpriteFrameImage gUnknown_83CBEDC[] = { {gUnknown_83CB3F0 + 0x00, 0x80}, {gUnknown_83CB3F0 + 0x40, 0x80}, {gUnknown_83CB3F0 + 0x80, 0x80}, {gUnknown_83CB3F0 + 0xC0, 0x80} }; -const struct Subsprite gUnknown_83CBEFC[] = +static const struct Subsprite gUnknown_83CBEFC[] = { { .x = -12, @@ -230,9 +230,9 @@ const struct Subsprite gUnknown_83CBEFC[] = } }; -const struct SubspriteTable gUnknown_83CBF0C = subsprite_table(gUnknown_83CBEFC); +static const struct SubspriteTable gUnknown_83CBF0C = subsprite_table(gUnknown_83CBEFC); -const struct Subsprite gUnknown_83CBF14[] = +static const struct Subsprite gUnknown_83CBF14[] = { { .x = -32, @@ -265,14 +265,14 @@ const struct Subsprite gUnknown_83CBF14[] = } }; -const struct SubspriteTable gUnknown_83CBF24 = subsprite_table(gUnknown_83CBF14); +static const struct SubspriteTable gUnknown_83CBF24 = subsprite_table(gUnknown_83CBF14); -const union AnimCmd gUnknown_83CBF2C[] = { +static const union AnimCmd gUnknown_83CBF2C[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_JUMP(0) }; -const union AnimCmd gUnknown_83CBF34[] = { +static const union AnimCmd gUnknown_83CBF34[] = { ANIMCMD_FRAME(1, 5), ANIMCMD_FRAME(2, 5), ANIMCMD_FRAME(3, 7), @@ -283,12 +283,12 @@ const union AnimCmd gUnknown_83CBF34[] = { ANIMCMD_END }; -const union AnimCmd *const gUnknown_83CBF54[] = { +static const union AnimCmd *const gUnknown_83CBF54[] = { gUnknown_83CBF2C, gUnknown_83CBF34 }; -const union AnimCmd gUnknown_83CBF5C[] = { +static const union AnimCmd gUnknown_83CBF5C[] = { ANIMCMD_FRAME(3, 8), ANIMCMD_FRAME(2, 8), ANIMCMD_FRAME(1, 8), @@ -301,11 +301,11 @@ const union AnimCmd gUnknown_83CBF5C[] = { ANIMCMD_END }; -const union AnimCmd *const gUnknown_83CBF84[] = { +static const union AnimCmd *const gUnknown_83CBF84[] = { gUnknown_83CBF5C }; -const struct SpriteTemplate gUnknown_83CBF88 = { +static const struct SpriteTemplate gUnknown_83CBF88 = { .tileTag = 65535, .paletteTag = 4103, .oam = &sOamData_8x8, @@ -315,7 +315,7 @@ const struct SpriteTemplate gUnknown_83CBF88 = { .callback = SpriteCB_PokeballGlow }; -const struct SpriteTemplate gUnknown_83CBFA0 = { +static const struct SpriteTemplate gUnknown_83CBFA0 = { .tileTag = 65535, .paletteTag = 4103, .oam = &gOamData_83CBEAC, @@ -325,7 +325,7 @@ const struct SpriteTemplate gUnknown_83CBFA0 = { .callback = SpriteCB_PokecenterMonitor }; -const struct SpriteTemplate gUnknown_83CBFB8 = { +static const struct SpriteTemplate gUnknown_83CBFB8 = { .tileTag = 65535, .paletteTag = 4112, .oam = &sOamData_16x16, @@ -347,39 +347,39 @@ u32 FieldEffectStart(u8 fldeff) return result; } -bool8 FieldEffectCmd_loadtiles(const u8 **script, u32 *result) +static bool8 FieldEffectCmd_loadtiles(const u8 **script, u32 *result) { (*script)++; FieldEffectScript_LoadTiles(script); return TRUE; } -bool8 FieldEffectCmd_loadfadedpal(const u8 **script, u32 *result) +static bool8 FieldEffectCmd_loadfadedpal(const u8 **script, u32 *result) { (*script)++; FieldEffectScript_LoadFadedPal(script); return TRUE; } -bool8 FieldEffectCmd_loadpal(const u8 **script, u32 *result) +static bool8 FieldEffectCmd_loadpal(const u8 **script, u32 *result) { (*script)++; FieldEffectScript_LoadPal(script); return TRUE; } -bool8 FieldEffectCmd_callnative(const u8 **script, u32 *result) +static bool8 FieldEffectCmd_callnative(const u8 **script, u32 *result) { (*script)++; FieldEffectScript_CallNative(script, result); return TRUE; } -bool8 FieldEffectCmd_end(const u8 **script, u32 *result) +static bool8 FieldEffectCmd_end(const u8 **script, u32 *result) { return FALSE; } -bool8 FieldEffectCmd_loadgfx_callnative(const u8 **script, u32 *result) +static bool8 FieldEffectCmd_loadgfx_callnative(const u8 **script, u32 *result) { (*script)++; FieldEffectScript_LoadTiles(script); @@ -388,7 +388,7 @@ bool8 FieldEffectCmd_loadgfx_callnative(const u8 **script, u32 *result) return TRUE; } -bool8 FieldEffectCmd_loadtiles_callnative(const u8 **script, u32 *result) +static bool8 FieldEffectCmd_loadtiles_callnative(const u8 **script, u32 *result) { (*script)++; FieldEffectScript_LoadTiles(script); @@ -396,7 +396,7 @@ bool8 FieldEffectCmd_loadtiles_callnative(const u8 **script, u32 *result) return TRUE; } -bool8 FieldEffectCmd_loadfadedpal_callnative(const u8 **script, u32 *result) +static bool8 FieldEffectCmd_loadfadedpal_callnative(const u8 **script, u32 *result) { (*script)++; FieldEffectScript_LoadFadedPal(script); @@ -404,12 +404,12 @@ bool8 FieldEffectCmd_loadfadedpal_callnative(const u8 **script, u32 *result) return TRUE; } -u32 FieldEffectScript_ReadWord(const u8 **script) +static u32 FieldEffectScript_ReadWord(const u8 **script) { return T2_READ_32(*script); } -void FieldEffectScript_LoadTiles(const u8 **script) +static void FieldEffectScript_LoadTiles(const u8 **script) { const struct SpriteSheet * spriteSheet = (const struct SpriteSheet * )FieldEffectScript_ReadWord(script); if (GetSpriteTileStartByTag(spriteSheet->tag) == 0xFFFF) @@ -439,7 +439,7 @@ void sub_8083598(u8 paletteIdx) CpuFastCopy(&gPlttBufferUnfaded[(paletteIdx + 16) * 16], &gPlttBufferFaded[(paletteIdx + 16) * 16], 0x20); } -void FieldEffectScript_LoadFadedPal(const u8 **script) +static void FieldEffectScript_LoadFadedPal(const u8 **script) { const struct SpritePalette * spritePalette = (const struct SpritePalette * )FieldEffectScript_ReadWord(script); u8 idx = IndexOfSpritePaletteTag(spritePalette->tag); @@ -450,7 +450,7 @@ void FieldEffectScript_LoadFadedPal(const u8 **script) *script += sizeof(u32); } -void FieldEffectScript_LoadPal(const u8 **script) +static void FieldEffectScript_LoadPal(const u8 **script) { const struct SpritePalette * spritePalette = (const struct SpritePalette * )FieldEffectScript_ReadWord(script); u8 idx = IndexOfSpritePaletteTag(spritePalette->tag); @@ -460,14 +460,14 @@ void FieldEffectScript_LoadPal(const u8 **script) *script += sizeof(u32); } -void FieldEffectScript_CallNative(const u8 **script, u32 *result) +static void FieldEffectScript_CallNative(const u8 **script, u32 *result) { u32 (*func)(void) = (u32 (*)(void))FieldEffectScript_ReadWord(script); *result = func(); *script += sizeof(u32); } -void FieldEffectFreeGraphicsResources(struct Sprite * sprite) +static void FieldEffectFreeGraphicsResources(struct Sprite * sprite) { u16 tileStart = sprite->sheetTileStart; u8 paletteNum = sprite->oam.paletteNum; @@ -482,7 +482,7 @@ void FieldEffectStop(struct Sprite * sprite, u8 fldeff) FieldEffectActiveListRemove(fldeff); } -void FieldEffectFreeTilesIfUnused(u16 tileStart) +static void FieldEffectFreeTilesIfUnused(u16 tileStart) { u8 i; u16 tileTag = GetSpriteTileTagByTileStart(tileStart); @@ -496,7 +496,7 @@ void FieldEffectFreeTilesIfUnused(u16 tileStart) FreeSpriteTilesByTag(tileTag); } -void FieldEffectFreePaletteIfUnused(u8 paletteNum) +static void FieldEffectFreePaletteIfUnused(u8 paletteNum) { u8 i; u16 paletteTag = GetSpritePaletteTagByPaletteNum(paletteNum); @@ -519,7 +519,7 @@ void FieldEffectActiveListClear(void) } } -void FieldEffectActiveListAdd(u8 fldeff) +static void FieldEffectActiveListAdd(u8 fldeff) { u8 i; for (i = 0; i < FIELD_EFFECT_COUNT; i++) @@ -573,13 +573,13 @@ u8 CreateTrainerSprite(u8 trainerSpriteID, s16 x, s16 y, u8 subpriority, u8 *buf return CreateSprite(&spriteTemplate, x, y, subpriority); } -void LoadTrainerGfx_TrainerCard(u8 gender, u16 palOffset, u8 *dest) +static void LoadTrainerGfx_TrainerCard(u8 gender, u16 palOffset, u8 *dest) { LZDecompressVram(gTrainerFrontPicTable[gender].data, dest); LoadCompressedPalette(gTrainerFrontPicPaletteTable[gender].data, palOffset, 0x20); } -u8 AddNewGameBirchObject(s16 x, s16 y, u8 subpriority) +static u8 AddNewGameBirchObject(s16 x, s16 y, u8 subpriority) { LoadSpritePalette(&gNewGameOakObjectPaletteInfo); return CreateSprite(&gNewGameOakObjectTemplate, x, y, subpriority); @@ -595,7 +595,7 @@ u8 CreateMonSprite_PicBox(u16 species, s16 x, s16 y, u8 subpriority) return spriteId; } -u8 CreateMonSprite_FieldMove(u16 species, u32 otId, u32 personality, s16 x, s16 y, u8 subpriority) +static u8 CreateMonSprite_FieldMove(u16 species, u32 otId, u32 personality, s16 x, s16 y, u8 subpriority) { const struct CompressedSpritePalette * spritePalette = GetMonSpritePalStructFromOtIdPersonality(species, otId, personality); u16 spriteId = CreateMonPicSprite_HandleDeoxys(species, otId, personality, 1, x, y, 0, spritePalette->tag); @@ -638,7 +638,7 @@ void MultiplyInvertedPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b) } // r, g, b are between 0 and 16 -void MultiplyPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b) +static void MultiplyPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b) { int curRed; int curGreen; @@ -658,43 +658,43 @@ void MultiplyPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b) gPlttBufferFaded[i] = outPal; } -void PokecenterHealEffect_0(struct Task * task); -void PokecenterHealEffect_1(struct Task * task); -void PokecenterHealEffect_2(struct Task * task); -void PokecenterHealEffect_3(struct Task * task); -void HallOfFameRecordEffect_0(struct Task * task); -void HallOfFameRecordEffect_1(struct Task * task); -void HallOfFameRecordEffect_2(struct Task * task); -void HallOfFameRecordEffect_3(struct Task * task); -void Task_HallOfFameRecord(u8 taskId); -u8 CreatePokeballGlowSprite(s16 duration, s16 x, s16 y, bool16 fanfare); -void SpriteCB_PokeballGlowEffect(struct Sprite * sprite); -void PokeballGlowEffect_0(struct Sprite * sprite); -void PokeballGlowEffect_1(struct Sprite * sprite); -void PokeballGlowEffect_2(struct Sprite * sprite); -void PokeballGlowEffect_3(struct Sprite * sprite); -void PokeballGlowEffect_4(struct Sprite * sprite); -void PokeballGlowEffect_5(struct Sprite * sprite); -void PokeballGlowEffect_6(struct Sprite * sprite); -void PokeballGlowEffect_7(struct Sprite * sprite); -u8 PokecenterHealEffectHelper(s32 x, s32 y); -void HallOfFameRecordEffectHelper(s32 x, s32 y); +static void PokecenterHealEffect_0(struct Task * task); +static void PokecenterHealEffect_1(struct Task * task); +static void PokecenterHealEffect_2(struct Task * task); +static void PokecenterHealEffect_3(struct Task * task); +static void HallOfFameRecordEffect_0(struct Task * task); +static void HallOfFameRecordEffect_1(struct Task * task); +static void HallOfFameRecordEffect_2(struct Task * task); +static void HallOfFameRecordEffect_3(struct Task * task); +static void Task_HallOfFameRecord(u8 taskId); +static u8 CreatePokeballGlowSprite(s16 duration, s16 x, s16 y, bool16 fanfare); +static void SpriteCB_PokeballGlowEffect(struct Sprite * sprite); +static void PokeballGlowEffect_0(struct Sprite * sprite); +static void PokeballGlowEffect_1(struct Sprite * sprite); +static void PokeballGlowEffect_2(struct Sprite * sprite); +static void PokeballGlowEffect_3(struct Sprite * sprite); +static void PokeballGlowEffect_4(struct Sprite * sprite); +static void PokeballGlowEffect_5(struct Sprite * sprite); +static void PokeballGlowEffect_6(struct Sprite * sprite); +static void PokeballGlowEffect_7(struct Sprite * sprite); +static u8 PokecenterHealEffectHelper(s32 x, s32 y); +static void HallOfFameRecordEffectHelper(s32 x, s32 y); -void (*const sPokecenterHealTaskCBTable[])(struct Task * ) = { +static void (*const sPokecenterHealTaskCBTable[])(struct Task * ) = { PokecenterHealEffect_0, PokecenterHealEffect_1, PokecenterHealEffect_2, PokecenterHealEffect_3 }; -void (*const sHallOfFameRecordTaskCBTable[])(struct Task * ) = { +static void (*const sHallOfFameRecordTaskCBTable[])(struct Task * ) = { HallOfFameRecordEffect_0, HallOfFameRecordEffect_1, HallOfFameRecordEffect_2, HallOfFameRecordEffect_3 }; -void (*const sPokeballGlowSpriteCBTable[])(struct Sprite * ) = { +static void (*const sPokeballGlowSpriteCBTable[])(struct Sprite * ) = { PokeballGlowEffect_0, PokeballGlowEffect_1, PokeballGlowEffect_2, @@ -720,20 +720,20 @@ bool8 FldEff_PokecenterHeal(void) return FALSE; } -void Task_PokecenterHeal(u8 taskId) +static void Task_PokecenterHeal(u8 taskId) { struct Task * task = &gTasks[taskId]; sPokecenterHealTaskCBTable[task->data[0]](task); } -void PokecenterHealEffect_0(struct Task * task) +static void PokecenterHealEffect_0(struct Task * task) { task->data[0]++; task->data[6] = CreatePokeballGlowSprite(task->data[1], task->data[2], task->data[3], TRUE); task->data[7] = PokecenterHealEffectHelper(task->data[4], task->data[5]); } -void PokecenterHealEffect_1(struct Task * task) +static void PokecenterHealEffect_1(struct Task * task) { if (gSprites[task->data[6]].data[0] > 1) { @@ -742,7 +742,7 @@ void PokecenterHealEffect_1(struct Task * task) } } -void PokecenterHealEffect_2(struct Task * task) +static void PokecenterHealEffect_2(struct Task * task) { if (gSprites[task->data[6]].data[0] > 4) { @@ -750,7 +750,7 @@ void PokecenterHealEffect_2(struct Task * task) } } -void PokecenterHealEffect_3(struct Task * task) +static void PokecenterHealEffect_3(struct Task * task) { if (gSprites[task->data[6]].data[0] > 6) { @@ -760,7 +760,6 @@ void PokecenterHealEffect_3(struct Task * task) } } - bool8 FldEff_HallOfFameRecord(void) { u8 nPokemon; @@ -774,21 +773,21 @@ bool8 FldEff_HallOfFameRecord(void) return FALSE; } -void Task_HallOfFameRecord(u8 taskId) +static void Task_HallOfFameRecord(u8 taskId) { struct Task * task; task = &gTasks[taskId]; sHallOfFameRecordTaskCBTable[task->data[0]](task); } -void HallOfFameRecordEffect_0(struct Task * task) +static void HallOfFameRecordEffect_0(struct Task * task) { u8 taskId; task->data[0]++; task->data[6] = CreatePokeballGlowSprite(task->data[1], task->data[2], task->data[3], FALSE); } -void HallOfFameRecordEffect_1(struct Task * task) +static void HallOfFameRecordEffect_1(struct Task * task) { if (gSprites[task->data[6]].data[0] > 1) { @@ -798,7 +797,7 @@ void HallOfFameRecordEffect_1(struct Task * task) } } -void HallOfFameRecordEffect_2(struct Task * task) +static void HallOfFameRecordEffect_2(struct Task * task) { if (gSprites[task->data[6]].data[0] > 4) { @@ -806,7 +805,7 @@ void HallOfFameRecordEffect_2(struct Task * task) } } -void HallOfFameRecordEffect_3(struct Task * task) +static void HallOfFameRecordEffect_3(struct Task * task) { if (gSprites[task->data[6]].data[0] > 6) { @@ -816,7 +815,7 @@ void HallOfFameRecordEffect_3(struct Task * task) } } -u8 CreatePokeballGlowSprite(s16 duration, s16 x, s16 y, bool16 fanfare) +static u8 CreatePokeballGlowSprite(s16 duration, s16 x, s16 y, bool16 fanfare) { u8 spriteId; struct Sprite * sprite; @@ -831,12 +830,12 @@ u8 CreatePokeballGlowSprite(s16 duration, s16 x, s16 y, bool16 fanfare) return spriteId; } -void SpriteCB_PokeballGlowEffect(struct Sprite * sprite) +static void SpriteCB_PokeballGlowEffect(struct Sprite * sprite) { sPokeballGlowSpriteCBTable[sprite->data[0]](sprite); } -const struct Coords16 gUnknown_83CC010[] = { +static const struct Coords16 gUnknown_83CC010[] = { {0, 0}, {6, 0}, {0, 4}, @@ -845,11 +844,11 @@ const struct Coords16 gUnknown_83CC010[] = { {6, 8} }; -const u8 gUnknown_83CC028[] = {16, 12, 8, 0}; -const u8 gUnknown_83CC02C[] = {16, 12, 8, 0}; -const u8 gUnknown_83CC030[] = { 0, 0, 0, 0}; +static const u8 gUnknown_83CC028[] = {16, 12, 8, 0}; +static const u8 gUnknown_83CC02C[] = {16, 12, 8, 0}; +static const u8 gUnknown_83CC030[] = { 0, 0, 0, 0}; -void PokeballGlowEffect_0(struct Sprite * sprite) +static void PokeballGlowEffect_0(struct Sprite * sprite) { u8 endSpriteId; if (sprite->data[1] == 0 || (--sprite->data[1]) == 0) @@ -869,7 +868,7 @@ void PokeballGlowEffect_0(struct Sprite * sprite) } } -void PokeballGlowEffect_1(struct Sprite * sprite) +static void PokeballGlowEffect_1(struct Sprite * sprite) { if ((--sprite->data[1]) == 0) { @@ -884,7 +883,7 @@ void PokeballGlowEffect_1(struct Sprite * sprite) } } -void PokeballGlowEffect_2(struct Sprite * sprite) +static void PokeballGlowEffect_2(struct Sprite * sprite) { u8 phase; if ((--sprite->data[1]) == 0) @@ -914,7 +913,7 @@ void PokeballGlowEffect_2(struct Sprite * sprite) } } -void PokeballGlowEffect_3(struct Sprite * sprite) +static void PokeballGlowEffect_3(struct Sprite * sprite) { u8 phase; if ((--sprite->data[1]) == 0) @@ -936,7 +935,7 @@ void PokeballGlowEffect_3(struct Sprite * sprite) MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x103, gUnknown_83CC028[phase], gUnknown_83CC02C[phase], gUnknown_83CC030[phase]); } -void PokeballGlowEffect_4(struct Sprite * sprite) +static void PokeballGlowEffect_4(struct Sprite * sprite) { if ((--sprite->data[1]) == 0) { @@ -944,12 +943,12 @@ void PokeballGlowEffect_4(struct Sprite * sprite) } } -void PokeballGlowEffect_5(struct Sprite * sprite) +static void PokeballGlowEffect_5(struct Sprite * sprite) { sprite->data[0]++; } -void PokeballGlowEffect_6(struct Sprite * sprite) +static void PokeballGlowEffect_6(struct Sprite * sprite) { if (sprite->data[5] == 0 || IsFanfareTaskInactive()) { @@ -957,17 +956,17 @@ void PokeballGlowEffect_6(struct Sprite * sprite) } } -void PokeballGlowEffect_7(struct Sprite * sprite) +static void PokeballGlowEffect_7(struct Sprite * sprite) { } -void SpriteCB_PokeballGlow(struct Sprite * sprite) +static void SpriteCB_PokeballGlow(struct Sprite * sprite) { if (gSprites[sprite->data[0]].data[0] > 4) FieldEffectFreeGraphicsResources(sprite); } -u8 PokecenterHealEffectHelper(s32 x, s32 y) +static u8 PokecenterHealEffectHelper(s32 x, s32 y) { u8 spriteId; struct Sprite * sprite; @@ -978,7 +977,7 @@ u8 PokecenterHealEffectHelper(s32 x, s32 y) return spriteId; } -void SpriteCB_PokecenterMonitor(struct Sprite * sprite) +static void SpriteCB_PokecenterMonitor(struct Sprite * sprite) { if (sprite->data[0] != 0) { @@ -990,21 +989,21 @@ void SpriteCB_PokecenterMonitor(struct Sprite * sprite) FieldEffectFreeGraphicsResources(sprite); } -void HallOfFameRecordEffectHelper(s32 x, s32 y) +static void HallOfFameRecordEffectHelper(s32 x, s32 y) { CreateSpriteAtEnd(&gUnknown_83CBFB8, x, y, 0); } -void SpriteCB_HallOfFameMonitor(struct Sprite * sprite) +static void SpriteCB_HallOfFameMonitor(struct Sprite * sprite) { if (sprite->animEnded) FieldEffectFreeGraphicsResources(sprite); } -void FieldCallback_Fly(void); -void Task_FlyOut(u8 taskId); -void FieldCallback_FlyArrive(void); -void Task_FlyIn(u8 taskId); +static void FieldCallback_Fly(void); +static void Task_FlyOut(u8 taskId); +static void FieldCallback_FlyArrive(void); +static void Task_FlyIn(u8 taskId); void ReturnToFieldFromFlyMapSelect(void) { @@ -1012,7 +1011,7 @@ void ReturnToFieldFromFlyMapSelect(void) gFieldCallback = FieldCallback_Fly; } -void FieldCallback_Fly(void) +static void FieldCallback_Fly(void) { FadeInFromBlack(); CreateTask(Task_FlyOut, 0); @@ -1021,7 +1020,7 @@ void FieldCallback_Fly(void) gFieldCallback = NULL; } -void Task_FlyOut(u8 taskId) +static void Task_FlyOut(u8 taskId) { struct Task * task; task = &gTasks[taskId]; @@ -1045,7 +1044,7 @@ void Task_FlyOut(u8 taskId) } } -void FieldCallback_FlyArrive(void) +static void FieldCallback_FlyArrive(void) { Overworld_PlaySpecialMapMusic(); FadeInFromBlack(); @@ -1060,7 +1059,7 @@ void FieldCallback_FlyArrive(void) gFieldCallback = NULL; } -void Task_FlyIn(u8 taskId) +static void Task_FlyIn(u8 taskId) { struct Task * task; task = &gTasks[taskId]; @@ -1081,16 +1080,16 @@ void Task_FlyIn(u8 taskId) } } -void Task_FallWarpFieldEffect(u8 taskId); -bool8 FallWarpEffect_1(struct Task * task); -bool8 FallWarpEffect_2(struct Task * task); -bool8 FallWarpEffect_3(struct Task * task); -bool8 FallWarpEffect_4(struct Task * task); -bool8 FallWarpEffect_5(struct Task * task); -bool8 FallWarpEffect_6(struct Task * task); -bool8 FallWarpEffect_7(struct Task * task); +static void Task_FallWarpFieldEffect(u8 taskId); +static bool8 FallWarpEffect_1(struct Task * task); +static bool8 FallWarpEffect_2(struct Task * task); +static bool8 FallWarpEffect_3(struct Task * task); +static bool8 FallWarpEffect_4(struct Task * task); +static bool8 FallWarpEffect_5(struct Task * task); +static bool8 FallWarpEffect_6(struct Task * task); +static bool8 FallWarpEffect_7(struct Task * task); -bool8 (*const sFallWarpEffectCBPtrs[])(struct Task * task) = { +static bool8 (*const sFallWarpEffectCBPtrs[])(struct Task * task) = { FallWarpEffect_1, FallWarpEffect_2, FallWarpEffect_3, @@ -1111,14 +1110,14 @@ void FieldCB_FallWarpExit(void) gFieldCallback = NULL; } -void Task_FallWarpFieldEffect(u8 taskId) +static void Task_FallWarpFieldEffect(u8 taskId) { struct Task * task = &gTasks[taskId]; while (sFallWarpEffectCBPtrs[task->data[0]](task)) ; } -bool8 FallWarpEffect_1(struct Task * task) +static bool8 FallWarpEffect_1(struct Task * task) { struct ObjectEvent * playerObject; struct Sprite * playerSprite; @@ -1136,7 +1135,7 @@ bool8 FallWarpEffect_1(struct Task * task) return TRUE; } -bool8 FallWarpEffect_2(struct Task * task) +static bool8 FallWarpEffect_2(struct Task * task) { if (IsWeatherNotFadingIn()) { @@ -1145,7 +1144,7 @@ bool8 FallWarpEffect_2(struct Task * task) return FALSE; } -bool8 FallWarpEffect_3(struct Task * task) +static bool8 FallWarpEffect_3(struct Task * task) { struct Sprite * sprite; s16 centerToCornerVecY; @@ -1160,7 +1159,7 @@ bool8 FallWarpEffect_3(struct Task * task) return FALSE; } -bool8 FallWarpEffect_4(struct Task * task) +static bool8 FallWarpEffect_4(struct Task * task) { struct ObjectEvent * objectEvent; struct Sprite * sprite; @@ -1194,7 +1193,7 @@ bool8 FallWarpEffect_4(struct Task * task) return FALSE; } -bool8 FallWarpEffect_5(struct Task * task) +static bool8 FallWarpEffect_5(struct Task * task) { task->data[0]++; task->data[1] = 4; @@ -1203,7 +1202,7 @@ bool8 FallWarpEffect_5(struct Task * task) return TRUE; } -bool8 FallWarpEffect_6(struct Task * task) +static bool8 FallWarpEffect_6(struct Task * task) { SetCameraPanning(0, task->data[1]); task->data[1] = -task->data[1]; @@ -1219,7 +1218,7 @@ bool8 FallWarpEffect_6(struct Task * task) return FALSE; } -bool8 FallWarpEffect_7(struct Task * task) +static bool8 FallWarpEffect_7(struct Task * task) { s16 x, y; gPlayerAvatar.preventStep = FALSE; @@ -1239,28 +1238,28 @@ bool8 FallWarpEffect_7(struct Task * task) return FALSE; } -void Task_EscalatorWarpFieldEffect(u8 taskId); -bool8 EscalatorWarpEffect_1(struct Task * task); -bool8 EscalatorWarpEffect_2(struct Task * task); -bool8 EscalatorWarpEffect_3(struct Task * task); -bool8 EscalatorWarpEffect_4(struct Task * task); -bool8 EscalatorWarpEffect_5(struct Task * task); -bool8 EscalatorWarpEffect_6(struct Task * task); -void Escalator_AnimatePlayerGoingDown(struct Task * task); -void Escalator_AnimatePlayerGoingUp(struct Task * task); -void Escalator_BeginFadeOutToNewMap(void); -void Escalator_TransitionToWarpInEffect(void); -void FieldCB_EscalatorWarpIn(void); -void Task_EscalatorWarpInFieldEffect(u8 taskId); -bool8 EscalatorWarpInEffect_1(struct Task * task); -bool8 EscalatorWarpInEffect_2(struct Task * task); -bool8 EscalatorWarpInEffect_3(struct Task * task); -bool8 EscalatorWarpInEffect_4(struct Task * task); -bool8 EscalatorWarpInEffect_5(struct Task * task); -bool8 EscalatorWarpInEffect_6(struct Task * task); -bool8 EscalatorWarpInEffect_7(struct Task * task); +static void Task_EscalatorWarpFieldEffect(u8 taskId); +static bool8 EscalatorWarpEffect_1(struct Task * task); +static bool8 EscalatorWarpEffect_2(struct Task * task); +static bool8 EscalatorWarpEffect_3(struct Task * task); +static bool8 EscalatorWarpEffect_4(struct Task * task); +static bool8 EscalatorWarpEffect_5(struct Task * task); +static bool8 EscalatorWarpEffect_6(struct Task * task); +static void Escalator_AnimatePlayerGoingDown(struct Task * task); +static void Escalator_AnimatePlayerGoingUp(struct Task * task); +static void Escalator_BeginFadeOutToNewMap(void); +static void Escalator_TransitionToWarpInEffect(void); +static void FieldCB_EscalatorWarpIn(void); +static void Task_EscalatorWarpInFieldEffect(u8 taskId); +static bool8 EscalatorWarpInEffect_1(struct Task * task); +static bool8 EscalatorWarpInEffect_2(struct Task * task); +static bool8 EscalatorWarpInEffect_3(struct Task * task); +static bool8 EscalatorWarpInEffect_4(struct Task * task); +static bool8 EscalatorWarpInEffect_5(struct Task * task); +static bool8 EscalatorWarpInEffect_6(struct Task * task); +static bool8 EscalatorWarpInEffect_7(struct Task * task); -bool8 (*const sEscalatorWarpFieldEffectFuncs[])(struct Task * task) = { +static bool8 (*const sEscalatorWarpFieldEffectFuncs[])(struct Task * task) = { EscalatorWarpEffect_1, EscalatorWarpEffect_2, EscalatorWarpEffect_3, @@ -1277,14 +1276,14 @@ void StartEscalatorWarp(u8 metatileBehavior, u8 priority) gTasks[taskId].data[1] = 1; } -void Task_EscalatorWarpFieldEffect(u8 taskId) +static void Task_EscalatorWarpFieldEffect(u8 taskId) { struct Task * task = &gTasks[taskId]; while (sEscalatorWarpFieldEffectFuncs[task->data[0]](task)) ; } -bool8 EscalatorWarpEffect_1(struct Task * task) +static bool8 EscalatorWarpEffect_1(struct Task * task) { FreezeObjectEvents(); CameraObjectReset2(); @@ -1294,7 +1293,7 @@ bool8 EscalatorWarpEffect_1(struct Task * task) return FALSE; } -bool8 EscalatorWarpEffect_2(struct Task * task) +static bool8 EscalatorWarpEffect_2(struct Task * task) { struct ObjectEvent * objectEvent; objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; @@ -1313,7 +1312,7 @@ bool8 EscalatorWarpEffect_2(struct Task * task) return FALSE; } -bool8 EscalatorWarpEffect_3(struct Task * task) +static bool8 EscalatorWarpEffect_3(struct Task * task) { Escalator_AnimatePlayerGoingDown(task); if (task->data[2] > 3) @@ -1324,14 +1323,14 @@ bool8 EscalatorWarpEffect_3(struct Task * task) return FALSE; } -bool8 EscalatorWarpEffect_4(struct Task * task) +static bool8 EscalatorWarpEffect_4(struct Task * task) { Escalator_AnimatePlayerGoingDown(task); Escalator_TransitionToWarpInEffect(); return FALSE; } -bool8 EscalatorWarpEffect_5(struct Task * task) +static bool8 EscalatorWarpEffect_5(struct Task * task) { Escalator_AnimatePlayerGoingUp(task); if (task->data[2] > 3) @@ -1342,7 +1341,7 @@ bool8 EscalatorWarpEffect_5(struct Task * task) return FALSE; } -bool8 EscalatorWarpEffect_6(struct Task * task) +static bool8 EscalatorWarpEffect_6(struct Task * task) { Escalator_AnimatePlayerGoingUp(task); Escalator_TransitionToWarpInEffect(); @@ -1350,7 +1349,7 @@ bool8 EscalatorWarpEffect_6(struct Task * task) } -void Escalator_AnimatePlayerGoingDown(struct Task * task) +static void Escalator_AnimatePlayerGoingDown(struct Task * task) { struct Sprite * sprite; sprite = &gSprites[gPlayerAvatar.spriteId]; @@ -1363,7 +1362,7 @@ void Escalator_AnimatePlayerGoingDown(struct Task * task) } } -void Escalator_AnimatePlayerGoingUp(struct Task * task) +static void Escalator_AnimatePlayerGoingUp(struct Task * task) { struct Sprite * sprite; sprite = &gSprites[gPlayerAvatar.spriteId]; @@ -1376,13 +1375,13 @@ void Escalator_AnimatePlayerGoingUp(struct Task * task) } } -void Escalator_BeginFadeOutToNewMap(void) +static void Escalator_BeginFadeOutToNewMap(void) { TryFadeOutOldMapMusic(); WarpFadeOutScreen(); } -void Escalator_TransitionToWarpInEffect(void) +static void Escalator_TransitionToWarpInEffect(void) { if (!gPaletteFade.active && BGMusicStopped() == TRUE) { @@ -1394,7 +1393,7 @@ void Escalator_TransitionToWarpInEffect(void) } } -bool8 (*const sEscalatorWarpInFieldEffectFuncs[])(struct Task * task) = { +static bool8 (*const sEscalatorWarpInFieldEffectFuncs[])(struct Task * task) = { EscalatorWarpInEffect_1, EscalatorWarpInEffect_2, EscalatorWarpInEffect_3, @@ -1404,7 +1403,7 @@ bool8 (*const sEscalatorWarpInFieldEffectFuncs[])(struct Task * task) = { EscalatorWarpInEffect_7 }; -void FieldCB_EscalatorWarpIn(void) +static void FieldCB_EscalatorWarpIn(void) { Overworld_PlaySpecialMapMusic(); WarpFadeInScreen(); @@ -1415,14 +1414,14 @@ void FieldCB_EscalatorWarpIn(void) gFieldCallback = NULL; } -void Task_EscalatorWarpInFieldEffect(u8 taskId) +static void Task_EscalatorWarpInFieldEffect(u8 taskId) { struct Task * task = &gTasks[taskId]; while (sEscalatorWarpInFieldEffectFuncs[task->data[0]](task)) ; } -bool8 EscalatorWarpInEffect_1(struct Task * task) +static bool8 EscalatorWarpInEffect_1(struct Task * task) { struct ObjectEvent * objectEvent; s16 x; @@ -1447,7 +1446,7 @@ bool8 EscalatorWarpInEffect_1(struct Task * task) return TRUE; } -bool8 EscalatorWarpInEffect_2(struct Task * task) +static bool8 EscalatorWarpInEffect_2(struct Task * task) { struct Sprite * sprite; sprite = &gSprites[gPlayerAvatar.spriteId]; @@ -1457,7 +1456,7 @@ bool8 EscalatorWarpInEffect_2(struct Task * task) return FALSE; } -bool8 EscalatorWarpInEffect_3(struct Task * task) +static bool8 EscalatorWarpInEffect_3(struct Task * task) { struct Sprite * sprite; sprite = &gSprites[gPlayerAvatar.spriteId]; @@ -1478,7 +1477,7 @@ bool8 EscalatorWarpInEffect_3(struct Task * task) } -bool8 EscalatorWarpInEffect_4(struct Task * task) +static bool8 EscalatorWarpInEffect_4(struct Task * task) { struct Sprite * sprite; sprite = &gSprites[gPlayerAvatar.spriteId]; @@ -1488,7 +1487,7 @@ bool8 EscalatorWarpInEffect_4(struct Task * task) return FALSE; } -bool8 EscalatorWarpInEffect_5(struct Task * task) +static bool8 EscalatorWarpInEffect_5(struct Task * task) { struct Sprite * sprite; sprite = &gSprites[gPlayerAvatar.spriteId]; @@ -1508,7 +1507,7 @@ bool8 EscalatorWarpInEffect_5(struct Task * task) return FALSE; } -bool8 EscalatorWarpInEffect_6(struct Task * task) +static bool8 EscalatorWarpInEffect_6(struct Task * task) { if (IsEscalatorMoving()) { @@ -1519,7 +1518,7 @@ bool8 EscalatorWarpInEffect_6(struct Task * task) return TRUE; } -bool8 EscalatorWarpInEffect_7(struct Task * task) +static bool8 EscalatorWarpInEffect_7(struct Task * task) { struct ObjectEvent * objectEvent; objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; @@ -1535,15 +1534,15 @@ bool8 EscalatorWarpInEffect_7(struct Task * task) return FALSE; } -void Task_UseWaterfall(u8 taskId); +static void Task_UseWaterfall(u8 taskId); -bool8 waterfall_0_setup(struct Task * task, struct ObjectEvent * playerObj); -bool8 waterfall_1_do_anim_probably(struct Task * task, struct ObjectEvent * playerObj); -bool8 waterfall_2_wait_anim_finish_probably(struct Task * task, struct ObjectEvent * playerObj); -bool8 waterfall_3_move_player_probably(struct Task * task, struct ObjectEvent * playerObj); -bool8 waterfall_4_wait_player_move_probably(struct Task * task, struct ObjectEvent * playerObj); +static bool8 waterfall_0_setup(struct Task * task, struct ObjectEvent * playerObj); +static bool8 waterfall_1_do_anim_probably(struct Task * task, struct ObjectEvent * playerObj); +static bool8 waterfall_2_wait_anim_finish_probably(struct Task * task, struct ObjectEvent * playerObj); +static bool8 waterfall_3_move_player_probably(struct Task * task, struct ObjectEvent * playerObj); +static bool8 waterfall_4_wait_player_move_probably(struct Task * task, struct ObjectEvent * playerObj); -bool8 (*const sUseWaterfallFieldEffectFuncs[])(struct Task * task, struct ObjectEvent * playerObj) = { +static bool8 (*const sUseWaterfallFieldEffectFuncs[])(struct Task * task, struct ObjectEvent * playerObj) = { waterfall_0_setup, waterfall_1_do_anim_probably, waterfall_2_wait_anim_finish_probably, @@ -1559,13 +1558,13 @@ u32 FldEff_UseWaterfall(void) return 0; } -void Task_UseWaterfall(u8 taskId) +static void Task_UseWaterfall(u8 taskId) { while (sUseWaterfallFieldEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId], &gObjectEvents[gPlayerAvatar.objectEventId])) ; } -bool8 waterfall_0_setup(struct Task * task, struct ObjectEvent * playerObj) +static bool8 waterfall_0_setup(struct Task * task, struct ObjectEvent * playerObj) { ScriptContext2_Enable(); gPlayerAvatar.preventStep = TRUE; @@ -1573,7 +1572,7 @@ bool8 waterfall_0_setup(struct Task * task, struct ObjectEvent * playerObj) return FALSE; } -bool8 waterfall_1_do_anim_probably(struct Task * task, struct ObjectEvent * playerObj) +static bool8 waterfall_1_do_anim_probably(struct Task * task, struct ObjectEvent * playerObj) { ScriptContext2_Enable(); if (!ObjectEventIsMovementOverridden(playerObj)) @@ -1586,7 +1585,7 @@ bool8 waterfall_1_do_anim_probably(struct Task * task, struct ObjectEvent * play return FALSE; } -bool8 waterfall_2_wait_anim_finish_probably(struct Task * task, struct ObjectEvent * playerObj) +static bool8 waterfall_2_wait_anim_finish_probably(struct Task * task, struct ObjectEvent * playerObj) { if (FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON)) return FALSE; @@ -1594,14 +1593,14 @@ bool8 waterfall_2_wait_anim_finish_probably(struct Task * task, struct ObjectEve return TRUE; } -bool8 waterfall_3_move_player_probably(struct Task * task, struct ObjectEvent * playerObj) +static bool8 waterfall_3_move_player_probably(struct Task * task, struct ObjectEvent * playerObj) { ObjectEventSetHeldMovement(playerObj, sub_8063F2C(DIR_NORTH)); task->data[0]++; return FALSE; } -bool8 waterfall_4_wait_player_move_probably(struct Task * task, struct ObjectEvent * playerObj) +static bool8 waterfall_4_wait_player_move_probably(struct Task * task, struct ObjectEvent * playerObj) { if (!ObjectEventClearHeldMovementIfFinished(playerObj)) return FALSE; @@ -1617,12 +1616,12 @@ bool8 waterfall_4_wait_player_move_probably(struct Task * task, struct ObjectEve return FALSE; } -void Task_Dive(u8 taskId); -bool8 dive_1_lock(struct Task * task); -bool8 dive_2_unknown(struct Task * task); -bool8 dive_3_unknown(struct Task * task); +static void Task_Dive(u8 taskId); +static bool8 dive_1_lock(struct Task * task); +static bool8 dive_2_unknown(struct Task * task); +static bool8 dive_3_unknown(struct Task * task); -bool8 (*const sDiveFieldEffectFuncPtrs[])(struct Task * task) = { +static bool8 (*const sDiveFieldEffectFuncPtrs[])(struct Task * task) = { dive_1_lock, dive_2_unknown, dive_3_unknown @@ -1637,20 +1636,20 @@ u32 FldEff_UseDive(void) return 0; } -void Task_Dive(u8 taskId) +static void Task_Dive(u8 taskId) { while (sDiveFieldEffectFuncPtrs[gTasks[taskId].data[0]](&gTasks[taskId])) ; } -bool8 dive_1_lock(struct Task * task) +static bool8 dive_1_lock(struct Task * task) { gPlayerAvatar.preventStep = TRUE; task->data[0]++; return FALSE; } -bool8 dive_2_unknown(struct Task * task) +static bool8 dive_2_unknown(struct Task * task) { ScriptContext2_Enable(); gFieldEffectArguments[0] = task->data[15]; @@ -1659,7 +1658,7 @@ bool8 dive_2_unknown(struct Task * task) return FALSE; } -bool8 dive_3_unknown(struct Task * task) +static bool8 dive_3_unknown(struct Task * task) { struct MapPosition pos; PlayerGetDestCoords(&pos.x, &pos.y); @@ -1672,21 +1671,21 @@ bool8 dive_3_unknown(struct Task * task) return FALSE; } -void Task_LavaridgeGymB1FWarp(u8 taskId); -bool8 LavaridgeGymB1FWarpEffect_1(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); -bool8 LavaridgeGymB1FWarpEffect_2(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); -bool8 LavaridgeGymB1FWarpEffect_3(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); -bool8 LavaridgeGymB1FWarpEffect_4(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); -bool8 LavaridgeGymB1FWarpEffect_5(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); -bool8 LavaridgeGymB1FWarpEffect_6(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); -void FieldCB_LavaridgeGymB1FWarpExit(void); -void Task_LavaridgeGymB1FWarpExit(u8 taskId); -bool8 LavaridgeGymB1FWarpExitEffect_1(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); -bool8 LavaridgeGymB1FWarpExitEffect_2(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); -bool8 LavaridgeGymB1FWarpExitEffect_3(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); -bool8 LavaridgeGymB1FWarpExitEffect_4(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); +static void Task_LavaridgeGymB1FWarp(u8 taskId); +static bool8 LavaridgeGymB1FWarpEffect_1(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); +static bool8 LavaridgeGymB1FWarpEffect_2(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); +static bool8 LavaridgeGymB1FWarpEffect_3(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); +static bool8 LavaridgeGymB1FWarpEffect_4(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); +static bool8 LavaridgeGymB1FWarpEffect_5(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); +static bool8 LavaridgeGymB1FWarpEffect_6(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); +static void FieldCB_LavaridgeGymB1FWarpExit(void); +static void Task_LavaridgeGymB1FWarpExit(u8 taskId); +static bool8 LavaridgeGymB1FWarpExitEffect_1(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); +static bool8 LavaridgeGymB1FWarpExitEffect_2(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); +static bool8 LavaridgeGymB1FWarpExitEffect_3(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); +static bool8 LavaridgeGymB1FWarpExitEffect_4(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); -bool8 (*const sLavaridgeGymB1FWarpEffectFuncs[])(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) = { +static bool8 (*const sLavaridgeGymB1FWarpEffectFuncs[])(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) = { LavaridgeGymB1FWarpEffect_1, LavaridgeGymB1FWarpEffect_2, LavaridgeGymB1FWarpEffect_3, @@ -1700,12 +1699,12 @@ void StartLavaridgeGymB1FWarp(u8 priority) CreateTask(Task_LavaridgeGymB1FWarp, priority); } -void Task_LavaridgeGymB1FWarp(u8 taskId) +static void Task_LavaridgeGymB1FWarp(u8 taskId) { while (sLavaridgeGymB1FWarpEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId], &gObjectEvents[gPlayerAvatar.objectEventId], &gSprites[gPlayerAvatar.spriteId])); } -bool8 LavaridgeGymB1FWarpEffect_1(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) +static bool8 LavaridgeGymB1FWarpEffect_1(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) { FreezeObjectEvents(); CameraObjectReset2(); @@ -1717,7 +1716,7 @@ bool8 LavaridgeGymB1FWarpEffect_1(struct Task * task, struct ObjectEvent * objec return TRUE; } -bool8 LavaridgeGymB1FWarpEffect_2(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) +static bool8 LavaridgeGymB1FWarpEffect_2(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) { SetCameraPanning(0, task->data[1]); task->data[1] = -task->data[1]; @@ -1730,7 +1729,7 @@ bool8 LavaridgeGymB1FWarpEffect_2(struct Task * task, struct ObjectEvent * objec return FALSE; } -bool8 LavaridgeGymB1FWarpEffect_3(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) +static bool8 LavaridgeGymB1FWarpEffect_3(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) { sprite->pos2.y = 0; task->data[3] = 1; @@ -1744,7 +1743,7 @@ bool8 LavaridgeGymB1FWarpEffect_3(struct Task * task, struct ObjectEvent * objec return TRUE; } -bool8 LavaridgeGymB1FWarpEffect_4(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) +static bool8 LavaridgeGymB1FWarpEffect_4(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) { s16 centerToCornerVecY; SetCameraPanning(0, task->data[1]); @@ -1787,7 +1786,7 @@ bool8 LavaridgeGymB1FWarpEffect_4(struct Task * task, struct ObjectEvent * objec return FALSE; } -bool8 LavaridgeGymB1FWarpEffect_5(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) +static bool8 LavaridgeGymB1FWarpEffect_5(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) { TryFadeOutOldMapMusic(); WarpFadeOutScreen(); @@ -1795,7 +1794,7 @@ bool8 LavaridgeGymB1FWarpEffect_5(struct Task * task, struct ObjectEvent * objec return FALSE; } -bool8 LavaridgeGymB1FWarpEffect_6(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) +static bool8 LavaridgeGymB1FWarpEffect_6(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) { if (!gPaletteFade.active && BGMusicStopped() == TRUE) { @@ -1807,14 +1806,14 @@ bool8 LavaridgeGymB1FWarpEffect_6(struct Task * task, struct ObjectEvent * objec return FALSE; } -bool8 (*const sLavaridgeGymB1FWarpExitEffectFuncs[])(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) = { +static bool8 (*const sLavaridgeGymB1FWarpExitEffectFuncs[])(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) = { LavaridgeGymB1FWarpExitEffect_1, LavaridgeGymB1FWarpExitEffect_2, LavaridgeGymB1FWarpExitEffect_3, LavaridgeGymB1FWarpExitEffect_4 }; -void FieldCB_LavaridgeGymB1FWarpExit(void) +static void FieldCB_LavaridgeGymB1FWarpExit(void) { Overworld_PlaySpecialMapMusic(); WarpFadeInScreen(); @@ -1824,12 +1823,12 @@ void FieldCB_LavaridgeGymB1FWarpExit(void) CreateTask(Task_LavaridgeGymB1FWarpExit, 0); } -void Task_LavaridgeGymB1FWarpExit(u8 taskId) +static void Task_LavaridgeGymB1FWarpExit(u8 taskId) { while (sLavaridgeGymB1FWarpExitEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId], &gObjectEvents[gPlayerAvatar.objectEventId], &gSprites[gPlayerAvatar.spriteId])); } -bool8 LavaridgeGymB1FWarpExitEffect_1(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) +static bool8 LavaridgeGymB1FWarpExitEffect_1(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) { CameraObjectReset2(); FreezeObjectEvents(); @@ -1839,7 +1838,7 @@ bool8 LavaridgeGymB1FWarpExitEffect_1(struct Task * task, struct ObjectEvent * o return FALSE; } -bool8 LavaridgeGymB1FWarpExitEffect_2(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) +static bool8 LavaridgeGymB1FWarpExitEffect_2(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) { if (IsWeatherNotFadingIn()) { @@ -1853,7 +1852,7 @@ bool8 LavaridgeGymB1FWarpExitEffect_2(struct Task * task, struct ObjectEvent * o return FALSE; } -bool8 LavaridgeGymB1FWarpExitEffect_3(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) +static bool8 LavaridgeGymB1FWarpExitEffect_3(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) { sprite = &gSprites[task->data[1]]; if (sprite->animCmdIndex > 1) @@ -1867,7 +1866,7 @@ bool8 LavaridgeGymB1FWarpExitEffect_3(struct Task * task, struct ObjectEvent * o return FALSE; } -bool8 LavaridgeGymB1FWarpExitEffect_4(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) +static bool8 LavaridgeGymB1FWarpExitEffect_4(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) { if (ObjectEventClearHeldMovementIfFinished(objectEvent)) { @@ -1879,14 +1878,14 @@ bool8 LavaridgeGymB1FWarpExitEffect_4(struct Task * task, struct ObjectEvent * o return FALSE; } -void Task_LavaridgeGym1FWarp(u8 taskId); -bool8 LavaridgeGym1FWarpEffect_1(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); -bool8 LavaridgeGym1FWarpEffect_2(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); -bool8 LavaridgeGym1FWarpEffect_3(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); -bool8 LavaridgeGym1FWarpEffect_4(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); -bool8 LavaridgeGym1FWarpEffect_5(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); +static void Task_LavaridgeGym1FWarp(u8 taskId); +static bool8 LavaridgeGym1FWarpEffect_1(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); +static bool8 LavaridgeGym1FWarpEffect_2(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); +static bool8 LavaridgeGym1FWarpEffect_3(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); +static bool8 LavaridgeGym1FWarpEffect_4(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); +static bool8 LavaridgeGym1FWarpEffect_5(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); -bool8 (*const sLavaridgeGym1FWarpEffectFuncs[])(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) = { +static bool8 (*const sLavaridgeGym1FWarpEffectFuncs[])(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) = { LavaridgeGym1FWarpEffect_1, LavaridgeGym1FWarpEffect_2, LavaridgeGym1FWarpEffect_3, @@ -1918,12 +1917,12 @@ void StartLavaridgeGym1FWarp(u8 priority) CreateTask(Task_LavaridgeGym1FWarp, priority); } -void Task_LavaridgeGym1FWarp(u8 taskId) +static void Task_LavaridgeGym1FWarp(u8 taskId) { while(sLavaridgeGym1FWarpEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId], &gObjectEvents[gPlayerAvatar.objectEventId], &gSprites[gPlayerAvatar.spriteId])); } -bool8 LavaridgeGym1FWarpEffect_1(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) +static bool8 LavaridgeGym1FWarpEffect_1(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) { FreezeObjectEvents(); CameraObjectReset2(); @@ -1933,7 +1932,7 @@ bool8 LavaridgeGym1FWarpEffect_1(struct Task * task, struct ObjectEvent * object return FALSE; } -bool8 LavaridgeGym1FWarpEffect_2(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) +static bool8 LavaridgeGym1FWarpEffect_2(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) { if (ObjectEventClearHeldMovementIfFinished(objectEvent)) { @@ -1955,7 +1954,7 @@ bool8 LavaridgeGym1FWarpEffect_2(struct Task * task, struct ObjectEvent * object return FALSE; } -bool8 LavaridgeGym1FWarpEffect_3(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) +static bool8 LavaridgeGym1FWarpEffect_3(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) { if (gSprites[task->data[1]].animCmdIndex == 2) { @@ -1965,7 +1964,7 @@ bool8 LavaridgeGym1FWarpEffect_3(struct Task * task, struct ObjectEvent * object return FALSE; } -bool8 LavaridgeGym1FWarpEffect_4(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) +static bool8 LavaridgeGym1FWarpEffect_4(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) { if (!FieldEffectActiveListContains(FLDEFF_POP_OUT_OF_ASH)) { @@ -1976,7 +1975,7 @@ bool8 LavaridgeGym1FWarpEffect_4(struct Task * task, struct ObjectEvent * object return FALSE; } -bool8 LavaridgeGym1FWarpEffect_5(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) +static bool8 LavaridgeGym1FWarpEffect_5(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) { if (!gPaletteFade.active && BGMusicStopped() == TRUE) { @@ -2006,17 +2005,17 @@ void SpriteCB_PopOutOfAsh(struct Sprite * sprite) } } -void Task_DoEscapeRopeFieldEffect(u8 taskId); -void EscapeRopeFieldEffect_Step0(struct Task * task); -void EscapeRopeFieldEffect_Step1(struct Task * task); -u8 sub_808576C(struct ObjectEvent * playerObj, s16 *a1p, s16 *a2p); -bool32 sub_80857F0(struct ObjectEvent * playerObj, s16 *a1p, s16 *a2p); -void FieldCallback_EscapeRopeExit(void); -void Task_DoEscapeRopeExitFieldEffect(u8 taskId); -void EscapeRopeExitFieldEffect_Step0(struct Task * task); -void EscapeRopeExitFieldEffect_Step1(struct Task * task); +static void Task_DoEscapeRopeFieldEffect(u8 taskId); +static void EscapeRopeFieldEffect_Step0(struct Task * task); +static void EscapeRopeFieldEffect_Step1(struct Task * task); +static u8 sub_808576C(struct ObjectEvent * playerObj, s16 *a1p, s16 *a2p); +static bool32 sub_80857F0(struct ObjectEvent * playerObj, s16 *a1p, s16 *a2p); +static void FieldCallback_EscapeRopeExit(void); +static void Task_DoEscapeRopeExitFieldEffect(u8 taskId); +static void EscapeRopeExitFieldEffect_Step0(struct Task * task); +static void EscapeRopeExitFieldEffect_Step1(struct Task * task); -void (*const gEscapeRopeFieldEffectFuncs[])(struct Task * task) = { +static void (*const gEscapeRopeFieldEffectFuncs[])(struct Task * task) = { EscapeRopeFieldEffect_Step0, EscapeRopeFieldEffect_Step1 }; @@ -2028,12 +2027,12 @@ void StartEscapeRopeFieldEffect(void) CreateTask(Task_DoEscapeRopeFieldEffect, 80); } -void Task_DoEscapeRopeFieldEffect(u8 taskId) +static void Task_DoEscapeRopeFieldEffect(u8 taskId) { gEscapeRopeFieldEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); } -void EscapeRopeFieldEffect_Step0(struct Task * task) +static void EscapeRopeFieldEffect_Step0(struct Task * task) { task->data[0]++; task->data[13] = 64; @@ -2041,7 +2040,7 @@ void EscapeRopeFieldEffect_Step0(struct Task * task) task->data[15] = 0; } -void EscapeRopeFieldEffect_Step1(struct Task * task) +static void EscapeRopeFieldEffect_Step1(struct Task * task) { struct ObjectEvent * playerObj = &gObjectEvents[gPlayerAvatar.objectEventId]; s16 *data = task->data; @@ -2071,7 +2070,7 @@ void EscapeRopeFieldEffect_Step1(struct Task * task) } } -const u8 gUnknown_83CC0E8[] = { +static const u8 gUnknown_83CC0E8[] = { [DIR_NONE] = DIR_SOUTH, [DIR_SOUTH] = DIR_WEST, [DIR_WEST] = DIR_NORTH, @@ -2079,7 +2078,7 @@ const u8 gUnknown_83CC0E8[] = { [DIR_EAST] = DIR_SOUTH, }; -u8 sub_808576C(struct ObjectEvent * playerObj, s16 *delay_p, s16 *stage_p) +static u8 sub_808576C(struct ObjectEvent * playerObj, s16 *delay_p, s16 *stage_p) { if (!ObjectEventIsMovementOverridden(playerObj) || ObjectEventClearHeldMovementIfFinished(playerObj)) { @@ -2094,7 +2093,7 @@ u8 sub_808576C(struct ObjectEvent * playerObj, s16 *delay_p, s16 *stage_p) return playerObj->facingDirection; } -bool32 sub_80857F0(struct ObjectEvent * playerObj, s16 *state_p, s16 *y_p) +static bool32 sub_80857F0(struct ObjectEvent * playerObj, s16 *state_p, s16 *y_p) { struct Sprite * sprite = &gSprites[playerObj->spriteId]; switch (*state_p) @@ -2130,12 +2129,12 @@ bool32 sub_80857F0(struct ObjectEvent * playerObj, s16 *state_p, s16 *y_p) return TRUE; } -void (*const sEscapeRopeExitEffectFuncs[])(struct Task * task) = { +static void (*const sEscapeRopeExitEffectFuncs[])(struct Task * task) = { EscapeRopeExitFieldEffect_Step0, EscapeRopeExitFieldEffect_Step1 }; -bool32 sub_80858A4(struct ObjectEvent * playerObj, s16 *state_p, s16 *y_p, s16 *priority_p, s16 *subpriority_p, s16 *subspriteMode_p) +static bool32 sub_80858A4(struct ObjectEvent * playerObj, s16 *state_p, s16 *y_p, s16 *priority_p, s16 *subpriority_p, s16 *subspriteMode_p) { struct Sprite * sprite = &gSprites[playerObj->spriteId]; switch (*state_p) @@ -2181,7 +2180,7 @@ bool32 sub_80858A4(struct ObjectEvent * playerObj, s16 *state_p, s16 *y_p, s16 * return TRUE; } -void FieldCallback_EscapeRopeExit(void) +static void FieldCallback_EscapeRopeExit(void) { Overworld_PlaySpecialMapMusic(); WarpFadeInScreen(); @@ -2193,12 +2192,12 @@ void FieldCallback_EscapeRopeExit(void) CreateTask(Task_DoEscapeRopeExitFieldEffect, 0); } -void Task_DoEscapeRopeExitFieldEffect(u8 taskId) +static void Task_DoEscapeRopeExitFieldEffect(u8 taskId) { sEscapeRopeExitEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); } -void EscapeRopeExitFieldEffect_Step0(struct Task * task) +static void EscapeRopeExitFieldEffect_Step0(struct Task * task) { if (IsWeatherNotFadingIn()) { @@ -2208,7 +2207,7 @@ void EscapeRopeExitFieldEffect_Step0(struct Task * task) } } -void EscapeRopeExitFieldEffect_Step1(struct Task * task) +static void EscapeRopeExitFieldEffect_Step1(struct Task * task) { s16 *data = task->data; struct ObjectEvent * playerObj = &gObjectEvents[gPlayerAvatar.objectEventId]; @@ -2233,18 +2232,18 @@ void EscapeRopeExitFieldEffect_Step1(struct Task * task) } } -void Task_DoTeleportFieldEffect(u8 taskId); -void TeleportFieldEffectTask1(struct Task * task); -void TeleportFieldEffectTask2(struct Task * task); -void TeleportFieldEffectTask3(struct Task * task); -void TeleportFieldEffectTask4(struct Task * task); -void FieldCallback_TeleportIn(void); -void Task_DoTeleportInFieldEffect(u8 taskId); -void TeleportInFieldEffectTask1(struct Task * task); -void TeleportInFieldEffectTask2(struct Task * task); -void TeleportInFieldEffectTask3(struct Task * task); +static void Task_DoTeleportFieldEffect(u8 taskId); +static void TeleportFieldEffectTask1(struct Task * task); +static void TeleportFieldEffectTask2(struct Task * task); +static void TeleportFieldEffectTask3(struct Task * task); +static void TeleportFieldEffectTask4(struct Task * task); +static void FieldCallback_TeleportIn(void); +static void Task_DoTeleportInFieldEffect(u8 taskId); +static void TeleportInFieldEffectTask1(struct Task * task); +static void TeleportInFieldEffectTask2(struct Task * task); +static void TeleportInFieldEffectTask3(struct Task * task); -void (*const sTeleportEffectFuncs[])(struct Task * ) = { +static void (*const sTeleportEffectFuncs[])(struct Task * ) = { TeleportFieldEffectTask1, TeleportFieldEffectTask2, TeleportFieldEffectTask3, @@ -2256,12 +2255,12 @@ void CreateTeleportFieldEffectTask(void) CreateTask(Task_DoTeleportFieldEffect, 0); } -void Task_DoTeleportFieldEffect(u8 taskId) +static void Task_DoTeleportFieldEffect(u8 taskId) { sTeleportEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); } -void TeleportFieldEffectTask1(struct Task * task) +static void TeleportFieldEffectTask1(struct Task * task) { ScriptContext2_Enable(); FreezeObjectEvents(); @@ -2270,7 +2269,7 @@ void TeleportFieldEffectTask1(struct Task * task) task->data[0]++; } -void TeleportFieldEffectTask2(struct Task * task) +static void TeleportFieldEffectTask2(struct Task * task) { u8 spinDirections[5] = { [DIR_NONE] = DIR_SOUTH, @@ -2296,7 +2295,7 @@ void TeleportFieldEffectTask2(struct Task * task) } } -void TeleportFieldEffectTask3(struct Task * task) +static void TeleportFieldEffectTask3(struct Task * task) { u8 spinDirections[5] = {DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH}; struct ObjectEvent * objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; @@ -2324,7 +2323,7 @@ void TeleportFieldEffectTask3(struct Task * task) } } -void TeleportFieldEffectTask4(struct Task * task) +static void TeleportFieldEffectTask4(struct Task * task) { if (!gPaletteFade.active) { @@ -2339,13 +2338,13 @@ void TeleportFieldEffectTask4(struct Task * task) } } -void (*const sTeleportInEffectFuncs[])(struct Task * ) = { +static void (*const sTeleportInEffectFuncs[])(struct Task * ) = { TeleportInFieldEffectTask1, TeleportInFieldEffectTask2, TeleportInFieldEffectTask3 }; -void FieldCallback_TeleportIn(void) +static void FieldCallback_TeleportIn(void) { Overworld_PlaySpecialMapMusic(); WarpFadeInScreen(); @@ -2358,12 +2357,12 @@ void FieldCallback_TeleportIn(void) CreateTask(Task_DoTeleportInFieldEffect, 0); } -void Task_DoTeleportInFieldEffect(u8 taskId) +static void Task_DoTeleportInFieldEffect(u8 taskId) { sTeleportInEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); } -void TeleportInFieldEffectTask1(struct Task * task) +static void TeleportInFieldEffectTask1(struct Task * task) { struct Sprite * sprite; s16 centerToCornerVecY; @@ -2382,7 +2381,7 @@ void TeleportInFieldEffectTask1(struct Task * task) } } -void TeleportInFieldEffectTask2(struct Task * task) +static void TeleportInFieldEffectTask2(struct Task * task) { u8 spinDirections[5] = {1, 3, 4, 2, 1}; struct ObjectEvent * objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; @@ -2421,7 +2420,7 @@ void TeleportInFieldEffectTask2(struct Task * task) } } -void TeleportInFieldEffectTask3(struct Task * task) +static void TeleportInFieldEffectTask3(struct Task * task) { u8 spinDirections[5] = {1, 3, 4, 2, 1}; struct ObjectEvent * objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; @@ -2439,34 +2438,34 @@ void TeleportInFieldEffectTask3(struct Task * task) } } -void Task_ShowMon_Outdoors(u8 taskId); -void ShowMonEffect_Outdoors_1(struct Task * task); -void ShowMonEffect_Outdoors_2(struct Task * task); -void ShowMonEffect_Outdoors_3(struct Task * task); -void ShowMonEffect_Outdoors_4(struct Task * task); -void ShowMonEffect_Outdoors_5(struct Task * task); -void ShowMonEffect_Outdoors_6(struct Task * task); -void ShowMonEffect_Outdoors_7(struct Task * task); -void VBlankCB_ShowMonEffect_Outdoors(void); -void LoadFieldMoveStreaksTilemapToVram(u16 screenbase); -void Task_ShowMon_Indoors(u8 taskId); -void ShowMonEffect_Indoors_1(struct Task * task); -void ShowMonEffect_Indoors_2(struct Task * task); -void ShowMonEffect_Indoors_3(struct Task * task); -void ShowMonEffect_Indoors_4(struct Task * task); -void ShowMonEffect_Indoors_5(struct Task * task); -void ShowMonEffect_Indoors_6(struct Task * task); -void ShowMonEffect_Indoors_7(struct Task * task); -void VBlankCB_ShowMonEffect_Indoors(void); -void sub_8086728(struct Task * task); -bool8 sub_8086738(struct Task * task); -bool8 sub_80867F0(struct Task * task); -u8 sub_8086860(u32 species, u32 otId, u32 personality); -void sub_80868C0(struct Sprite * sprite); -void sub_8086904(struct Sprite * sprite); -void sub_8086920(struct Sprite * sprite); +static void Task_ShowMon_Outdoors(u8 taskId); +static void ShowMonEffect_Outdoors_1(struct Task * task); +static void ShowMonEffect_Outdoors_2(struct Task * task); +static void ShowMonEffect_Outdoors_3(struct Task * task); +static void ShowMonEffect_Outdoors_4(struct Task * task); +static void ShowMonEffect_Outdoors_5(struct Task * task); +static void ShowMonEffect_Outdoors_6(struct Task * task); +static void ShowMonEffect_Outdoors_7(struct Task * task); +static void VBlankCB_ShowMonEffect_Outdoors(void); +static void LoadFieldMoveStreaksTilemapToVram(u16 screenbase); +static void Task_ShowMon_Indoors(u8 taskId); +static void ShowMonEffect_Indoors_1(struct Task * task); +static void ShowMonEffect_Indoors_2(struct Task * task); +static void ShowMonEffect_Indoors_3(struct Task * task); +static void ShowMonEffect_Indoors_4(struct Task * task); +static void ShowMonEffect_Indoors_5(struct Task * task); +static void ShowMonEffect_Indoors_6(struct Task * task); +static void ShowMonEffect_Indoors_7(struct Task * task); +static void VBlankCB_ShowMonEffect_Indoors(void); +static void sub_8086728(struct Task * task); +static bool8 sub_8086738(struct Task * task); +static bool8 sub_80867F0(struct Task * task); +static u8 sub_8086860(u32 species, u32 otId, u32 personality); +static void sub_80868C0(struct Sprite * sprite); +static void sub_8086904(struct Sprite * sprite); +static void sub_8086920(struct Sprite * sprite); -void (*const sShowMonOutdoorsEffectFuncs[])(struct Task * task) = { +static void (*const sShowMonOutdoorsEffectFuncs[])(struct Task * task) = { ShowMonEffect_Outdoors_1, ShowMonEffect_Outdoors_2, ShowMonEffect_Outdoors_3, @@ -2500,12 +2499,12 @@ u32 FldEff_FieldMoveShowMonInit(void) return 0; } -void Task_ShowMon_Outdoors(u8 taskId) +static void Task_ShowMon_Outdoors(u8 taskId) { sShowMonOutdoorsEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); } -void ShowMonEffect_Outdoors_1(struct Task * task) +static void ShowMonEffect_Outdoors_1(struct Task * task) { task->data[11] = GetGpuReg(REG_OFFSET_WININ); task->data[12] = GetGpuReg(REG_OFFSET_WINOUT); @@ -2522,7 +2521,7 @@ void ShowMonEffect_Outdoors_1(struct Task * task) task->data[0]++; } -void ShowMonEffect_Outdoors_2(struct Task * task) +static void ShowMonEffect_Outdoors_2(struct Task * task) { u16 charbase = ((GetGpuReg(REG_OFFSET_BG0CNT) >> 2) << 14); u16 screenbase = ((GetGpuReg(REG_OFFSET_BG0CNT) >> 8) << 11); @@ -2533,7 +2532,7 @@ void ShowMonEffect_Outdoors_2(struct Task * task) task->data[0]++; } -void ShowMonEffect_Outdoors_3(struct Task * task) +static void ShowMonEffect_Outdoors_3(struct Task * task) { s16 v0; s16 v2; @@ -2566,7 +2565,7 @@ void ShowMonEffect_Outdoors_3(struct Task * task) } } -void ShowMonEffect_Outdoors_4(struct Task * task) +static void ShowMonEffect_Outdoors_4(struct Task * task) { task->data[5] -= 16; if (gSprites[task->data[15]].data[7]) @@ -2575,7 +2574,7 @@ void ShowMonEffect_Outdoors_4(struct Task * task) } } -void ShowMonEffect_Outdoors_5(struct Task * task) +static void ShowMonEffect_Outdoors_5(struct Task * task) { s16 v2; s16 v3; @@ -2599,7 +2598,7 @@ void ShowMonEffect_Outdoors_5(struct Task * task) } } -void ShowMonEffect_Outdoors_6(struct Task * task) +static void ShowMonEffect_Outdoors_6(struct Task * task) { u16 bg0cnt = (GetGpuReg(REG_OFFSET_BG0CNT) >> 8) << 11; CpuFill32(0, (void *)VRAM + bg0cnt, 0x800); @@ -2610,7 +2609,7 @@ void ShowMonEffect_Outdoors_6(struct Task * task) task->data[0]++; } -void ShowMonEffect_Outdoors_7(struct Task * task) +static void ShowMonEffect_Outdoors_7(struct Task * task) { IntrCallback callback; LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&callback); @@ -2623,7 +2622,7 @@ void ShowMonEffect_Outdoors_7(struct Task * task) DestroyTask(FindTaskIdByFunc(Task_ShowMon_Outdoors)); } -void VBlankCB_ShowMonEffect_Outdoors(void) +static void VBlankCB_ShowMonEffect_Outdoors(void) { IntrCallback callback; struct Task * task = &gTasks[FindTaskIdByFunc(Task_ShowMon_Outdoors)]; @@ -2637,7 +2636,7 @@ void VBlankCB_ShowMonEffect_Outdoors(void) SetGpuReg(REG_OFFSET_BG0VOFS, task->data[6]); } -void LoadFieldMoveStreaksTilemapToVram(u16 screenbase) +static void LoadFieldMoveStreaksTilemapToVram(u16 screenbase) { u16 i; u16 *dest; @@ -2648,7 +2647,7 @@ void LoadFieldMoveStreaksTilemapToVram(u16 screenbase) } } -void (*const sShowMonIndoorsEffectFuncs[])(struct Task * ) = { +static void (*const sShowMonIndoorsEffectFuncs[])(struct Task * ) = { ShowMonEffect_Indoors_1, ShowMonEffect_Indoors_2, ShowMonEffect_Indoors_3, @@ -2658,12 +2657,12 @@ void (*const sShowMonIndoorsEffectFuncs[])(struct Task * ) = { ShowMonEffect_Indoors_7 }; -void Task_ShowMon_Indoors(u8 taskId) +static void Task_ShowMon_Indoors(u8 taskId) { sShowMonIndoorsEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); } -void ShowMonEffect_Indoors_1(struct Task * task) +static void ShowMonEffect_Indoors_1(struct Task * task) { SetGpuReg(REG_OFFSET_BG0HOFS, task->data[1]); SetGpuReg(REG_OFFSET_BG0VOFS, task->data[2]); @@ -2672,7 +2671,7 @@ void ShowMonEffect_Indoors_1(struct Task * task) task->data[0]++; } -void ShowMonEffect_Indoors_2(struct Task * task) +static void ShowMonEffect_Indoors_2(struct Task * task) { u16 charbase; u16 screenbase; @@ -2685,7 +2684,7 @@ void ShowMonEffect_Indoors_2(struct Task * task) task->data[0]++; } -void ShowMonEffect_Indoors_3(struct Task * task) +static void ShowMonEffect_Indoors_3(struct Task * task) { if (sub_8086738(task)) { @@ -2699,7 +2698,7 @@ void ShowMonEffect_Indoors_3(struct Task * task) sub_8086728(task); } -void ShowMonEffect_Indoors_4(struct Task * task) +static void ShowMonEffect_Indoors_4(struct Task * task) { sub_8086728(task); if (gSprites[task->data[15]].data[7]) @@ -2708,7 +2707,7 @@ void ShowMonEffect_Indoors_4(struct Task * task) } } -void ShowMonEffect_Indoors_5(struct Task * task) +static void ShowMonEffect_Indoors_5(struct Task * task) { sub_8086728(task); task->data[3] = task->data[1] & 7; @@ -2719,7 +2718,7 @@ void ShowMonEffect_Indoors_5(struct Task * task) task->data[0]++; } -void ShowMonEffect_Indoors_6(struct Task * task) +static void ShowMonEffect_Indoors_6(struct Task * task) { sub_8086728(task); if (sub_80867F0(task)) @@ -2728,7 +2727,7 @@ void ShowMonEffect_Indoors_6(struct Task * task) } } -void ShowMonEffect_Indoors_7(struct Task * task) +static void ShowMonEffect_Indoors_7(struct Task * task) { IntrCallback intrCallback; u16 charbase; @@ -2744,7 +2743,7 @@ void ShowMonEffect_Indoors_7(struct Task * task) DestroyTask(FindTaskIdByFunc(Task_ShowMon_Indoors)); } -void VBlankCB_ShowMonEffect_Indoors(void) +static void VBlankCB_ShowMonEffect_Indoors(void) { IntrCallback intrCallback; struct Task * task; @@ -2755,13 +2754,13 @@ void VBlankCB_ShowMonEffect_Indoors(void) SetGpuReg(REG_OFFSET_BG0VOFS, task->data[2]); } -void sub_8086728(struct Task * task) +static void sub_8086728(struct Task * task) { task->data[1] -= 16; task->data[3] += 16; } -bool8 sub_8086738(struct Task * task) +static bool8 sub_8086738(struct Task * task) { u16 i; u16 srcOffs; @@ -2790,7 +2789,7 @@ bool8 sub_8086738(struct Task * task) return FALSE; } -bool8 sub_80867F0(struct Task * task) +static bool8 sub_80867F0(struct Task * task) { u16 i; u16 dstOffs; @@ -2814,7 +2813,7 @@ bool8 sub_80867F0(struct Task * task) return FALSE; } -u8 sub_8086860(u32 species, u32 otId, u32 personality) +static u8 sub_8086860(u32 species, u32 otId, u32 personality) { bool16 playCry; u8 monSprite; @@ -2830,7 +2829,7 @@ u8 sub_8086860(u32 species, u32 otId, u32 personality) return monSprite; } -void sub_80868C0(struct Sprite * sprite) +static void sub_80868C0(struct Sprite * sprite) { if ((sprite->pos1.x -= 20) <= 0x78) { @@ -2848,7 +2847,7 @@ void sub_80868C0(struct Sprite * sprite) } } -void sub_8086904(struct Sprite * sprite) +static void sub_8086904(struct Sprite * sprite) { if ((--sprite->data[1]) == 0) { @@ -2856,7 +2855,7 @@ void sub_8086904(struct Sprite * sprite) } } -void sub_8086920(struct Sprite * sprite) +static void sub_8086920(struct Sprite * sprite) { if (sprite->pos1.x < -0x40) { @@ -2868,14 +2867,14 @@ void sub_8086920(struct Sprite * sprite) } } -void Task_FldEffUseSurf(u8 taskId); -void UseSurfEffect_1(struct Task * task); -void UseSurfEffect_2(struct Task * task); -void UseSurfEffect_3(struct Task * task); -void UseSurfEffect_4(struct Task * task); -void UseSurfEffect_5(struct Task * task); +static void Task_FldEffUseSurf(u8 taskId); +static void UseSurfEffect_1(struct Task * task); +static void UseSurfEffect_2(struct Task * task); +static void UseSurfEffect_3(struct Task * task); +static void UseSurfEffect_4(struct Task * task); +static void UseSurfEffect_5(struct Task * task); -void (*const sUseSurfEffectFuncs[])(struct Task * ) = { +static void (*const sUseSurfEffectFuncs[])(struct Task * ) = { UseSurfEffect_1, UseSurfEffect_2, UseSurfEffect_3, @@ -2893,12 +2892,12 @@ u8 FldEff_UseSurf(void) return FALSE; } -void Task_FldEffUseSurf(u8 taskId) +static void Task_FldEffUseSurf(u8 taskId) { sUseSurfEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); } -void UseSurfEffect_1(struct Task * task) +static void UseSurfEffect_1(struct Task * task) { ScriptContext2_Enable(); FreezeObjectEvents(); @@ -2909,7 +2908,7 @@ void UseSurfEffect_1(struct Task * task) task->data[0]++; } -void UseSurfEffect_2(struct Task * task) +static void UseSurfEffect_2(struct Task * task) { struct ObjectEvent * objectEvent; objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; @@ -2921,7 +2920,7 @@ void UseSurfEffect_2(struct Task * task) } } -void UseSurfEffect_3(struct Task * task) +static void UseSurfEffect_3(struct Task * task) { struct ObjectEvent * objectEvent; objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; @@ -2933,7 +2932,7 @@ void UseSurfEffect_3(struct Task * task) } } -void UseSurfEffect_4(struct Task * task) +static void UseSurfEffect_4(struct Task * task) { struct ObjectEvent * objectEvent; if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON)) @@ -2950,7 +2949,7 @@ void UseSurfEffect_4(struct Task * task) } } -void UseSurfEffect_5(struct Task * task) +static void UseSurfEffect_5(struct Task * task) { struct ObjectEvent * objectEvent; objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; @@ -2968,13 +2967,13 @@ void UseSurfEffect_5(struct Task * task) } } -void Task_FldEffUseVsSeeker(u8 taskId); -void UseVsSeekerEffect_1(struct Task * task); -void UseVsSeekerEffect_2(struct Task * task); -void UseVsSeekerEffect_3(struct Task * task); -void UseVsSeekerEffect_4(struct Task * task); +static void Task_FldEffUseVsSeeker(u8 taskId); +static void UseVsSeekerEffect_1(struct Task * task); +static void UseVsSeekerEffect_2(struct Task * task); +static void UseVsSeekerEffect_3(struct Task * task); +static void UseVsSeekerEffect_4(struct Task * task); -void (*const sUseVsSeekerEffectFuncs[])(struct Task * task) = { +static void (*const sUseVsSeekerEffectFuncs[])(struct Task * task) = { UseVsSeekerEffect_1, UseVsSeekerEffect_2, UseVsSeekerEffect_3, @@ -2989,12 +2988,12 @@ u32 FldEff_UseVsSeeker(void) return 0; } -void Task_FldEffUseVsSeeker(u8 taskId) +static void Task_FldEffUseVsSeeker(u8 taskId) { sUseVsSeekerEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); } -void UseVsSeekerEffect_1(struct Task * task) +static void UseVsSeekerEffect_1(struct Task * task) { ScriptContext2_Enable(); FreezeObjectEvents(); @@ -3002,7 +3001,7 @@ void UseVsSeekerEffect_1(struct Task * task) task->data[0]++; } -void UseVsSeekerEffect_2(struct Task * task) +static void UseVsSeekerEffect_2(struct Task * task) { struct ObjectEvent * playerObj = &gObjectEvents[gPlayerAvatar.objectEventId]; if (!ObjectEventIsMovementOverridden(playerObj) || ObjectEventClearHeldMovementIfFinished(playerObj)) @@ -3013,7 +3012,7 @@ void UseVsSeekerEffect_2(struct Task * task) } } -void UseVsSeekerEffect_3(struct Task * task) +static void UseVsSeekerEffect_3(struct Task * task) { struct ObjectEvent * playerObj = &gObjectEvents[gPlayerAvatar.objectEventId]; if (ObjectEventClearHeldMovementIfFinished(playerObj)) @@ -3029,7 +3028,7 @@ void UseVsSeekerEffect_3(struct Task * task) } } -void UseVsSeekerEffect_4(struct Task * task) +static void UseVsSeekerEffect_4(struct Task * task) { struct ObjectEvent * playerObj = &gObjectEvents[gPlayerAvatar.objectEventId]; if (ObjectEventClearHeldMovementIfFinished(playerObj)) @@ -3040,7 +3039,7 @@ void UseVsSeekerEffect_4(struct Task * task) } } -void sub_8086D94(struct Sprite * sprite); +static void sub_8086D94(struct Sprite * sprite); u8 FldEff_NpcFlyOut(void) { @@ -3055,7 +3054,7 @@ u8 FldEff_NpcFlyOut(void) return spriteId; } -void sub_8086D94(struct Sprite * sprite) +static void sub_8086D94(struct Sprite * sprite) { struct Sprite * npcSprite; @@ -3077,26 +3076,26 @@ void sub_8086D94(struct Sprite * sprite) } } -void Task_UseFly(u8 taskId); -void UseFlyEffect_1(struct Task * task); -void UseFlyEffect_2(struct Task * task); -void UseFlyEffect_3(struct Task * task); -void UseFlyEffect_4(struct Task * task); -void UseFlyEffect_5(struct Task * task); -void UseFlyEffect_6(struct Task * task); -void UseFlyEffect_7(struct Task * task); -void UseFlyEffect_8(struct Task * task); -void UseFlyEffect_9(struct Task * task); -u8 sub_8087168(void); -bool8 sub_80871AC(u8 flyBlobSpriteId); -void sub_80871C8(u8 flyBlobSpriteId); -void sub_8087204(u8 flyBlobSpriteId, u8 playerSpriteId); -void sub_8087220(struct Sprite * sprite); -void sub_80872F0(struct Sprite * sprite); -void sub_80877FC(struct Sprite * sprite, u8 affineAnimId); -void sub_8087828(struct Sprite * sprite); +static void Task_UseFly(u8 taskId); +static void UseFlyEffect_1(struct Task * task); +static void UseFlyEffect_2(struct Task * task); +static void UseFlyEffect_3(struct Task * task); +static void UseFlyEffect_4(struct Task * task); +static void UseFlyEffect_5(struct Task * task); +static void UseFlyEffect_6(struct Task * task); +static void UseFlyEffect_7(struct Task * task); +static void UseFlyEffect_8(struct Task * task); +static void UseFlyEffect_9(struct Task * task); +static u8 sub_8087168(void); +static bool8 sub_80871AC(u8 flyBlobSpriteId); +static void sub_80871C8(u8 flyBlobSpriteId); +static void sub_8087204(u8 flyBlobSpriteId, u8 playerSpriteId); +static void sub_8087220(struct Sprite * sprite); +static void sub_80872F0(struct Sprite * sprite); +static void sub_80877FC(struct Sprite * sprite, u8 affineAnimId); +static void sub_8087828(struct Sprite * sprite); -void (*const sUseFlyEffectFuncs[])(struct Task * ) = { +static void (*const sUseFlyEffectFuncs[])(struct Task * ) = { UseFlyEffect_1, UseFlyEffect_2, UseFlyEffect_3, @@ -3115,12 +3114,12 @@ u8 FldEff_UseFly(void) return 0; } -void Task_UseFly(u8 taskId) +static void Task_UseFly(u8 taskId) { sUseFlyEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); } -void UseFlyEffect_1(struct Task * task) +static void UseFlyEffect_1(struct Task * task) { struct ObjectEvent * objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; if (!ObjectEventIsMovementOverridden(objectEvent) || ObjectEventClearHeldMovementIfFinished(objectEvent)) @@ -3134,7 +3133,7 @@ void UseFlyEffect_1(struct Task * task) } } -void UseFlyEffect_2(struct Task * task) +static void UseFlyEffect_2(struct Task * task) { struct ObjectEvent * objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; if (ObjectEventClearHeldMovementIfFinished(objectEvent)) @@ -3145,7 +3144,7 @@ void UseFlyEffect_2(struct Task * task) } } -void UseFlyEffect_3(struct Task * task) +static void UseFlyEffect_3(struct Task * task) { if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON)) { @@ -3160,7 +3159,7 @@ void UseFlyEffect_3(struct Task * task) } } -void UseFlyEffect_4(struct Task * task) +static void UseFlyEffect_4(struct Task * task) { if (sub_80871AC(task->data[1])) { @@ -3171,7 +3170,7 @@ void UseFlyEffect_4(struct Task * task) } } -void UseFlyEffect_5(struct Task * task) +static void UseFlyEffect_5(struct Task * task) { struct ObjectEvent * objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; if ((task->data[2] == 0 || (--task->data[2]) == 0) && ObjectEventClearHeldMovementIfFinished(objectEvent)) @@ -3182,7 +3181,7 @@ void UseFlyEffect_5(struct Task * task) } } -void UseFlyEffect_6(struct Task * task) +static void UseFlyEffect_6(struct Task * task) { if ((++task->data[2]) >= 8) { @@ -3196,7 +3195,7 @@ void UseFlyEffect_6(struct Task * task) } } -void UseFlyEffect_7(struct Task * task) +static void UseFlyEffect_7(struct Task * task) { if ((++task->data[2]) >= 10) { @@ -3213,7 +3212,7 @@ void UseFlyEffect_7(struct Task * task) } } -void UseFlyEffect_8(struct Task * task) +static void UseFlyEffect_8(struct Task * task) { if (sub_80871AC(task->data[1])) { @@ -3222,7 +3221,7 @@ void UseFlyEffect_8(struct Task * task) } } -void UseFlyEffect_9(struct Task * task) +static void UseFlyEffect_9(struct Task * task) { if (!gPaletteFade.active) { @@ -3231,7 +3230,7 @@ void UseFlyEffect_9(struct Task * task) } } -u8 sub_8087168(void) +static u8 sub_8087168(void) { u8 spriteId; struct Sprite * sprite; @@ -3243,12 +3242,12 @@ u8 sub_8087168(void) return spriteId; } -u8 sub_80871AC(u8 spriteId) +static u8 sub_80871AC(u8 spriteId) { return gSprites[spriteId].data[7]; } -void sub_80871C8(u8 spriteId) +static void sub_80871C8(u8 spriteId) { struct Sprite * sprite; sprite = &gSprites[spriteId]; @@ -3261,29 +3260,29 @@ void sub_80871C8(u8 spriteId) sprite->data[6] = 0x40; } -void sub_8087204(u8 a0, u8 a1) +static void sub_8087204(u8 a0, u8 a1) { gSprites[a0].data[6] = a1; } -const union AffineAnimCmd gUnknown_83CC19C[] = { +static const union AffineAnimCmd gUnknown_83CC19C[] = { AFFINEANIMCMD_FRAME( 8, 8, 226, 0), AFFINEANIMCMD_FRAME(28, 28, 0, 30), AFFINEANIMCMD_END }; -const union AffineAnimCmd gUnknown_83CC1B4[] = { +static const union AffineAnimCmd gUnknown_83CC1B4[] = { AFFINEANIMCMD_FRAME(256, 256, 64, 0), AFFINEANIMCMD_FRAME(-10, -10, 0, 22), AFFINEANIMCMD_END }; -const union AffineAnimCmd *const gUnknown_83CC1CC[] = { +static const union AffineAnimCmd *const gUnknown_83CC1CC[] = { gUnknown_83CC19C, gUnknown_83CC1B4 }; -void sub_8087220(struct Sprite * sprite) +static void sub_8087220(struct Sprite * sprite) { if (sprite->data[7] == 0) { @@ -3319,7 +3318,7 @@ void sub_8087220(struct Sprite * sprite) } } -void sub_80872F0(struct Sprite * sprite) +static void sub_80872F0(struct Sprite * sprite) { sprite->pos2.x = Cos(sprite->data[2], 0x8c); sprite->pos2.y = Sin(sprite->data[2], 0x48); @@ -3339,7 +3338,7 @@ void sub_80872F0(struct Sprite * sprite) } } -void sub_8087364(struct Sprite * sprite) +static void sub_8087364(struct Sprite * sprite) { if (sprite->data[7] == 0) { @@ -3386,23 +3385,23 @@ void sub_8087364(struct Sprite * sprite) } } -void sub_8087458(u8 spriteId) +static void sub_8087458(u8 spriteId) { sub_80871C8(spriteId); gSprites[spriteId].callback = sub_8087364; } -void Task_FldEffFlyIn(u8 taskId); -void FlyInEffect_1(struct Task * task); -void FlyInEffect_2(struct Task * task); -void FlyInEffect_3(struct Task * task); -void FlyInEffect_4(struct Task * task); -void FlyInEffect_5(struct Task * task); -void FlyInEffect_6(struct Task * task); -void FlyInEffect_7(struct Task * task); -void sub_80878C0(struct Sprite * sprite); +static void Task_FldEffFlyIn(u8 taskId); +static void FlyInEffect_1(struct Task * task); +static void FlyInEffect_2(struct Task * task); +static void FlyInEffect_3(struct Task * task); +static void FlyInEffect_4(struct Task * task); +static void FlyInEffect_5(struct Task * task); +static void FlyInEffect_6(struct Task * task); +static void FlyInEffect_7(struct Task * task); +static void sub_80878C0(struct Sprite * sprite); -void (*const sFlyInEffectFuncs[])(struct Task * task) = { +static void (*const sFlyInEffectFuncs[])(struct Task * task) = { FlyInEffect_1, FlyInEffect_2, FlyInEffect_3, @@ -3418,12 +3417,12 @@ u32 FldEff_FlyIn(void) return 0; } -void Task_FldEffFlyIn(u8 taskId) +static void Task_FldEffFlyIn(u8 taskId) { sFlyInEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); } -void FlyInEffect_1(struct Task * task) +static void FlyInEffect_1(struct Task * task) { struct ObjectEvent * objectEvent; objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; @@ -3452,7 +3451,7 @@ void FlyInEffect_1(struct Task * task) } } -void FlyInEffect_2(struct Task * task) +static void FlyInEffect_2(struct Task * task) { struct ObjectEvent * objectEvent; struct Sprite * sprite; @@ -3471,7 +3470,7 @@ void FlyInEffect_2(struct Task * task) } } -void FlyInEffect_3(struct Task * task) +static void FlyInEffect_3(struct Task * task) { s16 gUnknown_83CC1F0[18] = { -2, @@ -3501,7 +3500,7 @@ void FlyInEffect_3(struct Task * task) } } -void FlyInEffect_4(struct Task * task) +static void FlyInEffect_4(struct Task * task) { struct ObjectEvent * objectEvent; struct Sprite * sprite; @@ -3520,7 +3519,7 @@ void FlyInEffect_4(struct Task * task) } } -void FlyInEffect_5(struct Task * task) +static void FlyInEffect_5(struct Task * task) { if (ObjectEventClearHeldMovementIfFinished(&gObjectEvents[gPlayerAvatar.objectEventId])) { @@ -3529,7 +3528,7 @@ void FlyInEffect_5(struct Task * task) } } -void FlyInEffect_6(struct Task * task) +static void FlyInEffect_6(struct Task * task) { if (sub_80871AC(task->data[1])) { @@ -3539,7 +3538,7 @@ void FlyInEffect_6(struct Task * task) } } -void FlyInEffect_7(struct Task * task) +static void FlyInEffect_7(struct Task * task) { u8 state; struct ObjectEvent * objectEvent; @@ -3561,23 +3560,23 @@ void FlyInEffect_7(struct Task * task) } } -const union AffineAnimCmd gUnknown_83CC214[] = { +static const union AffineAnimCmd gUnknown_83CC214[] = { AFFINEANIMCMD_FRAME(24, 24, 0, 1), AFFINEANIMCMD_JUMP(0) }; -const union AffineAnimCmd gUnknown_83CC224[] = { +static const union AffineAnimCmd gUnknown_83CC224[] = { AFFINEANIMCMD_FRAME(512, 512, 0, 1), AFFINEANIMCMD_FRAME(-16, -16, 0, 1), AFFINEANIMCMD_JUMP(1) }; -const union AffineAnimCmd *const gUnknown_83CC23C[] = { +static const union AffineAnimCmd *const gUnknown_83CC23C[] = { gUnknown_83CC214, gUnknown_83CC224 }; -void sub_80877FC(struct Sprite * sprite, u8 affineAnimId) +static void sub_80877FC(struct Sprite * sprite, u8 affineAnimId) { sprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE; sprite->affineAnims = gUnknown_83CC23C; @@ -3585,7 +3584,7 @@ void sub_80877FC(struct Sprite * sprite, u8 affineAnimId) StartSpriteAffineAnim(sprite, affineAnimId); } -void sub_8087828(struct Sprite * sprite) +static void sub_8087828(struct Sprite * sprite) { struct Sprite * sprite2; sprite->pos2.x = Cos(sprite->data[2], 0xB4); @@ -3610,7 +3609,7 @@ void sub_8087828(struct Sprite * sprite) } } -void sub_80878C0(struct Sprite * sprite) +static void sub_80878C0(struct Sprite * sprite) { if (sprite->oam.affineMode != ST_OAM_AFFINE_OFF) { @@ -3625,9 +3624,9 @@ void sub_80878C0(struct Sprite * sprite) } } -void Task_MoveDeoxysRock_Step(u8 taskId); +static void Task_MoveDeoxysRock_Step(u8 taskId); -u32 Fldeff_MoveDeoxysRock(void) +u32 FldEff_MoveDeoxysRock(void) { u8 taskId; u8 objectEventIdBuffer; @@ -3652,7 +3651,7 @@ u32 Fldeff_MoveDeoxysRock(void) return FALSE; } -void Task_MoveDeoxysRock_Step(u8 taskId) +static void Task_MoveDeoxysRock_Step(u8 taskId) { s16 *data = gTasks[taskId].data; struct Sprite * sprite = &gSprites[data[1]]; @@ -3689,54 +3688,54 @@ void Task_MoveDeoxysRock_Step(u8 taskId) } } -void Task_FldEffUnk44(u8 taskId); -void Unk44Effect_0(s16 *data, u8 taskId); -void Unk44Effect_1(s16 *data, u8 taskId); -void Unk44Effect_2(s16 *data, u8 taskId); -void sub_8087CFC(struct Sprite * sprite); -void SpriteCB_FldEffUnk44(struct Sprite * sprite); +static void Task_FldEffUnk44(u8 taskId); +static void Unk44Effect_0(s16 *data, u8 taskId); +static void Unk44Effect_1(s16 *data, u8 taskId); +static void Unk44Effect_2(s16 *data, u8 taskId); +static void sub_8087CFC(struct Sprite * sprite); +static void SpriteCB_FldEffUnk44(struct Sprite * sprite); -void (*const sUnk44EffectFuncs[])(s16 *data, u8 taskId) = { +static void (*const sUnk44EffectFuncs[])(s16 *data, u8 taskId) = { Unk44Effect_0, Unk44Effect_1, Unk44Effect_2 }; -const struct SpriteFrameImage sImages_FldEffUnk44[] = { +static const struct SpriteFrameImage sImages_FldEffUnk44[] = { {sFldEffUnk44_Tiles + 0x00, 0x20}, {sFldEffUnk44_Tiles + 0x10, 0x20}, {sFldEffUnk44_Tiles + 0x20, 0x20}, {sFldEffUnk44_Tiles + 0x30, 0x20} }; -const union AnimCmd sAnimCmd_FldEffUnk44_0[] = { +static const union AnimCmd sAnimCmd_FldEffUnk44_0[] = { ANIMCMD_FRAME(0, 0), ANIMCMD_END }; -const union AnimCmd sAnimCmd_FldEffUnk44_1[] = { +static const union AnimCmd sAnimCmd_FldEffUnk44_1[] = { ANIMCMD_FRAME(1, 0), ANIMCMD_END }; -const union AnimCmd sAnimCmd_FldEffUnk44_2[] = { +static const union AnimCmd sAnimCmd_FldEffUnk44_2[] = { ANIMCMD_FRAME(2, 0), ANIMCMD_END }; -const union AnimCmd sAnimCmd_FldEffUnk44_3[] = { +static const union AnimCmd sAnimCmd_FldEffUnk44_3[] = { ANIMCMD_FRAME(3, 0), ANIMCMD_END }; -const union AnimCmd *const sAnimCmdTable_FldEffUnk44[] = { +static const union AnimCmd *const sAnimCmdTable_FldEffUnk44[] = { sAnimCmd_FldEffUnk44_0, sAnimCmd_FldEffUnk44_1, sAnimCmd_FldEffUnk44_2, sAnimCmd_FldEffUnk44_3 }; -const struct SpriteTemplate gUnknown_83CC2A0 = { +static const struct SpriteTemplate gUnknown_83CC2A0 = { .tileTag = 0xFFFF, .paletteTag = 4371, .oam = &sOamData_8x8, @@ -3765,7 +3764,7 @@ u32 FldEff_Unk44(void) return FALSE; } -void sub_8087B14(u8 taskId) +static void sub_8087B14(u8 taskId) { s16 *data = gTasks[taskId].data; if (data[7] != 0) @@ -3799,12 +3798,12 @@ void sub_8087B14(u8 taskId) DestroyTask(taskId); } -void sub_8087BA8(u8 taskId) +static void sub_8087BA8(u8 taskId) { gTasks[taskId].data[7] = 1; } -void Task_FldEffUnk44(u8 taskId) +static void Task_FldEffUnk44(u8 taskId) { s16 *data = gTasks[taskId].data; InstallCameraPanAheadCallback(); @@ -3812,7 +3811,7 @@ void Task_FldEffUnk44(u8 taskId) sUnk44EffectFuncs[data[1]](data, taskId); } -void Unk44Effect_0(s16 *data, u8 taskId) +static void Unk44Effect_0(s16 *data, u8 taskId) { u8 newTaskId = CreateTask(sub_8087B14, 90); PlaySE(SE_T_KAMI2); @@ -3820,7 +3819,7 @@ void Unk44Effect_0(s16 *data, u8 taskId) data[1]++; } -void Unk44Effect_1(s16 *data, u8 taskId) +static void Unk44Effect_1(s16 *data, u8 taskId) { if (++data[3] > 0x78) { @@ -3836,7 +3835,7 @@ void Unk44Effect_1(s16 *data, u8 taskId) } } -void Unk44Effect_2(s16 *data, u8 taskId) +static void Unk44Effect_2(s16 *data, u8 taskId) { if (!gPaletteFade.active && !FuncIsActiveTask(sub_8087B14)) { @@ -3847,7 +3846,7 @@ void Unk44Effect_2(s16 *data, u8 taskId) } } -void sub_8087CFC(struct Sprite* sprite) +static void sub_8087CFC(struct Sprite* sprite) { int i; int xPos = (s16)gTotalCameraPixelOffsetX + sprite->pos1.x + sprite->pos2.x; @@ -3865,7 +3864,7 @@ void sub_8087CFC(struct Sprite* sprite) } } -void SpriteCB_FldEffUnk44(struct Sprite* sprite) +static void SpriteCB_FldEffUnk44(struct Sprite* sprite) { switch (sprite->data[0]) { @@ -3890,7 +3889,7 @@ void SpriteCB_FldEffUnk44(struct Sprite* sprite) DestroySprite(sprite); } -void Task_FldEffUnk45(u8 taskId) +static void Task_FldEffUnk45(u8 taskId) { if (!gPaletteFade.active) { From d975572a6ab54b2c8454c5b54ce48398be0ad292 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 2 Mar 2020 10:26:42 -0500 Subject: [PATCH 23/26] Fix some extern declarations --- src/main.c | 6 ++---- src/quest_log.c | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/main.c b/src/main.c index a67c71746..77f668e6f 100644 --- a/src/main.c +++ b/src/main.c @@ -20,6 +20,7 @@ #include "battle_controllers.h" #include "scanline_effect.h" #include "save_failed_screen.h" +#include "quest_log.h" extern u32 intr_main[]; @@ -77,9 +78,6 @@ static IntrFunc * const sTimerIntrFunc = gIntrTable + 0x7; EWRAM_DATA u8 gDecompressionBuffer[0x4000] = {0}; EWRAM_DATA u16 gTrainerId = 0; -extern bool8 gWirelessCommType; -extern bool8 gUnknown_3005E88; - static void UpdateLinkAndCallCallbacks(void); static void InitMainCallbacks(void); static void CallCallbacks(void); @@ -178,7 +176,7 @@ static void InitMainCallbacks(void) gSaveBlock2Ptr = &gSaveBlock2; gSaveBlock1Ptr = &gSaveBlock1; gSaveBlock2.encryptionKey = 0; - gUnknown_3005E88 = FALSE; + gUnknown_3005E88 = 0; } static void CallCallbacks(void) diff --git a/src/quest_log.c b/src/quest_log.c index 6e70ceea8..c9a930032 100644 --- a/src/quest_log.c +++ b/src/quest_log.c @@ -2761,7 +2761,7 @@ static bool8 TrySetTrainerBattleQuestLogEvent(u16 eventId, const u16 *eventData) return FALSE; sub_81138F8(); - if (gUnknown_3005E88 || FlagGet(FLAG_SYS_GAME_CLEAR) || sub_81137E4(eventId, eventData) != TRUE) + if (gUnknown_3005E88 != 0 || FlagGet(FLAG_SYS_GAME_CLEAR) || sub_81137E4(eventId, eventData) != TRUE) { gUnknown_203B024.unk_00 = eventId; memcpy(gUnknown_203B024.unk_04, eventData, 8); From d12dd578b859e4413bea7341f63a887cbb59f94f Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 2 Mar 2020 11:16:34 -0500 Subject: [PATCH 24/26] Address review comments --- include/global.fieldmap.h | 2 +- src/field_effect.c | 332 +++++++++++++++++++------------------- src/fieldmap.c | 2 +- src/vs_seeker.c | 2 +- 4 files changed, 169 insertions(+), 169 deletions(-) diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index c1a4e775e..b3f5b1d42 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -285,7 +285,7 @@ struct PlayerAvatar /* 0x202E858 */ /*0x03*/ u8 tileTransitionState; // this is a transition running state: 00 is not moving, 01 is transition between tiles, 02 means you are on the frame in which you have centered on a tile but are about to keep moving, even if changing directions. 2 is also used for a ledge hop, since you are transitioning. /*0x04*/ u8 spriteId; /*0x05*/ u8 objectEventId; - /*0x06*/ u8 preventStep; + /*0x06*/ bool8 preventStep; /*0x07*/ u8 gender; u8 acroBikeState; u8 unk9; diff --git a/src/field_effect.c b/src/field_effect.c index 5553f16dc..b0ff99659 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -56,17 +56,17 @@ static void SpriteCB_HallOfFameMonitor(struct Sprite * sprite); static const u16 sNewGameOakObjectSpriteTiles[] = INCBIN_U16("graphics/field_effects/unk_83CA770.4bpp"); static const u16 sNewGameOakObjectPals[] = INCBIN_U16("graphics/field_effects/unk_83CAF70.gbapal"); -static const u16 gUnknown_83CAF90[] = INCBIN_U16("graphics/field_effects/unk_83CAF90.4bpp"); -static const u16 gUnknown_83CAFB0[] = INCBIN_U16("graphics/field_effects/unk_83CAFB0.gbapal"); -static const u16 gUnknown_83CAFD0[] = INCBIN_U16("graphics/field_effects/unk_83CAFD0.4bpp"); -static const u16 gUnknown_83CB3D0[] = INCBIN_U16("graphics/field_effects/unk_83CB3D0.gbapal"); -static const u16 gUnknown_83CB3F0[] = INCBIN_U16("graphics/field_effects/unk_83CB3F0.4bpp"); -static const u16 gFieldMoveStreaksTiles[] = INCBIN_U16("graphics/field_effects/unk_83CB5F0.4bpp"); -static const u16 gFieldMoveStreaksPalette[] = INCBIN_U16("graphics/field_effects/unk_83CB7F0.gbapal"); -static const u16 gFieldMoveStreaksTilemap[] = INCBIN_U16("graphics/field_effects/unk_83CB810.bin"); -static const u16 gDarknessFieldMoveStreaksTiles[] = INCBIN_U16("graphics/field_effects/unk_83CBA90.4bpp"); -static const u16 gDarknessFieldMoveStreaksPalette[] = INCBIN_U16("graphics/field_effects/unk_83CBB10.gbapal"); -static const u16 gDarknessFieldMoveStreaksTilemap[] = INCBIN_U16("graphics/field_effects/unk_83CBB30.bin"); +static const u16 sUnknown_83CAF90[] = INCBIN_U16("graphics/field_effects/unk_83CAF90.4bpp"); +static const u16 sUnknown_83CAFB0[] = INCBIN_U16("graphics/field_effects/unk_83CAFB0.gbapal"); +static const u16 sUnknown_83CAFD0[] = INCBIN_U16("graphics/field_effects/unk_83CAFD0.4bpp"); +static const u16 sUnknown_83CB3D0[] = INCBIN_U16("graphics/field_effects/unk_83CB3D0.gbapal"); +static const u16 sUnknown_83CB3F0[] = INCBIN_U16("graphics/field_effects/unk_83CB3F0.4bpp"); +static const u16 sFieldMoveStreaksTiles[] = INCBIN_U16("graphics/field_effects/unk_83CB5F0.4bpp"); +static const u16 sFieldMoveStreaksPalette[] = INCBIN_U16("graphics/field_effects/unk_83CB7F0.gbapal"); +static const u16 sFieldMoveStreaksTilemap[] = INCBIN_U16("graphics/field_effects/unk_83CB810.bin"); +static const u16 sDarknessFieldMoveStreaksTiles[] = INCBIN_U16("graphics/field_effects/unk_83CBA90.4bpp"); +static const u16 sDarknessFieldMoveStreaksPalette[] = INCBIN_U16("graphics/field_effects/unk_83CBB10.gbapal"); +static const u16 sDarknessFieldMoveStreaksTilemap[] = INCBIN_U16("graphics/field_effects/unk_83CBB30.bin"); static const u16 sFldEffUnk44_Tiles[] = INCBIN_U16("graphics/field_effects/unk_83CBDB0.4bpp"); static bool8 (*const sFldEffScrcmdTable[])(const u8 **script, u32 *result) = { @@ -80,7 +80,7 @@ static bool8 (*const sFldEffScrcmdTable[])(const u8 **script, u32 *result) = { FieldEffectCmd_loadfadedpal_callnative }; -static const struct OamData gNewGameOakOamAttributes = { +static const struct OamData sNewGameOakOamAttributes = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, @@ -128,42 +128,42 @@ static const struct OamData sOamData_16x16 = { .affineParam = 0 }; -static const struct SpriteFrameImage gNewGameOakObjectSpriteFrames[] = { +static const struct SpriteFrameImage sNewGameOakObjectSpriteFrames[] = { {sNewGameOakObjectSpriteTiles, 0x800} }; -static const struct SpritePalette gNewGameOakObjectPaletteInfo = { +static const struct SpritePalette sNewGameOakObjectPaletteInfo = { sNewGameOakObjectPals, 4102 }; -static const union AnimCmd gNewGameOakAnim[] = { +static const union AnimCmd sNewGameOakAnim[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END }; -static const union AnimCmd *const gNewGameOakAnimTable[] = { - gNewGameOakAnim +static const union AnimCmd *const sNewGameOakAnimTable[] = { + sNewGameOakAnim }; -static const struct SpriteTemplate gNewGameOakObjectTemplate = { - .tileTag = 0xFFFF, +static const struct SpriteTemplate sNewGameOakObjectTemplate = { + .tileTag = SPRITE_INVALID_TAG, .paletteTag = 4102, - .oam = &gNewGameOakOamAttributes, - .anims = gNewGameOakAnimTable, - .images = gNewGameOakObjectSpriteFrames, + .oam = &sNewGameOakOamAttributes, + .anims = sNewGameOakAnimTable, + .images = sNewGameOakObjectSpriteFrames, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; const struct SpritePalette gUnknown_83CBE9C = { - gUnknown_83CAFB0, 4103 + sUnknown_83CAFB0, 4103 }; const struct SpritePalette gUnknown_83CBEA4 = { - gUnknown_83CB3D0, 4112 + sUnknown_83CB3D0, 4112 }; -static const struct OamData gOamData_83CBEAC = { +static const struct OamData sOamData_83CBEAC = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, @@ -179,25 +179,25 @@ static const struct OamData gOamData_83CBEAC = { .affineParam = 0 }; -static const struct SpriteFrameImage gUnknown_83CBEB4[] = { - {gUnknown_83CAF90, 0x20} +static const struct SpriteFrameImage sUnknown_83CBEB4[] = { + {sUnknown_83CAF90, 0x20} }; -static const struct SpriteFrameImage gUnknown_83CBEBC[] = { - {gUnknown_83CAFD0 + 0x000, 0x100}, - {gUnknown_83CAFD0 + 0x080, 0x100}, - {gUnknown_83CAFD0 + 0x100, 0x100}, - {gUnknown_83CAFD0 + 0x180, 0x100} +static const struct SpriteFrameImage sUnknown_83CBEBC[] = { + {sUnknown_83CAFD0 + 0x000, 0x100}, + {sUnknown_83CAFD0 + 0x080, 0x100}, + {sUnknown_83CAFD0 + 0x100, 0x100}, + {sUnknown_83CAFD0 + 0x180, 0x100} }; -static const struct SpriteFrameImage gUnknown_83CBEDC[] = { - {gUnknown_83CB3F0 + 0x00, 0x80}, - {gUnknown_83CB3F0 + 0x40, 0x80}, - {gUnknown_83CB3F0 + 0x80, 0x80}, - {gUnknown_83CB3F0 + 0xC0, 0x80} +static const struct SpriteFrameImage sUnknown_83CBEDC[] = { + {sUnknown_83CB3F0 + 0x00, 0x80}, + {sUnknown_83CB3F0 + 0x40, 0x80}, + {sUnknown_83CB3F0 + 0x80, 0x80}, + {sUnknown_83CB3F0 + 0xC0, 0x80} }; -static const struct Subsprite gUnknown_83CBEFC[] = +static const struct Subsprite sUnknown_83CBEFC[] = { { .x = -12, @@ -230,9 +230,9 @@ static const struct Subsprite gUnknown_83CBEFC[] = } }; -static const struct SubspriteTable gUnknown_83CBF0C = subsprite_table(gUnknown_83CBEFC); +static const struct SubspriteTable sUnknown_83CBF0C = subsprite_table(sUnknown_83CBEFC); -static const struct Subsprite gUnknown_83CBF14[] = +static const struct Subsprite sUnknown_83CBF14[] = { { .x = -32, @@ -265,14 +265,14 @@ static const struct Subsprite gUnknown_83CBF14[] = } }; -static const struct SubspriteTable gUnknown_83CBF24 = subsprite_table(gUnknown_83CBF14); +static const struct SubspriteTable sUnknown_83CBF24 = subsprite_table(sUnknown_83CBF14); -static const union AnimCmd gUnknown_83CBF2C[] = { +static const union AnimCmd sUnknown_83CBF2C[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_JUMP(0) }; -static const union AnimCmd gUnknown_83CBF34[] = { +static const union AnimCmd sUnknown_83CBF34[] = { ANIMCMD_FRAME(1, 5), ANIMCMD_FRAME(2, 5), ANIMCMD_FRAME(3, 7), @@ -283,12 +283,12 @@ static const union AnimCmd gUnknown_83CBF34[] = { ANIMCMD_END }; -static const union AnimCmd *const gUnknown_83CBF54[] = { - gUnknown_83CBF2C, - gUnknown_83CBF34 +static const union AnimCmd *const sUnknown_83CBF54[] = { + sUnknown_83CBF2C, + sUnknown_83CBF34 }; -static const union AnimCmd gUnknown_83CBF5C[] = { +static const union AnimCmd sUnknown_83CBF5C[] = { ANIMCMD_FRAME(3, 8), ANIMCMD_FRAME(2, 8), ANIMCMD_FRAME(1, 8), @@ -301,36 +301,36 @@ static const union AnimCmd gUnknown_83CBF5C[] = { ANIMCMD_END }; -static const union AnimCmd *const gUnknown_83CBF84[] = { - gUnknown_83CBF5C +static const union AnimCmd *const sUnknown_83CBF84[] = { + sUnknown_83CBF5C }; -static const struct SpriteTemplate gUnknown_83CBF88 = { - .tileTag = 65535, +static const struct SpriteTemplate sUnknown_83CBF88 = { + .tileTag = SPRITE_INVALID_TAG, .paletteTag = 4103, .oam = &sOamData_8x8, - .anims = gUnknown_83CBF54, - .images = gUnknown_83CBEB4, + .anims = sUnknown_83CBF54, + .images = sUnknown_83CBEB4, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCB_PokeballGlow }; -static const struct SpriteTemplate gUnknown_83CBFA0 = { - .tileTag = 65535, +static const struct SpriteTemplate sUnknown_83CBFA0 = { + .tileTag = SPRITE_INVALID_TAG, .paletteTag = 4103, - .oam = &gOamData_83CBEAC, - .anims = gUnknown_83CBF54, - .images = gUnknown_83CBEBC, + .oam = &sOamData_83CBEAC, + .anims = sUnknown_83CBF54, + .images = sUnknown_83CBEBC, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCB_PokecenterMonitor }; -static const struct SpriteTemplate gUnknown_83CBFB8 = { - .tileTag = 65535, +static const struct SpriteTemplate sUnknown_83CBFB8 = { + .tileTag = SPRITE_INVALID_TAG, .paletteTag = 4112, .oam = &sOamData_16x16, - .anims = gUnknown_83CBF84, - .images = gUnknown_83CBEDC, + .anims = sUnknown_83CBF84, + .images = sUnknown_83CBEDC, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCB_HallOfFameMonitor }; @@ -565,7 +565,7 @@ u8 CreateTrainerSprite(u8 trainerSpriteID, s16 x, s16 y, u8 subpriority, u8 *buf LoadCompressedSpriteSheetOverrideBuffer(&gTrainerFrontPicTable[trainerSpriteID], buffer); spriteTemplate.tileTag = gTrainerFrontPicTable[trainerSpriteID].tag; spriteTemplate.paletteTag = gTrainerFrontPicPaletteTable[trainerSpriteID].tag; - spriteTemplate.oam = &gNewGameOakOamAttributes; + spriteTemplate.oam = &sNewGameOakOamAttributes; spriteTemplate.anims = gDummySpriteAnimTable; spriteTemplate.images = NULL; spriteTemplate.affineAnims = gDummySpriteAffineAnimTable; @@ -581,8 +581,8 @@ static void LoadTrainerGfx_TrainerCard(u8 gender, u16 palOffset, u8 *dest) static u8 AddNewGameBirchObject(s16 x, s16 y, u8 subpriority) { - LoadSpritePalette(&gNewGameOakObjectPaletteInfo); - return CreateSprite(&gNewGameOakObjectTemplate, x, y, subpriority); + LoadSpritePalette(&sNewGameOakObjectPaletteInfo); + return CreateSprite(&sNewGameOakObjectTemplate, x, y, subpriority); } u8 CreateMonSprite_PicBox(u16 species, s16 x, s16 y, u8 subpriority) @@ -835,7 +835,7 @@ static void SpriteCB_PokeballGlowEffect(struct Sprite * sprite) sPokeballGlowSpriteCBTable[sprite->data[0]](sprite); } -static const struct Coords16 gUnknown_83CC010[] = { +static const struct Coords16 sUnknown_83CC010[] = { {0, 0}, {6, 0}, {0, 4}, @@ -844,9 +844,9 @@ static const struct Coords16 gUnknown_83CC010[] = { {6, 8} }; -static const u8 gUnknown_83CC028[] = {16, 12, 8, 0}; -static const u8 gUnknown_83CC02C[] = {16, 12, 8, 0}; -static const u8 gUnknown_83CC030[] = { 0, 0, 0, 0}; +static const u8 sUnknown_83CC028[] = {16, 12, 8, 0}; +static const u8 sUnknown_83CC02C[] = {16, 12, 8, 0}; +static const u8 sUnknown_83CC030[] = { 0, 0, 0, 0}; static void PokeballGlowEffect_0(struct Sprite * sprite) { @@ -854,7 +854,7 @@ static void PokeballGlowEffect_0(struct Sprite * sprite) if (sprite->data[1] == 0 || (--sprite->data[1]) == 0) { sprite->data[1] = 25; - endSpriteId = CreateSpriteAtEnd(&gUnknown_83CBF88, gUnknown_83CC010[sprite->data[2]].x + sprite->pos2.x, gUnknown_83CC010[sprite->data[2]].y + sprite->pos2.y, 0xFF); + endSpriteId = CreateSpriteAtEnd(&sUnknown_83CBF88, sUnknown_83CC010[sprite->data[2]].x + sprite->pos2.x, sUnknown_83CC010[sprite->data[2]].y + sprite->pos2.y, 0xFF); gSprites[endSpriteId].oam.priority = 2; gSprites[endSpriteId].data[0] = sprite->data[7]; sprite->data[2]++; @@ -897,14 +897,14 @@ static void PokeballGlowEffect_2(struct Sprite * sprite) } } phase = (sprite->data[2] + 3) & 3; - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x108, gUnknown_83CC028[phase], gUnknown_83CC02C[phase], gUnknown_83CC030[phase]); + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x108, sUnknown_83CC028[phase], sUnknown_83CC02C[phase], sUnknown_83CC030[phase]); phase = (sprite->data[2] + 2) & 3; - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x106, gUnknown_83CC028[phase], gUnknown_83CC02C[phase], gUnknown_83CC030[phase]); + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x106, sUnknown_83CC028[phase], sUnknown_83CC02C[phase], sUnknown_83CC030[phase]); phase = (sprite->data[2] + 1) & 3; - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x102, gUnknown_83CC028[phase], gUnknown_83CC02C[phase], gUnknown_83CC030[phase]); + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x102, sUnknown_83CC028[phase], sUnknown_83CC02C[phase], sUnknown_83CC030[phase]); phase = sprite->data[2]; - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x105, gUnknown_83CC028[phase], gUnknown_83CC02C[phase], gUnknown_83CC030[phase]); - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x103, gUnknown_83CC028[phase], gUnknown_83CC02C[phase], gUnknown_83CC030[phase]); + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x105, sUnknown_83CC028[phase], sUnknown_83CC02C[phase], sUnknown_83CC030[phase]); + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x103, sUnknown_83CC028[phase], sUnknown_83CC02C[phase], sUnknown_83CC030[phase]); if (sprite->data[3] > 2) { sprite->data[0]++; @@ -928,11 +928,11 @@ static void PokeballGlowEffect_3(struct Sprite * sprite) } } phase = sprite->data[2]; - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x108, gUnknown_83CC028[phase], gUnknown_83CC02C[phase], gUnknown_83CC030[phase]); - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x106, gUnknown_83CC028[phase], gUnknown_83CC02C[phase], gUnknown_83CC030[phase]); - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x102, gUnknown_83CC028[phase], gUnknown_83CC02C[phase], gUnknown_83CC030[phase]); - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x105, gUnknown_83CC028[phase], gUnknown_83CC02C[phase], gUnknown_83CC030[phase]); - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x103, gUnknown_83CC028[phase], gUnknown_83CC02C[phase], gUnknown_83CC030[phase]); + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x108, sUnknown_83CC028[phase], sUnknown_83CC02C[phase], sUnknown_83CC030[phase]); + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x106, sUnknown_83CC028[phase], sUnknown_83CC02C[phase], sUnknown_83CC030[phase]); + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x102, sUnknown_83CC028[phase], sUnknown_83CC02C[phase], sUnknown_83CC030[phase]); + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x105, sUnknown_83CC028[phase], sUnknown_83CC02C[phase], sUnknown_83CC030[phase]); + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x103, sUnknown_83CC028[phase], sUnknown_83CC02C[phase], sUnknown_83CC030[phase]); } static void PokeballGlowEffect_4(struct Sprite * sprite) @@ -970,7 +970,7 @@ static u8 PokecenterHealEffectHelper(s32 x, s32 y) { u8 spriteId; struct Sprite * sprite; - spriteId = CreateSpriteAtEnd(&gUnknown_83CBFA0, x, y, 0); + spriteId = CreateSpriteAtEnd(&sUnknown_83CBFA0, x, y, 0); sprite = &gSprites[spriteId]; sprite->oam.priority = 2; sprite->invisible = TRUE; @@ -991,7 +991,7 @@ static void SpriteCB_PokecenterMonitor(struct Sprite * sprite) static void HallOfFameRecordEffectHelper(s32 x, s32 y) { - CreateSpriteAtEnd(&gUnknown_83CBFB8, x, y, 0); + CreateSpriteAtEnd(&sUnknown_83CBFB8, x, y, 0); } static void SpriteCB_HallOfFameMonitor(struct Sprite * sprite) @@ -1128,7 +1128,7 @@ static bool8 FallWarpEffect_1(struct Task * task) gPlayerAvatar.preventStep = TRUE; ObjectEventSetHeldMovement(playerObject, GetFaceDirectionMovementAction(GetPlayerFacingDirection())); task->data[4] = playerSprite->subspriteMode; - playerObject->fixedPriority = 1; + playerObject->fixedPriority = TRUE; playerSprite->oam.priority = 1; playerSprite->subspriteMode = SUBSPRITES_IGNORE_PRIORITY; task->data[0]++; @@ -1178,15 +1178,15 @@ static bool8 FallWarpEffect_4(struct Task * task) if (task->data[3] == 0 && sprite->pos2.y >= -16) { task->data[3]++; - objectEvent->fixedPriority = 0; + objectEvent->fixedPriority = FALSE; sprite->subspriteMode = task->data[4]; - objectEvent->triggerGroundEffectsOnMove = 1; + objectEvent->triggerGroundEffectsOnMove = TRUE; } if (sprite->pos2.y >= 0) { PlaySE(SE_W070); - objectEvent->triggerGroundEffectsOnStop = 1; - objectEvent->landingJump = 1; + objectEvent->triggerGroundEffectsOnStop = TRUE; + objectEvent->landingJump = TRUE; sprite->pos2.y = 0; task->data[0]++; } @@ -1710,7 +1710,7 @@ static bool8 LavaridgeGymB1FWarpEffect_1(struct Task * task, struct ObjectEvent CameraObjectReset2(); SetCameraPanningCallback(NULL); gPlayerAvatar.preventStep = TRUE; - objectEvent->fixedPriority = 1; + objectEvent->fixedPriority = TRUE; task->data[1] = 1; task->data[0]++; return TRUE; @@ -1775,7 +1775,7 @@ static bool8 LavaridgeGymB1FWarpEffect_4(struct Task * task, struct ObjectEvent if (task->data[5] == 0 && sprite->pos2.y < -0x10) { task->data[5]++; - objectEvent->fixedPriority = 1; + objectEvent->fixedPriority = TRUE; sprite->oam.priority = 1; sprite->subspriteMode = SUBSPRITES_IGNORE_PRIORITY; } @@ -1927,7 +1927,7 @@ static bool8 LavaridgeGym1FWarpEffect_1(struct Task * task, struct ObjectEvent * FreezeObjectEvents(); CameraObjectReset2(); gPlayerAvatar.preventStep = TRUE; - objectEvent->fixedPriority = 1; + objectEvent->fixedPriority = TRUE; task->data[0]++; return FALSE; } @@ -2070,7 +2070,7 @@ static void EscapeRopeFieldEffect_Step1(struct Task * task) } } -static const u8 gUnknown_83CC0E8[] = { +static const u8 sUnknown_83CC0E8[] = { [DIR_NONE] = DIR_SOUTH, [DIR_SOUTH] = DIR_WEST, [DIR_WEST] = DIR_NORTH, @@ -2084,11 +2084,11 @@ static u8 sub_808576C(struct ObjectEvent * playerObj, s16 *delay_p, s16 *stage_p { if (*delay_p != 0 && --(*delay_p) != 0) return playerObj->facingDirection; - ObjectEventSetHeldMovement(playerObj, GetFaceDirectionMovementAction(gUnknown_83CC0E8[playerObj->facingDirection])); + ObjectEventSetHeldMovement(playerObj, GetFaceDirectionMovementAction(sUnknown_83CC0E8[playerObj->facingDirection])); if (*stage_p < 12) (*stage_p)++; *delay_p = 12 >> (*stage_p); // 12 >> 4 = 0 - return gUnknown_83CC0E8[playerObj->facingDirection]; + return sUnknown_83CC0E8[playerObj->facingDirection]; } return playerObj->facingDirection; } @@ -2391,7 +2391,7 @@ static void TeleportInFieldEffectTask2(struct Task * task) if (task->data[13] == 0) { task->data[13]++; - objectEvent->triggerGroundEffectsOnMove = 1; + objectEvent->triggerGroundEffectsOnMove = TRUE; sprite->subspriteMode = task->data[14]; } } else @@ -2509,10 +2509,10 @@ static void ShowMonEffect_Outdoors_1(struct Task * task) task->data[11] = GetGpuReg(REG_OFFSET_WININ); task->data[12] = GetGpuReg(REG_OFFSET_WINOUT); StoreWordInTwoHalfwords((u16*)&task->data[13], (u32)gMain.vblankCallback); - task->data[1] = 0xf0f1; - task->data[2] = 0x5051; - task->data[3] = 0x3f; - task->data[4] = 0x3e; + task->data[1] = WIN_RANGE(0xF0, 0xF1); + task->data[2] = WIN_RANGE(0x50, 0x51); + task->data[3] = WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR; + task->data[4] = WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR; SetGpuReg(REG_OFFSET_WIN0H, task->data[1]); SetGpuReg(REG_OFFSET_WIN0V, task->data[2]); SetGpuReg(REG_OFFSET_WININ, task->data[3]); @@ -2525,40 +2525,40 @@ static void ShowMonEffect_Outdoors_2(struct Task * task) { u16 charbase = ((GetGpuReg(REG_OFFSET_BG0CNT) >> 2) << 14); u16 screenbase = ((GetGpuReg(REG_OFFSET_BG0CNT) >> 8) << 11); - CpuCopy16(gFieldMoveStreaksTiles, (void *)(VRAM + charbase), 0x200); + CpuCopy16(sFieldMoveStreaksTiles, (void *)(VRAM + charbase), 0x200); CpuFill32(0, (void *)(VRAM + screenbase), 0x800); - LoadPalette(gFieldMoveStreaksPalette, 0xf0, 0x20); + LoadPalette(sFieldMoveStreaksPalette, 0xf0, 0x20); LoadFieldMoveStreaksTilemapToVram(screenbase); task->data[0]++; } static void ShowMonEffect_Outdoors_3(struct Task * task) { - s16 v0; - s16 v2; - s16 v3; + s16 win0h_lo; + s16 win0v_lo; + s16 win0v_hi; task->data[5] -= 16; - v0 = ((u16)task->data[1] >> 8); - v2 = ((u16)task->data[2] >> 8); - v3 = ((u16)task->data[2] & 0xff); - v0 -= 16; - v2 -= 2; - v3 += 2; - if (v0 < 0) + win0h_lo = ((u16)task->data[1] >> 8); + win0v_lo = ((u16)task->data[2] >> 8); + win0v_hi = ((u16)task->data[2] & 0xff); + win0h_lo -= 16; + win0v_lo -= 2; + win0v_hi += 2; + if (win0h_lo < 0) { - v0 = 0; + win0h_lo = 0; } - if (v2 < 0x28) + if (win0v_lo < 0x28) { - v2 = 0x28; + win0v_lo = 0x28; } - if (v3 > 0x78) + if (win0v_hi > 0x78) { - v3 = 0x78; + win0v_hi = 0x78; } - task->data[1] = (v0 << 8) | (task->data[1] & 0xff); - task->data[2] = (v2 << 8) | v3; - if (v0 == 0 && v2 == 0x28 && v3 == 0x78) + task->data[1] = WIN_RANGE(win0h_lo, task->data[1] & 0xff); + task->data[2] = WIN_RANGE(win0v_lo, win0v_hi); + if (win0h_lo == 0 && win0v_lo == 0x28 && win0v_hi == 0x78) { gSprites[task->data[15]].callback = sub_80868C0; task->data[0]++; @@ -2576,23 +2576,23 @@ static void ShowMonEffect_Outdoors_4(struct Task * task) static void ShowMonEffect_Outdoors_5(struct Task * task) { - s16 v2; - s16 v3; + s16 win0v_lo; + s16 win0v_hi; task->data[5] -= 16; - v2 = (task->data[2] >> 8); - v3 = (task->data[2] & 0xff); - v2 += 6; - v3 -= 6; - if (v2 > 0x50) + win0v_lo = (task->data[2] >> 8); + win0v_hi = (task->data[2] & 0xff); + win0v_lo += 6; + win0v_hi -= 6; + if (win0v_lo > 0x50) { - v2 = 0x50; + win0v_lo = 0x50; } - if (v3 < 0x51) + if (win0v_hi < 0x51) { - v3 = 0x51; + win0v_hi = 0x51; } - task->data[2] = (v2 << 8) | v3; - if (v2 == 0x50 && v3 == 0x51) + task->data[2] = WIN_RANGE(win0v_lo, win0v_hi); + if (win0v_lo == 0x50 && win0v_hi == 0x51) { task->data[0]++; } @@ -2602,8 +2602,8 @@ static void ShowMonEffect_Outdoors_6(struct Task * task) { u16 bg0cnt = (GetGpuReg(REG_OFFSET_BG0CNT) >> 8) << 11; CpuFill32(0, (void *)VRAM + bg0cnt, 0x800); - task->data[1] = 0xf1; - task->data[2] = 0xa1; + task->data[1] = WIN_RANGE(0x00, 0xf1); + task->data[2] = WIN_RANGE(0x00, 0xa1); task->data[3] = task->data[11]; task->data[4] = task->data[12]; task->data[0]++; @@ -2612,7 +2612,7 @@ static void ShowMonEffect_Outdoors_6(struct Task * task) static void ShowMonEffect_Outdoors_7(struct Task * task) { IntrCallback callback; - LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&callback); + LoadWordFromTwoHalfwords((u16 *)&task->data[13], (uintptr_t *)&callback); SetVBlankCallback(callback); ChangeBgX(0, 0, 0); ChangeBgY(0, 0, 0); @@ -2626,7 +2626,7 @@ static void VBlankCB_ShowMonEffect_Outdoors(void) { IntrCallback callback; struct Task * task = &gTasks[FindTaskIdByFunc(Task_ShowMon_Outdoors)]; - LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&callback); + LoadWordFromTwoHalfwords((u16 *)&task->data[13], (uintptr_t *)&callback); callback(); SetGpuReg(REG_OFFSET_WIN0H, task->data[1]); SetGpuReg(REG_OFFSET_WIN0V, task->data[2]); @@ -2643,7 +2643,7 @@ static void LoadFieldMoveStreaksTilemapToVram(u16 screenbase) dest = (u16 *)(VRAM + (10 * 32) + screenbase); for (i = 0; i < (10 * 32); i++, dest++) { - *dest = gFieldMoveStreaksTilemap[i] | METATILE_ELEVATION_MASK; + *dest = sFieldMoveStreaksTilemap[i] | METATILE_ELEVATION_MASK; } } @@ -2678,9 +2678,9 @@ static void ShowMonEffect_Indoors_2(struct Task * task) charbase = ((GetGpuReg(REG_OFFSET_BG0CNT) >> 2) << 14); screenbase = ((GetGpuReg(REG_OFFSET_BG0CNT) >> 8) << 11); task->data[12] = screenbase; - CpuCopy16(gDarknessFieldMoveStreaksTiles, (void *)(VRAM + charbase), 0x80); + CpuCopy16(sDarknessFieldMoveStreaksTiles, (void *)(VRAM + charbase), 0x80); CpuFill32(0, (void *)(VRAM + screenbase), 0x800); - LoadPalette(gDarknessFieldMoveStreaksPalette, 0xf0, 0x20); + LoadPalette(sDarknessFieldMoveStreaksPalette, 0xf0, 0x20); task->data[0]++; } @@ -2689,9 +2689,9 @@ static void ShowMonEffect_Indoors_3(struct Task * task) if (sub_8086738(task)) { task->data[5] = GetGpuReg(REG_OFFSET_WININ); - SetGpuReg(REG_OFFSET_WININ, (task->data[5] & 0xFF) | 0x1100); - SetGpuReg(REG_OFFSET_WIN1H, 0x00f0); - SetGpuReg(REG_OFFSET_WIN1V, 0x2878); + SetGpuReg(REG_OFFSET_WININ, (task->data[5] & 0xFF) | WININ_WIN1_BG0 | WININ_WIN1_OBJ); + SetGpuReg(REG_OFFSET_WIN1H, WIN_RANGE(0x00, 0xf0)); + SetGpuReg(REG_OFFSET_WIN1V, WIN_RANGE(0x28, 0x78)); gSprites[task->data[15]].callback = sub_80868C0; task->data[0]++; } @@ -2712,8 +2712,8 @@ static void ShowMonEffect_Indoors_5(struct Task * task) sub_8086728(task); task->data[3] = task->data[1] & 7; task->data[4] = 0; - SetGpuReg(REG_OFFSET_WIN1H, 0xffff); - SetGpuReg(REG_OFFSET_WIN1V, 0xffff); + SetGpuReg(REG_OFFSET_WIN1H, WIN_RANGE(0xff, 0xff)); + SetGpuReg(REG_OFFSET_WIN1V, WIN_RANGE(0xff, 0xff)); SetGpuReg(REG_OFFSET_WININ, task->data[5]); task->data[0]++; } @@ -2733,7 +2733,7 @@ static void ShowMonEffect_Indoors_7(struct Task * task) u16 charbase; charbase = (GetGpuReg(REG_OFFSET_BG0CNT) >> 8) << 11; CpuFill32(0, (void *)VRAM + charbase, 0x800); - LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&intrCallback); + LoadWordFromTwoHalfwords((u16 *)&task->data[13], (uintptr_t *)&intrCallback); SetVBlankCallback(intrCallback); ChangeBgX(0, 0, 0); ChangeBgY(0, 0, 0); @@ -2748,7 +2748,7 @@ static void VBlankCB_ShowMonEffect_Indoors(void) IntrCallback intrCallback; struct Task * task; task = &gTasks[FindTaskIdByFunc(Task_ShowMon_Indoors)]; - LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&intrCallback); + LoadWordFromTwoHalfwords((u16 *)&task->data[13], (uintptr_t *)&intrCallback); intrCallback(); SetGpuReg(REG_OFFSET_BG0HOFS, task->data[1]); SetGpuReg(REG_OFFSET_BG0VOFS, task->data[2]); @@ -2778,10 +2778,10 @@ static bool8 sub_8086738(struct Task * task) dest = (u16 *)(VRAM + 0x140 + (u16)task->data[12]); for (i = 0; i < 10; i++) { - dest[dstOffs + i * 32] = gDarknessFieldMoveStreaksTilemap[srcOffs + i * 32]; + dest[dstOffs + i * 32] = sDarknessFieldMoveStreaksTilemap[srcOffs + i * 32]; dest[dstOffs + i * 32] |= 0xf000; - dest[((dstOffs + 1) & 0x1f) + i * 32] = gDarknessFieldMoveStreaksTilemap[((srcOffs + 1) & 0x1f) + i * 32] | 0xf000; + dest[((dstOffs + 1) & 0x1f) + i * 32] = sDarknessFieldMoveStreaksTilemap[((srcOffs + 1) & 0x1f) + i * 32] | 0xf000; dest[((dstOffs + 1) & 0x1f) + i * 32] |= 0xf000; } task->data[4] += 2; @@ -3188,7 +3188,7 @@ static void UseFlyEffect_6(struct Task * task) struct ObjectEvent * objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(2)); StartSpriteAnim(&gSprites[objectEvent->spriteId], 0x16); - objectEvent->inanimate = 1; + objectEvent->inanimate = TRUE; ObjectEventSetHeldMovement(objectEvent, MOVEMENT_ACTION_JUMP_IN_PLACE_LEFT); task->data[0]++; task->data[2] = 0; @@ -3201,8 +3201,8 @@ static void UseFlyEffect_7(struct Task * task) { struct ObjectEvent * objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; ObjectEventClearAnimIfSpecialAnimActive(objectEvent); - objectEvent->inanimate = 0; - objectEvent->hasShadow = 0; + objectEvent->inanimate = FALSE; + objectEvent->hasShadow = FALSE; sub_8087204(task->data[1], objectEvent->spriteId); StartSpriteAnim(&gSprites[task->data[1]], gSaveBlock2Ptr->playerGender * 2 + 1); sub_80877FC(&gSprites[task->data[1]], 0); @@ -3265,21 +3265,21 @@ static void sub_8087204(u8 a0, u8 a1) gSprites[a0].data[6] = a1; } -static const union AffineAnimCmd gUnknown_83CC19C[] = { +static const union AffineAnimCmd sUnknown_83CC19C[] = { AFFINEANIMCMD_FRAME( 8, 8, 226, 0), AFFINEANIMCMD_FRAME(28, 28, 0, 30), AFFINEANIMCMD_END }; -static const union AffineAnimCmd gUnknown_83CC1B4[] = { +static const union AffineAnimCmd sUnknown_83CC1B4[] = { AFFINEANIMCMD_FRAME(256, 256, 64, 0), AFFINEANIMCMD_FRAME(-10, -10, 0, 22), AFFINEANIMCMD_END }; -static const union AffineAnimCmd *const gUnknown_83CC1CC[] = { - gUnknown_83CC19C, - gUnknown_83CC1B4 +static const union AffineAnimCmd *const sUnknown_83CC1CC[] = { + sUnknown_83CC19C, + sUnknown_83CC1B4 }; static void sub_8087220(struct Sprite * sprite) @@ -3289,7 +3289,7 @@ static void sub_8087220(struct Sprite * sprite) if (sprite->data[0] == 0) { sprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE; - sprite->affineAnims = gUnknown_83CC1CC; + sprite->affineAnims = sUnknown_83CC1CC; InitSpriteAffineAnim(sprite); StartSpriteAffineAnim(sprite, 0); if (gSaveBlock2Ptr->playerGender == MALE) @@ -3345,7 +3345,7 @@ static void sub_8087364(struct Sprite * sprite) if (sprite->data[0] == 0) { sprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE; - sprite->affineAnims = gUnknown_83CC1CC; + sprite->affineAnims = sUnknown_83CC1CC; InitSpriteAffineAnim(sprite); StartSpriteAffineAnim(sprite, 1); if (gSaveBlock2Ptr->playerGender == MALE) @@ -3508,7 +3508,7 @@ static void FlyInEffect_4(struct Task * task) { objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; sprite = &gSprites[objectEvent->spriteId]; - objectEvent->inanimate = 0; + objectEvent->inanimate = FALSE; sub_805F724(objectEvent, objectEvent->currentCoords.x, objectEvent->currentCoords.y); sprite->pos2.x = 0; sprite->pos2.y = 0; @@ -3560,26 +3560,26 @@ static void FlyInEffect_7(struct Task * task) } } -static const union AffineAnimCmd gUnknown_83CC214[] = { +static const union AffineAnimCmd sUnknown_83CC214[] = { AFFINEANIMCMD_FRAME(24, 24, 0, 1), AFFINEANIMCMD_JUMP(0) }; -static const union AffineAnimCmd gUnknown_83CC224[] = { +static const union AffineAnimCmd sUnknown_83CC224[] = { AFFINEANIMCMD_FRAME(512, 512, 0, 1), AFFINEANIMCMD_FRAME(-16, -16, 0, 1), AFFINEANIMCMD_JUMP(1) }; -static const union AffineAnimCmd *const gUnknown_83CC23C[] = { - gUnknown_83CC214, - gUnknown_83CC224 +static const union AffineAnimCmd *const sUnknown_83CC23C[] = { + sUnknown_83CC214, + sUnknown_83CC224 }; static void sub_80877FC(struct Sprite * sprite, u8 affineAnimId) { sprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE; - sprite->affineAnims = gUnknown_83CC23C; + sprite->affineAnims = sUnknown_83CC23C; InitSpriteAffineAnim(sprite); StartSpriteAffineAnim(sprite, affineAnimId); } @@ -3735,8 +3735,8 @@ static const union AnimCmd *const sAnimCmdTable_FldEffUnk44[] = { sAnimCmd_FldEffUnk44_3 }; -static const struct SpriteTemplate gUnknown_83CC2A0 = { - .tileTag = 0xFFFF, +static const struct SpriteTemplate sUnknown_83CC2A0 = { + .tileTag = SPRITE_INVALID_TAG, .paletteTag = 4371, .oam = &sOamData_8x8, .anims = sAnimCmdTable_FldEffUnk44, @@ -3854,7 +3854,7 @@ static void sub_8087CFC(struct Sprite* sprite) for (i = 0; i < 4; i++) { - u8 spriteId = CreateSprite(&gUnknown_83CC2A0, xPos, yPos, 0); + u8 spriteId = CreateSprite(&sUnknown_83CC2A0, xPos, yPos, 0); if (spriteId != MAX_SPRITES) { StartSpriteAnim(&gSprites[spriteId], i); diff --git a/src/fieldmap.c b/src/fieldmap.c index c1c0bf15c..60ff70f10 100644 --- a/src/fieldmap.c +++ b/src/fieldmap.c @@ -946,7 +946,7 @@ void sub_8059948(u8 a0, u8 a1) TintPalette_SepiaTone(gPlttBufferUnfaded + a0 * 16, a1 * 16); break; case 3: - sub_8111F38((a0 * 16), a1 * 16); + sub_8111F38(a0 * 16, a1 * 16); TintPalette_GrayScale(gPlttBufferUnfaded + a0 * 16, a1 * 16); break; default: diff --git a/src/vs_seeker.c b/src/vs_seeker.c index 1424cfe29..f60e22f96 100644 --- a/src/vs_seeker.c +++ b/src/vs_seeker.c @@ -748,7 +748,7 @@ void Task_VsSeeker_0(u8 taskId) else if (respval == 2) { ItemUse_SetQuestLogEvent(QL_EVENT_USED_ITEM, 0, gSpecialVar_ItemId, 0xffff); - FieldEffectStart(FLDEFF_USE_VS_SEEKER); // TODO: name this enum + FieldEffectStart(FLDEFF_USE_VS_SEEKER); gTasks[taskId].func = Task_VsSeeker_1; gTasks[taskId].data[0] = 15; } From b3803dcc99703ef863802616697e4f39cfb7398d Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 2 Mar 2020 11:53:08 -0500 Subject: [PATCH 25/26] Address review comments, 2 --- src/field_effect.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/field_effect.c b/src/field_effect.c index b0ff99659..fbd98315a 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -412,7 +412,7 @@ static u32 FieldEffectScript_ReadWord(const u8 **script) static void FieldEffectScript_LoadTiles(const u8 **script) { const struct SpriteSheet * spriteSheet = (const struct SpriteSheet * )FieldEffectScript_ReadWord(script); - if (GetSpriteTileStartByTag(spriteSheet->tag) == 0xFFFF) + if (GetSpriteTileStartByTag(spriteSheet->tag) == SPRITE_INVALID_TAG) LoadSpriteSheet(spriteSheet); *script += sizeof(u32); } @@ -486,7 +486,7 @@ static void FieldEffectFreeTilesIfUnused(u16 tileStart) { u8 i; u16 tileTag = GetSpriteTileTagByTileStart(tileStart); - if (tileTag == 0xFFFF) + if (tileTag == SPRITE_INVALID_TAG) return; for (i = 0; i < MAX_SPRITES; i++) { @@ -500,7 +500,7 @@ static void FieldEffectFreePaletteIfUnused(u8 paletteNum) { u8 i; u16 paletteTag = GetSpritePaletteTagByPaletteNum(paletteNum); - if (paletteTag == 0xFFFF) + if (paletteTag == SPRITE_INVALID_TAG) return; for (i = 0; i < MAX_SPRITES; i++) { @@ -1900,7 +1900,7 @@ u8 FldEff_LavaridgeGymWarp(void) sub_8063BC4((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[33], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); gSprites[spriteId].oam.priority = gFieldEffectArguments[3]; - gSprites[spriteId].coordOffsetEnabled = 1; + gSprites[spriteId].coordOffsetEnabled = TRUE; return spriteId; } @@ -1993,7 +1993,7 @@ u8 FldEff_PopOutOfAsh(void) sub_8063BC4((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[32], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); gSprites[spriteId].oam.priority = gFieldEffectArguments[3]; - gSprites[spriteId].coordOffsetEnabled = 1; + gSprites[spriteId].coordOffsetEnabled = TRUE; return spriteId; } @@ -3064,7 +3064,7 @@ static void sub_8086D94(struct Sprite * sprite) if (sprite->data[0]) { npcSprite = &gSprites[sprite->data[1]]; - npcSprite->coordOffsetEnabled = 0; + npcSprite->coordOffsetEnabled = FALSE; npcSprite->pos1.x = sprite->pos1.x + sprite->pos2.x; npcSprite->pos1.y = sprite->pos1.y + sprite->pos2.y - 8; npcSprite->pos2.x = 0; @@ -3326,7 +3326,7 @@ static void sub_80872F0(struct Sprite * sprite) if (sprite->data[6] != MAX_SPRITES) { struct Sprite * sprite1 = &gSprites[sprite->data[6]]; - sprite1->coordOffsetEnabled = 0; + sprite1->coordOffsetEnabled = FALSE; sprite1->pos1.x = sprite->pos1.x + sprite->pos2.x; sprite1->pos1.y = sprite->pos1.y + sprite->pos2.y - 8; sprite1->pos2.x = 0; @@ -3512,7 +3512,7 @@ static void FlyInEffect_4(struct Task * task) sub_805F724(objectEvent, objectEvent->currentCoords.x, objectEvent->currentCoords.y); sprite->pos2.x = 0; sprite->pos2.y = 0; - sprite->coordOffsetEnabled = 1; + sprite->coordOffsetEnabled = TRUE; sub_805CB70(); ObjectEventSetHeldMovement(objectEvent, MOVEMENT_ACTION_START_ANIM_IN_DIRECTION); task->data[0]++; From 2d820809d74eaf4775ad0e2cc50e57bb65ed61a6 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 2 Mar 2020 12:01:57 -0500 Subject: [PATCH 26/26] Revert erroneous use of SPRITE_INVALID_TAG --- src/field_effect.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/field_effect.c b/src/field_effect.c index fbd98315a..9b2974f1f 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -412,7 +412,7 @@ static u32 FieldEffectScript_ReadWord(const u8 **script) static void FieldEffectScript_LoadTiles(const u8 **script) { const struct SpriteSheet * spriteSheet = (const struct SpriteSheet * )FieldEffectScript_ReadWord(script); - if (GetSpriteTileStartByTag(spriteSheet->tag) == SPRITE_INVALID_TAG) + if (GetSpriteTileStartByTag(spriteSheet->tag) == 0xFFFF) LoadSpriteSheet(spriteSheet); *script += sizeof(u32); }