summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/pokedex_area_screen.s170
-rw-r--r--data/pokedex_area_screen.s26
-rw-r--r--include/region_map.h9
-rw-r--r--src/pokedex_area_screen.c85
-rw-r--r--src/region_map.c7
5 files changed, 91 insertions, 206 deletions
diff --git a/asm/pokedex_area_screen.s b/asm/pokedex_area_screen.s
index e74ecc074..a92075a1d 100644
--- a/asm/pokedex_area_screen.s
+++ b/asm/pokedex_area_screen.s
@@ -5,176 +5,6 @@
.text
- thumb_func_start CreateAreaMarkerSprites
-CreateAreaMarkerSprites: @ 8111658
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r0, _08111720 @ =gUnknown_083F858C
- bl LoadSpriteSheet
- ldr r0, _08111724 @ =gUnknown_083F8594
- bl LoadSpritePalette
- movs r5, 0
- movs r1, 0
- ldr r0, _08111728 @ =gSharedMem
- movs r3, 0x89
- lsls r3, 1
- adds r2, r0, r3
- ldrh r7, [r2]
- cmp r5, r7
- bge _0811170C
- adds r6, r0, 0
- mov r8, r2
-_08111680:
- lsls r0, r1, 16
- asrs r4, r0, 16
- lsls r1, r4, 1
- movs r2, 0xC4
- lsls r2, 3
- adds r0, r6, r2
- adds r1, r0
- ldr r2, _0811172C @ =gRegionMapLocations
- movs r3, 0
- ldrsh r0, [r1, r3]
- lsls r0, 3
- adds r0, r2
- ldrb r1, [r0]
- adds r1, 0x1
- lsls r1, 3
- adds r1, 0x4
- ldrb r2, [r0, 0x1]
- lsls r2, 19
- ldrb r3, [r0, 0x2]
- subs r3, 0x1
- lsls r3, 2
- ldrb r0, [r0, 0x3]
- subs r0, 0x1
- lsls r0, 2
- movs r7, 0xE0
- lsls r7, 13
- adds r2, r7
- asrs r2, 16
- adds r1, r3
- adds r2, r0
- ldr r0, _08111730 @ =gSpriteTemplate_83F85A4
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x40
- beq _081116FC
- ldr r0, _08111734 @ =gSprites
- lsls r2, r1, 4
- adds r2, r1
- lsls r2, 2
- adds r2, r0
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r3]
- adds r1, r5, 0
- lsls r0, r1, 16
- movs r3, 0x80
- lsls r3, 9
- adds r0, r3
- lsrs r5, r0, 16
- lsls r1, 16
- asrs r1, 14
- movs r7, 0xCC
- lsls r7, 3
- adds r0, r6, r7
- adds r1, r0
- str r2, [r1]
-_081116FC:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r1, r0, 16
- asrs r0, 16
- mov r2, r8
- ldrh r2, [r2]
- cmp r0, r2
- blt _08111680
-_0811170C:
- ldr r0, _08111728 @ =gSharedMem
- movs r3, 0xDC
- lsls r3, 3
- adds r0, r3
- strh r5, [r0]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08111720: .4byte gUnknown_083F858C
-_08111724: .4byte gUnknown_083F8594
-_08111728: .4byte gSharedMem
-_0811172C: .4byte gRegionMapLocations
-_08111730: .4byte gSpriteTemplate_83F85A4
-_08111734: .4byte gSprites
- thumb_func_end CreateAreaMarkerSprites
-
- thumb_func_start DestroyAreaSprites
-DestroyAreaSprites: @ 8111738
- push {r4-r6,lr}
- movs r0, 0x2
- bl FreeSpriteTilesByTag
- movs r0, 0x2
- bl FreeSpritePaletteByTag
- movs r4, 0
- ldr r1, _081117A4 @ =gSharedMem
- movs r2, 0xDC
- lsls r2, 3
- adds r0, r1, r2
- ldrh r2, [r0]
- cmp r4, r2
- bcs _08111776
- adds r6, r1, 0
- adds r5, r0, 0
-_0811175A:
- lsls r0, r4, 2
- movs r2, 0xCC
- lsls r2, 3
- adds r1, r6, r2
- adds r0, r1
- ldr r0, [r0]
- bl DestroySprite
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- ldrh r0, [r5]
- cmp r4, r0
- bcc _0811175A
-_08111776:
- movs r0, 0x3
- bl FreeSpriteTilesByTag
- movs r0, 0x3
- bl FreeSpritePaletteByTag
- movs r4, 0
- ldr r5, _081117A8 @ =gSharedMem + 0xFA8
-_08111786:
- lsls r0, r4, 2
- adds r0, r5
- ldr r0, [r0]
- cmp r0, 0
- beq _08111794
- bl DestroySprite
-_08111794:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x2
- bls _08111786
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_081117A4: .4byte gSharedMem
-_081117A8: .4byte gSharedMem + 0xFA8
- thumb_func_end DestroyAreaSprites
-
thumb_func_start LoadAreaUnknownGraphics
LoadAreaUnknownGraphics: @ 81117AC
push {lr}
diff --git a/data/pokedex_area_screen.s b/data/pokedex_area_screen.s
index 0742ef5a4..c2fc67ac6 100644
--- a/data/pokedex_area_screen.s
+++ b/data/pokedex_area_screen.s
@@ -4,32 +4,6 @@
.section .rodata
.align 2
-gUnknown_083F858C:: @ 83F858C
- obj_tiles AreaMarkerTiles, 0x80, 2
-
- .align 2
-gUnknown_083F8594:: @ 83F8594
- obj_pal AreaMarkerPalette, 2
-
- .align 2
-gOamData_83F859C:: @ 83F859C
- .2byte 0x0000
- .2byte 0x4000
- .2byte 0x0400
-
- .align 2
-gSpriteTemplate_83F85A4:: @ 83F85A4
- spr_template 2, 2, gOamData_83F859C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
-
- .align 2
-AreaMarkerPalette:
- .incbin "graphics/pokedex/area_marker.gbapal"
-
- .align 2
-AreaMarkerTiles:
- .incbin "graphics/pokedex/area_marker.4bpp"
-
- .align 2
gUnknown_083F865C:: @ 83F865C
obj_pal gAreaUnknownPalette, 3
diff --git a/include/region_map.h b/include/region_map.h
index c84de209b..2977987ef 100644
--- a/include/region_map.h
+++ b/include/region_map.h
@@ -1,6 +1,13 @@
#ifndef GUARD_REGION_MAP_H
#define GUARD_REGION_MAP_H
+struct RegionMapLocation
+{
+ u8 x, y;
+ u8 width, height;
+ const u8 *regionMapSectionId;
+};
+
struct RegionMap
{
u8 mapSectionName[20];
@@ -72,4 +79,6 @@ void CB2_InitFlyRegionMap(void);
void debug_sub_8110F28(void);
u16 GetRegionMapSectionAt_(u16 x, u16 y);
+extern const struct RegionMapLocation gRegionMapLocations[];
+
#endif // GUARD_REGION_MAP_H
diff --git a/src/pokedex_area_screen.c b/src/pokedex_area_screen.c
index 6e16e4e5c..af5c5dd54 100644
--- a/src/pokedex_area_screen.c
+++ b/src/pokedex_area_screen.c
@@ -49,11 +49,12 @@ struct PokedexAreaScreenEwramStruct
u8 unk061F;
u16 unk0620[0x20];
struct Sprite * unk0660[0x20];
- u8 filler_06E0[4];
+ u16 unk06E0;
u8 * unk06E4;
struct RegionMap unk06E8;
u8 unk0F68[16];
- u8 filler_0F78[0x3C];
+ u8 filler_0F78[0x30];
+ struct Sprite * unk0FA8[3];
u8 unk0FB4[0x600];
};
@@ -1193,9 +1194,9 @@ void sub_8111360(void)
void Task_PokedexAreaScreen_0(u8 taskId);
void Task_PokedexAreaScreen_1(u8 taskId);
void CreateAreaMarkerSprites(void);
+void DestroyAreaSprites(void);
void LoadAreaUnknownGraphics(void);
void CreateAreaUnknownSprites(void);
-void DestroyAreaSprites(void);
void ShowPokedexAreaScreen(u16 species, u8 * a1)
{
@@ -1303,3 +1304,81 @@ void Task_PokedexAreaScreen_1(u8 taskId)
}
gTasks[taskId].data[0]++;
}
+
+const u16 AreaMarkerPalette[];
+const u8 AreaMarkerTiles[];
+
+const struct SpriteSheet gUnknown_083F858C = {
+ AreaMarkerTiles, 0x80, 2
+};
+
+const struct SpritePalette gUnknown_083F8594 = {
+ AreaMarkerPalette, 2
+};
+
+const struct OamData gOamData_83F859C = {
+ .size = 1,
+ .priority = 1
+};
+
+const struct SpriteTemplate gSpriteTemplate_83F85A4 = {
+ 2,
+ 2,
+ &gOamData_83F859C,
+ gDummySpriteAnimTable,
+ NULL,
+ gDummySpriteAffineAnimTable,
+ SpriteCallbackDummy
+};
+
+const u16 AreaMarkerPalette[] = INCBIN_U16("graphics/pokedex/area_marker.gbapal");
+const u8 AreaMarkerTiles[] = INCBIN_U8("graphics/pokedex/area_marker.4bpp");
+
+void CreateAreaMarkerSprites(void)
+{
+ s16 i;
+ u8 spriteId;
+ s16 x;
+ s16 y;
+ s16 cnt;
+ s16 mapSecId;
+
+ LoadSpriteSheet(&gUnknown_083F858C);
+ LoadSpritePalette(&gUnknown_083F8594);
+ cnt = 0;
+ for (i = 0; i < gPokedexAreaScreenPtr->unk0112; i++)
+ {
+ mapSecId = gPokedexAreaScreenPtr->unk0620[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(&gSpriteTemplate_83F85A4, x, y, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].invisible = TRUE;
+ gPokedexAreaScreenPtr->unk0660[cnt++] = gSprites + spriteId;
+ }
+ }
+ gPokedexAreaScreenPtr->unk06E0 = cnt;
+}
+
+void DestroyAreaSprites(void)
+{
+ u16 i;
+ FreeSpriteTilesByTag(2);
+ FreeSpritePaletteByTag(2);
+ for (i = 0; i < gPokedexAreaScreenPtr->unk06E0; i++)
+ {
+ DestroySprite(gPokedexAreaScreenPtr->unk0660[i]);
+ }
+ FreeSpriteTilesByTag(3);
+ FreeSpritePaletteByTag(3);
+ for (i = 0; i < 3; i++)
+ {
+ if (gPokedexAreaScreenPtr->unk0FA8[i] != NULL)
+ {
+ DestroySprite(gPokedexAreaScreenPtr->unk0FA8[i]);
+ }
+ }
+}
diff --git a/src/region_map.c b/src/region_map.c
index b4ed2c558..ab7c5c558 100644
--- a/src/region_map.c
+++ b/src/region_map.c
@@ -149,13 +149,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},