summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/pokedex_area_screen.s408
-rw-r--r--include/constants/species.h6
-rw-r--r--include/roamer.h2
-rw-r--r--src/pokedex_area_screen.c166
-rw-r--r--src/roamer.c6
5 files changed, 170 insertions, 418 deletions
diff --git a/asm/pokedex_area_screen.s b/asm/pokedex_area_screen.s
index 9f47d4162..2868cabac 100644
--- a/asm/pokedex_area_screen.s
+++ b/asm/pokedex_area_screen.s
@@ -5,414 +5,6 @@
.text
- thumb_func_start sub_81107DC
-sub_81107DC: @ 81107DC
- push {lr}
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl TransferPlttBuffer
- pop {r0}
- bx r0
- thumb_func_end sub_81107DC
-
- thumb_func_start sub_81107F0
-sub_81107F0: @ 81107F0
- push {lr}
- ldr r0, _08110810 @ =gSharedMem
- ldr r0, [r0]
- bl _call_via_r0
- bl sub_8111110
- bl AnimateSprites
- bl BuildOamBuffer
- bl UpdatePaletteFade
- pop {r0}
- bx r0
- .align 2, 0
-_08110810: .4byte gSharedMem
- thumb_func_end sub_81107F0
-
- thumb_func_start sub_8110814
-sub_8110814: @ 8110814
- ldr r1, _08110820 @ =gSharedMem
- str r0, [r1]
- movs r0, 0
- strh r0, [r1, 0xC]
- bx lr
- .align 2, 0
-_08110820: .4byte gSharedMem
- thumb_func_end sub_8110814
-
- thumb_func_start sub_8110824
-sub_8110824: @ 8110824
- ldr r0, _08110834 @ =gSharedMem
- movs r1, 0x8A
- lsls r1, 1
- adds r0, r1
- movs r1, 0
- strh r1, [r0]
- bx lr
- .align 2, 0
-_08110834: .4byte gSharedMem
- thumb_func_end sub_8110824
-
- thumb_func_start DrawAreaGlow
-DrawAreaGlow: @ 8110838
- push {lr}
- ldr r1, _08110854 @ =gSharedMem
- movs r2, 0x8A
- lsls r2, 1
- adds r0, r1, r2
- ldrh r0, [r0]
- adds r2, r1, 0
- cmp r0, 0x5
- bhi _081108E4
- lsls r0, 2
- ldr r1, _08110858 @ =_0811085C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08110854: .4byte gSharedMem
-_08110858: .4byte _0811085C
- .align 2, 0
-_0811085C:
- .4byte _08110874
- .4byte _08110884
- .4byte _0811088A
- .4byte _0811089C
- .4byte _081108C0
- .4byte _081108D0
-_08110874:
- ldr r0, _08110880 @ =gSharedMem
- ldrh r0, [r0, 0xE]
- bl FindMapsWithMon
- b _081108F0
- .align 2, 0
-_08110880: .4byte gSharedMem
-_08110884:
- bl BuildAreaGlowTilemap
- b _081108F0
-_0811088A:
- ldr r0, _08110894 @ =gUnknown_083F8438
- ldr r1, _08110898 @ =0x0600c000
- bl LZ77UnCompVram
- b _081108F0
- .align 2, 0
-_08110894: .4byte gUnknown_083F8438
-_08110898: .4byte 0x0600c000
-_0811089C:
- ldr r1, _081108B0 @ =0x040000d4
- ldr r0, _081108B4 @ =gSharedMem + 0x116
- str r0, [r1]
- ldr r0, _081108B8 @ =0x0600f000
- str r0, [r1, 0x4]
- ldr r0, _081108BC @ =0x80000280
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- b _081108F0
- .align 2, 0
-_081108B0: .4byte 0x040000d4
-_081108B4: .4byte gSharedMem + 0x116
-_081108B8: .4byte 0x0600f000
-_081108BC: .4byte 0x80000280
-_081108C0:
- ldr r0, _081108CC @ =gUnknown_083F8418
- movs r1, 0
- movs r2, 0x20
- bl LoadPalette
- b _081108F0
- .align 2, 0
-_081108CC: .4byte gUnknown_083F8418
-_081108D0:
- ldr r1, _081108E8 @ =REG_BG0CNT
- ldr r3, _081108EC @ =0x00001e0d
- adds r0, r3, 0
- strh r0, [r1]
- movs r0, 0x8A
- lsls r0, 1
- adds r1, r2, r0
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
-_081108E4:
- movs r0, 0
- b _08110900
- .align 2, 0
-_081108E8: .4byte REG_BG0CNT
-_081108EC: .4byte 0x00001e0d
-_081108F0:
- ldr r1, _08110904 @ =gSharedMem
- movs r2, 0x8A
- lsls r2, 1
- adds r1, r2
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- movs r0, 0x1
-_08110900:
- pop {r1}
- bx r1
- .align 2, 0
-_08110904: .4byte gSharedMem
- thumb_func_end DrawAreaGlow
-
- thumb_func_start FindMapsWithMon
-FindMapsWithMon: @ 8110908
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- lsls r0, 16
- lsrs r7, r0, 16
- .ifdef SAPPHIRE
- ldr r0, _sub_8110908_Latias @ =407
- .else
- @ Latios
- movs r0, 0xCC
- lsls r0, 1
- .endif
- cmp r7, r0
- bne _0811091E
- b _08110A44
-_0811091E:
- ldr r2, _08110988 @ =gSharedMem
- movs r1, 0x88
- lsls r1, 1
- adds r0, r2, r1
- movs r1, 0
- strh r1, [r0]
- movs r3, 0x89
- lsls r3, 1
- adds r0, r2, r3
- strh r1, [r0]
- movs r6, 0
- ldr r1, _0811098C @ =gUnknown_083F856C
-_08110936:
- lsls r0, r6, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r0, r7
- bne _08110942
- b _08110A8C
-_08110942:
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, 0
- beq _08110936
- movs r6, 0
- ldr r4, _08110990 @ =gUnknown_083F856E
- ldrh r0, [r4]
- movs r1, 0xCE
- lsls r1, 1
- cmp r0, r1
- beq _081109D0
- mov r8, r4
- adds r5, r4, 0x4
- mov r9, r1
-_08110960:
- lsls r0, r6, 1
- adds r1, r0, r6
- lsls r2, r1, 1
- mov r3, r8
- adds r1, r2, r3
- adds r3, r0, 0
- ldrh r1, [r1]
- cmp r7, r1
- bne _081109BA
- adds r0, r4, 0x2
- adds r0, r2, r0
- ldrh r0, [r0]
- cmp r0, 0x18
- beq _081109A6
- cmp r0, 0x18
- bgt _08110994
- cmp r0, 0
- beq _0811099A
- b _081109BA
- .align 2, 0
- .ifdef SAPPHIRE
-_sub_8110908_Latias: .4byte 407
- .endif
-_08110988: .4byte gSharedMem
-_0811098C: .4byte gUnknown_083F856C
-_08110990: .4byte gUnknown_083F856E
-_08110994:
- cmp r0, 0x1A
- beq _081109A6
- b _081109BA
-_0811099A:
- adds r0, r2, r5
- ldrh r1, [r0]
- movs r0, 0
- bl SetAreaHasMon
- b _081109BA
-_081109A6:
- adds r1, r3, r6
- lsls r1, 1
- mov r0, r8
- adds r0, 0x2
- adds r0, r1, r0
- ldrh r0, [r0]
- adds r1, r5
- ldrh r1, [r1]
- bl SetSpecialMapHasMon
-_081109BA:
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- ldr r4, _08110A00 @ =gUnknown_083F856E
- lsls r0, r6, 1
- adds r0, r6
- lsls r0, 1
- adds r0, r4
- ldrh r0, [r0]
- cmp r0, r9
- bne _08110960
-_081109D0:
- movs r6, 0
- ldr r1, _08110A04 @ =gWildMonHeaders
- ldrb r0, [r1]
- cmp r0, 0xFF
- beq _08110A8C
-_081109DA:
- lsls r4, r6, 2
- adds r0, r4, r6
- lsls r0, 2
- adds r5, r0, r1
- adds r0, r5, 0
- adds r1, r7, 0
- bl MapHasMon
- lsls r0, 24
- cmp r0, 0
- beq _08110A28
- ldrb r0, [r5]
- cmp r0, 0x18
- beq _08110A18
- cmp r0, 0x18
- bgt _08110A08
- cmp r0, 0
- beq _08110A0E
- b _08110A28
- .align 2, 0
-_08110A00: .4byte gUnknown_083F856E
-_08110A04: .4byte gWildMonHeaders
-_08110A08:
- cmp r0, 0x1A
- beq _08110A18
- b _08110A28
-_08110A0E:
- ldrb r1, [r5, 0x1]
- movs r0, 0
- bl SetAreaHasMon
- b _08110A28
-_08110A18:
- ldr r0, _08110A40 @ =gWildMonHeaders
- adds r1, r4, r6
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1]
- ldrb r1, [r1, 0x1]
- bl SetSpecialMapHasMon
-_08110A28:
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- ldr r1, _08110A40 @ =gWildMonHeaders
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0xFF
- bne _081109DA
- b _08110A8C
- .align 2, 0
-_08110A40: .4byte gWildMonHeaders
-_08110A44:
- ldr r4, _08110A7C @ =gSharedMem
- movs r0, 0x89
- lsls r0, 1
- adds r1, r4, r0
- movs r0, 0
- strh r0, [r1]
- ldr r0, _08110A80 @ =gSaveBlock1 + 0x3144
- ldrb r2, [r0, 0x13]
- cmp r2, 0
- beq _08110A84
- adds r0, r4, 0
- adds r0, 0x10
- adds r1, r4, 0
- adds r1, 0x11
- bl GetRoamerLocation
- ldrb r0, [r4, 0x10]
- ldrb r1, [r4, 0x11]
- bl Overworld_GetMapHeaderByGroupAndId
- ldrb r0, [r0, 0x14]
- strh r0, [r4, 0x12]
- movs r3, 0x88
- lsls r3, 1
- adds r1, r4, r3
- movs r0, 0x1
- strh r0, [r1]
- b _08110A8C
- .align 2, 0
-_08110A7C: .4byte gSharedMem
-_08110A80: .4byte gSaveBlock1 + 0x3144
-_08110A84:
- movs r1, 0x88
- lsls r1, 1
- adds r0, r4, r1
- strh r2, [r0]
-_08110A8C:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end FindMapsWithMon
-
- thumb_func_start SetAreaHasMon
-SetAreaHasMon: @ 8110A98
- push {r4,r5,lr}
- lsls r0, 16
- lsrs r2, r0, 16
- lsls r1, 16
- lsrs r1, 16
- ldr r5, _08110AE0 @ =gSharedMem
- movs r0, 0x88
- lsls r0, 1
- adds r4, r5, r0
- ldrh r0, [r4]
- cmp r0, 0x3F
- bhi _08110AD8
- lsls r0, 2
- adds r0, r5
- strb r2, [r0, 0x10]
- ldrh r0, [r4]
- lsls r0, 2
- adds r0, r5
- strb r1, [r0, 0x11]
- adds r0, r2, 0
- bl Overworld_GetMapHeaderByGroupAndId
- ldrb r0, [r0, 0x14]
- bl sub_80FBA04
- ldrh r1, [r4]
- lsls r1, 2
- adds r1, r5
- strh r0, [r1, 0x12]
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
-_08110AD8:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08110AE0: .4byte gSharedMem
- thumb_func_end SetAreaHasMon
-
thumb_func_start SetSpecialMapHasMon
SetSpecialMapHasMon: @ 8110AE4
push {r4-r6,lr}
diff --git a/include/constants/species.h b/include/constants/species.h
index f698ada14..dc9856081 100644
--- a/include/constants/species.h
+++ b/include/constants/species.h
@@ -447,4 +447,10 @@
#define NUM_SPECIES SPECIES_EGG
+#ifdef SAPPHIRE
+#define ROAMER_SPECIES SPECIES_LATIAS
+#else
+#define ROAMER_SPECIES SPECIES_LATIOS
+#endif
+
#endif // GUARD_CONSTANTS_SPECIES_H
diff --git a/include/roamer.h b/include/roamer.h
index 6f0813eb8..18cb0b4e4 100644
--- a/include/roamer.h
+++ b/include/roamer.h
@@ -15,4 +15,6 @@ void Debug_CreateRoamer(void);
void Debug_GetRoamerLocation(u8 *);
#endif // DEBUG
+void GetRoamerLocation(u8 *mapGroup, u8 *mapNum);
+
#endif // GUARD_ROAMER_H
diff --git a/src/pokedex_area_screen.c b/src/pokedex_area_screen.c
index 020f0e9b2..078ae556a 100644
--- a/src/pokedex_area_screen.c
+++ b/src/pokedex_area_screen.c
@@ -1,6 +1,8 @@
// Includes
#include "global.h"
+#include "constants/species.h"
+#include "constants/maps.h"
#include "ewram.h"
#include "main.h"
#include "palette.h"
@@ -9,17 +11,32 @@
#include "region_map.h"
#include "string_util.h"
#include "text.h"
+#include "wild_encounter.h"
+#include "roamer.h"
+#include "overworld.h"
// Static type declarations
+struct PokedexAreaScreenSubstruct0010
+{
+ u8 mapGroup;
+ u8 mapNum;
+ u16 regionMapSectionId;
+};
+
struct PokedexAreaScreenEwramStruct
{
- u8 filler_0000[4];
+ void (*unk0000)(void);
u32 unk0004;
u32 unk0008;
- u8 filler_000C[2];
+ u16 unk000C;
u16 unk000E;
- u8 filler_0010[0x6d8];
+ struct PokedexAreaScreenSubstruct0010 unk0010[0x40];
+ u16 unk0110;
+ u16 unk0112;
+ u16 unk0114;
+ u8 unk0116[0x500];
+ u8 filler_0616[0xD2];
struct RegionMap unk06E8;
u8 unk0F68[16];
};
@@ -42,12 +59,23 @@ void sub_81107DC(void);
void sub_81107F0(void);
void sub_8110814(void (*func)(void));
void sub_8110824(void);
-void sub_8111084(void);
bool8 DrawAreaGlow(void);
+void FindMapsWithMon(u16 mon);
+void sub_8111084(void);
+void sub_8111110(void);
void sub_8111288(void);
+void BuildAreaGlowTilemap(void);
+bool8 MapHasMon(const struct WildPokemonHeader *header, u16 mon);
+void SetAreaHasMon(u16 mapGroup, u16 mapNum);
+void SetSpecialMapHasMon(u16 mapGroup, u16 mapNum);
// .rodata
+extern const u16 gUnknown_083F8418[];
+extern const u8 gUnknown_083F8438[];
+extern const u16 gUnknown_083F856C[];
+extern const u16 gUnknown_083F856E[][3];
+
// .text
void UnusedPokedexAreaScreen(u16 a0, u32 a1, u32 a2)
@@ -108,3 +136,133 @@ void CB2_UnusedPokedexAreaScreen(void)
}
gMain.state++;
}
+
+void sub_81107DC(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+void sub_81107F0(void)
+{
+ ePokedexAreaScreen.unk0000();
+ sub_8111110();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+void sub_8110814(void (*func)(void))
+{
+ ePokedexAreaScreen.unk0000 = func;
+ ePokedexAreaScreen.unk000C = 0;
+}
+
+void sub_8110824(void)
+{
+ ePokedexAreaScreen.unk0114 = 0;
+}
+
+bool8 DrawAreaGlow(void)
+{
+ switch (ePokedexAreaScreen.unk0114)
+ {
+ case 0:
+ FindMapsWithMon(ePokedexAreaScreen.unk000E);
+ break;
+ case 1:
+ BuildAreaGlowTilemap();
+ break;
+ case 2:
+ LZ77UnCompVram(gUnknown_083F8438, BG_CHAR_ADDR(3));
+ break;
+ case 3:
+ DmaCopy16(3, ePokedexAreaScreen.unk0116, 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;
+ ePokedexAreaScreen.unk0114++;
+ return FALSE;
+ default:
+ return FALSE;
+ }
+ ePokedexAreaScreen.unk0114++;
+ return TRUE;
+}
+
+void FindMapsWithMon(u16 mon)
+{
+ u16 i;
+ struct Roamer *roamer;
+
+ if (mon != ROAMER_SPECIES)
+ {
+ ePokedexAreaScreen.unk0110 = 0;
+ ePokedexAreaScreen.unk0112 = 0;
+ for (i = 0; i < 1; i++)
+ {
+ if (gUnknown_083F856C[i] == mon)
+ return;
+ }
+ for (i = 0; gUnknown_083F856E[i][0] != NUM_SPECIES; i++)
+ {
+ if (mon == gUnknown_083F856E[i][0])
+ {
+ switch (gUnknown_083F856E[i][1])
+ {
+ case MAP_GROUP(PETALBURG_CITY):
+ SetAreaHasMon(gUnknown_083F856E[i][1], gUnknown_083F856E[i][2]);
+ break;
+ case MAP_GROUP(METEOR_FALLS_1F_1R):
+ case MAP_GROUP(SAFARI_ZONE_NORTHWEST):
+ SetSpecialMapHasMon(gUnknown_083F856E[i][1], gUnknown_083F856E[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
+ {
+ ePokedexAreaScreen.unk0112 = 0;
+ roamer = &gSaveBlock1.roamer;
+ if (roamer->active)
+ {
+ GetRoamerLocation(&ePokedexAreaScreen.unk0010[0].mapGroup, &ePokedexAreaScreen.unk0010[0].mapNum);
+ ePokedexAreaScreen.unk0010[0].regionMapSectionId = Overworld_GetMapHeaderByGroupAndId(ePokedexAreaScreen.unk0010[0].mapGroup, ePokedexAreaScreen.unk0010[0].mapNum)->regionMapSectionId;
+ ePokedexAreaScreen.unk0110 = 1;
+ }
+ else
+ ePokedexAreaScreen.unk0110 = 0;
+ }
+}
+
+void SetAreaHasMon(u16 mapGroup, u16 mapNum)
+{
+ if (ePokedexAreaScreen.unk0110 < 0x40)
+ {
+ ePokedexAreaScreen.unk0010[ePokedexAreaScreen.unk0110].mapGroup = mapGroup;
+ ePokedexAreaScreen.unk0010[ePokedexAreaScreen.unk0110].mapNum = mapNum;
+ ePokedexAreaScreen.unk0010[ePokedexAreaScreen.unk0110].regionMapSectionId = sub_80FBA04(Overworld_GetMapHeaderByGroupAndId(mapGroup, mapNum)->regionMapSectionId);
+ ePokedexAreaScreen.unk0110++;
+ }
+}
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