diff options
author | PikalaxALT <PikalaxALT@gmail.com> | 2020-03-26 21:30:58 -0400 |
---|---|---|
committer | PikalaxALT <PikalaxALT@gmail.com> | 2020-03-26 21:30:58 -0400 |
commit | 71c003dcdbe5253ca79881adea3d0ce3c3597541 (patch) | |
tree | 1d18ec6a076277ce0a8c7b01c8d8472cbb023df9 /src | |
parent | 012f8ed12f2425a13602ec2cb3cb379d756b8bbd (diff) |
through LoadSaveblockMapHeader
Diffstat (limited to 'src')
-rw-r--r-- | src/field_fadetransition.c | 4 | ||||
-rw-r--r-- | src/field_specials.c | 2 | ||||
-rw-r--r-- | src/fieldmap.c | 4 | ||||
-rw-r--r-- | src/itemfinder.c | 6 | ||||
-rw-r--r-- | src/load_save.c | 2 | ||||
-rw-r--r-- | src/overworld.c | 175 | ||||
-rw-r--r-- | src/scrcmd.c | 2 | ||||
-rw-r--r-- | src/script.c | 4 |
8 files changed, 181 insertions, 18 deletions
diff --git a/src/field_fadetransition.c b/src/field_fadetransition.c index 03190c095..7ebf9cc30 100644 --- a/src/field_fadetransition.c +++ b/src/field_fadetransition.c @@ -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); diff --git a/src/field_specials.c b/src/field_specials.c index 59c026b78..4cc78e81a 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -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) diff --git a/src/fieldmap.c b/src/fieldmap.c index 53a97629f..2b014d4b8 100644 --- a/src/fieldmap.c +++ b/src/fieldmap.c @@ -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; diff --git a/src/itemfinder.c b/src/itemfinder.c index 5d6950acc..51a670b0f 100644 --- a/src/itemfinder.c +++ b/src/itemfinder.c @@ -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; diff --git a/src/load_save.c b/src/load_save.c index 7ab28ffc3..5cf817dc6 100644 --- a/src/load_save.c +++ b/src/load_save.c @@ -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); diff --git a/src/overworld.c b/src/overworld.c index ec843dd4a..cfb1533f3 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -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(); +} diff --git a/src/scrcmd.c b/src/scrcmd.c index af977fbc7..bec0f4942 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -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; } diff --git a/src/script.c b/src/script.c index ff74b40bc..5d691247f 100644 --- a/src/script.c +++ b/src/script.c @@ -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; } |