diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2018-04-23 19:38:45 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2018-04-23 19:38:45 -0400 |
commit | 5641a3bfe39fcb8a2babf082a3fca96a193c83d1 (patch) | |
tree | a7213f2ecde5c0ec456aa19b853b02aa064f925d | |
parent | 4e9d76d3052db037bd92870eb6a7e086a566065f (diff) |
through SetAreaHasMon
-rw-r--r-- | asm/pokedex_area_screen.s | 408 | ||||
-rw-r--r-- | include/constants/species.h | 6 | ||||
-rw-r--r-- | include/roamer.h | 2 | ||||
-rw-r--r-- | src/pokedex_area_screen.c | 166 | ||||
-rw-r--r-- | src/roamer.c | 6 |
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 |