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 11 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 @@ -3226,7 +3229,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 @@ -3475,6 +3479,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
46 changes: 42 additions & 4 deletions src/field_region_map.c
Original file line number Diff line number Diff line change
@@ -1,17 +1,21 @@
#include "global.h"
#include "bg.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 @@ -45,6 +49,12 @@ static void VBCB_FieldUpdateRegionMap(void);
static void MCB2_FieldUpdateRegionMap(void);
static void FieldUpdateRegionMap(void);
static void PrintRegionMapSecName(void);
static void PrintTitleWindowText(void);

static const u8* const FlyPromptText = COMPOUND_STRING("{R_BUTTON}FLY");
Copy link
Collaborator

Choose a reason for hiding this comment

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

This should be just a normal text string. We don't use compound strings like that.

Copy link
Author

Choose a reason for hiding this comment

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

this is actually straight from the strings used in the pokenav helpbar, though there it's an array.

Copy link
Collaborator

Choose a reason for hiding this comment

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

We use Compound Strings for non duplicate strings, so single use strings. If you want this to use multiply times it should be a normal string so

static const u8 sFlyPropmtText[] = _("{R_BUTTON}FLY");

Copy link
Author

Choose a reason for hiding this comment

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

this is technically a single use string- should it stay a compound string then?

Copy link
Collaborator

Choose a reason for hiding this comment

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

You use it twice right?

The reason we use compound strings is because they make code more readable and additionally save a little bit of space so in your case it should be moved where it is needed in the first place. Though iirc we've decided to keep using normal strings for function arguments so you would need to convert it either way.

Copy link
Author

Choose a reason for hiding this comment

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

oh, i see, yeah it's used once in the file, but twice in the function. fixed!

Copy link
Author

Choose a reason for hiding this comment

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

hmm in this case should it be defined in the PrintTitleWindowText func? since it's only used there?

Copy link
Collaborator

Choose a reason for hiding this comment

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

yes

Copy link
Author

Choose a reason for hiding this comment

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

done!


u8 hoennOffset;
u8 flyOffset;
Copy link
Collaborator

Choose a reason for hiding this comment

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

why is this outside of a function?

Copy link
Author

Choose a reason for hiding this comment

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

i figured it'd be better to set them when the FieldUpdateRegionMap() is called rather than every time the PrintTitleWindowText() function is called to speed up text display

Copy link
Collaborator

Choose a reason for hiding this comment

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

Pass them as arguments into PrintTitleWindowText() instead then. We don't define variables outside of functions unless they are globals and those don't need to be globals.

Copy link
Collaborator

Choose a reason for hiding this comment

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

Also, the function FieldUpdateRegionMap is rerun each case which means that they are calculated each time regardless so you aren't gaining any speed improvement with this which means you could just calc it in PrintTitleWindowText which will be better for speed because you aren't recalcing each time FieldUpdateRegionMap is run.

Copy link
Author

Choose a reason for hiding this comment

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

good to know! i thought it was a big loop inside FieldUpdateRegionMap lol


static const struct BgTemplate sFieldRegionMapBgTemplates[] = {
{
Expand All @@ -66,7 +76,7 @@ static const struct BgTemplate sFieldRegionMapBgTemplates[] = {
}
};

static const struct WindowTemplate sFieldRegionMapWindowTemplates[] =
const struct WindowTemplate sFieldRegionMapWindowTemplates[] =
{
[WIN_MAPSEC_NAME] = {
.bg = 0,
Expand Down Expand Up @@ -139,7 +149,8 @@ static void MCB2_FieldUpdateRegionMap(void)

static void FieldUpdateRegionMap(void)
{
u8 offset;
hoennOffset = GetStringCenterAlignXOffset(FONT_NORMAL, gText_Hoenn, 0x38);
flyOffset = GetStringCenterAlignXOffset(FONT_NORMAL, FlyPromptText, 0x38);

switch (sFieldRegionMapHandler->state)
{
Expand All @@ -151,8 +162,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 +187,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 &&
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 +234,20 @@ static void PrintRegionMapSecName(void)
CopyWindowToVram(WIN_MAPSEC_NAME, COPYWIN_FULL);
}
}

static void PrintTitleWindowText(void)
{
FillWindowPixelBuffer(WIN_TITLE, PIXEL_FILL(1));

if (sFieldRegionMapHandler->regionMap.mapSecType == MAPSECTYPE_CITY_CANFLY &&
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);
}
}
khbsd marked this conversation as resolved.
Show resolved Hide resolved
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 && 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 && 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