summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/data/region_map_layout.h2
-rw-r--r--src/landmark.c98
-rw-r--r--src/pokedex_area_screen.c1425
-rw-r--r--src/region_map.c161
-rw-r--r--src/roamer.c6
-rw-r--r--src/tv.c12
6 files changed, 1509 insertions, 195 deletions
diff --git a/src/data/region_map_layout.h b/src/data/region_map_layout.h
index ca33ef37a..1bc93cbb3 100644
--- a/src/data/region_map_layout.h
+++ b/src/data/region_map_layout.h
@@ -20,7 +20,7 @@
#define SAFARI MAPSEC_SAFARI_ZONE
#define BTLTWR MAPSEC_BATTLE_TOWER
#define S_ISLD MAPSEC_SOUTHERN_ISLAND
-#define ______ MAPSEC_NONE
+#define ______ MAPSEC_NOTHING
static const u8 sRegionMapLayout[] =
{
diff --git a/src/landmark.c b/src/landmark.c
index 476821ec6..0572da4ca 100644
--- a/src/landmark.c
+++ b/src/landmark.c
@@ -1,7 +1,7 @@
#include "global.h"
#include "landmark.h"
#include "event_data.h"
-#include "region_map_sections.h"
+#include "constants/region_map_sections.h"
struct Landmark
{
@@ -315,52 +315,52 @@ static const struct Landmark *const Landmarks_MtChimney_2[] =
static const struct LandmarkList gLandmarkLists[] =
{
- {MAPSEC_Route104, 0, Landmarks_Route104_0},
- {MAPSEC_Route104, 1, Landmarks_Route104_1},
- {MAPSEC_Route105, 0, Landmarks_Route105_0},
- {MAPSEC_Route106, 1, Landmarks_Route106_1},
- {MAPSEC_Route108, 0, Landmarks_Route108_0},
- {MAPSEC_Route109, 0, Landmarks_Route109_0},
- {MAPSEC_Route110, 0, Landmarks_Route110_0},
- {MAPSEC_Route110, 1, Landmarks_Route110_1},
- {MAPSEC_Route110, 2, Landmarks_Route110_2},
- {MAPSEC_Route111, 0, Landmarks_Route111_0},
- {MAPSEC_Route111, 1, Landmarks_Route111_1},
- {MAPSEC_Route111, 2, Landmarks_Route111_1},
- {MAPSEC_Route111, 3, Landmarks_Route111_3},
- {MAPSEC_Route111, 4, Landmarks_Route111_4},
- {MAPSEC_Route112, 0, Landmarks_Route112_0},
- {MAPSEC_Route112, 1, Landmarks_Route112_1},
- {MAPSEC_Route113, 1, Landmarks_Route113_1},
- {MAPSEC_Route114, 1, Landmarks_Route114_1},
- {MAPSEC_Route114, 2, Landmarks_Route114_2},
- {MAPSEC_Route114, 3, Landmarks_MeteorFalls},
- {MAPSEC_Route115, 0, Landmarks_MeteorFalls},
- {MAPSEC_Route115, 1, Landmarks_MeteorFalls},
- {MAPSEC_Route116, 1, Landmarks_Route116_1},
- {MAPSEC_Route116, 2, Landmarks_Route116_2},
- {MAPSEC_Route117, 2, Landmarks_Route117_2},
- {MAPSEC_Route119, 1, Landmarks_Route119_1},
- {MAPSEC_Route120, 0, Landmarks_Route120_0},
- {MAPSEC_Route120, 2, Landmarks_Route120_2},
- {MAPSEC_Route121, 2, Landmarks_Route121_2},
- {MAPSEC_Route122, 0, Landmarks_Route122_0},
- {MAPSEC_Route123, 0, Landmarks_Route123_0},
- {MAPSEC_Route122, 1, Landmarks_Route122_0},
- {MAPSEC_Route124, 7, Landmarks_Route124_7},
- {MAPSEC_Route125, 2, Landmarks_Route125_2},
- {MAPSEC_Route128, 1, Landmarks_Route128_1},
- {MAPSEC_Route131, 1, Landmarks_Route131_1},
- {MAPSEC_Route132, 0, Landmarks_OceanCurrent},
- {MAPSEC_Route132, 1, Landmarks_OceanCurrent},
- {MAPSEC_Route133, 0, Landmarks_OceanCurrent},
- {MAPSEC_Route133, 1, Landmarks_OceanCurrent},
- {MAPSEC_Route133, 2, Landmarks_OceanCurrent},
- {MAPSEC_Route134, 0, Landmarks_OceanCurrent},
- {MAPSEC_Route134, 1, Landmarks_OceanCurrent},
- {MAPSEC_Route134, 2, Landmarks_Route134_2},
- {MAPSEC_MtChimney, 2, Landmarks_MtChimney_2},
- {MAPSEC_Nothing, 0, NULL},
+ {MAPSEC_ROUTE_104, 0, Landmarks_Route104_0},
+ {MAPSEC_ROUTE_104, 1, Landmarks_Route104_1},
+ {MAPSEC_ROUTE_105, 0, Landmarks_Route105_0},
+ {MAPSEC_ROUTE_106, 1, Landmarks_Route106_1},
+ {MAPSEC_ROUTE_108, 0, Landmarks_Route108_0},
+ {MAPSEC_ROUTE_109, 0, Landmarks_Route109_0},
+ {MAPSEC_ROUTE_110, 0, Landmarks_Route110_0},
+ {MAPSEC_ROUTE_110, 1, Landmarks_Route110_1},
+ {MAPSEC_ROUTE_110, 2, Landmarks_Route110_2},
+ {MAPSEC_ROUTE_111, 0, Landmarks_Route111_0},
+ {MAPSEC_ROUTE_111, 1, Landmarks_Route111_1},
+ {MAPSEC_ROUTE_111, 2, Landmarks_Route111_1},
+ {MAPSEC_ROUTE_111, 3, Landmarks_Route111_3},
+ {MAPSEC_ROUTE_111, 4, Landmarks_Route111_4},
+ {MAPSEC_ROUTE_112, 0, Landmarks_Route112_0},
+ {MAPSEC_ROUTE_112, 1, Landmarks_Route112_1},
+ {MAPSEC_ROUTE_113, 1, Landmarks_Route113_1},
+ {MAPSEC_ROUTE_114, 1, Landmarks_Route114_1},
+ {MAPSEC_ROUTE_114, 2, Landmarks_Route114_2},
+ {MAPSEC_ROUTE_114, 3, Landmarks_MeteorFalls},
+ {MAPSEC_ROUTE_115, 0, Landmarks_MeteorFalls},
+ {MAPSEC_ROUTE_115, 1, Landmarks_MeteorFalls},
+ {MAPSEC_ROUTE_116, 1, Landmarks_Route116_1},
+ {MAPSEC_ROUTE_116, 2, Landmarks_Route116_2},
+ {MAPSEC_ROUTE_117, 2, Landmarks_Route117_2},
+ {MAPSEC_ROUTE_119, 1, Landmarks_Route119_1},
+ {MAPSEC_ROUTE_120, 0, Landmarks_Route120_0},
+ {MAPSEC_ROUTE_120, 2, Landmarks_Route120_2},
+ {MAPSEC_ROUTE_121, 2, Landmarks_Route121_2},
+ {MAPSEC_ROUTE_122, 0, Landmarks_Route122_0},
+ {MAPSEC_ROUTE_123, 0, Landmarks_Route123_0},
+ {MAPSEC_ROUTE_122, 1, Landmarks_Route122_0},
+ {MAPSEC_ROUTE_124, 7, Landmarks_Route124_7},
+ {MAPSEC_ROUTE_125, 2, Landmarks_Route125_2},
+ {MAPSEC_ROUTE_128, 1, Landmarks_Route128_1},
+ {MAPSEC_ROUTE_131, 1, Landmarks_Route131_1},
+ {MAPSEC_ROUTE_132, 0, Landmarks_OceanCurrent},
+ {MAPSEC_ROUTE_132, 1, Landmarks_OceanCurrent},
+ {MAPSEC_ROUTE_133, 0, Landmarks_OceanCurrent},
+ {MAPSEC_ROUTE_133, 1, Landmarks_OceanCurrent},
+ {MAPSEC_ROUTE_133, 2, Landmarks_OceanCurrent},
+ {MAPSEC_ROUTE_134, 0, Landmarks_OceanCurrent},
+ {MAPSEC_ROUTE_134, 1, Landmarks_OceanCurrent},
+ {MAPSEC_ROUTE_134, 2, Landmarks_Route134_2},
+ {MAPSEC_MT_CHIMNEY, 2, Landmarks_MtChimney_2},
+ {MAPSEC_NOTHING, 0, NULL},
};
static const struct Landmark *const *GetLandmarks(u8 mapSection, u8 id);
@@ -396,7 +396,7 @@ static const struct Landmark *const *GetLandmarks(u8 mapSection, u8 id)
{
u16 i = 0;
- for (; gLandmarkLists[i].mapSection != MAPSEC_Nothing; i++)
+ for (; gLandmarkLists[i].mapSection != MAPSEC_NOTHING; i++)
{
if (gLandmarkLists[i].mapSection > mapSection)
return NULL;
@@ -404,7 +404,7 @@ static const struct Landmark *const *GetLandmarks(u8 mapSection, u8 id)
break;
}
- if (gLandmarkLists[i].mapSection == MAPSEC_Nothing)
+ if (gLandmarkLists[i].mapSection == MAPSEC_NOTHING)
return NULL;
for (; gLandmarkLists[i].mapSection == mapSection; i++)
diff --git a/src/pokedex_area_screen.c b/src/pokedex_area_screen.c
index 67ca276c4..fd60581b9 100644
--- a/src/pokedex_area_screen.c
+++ b/src/pokedex_area_screen.c
@@ -1,20 +1,1437 @@
-
// Includes
#include "global.h"
+#include "constants/species.h"
+#include "constants/maps.h"
+#include "constants/songs.h"
+#include "constants/region_map_sections.h"
+#include "sound.h"
+#include "ewram.h"
+#include "main.h"
+#include "palette.h"
+#include "task.h"
+#include "sprite.h"
+#include "region_map.h"
+#include "string_util.h"
+#include "text.h"
+#include "wild_encounter.h"
+#include "roamer.h"
+#include "overworld.h"
+#include "event_data.h"
+#include "trig.h"
+#include "graphics.h"
// Static type declarations
+struct PokedexAreaScreenSubstruct0010
+{
+ u8 mapGroup;
+ u8 mapNum;
+ u16 regionMapSectionId;
+};
+
+struct PokedexAreaScreenEwramStruct
+{
+ void (*callback)(void);
+ MainCallback prev;
+ MainCallback next;
+ u16 state;
+ u16 species;
+ struct PokedexAreaScreenSubstruct0010 overworldAreasWithMons[0x40];
+ u16 numOverworldAreas;
+ u16 numSpecialAreas;
+ u16 drawAreaGlowState;
+ u16 areaGlowTilemap[0x280];
+ u16 areaShadeOrMarkerFrameCounter;
+ u16 areaShadeFrameCounter;
+ u16 areaShadeBldArgLo;
+ u16 areaShadeBldArgHi;
+ u8 whichMarkersFlashing;
+ u8 specialMarkerCycleCounter;
+ u16 specialAreaRegionMapSectionIds[0x20];
+ struct Sprite * areaMarkerSprites[0x20];
+ u16 numAreaMarkerSprites;
+ u8 * errno;
+ struct RegionMap regionMap;
+ u8 charBuffer[0x40];
+ struct Sprite * areaUnknownSprites[3];
+ u8 areaUnknownGraphicsBuffer[0x600];
+};
+
+#define ePokedexAreaScreen (*(struct PokedexAreaScreenEwramStruct *)gSharedMem)
+
// Static RAM declarations
+// Static ROM declarations
+
+static void CB2_UnusedPokedexAreaScreen(void);
+static void VBlankCB_AreaScren(void);
+static void MainCB_AreaScren(void);
+static void SetCallback(void (*func)(void));
+static void ResetDrawAreaGlowState(void);
+static bool8 DrawAreaGlow(void);
+static void FindMapsWithMon(u16 mon);
+static void SetAreaHasMon(u16 mapGroup, u16 mapNum);
+static void SetSpecialMapHasMon(u16 mapGroup, u16 mapNum);
+static bool8 MapHasMon(const struct WildPokemonHeader *header, u16 mon);
+static bool8 MonListHasMon(const struct WildPokemonInfo *info, u16 mon, u16 size);
+static void BuildAreaGlowTilemap(void);
+static void StartAreaGlow(void);
+static void DoAreaGlow(void);
+static void DebugCB_WaitFade(void);
+static void DebugCB_WaitButton(void);
+static void DebugCB_GoBack(void);
+static void DebugCB_GoNext(void);
+
+// .rodata
+
+static const u16 gUnknown_083F8418[] = INCBIN_U16("graphics/pokedex/area_glow.gbapal");
+
+static const u8 gUnknown_083F8438[] = INCBIN_U8("graphics/pokedex/area_glow.4bpp.lz");
+
+static const u16 sSpeciesHiddenFromAreaScreen[] = {SPECIES_WYNAUT};
+
+static const u16 sFeebasData[][3] = {
+ {SPECIES_FEEBAS, MAP_GROUP(ROUTE119), MAP_NUM(ROUTE119)},
+ {NUM_SPECIES}
+};
+
+static const u16 sLandmarkData[][2] = {
+ {MAPSEC_SKY_PILLAR, FLAG_LANDMARK_SKY_PILLAR},
+ {MAPSEC_SEAFLOOR_CAVERN, FLAG_LANDMARK_SEAFLOOR_CAVERN},
+ {MAPSEC_NOTHING}
+};
+
+static struct PokedexAreaScreenEwramStruct *const gPokedexAreaScreenPtr = &ePokedexAreaScreen;
+
+// .text
+
+void UnusedPokedexAreaScreen(u16 a0, MainCallback a1, MainCallback a2)
+{
+ gPokedexAreaScreenPtr->prev = a1;
+ gPokedexAreaScreenPtr->next = a2;
+ gPokedexAreaScreenPtr->species = a0;
+ SetMainCallback2(CB2_UnusedPokedexAreaScreen);
+}
+
+static void CB2_UnusedPokedexAreaScreen(void)
+{
+ switch (gMain.state)
+ {
+ case 0:
+ SetVBlankCallback(NULL);
+ REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_BG1_ON | DISPCNT_WIN0_ON | DISPCNT_WIN1_ON;
+ ResetPaletteFade();
+ ResetSpriteData();
+ ResetTasks();
+ FreeSpriteTileRanges();
+ FreeAllSpritePalettes();
+ REG_BG0HOFS = 0;
+ REG_BG0VOFS = -8;
+ REG_BG2VOFS = 0;
+ REG_BG2HOFS = 0;
+ REG_BG3HOFS = 0;
+ REG_BG3VOFS = 0;
+ break;
+ case 1:
+ InitRegionMap(&gPokedexAreaScreenPtr->regionMap, FALSE);
+ StringFill(gPokedexAreaScreenPtr->charBuffer, CHAR_SPACE, 16);
+ break;
+ case 2:
+ ResetDrawAreaGlowState();
+ break;
+ case 3:
+ if (DrawAreaGlow())
+ return;
+ break;
+ case 4:
+ CreateRegionMapPlayerIcon(1, 1);
+ RegionMapDefaultZoomOffsetPlayerSprite(0, -8);
+ SetVBlankCallback(VBlankCB_AreaScren);
+ break;
+ case 5:
+ BeginNormalPaletteFade(0xFFFFFFEB, 0, 16, 0, 0);
+ break;
+ case 6:
+ REG_BLDCNT = BLDCNT_TGT1_BG0 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG0 | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ | BLDCNT_TGT2_BD;
+ StartAreaGlow();
+ REG_DISPCNT = DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON | DISPCNT_WIN1_ON;
+ break;
+ case 7:
+ SetCallback(DebugCB_WaitFade);
+ SetMainCallback2(MainCB_AreaScren);
+ return;
+ }
+ gMain.state++;
+}
+
+static void VBlankCB_AreaScren(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+static void MainCB_AreaScren(void)
+{
+ gPokedexAreaScreenPtr->callback();
+ DoAreaGlow();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+static void SetCallback(void (*func)(void))
+{
+ gPokedexAreaScreenPtr->callback = func;
+ gPokedexAreaScreenPtr->state = 0;
+}
+
+static void ResetDrawAreaGlowState(void)
+{
+ gPokedexAreaScreenPtr->drawAreaGlowState = 0;
+}
+
+bool8 DrawAreaGlow(void)
+{
+ switch (gPokedexAreaScreenPtr->drawAreaGlowState)
+ {
+ case 0:
+ FindMapsWithMon(gPokedexAreaScreenPtr->species);
+ break;
+ case 1:
+ BuildAreaGlowTilemap();
+ break;
+ case 2:
+ LZ77UnCompVram(gUnknown_083F8438, BG_CHAR_ADDR(3));
+ break;
+ case 3:
+ DmaCopy16(3, gPokedexAreaScreenPtr->areaGlowTilemap, BG_SCREEN_ADDR(30), 0x500);
+ break;
+ case 4:
+ LoadPalette(gUnknown_083F8418, 0, 32);
+ break;
+ case 5:
+ REG_BG0CNT = BGCNT_PRIORITY(1) | BGCNT_CHARBASE(3) | BGCNT_16COLOR | BGCNT_SCREENBASE(30) | BGCNT_TXT256x256;
+ gPokedexAreaScreenPtr->drawAreaGlowState++;
+ return FALSE;
+ default:
+ return FALSE;
+ }
+ gPokedexAreaScreenPtr->drawAreaGlowState++;
+ return TRUE;
+}
+
+static void FindMapsWithMon(u16 mon)
+{
+ u16 i;
+ struct Roamer *roamer;
+
+ if (mon != ROAMER_SPECIES)
+ {
+ gPokedexAreaScreenPtr->numOverworldAreas = 0;
+ gPokedexAreaScreenPtr->numSpecialAreas = 0;
+ for (i = 0; i < ARRAY_COUNT(sSpeciesHiddenFromAreaScreen); i++)
+ {
+ if (sSpeciesHiddenFromAreaScreen[i] == mon)
+ return;
+ }
+ for (i = 0; sFeebasData[i][0] != NUM_SPECIES; i++)
+ {
+ if (mon == sFeebasData[i][0])
+ {
+ switch (sFeebasData[i][1])
+ {
+ case MAP_GROUP(PETALBURG_CITY):
+ SetAreaHasMon(sFeebasData[i][1], sFeebasData[i][2]);
+ break;
+ case MAP_GROUP(METEOR_FALLS_1F_1R):
+ case MAP_GROUP(SAFARI_ZONE_NORTHWEST):
+ SetSpecialMapHasMon(sFeebasData[i][1], sFeebasData[i][2]);
+ break;
+ }
+ }
+ }
+ for (i = 0; gWildMonHeaders[i].mapGroup != 0xFF; i++)
+ {
+ if (MapHasMon(gWildMonHeaders + i, mon))
+ {
+ switch (gWildMonHeaders[i].mapGroup)
+ {
+ case MAP_GROUP(PETALBURG_CITY):
+ SetAreaHasMon(gWildMonHeaders[i].mapGroup, gWildMonHeaders[i].mapNum);
+ break;
+ case MAP_GROUP(METEOR_FALLS_1F_1R):
+ case MAP_GROUP(SAFARI_ZONE_NORTHWEST):
+ SetSpecialMapHasMon(gWildMonHeaders[i].mapGroup, gWildMonHeaders[i].mapNum);
+ break;
+ }
+ }
+ }
+ }
+ else
+ {
+ gPokedexAreaScreenPtr->numSpecialAreas = 0;
+ roamer = &gSaveBlock1.roamer;
+ if (roamer->active)
+ {
+ GetRoamerLocation(&gPokedexAreaScreenPtr->overworldAreasWithMons[0].mapGroup, &gPokedexAreaScreenPtr->overworldAreasWithMons[0].mapNum);
+ gPokedexAreaScreenPtr->overworldAreasWithMons[0].regionMapSectionId = Overworld_GetMapHeaderByGroupAndId(gPokedexAreaScreenPtr->overworldAreasWithMons[0].mapGroup, gPokedexAreaScreenPtr->overworldAreasWithMons[0].mapNum)->regionMapSectionId;
+ gPokedexAreaScreenPtr->numOverworldAreas = 1;
+ }
+ else
+ gPokedexAreaScreenPtr->numOverworldAreas = 0;
+ }
+}
+
+static void SetAreaHasMon(u16 mapGroup, u16 mapNum)
+{
+ if (gPokedexAreaScreenPtr->numOverworldAreas < 0x40)
+ {
+ gPokedexAreaScreenPtr->overworldAreasWithMons[gPokedexAreaScreenPtr->numOverworldAreas].mapGroup = mapGroup;
+ gPokedexAreaScreenPtr->overworldAreasWithMons[gPokedexAreaScreenPtr->numOverworldAreas].mapNum = mapNum;
+ gPokedexAreaScreenPtr->overworldAreasWithMons[gPokedexAreaScreenPtr->numOverworldAreas].regionMapSectionId = GetOverworldMapFromUnderwaterMap(Overworld_GetMapHeaderByGroupAndId(mapGroup, mapNum)->regionMapSectionId);
+ gPokedexAreaScreenPtr->numOverworldAreas++;
+ }
+}
+
+static void SetSpecialMapHasMon(u16 mapGroup, u16 mapNum)
+{
+ const struct MapHeader *mapHeader;
+ u16 i;
+
+ if (gPokedexAreaScreenPtr->numSpecialAreas < 0x20)
+ {
+ mapHeader = Overworld_GetMapHeaderByGroupAndId(mapGroup, mapNum);
+ if (mapHeader->regionMapSectionId < MAPSEC_NOTHING)
+ {
+ for (i = 0; sLandmarkData[i][0] != MAPSEC_NOTHING; i++)
+ {
+ if (mapHeader->regionMapSectionId == sLandmarkData[i][0] && !FlagGet(sLandmarkData[i][1]))
+ return;
+ }
+ for (i = 0; i < gPokedexAreaScreenPtr->numSpecialAreas; i++)
+ {
+ if (gPokedexAreaScreenPtr->specialAreaRegionMapSectionIds[i] == mapHeader->regionMapSectionId)
+ break;
+ }
+ if (i == gPokedexAreaScreenPtr->numSpecialAreas)
+ {
+ gPokedexAreaScreenPtr->specialAreaRegionMapSectionIds[i] = mapHeader->regionMapSectionId;
+ gPokedexAreaScreenPtr->numSpecialAreas++;
+ }
+ }
+ }
+}
+
+static bool8 MapHasMon(const struct WildPokemonHeader *header, u16 mon)
+{
+ if (MonListHasMon(header->landMonsInfo, mon, 12))
+ return TRUE;
+ if (MonListHasMon(header->waterMonsInfo, mon, 5))
+ return TRUE;
+ if (MonListHasMon(header->fishingMonsInfo, mon, 12))
+ return TRUE;
+ if (MonListHasMon(header->rockSmashMonsInfo, mon, 5))
+ return TRUE;
+ return FALSE;
+}
+
+static bool8 MonListHasMon(const struct WildPokemonInfo *info, u16 mon, u16 size)
+{
+ u16 i;
+ if (info != NULL)
+ {
+ for (i = 0; i < size; i++)
+ {
+ if (info->wildPokemon[i].species == mon)
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+#ifdef NONMATCHING
+static void BuildAreaGlowTilemap(void)
+{
+ static EWRAM_DATA u16 gUnknown_02039260 = 0;
+ static EWRAM_DATA u16 gUnknown_02039262 = 0;
+ static EWRAM_DATA u16 gUnknown_02039264 = 0;
+ static EWRAM_DATA u16 gUnknown_02039266 = 0;
+ static EWRAM_DATA u16 gUnknown_02039268 = 0;
+ static EWRAM_DATA u16 gUnknown_0203926A = 0;
+ u32 r3;
+
+ for (gUnknown_02039260 = 0; gUnknown_02039260 < 0x280; gUnknown_02039260++)
+ gPokedexAreaScreenPtr->areaGlowTilemap[gUnknown_02039260] = 0;
+
+ for (gUnknown_02039260 = 0; gUnknown_02039260 < gPokedexAreaScreenPtr->numOverworldAreas; gUnknown_02039260++)
+ {
+ gUnknown_02039266 = 0;
+ for (gUnknown_02039264 = 0; gUnknown_02039264 < 20; gUnknown_02039264++)
+ {
+ for (gUnknown_02039262 = 0; gUnknown_02039262 < 32; gUnknown_02039262++)
+ {
+ if (GetRegionMapSectionAt_(gUnknown_02039262, gUnknown_02039264) == gPokedexAreaScreenPtr->overworldAreasWithMons[gUnknown_02039260].regionMapSectionId)
+ {
+ gPokedexAreaScreenPtr->areaGlowTilemap[gUnknown_02039266] = 0xFFFF;
+ }
+ gUnknown_02039266++;
+ }
+ }
+ }
+
+ gUnknown_02039266 = 0;
+ for (gUnknown_02039264 = 0; gUnknown_02039264 < 20; gUnknown_02039264++)
+ {
+ for (gUnknown_02039262 = 0; gUnknown_02039262 < 32; gUnknown_02039262++)
+ {
+ if (gPokedexAreaScreenPtr->areaGlowTilemap[gUnknown_02039266] == 0xFFFF)
+ {
+ if (gUnknown_02039262 != 0 && gPokedexAreaScreenPtr->areaGlowTilemap[gUnknown_02039266 - 1] != 0xFFFF)
+ gPokedexAreaScreenPtr->areaGlowTilemap[gUnknown_02039266 - 1] |= 0x02;
+ if (gUnknown_02039262 != 31 && gPokedexAreaScreenPtr->areaGlowTilemap[gUnknown_02039266 + 1] != 0xFFFF)
+ gPokedexAreaScreenPtr->areaGlowTilemap[gUnknown_02039266 + 1] |= 0x01;
+ if (gUnknown_02039264 != 0 && gPokedexAreaScreenPtr->areaGlowTilemap[gUnknown_02039266 - 32] != 0xFFFF)
+ gPokedexAreaScreenPtr->areaGlowTilemap[gUnknown_02039266 - 32] |= 0x08;
+ if (gUnknown_02039264 != 19 && gPokedexAreaScreenPtr->areaGlowTilemap[gUnknown_02039266 + 32] != 0xFFFF)
+ gPokedexAreaScreenPtr->areaGlowTilemap[gUnknown_02039266 + 32] |= 0x04;
+ if (gUnknown_02039262 != 0 && gUnknown_02039264 != 0 && gPokedexAreaScreenPtr->areaGlowTilemap[gUnknown_02039266 - 33] != 0xFFFF)
+ gPokedexAreaScreenPtr->areaGlowTilemap[gUnknown_02039266 - 33] |= 0x10;
+ if (gUnknown_02039262 != 31 && gUnknown_02039264 != 0 && gPokedexAreaScreenPtr->areaGlowTilemap[gUnknown_02039266 - 31] != 0xFFFF)
+ gPokedexAreaScreenPtr->areaGlowTilemap[gUnknown_02039266 - 31] |= 0x40;
+ if (gUnknown_02039262 != 0 && gUnknown_02039264 != 19 && gPokedexAreaScreenPtr->areaGlowTilemap[gUnknown_02039266 + 31] != 0xFFFF)
+ gPokedexAreaScreenPtr->areaGlowTilemap[gUnknown_02039266 + 31] |= 0x20;
+ if (gUnknown_02039262 != 31 && gUnknown_02039264 != 19 && gPokedexAreaScreenPtr->areaGlowTilemap[gUnknown_02039266 + 33] != 0xFFFF)
+ gPokedexAreaScreenPtr->areaGlowTilemap[gUnknown_02039266 + 33] |= 0x80;
+ }
+ gUnknown_02039266++;
+ }
+ }
+
+ for (gUnknown_02039260 = 0; gUnknown_02039260 < 0x280; gUnknown_02039260++) // Register difference on induction: expected r3, got r1
+ {
+ if (gPokedexAreaScreenPtr->areaGlowTilemap[gUnknown_02039260] == 0xFFFF)
+ gPokedexAreaScreenPtr->areaGlowTilemap[gUnknown_02039260] = 0x10;
+ else if (gPokedexAreaScreenPtr->areaGlowTilemap[gUnknown_02039260] != 0)
+ {
+ if (gPokedexAreaScreenPtr->areaGlowTilemap[gUnknown_02039260] & 0x02)
+ gPokedexAreaScreenPtr->areaGlowTilemap[gUnknown_02039260] &= 0xFFCF;
+ if (gPokedexAreaScreenPtr->areaGlowTilemap[gUnknown_02039260] & 0x01)
+ gPokedexAreaScreenPtr->areaGlowTilemap[gUnknown_02039260] &= 0xFF3F;
+ if (gPokedexAreaScreenPtr->areaGlowTilemap[gUnknown_02039260] & 0x08)
+ gPokedexAreaScreenPtr->areaGlowTilemap[gUnknown_02039260] &= 0xFFAF;
+ if (gPokedexAreaScreenPtr->areaGlowTilemap[gUnknown_02039260] & 0x04)
+ gPokedexAreaScreenPtr->areaGlowTilemap[gUnknown_02039260] &= 0xFF5F;
+ gUnknown_02039268 = gPokedexAreaScreenPtr->areaGlowTilemap[gUnknown_02039260] & 0x0F;
+ gUnknown_0203926A = gPokedexAreaScreenPtr->areaGlowTilemap[gUnknown_02039260] & 0xF0;
+ if (gUnknown_0203926A)
+ {
+ gPokedexAreaScreenPtr->areaGlowTilemap[gUnknown_02039260] &= 0x0F;
+ switch (gUnknown_02039268)
+ {
+ case 0:
+ if (gUnknown_0203926A != 0)
+ gPokedexAreaScreenPtr->areaGlowTilemap[gUnknown_02039260] += (gUnknown_0203926A >> 4) + 0x10;
+ break;
+ case 2:
+ if (gUnknown_0203926A != 0)
+ gPokedexAreaScreenPtr->areaGlowTilemap[gUnknown_02039260] += (gUnknown_0203926A >> 4) + 0x1E;
+ break;
+ case 1:
+ if (gUnknown_0203926A != 0)
+ gPokedexAreaScreenPtr->areaGlowTilemap[gUnknown_02039260] += (gUnknown_0203926A >> 6) + 0x20;
+ break;
+ case 8:
+ if (gUnknown_0203926A != 0)
+ {
+ r3 = 0;
+ if (gUnknown_0203926A & 0x80)
+ r3 |= 1;
+ if (gUnknown_0203926A & 0x20)
+ r3 |= 2;
+ gPokedexAreaScreenPtr->areaGlowTilemap[gUnknown_02039260] += r3 + 0x20;
+ }
+ break;
+ case 4:
+ if (gUnknown_0203926A != 0)
+ {
+ r3 = 0;
+ if (gUnknown_0203926A & 0x40)
+ r3 |= 1;
+ if (gUnknown_0203926A & 0x10)
+ r3 |= 2;
+ gPokedexAreaScreenPtr->areaGlowTilemap[gUnknown_02039260] += r3 + 0x21;
+ }
+ break;
+ case 5:
+ case 6:
+ gPokedexAreaScreenPtr->areaGlowTilemap[gUnknown_02039260] += 0x27;
+ break;
+ case 9:
+ case 10:
+ gPokedexAreaScreenPtr->areaGlowTilemap[gUnknown_02039260] += 0x25;
+ break;
+ }
+ }
+ }
+ }
+}
+# else
EWRAM_DATA u16 gUnknown_02039260 = 0;
EWRAM_DATA u16 gUnknown_02039262 = 0;
EWRAM_DATA u16 gUnknown_02039264 = 0;
EWRAM_DATA u16 gUnknown_02039266 = 0;
EWRAM_DATA u16 gUnknown_02039268 = 0;
EWRAM_DATA u16 gUnknown_0203926A = 0;
+static NAKED void BuildAreaGlowTilemap(void)
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tmov r7, r10\n"
+ "\tmov r6, r9\n"
+ "\tmov r5, r8\n"
+ "\tpush {r5-r7}\n"
+ "\tsub sp, 0xC\n"
+ "\tldr r1, _08110E5C @ =gUnknown_02039260\n"
+ "\tmovs r0, 0\n"
+ "\tstrh r0, [r1]\n"
+ "\tmov r9, r1\n"
+ "\tldr r0, _08110E60 @ =gSharedMem\n"
+ "\tmov r8, r0\n"
+ "\tldr r1, _08110E64 @ =gUnknown_02039262\n"
+ "\tmov r12, r1\n"
+ "\tmov r1, r9\n"
+ "\tmovs r4, 0x8B\n"
+ "\tlsls r4, 1\n"
+ "\tadd r4, r8\n"
+ "\tldr r3, _08110E68 @ =0x0000027f\n"
+ "\tmovs r2, 0\n"
+ "_08110C5C:\n"
+ "\tldrh r0, [r1]\n"
+ "\tlsls r0, 1\n"
+ "\tadds r0, r4\n"
+ "\tstrh r2, [r0]\n"
+ "\tldrh r0, [r1]\n"
+ "\tadds r0, 0x1\n"
+ "\tstrh r0, [r1]\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tcmp r0, r3\n"
+ "\tbls _08110C5C\n"
+ "\tmovs r0, 0\n"
+ "\tmov r3, r9\n"
+ "\tstrh r0, [r3]\n"
+ "\tmovs r1, 0x88\n"
+ "\tlsls r1, 1\n"
+ "\tadd r1, r8\n"
+ "\tldrh r0, [r1]\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _08110D04\n"
+ "\tldr r4, _08110E6C @ =gUnknown_02039266\n"
+ "\tmovs r2, 0\n"
+ "\tldr r5, _08110E64 @ =gUnknown_02039262\n"
+ "\tmov r0, r8\n"
+ "\tstr r0, [sp, 0x8]\n"
+ "\tmovs r1, 0x8B\n"
+ "\tlsls r1, 1\n"
+ "\tadd r1, r8\n"
+ "\tmov r10, r1\n"
+ "\tldr r6, _08110E70 @ =gUnknown_02039264\n"
+ "\tmov r7, r9\n"
+ "_08110C9A:\n"
+ "\tstrh r2, [r4]\n"
+ "\tldr r3, _08110E70 @ =gUnknown_02039264\n"
+ "\tstrh r2, [r3]\n"
+ "_08110CA0:\n"
+ "\tmov r0, r12\n"
+ "\tstrh r2, [r0]\n"
+ "_08110CA4:\n"
+ "\tldrh r0, [r5]\n"
+ "\tldrh r1, [r6]\n"
+ "\tstr r2, [sp]\n"
+ "\tbl GetRegionMapSectionAt_\n"
+ "\tldrh r1, [r7]\n"
+ "\tlsls r1, 2\n"
+ "\tldr r3, [sp, 0x8]\n"
+ "\tadds r1, r3\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tldr r2, [sp]\n"
+ "\tldrh r1, [r1, 0x12]\n"
+ "\tcmp r0, r1\n"
+ "\tbne _08110CCC\n"
+ "\tldrh r0, [r4]\n"
+ "\tlsls r0, 1\n"
+ "\tadd r0, r10\n"
+ "\tldr r1, _08110E74 @ =0x0000ffff\n"
+ "\tstrh r1, [r0]\n"
+ "_08110CCC:\n"
+ "\tldrh r0, [r4]\n"
+ "\tadds r0, 0x1\n"
+ "\tstrh r0, [r4]\n"
+ "\tldrh r0, [r5]\n"
+ "\tadds r0, 0x1\n"
+ "\tstrh r0, [r5]\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tcmp r0, 0x1F\n"
+ "\tbls _08110CA4\n"
+ "\tldrh r0, [r6]\n"
+ "\tadds r0, 0x1\n"
+ "\tstrh r0, [r6]\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tldr r1, _08110E64 @ =gUnknown_02039262\n"
+ "\tmov r12, r1\n"
+ "\tcmp r0, 0x13\n"
+ "\tbls _08110CA0\n"
+ "\tldrh r0, [r7]\n"
+ "\tadds r0, 0x1\n"
+ "\tstrh r0, [r7]\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tldr r3, _08110E78 @ =gSharedMem + 0x110\n"
+ "\tldrh r3, [r3]\n"
+ "\tcmp r0, r3\n"
+ "\tbcc _08110C9A\n"
+ "_08110D04:\n"
+ "\tmovs r0, 0\n"
+ "\tldr r1, _08110E6C @ =gUnknown_02039266\n"
+ "\tstrh r0, [r1]\n"
+ "\tldr r3, _08110E70 @ =gUnknown_02039264\n"
+ "\tstrh r0, [r3]\n"
+ "\tldr r6, _08110E64 @ =gUnknown_02039262\n"
+ "\tmov r10, r0\n"
+ "\tadds r3, r1, 0\n"
+ "\tldr r5, _08110E7C @ =gSharedMem + 0x116\n"
+ "\tldr r4, _08110E74 @ =0x0000ffff\n"
+ "\tldr r7, _08110E70 @ =gUnknown_02039264\n"
+ "_08110D1A:\n"
+ "\tmov r0, r10\n"
+ "\tstrh r0, [r6]\n"
+ "_08110D1E:\n"
+ "\tldrh r1, [r3]\n"
+ "\tlsls r0, r1, 1\n"
+ "\tadds r0, r5\n"
+ "\tldrh r0, [r0]\n"
+ "\tcmp r0, r4\n"
+ "\tbne _08110E10\n"
+ "\tldrh r0, [r6]\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _08110D42\n"
+ "\tsubs r0, r1, 0x1\n"
+ "\tlsls r0, 1\n"
+ "\tadds r2, r0, r5\n"
+ "\tldrh r1, [r2]\n"
+ "\tcmp r1, r4\n"
+ "\tbeq _08110D42\n"
+ "\tmovs r0, 0x2\n"
+ "\torrs r0, r1\n"
+ "\tstrh r0, [r2]\n"
+ "_08110D42:\n"
+ "\tldrh r0, [r6]\n"
+ "\tcmp r0, 0x1F\n"
+ "\tbeq _08110D5C\n"
+ "\tldrh r0, [r3]\n"
+ "\tadds r0, 0x1\n"
+ "\tlsls r0, 1\n"
+ "\tadds r2, r0, r5\n"
+ "\tldrh r1, [r2]\n"
+ "\tcmp r1, r4\n"
+ "\tbeq _08110D5C\n"
+ "\tmovs r0, 0x1\n"
+ "\torrs r0, r1\n"
+ "\tstrh r0, [r2]\n"
+ "_08110D5C:\n"
+ "\tldrh r0, [r7]\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _08110D76\n"
+ "\tldrh r0, [r3]\n"
+ "\tsubs r0, 0x20\n"
+ "\tlsls r0, 1\n"
+ "\tadds r2, r0, r5\n"
+ "\tldrh r1, [r2]\n"
+ "\tcmp r1, r4\n"
+ "\tbeq _08110D76\n"
+ "\tmovs r0, 0x8\n"
+ "\torrs r0, r1\n"
+ "\tstrh r0, [r2]\n"
+ "_08110D76:\n"
+ "\tldrh r0, [r7]\n"
+ "\tcmp r0, 0x13\n"
+ "\tbeq _08110D90\n"
+ "\tldrh r0, [r3]\n"
+ "\tadds r0, 0x20\n"
+ "\tlsls r0, 1\n"
+ "\tadds r2, r0, r5\n"
+ "\tldrh r1, [r2]\n"
+ "\tcmp r1, r4\n"
+ "\tbeq _08110D90\n"
+ "\tmovs r0, 0x4\n"
+ "\torrs r0, r1\n"
+ "\tstrh r0, [r2]\n"
+ "_08110D90:\n"
+ "\tldrh r0, [r6]\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _08110DB0\n"
+ "\tldrh r0, [r7]\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _08110DB0\n"
+ "\tldrh r0, [r3]\n"
+ "\tsubs r0, 0x21\n"
+ "\tlsls r0, 1\n"
+ "\tadds r2, r0, r5\n"
+ "\tldrh r1, [r2]\n"
+ "\tcmp r1, r4\n"
+ "\tbeq _08110DB0\n"
+ "\tmovs r0, 0x10\n"
+ "\torrs r0, r1\n"
+ "\tstrh r0, [r2]\n"
+ "_08110DB0:\n"
+ "\tldrh r0, [r6]\n"
+ "\tcmp r0, 0x1F\n"
+ "\tbeq _08110DD0\n"
+ "\tldrh r0, [r7]\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _08110DD0\n"
+ "\tldrh r0, [r3]\n"
+ "\tsubs r0, 0x1F\n"
+ "\tlsls r0, 1\n"
+ "\tadds r2, r0, r5\n"
+ "\tldrh r1, [r2]\n"
+ "\tcmp r1, r4\n"
+ "\tbeq _08110DD0\n"
+ "\tmovs r0, 0x40\n"
+ "\torrs r0, r1\n"
+ "\tstrh r0, [r2]\n"
+ "_08110DD0:\n"
+ "\tldrh r0, [r6]\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _08110DF0\n"
+ "\tldrh r0, [r7]\n"
+ "\tcmp r0, 0x13\n"
+ "\tbeq _08110DF0\n"
+ "\tldrh r0, [r3]\n"
+ "\tadds r0, 0x1F\n"
+ "\tlsls r0, 1\n"
+ "\tadds r2, r0, r5\n"
+ "\tldrh r1, [r2]\n"
+ "\tcmp r1, r4\n"
+ "\tbeq _08110DF0\n"
+ "\tmovs r0, 0x20\n"
+ "\torrs r0, r1\n"
+ "\tstrh r0, [r2]\n"
+ "_08110DF0:\n"
+ "\tldrh r0, [r6]\n"
+ "\tcmp r0, 0x1F\n"
+ "\tbeq _08110E10\n"
+ "\tldrh r0, [r7]\n"
+ "\tcmp r0, 0x13\n"
+ "\tbeq _08110E10\n"
+ "\tldrh r0, [r3]\n"
+ "\tadds r0, 0x21\n"
+ "\tlsls r0, 1\n"
+ "\tadds r2, r0, r5\n"
+ "\tldrh r1, [r2]\n"
+ "\tcmp r1, r4\n"
+ "\tbeq _08110E10\n"
+ "\tmovs r0, 0x80\n"
+ "\torrs r0, r1\n"
+ "\tstrh r0, [r2]\n"
+ "_08110E10:\n"
+ "\tldrh r0, [r3]\n"
+ "\tadds r0, 0x1\n"
+ "\tstrh r0, [r3]\n"
+ "\tldrh r0, [r6]\n"
+ "\tadds r0, 0x1\n"
+ "\tstrh r0, [r6]\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tcmp r0, 0x1F\n"
+ "\tbhi _08110E26\n"
+ "\tb _08110D1E\n"
+ "_08110E26:\n"
+ "\tldrh r0, [r7]\n"
+ "\tadds r0, 0x1\n"
+ "\tstrh r0, [r7]\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tcmp r0, 0x13\n"
+ "\tbhi _08110E36\n"
+ "\tb _08110D1A\n"
+ "_08110E36:\n"
+ "\tmovs r0, 0\n"
+ "\tmov r1, r9\n"
+ "\tstrh r0, [r1]\n"
+ "_08110E3C:\n"
+ "\tmov r3, r9\n"
+ "\tldrh r0, [r3]\n"
+ "\tlsls r0, 1\n"
+ "\tmovs r4, 0x8B\n"
+ "\tlsls r4, 1\n"
+ "\tadd r4, r8\n"
+ "\tadds r3, r0, r4\n"
+ "\tldrh r2, [r3]\n"
+ "\tadds r1, r2, 0\n"
+ "\tldr r0, _08110E74 @ =0x0000ffff\n"
+ "\tcmp r1, r0\n"
+ "\tbne _08110E80\n"
+ "\tmovs r0, 0x10\n"
+ "\tstrh r0, [r3]\n"
+ "\tb _0811105E\n"
+ "\t.align 2, 0\n"
+ "_08110E5C: .4byte gUnknown_02039260\n"
+ "_08110E60: .4byte gSharedMem\n"
+ "_08110E64: .4byte gUnknown_02039262\n"
+ "_08110E68: .4byte 0x0000027f\n"
+ "_08110E6C: .4byte gUnknown_02039266\n"
+ "_08110E70: .4byte gUnknown_02039264\n"
+ "_08110E74: .4byte 0x0000ffff\n"
+ "_08110E78: .4byte gSharedMem + 0x110\n"
+ "_08110E7C: .4byte gSharedMem + 0x116\n"
+ "_08110E80:\n"
+ "\tcmp r1, 0\n"
+ "\tbne _08110E86\n"
+ "\tb _0811105E\n"
+ "_08110E86:\n"
+ "\tmovs r0, 0x2\n"
+ "\tands r0, r2\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _08110E94\n"
+ "\tldr r0, _08110F28 @ =0x0000ffcf\n"
+ "\tands r0, r2\n"
+ "\tstrh r0, [r3]\n"
+ "_08110E94:\n"
+ "\tmov r1, r9\n"
+ "\tldrh r0, [r1]\n"
+ "\tlsls r0, 1\n"
+ "\tadds r2, r0, r4\n"
+ "\tldrh r1, [r2]\n"
+ "\tmovs r0, 0x1\n"
+ "\tands r0, r1\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _08110EAC\n"
+ "\tldr r0, _08110F2C @ =0x0000ff3f\n"
+ "\tands r0, r1\n"
+ "\tstrh r0, [r2]\n"
+ "_08110EAC:\n"
+ "\tmov r3, r9\n"
+ "\tldrh r0, [r3]\n"
+ "\tlsls r0, 1\n"
+ "\tadds r2, r0, r4\n"
+ "\tldrh r1, [r2]\n"
+ "\tmovs r0, 0x8\n"
+ "\tands r0, r1\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _08110EC4\n"
+ "\tldr r0, _08110F30 @ =0x0000ffaf\n"
+ "\tands r0, r1\n"
+ "\tstrh r0, [r2]\n"
+ "_08110EC4:\n"
+ "\tmov r1, r9\n"
+ "\tldrh r0, [r1]\n"
+ "\tlsls r0, 1\n"
+ "\tadds r2, r0, r4\n"
+ "\tldrh r1, [r2]\n"
+ "\tmovs r0, 0x4\n"
+ "\tands r0, r1\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _08110EDC\n"
+ "\tldr r0, _08110F34 @ =0x0000ff5f\n"
+ "\tands r0, r1\n"
+ "\tstrh r0, [r2]\n"
+ "_08110EDC:\n"
+ "\tldr r6, _08110F38 @ =gUnknown_02039268\n"
+ "\tmov r3, r9\n"
+ "\tldrh r0, [r3]\n"
+ "\tlsls r0, 1\n"
+ "\tadds r0, r4\n"
+ "\tldrh r1, [r0]\n"
+ "\tmovs r5, 0xF\n"
+ "\tadds r0, r5, 0\n"
+ "\tands r0, r1\n"
+ "\tstrh r0, [r6]\n"
+ "\tldr r2, _08110F3C @ =gUnknown_0203926A\n"
+ "\tldrh r0, [r3]\n"
+ "\tlsls r0, 1\n"
+ "\tadds r0, r4\n"
+ "\tldrh r1, [r0]\n"
+ "\tmovs r0, 0xF0\n"
+ "\tands r0, r1\n"
+ "\tstrh r0, [r2]\n"
+ "\tldrh r1, [r3]\n"
+ "\tadds r3, r2, 0\n"
+ "\tcmp r0, 0\n"
+ "\tbne _08110F0A\n"
+ "\tb _0811105E\n"
+ "_08110F0A:\n"
+ "\tlsls r0, r1, 1\n"
+ "\tadds r0, r4\n"
+ "\tldrh r2, [r0]\n"
+ "\tadds r1, r5, 0\n"
+ "\tands r1, r2\n"
+ "\tstrh r1, [r0]\n"
+ "\tldrh r0, [r6]\n"
+ "\tcmp r0, 0xA\n"
+ "\tbls _08110F1E\n"
+ "\tb _0811105E\n"
+ "_08110F1E:\n"
+ "\tlsls r0, 2\n"
+ "\tldr r1, _08110F40 @ =_08110F44\n"
+ "\tadds r0, r1\n"
+ "\tldr r0, [r0]\n"
+ "\tmov pc, r0\n"
+ "\t.align 2, 0\n"
+ "_08110F28: .4byte 0x0000ffcf\n"
+ "_08110F2C: .4byte 0x0000ff3f\n"
+ "_08110F30: .4byte 0x0000ffaf\n"
+ "_08110F34: .4byte 0x0000ff5f\n"
+ "_08110F38: .4byte gUnknown_02039268\n"
+ "_08110F3C: .4byte gUnknown_0203926A\n"
+ "_08110F40: .4byte _08110F44\n"
+ "\t.align 2, 0\n"
+ "_08110F44:\n"
+ "\t.4byte _08110F70\n"
+ "\t.4byte _08110FAC\n"
+ "\t.4byte _08110F8E\n"
+ "\t.4byte _0811105E\n"
+ "\t.4byte _08111002\n"
+ "\t.4byte _08111036\n"
+ "\t.4byte _08111036\n"
+ "\t.4byte _0811105E\n"
+ "\t.4byte _08110FCE\n"
+ "\t.4byte _0811104A\n"
+ "\t.4byte _0811104A\n"
+ "_08110F70:\n"
+ "\tldrh r0, [r3]\n"
+ "\tlsls r1, r0, 16\n"
+ "\tcmp r1, 0\n"
+ "\tbeq _0811105E\n"
+ "\tmov r0, r9\n"
+ "\tldrh r2, [r0]\n"
+ "\tlsls r2, 1\n"
+ "\tmovs r0, 0x8B\n"
+ "\tlsls r0, 1\n"
+ "\tadd r0, r8\n"
+ "\tadds r2, r0\n"
+ "\tldrh r0, [r2]\n"
+ "\tadds r0, 0x10\n"
+ "\tlsrs r1, 20\n"
+ "\tb _08110FC8\n"
+ "_08110F8E:\n"
+ "\tldrh r0, [r3]\n"
+ "\tlsls r1, r0, 16\n"
+ "\tcmp r1, 0\n"
+ "\tbeq _0811105E\n"
+ "\tmov r3, r9\n"
+ "\tldrh r2, [r3]\n"
+ "\tlsls r2, 1\n"
+ "\tmovs r0, 0x8B\n"
+ "\tlsls r0, 1\n"
+ "\tadd r0, r8\n"
+ "\tadds r2, r0\n"
+ "\tldrh r0, [r2]\n"
+ "\tadds r0, 0x1E\n"
+ "\tlsrs r1, 20\n"
+ "\tb _08110FC8\n"
+ "_08110FAC:\n"
+ "\tldrh r0, [r3]\n"
+ "\tlsls r1, r0, 16\n"
+ "\tcmp r1, 0\n"
+ "\tbeq _0811105E\n"
+ "\tmov r0, r9\n"
+ "\tldrh r2, [r0]\n"
+ "\tlsls r2, 1\n"
+ "\tmovs r0, 0x8B\n"
+ "\tlsls r0, 1\n"
+ "\tadd r0, r8\n"
+ "\tadds r2, r0\n"
+ "\tldrh r0, [r2]\n"
+ "\tadds r0, 0x20\n"
+ "\tlsrs r1, 22\n"
+ "_08110FC8:\n"
+ "\tadds r0, r1\n"
+ "\tstrh r0, [r2]\n"
+ "\tb _0811105E\n"
+ "_08110FCE:\n"
+ "\tldrh r2, [r3]\n"
+ "\tcmp r2, 0\n"
+ "\tbeq _0811105E\n"
+ "\tmovs r0, 0x80\n"
+ "\tands r0, r2\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tnegs r0, r0\n"
+ "\tlsrs r3, r0, 31\n"
+ "\tmovs r0, 0x20\n"
+ "\tands r0, r2\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _08110FEC\n"
+ "\tmovs r0, 0x2\n"
+ "\torrs r3, r0\n"
+ "_08110FEC:\n"
+ "\tmov r0, r9\n"
+ "\tldrh r1, [r0]\n"
+ "\tlsls r1, 1\n"
+ "\tmovs r0, 0x8B\n"
+ "\tlsls r0, 1\n"
+ "\tadd r0, r8\n"
+ "\tadds r1, r0\n"
+ "\tldrh r0, [r1]\n"
+ "\tadds r0, 0x20\n"
+ "\tadds r0, r3\n"
+ "\tb _0811105C\n"
+ "_08111002:\n"
+ "\tldrh r2, [r3]\n"
+ "\tcmp r2, 0\n"
+ "\tbeq _0811105E\n"
+ "\tmovs r0, 0x40\n"
+ "\tands r0, r2\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tnegs r0, r0\n"
+ "\tlsrs r3, r0, 31\n"
+ "\tmovs r0, 0x10\n"
+ "\tands r0, r2\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _08111020\n"
+ "\tmovs r0, 0x2\n"
+ "\torrs r3, r0\n"
+ "_08111020:\n"
+ "\tmov r0, r9\n"
+ "\tldrh r1, [r0]\n"
+ "\tlsls r1, 1\n"
+ "\tmovs r0, 0x8B\n"
+ "\tlsls r0, 1\n"
+ "\tadd r0, r8\n"
+ "\tadds r1, r0\n"
+ "\tldrh r0, [r1]\n"
+ "\tadds r0, 0x21\n"
+ "\tadds r0, r3\n"
+ "\tb _0811105C\n"
+ "_08111036:\n"
+ "\tmov r3, r9\n"
+ "\tldrh r1, [r3]\n"
+ "\tlsls r1, 1\n"
+ "\tmovs r0, 0x8B\n"
+ "\tlsls r0, 1\n"
+ "\tadd r0, r8\n"
+ "\tadds r1, r0\n"
+ "\tldrh r0, [r1]\n"
+ "\tadds r0, 0x27\n"
+ "\tb _0811105C\n"
+ "_0811104A:\n"
+ "\tmov r0, r9\n"
+ "\tldrh r1, [r0]\n"
+ "\tlsls r1, 1\n"
+ "\tmovs r0, 0x8B\n"
+ "\tlsls r0, 1\n"
+ "\tadd r0, r8\n"
+ "\tadds r1, r0\n"
+ "\tldrh r0, [r1]\n"
+ "\tadds r0, 0x25\n"
+ "_0811105C:\n"
+ "\tstrh r0, [r1]\n"
+ "_0811105E:\n"
+ "\tmov r3, r9\n"
+ "\tldrh r0, [r3]\n"
+ "\tadds r0, 0x1\n"
+ "\tstrh r0, [r3]\n"
+ "\tlsls r0, 16\n"
+ "\tldr r1, _08111080 @ =0x027f0000\n"
+ "\tcmp r0, r1\n"
+ "\tbhi _08111070\n"
+ "\tb _08110E3C\n"
+ "_08111070:\n"
+ "\tadd sp, 0xC\n"
+ "\tpop {r3-r5}\n"
+ "\tmov r8, r3\n"
+ "\tmov r9, r4\n"
+ "\tmov r10, r5\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.align 2, 0\n"
+ "_08111080: .4byte 0x027f0000");
+}
+#endif // NONMATCHING
-// Static ROM declarations
+static void StartAreaGlow(void)
+{
+ if (gPokedexAreaScreenPtr->numSpecialAreas != 0 && gPokedexAreaScreenPtr->numOverworldAreas == 0)
+ gPokedexAreaScreenPtr->whichMarkersFlashing = 1;
+ else
+ gPokedexAreaScreenPtr->whichMarkersFlashing = 0;
+ gPokedexAreaScreenPtr->areaShadeOrMarkerFrameCounter = 0;
+ gPokedexAreaScreenPtr->areaShadeFrameCounter = 0;
+ gPokedexAreaScreenPtr->areaShadeBldArgLo = 0;
+ gPokedexAreaScreenPtr->areaShadeBldArgHi = 0x40;
+ gPokedexAreaScreenPtr->specialMarkerCycleCounter = 1;
+ REG_BLDCNT = BLDCNT_TGT1_BG0 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG0 | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ | BLDCNT_TGT2_BD;
+ REG_BLDALPHA = 0x1000;
+ DoAreaGlow();
+}
-// .rodata
+static void DoAreaGlow(void)
+{
+ u16 x;
+ u16 y;
+ u16 i;
-// .text
+ if (gPokedexAreaScreenPtr->whichMarkersFlashing == 0)
+ {
+ if (gPokedexAreaScreenPtr->areaShadeOrMarkerFrameCounter == 0)
+ {
+ gPokedexAreaScreenPtr->areaShadeFrameCounter++;
+ if (gPokedexAreaScreenPtr->areaShadeFrameCounter & 1)
+ gPokedexAreaScreenPtr->areaShadeBldArgLo = (gPokedexAreaScreenPtr->areaShadeBldArgLo + 4) & 0x7f;
+ else
+ gPokedexAreaScreenPtr->areaShadeBldArgHi = (gPokedexAreaScreenPtr->areaShadeBldArgHi + 4) & 0x7f;
+ x = gSineTable[gPokedexAreaScreenPtr->areaShadeBldArgLo] >> 4;
+ y = gSineTable[gPokedexAreaScreenPtr->areaShadeBldArgHi] >> 4;
+ REG_BLDALPHA = x | (y << 8);
+ gPokedexAreaScreenPtr->areaShadeOrMarkerFrameCounter = 0;
+ if (gPokedexAreaScreenPtr->areaShadeFrameCounter == 0x40)
+ {
+ gPokedexAreaScreenPtr->areaShadeFrameCounter = 0;
+ if (gPokedexAreaScreenPtr->numSpecialAreas != 0)
+ gPokedexAreaScreenPtr->whichMarkersFlashing = 1;
+ }
+ }
+ else
+ gPokedexAreaScreenPtr->areaShadeOrMarkerFrameCounter--;
+ }
+ else
+ {
+ gPokedexAreaScreenPtr->areaShadeOrMarkerFrameCounter++;
+ if (gPokedexAreaScreenPtr->areaShadeOrMarkerFrameCounter > 12)
+ {
+ gPokedexAreaScreenPtr->areaShadeOrMarkerFrameCounter = 0;
+ gPokedexAreaScreenPtr->specialMarkerCycleCounter++;
+ for (i = 0; i < gPokedexAreaScreenPtr->numSpecialAreas; i++)
+ {
+ gPokedexAreaScreenPtr->areaMarkerSprites[i]->invisible = gPokedexAreaScreenPtr->specialMarkerCycleCounter & 1;
+ }
+ if (gPokedexAreaScreenPtr->specialMarkerCycleCounter > 4)
+ {
+ gPokedexAreaScreenPtr->specialMarkerCycleCounter = 1;
+ if (gPokedexAreaScreenPtr->numOverworldAreas != 0)
+ gPokedexAreaScreenPtr->whichMarkersFlashing = 0;
+ }
+ }
+ }
+}
+
+static void DebugCB_WaitFade(void)
+{
+ switch (gPokedexAreaScreenPtr->state)
+ {
+ case 0:
+ gPokedexAreaScreenPtr->state = 1;
+ break;
+ case 1:
+ if (!UpdatePaletteFade())
+ {
+ SetCallback(DebugCB_WaitButton);
+ }
+ break;
+ }
+}
+
+static void DebugCB_WaitButton(void)
+{
+ switch (gPokedexAreaScreenPtr->state)
+ {
+ case 0:
+ if (gMain.newKeys & B_BUTTON)
+ {
+ SetCallback(DebugCB_GoBack);
+ }
+ else if (gMain.newKeys & DPAD_RIGHT || (gMain.newKeys & R_BUTTON && gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR))
+ {
+ SetCallback(DebugCB_GoNext);
+ }
+ break;
+ }
+}
+
+static void DebugCB_GoBack(void)
+{
+ switch (gPokedexAreaScreenPtr->state)
+ {
+ case 0:
+ BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 16, 0);
+ gPokedexAreaScreenPtr->state++;
+ break;
+ case 1:
+ if (!UpdatePaletteFade())
+ {
+ FreeRegionMapIconResources();
+ SetMainCallback2(gPokedexAreaScreenPtr->prev);
+ }
+ break;
+ }
+}
+
+static void DebugCB_GoNext(void)
+{
+ switch (gPokedexAreaScreenPtr->state)
+ {
+ case 0:
+ BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 16, 0);
+ gPokedexAreaScreenPtr->state++;
+ break;
+ case 1:
+ if (!UpdatePaletteFade())
+ {
+ FreeRegionMapIconResources();
+ SetMainCallback2(gPokedexAreaScreenPtr->next);
+ }
+ break;
+ }
+}
+
+static void Task_PokedexAreaScreen_0(u8 taskId);
+static void Task_PokedexAreaScreen_1(u8 taskId);
+static void CreateAreaMarkerSprites(void);
+static void DestroyAreaSprites(void);
+static void LoadAreaUnknownGraphics(void);
+static void CreateAreaUnknownSprites(void);
+
+void ShowPokedexAreaScreen(u16 species, u8 * errno)
+{
+ u8 taskId;
+ gPokedexAreaScreenPtr->species = species;
+ gPokedexAreaScreenPtr->errno = errno;
+ errno[0] = 0;
+ taskId = CreateTask(Task_PokedexAreaScreen_0, 0);
+ gTasks[taskId].data[0] = 0;
+}
+
+static void Task_PokedexAreaScreen_0(u8 taskId)
+{
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_BG1_ON | DISPCNT_WIN0_ON | DISPCNT_WIN1_ON;
+ REG_BG0HOFS = 0;
+ REG_BG0VOFS = -8;
+ REG_BG2VOFS = 0;
+ REG_BG2HOFS = 0;
+ REG_BG3HOFS = 0;
+ REG_BG3VOFS = 0;
+ break;
+ case 1:
+ ResetPaletteFade();
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ break;
+ case 2:
+ InitRegionMap(&gPokedexAreaScreenPtr->regionMap, FALSE);
+ StringFill(gPokedexAreaScreenPtr->charBuffer, CHAR_SPACE, 16);
+ break;
+ case 3:
+ ResetDrawAreaGlowState();
+ break;
+ case 4:
+ if (DrawAreaGlow())
+ return;
+ break;
+ case 5:
+ CreateRegionMapPlayerIcon(1, 1);
+ RegionMapDefaultZoomOffsetPlayerSprite(0, -8);
+ break;
+ case 6:
+ CreateAreaMarkerSprites();
+ break;
+ case 7:
+ LoadAreaUnknownGraphics();
+ break;
+ case 8:
+ CreateAreaUnknownSprites();
+ break;
+ case 9:
+ BeginNormalPaletteFade(0xFFFFFFEB, 0, 16, 0, 0);
+ break;
+ case 10:
+ REG_BLDCNT = BLDCNT_TGT1_BG0 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG0 | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ | BLDCNT_TGT2_BD;
+ StartAreaGlow();
+ REG_DISPCNT = DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON | DISPCNT_WIN1_ON;
+ break;
+ case 11:
+ gTasks[taskId].func = Task_PokedexAreaScreen_1;
+ gTasks[taskId].data[0] = 0;
+ return;
+ }
+ gTasks[taskId].data[0]++;
+}
+
+static void Task_PokedexAreaScreen_1(u8 taskId)
+{
+ DoAreaGlow();
+ switch (gTasks[taskId].data[0])
+ {
+ default:
+ gTasks[taskId].data[0] = 0;
+ case 0:
+ if (gPaletteFade.active)
+ return;
+ break;
+ case 1:
+ if (gMain.newKeys & B_BUTTON)
+ {
+ gTasks[taskId].data[1] = 1;
+ PlaySE(SE_PC_OFF);
+ }
+ else if (gMain.newKeys & DPAD_RIGHT || (gMain.newKeys & R_BUTTON && gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR))
+ {
+ gTasks[taskId].data[1] = 2;
+ PlaySE(SE_Z_PAGE);
+ }
+ else
+ return;
+ break;
+ case 2:
+ BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 16, 0);
+ break;
+ case 3:
+ if (gPaletteFade.active)
+ return;
+ DestroyAreaSprites();
+ gPokedexAreaScreenPtr->errno[0] = gTasks[taskId].data[1];
+ DestroyTask(taskId);
+ return;
+ }
+ gTasks[taskId].data[0]++;
+}
+
+const u16 AreaMarkerPalette[];
+const u8 AreaMarkerTiles[];
+
+const struct SpriteSheet sAreaMarkerSpriteSheet = {
+ AreaMarkerTiles, 0x80, 2
+};
+
+const struct SpritePalette sAreaMarkerSpritePalette = {
+ AreaMarkerPalette, 2
+};
+
+const struct OamData sAreaMarkerOamData = {
+ .size = 1,
+ .priority = 1
+};
+
+const struct SpriteTemplate sAreaMarkerSpriteTemplate = {
+ 2,
+ 2,
+ &sAreaMarkerOamData,
+ gDummySpriteAnimTable,
+ NULL,
+ gDummySpriteAffineAnimTable,
+ SpriteCallbackDummy
+};
+
+const u16 AreaMarkerPalette[] = INCBIN_U16("graphics/pokedex/area_marker.gbapal");
+const u8 AreaMarkerTiles[] = INCBIN_U8("graphics/pokedex/area_marker.4bpp");
+
+static void CreateAreaMarkerSprites(void)
+{
+ s16 i;
+ u8 spriteId;
+ s16 x;
+ s16 y;
+ s16 cnt;
+ s16 mapSecId;
+
+ LoadSpriteSheet(&sAreaMarkerSpriteSheet);
+ LoadSpritePalette(&sAreaMarkerSpritePalette);
+ cnt = 0;
+ for (i = 0; i < gPokedexAreaScreenPtr->numSpecialAreas; i++)
+ {
+ mapSecId = gPokedexAreaScreenPtr->specialAreaRegionMapSectionIds[i];
+ x = 8 * (gRegionMapLocations[mapSecId].x + 1) + 4;
+ y = 8 * (gRegionMapLocations[mapSecId].y) + 28;
+ x += 4 * (gRegionMapLocations[mapSecId].width - 1);
+ y += 4 * (gRegionMapLocations[mapSecId].height - 1);
+ spriteId = CreateSprite(&sAreaMarkerSpriteTemplate, x, y, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].invisible = TRUE;
+ gPokedexAreaScreenPtr->areaMarkerSprites[cnt++] = gSprites + spriteId;
+ }
+ }
+ gPokedexAreaScreenPtr->numAreaMarkerSprites = cnt;
+}
+
+static void DestroyAreaSprites(void)
+{
+ u16 i;
+ FreeSpriteTilesByTag(2);
+ FreeSpritePaletteByTag(2);
+ for (i = 0; i < gPokedexAreaScreenPtr->numAreaMarkerSprites; i++)
+ {
+ DestroySprite(gPokedexAreaScreenPtr->areaMarkerSprites[i]);
+ }
+ FreeSpriteTilesByTag(3);
+ FreeSpritePaletteByTag(3);
+ for (i = 0; i < 3; i++)
+ {
+ if (gPokedexAreaScreenPtr->areaUnknownSprites[i] != NULL)
+ {
+ DestroySprite(gPokedexAreaScreenPtr->areaUnknownSprites[i]);
+ }
+ }
+}
+
+const struct SpritePalette sAreaUnknownSpritePalette = {gAreaUnknownPalette, 3};
+
+static void LoadAreaUnknownGraphics(void)
+{
+ struct SpriteSheet spriteSheet = {gPokedexAreaScreenPtr->areaUnknownGraphicsBuffer, 0x600, 3};
+
+ LZ77UnCompWram(gAreaUnknownTiles, gPokedexAreaScreenPtr->areaUnknownGraphicsBuffer);
+ LoadSpriteSheet(&spriteSheet);
+ LoadSpritePalette(&sAreaUnknownSpritePalette);
+}
+
+const struct OamData sAreaUnknownOamData = {
+ .size = 2,
+ .priority = 1
+};
+
+const struct SpriteTemplate sAreaUnknownSpriteTemplate = {
+ 3,
+ 3,
+ &sAreaUnknownOamData,
+ gDummySpriteAnimTable,
+ NULL,
+ gDummySpriteAffineAnimTable,
+ SpriteCallbackDummy
+};
+
+static void CreateAreaUnknownSprites(void)
+{
+ u16 i;
+ u8 spriteId;
+
+ if (gPokedexAreaScreenPtr->numOverworldAreas != 0 || gPokedexAreaScreenPtr->numSpecialAreas != 0)
+ {
+ for (i = 0; i < 3; i++)
+ {
+ gPokedexAreaScreenPtr->areaUnknownSprites[i] = NULL;
+ }
+ }
+ else
+ {
+ for (i = 0; i < 3; i++)
+ {
+ spriteId = CreateSprite(&sAreaUnknownSpriteTemplate, i * 32 + 0xa0, 0x8c, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].oam.tileNum += i * 16;
+ gPokedexAreaScreenPtr->areaUnknownSprites[i] = gSprites + spriteId;
+ }
+ else
+ gPokedexAreaScreenPtr->areaUnknownSprites[i] = NULL;
+ }
+ }
+}
diff --git a/src/region_map.c b/src/region_map.c
index b4ed2c558..190cc6576 100644
--- a/src/region_map.c
+++ b/src/region_map.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "constants/region_map_sections.h"
#include "event_data.h"
#include "field_effect.h"
#include "field_specials.h"
@@ -19,97 +20,6 @@
#include "trig.h"
#include "ewram.h"
-// Map Section IDs
-#define MAPSEC_LITTLEROOT_TOWN 0
-#define MAPSEC_OLDALE_TOWN 1
-#define MAPSEC_DEWFORD_TOWN 2
-#define MAPSEC_LAVARIDGE_TOWN 3
-#define MAPSEC_FALLARBOR_TOWN 4
-#define MAPSEC_VERDANTURF_TOWN 5
-#define MAPSEC_PACIFIDLOG_TOWN 6
-#define MAPSEC_PETALBURG_CITY 7
-#define MAPSEC_SLATEPORT_CITY 8
-#define MAPSEC_MAUVILLE_CITY 9
-#define MAPSEC_RUSTBORO_CITY 10
-#define MAPSEC_FORTREE_CITY 11
-#define MAPSEC_LILYCOVE_CITY 12
-#define MAPSEC_MOSSDEEP_CITY 13
-#define MAPSEC_SOOTOPOLIS_CITY 14
-#define MAPSEC_EVER_GRANDE_CITY 15
-#define MAPSEC_ROUTE_101 0x10
-#define MAPSEC_ROUTE_102 0x11
-#define MAPSEC_ROUTE_103 0x12
-#define MAPSEC_ROUTE_104 0x13
-#define MAPSEC_ROUTE_105 0x14
-#define MAPSEC_ROUTE_106 0x15
-#define MAPSEC_ROUTE_107 0x16
-#define MAPSEC_ROUTE_108 0x17
-#define MAPSEC_ROUTE_109 0x18
-#define MAPSEC_ROUTE_110 0x19
-#define MAPSEC_ROUTE_111 0x1A
-#define MAPSEC_ROUTE_112 0x1B
-#define MAPSEC_ROUTE_113 0x1C
-#define MAPSEC_ROUTE_114 0x1D
-#define MAPSEC_ROUTE_115 0x1E
-#define MAPSEC_ROUTE_116 0x1F
-#define MAPSEC_ROUTE_117 0x20
-#define MAPSEC_ROUTE_118 0x21
-#define MAPSEC_ROUTE_119 0x22
-#define MAPSEC_ROUTE_120 0x23
-#define MAPSEC_ROUTE_121 0x24
-#define MAPSEC_ROUTE_122 0x25
-#define MAPSEC_ROUTE_123 0x26
-#define MAPSEC_ROUTE_124 0x27
-#define MAPSEC_ROUTE_125 0x28
-#define MAPSEC_ROUTE_126 0x29
-#define MAPSEC_ROUTE_127 0x2A
-#define MAPSEC_ROUTE_128 0x2B
-#define MAPSEC_ROUTE_129 0x2C
-#define MAPSEC_ROUTE_130 0x2D
-#define MAPSEC_ROUTE_131 0x2E
-#define MAPSEC_ROUTE_132 0x2F
-#define MAPSEC_ROUTE_133 0x30
-#define MAPSEC_ROUTE_134 0x31
-#define MAPSEC_UNDERWATER1 0x32
-#define MAPSEC_UNDERWATER2 0x33
-#define MAPSEC_UNDERWATER3 0x34
-#define MAPSEC_UNDERWATER4 0x35
-#define MAPSEC_UNDERWATER5 0x36
-#define MAPSEC_GRANITE_CAVE 0x37
-#define MAPSEC_MT_CHIMNEY 0x38
-#define MAPSEC_SAFARI_ZONE 0x39
-#define MAPSEC_BATTLE_TOWER 0x3A
-#define MAPSEC_PETALBURG_WOODS 0x3B
-#define MAPSEC_RUSTURF_TUNNEL 0x3C
-#define MAPSEC_ABANDONED_SHIP 0x3D
-#define MAPSEC_NEW_MAUVILLE 0x3E
-#define MAPSEC_METEOR_FALLS_1 0x3F
-#define MAPSEC_METEOR_FALLS_2 0x40
-#define MAPSEC_MT_PYRE 0x41
-#define MAPSEC_EVIL_TEAM_HIDEOUT 0x42
-#define MAPSEC_SHOAL_CAVE 0x43
-#define MAPSEC_SEAFLOOR_CAVERN 0x44
-#define MAPSEC_UNDERWATER6 0x45
-#define MAPSEC_VICTORY_ROAD 0x46
-#define MAPSEC_MIRAGE_ISLAND 0x47
-#define MAPSEC_CAVE_OF_ORIGIN 0x48
-#define MAPSEC_SOUTHERN_ISLAND 0x49
-#define MAPSEC_FIERY_PATH_1 0x4A
-#define MAPSEC_FIERY_PATH_2 0x4B
-#define MAPSEC_JAGGED_PASS_1 0x4C
-#define MAPSEC_JAGGED_PASS_2 0x4D
-#define MAPSEC_SEALED_CHAMBER 0x4E
-#define MAPSEC_UNDERWATER7 0x4F
-#define MAPSEC_SCORCHED_SLAB 0x50
-#define MAPSEC_ISLAND_CAVE 0x51
-#define MAPSEC_DESERT_RUINS 0x52
-#define MAPSEC_ANCIENT_TOMB 0x53
-#define MAPSEC_INSIDE_OF_TRUCK 0x54
-#define MAPSEC_SKY_PILLAR 0x55
-#define MAPSEC_SECRET_BASE 0x56
-#define MAPSEC_UNK_0x57 0x57
-#define MAPSEC_NONE 0x58
-
#define MAP_WIDTH 28
#define MAP_HEIGHT 15
#define MAPCURSOR_X_MIN 1
@@ -149,13 +59,6 @@ static const u8 sRegionMapBkgnd_TilemapLZ[] = INCBIN_U8("graphics/pokenav/region
#include "data/region_map_names_de.h"
#endif
-struct RegionMapLocation
-{
- u8 x, y;
- u8 width, height;
- const u8 *regionMapSectionId;
-};
-
const struct RegionMapLocation gRegionMapLocations[] =
{
{ 4, 11, 1, 1, gMapName_LittlerootTown},
@@ -248,21 +151,21 @@ const struct RegionMapLocation gRegionMapLocations[] =
{ 0, 0, 1, 1, gMapName_None},
};
-static const u16 gUnknown_083E7684[][2] =
+static const u16 sUnderwaterMaps[][2] =
{
- {MAPSEC_UNDERWATER1, MAPSEC_ROUTE_124},
- {MAPSEC_UNDERWATER2, MAPSEC_ROUTE_126},
- {MAPSEC_UNDERWATER3, MAPSEC_ROUTE_127},
- {MAPSEC_UNDERWATER4, MAPSEC_ROUTE_128},
- {MAPSEC_UNDERWATER5, MAPSEC_SOOTOPOLIS_CITY},
- {MAPSEC_UNDERWATER6, MAPSEC_ROUTE_128},
+ {MAPSEC_UNDERWATER_124, MAPSEC_ROUTE_124},
+ {MAPSEC_UNDERWATER_125, MAPSEC_ROUTE_126},
+ {MAPSEC_UNDERWATER_126, MAPSEC_ROUTE_127},
+ {MAPSEC_UNDERWATER_127, MAPSEC_ROUTE_128},
+ {MAPSEC_UNDERWATER_SOOTOPOLIS, MAPSEC_SOOTOPOLIS_CITY},
+ {MAPSEC_UNDERWATER_128, MAPSEC_ROUTE_128},
{MAPSEC_EVIL_TEAM_HIDEOUT, MAPSEC_LILYCOVE_CITY},
- {MAPSEC_UNDERWATER7, MAPSEC_ROUTE_134},
+ {MAPSEC_UNDERWATER_SEALED_CHAMBER, MAPSEC_ROUTE_134},
{MAPSEC_PETALBURG_WOODS, MAPSEC_ROUTE_104},
- {MAPSEC_JAGGED_PASS_1, MAPSEC_ROUTE_112},
+ {MAPSEC_JAGGED_PASS, MAPSEC_ROUTE_112},
{MAPSEC_MT_PYRE, MAPSEC_ROUTE_122},
{MAPSEC_SKY_PILLAR, MAPSEC_ROUTE_131},
- {MAPSEC_NONE, MAPSEC_NONE},
+ {MAPSEC_NOTHING, MAPSEC_NOTHING},
};
static u8 sub_80FAB78(void);
@@ -276,7 +179,7 @@ static u16 GetRegionMapSectionAt(u16, u16);
static void InitializeCursorPosition(void);
static void sub_80FB600(void);
static u16 sub_80FB758(u16);
-static u16 sub_80FB9C0(u16);
+static u16 GetOverworldMapFromUnderwaterMap_(u16);
static void sub_80FBA18(void);
static bool8 sub_80FBAA0(u16);
void CreateRegionMapCursor(u16, u16);
@@ -338,7 +241,7 @@ bool8 sub_80FA940(void)
gRegionMap->unk74 = gRegionMap->cursorPosX;
gRegionMap->unk76 = gRegionMap->cursorPosY;
gRegionMap->unk16 = sub_80FB758(gRegionMap->mapSectionId);
- gRegionMap->mapSectionId = sub_80FB9C0(gRegionMap->mapSectionId);
+ gRegionMap->mapSectionId = GetOverworldMapFromUnderwaterMap_(gRegionMap->mapSectionId);
GetMapSectionName(gRegionMap->mapSectionName, gRegionMap->mapSectionId, 16);
break;
case 6:
@@ -676,7 +579,7 @@ void UpdateRegionMapVideoRegs(void)
}
}
-void sub_80FB2A4(s16 a, s16 b)
+void RegionMapDefaultZoomOffsetPlayerSprite(s16 a, s16 b)
{
CalcZoomScrollParams(a, b, 0x38, 0x48, 0x100, 0x100, 0);
UpdateRegionMapVideoRegs();
@@ -690,7 +593,7 @@ void sub_80FB2A4(s16 a, s16 b)
static u16 GetRegionMapSectionAt(u16 x, u16 y)
{
if (y < MAPCURSOR_Y_MIN || y > MAPCURSOR_Y_MAX || x < MAPCURSOR_X_MIN || x > MAPCURSOR_X_MAX)
- return MAPSEC_NONE;
+ return MAPSEC_NOTHING;
y -= MAPCURSOR_Y_MIN;
x -= MAPCURSOR_X_MIN;
return sRegionMapLayout[x + y * 28];
@@ -729,7 +632,7 @@ static void InitializeCursorPosition(void)
mapHeight = gMapHeader.mapData->height;
x = gSaveBlock1.pos.x;
y = gSaveBlock1.pos.y;
- if (gRegionMap->mapSectionId == MAPSEC_UNDERWATER6)
+ if (gRegionMap->mapSectionId == MAPSEC_UNDERWATER_128)
gRegionMap->playerIsInCave = TRUE;
break;
case 3:
@@ -756,7 +659,7 @@ static void InitializeCursorPosition(void)
struct WarpData *r4;
gRegionMap->mapSectionId = gMapHeader.regionMapSectionId;
- if (gRegionMap->mapSectionId != MAPSEC_UNK_0x57)
+ if (gRegionMap->mapSectionId != MAPSEC_DYNAMIC)
{
r4 = &gSaveBlock1.warp4;
mapHeader = Overworld_GetMapHeaderByGroupAndId(r4->mapGroup, r4->mapNum);
@@ -799,7 +702,7 @@ static void InitializeCursorPosition(void)
x = 0;
break;
case MAPSEC_ROUTE_126:
- case MAPSEC_UNDERWATER2:
+ case MAPSEC_UNDERWATER_125:
x = 0;
if (gSaveBlock1.pos.x > 32)
x = 1;
@@ -880,7 +783,7 @@ static u16 sub_80FB758(u16 mapSectionId)
{
switch (mapSectionId)
{
- case MAPSEC_NONE:
+ case MAPSEC_NOTHING:
return 0;
case MAPSEC_LITTLEROOT_TOWN:
return FlagGet(FLAG_VISITED_LITTLEROOT_TOWN) ? 2 : 3;
@@ -929,21 +832,21 @@ u16 GetRegionMapSectionAt_(u16 x, u16 y)
return GetRegionMapSectionAt(x, y);
}
-static u16 sub_80FB9C0(u16 mapSectionId)
+static u16 GetOverworldMapFromUnderwaterMap_(u16 mapSectionId)
{
u16 i;
- for (i = 0; gUnknown_083E7684[i][0] != MAPSEC_NONE; i++)
+ for (i = 0; sUnderwaterMaps[i][0] != MAPSEC_NOTHING; i++)
{
- if (gUnknown_083E7684[i][0] == mapSectionId)
- return gUnknown_083E7684[i][1];
+ if (sUnderwaterMaps[i][0] == mapSectionId)
+ return sUnderwaterMaps[i][1];
}
return mapSectionId;
}
-u16 sub_80FBA04(u16 mapSectionId)
+u16 GetOverworldMapFromUnderwaterMap(u16 mapSectionId)
{
- return sub_80FB9C0(mapSectionId);
+ return GetOverworldMapFromUnderwaterMap_(mapSectionId);
}
static void sub_80FBA18(void)
@@ -952,7 +855,7 @@ static void sub_80FBA18(void)
u16 y;
u16 i;
- if (gRegionMap->mapSectionId == MAPSEC_NONE)
+ if (gRegionMap->mapSectionId == MAPSEC_NOTHING)
{
gRegionMap->everGrandeCityArea = 0;
return;
@@ -1307,7 +1210,7 @@ const u8 *GetMapSectionName(u8 *dest, u16 mapSectionId, u16 length)
{
if (mapSectionId == MAPSEC_SECRET_BASE)
return GetSecretBaseMapName(dest);
- if (mapSectionId < MAPSEC_NONE)
+ if (mapSectionId < MAPSEC_NOTHING)
return StringCopy(dest, gRegionMapLocations[mapSectionId].regionMapSectionId);
if (length == 0)
length = 18;
@@ -1318,7 +1221,7 @@ const u8 *CopyMapName(u8 *dest, u16 mapSectionId)
{
switch (mapSectionId)
{
- case MAPSEC_UNK_0x57:
+ case MAPSEC_DYNAMIC:
return StringCopy(dest, gOtherText_Ferry);
case MAPSEC_SECRET_BASE:
return StringCopy(dest, gOtherText_SecretBase);
@@ -1438,8 +1341,8 @@ static const struct SpritePalette sFlyTargetIconSpritePalette = {sFlyTargetIcons
static const u16 sSpecialFlyAreas[][2] =
{
// flag, mapSectionId
- {0x848, MAPSEC_BATTLE_TOWER},
- {0xFFFF, MAPSEC_NONE},
+ {FLAG_LANDMARK_BATTLE_TOWER, MAPSEC_BATTLE_TOWER},
+ {0xFFFF, MAPSEC_NOTHING},
};
static const struct OamData sFlyTargetOamData =
@@ -1662,7 +1565,7 @@ static void CreateFlyTargetGraphics(void)
// Draws a light overlay on cities and towns that the player can fly to
static void CreateCityTownFlyTargetIcons(void)
{
- u16 canFlyFlag = 0x80F;
+ u16 canFlyFlag = FLAG_VISITED_LITTLEROOT_TOWN;
u16 i;
for (i = 0; i < 16; i++)
@@ -1704,7 +1607,7 @@ static void CreateSpecialAreaFlyTargetIcons(void)
{
u16 i;
- for (i = 0; sSpecialFlyAreas[i][1] != MAPSEC_NONE; i++)
+ for (i = 0; sSpecialFlyAreas[i][1] != MAPSEC_NOTHING; i++)
{
u16 x;
u16 y;
diff --git a/src/roamer.c b/src/roamer.c
index 459082e42..57dd0745b 100644
--- a/src/roamer.c
+++ b/src/roamer.c
@@ -6,12 +6,6 @@
#include "region_map.h"
#include "constants/species.h"
-#ifdef SAPPHIRE
-#define ROAMER_SPECIES SPECIES_LATIAS
-#else
-#define ROAMER_SPECIES SPECIES_LATIOS
-#endif
-
enum
{
MAP_GRP = 0, // map group
diff --git a/src/tv.c b/src/tv.c
index 7cf549802..87cecbefc 100644
--- a/src/tv.c
+++ b/src/tv.c
@@ -40,7 +40,7 @@
#include "text.h"
#include "ewram.h"
#include "constants/moves.h"
-#include "region_map_sections.h"
+#include "constants/region_map_sections.h"
struct UnkTvStruct
{
@@ -90,31 +90,31 @@ const struct OutbreakPokemon gPokeOutbreakSpeciesList[5] =
.species = SPECIES_SURSKIT,
.moves = {MOVE_BUBBLE, MOVE_QUICK_ATTACK, MOVE_NONE, MOVE_NONE},
.level = 3,
- .location = MAPSEC_Route102,
+ .location = MAPSEC_ROUTE_102,
},
{
.species = SPECIES_SURSKIT,
.moves = {MOVE_BUBBLE, MOVE_QUICK_ATTACK, MOVE_NONE, MOVE_NONE},
.level = 15,
- .location = MAPSEC_Route114,
+ .location = MAPSEC_ROUTE_114,
},
{
.species = SPECIES_SURSKIT,
.moves = {MOVE_BUBBLE, MOVE_QUICK_ATTACK, MOVE_NONE, MOVE_NONE},
.level = 15,
- .location = MAPSEC_Route117,
+ .location = MAPSEC_ROUTE_117,
},
{
.species = SPECIES_SURSKIT,
.moves = {MOVE_BUBBLE, MOVE_QUICK_ATTACK, MOVE_NONE, MOVE_NONE},
.level = 28,
- .location = MAPSEC_Route120,
+ .location = MAPSEC_ROUTE_120,
},
{
.species = SPECIES_SKITTY,
.moves = {MOVE_GROWL, MOVE_TACKLE, MOVE_NONE, MOVE_NONE},
.level = 15,
- .location = MAPSEC_Route116,
+ .location = MAPSEC_ROUTE_116,
},
};