diff options
-rw-r--r-- | asm/battle_transition.s | 2 | ||||
-rw-r--r-- | asm/field_weather.s | 6 | ||||
-rw-r--r-- | asm/fldeff_sweetscent.s | 262 | ||||
-rw-r--r-- | asm/wild_encounter.s | 6 | ||||
-rw-r--r-- | data/map_event_scripts.inc | 2 | ||||
-rw-r--r-- | include/event_scripts.h | 1 | ||||
-rw-r--r-- | include/field_player_avatar.h | 1 | ||||
-rw-r--r-- | include/field_weather.h | 2 | ||||
-rw-r--r-- | include/fldeff.h | 3 | ||||
-rw-r--r-- | include/palette.h | 2 | ||||
-rw-r--r-- | include/wild_encounter.h | 1 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/fldeff_sweetscent.c | 102 | ||||
-rw-r--r-- | sym_ewram.txt | 2 |
14 files changed, 121 insertions, 273 deletions
diff --git a/asm/battle_transition.s b/asm/battle_transition.s index cf761a220..48a5836ed 100644 --- a/asm/battle_transition.s +++ b/asm/battle_transition.s @@ -137,7 +137,7 @@ _080D09AC: .4byte gTasks Transition_Phase1: @ 80D09B0 push {r4,lr} adds r4, r0, 0 - bl sub_807B05C + bl SetWeatherScreenFadeOut ldr r0, _080D09DC @ =gPlttBufferFaded ldr r1, _080D09E0 @ =gPlttBufferUnfaded ldr r2, _080D09E4 @ =0x04000100 diff --git a/asm/field_weather.s b/asm/field_weather.s index e8d3ba7ee..ac24101a7 100644 --- a/asm/field_weather.s +++ b/asm/field_weather.s @@ -2672,8 +2672,8 @@ _0807B054: .4byte gUnknown_2037F34 _0807B058: .4byte 0x000006d3 thumb_func_end sub_807B048 - thumb_func_start sub_807B05C -sub_807B05C: @ 807B05C + thumb_func_start SetWeatherScreenFadeOut +SetWeatherScreenFadeOut: @ 807B05C ldr r0, _0807B068 @ =gUnknown_2037F34 ldr r1, _0807B06C @ =0x000006c6 adds r0, r1 @@ -2683,7 +2683,7 @@ sub_807B05C: @ 807B05C .align 2, 0 _0807B068: .4byte gUnknown_2037F34 _0807B06C: .4byte 0x000006c6 - thumb_func_end sub_807B05C + thumb_func_end SetWeatherScreenFadeOut thumb_func_start sub_807B070 sub_807B070: @ 807B070 diff --git a/asm/fldeff_sweetscent.s b/asm/fldeff_sweetscent.s deleted file mode 100644 index aead537d4..000000000 --- a/asm/fldeff_sweetscent.s +++ /dev/null @@ -1,262 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_80DE0B4 -sub_80DE0B4: @ 80DE0B4 - push {lr} - ldr r1, _080DE0C4 @ =gUnknown_203B0A0 - movs r0, 0 - strb r0, [r1, 0x9] - bl hm2_sweet_scent - pop {r0} - bx r0 - .align 2, 0 -_080DE0C4: .4byte gUnknown_203B0A0 - thumb_func_end sub_80DE0B4 - - thumb_func_start sub_80DE0C8 -sub_80DE0C8: @ 80DE0C8 - ldr r1, _080DE0D8 @ =gFieldCallback2 - ldr r0, _080DE0DC @ =FieldCallback_PrepareFadeInFromMenu - str r0, [r1] - ldr r1, _080DE0E0 @ =gPostMenuFieldCallback - ldr r0, _080DE0E4 @ =hm2_sweet_scent - str r0, [r1] - movs r0, 0x1 - bx lr - .align 2, 0 -_080DE0D8: .4byte gFieldCallback2 -_080DE0DC: .4byte FieldCallback_PrepareFadeInFromMenu -_080DE0E0: .4byte gPostMenuFieldCallback -_080DE0E4: .4byte hm2_sweet_scent - thumb_func_end sub_80DE0C8 - - thumb_func_start hm2_sweet_scent -hm2_sweet_scent: @ 80DE0E8 - push {lr} - movs r0, 0x33 - bl FieldEffectStart - bl GetCursorSelectionMonId - ldr r1, _080DE100 @ =gFieldEffectArguments - lsls r0, 24 - lsrs r0, 24 - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_080DE100: .4byte gFieldEffectArguments - thumb_func_end hm2_sweet_scent - - thumb_func_start FldEff_SweetScent -FldEff_SweetScent: @ 80DE104 - push {lr} - bl sub_807B05C - bl oei_task_add - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080DE12C @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldr r2, _080DE130 @ =sub_80DE134 - lsrs r0, r2, 16 - strh r0, [r1, 0x18] - strh r2, [r1, 0x1A] - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_080DE12C: .4byte gTasks -_080DE130: .4byte sub_80DE134 - thumb_func_end FldEff_SweetScent - - thumb_func_start sub_80DE134 -sub_80DE134: @ 80DE134 - push {r4,r5,lr} - sub sp, 0x4 - movs r0, 0xE5 - bl PlaySE - ldr r4, _080DE1B8 @ =gUnknown_203AAB0 - movs r0, 0x80 - lsls r0, 3 - bl Alloc - adds r1, r0, 0 - str r1, [r4] - ldr r4, _080DE1BC @ =gPlttBufferUnfaded - movs r5, 0x80 - lsls r5, 1 - adds r0, r4, 0 - adds r2, r5, 0 - bl CpuFastSet - ldr r0, _080DE1C0 @ =gPlttBufferFaded - adds r1, r4, 0 - adds r2, r5, 0 - bl CpuFastSet - bl GetPlayerAvatarObjectId - ldr r2, _080DE1C4 @ =gSprites - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - ldrb r1, [r1, 0x5] - lsrs r1, 4 - adds r1, 0x10 - movs r0, 0x1 - lsls r0, r1 - mvns r0, r0 - movs r1, 0x1F - str r1, [sp] - movs r1, 0x4 - movs r2, 0 - movs r3, 0x8 - bl BeginNormalPaletteFade - ldr r0, _080DE1C8 @ =sub_80DE1D0 - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080DE1CC @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r0, 0 - strh r0, [r1, 0x8] - movs r0, 0x33 - bl FieldEffectActiveListRemove - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080DE1B8: .4byte gUnknown_203AAB0 -_080DE1BC: .4byte gPlttBufferUnfaded -_080DE1C0: .4byte gPlttBufferFaded -_080DE1C4: .4byte gSprites -_080DE1C8: .4byte sub_80DE1D0 -_080DE1CC: .4byte gTasks - thumb_func_end sub_80DE134 - - thumb_func_start sub_80DE1D0 -sub_80DE1D0: @ 80DE1D0 - push {r4-r7,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r4, r0, 24 - lsls r0, r4, 2 - adds r0, r4 - lsls r5, r0, 3 - ldr r6, _080DE21C @ =gTasks+0x8 - adds r2, r5, r6 - ldr r0, _080DE220 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - bne _080DE26C - ldrh r3, [r2] - movs r7, 0 - ldrsh r0, [r2, r7] - cmp r0, 0x40 - bne _080DE268 - strh r1, [r2] - bl sub_8082EC0 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080DE228 - ldr r0, _080DE224 @ =gUnknown_203AAB0 - ldr r0, [r0] - bl Free - adds r0, r4, 0 - bl DestroyTask - b _080DE26C - .align 2, 0 -_080DE21C: .4byte gTasks+0x8 -_080DE220: .4byte gPaletteFade -_080DE224: .4byte gUnknown_203AAB0 -_080DE228: - adds r0, r6, 0 - subs r0, 0x8 - adds r0, r5, r0 - ldr r1, _080DE260 @ =sub_80DE274 - str r1, [r0] - bl GetPlayerAvatarObjectId - ldr r2, _080DE264 @ =gSprites - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - ldrb r1, [r1, 0x5] - lsrs r1, 4 - adds r1, 0x10 - movs r0, 0x1 - lsls r0, r1 - mvns r0, r0 - movs r1, 0x1F - str r1, [sp] - movs r1, 0x4 - movs r2, 0x8 - movs r3, 0 - bl BeginNormalPaletteFade - b _080DE26C - .align 2, 0 -_080DE260: .4byte sub_80DE274 -_080DE264: .4byte gSprites -_080DE268: - adds r0, r3, 0x1 - strh r0, [r2] -_080DE26C: - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80DE1D0 - - thumb_func_start sub_80DE274 -sub_80DE274: @ 80DE274 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, _080DE2B0 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080DE2AA - ldr r4, _080DE2B4 @ =gUnknown_203AAB0 - ldr r0, [r4] - ldr r1, _080DE2B8 @ =gPlttBufferUnfaded - movs r2, 0x80 - lsls r2, 1 - bl CpuFastSet - bl sub_807B070 - ldr r0, [r4] - bl Free - ldr r0, _080DE2BC @ =gUnknown_81BE564 - bl ScriptContext1_SetupScript - adds r0, r5, 0 - bl DestroyTask -_080DE2AA: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080DE2B0: .4byte gPaletteFade -_080DE2B4: .4byte gUnknown_203AAB0 -_080DE2B8: .4byte gPlttBufferUnfaded -_080DE2BC: .4byte gUnknown_81BE564 - thumb_func_end sub_80DE274 - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/wild_encounter.s b/asm/wild_encounter.s index f8bc6a71b..e9fb8a630 100644 --- a/asm/wild_encounter.s +++ b/asm/wild_encounter.s @@ -1020,8 +1020,8 @@ _08082EB6: _08082EBC: .4byte gSpecialVar_Result thumb_func_end sub_8082E54 - thumb_func_start sub_8082EC0 -sub_8082EC0: @ 8082EC0 + thumb_func_start SweetScentWildEncounter +SweetScentWildEncounter: @ 8082EC0 push {r4,r5,lr} sub sp, 0x4 mov r4, sp @@ -1108,7 +1108,7 @@ _08082F6E: pop {r4,r5} pop {r1} bx r1 - thumb_func_end sub_8082EC0 + thumb_func_end SweetScentWildEncounter thumb_func_start sub_8082F78 sub_8082F78: @ 8082F78 diff --git a/data/map_event_scripts.inc b/data/map_event_scripts.inc index 801476ea1..bf8ed9a68 100644 --- a/data/map_event_scripts.inc +++ b/data/map_event_scripts.inc @@ -3575,7 +3575,7 @@ gUnknown_81BE2B7:: @ 81BE2B7 gUnknown_81BE2FF:: @ 81BE2FF .incbin "baserom.gba", 0x1BE2FF, 0x265 -gUnknown_81BE564:: @ 81BE564 +EventScript_FailSweetScent:: @ 81BE564 .incbin "baserom.gba", 0x1BE564, 0x2A Route2_EventScript_1BE58E:: @ 81BE58E diff --git a/include/event_scripts.h b/include/event_scripts.h index b1b65da11..b12539476 100644 --- a/include/event_scripts.h +++ b/include/event_scripts.h @@ -1145,5 +1145,6 @@ extern const u8 gUnknown_81BB0DF[]; extern const u8 gUnknown_81BB156[]; extern const u8 EventScript_FldEffStrength[]; +extern const u8 EventScript_FailSweetScent[]; #endif //GUARD_EVENT_SCRIPTS_H diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h index 4871bd082..0e8877dca 100644 --- a/include/field_player_avatar.h +++ b/include/field_player_avatar.h @@ -24,5 +24,6 @@ void sub_805DAE4(u8 direction); void SetPlayerAvatarTransitionFlags(u16 a); bool8 IsPlayerFacingSurfableFishableWater(void); void sub_805D2C0(u8 secondaryId); +u8 GetPlayerAvatarObjectId(void); #endif //GUARD_FIELD_PLAYER_AVATAR_H diff --git a/include/field_weather.h b/include/field_weather.h index 13a1b4fcb..c3ecd4fa6 100644 --- a/include/field_weather.h +++ b/include/field_weather.h @@ -14,5 +14,7 @@ void SetSav1WeatherFromCurrMapHeader(void); void sub_807B0C4(u16 *, u16 *, u32); void PlayRainStoppingSoundEffect(void); bool8 sub_807AA70(void); +void SetWeatherScreenFadeOut(void); +void sub_807B070(void); #endif // GUARD_WEATHER_H diff --git a/include/fldeff.h b/include/fldeff.h index 749b09da7..3f2591516 100644 --- a/include/fldeff.h +++ b/include/fldeff.h @@ -26,5 +26,8 @@ bool8 hm_prepare_dive_probably(void); void sub_80E56DC(u8 taskId); void sub_80E5724(u8 taskId); +// sweetscent +bool8 SetUpFieldMove_SweetScent(void); +bool8 FldEff_SweetScent(void); #endif // GUARD_FLDEFF_H diff --git a/include/palette.h b/include/palette.h index 31c8ffefe..78f398873 100644 --- a/include/palette.h +++ b/include/palette.h @@ -43,7 +43,7 @@ struct PaletteFadeControl extern struct PaletteFadeControl gPaletteFade; extern u32 gPlttBufferTransferPending; -extern u8 gPaletteDecompressionBuffer[]; +extern u8 *gPaletteDecompressionBuffer; extern u16 gPlttBufferUnfaded[PLTT_BUFFER_SIZE]; extern u16 gPlttBufferFaded[PLTT_BUFFER_SIZE]; diff --git a/include/wild_encounter.h b/include/wild_encounter.h index 2ca30ac8b..bf53ed6ee 100644 --- a/include/wild_encounter.h +++ b/include/wild_encounter.h @@ -44,5 +44,6 @@ u16 GetLocalWaterMon(void); bool8 UpdateRepelCounter(void); void sub_8082740(u8); u8 GetUnownLetterByPersonalityLoByte(u32 personality); +bool8 SweetScentWildEncounter(void); #endif // GUARD_WILD_ENCOUNTER_H diff --git a/ld_script.txt b/ld_script.txt index 0a6fd5827..f0b84f128 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -202,7 +202,7 @@ SECTIONS { asm/field_effect_helpers.o(.text); asm/battle_anim_sound_tasks.o(.text); asm/battle_controller_safari.o(.text); - asm/fldeff_sweetscent.o(.text); + src/fldeff_sweetscent.o(.text); asm/battle_anim_effects_3.o(.text); asm/learn_move.o(.text); src/fldeff_softboiled.o(.text); diff --git a/src/fldeff_sweetscent.c b/src/fldeff_sweetscent.c new file mode 100644 index 000000000..c29c8cfac --- /dev/null +++ b/src/fldeff_sweetscent.c @@ -0,0 +1,102 @@ +#include "global.h" +#include "field_player_avatar.h" +#include "field_effect.h" +#include "party_menu.h" +#include "malloc.h" +#include "event_data.h" +#include "script.h" +#include "fldeff.h" +#include "event_scripts.h" +#include "field_weather.h" +#include "sound.h" +#include "palette.h" +#include "wild_encounter.h" +#include "constants/songs.h" + +static void FieldCallback_SweetScent(void); +static void StartSweetScentFieldEffect(void); +static void TrySweetScentEncounter(u8 taskId); +static void FailSweetScentEncounter(u8 taskId); + +static void Unused_StartSweetscentFldeff(void) +{ + gUnknown_203B0A0.unk9 = 0; + FieldCallback_SweetScent(); +} + +bool8 SetUpFieldMove_SweetScent(void) +{ + gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu; + gPostMenuFieldCallback = FieldCallback_SweetScent; + return TRUE; +} + +static void FieldCallback_SweetScent(void) +{ + FieldEffectStart(FLDEFF_SWEET_SCENT); + gFieldEffectArguments[0] = GetCursorSelectionMonId(); +} + +bool8 FldEff_SweetScent(void) +{ + u8 taskId; + + SetWeatherScreenFadeOut(); + taskId = oei_task_add(); + gTasks[taskId].data[8] = (u32)StartSweetScentFieldEffect >> 16; + gTasks[taskId].data[9] = (u32)StartSweetScentFieldEffect; + return FALSE; +} + +static void StartSweetScentFieldEffect(void) +{ + u8 taskId; + + PlaySE(SE_W260); + gPaletteDecompressionBuffer = (u8 *)Alloc(0x400); + CpuFastSet(gPlttBufferUnfaded, gPaletteDecompressionBuffer, 0x100); + CpuFastSet(gPlttBufferFaded, gPlttBufferUnfaded, 0x100); + BeginNormalPaletteFade(~(1 << (gSprites[GetPlayerAvatarObjectId()].oam.paletteNum + 16)), 4, 0, 8, RGB(31, 0, 0)); + taskId = CreateTask(TrySweetScentEncounter, 0); + gTasks[taskId].data[0] = 0; + FieldEffectActiveListRemove(FLDEFF_SWEET_SCENT); +} + +static void TrySweetScentEncounter(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + if (!gPaletteFade.active) + { + if (data[0] == 64) + { + data[0] = 0; + if (SweetScentWildEncounter() == TRUE) + { + Free(gPaletteDecompressionBuffer); + DestroyTask(taskId); + } + else + { + gTasks[taskId].func = FailSweetScentEncounter; + BeginNormalPaletteFade(~(1 << (gSprites[GetPlayerAvatarObjectId()].oam.paletteNum + 16)), 4, 8, 0, RGB(31, 0, 0)); + } + } + else + { + data[0]++; + } + } +} + +static void FailSweetScentEncounter(u8 taskId) +{ + if (!gPaletteFade.active) + { + CpuFastSet(gPaletteDecompressionBuffer, gPlttBufferUnfaded, 0x100); + sub_807B070(); + Free(gPaletteDecompressionBuffer); + ScriptContext1_SetupScript(EventScript_FailSweetScent); + DestroyTask(taskId); + } +} diff --git a/sym_ewram.txt b/sym_ewram.txt index 80a75be9a..be0b04728 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -1091,7 +1091,7 @@ gUnknown_2039A34: @ 2039A34 .include "src/save.o" .include "src/mystery_event_script.o" -gUnknown_203AAB0: @ 203AAB0 +gPaletteDecompressionBuffer: @ 203AAB0 .space 0x4 gUnknown_203AAB4: @ 203AAB4 |