diff options
Diffstat (limited to 'src/safari_zone.c')
-rw-r--r-- | src/safari_zone.c | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/src/safari_zone.c b/src/safari_zone.c new file mode 100644 index 000000000..cb0a58586 --- /dev/null +++ b/src/safari_zone.c @@ -0,0 +1,80 @@ +#include "global.h" +#include "battle.h" +#include "event_scripts.h" +#include "overworld.h" +#include "battle.h" +#include "script.h" +#include "event_data.h" +#include "field_screen_effect.h" + +EWRAM_DATA u8 gNumSafariBalls = 0; +EWRAM_DATA u16 gSafariZoneStepCounter = 0; + +bool32 GetSafariZoneFlag(void) +{ + return FlagGet(FLAG_SYS_SAFARI_MODE); +} + +void SetSafariZoneFlag(void) +{ + FlagSet(FLAG_SYS_SAFARI_MODE); +} + +void ResetSafariZoneFlag(void) +{ + FlagClear(FLAG_SYS_SAFARI_MODE); +} + +void EnterSafariMode(void) +{ + IncrementGameStat(GAME_STAT_ENTERED_SAFARI_ZONE); + SetSafariZoneFlag(); + gNumSafariBalls = 30; + gSafariZoneStepCounter = 600; +} + +void ExitSafariMode(void) +{ + ResetSafariZoneFlag(); + gNumSafariBalls = 0; + gSafariZoneStepCounter = 0; +} + +bool8 SafariZoneTakeStep(void) +{ + if (GetSafariZoneFlag() == FALSE) + return FALSE; + gSafariZoneStepCounter--; + if (gSafariZoneStepCounter == 0) + { + ScriptContext1_SetupScript(EventScript_SafariTimesUp); + return TRUE; + } + return FALSE; +} + +void SafariZoneRetirePrompt(void) +{ + ScriptContext1_SetupScript(EventScript_SafariRetire); +} + +void CB2_EndSafariBattle(void) +{ + if (gNumSafariBalls != 0) + { + SetMainCallback2(CB2_ReturnToField); + } + else if (gBattleOutcome == B_OUTCOME_NO_SAFARI_BALLS) + { + ScriptContext2_RunNewScript(EventScript_SafariWarpOut); + WarpIntoMap(); + gFieldCallback = sub_807E3EC; + SetMainCallback2(CB2_LoadMap); + } + else if (gBattleOutcome == B_OUTCOME_CAUGHT) + { + ScriptContext1_SetupScript(EventScript_SafariOutOfBalls); + ScriptContext1_Stop(); + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); + } +} |