summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2021-06-28 09:35:24 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2021-06-28 09:35:24 -0400
commit921a99ec5bc3a310d896a6a148294c04612ed354 (patch)
tree4d4407de4a9d44c6f3204023ae3d208886c5c8d9
parentf90a42fa5248c61fef9bf1c485f479314da176cd (diff)
Merge region map state structs
-rw-r--r--include/ewram.h2
-rw-r--r--include/region_map.h13
-rw-r--r--src/field_region_map.c39
-rw-r--r--src/region_map.c90
4 files changed, 66 insertions, 78 deletions
diff --git a/include/ewram.h b/include/ewram.h
index 5a1f4e13b..55edf1b05 100644
--- a/include/ewram.h
+++ b/include/ewram.h
@@ -10,11 +10,11 @@ extern u8 gSharedMem[];
// seperated.
#define gDecompressionBuffer (gSharedMem + 0x1E000)
+#define eRegionMapState (*(struct RegionMapState *)gSharedMem)
#define eDroughtPaletteData (*(struct WeatherPaletteData *)gSharedMem)
#define gBattleStruct ((struct BattleStruct *) (gSharedMem + 0x0))
#define namingScreenData (*(struct NamingScreenData *)(gSharedMem + 0x0))
#define ewramBerryPic (gSharedMem + 0x0)
-#define ewram0_5 (*(struct UnkStruct *)(gSharedMem + 0x0))
#define eMatsudaDebugVar (gSharedMem[0x0])
#define eBrendanSprite (gSharedMem + 0x0)
#define ewram0_7 (&gSharedMem[0])
diff --git a/include/region_map.h b/include/region_map.h
index 24c768ea5..474e1ebda 100644
--- a/include/region_map.h
+++ b/include/region_map.h
@@ -60,6 +60,19 @@ struct RegionMap
/*0x280*/ u8 cursorLargeImage[0x600];
}; // size: 0x880
+// Replaces field_region_map.c:UnkStruct, region_map.c:UnknownStruct3
+struct RegionMapState
+{
+ void (*callback)(void);
+ u16 state;
+ u16 mapSectionId;
+ struct RegionMap regionMap;
+ u16 unk_888[0xE0];
+ u8 blankMapName[12];
+};
+
+extern struct RegionMapState *const gRegionMapState;
+
void InitRegionMap(struct RegionMap *regionMap, bool8 zoomed);
void sub_80FA904(struct RegionMap *regionMap, bool8 zoomed);
bool8 sub_80FA940(void);
diff --git a/src/field_region_map.c b/src/field_region_map.c
index 10d5a4a5e..319235754 100644
--- a/src/field_region_map.c
+++ b/src/field_region_map.c
@@ -9,27 +9,11 @@
#include "text.h"
#include "ewram.h"
-struct RegionMapStruct
-{
- u8 str[0x16];
- u8 unk16;
- u8 filler[0x869];
-};
-
-struct UnkStruct
-{
- MainCallback callback;
- u8 filler[4];
- // This should be RegionMap, but I can't do that because it overlaps unk888.
- struct RegionMapStruct unk8;
- u16 unk888;
-};
-
void FieldInitRegionMap(MainCallback callback)
{
SetVBlankCallback(NULL);
- ewram0_5.unk888 = 0;
- ewram0_5.callback = callback;
+ eRegionMapState.unk_888[0] = 0;
+ eRegionMapState.callback = callback;
SetMainCallback2(CB2_FieldInitRegionMap);
}
@@ -46,8 +30,7 @@ void CB2_FieldInitRegionMap(void)
REG_BG3VOFS = 0;
ResetSpriteData();
FreeAllSpritePalettes();
- // TODO: remove this cast
- InitRegionMap((void *)&ewram0_5.unk8, 0);
+ InitRegionMap(&eRegionMapState.regionMap, 0);
CreateRegionMapPlayerIcon(0, 0);
CreateRegionMapCursor(1, 1);
Text_LoadWindowTemplate(&gWindowTemplate_81E709C);
@@ -80,15 +63,15 @@ void CB2_FieldRegionMap(void)
void sub_813EFDC(void)
{
- switch (ewram0_5.unk888)
+ switch (eRegionMapState.unk_888[0])
{
case 0:
REG_DISPCNT = DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON;
- ewram0_5.unk888++;
+ eRegionMapState.unk_888[0]++;
break;
case 1:
if (!gPaletteFade.active)
- ewram0_5.unk888++;
+ eRegionMapState.unk_888[0]++;
break;
case 2:
switch (sub_80FAB60())
@@ -98,18 +81,18 @@ void sub_813EFDC(void)
break;
case 4:
case 5:
- ewram0_5.unk888++;
+ eRegionMapState.unk_888[0]++;
}
break;
case 3:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0));
- ewram0_5.unk888++;
+ eRegionMapState.unk_888[0]++;
break;
case 4:
if (!gPaletteFade.active)
{
FreeRegionMapIconResources();
- SetMainCallback2(ewram0_5.callback);
+ SetMainCallback2(eRegionMapState.callback);
}
break;
}
@@ -118,6 +101,6 @@ void sub_813EFDC(void)
void sub_813F0C8(void)
{
Menu_BlankWindowRect(17, 17, 28, 18);
- if (ewram0_5.unk8.unk16)
- Menu_PrintText(ewram0_5.unk8.str, 17, 17);
+ if (eRegionMapState.regionMap.unk16)
+ Menu_PrintText(eRegionMapState.regionMap.mapSectionName, 17, 17);
}
diff --git a/src/region_map.c b/src/region_map.c
index 8c4e694bc..0362fe0b4 100644
--- a/src/region_map.c
+++ b/src/region_map.c
@@ -1156,14 +1156,6 @@ static void GetRegionMapLocationPosition(u16 mapSectionId, u16 *x, u16 *y, u16 *
*height = gRegionMapEntries[mapSectionId].height;
}
-struct UnknownStruct3
-{
- void (*unk0)(void);
- u16 unk4;
- u16 unk6;
- struct RegionMap regionMap;
-};
-
static const u16 sFlyRegionMapFrame_Pal[] = INCBIN_U16("graphics/pokenav/map_frame.gbapal");
static const u8 sFlyRegionMapFrame_ImageLZ[] = INCBIN_U8("graphics/pokenav/map_frame.4bpp.lz");
static const u8 sFlyRegionMapFrame_TilemapLZ[] = INCBIN_U8("graphics/pokenav/map_frame.bin.lz");
@@ -1243,7 +1235,7 @@ static const struct MultiPartMapSection sMultiPartMapSections[1] =
{sEverGrandeCityAreaNames, MAPSEC_EVER_GRANDE_CITY, FLAG_SYS_POKEMON_LEAGUE_FLY},
};
-static struct UnknownStruct3 *const sFlyDataPtr = (struct UnknownStruct3 *)gSharedMem;
+struct RegionMapState *const gRegionMapState = &eRegionMapState;
static const struct SpritePalette sFlyTargetIconSpritePalette = {sFlyTargetIcons_Pal, 2};
@@ -1364,11 +1356,11 @@ void CB2_InitFlyRegionMap(void)
Menu_EraseScreen();
break;
case 3:
- InitRegionMap(&sFlyDataPtr->regionMap, 0);
+ InitRegionMap(&gRegionMapState->regionMap, 0);
CreateRegionMapCursor(0, 0);
CreateRegionMapPlayerIcon(1, 1);
- sFlyDataPtr->unk6 = sFlyDataPtr->regionMap.mapSectionId;
- StringFill(ewramBlankMapName, CHAR_SPACE, 12);
+ gRegionMapState->mapSectionId = gRegionMapState->regionMap.mapSectionId;
+ StringFill(gRegionMapState->blankMapName, CHAR_SPACE, 12);
PrintFlyTargetName();
break;
case 4:
@@ -1410,33 +1402,33 @@ static void VBlankCB_FlyRegionMap(void)
void CB2_FlyRegionMap(void)
{
- sFlyDataPtr->unk0();
+ gRegionMapState->callback();
AnimateSprites();
BuildOamBuffer();
}
void sub_80FC244(void (*func)(void))
{
- sFlyDataPtr->unk0 = func;
- sFlyDataPtr->unk4 = 0;
+ gRegionMapState->callback = func;
+ gRegionMapState->state = 0;
}
static void PrintFlyTargetName(void)
{
- if (sFlyDataPtr->regionMap.unk16 == 2 || sFlyDataPtr->regionMap.unk16 == 4)
+ if (gRegionMapState->regionMap.unk16 == 2 || gRegionMapState->regionMap.unk16 == 4)
{
bool8 drawFrameDisabled = FALSE;
u16 i;
for (i = 0; i < ARRAY_COUNT(sMultiPartMapSections); i++)
{
- if (sFlyDataPtr->regionMap.mapSectionId == sMultiPartMapSections[i].mapSectionId)
+ if (gRegionMapState->regionMap.mapSectionId == sMultiPartMapSections[i].mapSectionId)
{
if (FlagGet(sMultiPartMapSections[i].requiredFlag))
{
Menu_DrawStdWindowFrame(16, 14, 29, 19);
- Menu_PrintText(sFlyDataPtr->regionMap.mapSectionName, 17, 15);
- MenuPrint_RightAligned(sMultiPartMapSections[i].partNames[sFlyDataPtr->regionMap.everGrandeCityArea], 29, 17);
+ Menu_PrintText(gRegionMapState->regionMap.mapSectionName, 17, 15);
+ MenuPrint_RightAligned(sMultiPartMapSections[i].partNames[gRegionMapState->regionMap.everGrandeCityArea], 29, 17);
drawFrameDisabled = TRUE;
}
break;
@@ -1446,14 +1438,14 @@ static void PrintFlyTargetName(void)
if (!drawFrameDisabled)
{
Menu_DrawStdWindowFrame(16, 16, 29, 19);
- Menu_PrintText(sFlyDataPtr->regionMap.mapSectionName, 17, 17);
+ Menu_PrintText(gRegionMapState->regionMap.mapSectionName, 17, 17);
Menu_EraseWindowRect(16, 14, 29, 15);
}
}
else
{
Menu_DrawStdWindowFrame(16, 16, 29, 19);
- Menu_PrintText(ewramBlankMapName, 17, 17);
+ Menu_PrintText(gRegionMapState->blankMapName, 17, 17);
Menu_EraseWindowRect(16, 14, 29, 15);
}
}
@@ -1462,8 +1454,8 @@ static void CreateFlyTargetGraphics(void)
{
struct SpriteSheet spriteSheet;
- LZ77UnCompWram(sFlyTargetIcons_ImageLZ, ewram888);
- spriteSheet.data = ewram888;
+ LZ77UnCompWram(sFlyTargetIcons_ImageLZ, gRegionMapState->unk_888);
+ spriteSheet.data = (u8 *)gRegionMapState->unk_888;
spriteSheet.size = 0x1C0;
spriteSheet.tag = 2;
LoadSpriteSheet(&spriteSheet);
@@ -1547,7 +1539,7 @@ static void CreateSpecialAreaFlyTargetIcons(void)
static void SpriteCB_FlyTargetIcons(struct Sprite *sprite)
{
// Blink if our mapSectionId is the one selected on the map
- if (sFlyDataPtr->regionMap.mapSectionId == sprite->data[0])
+ if (gRegionMapState->regionMap.mapSectionId == sprite->data[0])
{
// Toggle visibility every 16 frames
sprite->data[1]++;
@@ -1566,11 +1558,11 @@ static void SpriteCB_FlyTargetIcons(struct Sprite *sprite)
static void sub_80FC5B4(void)
{
- switch (sFlyDataPtr->unk4)
+ switch (gRegionMapState->state)
{
case 0:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB(0, 0, 0));
- sFlyDataPtr->unk4++;
+ gRegionMapState->state++;
break;
case 1:
if (UpdatePaletteFade() != 0)
@@ -1582,7 +1574,7 @@ static void sub_80FC5B4(void)
static void sub_80FC600(void)
{
- if (sFlyDataPtr->unk4 == 0)
+ if (gRegionMapState->state == 0)
{
switch (sub_80FAB60())
{
@@ -1594,7 +1586,7 @@ static void sub_80FC600(void)
PrintFlyTargetName();
break;
case INPUT_EVENT_A_BUTTON:
- if (sFlyDataPtr->regionMap.unk16 == 2 || sFlyDataPtr->regionMap.unk16 == 4)
+ if (gRegionMapState->regionMap.unk16 == 2 || gRegionMapState->regionMap.unk16 == 4)
{
m4aSongNumStart(SE_SELECT);
ewramA6E = 1;
@@ -1612,11 +1604,11 @@ static void sub_80FC600(void)
void sub_80FC69C(void)
{
- switch (sFlyDataPtr->unk4)
+ switch (gRegionMapState->state)
{
case 0:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0));
- sFlyDataPtr->unk4++;
+ gRegionMapState->state++;
break;
case 1:
if (UpdatePaletteFade() != 0)
@@ -1624,7 +1616,7 @@ void sub_80FC69C(void)
FreeRegionMapIconResources();
if (ewramA6E != 0)
{
- switch (sFlyDataPtr->regionMap.mapSectionId)
+ switch (gRegionMapState->regionMap.mapSectionId)
{
case MAPSEC_SOUTHERN_ISLAND:
sub_8053538(HEAL_LOCATION_SOUTHERN_ISLAND_EXTERIOR);
@@ -1636,13 +1628,13 @@ void sub_80FC69C(void)
sub_8053538((gSaveBlock2.playerGender == MALE) ? HEAL_LOCATION_LITTLEROOT_TOWN_BRENDANS_HOUSE : HEAL_LOCATION_LITTLEROOT_TOWN_MAYS_HOUSE);
break;
case MAPSEC_EVER_GRANDE_CITY:
- sub_8053538((FlagGet(FLAG_SYS_POKEMON_LEAGUE_FLY) && sFlyDataPtr->regionMap.everGrandeCityArea == 0) ? HEAL_LOCATION_EVER_GRANDE_CITY_POKEMON_LEAGUE : HEAL_LOCATION_EVER_GRANDE_CITY);
+ sub_8053538((FlagGet(FLAG_SYS_POKEMON_LEAGUE_FLY) && gRegionMapState->regionMap.everGrandeCityArea == 0) ? HEAL_LOCATION_EVER_GRANDE_CITY_POKEMON_LEAGUE : HEAL_LOCATION_EVER_GRANDE_CITY);
break;
default:
- if (sMapHealLocations[sFlyDataPtr->regionMap.mapSectionId][2] != 0)
- sub_8053538(sMapHealLocations[sFlyDataPtr->regionMap.mapSectionId][2]);
+ if (sMapHealLocations[gRegionMapState->regionMap.mapSectionId][2] != 0)
+ sub_8053538(sMapHealLocations[gRegionMapState->regionMap.mapSectionId][2]);
else
- warp1_set_2(sMapHealLocations[sFlyDataPtr->regionMap.mapSectionId][0], sMapHealLocations[sFlyDataPtr->regionMap.mapSectionId][1], -1);
+ warp1_set_2(sMapHealLocations[gRegionMapState->regionMap.mapSectionId][0], sMapHealLocations[gRegionMapState->regionMap.mapSectionId][1], -1);
break;
}
sub_80865BC();
@@ -1665,17 +1657,17 @@ void debug_sub_8110CCC(void)
for (i = 0; i < ARRAY_COUNT(sMultiPartMapSections); i++)
{
- if (sFlyDataPtr->regionMap.mapSectionId == sMultiPartMapSections[i].mapSectionId)
+ if (gRegionMapState->regionMap.mapSectionId == sMultiPartMapSections[i].mapSectionId)
{
if (FlagGet(sMultiPartMapSections[i].requiredFlag))
{
- indent = 12 - StringLength(sMultiPartMapSections[i].partNames[sFlyDataPtr->regionMap.everGrandeCityArea]);
+ indent = 12 - StringLength(sMultiPartMapSections[i].partNames[gRegionMapState->regionMap.everGrandeCityArea]);
if (indent < 0)
indent = 0;
r7 = TRUE;
Menu_DrawStdWindowFrame(16, 14, 29, 19);
- Menu_PrintText(sFlyDataPtr->regionMap.mapSectionName, 17, 15);
- Menu_PrintText(sMultiPartMapSections[i].partNames[sFlyDataPtr->regionMap.everGrandeCityArea], 17 + indent, 17);
+ Menu_PrintText(gRegionMapState->regionMap.mapSectionName, 17, 15);
+ Menu_PrintText(sMultiPartMapSections[i].partNames[gRegionMapState->regionMap.everGrandeCityArea], 17 + indent, 17);
}
break;
}
@@ -1683,22 +1675,22 @@ void debug_sub_8110CCC(void)
if (!r7)
{
Menu_DrawStdWindowFrame(16, 16, 29, 19);
- Menu_PrintText(sFlyDataPtr->regionMap.mapSectionName, 17, 17);
+ Menu_PrintText(gRegionMapState->regionMap.mapSectionName, 17, 17);
Menu_EraseWindowRect(16, 14, 29, 15);
}
}
void debug_sub_8110D84(void)
{
- switch (sFlyDataPtr->unk4)
+ switch (gRegionMapState->state)
{
case 0:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB(0, 0, 0));
- sFlyDataPtr->unk4++;
+ gRegionMapState->state++;
break;
case 1:
if (!UpdatePaletteFade())
- sFlyDataPtr->unk4++;
+ gRegionMapState->state++;
break;
case 2:
switch (sub_80FAB60())
@@ -1709,7 +1701,7 @@ void debug_sub_8110D84(void)
debug_sub_8110CCC();
break;
case 4:
- if (sFlyDataPtr->regionMap.unk16 != 0)
+ if (gRegionMapState->regionMap.unk16 != 0)
{
m4aSongNumStart(SE_SELECT);
gSharedMem[0xA6E] = 1; // TODO: what is this?
@@ -1719,7 +1711,7 @@ void debug_sub_8110D84(void)
case 5:
m4aSongNumStart(SE_SELECT);
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0));
- sFlyDataPtr->unk4++;
+ gRegionMapState->state++;
break;
}
break;
@@ -1736,14 +1728,14 @@ void debug_sub_8110D84(void)
{
sub_80FBCA0();
sub_80FAEC4();
- sFlyDataPtr->unk4++;
+ gRegionMapState->state++;
}
break;
case 5:
if (sub_80FAFC0() == 0)
{
CreateRegionMapCursor(0, 0);
- sFlyDataPtr->unk4++;
+ gRegionMapState->state++;
}
break;
case 6:
@@ -1755,14 +1747,14 @@ void debug_sub_8110D84(void)
{
sub_80FBCA0();
sub_80FAEC4();
- sFlyDataPtr->unk4++;
+ gRegionMapState->state++;
}
break;
case 7:
if (sub_80FAFC0() == 0)
{
CreateRegionMapCursor(0, 0);
- sFlyDataPtr->unk4 = 3;
+ gRegionMapState->state = 3;
}
break;
}