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

Merged
merged 19 commits into from
Jan 4, 2025
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
0f71be0
clean copy from fly-from-pokenav
khbsd Nov 18, 2024
2616150
code comment edited to describe function better
khbsd Nov 18, 2024
c1c6904
Merge branch 'upcoming' of https://github.com/rh-hideout/pokeemerald-…
khbsd Nov 25, 2024
f9f99ba
Merge branch 'upcoming' of https://github.com/rh-hideout/pokeemerald-…
khbsd Nov 29, 2024
558b07a
Merge branch 'upcoming' of https://github.com/rh-hideout/pokeemerald-…
khbsd Dec 2, 2024
6ccc803
Merge branch 'upcoming' of https://github.com/rh-hideout/pokeemerald-…
khbsd Dec 7, 2024
eac320f
Merge branch 'upcoming' of https://github.com/rh-hideout/pokeemerald-…
khbsd Dec 9, 2024
1556540
Merge branch 'upcoming' of https://github.com/rh-hideout/pokeemerald-…
khbsd Dec 14, 2024
e0ba3a3
Merge branch 'upcoming' of https://github.com/rh-hideout/pokeemerald-…
khbsd Dec 19, 2024
991aeff
addressed hedara's comments
khbsd Dec 19, 2024
9c1eed3
added fly prompt in the town map and cleaned up some formatting in po…
khbsd Dec 20, 2024
d34544a
Merge branch 'upcoming' of https://github.com/rh-hideout/pokeemerald-…
khbsd Dec 24, 2024
642849d
let OW_FLAG_POKE_RIDER be used as a flag as well as a global toggle (…
khbsd Dec 25, 2024
6bef85d
addressed alex's comments, ty!
khbsd Dec 25, 2024
a82e70c
addresses alex's comments
khbsd Dec 25, 2024
da6fddb
Merge branch 'upcoming' of https://github.com/rh-hideout/pokeemerald-…
khbsd Dec 29, 2024
a3dcc11
Merge branch 'upcoming' of https://github.com/rh-hideout/pokeemerald-…
khbsd Jan 4, 2025
86fed5e
fix syntax and add variable to its correct place
khbsd Jan 4, 2025
c83e11b
clarified explanatory comment in overworld.h
khbsd Jan 4, 2025
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
9 changes: 5 additions & 4 deletions include/config/overworld.h
Original file line number Diff line number Diff line change
Expand Up @@ -81,10 +81,11 @@
// Overworld flags
// To use the following features in scripting, replace the 0s with the flag ID you're assigning it to.
// Eg: Replace with FLAG_UNUSED_0x264 so you can use that flag to toggle the feature.
#define OW_FLAG_PAUSE_TIME 0 // If this flag is set and OW_USE_FAKE_RTC is enabled, seconds on the in-game clock will not advance.
#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_PAUSE_TIME 0 // If this flag is set and OW_USE_FAKE_RTC is enabled, seconds on the in-game clock will not advance.
#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.
hedara90 marked this conversation as resolved.
Show resolved Hide resolved

#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
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
55 changes: 52 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,9 @@ 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)
hedara90 marked this conversation as resolved.
Show resolved Hide resolved
return POKENAV_MAP_FUNC_FLY;
}

return POKENAV_MAP_FUNC_NONE;
Expand Down Expand Up @@ -365,6 +375,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 +396,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 +420,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 +453,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 +494,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 +769,23 @@ 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)
hedara90 marked this conversation as resolved.
Show resolved Hide resolved
{
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);
}
}
61 changes: 40 additions & 21 deletions src/region_map.c
Original file line number Diff line number Diff line change
Expand Up @@ -680,6 +680,10 @@ static u8 ProcessRegionMapInput_Full(void)
{
input = MAP_INPUT_B_BUTTON;
}
else if (JOY_NEW(R_BUTTON))
{
input = MAP_INPUT_R_BUTTON;
}
if (input == MAP_INPUT_MOVE_START)
{
sRegionMap->cursorMovementFrameCounter = 4;
Expand Down Expand Up @@ -759,6 +763,10 @@ static u8 ProcessRegionMapInput_Zoomed(void)
{
input = MAP_INPUT_B_BUTTON;
}
else if (JOY_NEW(R_BUTTON))
{
input = MAP_INPUT_R_BUTTON;
}
if (input == MAP_INPUT_MOVE_START)
{
sRegionMap->inputCallback = MoveRegionMapCursor_Zoomed;
Expand Down Expand Up @@ -1992,27 +2000,9 @@ static void CB_ExitFlyMap(void)
FreeRegionMapIconResources();
if (sFlyMap->choseFlyLocation)
{
switch (sFlyMap->regionMap.mapSecId)
{
case MAPSEC_SOUTHERN_ISLAND:
SetWarpDestinationToHealLocation(HEAL_LOCATION_SOUTHERN_ISLAND_EXTERIOR);
break;
case MAPSEC_BATTLE_FRONTIER:
SetWarpDestinationToHealLocation(HEAL_LOCATION_BATTLE_FRONTIER_OUTSIDE_EAST);
break;
case MAPSEC_LITTLEROOT_TOWN:
SetWarpDestinationToHealLocation(gSaveBlock2Ptr->playerGender == MALE ? HEAL_LOCATION_LITTLEROOT_TOWN_BRENDANS_HOUSE : HEAL_LOCATION_LITTLEROOT_TOWN_MAYS_HOUSE);
break;
case MAPSEC_EVER_GRANDE_CITY:
SetWarpDestinationToHealLocation(FlagGet(FLAG_LANDMARK_POKEMON_LEAGUE) && sFlyMap->regionMap.posWithinMapSec == 0 ? HEAL_LOCATION_EVER_GRANDE_CITY_POKEMON_LEAGUE : HEAL_LOCATION_EVER_GRANDE_CITY);
break;
default:
if (sMapHealLocations[sFlyMap->regionMap.mapSecId][2] != HEAL_LOCATION_NONE)
SetWarpDestinationToHealLocation(sMapHealLocations[sFlyMap->regionMap.mapSecId][2]);
else
SetWarpDestinationToMapWarp(sMapHealLocations[sFlyMap->regionMap.mapSecId][0], sMapHealLocations[sFlyMap->regionMap.mapSecId][1], WARP_ID_NONE);
break;
}
struct RegionMap* tempRegionMap = &sFlyMap->regionMap;

SetFlyDestination(tempRegionMap);
ReturnToFieldFromFlyMapSelect();
}
else
Expand All @@ -2025,3 +2015,32 @@ static void CB_ExitFlyMap(void)
break;
}
}

u32 FilterFlyDestination(struct RegionMap* regionMap)
{
switch (regionMap->mapSecId)
{
case MAPSEC_SOUTHERN_ISLAND:
return HEAL_LOCATION_SOUTHERN_ISLAND_EXTERIOR;
case MAPSEC_BATTLE_FRONTIER:
return HEAL_LOCATION_BATTLE_FRONTIER_OUTSIDE_EAST;
case MAPSEC_LITTLEROOT_TOWN:
return (gSaveBlock2Ptr->playerGender == MALE ? HEAL_LOCATION_LITTLEROOT_TOWN_BRENDANS_HOUSE : HEAL_LOCATION_LITTLEROOT_TOWN_MAYS_HOUSE);
case MAPSEC_EVER_GRANDE_CITY:
return (FlagGet(FLAG_LANDMARK_POKEMON_LEAGUE) && regionMap->posWithinMapSec == 0 ? HEAL_LOCATION_EVER_GRANDE_CITY_POKEMON_LEAGUE : HEAL_LOCATION_EVER_GRANDE_CITY);
default:
if (sMapHealLocations[regionMap->mapSecId][2] != HEAL_LOCATION_NONE)
return sMapHealLocations[regionMap->mapSecId][2];
else
return WARP_ID_NONE;
}
}

void SetFlyDestination(struct RegionMap* regionMap)
{
u8 flyDestination = FilterFlyDestination(regionMap);
khbsd marked this conversation as resolved.
Show resolved Hide resolved
if (flyDestination != WARP_ID_NONE)
SetWarpDestinationToHealLocation(flyDestination);
else
SetWarpDestinationToMapWarp(sMapHealLocations[regionMap->mapSecId][0], sMapHealLocations[regionMap->mapSecId][1], WARP_ID_NONE);
}
Loading