Add OW_DEFOG_FIELD_MOVE to allow players to clear overworld Fog (#6477)
This commit is contained in:
parent
7bf156be0e
commit
69f2f9f151
@ -80,6 +80,7 @@ gFieldEffectScriptPointers::
|
||||
.4byte gFieldEffectScript_TracksBug @ FLDEFF_TRACKS_BUG
|
||||
.4byte gFieldEffectScript_TracksSpot @ FLDEFF_TRACKS_SPOT
|
||||
.4byte gFieldEffectScript_CaveDust @ FLDEFF_CAVE_DUST
|
||||
.4byte gFieldEffectScript_Defog @ FLDEFF_DEFOG
|
||||
|
||||
gFieldEffectScript_ExclamationMarkIcon1::
|
||||
field_eff_callnative FldEff_ExclamationMarkIcon
|
||||
@ -379,3 +380,7 @@ gFieldEffectScript_TracksSlither::
|
||||
gFieldEffectScript_CaveDust::
|
||||
field_eff_loadfadedpal_callnative gSpritePalette_CaveDust FldEff_CaveDust
|
||||
field_eff_end
|
||||
|
||||
gFieldEffectScript_Defog::
|
||||
field_eff_callnative FldEff_Defog
|
||||
field_eff_end
|
||||
|
||||
@ -418,3 +418,20 @@ EventScript_FailSweetScent::
|
||||
|
||||
Text_FailSweetScent:
|
||||
.string "Looks like there's nothing here…$"
|
||||
|
||||
EventScript_UseDefog::
|
||||
lockall
|
||||
bufferpartymonnick STR_VAR_1, VAR_RESULT
|
||||
buffermovename STR_VAR_2, MOVE_DEFOG
|
||||
msgbox Text_MonUsedFieldMove, MSGBOX_DEFAULT
|
||||
closemessage
|
||||
isfollowerfieldmoveuser VAR_0x8004
|
||||
setfieldeffectargument 3, VAR_0x8004 @ skip pose if so
|
||||
setflag FLAG_SAFE_FOLLOWER_MOVEMENT
|
||||
call_if_eq VAR_0x8004, TRUE, EventScript_FollowerFieldMove
|
||||
waitmovement 0
|
||||
setfieldeffectargument 0, VAR_RESULT
|
||||
dofieldeffect FLDEFF_DEFOG
|
||||
waitstate
|
||||
releaseall
|
||||
end
|
||||
|
||||
@ -10,6 +10,7 @@
|
||||
#define OW_DOUBLE_APPROACH_WITH_ONE_MON FALSE // If enabled, you can be spotted by two trainers at the same time even if you only have one eligible Pokémon in your party.
|
||||
#define OW_HIDE_REPEAT_MAP_POPUP FALSE // If enabled, map popups will not appear if entering a map with the same Map Section Id as the last.
|
||||
#define OW_FRLG_WHITEOUT FALSE // If enabled, shows an additional whiteout message and post whiteout event script with healing NPC.
|
||||
#define OW_DEFOG_FIELD_MOVE FALSE // If enabled, Defog can be used as a Field Move as seen in DPPt.
|
||||
|
||||
// Item Obtain Description Box
|
||||
#define OW_ITEM_DESCRIPTIONS_OFF 0 // never show descriptions
|
||||
|
||||
@ -76,6 +76,7 @@
|
||||
#define FLDEFF_TRACKS_SPOT 71
|
||||
#define FLDEFF_TRACKS_BUG 72
|
||||
#define FLDEFF_CAVE_DUST 73
|
||||
#define FLDEFF_DEFOG 74
|
||||
|
||||
#define FLDEFFOBJ_SHADOW_S 0
|
||||
#define FLDEFFOBJ_SHADOW_M 1
|
||||
|
||||
@ -407,6 +407,7 @@ extern const u8 EventScript_UseCut[];
|
||||
extern const u8 EventScript_UseRockSmash[];
|
||||
extern const u8 EventScript_UseDig[];
|
||||
extern const u8 EventScript_UseCutGrass[];
|
||||
extern const u8 EventScript_UseDefog[];
|
||||
|
||||
//player pc
|
||||
extern const u8 LittlerootTown_BrendansHouse_2F_EventScript_TurnOffPlayerPC[];
|
||||
|
||||
@ -51,4 +51,8 @@ u8 CreateFieldMoveTask(void);
|
||||
bool8 SetUpFieldMove_RockSmash(void);
|
||||
bool8 FldEff_UseRockSmash(void);
|
||||
|
||||
// defog
|
||||
bool8 SetUpFieldMove_Defog(void);
|
||||
bool8 FldEff_Defog(void);
|
||||
|
||||
#endif // GUARD_FLDEFF_H
|
||||
|
||||
@ -799,6 +799,9 @@ static const u16 sFieldMoves[FIELD_MOVES_COUNT + 1] =
|
||||
[FIELD_MOVE_MILK_DRINK] = MOVE_MILK_DRINK,
|
||||
[FIELD_MOVE_SOFT_BOILED] = MOVE_SOFT_BOILED,
|
||||
[FIELD_MOVE_SWEET_SCENT] = MOVE_SWEET_SCENT,
|
||||
#if OW_DEFOG_FIELD_MOVE == TRUE
|
||||
[FIELD_MOVE_DEFOG] = MOVE_DEFOG,
|
||||
#endif
|
||||
// NOTE: This value is used as the terminal value for the table. There's no reason to do this, as the size of the table is known.
|
||||
// Whichever move shares this value (MOVE_SWORDS_DANCE by default) if present will be treated as the end of the array rather than a field move.
|
||||
[FIELD_MOVES_COUNT] = FIELD_MOVES_COUNT
|
||||
@ -824,6 +827,9 @@ struct
|
||||
[FIELD_MOVE_MILK_DRINK] = {SetUpFieldMove_SoftBoiled, PARTY_MSG_NOT_ENOUGH_HP},
|
||||
[FIELD_MOVE_SOFT_BOILED] = {SetUpFieldMove_SoftBoiled, PARTY_MSG_NOT_ENOUGH_HP},
|
||||
[FIELD_MOVE_SWEET_SCENT] = {SetUpFieldMove_SweetScent, PARTY_MSG_CANT_USE_HERE},
|
||||
#if OW_DEFOG_FIELD_MOVE == TRUE
|
||||
[FIELD_MOVE_DEFOG] = {SetUpFieldMove_Defog, PARTY_MSG_CANT_USE_HERE},
|
||||
#endif
|
||||
};
|
||||
|
||||
static const u8 *const sUnionRoomTradeMessages[] =
|
||||
|
||||
74
src/fldeff_defog.c
Normal file
74
src/fldeff_defog.c
Normal file
@ -0,0 +1,74 @@
|
||||
#include "global.h"
|
||||
#include "event_data.h"
|
||||
#include "event_scripts.h"
|
||||
#include "field_effect.h"
|
||||
#include "field_weather.h"
|
||||
#include "fldeff.h"
|
||||
#include "palette.h"
|
||||
#include "party_menu.h"
|
||||
#include "script.h"
|
||||
#include "sound.h"
|
||||
#include "task.h"
|
||||
#include "util.h"
|
||||
#include "constants/battle_anim.h"
|
||||
#include "constants/field_effects.h"
|
||||
#include "constants/songs.h"
|
||||
#include "constants/weather.h"
|
||||
|
||||
static void FieldCallback_Defog(void);
|
||||
static void FieldMove_Defog(void);
|
||||
static void EndDefogTask(u8 taskId);
|
||||
|
||||
bool8 SetUpFieldMove_Defog(void)
|
||||
{
|
||||
if (gWeather.currWeather != WEATHER_FOG_HORIZONTAL && gWeather.currWeather != WEATHER_FOG_DIAGONAL)
|
||||
return FALSE;
|
||||
|
||||
gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
|
||||
gPostMenuFieldCallback = FieldCallback_Defog;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void FieldCallback_Defog(void)
|
||||
{
|
||||
gFieldEffectArguments[0] = GetCursorSelectionMonId();
|
||||
ScriptContext_SetupScript(EventScript_UseDefog);
|
||||
}
|
||||
|
||||
bool8 FldEff_Defog(void)
|
||||
{
|
||||
u8 taskId = CreateFieldMoveTask();
|
||||
|
||||
gTasks[taskId].data[8] = (uintptr_t)FieldMove_Defog>> 16;
|
||||
gTasks[taskId].data[9] = (uintptr_t)FieldMove_Defog;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
#define tFrameCount data[0]
|
||||
|
||||
static void FieldMove_Defog(void)
|
||||
{
|
||||
PlaySE12WithPanning(SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER);
|
||||
SetWeatherScreenFadeOut();
|
||||
FieldEffectActiveListRemove(FLDEFF_DEFOG);
|
||||
SetWeather(WEATHER_NONE);
|
||||
u32 taskId = CreateTask(EndDefogTask, 0);
|
||||
gTasks[taskId].tFrameCount = 0;
|
||||
};
|
||||
|
||||
static void EndDefogTask(u8 taskId)
|
||||
{
|
||||
if (gPaletteFade.active)
|
||||
return;
|
||||
|
||||
gTasks[taskId].tFrameCount++;
|
||||
|
||||
if (gTasks[taskId].tFrameCount != 120)
|
||||
return;
|
||||
|
||||
gWeatherPtr->currWeather = WEATHER_NONE;
|
||||
DestroyTask(taskId);
|
||||
ScriptContext_Enable();
|
||||
}
|
||||
|
||||
#undef tFrameCount
|
||||
@ -144,6 +144,9 @@ enum {
|
||||
FIELD_MOVE_MILK_DRINK,
|
||||
FIELD_MOVE_SOFT_BOILED,
|
||||
FIELD_MOVE_SWEET_SCENT,
|
||||
#if OW_DEFOG_FIELD_MOVE == TRUE
|
||||
FIELD_MOVE_DEFOG,
|
||||
#endif
|
||||
FIELD_MOVES_COUNT
|
||||
};
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user