through LoadSaveblockMapHeader
This commit is contained in:
@@ -94,7 +94,7 @@ void FadeInFromBlack(void)
|
||||
|
||||
void WarpFadeOutScreen(void)
|
||||
{
|
||||
const struct MapHeader *header = warp1_get_mapheader();
|
||||
const struct MapHeader *header = GetDestinationWarpMapHeader();
|
||||
if (header->regionMapSectionId != gMapHeader.regionMapSectionId && MapHasPreviewScreen(header->regionMapSectionId, MPS_TYPE_CAVE))
|
||||
FadeScreen(FADE_TO_BLACK, 0);
|
||||
else
|
||||
@@ -113,7 +113,7 @@ void WarpFadeOutScreen(void)
|
||||
|
||||
static void sub_807DC70(void)
|
||||
{
|
||||
switch (MapTransitionIsEnter(GetCurrentMapType(), warp1_get_mapheader()->mapType))
|
||||
switch (MapTransitionIsEnter(GetCurrentMapType(), GetDestinationWarpMapHeader()->mapType))
|
||||
{
|
||||
case FALSE:
|
||||
FadeScreen(FADE_TO_BLACK, 3);
|
||||
|
||||
@@ -2040,7 +2040,7 @@ const u16 sPokeCenter1FMaps[] = {
|
||||
bool8 sub_80CC87C(void)
|
||||
{
|
||||
s32 i;
|
||||
u16 mapno = (gUnknown_2031DB4.mapGroup << 8) + gUnknown_2031DB4.mapNum;
|
||||
u16 mapno = (gLastUsedWarp.mapGroup << 8) + gLastUsedWarp.mapNum;
|
||||
for (i = 0; sPokeCenter1FMaps[i] != MAP_UNDEFINED; i++)
|
||||
{
|
||||
if (sPokeCenter1FMaps[i] == mapno)
|
||||
|
||||
+2
-2
@@ -370,7 +370,7 @@ union Block
|
||||
s32 xprime; \
|
||||
s32 yprime; \
|
||||
\
|
||||
struct MapLayout *mapLayout = gMapHeader.mapLayout; \
|
||||
const struct MapLayout *mapLayout = gMapHeader.mapLayout; \
|
||||
\
|
||||
xprime = x - 7; \
|
||||
xprime += 8 * mapLayout->borderWidth; \
|
||||
@@ -485,7 +485,7 @@ void MapGridSetMetatileImpassabilityAt(s32 x, s32 y, bool32 arg2)
|
||||
}
|
||||
}
|
||||
|
||||
u32 GetBehaviorByMetatileIdAndMapLayout(struct MapLayout *mapLayout, u16 metatile, u8 attr)
|
||||
u32 GetBehaviorByMetatileIdAndMapLayout(const struct MapLayout *mapLayout, u16 metatile, u8 attr)
|
||||
{
|
||||
u32 * attributes;
|
||||
|
||||
|
||||
+3
-3
@@ -15,7 +15,7 @@
|
||||
static void Task_NoResponse_CleanUp(u8 taskId);
|
||||
static void Task_ItemfinderResponseSoundsAndAnims(u8 taskId);
|
||||
static void Task_ItemfinderUnderfootSoundsAndAnims(u8 taskId);
|
||||
static bool8 HiddenItemIsWithinRangeOfPlayer(struct MapEvents * events, u8 taskId);
|
||||
static bool8 HiddenItemIsWithinRangeOfPlayer(const struct MapEvents * events, u8 taskId);
|
||||
static void SetUnderfootHiddenItem(u8 taskId, u32 hiddenItem);
|
||||
static void SetNormalHiddenItem(u8 taskId);
|
||||
static void FindHiddenItemsInConnectedMaps(u8 taskId);
|
||||
@@ -199,7 +199,7 @@ static void Task_ItemfinderUnderfootSoundsAndAnims(u8 taskId)
|
||||
tDingTimer++;
|
||||
}
|
||||
|
||||
static bool8 HiddenItemIsWithinRangeOfPlayer(struct MapEvents * events, u8 taskId)
|
||||
static bool8 HiddenItemIsWithinRangeOfPlayer(const struct MapEvents * events, u8 taskId)
|
||||
{
|
||||
s16 x, y, i, dx, dy;
|
||||
PlayerGetDestCoords(&x, &y);
|
||||
@@ -284,7 +284,7 @@ static void SetNormalHiddenItem(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
static bool8 HiddenItemAtPos(struct MapEvents * events, s16 x, s16 y)
|
||||
static bool8 HiddenItemAtPos(const struct MapEvents * events, s16 x, s16 y)
|
||||
{
|
||||
u8 bgEventCount = events->bgEventCount;
|
||||
struct BgEvent * bgEvents = events->bgEvents;
|
||||
|
||||
+1
-1
@@ -286,7 +286,7 @@ void ApplyNewEncryptionKeyToAllEncryptedData(u32 encryptionKey)
|
||||
for(i = 0; i < NUM_TOWER_CHALLENGE_TYPES; i++)
|
||||
ApplyNewEncryptionKeyToWord(&gSaveBlock1Ptr->trainerTower[i].bestTime, encryptionKey);
|
||||
|
||||
sub_8054F38(encryptionKey);
|
||||
ApplyNewEncryptionKeyToGameStats(encryptionKey);
|
||||
ApplyNewEncryptionKeyToBagItems_(encryptionKey);
|
||||
ApplyNewEncryptionKeyToBerryPowder(encryptionKey);
|
||||
ApplyNewEncryptionKeyToWord(&gSaveBlock1Ptr->money, encryptionKey);
|
||||
|
||||
+169
-6
@@ -2,13 +2,16 @@
|
||||
#include "gflib.h"
|
||||
#include "event_data.h"
|
||||
#include "event_scripts.h"
|
||||
#include "field_camera.h"
|
||||
#include "field_specials.h"
|
||||
#include "fieldmap.h"
|
||||
#include "load_save.h"
|
||||
#include "money.h"
|
||||
#include "overworld.h"
|
||||
#include "roamer.h"
|
||||
#include "script.h"
|
||||
#include "script_pokemon_util.h"
|
||||
#include "tileset_anims.h"
|
||||
#include "constants/maps.h"
|
||||
#include "constants/flags.h"
|
||||
|
||||
@@ -19,11 +22,10 @@ struct InitialPlayerAvatarState
|
||||
u8 unk2;
|
||||
};
|
||||
|
||||
|
||||
EWRAM_DATA struct WarpData gUnknown_2031DB4 = {};
|
||||
EWRAM_DATA struct WarpData gUnknown_2031DBC = {};
|
||||
EWRAM_DATA struct WarpData gUnknown_2031DC4 = {};
|
||||
EWRAM_DATA struct WarpData gUnknown_2031DCC = {};
|
||||
EWRAM_DATA struct WarpData gLastUsedWarp = {};
|
||||
EWRAM_DATA struct WarpData sWarpDestination = {};
|
||||
EWRAM_DATA struct WarpData gFixedDiveWarp = {};
|
||||
EWRAM_DATA struct WarpData gFixedHoleWarp = {};
|
||||
EWRAM_DATA struct InitialPlayerAvatarState gUnknown_2031DD4 = {};
|
||||
|
||||
u8 CountBadgesForOverworldWhiteOutLossCalculation(void);
|
||||
@@ -31,6 +33,9 @@ void Overworld_ResetStateAfterWhitingOut(void);
|
||||
void Overworld_SetWhiteoutRespawnPoint(void);
|
||||
void sub_805610C(void);
|
||||
|
||||
extern const struct MapLayout * gMapLayouts[];
|
||||
extern const struct MapHeader *const *gMapGroups[];
|
||||
|
||||
static const u8 sWhiteOutMoneyLossMultipliers[] = {
|
||||
2,
|
||||
4,
|
||||
@@ -196,7 +201,7 @@ void SetGameStat(u8 statId, u32 statVal)
|
||||
gSaveBlock1Ptr->gameStats[statId] = statVal ^ gSaveBlock2Ptr->encryptionKey;
|
||||
}
|
||||
|
||||
void sub_8054F38(u32 newKey)
|
||||
void ApplyNewEncryptionKeyToGameStats(u32 newKey)
|
||||
{
|
||||
u8 i;
|
||||
for (i = 0; i < NUM_GAME_STATS; i++)
|
||||
@@ -204,3 +209,161 @@ void sub_8054F38(u32 newKey)
|
||||
ApplyNewEncryptionKeyToWord(&gSaveBlock1Ptr->gameStats[i], newKey);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8054F68(void)
|
||||
{
|
||||
u8 i, j;
|
||||
u8 mapGroup;
|
||||
u8 mapNum;
|
||||
u8 localId;
|
||||
const struct MapHeader * linkedMap;
|
||||
|
||||
for (i = 0, j = 0; i < gMapHeader.events->objectEventCount; i++)
|
||||
{
|
||||
if (gMapHeader.events->objectEvents[i].unk2 == 0xFF)
|
||||
{
|
||||
localId = gMapHeader.events->objectEvents[i].elevation;
|
||||
mapNum = gMapHeader.events->objectEvents[i].trainerType;
|
||||
mapGroup = gMapHeader.events->objectEvents[i].trainerRange_berryTreeId;
|
||||
linkedMap = Overworld_GetMapHeaderByGroupAndId(mapGroup, mapNum);
|
||||
gSaveBlock1Ptr->objectEventTemplates[j] = linkedMap->events->objectEvents[localId - 1];
|
||||
gSaveBlock1Ptr->objectEventTemplates[j].localId = gMapHeader.events->objectEvents[i].localId;
|
||||
gSaveBlock1Ptr->objectEventTemplates[j].x = gMapHeader.events->objectEvents[i].x;
|
||||
gSaveBlock1Ptr->objectEventTemplates[j].y = gMapHeader.events->objectEvents[i].y;
|
||||
gSaveBlock1Ptr->objectEventTemplates[j].elevation = localId;
|
||||
gSaveBlock1Ptr->objectEventTemplates[j].trainerType = mapNum;
|
||||
gSaveBlock1Ptr->objectEventTemplates[j].trainerRange_berryTreeId = mapGroup;
|
||||
gSaveBlock1Ptr->objectEventTemplates[j].unk2 = 0xFF;
|
||||
j++;
|
||||
}
|
||||
else
|
||||
{
|
||||
gSaveBlock1Ptr->objectEventTemplates[j] = gMapHeader.events->objectEvents[i];
|
||||
j++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80550A8(void)
|
||||
{
|
||||
int i;
|
||||
const struct ObjectEventTemplate * src = gMapHeader.events->objectEvents;
|
||||
struct ObjectEventTemplate * savObjTemplates = gSaveBlock1Ptr->objectEventTemplates;
|
||||
|
||||
for (i = 0; i < OBJECT_EVENT_TEMPLATES_COUNT; i++)
|
||||
{
|
||||
savObjTemplates[i].script = src[i].script;
|
||||
}
|
||||
}
|
||||
|
||||
void Overworld_SetMapObjTemplateCoords(u8 localId, s16 x, s16 y)
|
||||
{
|
||||
int i;
|
||||
struct ObjectEventTemplate * savObjTemplates = gSaveBlock1Ptr->objectEventTemplates;
|
||||
for (i = 0; i < OBJECT_EVENT_TEMPLATES_COUNT; i++)
|
||||
{
|
||||
if (savObjTemplates[i].localId == localId)
|
||||
{
|
||||
savObjTemplates[i].x = x;
|
||||
savObjTemplates[i].y = y;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Overworld_SetObjEventTemplateMovementType(u8 localId, u8 movementType)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
struct ObjectEventTemplate *savObjTemplates = gSaveBlock1Ptr->objectEventTemplates;
|
||||
for (i = 0; i < OBJECT_EVENT_TEMPLATES_COUNT; i++)
|
||||
{
|
||||
struct ObjectEventTemplate *objectEventTemplate = &savObjTemplates[i];
|
||||
if (objectEventTemplate->localId == localId)
|
||||
{
|
||||
objectEventTemplate->movementType = movementType;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void mapdata_load_assets_to_gpu_and_full_redraw(void)
|
||||
{
|
||||
move_tilemap_camera_to_upper_left_corner();
|
||||
copy_map_tileset1_tileset2_to_vram(gMapHeader.mapLayout);
|
||||
apply_map_tileset1_tileset2_palette(gMapHeader.mapLayout);
|
||||
DrawWholeMapView();
|
||||
InitTilesetAnimations();
|
||||
}
|
||||
|
||||
const struct MapLayout *GetMapLayout(void)
|
||||
{
|
||||
u16 mapLayoutId = gSaveBlock1Ptr->mapLayoutId;
|
||||
if (mapLayoutId)
|
||||
return gMapLayouts[mapLayoutId - 1];
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const struct WarpData sDummyWarpData = {
|
||||
.mapGroup = MAP_GROUP(UNDEFINED),
|
||||
.mapNum = MAP_NUM(UNDEFINED),
|
||||
.warpId = 0xFF,
|
||||
.x = -1,
|
||||
.y = -1
|
||||
};
|
||||
|
||||
void ApplyCurrentWarp(void)
|
||||
{
|
||||
gLastUsedWarp = gSaveBlock1Ptr->location;
|
||||
gSaveBlock1Ptr->location = sWarpDestination;
|
||||
gFixedDiveWarp = sDummyWarpData;
|
||||
gFixedHoleWarp = sDummyWarpData;
|
||||
}
|
||||
|
||||
void SetWarpData(struct WarpData *warp, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
|
||||
{
|
||||
warp->mapGroup = mapGroup;
|
||||
warp->mapNum = mapNum;
|
||||
warp->warpId = warpId;
|
||||
warp->x = x;
|
||||
warp->y = y;
|
||||
}
|
||||
|
||||
bool32 IsDummyWarp(struct WarpData *warp)
|
||||
{
|
||||
if (warp->mapGroup != -1)
|
||||
return FALSE;
|
||||
else if (warp->mapNum != -1)
|
||||
return FALSE;
|
||||
else if (warp->warpId != -1)
|
||||
return FALSE;
|
||||
else if (warp->x != -1)
|
||||
return FALSE;
|
||||
else if (warp->y != -1)
|
||||
return FALSE;
|
||||
else
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
struct MapHeader const *const Overworld_GetMapHeaderByGroupAndId(u16 mapGroup, u16 mapNum)
|
||||
{
|
||||
return gMapGroups[mapGroup][mapNum];
|
||||
}
|
||||
|
||||
struct MapHeader const *const GetDestinationWarpMapHeader(void)
|
||||
{
|
||||
return Overworld_GetMapHeaderByGroupAndId(sWarpDestination.mapGroup, sWarpDestination.mapNum);
|
||||
}
|
||||
|
||||
void LoadCurrentMapData(void)
|
||||
{
|
||||
gMapHeader = *Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum);
|
||||
gSaveBlock1Ptr->mapLayoutId = gMapHeader.mapLayoutId;
|
||||
gMapHeader.mapLayout = GetMapLayout();
|
||||
}
|
||||
|
||||
void LoadSaveblockMapHeader(void)
|
||||
{
|
||||
gMapHeader = *Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum);
|
||||
gMapHeader.mapLayout = GetMapLayout();
|
||||
}
|
||||
|
||||
+1
-1
@@ -1168,7 +1168,7 @@ bool8 ScrCmd_setobjectmovementtype(struct ScriptContext * ctx)
|
||||
u16 localId = VarGet(ScriptReadHalfword(ctx));
|
||||
u8 movementType = ScriptReadByte(ctx);
|
||||
|
||||
Overworld_SetMapObjTemplateMovementType(localId, movementType);
|
||||
Overworld_SetObjEventTemplateMovementType(localId, movementType);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -358,7 +358,7 @@ void ScriptContext2_RunNewScript(const u8 *ptr)
|
||||
|
||||
u8 *mapheader_get_tagged_pointer(u8 tag)
|
||||
{
|
||||
u8 *mapScripts = gMapHeader.mapScripts;
|
||||
const u8 *mapScripts = gMapHeader.mapScripts;
|
||||
|
||||
if (mapScripts == NULL)
|
||||
return NULL;
|
||||
@@ -370,7 +370,7 @@ u8 *mapheader_get_tagged_pointer(u8 tag)
|
||||
if (*mapScripts == tag)
|
||||
{
|
||||
mapScripts++;
|
||||
return (u8 *)(mapScripts[0] + (mapScripts[1] << 8) + (mapScripts[2] << 16) + (mapScripts[3] << 24));
|
||||
return T2_READ_PTR(mapScripts);
|
||||
}
|
||||
mapScripts += 5;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user