summaryrefslogtreecommitdiff
path: root/src/overworld.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/overworld.c')
-rw-r--r--src/overworld.c126
1 files changed, 65 insertions, 61 deletions
diff --git a/src/overworld.c b/src/overworld.c
index 94c3f8328..3193ec0d3 100644
--- a/src/overworld.c
+++ b/src/overworld.c
@@ -1,5 +1,6 @@
#include "global.h"
#include "overworld.h"
+#include "battle_pyramid.h"
#include "battle_setup.h"
#include "berry.h"
#include "bg.h"
@@ -52,6 +53,7 @@
#include "tv.h"
#include "scanline_effect.h"
#include "wild_encounter.h"
+#include "frontier_util.h"
#include "constants/abilities.h"
#include "constants/map_types.h"
#include "constants/maps.h"
@@ -86,12 +88,6 @@ extern const struct MapHeader *const *const gMapGroups[];
extern const s32 gMaxFlashLevel;
extern const u16 gUnknown_82EC7C4[];
-u16 gUnknown_03005DA8;
-MainCallback gFieldCallback;
-bool8 (*gFieldCallback2)(void);
-u8 gUnknown_03005DB4;
-u8 gFieldLinkPlayerCount;
-
// functions
extern void HealPlayerParty(void);
extern void move_tilemap_camera_to_upper_left_corner(void);
@@ -112,7 +108,6 @@ extern void ShowMapNamePopup(void);
extern bool32 InTrainerHill(void);
extern bool32 sub_808651C(void);
extern bool8 sub_80AF6A4(void);
-extern bool8 sub_81A9E6C(void);
extern bool8 sub_80E909C(void);
extern void sub_81AA1D8(void);
extern void c2_change_map(void);
@@ -136,7 +131,6 @@ extern void sub_8087D74(void);
extern void battle_pyramid_map_load_related(u8);
extern void sub_80B00E8(u8);
extern void sub_80E9238(u8);
-extern void sub_81A3908(void);
extern void sub_81AA2F8(void);
extern void sub_8195E10(void);
extern void sub_80EDB44(void);
@@ -166,8 +160,8 @@ extern u32 sub_800B4DC(void);
extern bool32 sub_80B39D4(u8);
extern const u8* GetInteractedLinkPlayerScript(struct MapPosition *a1, u8, u8);
extern u8 *GetCoordEventScriptAtMapPosition(void*);
-extern u8 sub_808BD6C(u8);
-extern u8 sub_808BD7C(u8);
+extern u8 GetFRLGAvatarGraphicsIdByGender(u8);
+extern u8 GetRSAvatarGraphicsIdByGender(u8);
extern void UpdateEventObjectSpriteVisibility(struct Sprite*, u8);
// this file's functions
@@ -256,6 +250,16 @@ IWRAM_DATA static u8 sUnknown_03000E18;
IWRAM_DATA static u8 sUnknown_03000E19;
IWRAM_DATA static u32 sUnusedVar;
+// IWRAM common
+u16 *gBGTilemapBuffers1;
+u16 *gBGTilemapBuffers2;
+u16 *gBGTilemapBuffers3;
+u16 gUnknown_03005DA8;
+void (*gFieldCallback)(void);
+bool8 (*gFieldCallback2)(void);
+u8 gUnknown_03005DB4;
+u8 gFieldLinkPlayerCount;
+
// EWRAM vars
EWRAM_DATA static u8 sUnknown_020322D8 = 0;
EWRAM_DATA struct WarpData gLastUsedWarp = {0};
@@ -517,7 +521,7 @@ void LoadSaveblockEventObjScripts(void)
struct EventObjectTemplate *savObjTemplates = gSaveBlock1Ptr->eventObjectTemplates;
s32 i;
- for (i = 0; i < 64; i++)
+ for (i = 0; i < EVENT_OBJECT_TEMPLATES_COUNT; i++)
savObjTemplates[i].script = mapHeaderObjTemplates[i].script;
}
@@ -526,7 +530,7 @@ void Overworld_SetEventObjTemplateCoords(u8 localId, s16 x, s16 y)
s32 i;
struct EventObjectTemplate *savObjTemplates = gSaveBlock1Ptr->eventObjectTemplates;
- for (i = 0; i < 64; i++)
+ for (i = 0; i < EVENT_OBJECT_TEMPLATES_COUNT; i++)
{
struct EventObjectTemplate *eventObjectTemplate = &savObjTemplates[i];
if (eventObjectTemplate->localId == localId)
@@ -543,7 +547,7 @@ void Overworld_SetEventObjTemplateMovementType(u8 localId, u8 movementType)
s32 i;
struct EventObjectTemplate *savObjTemplates = gSaveBlock1Ptr->eventObjectTemplates;
- for (i = 0; i < 64; i++)
+ for (i = 0; i < EVENT_OBJECT_TEMPLATES_COUNT; i++)
{
struct EventObjectTemplate *eventObjectTemplate = &savObjTemplates[i];
if (eventObjectTemplate->localId == localId)
@@ -585,7 +589,7 @@ void set_warp2_warp3_to_neg_1(void)
gFixedHoleWarp = sDummyWarpData;
}
-void SetWarpData(struct WarpData *warp, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
+static void SetWarpData(struct WarpData *warp, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
{
warp->mapGroup = mapGroup;
warp->mapNum = mapNum;
@@ -594,7 +598,7 @@ void SetWarpData(struct WarpData *warp, s8 mapGroup, s8 mapNum, s8 warpId, s8 x,
warp->y = y;
}
-bool32 IsDummyWarp(struct WarpData *warp)
+static bool32 IsDummyWarp(struct WarpData *warp)
{
if (warp->mapGroup != -1)
return FALSE;
@@ -620,7 +624,7 @@ struct MapHeader const *const GetDestinationWarpMapHeader(void)
return Overworld_GetMapHeaderByGroupAndId(sWarpDestination.mapGroup, sWarpDestination.mapNum);
}
-void LoadCurrentMapData(void)
+static void LoadCurrentMapData(void)
{
sLastMapSectionId = gMapHeader.regionMapSectionId;
gMapHeader = *Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum);
@@ -628,13 +632,13 @@ void LoadCurrentMapData(void)
gMapHeader.mapLayout = GetMapLayout();
}
-void LoadSaveblockMapHeader(void)
+static void LoadSaveblockMapHeader(void)
{
gMapHeader = *Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum);
gMapHeader.mapLayout = GetMapLayout();
}
-void SetPlayerCoordsFromWarp(void)
+static void SetPlayerCoordsFromWarp(void)
{
if (gSaveBlock1Ptr->location.warpId >= 0 && gSaveBlock1Ptr->location.warpId < gMapHeader.events->warpCount)
{
@@ -729,7 +733,7 @@ void SetFixedDiveWarp(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
SetWarpData(&gFixedDiveWarp, mapGroup, mapNum, warpId, x, y);
}
-void SetFixedDiveWarpAsDestination(void)
+static void SetFixedDiveWarpAsDestination(void)
{
sWarpDestination = gFixedDiveWarp;
}
@@ -764,7 +768,7 @@ void sub_8084F6C(u8 a1)
SetWarpData(&gSaveBlock1Ptr->warp1, warp->group, warp->map, -1, warp->x, warp->y);
}
-void sub_8084FAC(void)
+void sub_8084FAC(int unused)
{
gSaveBlock1Ptr->warp1 = gSaveBlock1Ptr->warp2;
}
@@ -785,7 +789,7 @@ const struct MapConnection *GetMapConnection(u8 dir)
return NULL;
}
-bool8 SetDiveWarp(u8 dir, u16 x, u16 y)
+static bool8 SetDiveWarp(u8 dir, u16 x, u16 y)
{
const struct MapConnection *connection = GetMapConnection(dir);
@@ -905,8 +909,8 @@ static void mli0_load_map(u32 a1)
void ResetInitialPlayerAvatarState(void)
{
- gInitialPlayerAvatarState.direction = 1;
- gInitialPlayerAvatarState.transitionFlags = 1;
+ gInitialPlayerAvatarState.direction = DIR_SOUTH;
+ gInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_ON_FOOT;
}
void StoreInitialPlayerAvatarState(void)
@@ -914,15 +918,15 @@ void StoreInitialPlayerAvatarState(void)
gInitialPlayerAvatarState.direction = GetPlayerFacingDirection();
if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE))
- gInitialPlayerAvatarState.transitionFlags = 2;
+ gInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_MACH_BIKE;
else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_ACRO_BIKE))
- gInitialPlayerAvatarState.transitionFlags = 4;
+ gInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_ACRO_BIKE;
else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING))
- gInitialPlayerAvatarState.transitionFlags = 8;
- else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_4))
- gInitialPlayerAvatarState.transitionFlags = 16;
+ gInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_SURFING;
+ else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_UNDERWATER))
+ gInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_UNDERWATER;
else
- gInitialPlayerAvatarState.transitionFlags = 1;
+ gInitialPlayerAvatarState.transitionFlags = PLAYER_AVATAR_FLAG_ON_FOOT;
}
static struct InitialPlayerAvatarState *GetInitialPlayerAvatarState(void)
@@ -940,44 +944,44 @@ static struct InitialPlayerAvatarState *GetInitialPlayerAvatarState(void)
static u8 GetAdjustedInitialTransitionFlags(struct InitialPlayerAvatarState *playerStruct, u16 metatileBehavior, u8 mapType)
{
if (mapType != MAP_TYPE_INDOOR && FlagGet(FLAG_SYS_CRUISE_MODE))
- return 1;
+ return PLAYER_AVATAR_FLAG_ON_FOOT;
else if (mapType == MAP_TYPE_UNDERWATER)
- return 16;
+ return PLAYER_AVATAR_FLAG_UNDERWATER;
else if (MetatileBehavior_IsSurfableWaterOrUnderwater(metatileBehavior) == TRUE)
- return 8;
+ return PLAYER_AVATAR_FLAG_SURFING;
else if (Overworld_IsBikingAllowed() != TRUE)
- return 1;
- else if (playerStruct->transitionFlags == 2)
- return 2;
- else if (playerStruct->transitionFlags != 4)
- return 1;
+ return PLAYER_AVATAR_FLAG_ON_FOOT;
+ else if (playerStruct->transitionFlags == PLAYER_AVATAR_FLAG_MACH_BIKE)
+ return PLAYER_AVATAR_FLAG_MACH_BIKE;
+ else if (playerStruct->transitionFlags != PLAYER_AVATAR_FLAG_ACRO_BIKE)
+ return PLAYER_AVATAR_FLAG_ON_FOOT;
else
- return 4;
+ return PLAYER_AVATAR_FLAG_ACRO_BIKE;
}
static u8 GetAdjustedInitialDirection(struct InitialPlayerAvatarState *playerStruct, u8 transitionFlags, u16 metatileBehavior, u8 mapType)
{
if (FlagGet(FLAG_SYS_CRUISE_MODE) && mapType == MAP_TYPE_6)
- return 4;
+ return DIR_EAST;
else if (MetatileBehavior_IsDeepSouthWarp(metatileBehavior) == TRUE)
- return 2;
+ return DIR_NORTH;
else if (MetatileBehavior_IsNonAnimDoor(metatileBehavior) == TRUE || MetatileBehavior_IsDoor(metatileBehavior) == TRUE)
- return 1;
+ return DIR_SOUTH;
else if (MetatileBehavior_IsSouthArrowWarp(metatileBehavior) == TRUE)
- return 2;
+ return DIR_NORTH;
else if (MetatileBehavior_IsNorthArrowWarp(metatileBehavior) == TRUE)
- return 1;
+ return DIR_SOUTH;
else if (MetatileBehavior_IsWestArrowWarp(metatileBehavior) == TRUE)
- return 4;
+ return DIR_EAST;
else if (MetatileBehavior_IsEastArrowWarp(metatileBehavior) == TRUE)
- return 3;
- else if ((playerStruct->transitionFlags == 16 && transitionFlags == 8)
- || (playerStruct->transitionFlags == 8 && transitionFlags == 16))
+ return DIR_WEST;
+ else if ((playerStruct->transitionFlags == PLAYER_AVATAR_FLAG_UNDERWATER && transitionFlags == PLAYER_AVATAR_FLAG_SURFING)
+ || (playerStruct->transitionFlags == PLAYER_AVATAR_FLAG_SURFING && transitionFlags == PLAYER_AVATAR_FLAG_UNDERWATER ))
return playerStruct->direction;
else if (MetatileBehavior_IsLadder(metatileBehavior) == TRUE)
return playerStruct->direction;
else
- return 1;
+ return DIR_SOUTH;
}
static u16 GetCenterScreenMetatileBehavior(void)
@@ -1357,7 +1361,7 @@ u8 Overworld_GetMapTypeOfSaveblockLocation(void)
return GetMapTypeByWarpData(&gSaveBlock1Ptr->location);
}
-u8 get_map_light_from_warp0(void)
+u8 GetLastUsedWarpMapType(void)
{
return GetMapTypeByWarpData(&gLastUsedWarp);
}
@@ -1458,7 +1462,7 @@ static void DoCB1_Overworld(u16 newKeys, u16 heldKeys)
FieldGetPlayerInput(&inputStruct, newKeys, heldKeys);
if (!ScriptContext2_IsEnabled())
{
- if (sub_809C014(&inputStruct) == 1)
+ if (ProcessPlayerFieldInput(&inputStruct) == 1)
{
ScriptContext2_Enable();
HideMapNamePopUpWindow();
@@ -1808,7 +1812,7 @@ static void InitCurrentFlashLevelScanlineEffect(void)
{
u8 flashLevel;
- if (sub_81A9E6C())
+ if (InBattlePyramid_())
{
door_upload_tiles();
ScanlineEffect_SetParams(sFlashEffectParams);
@@ -2166,9 +2170,9 @@ static void sub_8086988(u32 a1)
static void sub_80869DC(void)
{
- gUnknown_03005DEC = 0;
- gUnknown_03005DE8 = 0;
- sub_808D438();
+ gTotalCameraPixelOffsetX = 0;
+ gTotalCameraPixelOffsetY = 0;
+ ResetEventObjects();
TrySpawnEventObjects(0, 0);
mapheader_run_first_tag4_script_list_match();
}
@@ -2178,9 +2182,9 @@ static void mli4_mapscripts_and_other(void)
s16 x, y;
struct InitialPlayerAvatarState *player;
- gUnknown_03005DEC = 0;
- gUnknown_03005DE8 = 0;
- sub_808D438();
+ gTotalCameraPixelOffsetX = 0;
+ gTotalCameraPixelOffsetY = 0;
+ ResetEventObjects();
sav1_camera_get_focus_coords(&x, &y);
player = GetInitialPlayerAvatarState();
InitPlayerAvatar(x, y, player->direction, gSaveBlock2Ptr->playerGender);
@@ -2951,7 +2955,7 @@ static void sub_808780C(u8 linkPlayerId)
struct LinkPlayerEventObject *linkPlayerEventObj = &gLinkPlayerEventObjects[linkPlayerId];
u8 eventObjId = linkPlayerEventObj->eventObjId;
struct EventObject *eventObj = &gEventObjects[eventObjId];
- if (eventObj->spriteId != 64 )
+ if (eventObj->spriteId != MAX_SPRITES)
DestroySprite(&gSprites[eventObj->spriteId]);
linkPlayerEventObj->active = 0;
eventObj->active = 0;
@@ -3137,14 +3141,14 @@ static void CreateLinkPlayerSprite(u8 linkPlayerId, u8 gameVersion)
{
case VERSION_FIRE_RED:
case VERSION_LEAF_GREEN:
- eventObj->spriteId = AddPseudoEventObject(sub_808BD6C(eventObj->singleMovementActive), SpriteCB_LinkPlayer, 0, 0, 0);
+ eventObj->spriteId = AddPseudoEventObject(GetFRLGAvatarGraphicsIdByGender(eventObj->singleMovementActive), SpriteCB_LinkPlayer, 0, 0, 0);
break;
case VERSION_RUBY:
case VERSION_SAPPHIRE:
- eventObj->spriteId = AddPseudoEventObject(sub_808BD7C(eventObj->singleMovementActive), SpriteCB_LinkPlayer, 0, 0, 0);
+ eventObj->spriteId = AddPseudoEventObject(GetRSAvatarGraphicsIdByGender(eventObj->singleMovementActive), SpriteCB_LinkPlayer, 0, 0, 0);
break;
case VERSION_EMERALD:
- eventObj->spriteId = AddPseudoEventObject(GetRivalAvatarGraphicsIdByStateIdAndGender(0, eventObj->singleMovementActive), SpriteCB_LinkPlayer, 0, 0, 0);
+ eventObj->spriteId = AddPseudoEventObject(GetRivalAvatarGraphicsIdByStateIdAndGender(PLAYER_AVATAR_STATE_NORMAL, eventObj->singleMovementActive), SpriteCB_LinkPlayer, 0, 0, 0);
break;
}