diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2019-07-29 21:10:54 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2019-07-29 21:10:54 -0400 |
commit | e130a00cdf69c58dbff8e98a69559aeb33f87b60 (patch) | |
tree | e128e502a2229f5d934f0436a0eb31dc86350bbb /src/fldeff_sweetscent.c | |
parent | ef4c86fbfdd18b78700f61b629907a85579197c0 (diff) | |
parent | d4cc0e161bf103d3d3e01fefa02e867d4a2053c2 (diff) |
Merge branch 'master' into slot_machine
Diffstat (limited to 'src/fldeff_sweetscent.c')
-rw-r--r-- | src/fldeff_sweetscent.c | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/src/fldeff_sweetscent.c b/src/fldeff_sweetscent.c new file mode 100644 index 000000000..aca56ef4c --- /dev/null +++ b/src/fldeff_sweetscent.c @@ -0,0 +1,101 @@ +#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(); + FLDEFF_SET_FUNC_TO_DATA(StartSweetScentFieldEffect); + return FALSE; +} + +static void StartSweetScentFieldEffect(void) +{ + u8 taskId; + + PlaySE(SE_W260); + gUnknown_203AAB0 = (u8 *)Alloc(0x400); + CpuFastSet(gPlttBufferUnfaded, gUnknown_203AAB0, 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(gUnknown_203AAB0); + 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(gUnknown_203AAB0, gPlttBufferUnfaded, 0x100); + sub_807B070(); + Free(gUnknown_203AAB0); + ScriptContext1_SetupScript(EventScript_FailSweetScent); + DestroyTask(taskId); + } +} |