summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjiangzhengwenjz <jiangzhengwenjzw@qq.com>2019-06-29 06:38:36 +0800
committerjiangzhengwenjz <jiangzhengwenjzw@qq.com>2019-06-29 06:39:11 +0800
commit38febc8bafcab19965608e434135c054893dfb68 (patch)
tree1355f3b4a98a4a723bde1409500b446cc214fa56 /src
parentd09d78dca303386dd5d7fae0ec8e3f6c59d227bc (diff)
finished fldeff_sweetscent
Diffstat (limited to 'src')
-rw-r--r--src/fldeff_sweetscent.c102
1 files changed, 102 insertions, 0 deletions
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);
+ }
+}