Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fly from Pokenav #5679

Open
wants to merge 16 commits into
base: upcoming
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 14 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions include/config/overworld.h
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@
#define OW_FLAG_NO_ENCOUNTER 0 // If this flag is set, wild encounters will be disabled.
#define OW_FLAG_NO_TRAINER_SEE 0 // If this flag is set, trainers will not battle the player unless they're talked to.
#define OW_FLAG_NO_COLLISION 0 // If this flag is set, the player will be able to walk over tiles with collision. Mainly intended for debugging purposes.
#define OW_FLAG_POKE_RIDER 0 // If this flag is set, the player will be able to use fly from the Pokenav Region Map section by pressing 'R' on a city/location they have been to.

#define BATTLE_PYRAMID_RANDOM_ENCOUNTERS FALSE // If set to TRUE, battle pyramid Pokemon will be generated randomly based on the round's challenge instead of hardcoded in src/data/battle_frontier/battle_pyramid_level_50_wild_mons.h (or open_level_wild_mons.h)

Expand Down
2 changes: 2 additions & 0 deletions include/overworld.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@

#define SKIP_OBJECT_EVENT_LOAD 1

extern EWRAM_DATA bool8 gSkipShowMonAnim;

struct InitialPlayerAvatarState
{
u8 transitionFlags;
Expand Down
4 changes: 4 additions & 0 deletions include/pokenav.h
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,8 @@ enum
HELPBAR_NONE,
HELPBAR_MAP_ZOOMED_OUT,
HELPBAR_MAP_ZOOMED_IN,
HELPBAR_MAP_ZOOMED_OUT_CANFLY,
HELPBAR_MAP_ZOOMED_IN_CANFLY,
HELPBAR_CONDITION_MON_LIST,
HELPBAR_CONDITION_MON_STATUS,
HELPBAR_CONDITION_MARKINGS,
Expand Down Expand Up @@ -295,6 +297,7 @@ enum
POKENAV_MAP_FUNC_ZOOM_OUT,
POKENAV_MAP_FUNC_ZOOM_IN,
POKENAV_MAP_FUNC_EXIT,
POKENAV_MAP_FUNC_FLY
};

// Modes for PokenavFadeScreen
Expand Down Expand Up @@ -438,6 +441,7 @@ void CreateRegionMapLoopedTask(s32);
bool32 IsRegionMapLoopedTaskActive(void);
void FreeRegionMapSubstruct1(void);
void FreeRegionMapSubstruct2(void);
void UpdateRegionMapHelpBarText(void);

// pokenav_conditions.c
u32 PokenavCallback_Init_ConditionGraph_Party(void);
Expand Down
5 changes: 5 additions & 0 deletions include/region_map.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ enum
MAP_INPUT_MOVE_END,
MAP_INPUT_A_BUTTON,
MAP_INPUT_B_BUTTON,
MAP_INPUT_R_BUTTON
};

enum {
Expand Down Expand Up @@ -115,6 +116,10 @@ void TrySetPlayerIconBlink(void);
void BlendRegionMap(u16 color, u32 coeff);
void SetRegionMapDataForZoom(void);

//Pokenav Fly funcs
u32 FilterFlyDestination(struct RegionMap* regionMap);
void SetFlyDestination(struct RegionMap* regionMap);

extern const struct RegionMapLocation gRegionMapEntries[];

#endif //GUARD_REGION_MAP_H
9 changes: 7 additions & 2 deletions src/field_effect.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#include "global.h"
#include "data.h"
#include "decompress.h"
#include "event_data.h"
#include "event_object_movement.h"
#include "field_camera.h"
#include "field_control_avatar.h"
Expand Down Expand Up @@ -28,9 +29,10 @@
#include "trainer_pokemon_sprites.h"
#include "trig.h"
#include "util.h"
#include "constants/field_effects.h"
#include "constants/event_objects.h"
#include "constants/event_object_movement.h"
#include "constants/field_effects.h"
#include "constants/flags.h"
#include "constants/metatile_behaviors.h"
#include "constants/rgb.h"
#include "constants/songs.h"
Expand All @@ -39,6 +41,7 @@
#define subsprite_table(ptr) {.subsprites = ptr, .subspriteCount = (sizeof ptr) / (sizeof(struct Subsprite))}

EWRAM_DATA s32 gFieldEffectArguments[8] = {0};
EWRAM_DATA bool8 gSkipShowMonAnim = FALSE;

// Static type declarations

Expand Down Expand Up @@ -3231,7 +3234,8 @@ static void FlyOutFieldEffect_ShowMon(struct Task *task)
{
task->tState++;
gFieldEffectArguments[0] = task->tMonId;
FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT);
if (!gSkipShowMonAnim)
FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT);
}
}

Expand Down Expand Up @@ -3480,6 +3484,7 @@ static void StartFlyBirdReturnToBall(u8 spriteId)
u8 FldEff_FlyIn(void)
{
CreateTask(Task_FlyIn, 254);
gSkipShowMonAnim = FALSE; // Clears this variable so flying via the party menu keeps the show mon animation
return 0;
}

Expand Down
45 changes: 40 additions & 5 deletions src/field_region_map.c
Original file line number Diff line number Diff line change
@@ -1,17 +1,22 @@
#include "global.h"
#include "bg.h"
#include "event_data.h"
#include "field_effect.h"
#include "gpu_regs.h"
#include "international_string_util.h"
#include "main.h"
#include "malloc.h"
#include "menu.h"
#include "overworld.h"
#include "palette.h"
#include "region_map.h"
#include "sound.h"
#include "strings.h"
#include "text.h"
#include "text_window.h"
#include "window.h"
#include "constants/rgb.h"
#include "constants/songs.h"

/*
* This is the type of map shown when interacting with the metatiles for
Expand Down Expand Up @@ -44,7 +49,8 @@ static void MCB2_InitRegionMapRegisters(void);
static void VBCB_FieldUpdateRegionMap(void);
static void MCB2_FieldUpdateRegionMap(void);
static void FieldUpdateRegionMap(void);
static void PrintRegionMapSecName(void);
static void PrintRegionMapSecName();
static void PrintTitleWindowText();

static const struct BgTemplate sFieldRegionMapBgTemplates[] = {
{
Expand Down Expand Up @@ -139,8 +145,6 @@ static void MCB2_FieldUpdateRegionMap(void)

static void FieldUpdateRegionMap(void)
{
u8 offset;

switch (sFieldRegionMapHandler->state)
{
case 0:
Expand All @@ -151,8 +155,8 @@ static void FieldUpdateRegionMap(void)
break;
case 1:
DrawStdFrameWithCustomTileAndPalette(WIN_TITLE, FALSE, 0x27, 0xd);
offset = GetStringCenterAlignXOffset(FONT_NORMAL, gText_Hoenn, 0x38);
AddTextPrinterParameterized(WIN_TITLE, FONT_NORMAL, gText_Hoenn, offset, 1, 0, NULL);
FillWindowPixelBuffer(WIN_TITLE, PIXEL_FILL(1));
PrintTitleWindowText();
ScheduleBgCopyTilemapToVram(0);
DrawStdFrameWithCustomTileAndPalette(WIN_MAPSEC_NAME, FALSE, 0x27, 0xd);
PrintRegionMapSecName();
Expand All @@ -176,11 +180,21 @@ static void FieldUpdateRegionMap(void)
{
case MAP_INPUT_MOVE_END:
PrintRegionMapSecName();
PrintTitleWindowText();
break;
case MAP_INPUT_A_BUTTON:
case MAP_INPUT_B_BUTTON:
sFieldRegionMapHandler->state++;
break;
case MAP_INPUT_R_BUTTON:
if (sFieldRegionMapHandler->regionMap.mapSecType == MAPSECTYPE_CITY_CANFLY &&
FlagGet(OW_FLAG_POKE_RIDER) && Overworld_MapTypeAllowsTeleportAndFly(gMapHeader.mapType) == TRUE)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
if (sFieldRegionMapHandler->regionMap.mapSecType == MAPSECTYPE_CITY_CANFLY &&
FlagGet(OW_FLAG_POKE_RIDER) && Overworld_MapTypeAllowsTeleportAndFly(gMapHeader.mapType) == TRUE)
if (sFieldRegionMapHandler->regionMap.mapSecType == MAPSECTYPE_CITY_CANFLY
&& FlagGet(OW_FLAG_POKE_RIDER) && Overworld_MapTypeAllowsTeleportAndFly(gMapHeader.mapType) == TRUE)

{
PlaySE(SE_SELECT);
SetFlyDestination(&sFieldRegionMapHandler->regionMap);
gSkipShowMonAnim = TRUE;
ReturnToFieldFromFlyMapSelect();
}
}
break;
case 5:
Expand Down Expand Up @@ -213,3 +227,24 @@ static void PrintRegionMapSecName(void)
CopyWindowToVram(WIN_MAPSEC_NAME, COPYWIN_FULL);
}
}

static void PrintTitleWindowText(void)
{
static const u8 FlyPromptText[] = _("{R_BUTTON}FLY");
u8 hoennOffset = GetStringCenterAlignXOffset(FONT_NORMAL, gText_Hoenn, 0x38);
u8 flyOffset = GetStringCenterAlignXOffset(FONT_NORMAL, FlyPromptText, 0x38);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
u8 hoennOffset = GetStringCenterAlignXOffset(FONT_NORMAL, gText_Hoenn, 0x38);
u8 flyOffset = GetStringCenterAlignXOffset(FONT_NORMAL, FlyPromptText, 0x38);
u32 hoennOffset = GetStringCenterAlignXOffset(FONT_NORMAL, gText_Hoenn, 0x38);
u32 flyOffset = GetStringCenterAlignXOffset(FONT_NORMAL, FlyPromptText, 0x38);


FillWindowPixelBuffer(WIN_TITLE, PIXEL_FILL(1));

if (sFieldRegionMapHandler->regionMap.mapSecType == MAPSECTYPE_CITY_CANFLY &&
FlagGet(OW_FLAG_POKE_RIDER) && Overworld_MapTypeAllowsTeleportAndFly(gMapHeader.mapType) == TRUE)
{
AddTextPrinterParameterized(WIN_TITLE, FONT_NORMAL, FlyPromptText, flyOffset, 1, 0, NULL);
ScheduleBgCopyTilemapToVram(WIN_TITLE);
}
else
{
AddTextPrinterParameterized(WIN_TITLE, FONT_NORMAL, gText_Hoenn, hoennOffset, 1, 0, NULL);
CopyWindowToVram(WIN_TITLE, COPYWIN_FULL);
}
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
}
}

26 changes: 14 additions & 12 deletions src/pokenav_main_menu.c
Original file line number Diff line number Diff line change
Expand Up @@ -86,18 +86,20 @@ static const struct WindowTemplate sHelpBarWindowTemplate[] =

static const u8 *const sHelpBarTexts[HELPBAR_COUNT] =
{
[HELPBAR_NONE] = COMPOUND_STRING("{CLEAR 0x80}"),
[HELPBAR_MAP_ZOOMED_OUT] = COMPOUND_STRING("{A_BUTTON}ZOOM {B_BUTTON}CANCEL"),
[HELPBAR_MAP_ZOOMED_IN] = COMPOUND_STRING("{A_BUTTON}FULL {B_BUTTON}CANCEL"),
[HELPBAR_CONDITION_MON_LIST] = COMPOUND_STRING("{A_BUTTON}CONDITION {B_BUTTON}CANCEL"),
[HELPBAR_CONDITION_MON_STATUS] = COMPOUND_STRING("{A_BUTTON}MARKINGS {B_BUTTON}CANCEL"),
[HELPBAR_CONDITION_MARKINGS] = COMPOUND_STRING("{A_BUTTON}SELECT MARK {B_BUTTON}CANCEL"),
[HELPBAR_MC_TRAINER_LIST] = COMPOUND_STRING("{A_BUTTON}MENU {B_BUTTON}CANCEL"),
[HELPBAR_MC_CALL_MENU] = COMPOUND_STRING("{A_BUTTON}OK {B_BUTTON}CANCEL"),
[HELPBAR_MC_CHECK_PAGE] = COMPOUND_STRING("{B_BUTTON}CANCEL"),
[HELPBAR_RIBBONS_MON_LIST] = COMPOUND_STRING("{A_BUTTON}RIBBONS {B_BUTTON}CANCEL"),
[HELPBAR_RIBBONS_LIST] = COMPOUND_STRING("{A_BUTTON}CHECK {B_BUTTON}CANCEL"),
[HELPBAR_RIBBONS_CHECK] = COMPOUND_STRING("{B_BUTTON}CANCEL"),
[HELPBAR_NONE] = COMPOUND_STRING("{CLEAR 0x80}"),
[HELPBAR_MAP_ZOOMED_OUT] = COMPOUND_STRING("{A_BUTTON}ZOOM {B_BUTTON}CANCEL"),
[HELPBAR_MAP_ZOOMED_IN] = COMPOUND_STRING("{A_BUTTON}FULL {B_BUTTON}CANCEL"),
[HELPBAR_MAP_ZOOMED_OUT_CANFLY] = COMPOUND_STRING("{A_BUTTON}ZOOM {B_BUTTON}CANCEL {R_BUTTON}FLY"),
[HELPBAR_MAP_ZOOMED_IN_CANFLY] = COMPOUND_STRING("{A_BUTTON}FULL {B_BUTTON}CANCEL {R_BUTTON}FLY"),
[HELPBAR_CONDITION_MON_LIST] = COMPOUND_STRING("{A_BUTTON}CONDITION {B_BUTTON}CANCEL"),
[HELPBAR_CONDITION_MON_STATUS] = COMPOUND_STRING("{A_BUTTON}MARKINGS {B_BUTTON}CANCEL"),
[HELPBAR_CONDITION_MARKINGS] = COMPOUND_STRING("{A_BUTTON}SELECT MARK {B_BUTTON}CANCEL"),
[HELPBAR_MC_TRAINER_LIST] = COMPOUND_STRING("{A_BUTTON}MENU {B_BUTTON}CANCEL"),
[HELPBAR_MC_CALL_MENU] = COMPOUND_STRING("{A_BUTTON}OK {B_BUTTON}CANCEL"),
[HELPBAR_MC_CHECK_PAGE] = COMPOUND_STRING("{B_BUTTON}CANCEL"),
[HELPBAR_RIBBONS_MON_LIST] = COMPOUND_STRING("{A_BUTTON}RIBBONS {B_BUTTON}CANCEL"),
[HELPBAR_RIBBONS_LIST] = COMPOUND_STRING("{A_BUTTON}CHECK {B_BUTTON}CANCEL"),
[HELPBAR_RIBBONS_CHECK] = COMPOUND_STRING("{B_BUTTON}CANCEL"),
};

static const u8 sHelpBarTextColors[3] =
Expand Down
57 changes: 54 additions & 3 deletions src/pokenav_region_map.c
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,11 @@
#include "bg.h"
#include "decompress.h"
#include "landmark.h"
#include "event_data.h"
#include "field_effect.h"
#include "main.h"
#include "menu.h"
#include "overworld.h"
#include "palette.h"
#include "pokenav.h"
#include "region_map.h"
Expand Down Expand Up @@ -73,6 +76,7 @@ static u32 LoopedTask_UpdateInfoAfterCursorMove(s32);
static u32 LoopedTask_RegionMapZoomOut(s32);
static u32 LoopedTask_RegionMapZoomIn(s32);
static u32 LoopedTask_ExitRegionMap(s32);
static u32 LoopedTask_TreatAsPokeNavFlyMap(s32);

extern const u16 gRegionMapCityZoomTiles_Pal[];
extern const u32 gRegionMapCityZoomText_Gfx[];
Expand Down Expand Up @@ -119,7 +123,8 @@ static const LoopedTask sRegionMapLoopTaskFuncs[] =
[POKENAV_MAP_FUNC_CURSOR_MOVED] = LoopedTask_UpdateInfoAfterCursorMove,
[POKENAV_MAP_FUNC_ZOOM_OUT] = LoopedTask_RegionMapZoomOut,
[POKENAV_MAP_FUNC_ZOOM_IN] = LoopedTask_RegionMapZoomIn,
[POKENAV_MAP_FUNC_EXIT] = LoopedTask_ExitRegionMap
[POKENAV_MAP_FUNC_EXIT] = LoopedTask_ExitRegionMap,
[POKENAV_MAP_FUNC_FLY] = LoopedTask_TreatAsPokeNavFlyMap,
};

static const struct CompressedSpriteSheet sCityZoomTextSpriteSheet[1] =
Expand Down Expand Up @@ -204,6 +209,8 @@ u32 GetRegionMapCallback(void)

static u32 HandleRegionMapInput(struct Pokenav_RegionMapMenu *state)
{
struct RegionMap* regionMap = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP);

switch (DoRegionMapInputCallback())
{
case MAP_INPUT_MOVE_END:
Expand All @@ -215,6 +222,10 @@ static u32 HandleRegionMapInput(struct Pokenav_RegionMapMenu *state)
case MAP_INPUT_B_BUTTON:
state->callback = GetExitRegionMapMenuId;
return POKENAV_MAP_FUNC_EXIT;
case MAP_INPUT_R_BUTTON:
if (regionMap->mapSecType == MAPSECTYPE_CITY_CANFLY && FlagGet(OW_FLAG_POKE_RIDER) &&
Overworld_MapTypeAllowsTeleportAndFly(gMapHeader.mapType) == TRUE)
Comment on lines +226 to +227
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
if (regionMap->mapSecType == MAPSECTYPE_CITY_CANFLY && FlagGet(OW_FLAG_POKE_RIDER) &&
Overworld_MapTypeAllowsTeleportAndFly(gMapHeader.mapType) == TRUE)
if (regionMap->mapSecType == MAPSECTYPE_CITY_CANFLY && FlagGet(OW_FLAG_POKE_RIDER)
&& Overworld_MapTypeAllowsTeleportAndFly(gMapHeader.mapType) == TRUE)

return POKENAV_MAP_FUNC_FLY;
}

return POKENAV_MAP_FUNC_NONE;
Expand Down Expand Up @@ -365,6 +376,7 @@ static u32 LoopedTask_OpenRegionMap(s32 taskState)
else
menuGfxId = POKENAV_GFX_MAP_MENU_ZOOMED_IN;

UpdateRegionMapHelpBarText();
LoadLeftHeaderGfxForIndex(menuGfxId);
ShowLeftHeaderGfx(menuGfxId, TRUE, TRUE);
PokenavFadeScreen(POKENAV_FADE_FROM_BLACK);
Expand All @@ -385,6 +397,7 @@ static u32 LoopedTask_UpdateInfoAfterCursorMove(s32 taskState)
{
case 0:
UpdateMapSecInfoWindow(state);
UpdateRegionMapHelpBarText();
return LT_INC_AND_PAUSE;
case 1:
if (IsDma3ManagerBusyWithBgCopy_(state))
Expand All @@ -408,7 +421,7 @@ static u32 LoopedTask_RegionMapZoomOut(s32 taskState)
if (UpdateRegionMapZoom() || IsChangeBgYForZoomActive())
return LT_PAUSE;

PrintHelpBarText(HELPBAR_MAP_ZOOMED_OUT);
UpdateRegionMapHelpBarText();
return LT_INC_AND_PAUSE;
case 2:
if (WaitForHelpBar())
Expand Down Expand Up @@ -441,7 +454,7 @@ static u32 LoopedTask_RegionMapZoomIn(s32 taskState)
if (UpdateRegionMapZoom() || IsChangeBgYForZoomActive())
return LT_PAUSE;

PrintHelpBarText(HELPBAR_MAP_ZOOMED_IN);
UpdateRegionMapHelpBarText();
return LT_INC_AND_PAUSE;
case 3:
if (WaitForHelpBar())
Expand Down Expand Up @@ -482,6 +495,23 @@ static u32 LoopedTask_ExitRegionMap(s32 taskState)
return LT_FINISH;
}

static u32 LoopedTask_TreatAsPokeNavFlyMap(s32 taskState)
{
switch (taskState)
{
case 0:
PlaySE(SE_SELECT);
struct RegionMap* regionMap = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP);
SetFlyDestination(regionMap);
gSkipShowMonAnim = TRUE;
ReturnToFieldFromFlyMapSelect();

return LT_FINISH;
}

return LT_FINISH;
}

static void LoadCityZoomViewGfx(void)
{
int i;
Expand Down Expand Up @@ -740,3 +770,24 @@ static void SetCityZoomTextInvisibility(bool32 invisible)
for (i = 0; i < (int)ARRAY_COUNT(state->cityZoomTextSprites); i++)
state->cityZoomTextSprites[i]->invisible = invisible;
}

void UpdateRegionMapHelpBarText(void)
{
struct RegionMap* regionMap = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP);

if (regionMap->mapSecType == MAPSECTYPE_CITY_CANFLY && FlagGet(OW_FLAG_POKE_RIDER) &&
Overworld_MapTypeAllowsTeleportAndFly(gMapHeader.mapType) == TRUE)
{
if (IsRegionMapZoomed())
PrintHelpBarText(HELPBAR_MAP_ZOOMED_IN_CANFLY);
else
PrintHelpBarText(HELPBAR_MAP_ZOOMED_OUT_CANFLY);
}
else
{
if (IsRegionMapZoomed())
PrintHelpBarText(HELPBAR_MAP_ZOOMED_IN);
else
PrintHelpBarText(HELPBAR_MAP_ZOOMED_OUT);
}
}
Loading
Loading