summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/battle_transition.s2
-rw-r--r--asm/field_weather.s6
-rw-r--r--asm/fldeff_sweetscent.s262
-rw-r--r--asm/wild_encounter.s6
-rw-r--r--data/map_event_scripts.inc2
-rw-r--r--include/event_scripts.h1
-rw-r--r--include/field_player_avatar.h1
-rw-r--r--include/field_weather.h2
-rw-r--r--include/fldeff.h3
-rw-r--r--include/palette.h2
-rw-r--r--include/wild_encounter.h1
-rw-r--r--ld_script.txt2
-rw-r--r--src/fldeff_sweetscent.c102
-rw-r--r--sym_ewram.txt2
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