through SetAreaHasMon

This commit is contained in:
PikalaxALT 2018-04-23 19:38:45 -04:00
parent 4e9d76d305
commit 5641a3bfe3
5 changed files with 170 additions and 418 deletions

View File

@ -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}

View File

@ -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

View File

@ -15,4 +15,6 @@ void Debug_CreateRoamer(void);
void Debug_GetRoamerLocation(u8 *);
#endif // DEBUG
void GetRoamerLocation(u8 *mapGroup, u8 *mapNum);
#endif // GUARD_ROAMER_H

View File

@ -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++;
}
}

View File

@ -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