From 48407f4c37e39f2792e469ee18ab743b01f84316 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Fri, 14 Jul 2017 17:24:36 -0500 Subject: decompile sub_80FA8EC - sub_80FAB60 --- asm/region_map.s | 318 ---------------------------------------- data/region_map.s | 40 ----- graphics/pokenav/region_map.pal | 226 +--------------------------- ld_script.txt | 2 + src/region_map.c | 155 ++++++++++++++++++++ 5 files changed, 158 insertions(+), 583 deletions(-) create mode 100644 src/region_map.c diff --git a/asm/region_map.s b/asm/region_map.s index 44d6a4e91..d0d073a1b 100644 --- a/asm/region_map.s +++ b/asm/region_map.s @@ -6,324 +6,6 @@ .text - thumb_func_start sub_80FA8EC -sub_80FA8EC: @ 80FA8EC - push {lr} - lsls r1, 24 - lsrs r1, 24 - bl sub_80FA904 -_080FA8F6: - bl sub_80FA940 - lsls r0, 24 - cmp r0, 0 - bne _080FA8F6 - pop {r0} - bx r0 - thumb_func_end sub_80FA8EC - - thumb_func_start sub_80FA904 -sub_80FA904: @ 80FA904 - push {r4,lr} - lsls r1, 24 - lsrs r1, 24 - ldr r3, _080FA928 @ =gUnknown_020388CC - str r0, [r3] - movs r2, 0x79 - adds r2, r0 - mov r12, r2 - movs r2, 0 - mov r4, r12 - strb r2, [r4] - adds r0, 0x78 - strb r1, [r0] - ldr r3, [r3] - cmp r1, 0 - bne _080FA930 - ldr r0, _080FA92C @ =sub_80FAB78 - b _080FA932 - .align 2, 0 -_080FA928: .4byte gUnknown_020388CC -_080FA92C: .4byte sub_80FAB78 -_080FA930: - ldr r0, _080FA93C @ =sub_80FAD04 -_080FA932: - str r0, [r3, 0x18] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080FA93C: .4byte sub_80FAD04 - thumb_func_end sub_80FA904 - - thumb_func_start sub_80FA940 -sub_80FA940: @ 80FA940 - push {r4,r5,lr} - sub sp, 0xC - ldr r0, _080FA95C @ =gUnknown_020388CC - ldr r0, [r0] - adds r0, 0x79 - ldrb r0, [r0] - cmp r0, 0x7 - bls _080FA952 - b _080FAAE2 -_080FA952: - lsls r0, 2 - ldr r1, _080FA960 @ =_080FA964 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080FA95C: .4byte gUnknown_020388CC -_080FA960: .4byte _080FA964 - .align 2, 0 -_080FA964: - .4byte _080FA984 - .4byte _080FA998 - .4byte _080FA9AC - .4byte _080FA9BC - .4byte _080FA9D8 - .4byte _080FA9F4 - .4byte _080FAA38 - .4byte _080FAAB4 -_080FA984: - ldr r0, _080FA990 @ =gUnknown_083E5DA0 - ldr r1, _080FA994 @ =0x06008000 - bl LZ77UnCompVram - b _080FAAF4 - .align 2, 0 -_080FA990: .4byte gUnknown_083E5DA0 -_080FA994: .4byte 0x06008000 -_080FA998: - ldr r0, _080FA9A4 @ =gUnknown_083E6B04 - ldr r1, _080FA9A8 @ =0x0600e000 - bl LZ77UnCompVram - b _080FAAF4 - .align 2, 0 -_080FA9A4: .4byte gUnknown_083E6B04 -_080FA9A8: .4byte 0x0600e000 -_080FA9AC: - ldr r0, _080FA9B8 @ =gUnknown_083E5D60 - movs r1, 0x70 - movs r2, 0x60 - bl LoadPalette - b _080FAAF4 - .align 2, 0 -_080FA9B8: .4byte gUnknown_083E5D60 -_080FA9BC: - ldr r0, _080FA9D0 @ =gUnknown_083E5AF0 - ldr r1, _080FA9D4 @ =gUnknown_020388CC - ldr r1, [r1] - movs r2, 0xC0 - lsls r2, 1 - adds r1, r2 - bl LZ77UnCompWram - b _080FAAF4 - .align 2, 0 -_080FA9D0: .4byte gUnknown_083E5AF0 -_080FA9D4: .4byte gUnknown_020388CC -_080FA9D8: - ldr r0, _080FA9EC @ =gUnknown_083E5B34 - ldr r1, _080FA9F0 @ =gUnknown_020388CC - ldr r1, [r1] - movs r3, 0xA0 - lsls r3, 2 - adds r1, r3 - bl LZ77UnCompWram - b _080FAAF4 - .align 2, 0 -_080FA9EC: .4byte gUnknown_083E5B34 -_080FA9F0: .4byte gUnknown_020388CC -_080FA9F4: - bl sub_80FB32C - ldr r4, _080FAA34 @ =gUnknown_020388CC - ldr r2, [r4] - adds r0, r2, 0 - adds r0, 0x54 - ldrh r1, [r0] - adds r0, 0x20 - strh r1, [r0] - subs r0, 0x1E - ldrh r0, [r0] - adds r1, r2, 0 - adds r1, 0x76 - strh r0, [r1] - ldrh r0, [r2, 0x14] - bl sub_80FB758 - ldr r1, [r4] - strb r0, [r1, 0x16] - ldr r0, [r4] - ldrh r0, [r0, 0x14] - bl sub_80FB9C0 - adds r1, r0, 0 - ldr r0, [r4] - strh r1, [r0, 0x14] - ldrh r1, [r0, 0x14] - movs r2, 0x10 - bl sub_80FBFB4 - b _080FAAF4 - .align 2, 0 -_080FAA34: .4byte gUnknown_020388CC -_080FAA38: - ldr r0, _080FAA60 @ =gUnknown_020388CC - ldr r4, [r0] - adds r0, r4, 0 - adds r0, 0x78 - ldrb r1, [r0] - cmp r1, 0 - bne _080FAA64 - movs r0, 0x80 - lsls r0, 1 - str r0, [sp] - str r0, [sp, 0x4] - str r1, [sp, 0x8] - movs r0, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl sub_80FB170 - b _080FAAF4 - .align 2, 0 -_080FAA60: .4byte gUnknown_020388CC -_080FAA64: - adds r1, r4, 0 - adds r1, 0x54 - ldrh r0, [r1] - lsls r0, 3 - subs r0, 0x34 - adds r2, r4, 0 - adds r2, 0x5C - movs r3, 0 - strh r0, [r2] - movs r5, 0x56 - adds r5, r4 - mov r12, r5 - ldrh r0, [r5] - lsls r0, 3 - subs r0, 0x44 - adds r5, r4, 0 - adds r5, 0x5E - strh r0, [r5] - ldrh r1, [r1] - adds r0, r4, 0 - adds r0, 0x64 - strh r1, [r0] - mov r0, r12 - ldrh r1, [r0] - adds r0, r4, 0 - adds r0, 0x66 - strh r1, [r0] - movs r1, 0 - ldrsh r0, [r2, r1] - movs r2, 0 - ldrsh r1, [r5, r2] - movs r2, 0x80 - str r2, [sp] - str r2, [sp, 0x4] - str r3, [sp, 0x8] - movs r2, 0x38 - movs r3, 0x48 - bl sub_80FB170 - b _080FAAF4 -_080FAAB4: - bl sub_80FBA18 - bl sub_80FB260 - ldr r2, _080FAAE8 @ =gUnknown_020388CC - ldr r0, [r2] - movs r1, 0 - str r1, [r0, 0x1C] - str r1, [r0, 0x20] - adds r0, 0x7A - strb r1, [r0] - ldr r0, [r2] - adds r0, 0x7E - strb r1, [r0] - ldr r1, _080FAAEC @ =REG_BG2CNT - ldr r3, _080FAAF0 @ =0x0000bc8a - adds r0, r3, 0 - strh r0, [r1] - ldr r1, [r2] - adds r1, 0x79 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] -_080FAAE2: - movs r0, 0 - b _080FAB02 - .align 2, 0 -_080FAAE8: .4byte gUnknown_020388CC -_080FAAEC: .4byte REG_BG2CNT -_080FAAF0: .4byte 0x0000bc8a -_080FAAF4: - ldr r0, _080FAB0C @ =gUnknown_020388CC - ldr r1, [r0] - adds r1, 0x79 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - movs r0, 0x1 -_080FAB02: - add sp, 0xC - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080FAB0C: .4byte gUnknown_020388CC - thumb_func_end sub_80FA940 - - thumb_func_start sub_80FAB10 -sub_80FAB10: @ 80FAB10 - push {r4,lr} - ldr r4, _080FAB5C @ =gUnknown_020388CC - ldr r0, [r4] - ldr r0, [r0, 0x1C] - cmp r0, 0 - beq _080FAB34 - bl DestroySprite - ldr r0, [r4] - adds r0, 0x58 - ldrh r0, [r0] - bl FreeSpriteTilesByTag - ldr r0, [r4] - adds r0, 0x5A - ldrh r0, [r0] - bl FreeSpritePaletteByTag -_080FAB34: - ldr r0, [r4] - ldr r0, [r0, 0x20] - cmp r0, 0 - beq _080FAB54 - bl DestroySprite - ldr r0, [r4] - adds r0, 0x70 - ldrh r0, [r0] - bl FreeSpriteTilesByTag - ldr r0, [r4] - adds r0, 0x72 - ldrh r0, [r0] - bl FreeSpritePaletteByTag -_080FAB54: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080FAB5C: .4byte gUnknown_020388CC - thumb_func_end sub_80FAB10 - - thumb_func_start sub_80FAB60 -sub_80FAB60: @ 80FAB60 - push {lr} - ldr r0, _080FAB74 @ =gUnknown_020388CC - ldr r0, [r0] - ldr r0, [r0, 0x18] - bl _call_via_r0 - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_080FAB74: .4byte gUnknown_020388CC - thumb_func_end sub_80FAB60 - thumb_func_start sub_80FAB78 sub_80FAB78: @ 80FAB78 push {r4,lr} diff --git a/data/region_map.s b/data/region_map.s index d4d13f194..ea81477dd 100644 --- a/data/region_map.s +++ b/data/region_map.s @@ -3,46 +3,6 @@ .section .rodata - .align 2 -gPokenavCursor_Pal:: - .incbin "graphics/pokenav/cursor.gbapal" - - .align 2 -gUnknown_083E5AF0:: @ 83E5AF0 - .incbin "graphics/pokenav/cursor_small.4bpp.lz" - - .align 2 -gUnknown_083E5B34:: @ 83E5B34 - .incbin "graphics/pokenav/cursor_large.4bpp.lz" - - .align 2 -gRegionMapBrendanIconPalette:: @ 83E5C20 - .incbin "graphics/pokenav/brendan_icon.gbapal" - - .align 2 -gRegionMapBrendanIconTiles:: @ 83E5C40 - .incbin "graphics/pokenav/brendan_icon.4bpp" - - .align 2 -gRegionMapMayIconPalette:: @ 83E5CC0 - .incbin "graphics/pokenav/may_icon.gbapal" - - .align 2 -gRegionMapMayIconTiles:: @ 83E5CE0 - .incbin "graphics/pokenav/may_icon.4bpp" - - .align 2 -gUnknown_083E5D60:: @ 83E5D60 - .incbin "graphics/pokenav/region_map.gbapal", 0xE0, 0x40 - - .align 2 -gUnknown_083E5DA0:: @ 83E5DA0 - .incbin "graphics/pokenav/region_map.8bpp.lz" - - .align 2 -gUnknown_083E6B04:: @ 83E6B04 - .incbin "graphics/pokenav/region_map_map.bin.lz" - @ 83E6E50 .include "data/region_map_sections.inc" diff --git a/graphics/pokenav/region_map.pal b/graphics/pokenav/region_map.pal index 4fca67ade..78ffc009a 100644 --- a/graphics/pokenav/region_map.pal +++ b/graphics/pokenav/region_map.pal @@ -1,118 +1,6 @@ JASC-PAL 0100 -256 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 +32 0 0 0 156 213 255 164 180 255 @@ -145,115 +33,3 @@ JASC-PAL 0 0 0 0 0 0 0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 diff --git a/ld_script.txt b/ld_script.txt index a51f50947..53acda103 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -199,6 +199,7 @@ SECTIONS { src/script_pokemon_util_80F99CC.o(.text); src/dewford_trend.o(.text); src/heal_location.o(.text); + src/region_map.o(.text); asm/region_map.o(.text); asm/cute_sketch.o(.text); src/decoration.o(.text); @@ -428,6 +429,7 @@ SECTIONS { data/mail.o(.rodata); data/menu_helpers.o(.rodata); src/heal_location.o(.rodata); + src/region_map.o(.rodata); data/region_map.o(.rodata); data/cute_sketch.o(.rodata); src/decoration.o(.rodata); diff --git a/src/region_map.c b/src/region_map.c new file mode 100644 index 000000000..301c3c082 --- /dev/null +++ b/src/region_map.c @@ -0,0 +1,155 @@ +#include "global.h" +#include "palette.h" +#include "sprite.h" + +struct UnknownStruct1 +{ + u8 filler0[0x14]; + u16 unk14; + u8 unk16; + u8 filler17[1]; + u8 (*unk18)(void); + struct Sprite *unk1C; + struct Sprite *unk20; + u8 filler24[0x30]; + u16 unk54; + u16 unk56; + u16 unk58; + u16 unk5A; + s16 unk5C; + s16 unk5E; + u8 filler60[4]; + u16 unk64; + u16 unk66; + u8 filler68[8]; + u16 unk70; + u16 unk72; + u16 unk74; + u16 unk76; + u8 unk78; + u8 unk79; + u8 unk7A; + u8 filler7B[3]; + u8 unk7E; + u8 filler7F[0x101]; + u8 unk180[0x100]; + u8 unk280[0x100]; +}; + +extern struct UnknownStruct1 *gUnknown_020388CC; + +const u16 gPokenavCursor_Pal[] = INCBIN_U16("graphics/pokenav/cursor.gbapal"); +const u8 gUnknown_083E5AF0[] = INCBIN_U8("graphics/pokenav/cursor_small.4bpp.lz"); +const u8 gUnknown_083E5B34[] = INCBIN_U8("graphics/pokenav/cursor_large.4bpp.lz"); +const u16 gRegionMapBrendanIconPalette[] = INCBIN_U16("graphics/pokenav/brendan_icon.gbapal"); +const u8 gRegionMapBrendanIconTiles[] = INCBIN_U8("graphics/pokenav/brendan_icon.4bpp"); +const u16 gRegionMapMayIconPalette[] = INCBIN_U16("graphics/pokenav/may_icon.gbapal"); +const u8 gRegionMapMayIconTiles[] = INCBIN_U8("graphics/pokenav/may_icon.4bpp"); +const u16 gUnknown_083E5D60[] = INCBIN_U16("graphics/pokenav/region_map.gbapal"); +const u8 gUnknown_083E5DA0[] = INCBIN_U8("graphics/pokenav/region_map.8bpp.lz"); +const u8 gUnknown_083E6B04[] = INCBIN_U8("graphics/pokenav/region_map_map.bin.lz"); + +void sub_80FA904(struct UnknownStruct1 *, u8); +bool8 sub_80FA940(void); +u8 sub_80FAB78(void); +u8 sub_80FAD04(void); +void sub_80FB170(); +void sub_80FB260(void); +void sub_80FB32C(void); +u16 sub_80FB758(); +u16 sub_80FB9C0(u16); +void sub_80FBA18(); +void sub_80FBFB4(); + +void sub_80FA8EC(struct UnknownStruct1 *a, u8 b) +{ + sub_80FA904(a, b); + while (sub_80FA940()) + ; +} + +void sub_80FA904(struct UnknownStruct1 *a, u8 b) +{ + gUnknown_020388CC = a; + gUnknown_020388CC->unk79 = 0; + gUnknown_020388CC->unk78 = b; + gUnknown_020388CC->unk18 = (b == 0) ? sub_80FAB78 : sub_80FAD04; +} + +bool8 sub_80FA940(void) +{ + switch (gUnknown_020388CC->unk79) + { + case 0: + LZ77UnCompVram(gUnknown_083E5DA0, (void *)(VRAM + 0x8000)); + break; + case 1: + LZ77UnCompVram(gUnknown_083E6B04, (void *)(VRAM + 0xE000)); + break; + case 2: + LoadPalette(gUnknown_083E5D60, 0x70, 0x60); // Why isn't this the right size? + break; + case 3: + LZ77UnCompWram(gUnknown_083E5AF0, gUnknown_020388CC->unk180); + break; + case 4: + LZ77UnCompWram(gUnknown_083E5B34, gUnknown_020388CC->unk280); + break; + case 5: + sub_80FB32C(); + gUnknown_020388CC->unk74 = gUnknown_020388CC->unk54; + gUnknown_020388CC->unk76 = gUnknown_020388CC->unk56; + gUnknown_020388CC->unk16 = sub_80FB758(gUnknown_020388CC->unk14); + gUnknown_020388CC->unk14 = sub_80FB9C0(gUnknown_020388CC->unk14); + sub_80FBFB4(gUnknown_020388CC, gUnknown_020388CC->unk14, 16); + break; + case 6: + if (gUnknown_020388CC->unk78 == 0) + { + sub_80FB170(0, 0, 0, 0, 0x100, 0x100, 0); + } + else + { + gUnknown_020388CC->unk5C = gUnknown_020388CC->unk54 * 8 - 0x34; + gUnknown_020388CC->unk5E = gUnknown_020388CC->unk56 * 8 - 0x44; + gUnknown_020388CC->unk64 = gUnknown_020388CC->unk54; + gUnknown_020388CC->unk66 = gUnknown_020388CC->unk56; + sub_80FB170(gUnknown_020388CC->unk5C, gUnknown_020388CC->unk5E, 0x38, 0x48, 0x80, 0x80, 0); + } + break; + case 7: + sub_80FBA18(); + sub_80FB260(); + gUnknown_020388CC->unk1C = NULL; + gUnknown_020388CC->unk20 = NULL; + gUnknown_020388CC->unk7A = 0; + gUnknown_020388CC->unk7E = 0; + REG_BG2CNT = 0xBC8A; + gUnknown_020388CC->unk79++; + default: + return FALSE; + } + gUnknown_020388CC->unk79++; + return TRUE; +} + +void sub_80FAB10(void) +{ + if (gUnknown_020388CC->unk1C != NULL) + { + DestroySprite(gUnknown_020388CC->unk1C); + FreeSpriteTilesByTag(gUnknown_020388CC->unk58); + FreeSpritePaletteByTag(gUnknown_020388CC->unk5A); + } + if (gUnknown_020388CC->unk20 != NULL) + { + DestroySprite(gUnknown_020388CC->unk20); + FreeSpriteTilesByTag(gUnknown_020388CC->unk70); + FreeSpritePaletteByTag(gUnknown_020388CC->unk72); + } +} + +u8 sub_80FAB60(void) +{ + return gUnknown_020388CC->unk18(); +} -- cgit v1.2.3 From 9013ffe84a12a8d81d32fb8125687988bd2ba8ca Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Fri, 14 Jul 2017 21:14:00 -0500 Subject: decompile sub_80FAB78 - sub_80FAFC0 --- asm/region_map.s | 812 ------------------------------------------------------- src/region_map.c | 272 ++++++++++++++++++- 2 files changed, 264 insertions(+), 820 deletions(-) diff --git a/asm/region_map.s b/asm/region_map.s index d0d073a1b..ade656aa0 100644 --- a/asm/region_map.s +++ b/asm/region_map.s @@ -6,818 +6,6 @@ .text - thumb_func_start sub_80FAB78 -sub_80FAB78: @ 80FAB78 - push {r4,lr} - movs r4, 0 - ldr r2, _080FAC14 @ =gUnknown_020388CC - ldr r0, [r2] - adds r0, 0x7B - strb r4, [r0] - ldr r0, [r2] - adds r0, 0x7C - strb r4, [r0] - ldr r3, _080FAC18 @ =gMain - ldrh r1, [r3, 0x2C] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _080FABAA - ldr r1, [r2] - adds r0, r1, 0 - adds r0, 0x56 - ldrh r0, [r0] - cmp r0, 0x2 - bls _080FABAA - adds r1, 0x7C - movs r0, 0xFF - strb r0, [r1] - movs r4, 0x1 -_080FABAA: - ldrh r1, [r3, 0x2C] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _080FABC8 - ldr r1, [r2] - adds r0, r1, 0 - adds r0, 0x56 - ldrh r0, [r0] - cmp r0, 0xF - bhi _080FABC8 - adds r1, 0x7C - movs r0, 0x1 - strb r0, [r1] - movs r4, 0x1 -_080FABC8: - ldrh r1, [r3, 0x2C] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _080FABE6 - ldr r1, [r2] - adds r0, r1, 0 - adds r0, 0x54 - ldrh r0, [r0] - cmp r0, 0x1 - bls _080FABE6 - adds r1, 0x7B - movs r0, 0xFF - strb r0, [r1] - movs r4, 0x1 -_080FABE6: - ldrh r1, [r3, 0x2C] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _080FAC04 - ldr r1, [r2] - adds r0, r1, 0 - adds r0, 0x54 - ldrh r0, [r0] - cmp r0, 0x1B - bhi _080FAC04 - adds r1, 0x7B - movs r0, 0x1 - strb r0, [r1] - movs r4, 0x1 -_080FAC04: - ldrh r3, [r3, 0x2E] - movs r0, 0x1 - ands r0, r3 - cmp r0, 0 - beq _080FAC1C - movs r4, 0x4 - b _080FAC26 - .align 2, 0 -_080FAC14: .4byte gUnknown_020388CC -_080FAC18: .4byte gMain -_080FAC1C: - movs r0, 0x2 - ands r0, r3 - cmp r0, 0 - beq _080FAC26 - movs r4, 0x5 -_080FAC26: - cmp r4, 0x1 - bne _080FAC38 - ldr r0, [r2] - adds r0, 0x7A - movs r1, 0x4 - strb r1, [r0] - ldr r1, [r2] - ldr r0, _080FAC40 @ =_swiopen - str r0, [r1, 0x18] -_080FAC38: - adds r0, r4, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080FAC40: .4byte _swiopen - thumb_func_end sub_80FAB78 - - thumb_func_start _swiopen -_swiopen: @ 80FAC44 - push {r4,r5,lr} - ldr r5, _080FAC5C @ =gUnknown_020388CC - ldr r1, [r5] - adds r0, r1, 0 - adds r0, 0x7A - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - cmp r0, 0 - beq _080FAC60 - movs r0, 0x2 - b _080FACFA - .align 2, 0 -_080FAC5C: .4byte gUnknown_020388CC -_080FAC60: - adds r0, r1, 0 - adds r0, 0x7B - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - cmp r0, 0 - ble _080FAC76 - adds r1, 0x54 - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] -_080FAC76: - ldr r1, [r5] - adds r0, r1, 0 - adds r0, 0x7B - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - cmp r0, 0 - bge _080FAC8E - adds r1, 0x54 - ldrh r0, [r1] - subs r0, 0x1 - strh r0, [r1] -_080FAC8E: - ldr r1, [r5] - adds r0, r1, 0 - adds r0, 0x7C - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - cmp r0, 0 - ble _080FACA6 - adds r1, 0x56 - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] -_080FACA6: - ldr r1, [r5] - adds r0, r1, 0 - adds r0, 0x7C - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - cmp r0, 0 - bge _080FACBE - adds r1, 0x56 - ldrh r0, [r1] - subs r0, 0x1 - strh r0, [r1] -_080FACBE: - ldr r1, [r5] - adds r0, r1, 0 - adds r0, 0x54 - ldrh r0, [r0] - adds r1, 0x56 - ldrh r1, [r1] - bl GetRegionMapSectionAt - lsls r0, 16 - lsrs r4, r0, 16 - adds r0, r4, 0 - bl sub_80FB758 - ldr r1, [r5] - strb r0, [r1, 0x16] - ldr r0, [r5] - ldrh r1, [r0, 0x14] - cmp r4, r1 - beq _080FACEE - strh r4, [r0, 0x14] - ldrh r1, [r0, 0x14] - movs r2, 0x10 - bl sub_80FBFB4 -_080FACEE: - bl sub_80FBA18 - ldr r1, [r5] - ldr r0, _080FAD00 @ =sub_80FAB78 - str r0, [r1, 0x18] - movs r0, 0x3 -_080FACFA: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080FAD00: .4byte sub_80FAB78 - thumb_func_end _swiopen - - thumb_func_start sub_80FAD04 -sub_80FAD04: @ 80FAD04 - push {r4-r6,lr} - movs r4, 0 - ldr r3, _080FADD4 @ =gUnknown_020388CC - ldr r0, [r3] - mov r12, r0 - adds r0, 0x6A - strh r4, [r0] - mov r5, r12 - adds r5, 0x68 - strh r4, [r5] - ldr r2, _080FADD8 @ =gMain - ldrh r1, [r2, 0x2C] - movs r0, 0x40 - ands r0, r1 - adds r6, r3, 0 - adds r3, r2, 0 - cmp r0, 0 - beq _080FAD3E - mov r0, r12 - adds r0, 0x5E - movs r2, 0 - ldrsh r1, [r0, r2] - movs r0, 0x34 - negs r0, r0 - cmp r1, r0 - ble _080FAD3E - ldr r0, _080FADDC @ =0x0000ffff - strh r0, [r5] - movs r4, 0x1 -_080FAD3E: - ldrh r1, [r3, 0x2C] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _080FAD5E - ldr r1, [r6] - adds r0, r1, 0 - adds r0, 0x5E - movs r5, 0 - ldrsh r0, [r0, r5] - cmp r0, 0x3B - bgt _080FAD5E - adds r1, 0x68 - movs r0, 0x1 - strh r0, [r1] - movs r4, 0x1 -_080FAD5E: - ldrh r1, [r3, 0x2C] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _080FAD84 - ldr r2, [r6] - adds r0, r2, 0 - adds r0, 0x5C - movs r5, 0 - ldrsh r1, [r0, r5] - movs r0, 0x2C - negs r0, r0 - cmp r1, r0 - ble _080FAD84 - adds r1, r2, 0 - adds r1, 0x6A - ldr r0, _080FADDC @ =0x0000ffff - strh r0, [r1] - movs r4, 0x1 -_080FAD84: - ldrh r1, [r3, 0x2C] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _080FADA4 - ldr r1, [r6] - adds r0, r1, 0 - adds r0, 0x5C - movs r2, 0 - ldrsh r0, [r0, r2] - cmp r0, 0xAB - bgt _080FADA4 - adds r1, 0x6A - movs r0, 0x1 - strh r0, [r1] - movs r4, 0x1 -_080FADA4: - ldrh r2, [r3, 0x2E] - movs r0, 0x1 - ands r0, r2 - cmp r0, 0 - beq _080FADB0 - movs r4, 0x4 -_080FADB0: - movs r0, 0x2 - ands r0, r2 - cmp r0, 0 - beq _080FADBA - movs r4, 0x5 -_080FADBA: - cmp r4, 0x1 - bne _080FADCA - ldr r0, [r6] - ldr r1, _080FADE0 @ =sub_80FADE4 - str r1, [r0, 0x18] - adds r0, 0x6C - movs r1, 0 - strh r1, [r0] -_080FADCA: - adds r0, r4, 0 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080FADD4: .4byte gUnknown_020388CC -_080FADD8: .4byte gMain -_080FADDC: .4byte 0x0000ffff -_080FADE0: .4byte sub_80FADE4 - thumb_func_end sub_80FAD04 - - thumb_func_start sub_80FADE4 -sub_80FADE4: @ 80FADE4 - push {r4,r5,lr} - ldr r5, _080FAEB4 @ =gUnknown_020388CC - ldr r2, [r5] - adds r3, r2, 0 - adds r3, 0x5E - adds r0, r2, 0 - adds r0, 0x68 - ldrh r0, [r0] - ldrh r1, [r3] - adds r0, r1 - strh r0, [r3] - adds r1, r2, 0 - adds r1, 0x5C - adds r0, r2, 0 - adds r0, 0x6A - ldrh r0, [r0] - ldrh r2, [r1] - adds r0, r2 - strh r0, [r1] - movs r4, 0 - ldrsh r0, [r1, r4] - movs r2, 0 - ldrsh r1, [r3, r2] - bl sub_80FB238 - ldr r2, [r5] - adds r1, r2, 0 - adds r1, 0x6C - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x8 - bne _080FAEBC - adds r0, r2, 0 - adds r0, 0x5C - movs r3, 0 - ldrsh r1, [r0, r3] - adds r0, r1, 0 - adds r0, 0x2C - cmp r0, 0 - bge _080FAE3C - adds r0, 0x7 -_080FAE3C: - asrs r0, 3 - adds r0, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - adds r0, r2, 0 - adds r0, 0x5E - movs r4, 0 - ldrsh r1, [r0, r4] - adds r0, r1, 0 - adds r0, 0x34 - cmp r0, 0 - bge _080FAE56 - adds r0, 0x7 -_080FAE56: - asrs r0, 3 - adds r0, 0x2 - lsls r0, 16 - lsrs r1, r0, 16 - adds r4, r2, 0 - adds r4, 0x64 - adds r0, r2, 0 - adds r0, 0x66 - ldrh r2, [r4] - cmp r3, r2 - bne _080FAE72 - ldrh r2, [r0] - cmp r1, r2 - beq _080FAEA0 -_080FAE72: - strh r3, [r4] - strh r1, [r0] - adds r0, r3, 0 - bl GetRegionMapSectionAt - lsls r0, 16 - lsrs r4, r0, 16 - adds r0, r4, 0 - bl sub_80FB758 - ldr r1, [r5] - strb r0, [r1, 0x16] - ldr r0, [r5] - ldrh r3, [r0, 0x14] - cmp r4, r3 - beq _080FAE9C - strh r4, [r0, 0x14] - ldrh r1, [r0, 0x14] - movs r2, 0x10 - bl sub_80FBFB4 -_080FAE9C: - bl sub_80FBA18 -_080FAEA0: - ldr r0, _080FAEB4 @ =gUnknown_020388CC - ldr r2, [r0] - adds r1, r2, 0 - adds r1, 0x6C - movs r0, 0 - strh r0, [r1] - ldr r0, _080FAEB8 @ =sub_80FAD04 - str r0, [r2, 0x18] - movs r0, 0x3 - b _080FAEBE - .align 2, 0 -_080FAEB4: .4byte gUnknown_020388CC -_080FAEB8: .4byte sub_80FAD04 -_080FAEBC: - movs r0, 0x2 -_080FAEBE: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80FADE4 - - thumb_func_start sub_80FAEC4 -sub_80FAEC4: @ 80FAEC4 - push {r4-r6,lr} - ldr r1, _080FAF40 @ =gUnknown_020388CC - ldr r2, [r1] - adds r0, r2, 0 - adds r0, 0x78 - ldrb r3, [r0] - adds r5, r1, 0 - cmp r3, 0 - bne _080FAF48 - subs r0, 0x1A - strh r3, [r0] - subs r0, 0x2 - strh r3, [r0] - str r3, [r2, 0x40] - str r3, [r2, 0x3C] - adds r4, r2, 0 - adds r4, 0x54 - ldrh r0, [r4] - lsls r0, 3 - subs r0, 0x34 - adds r1, r2, 0 - adds r1, 0x60 - strh r0, [r1] - movs r0, 0x56 - adds r0, r2 - mov r12, r0 - ldrh r0, [r0] - lsls r0, 3 - subs r0, 0x44 - adds r3, r2, 0 - adds r3, 0x62 - strh r0, [r3] - movs r6, 0 - ldrsh r0, [r1, r6] - lsls r0, 8 - cmp r0, 0 - bge _080FAF10 - adds r0, 0xF -_080FAF10: - asrs r0, 4 - str r0, [r2, 0x44] - movs r1, 0 - ldrsh r0, [r3, r1] - lsls r0, 8 - cmp r0, 0 - bge _080FAF20 - adds r0, 0xF -_080FAF20: - asrs r0, 4 - str r0, [r2, 0x48] - ldrh r1, [r4] - adds r0, r2, 0 - adds r0, 0x64 - strh r1, [r0] - mov r3, r12 - ldrh r0, [r3] - adds r1, r2, 0 - adds r1, 0x66 - strh r0, [r1] - movs r0, 0x80 - lsls r0, 9 - str r0, [r2, 0x4C] - ldr r0, _080FAF44 @ =0xfffff800 - b _080FAFA6 - .align 2, 0 -_080FAF40: .4byte gUnknown_020388CC -_080FAF44: .4byte 0xfffff800 -_080FAF48: - adds r0, r2, 0 - adds r0, 0x5C - movs r6, 0 - ldrsh r0, [r0, r6] - lsls r0, 8 - str r0, [r2, 0x3C] - adds r0, r2, 0 - adds r0, 0x5E - movs r1, 0 - ldrsh r0, [r0, r1] - lsls r0, 8 - str r0, [r2, 0x40] - adds r0, r2, 0 - adds r0, 0x60 - movs r1, 0 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - ldr r0, [r2, 0x3C] - cmp r0, 0 - bge _080FAF74 - adds r0, 0xF -_080FAF74: - asrs r0, 4 - negs r0, r0 - str r0, [r2, 0x44] - ldr r0, [r2, 0x40] - cmp r0, 0 - bge _080FAF82 - adds r0, 0xF -_080FAF82: - asrs r0, 4 - negs r0, r0 - str r0, [r2, 0x48] - adds r0, r2, 0 - adds r0, 0x64 - ldrh r1, [r0] - subs r0, 0x10 - strh r1, [r0] - adds r0, 0x12 - ldrh r0, [r0] - adds r1, r2, 0 - adds r1, 0x56 - strh r0, [r1] - movs r0, 0x80 - lsls r0, 8 - str r0, [r2, 0x4C] - movs r0, 0x80 - lsls r0, 4 -_080FAFA6: - str r0, [r2, 0x50] - ldr r0, [r5] - adds r0, 0x6E - movs r1, 0 - strh r1, [r0] - bl sub_80FBCA0 - bl sub_80FBDF8 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_80FAEC4 - - thumb_func_start sub_80FAFC0 -sub_80FAFC0: @ 80FAFC0 - push {r4-r6,lr} - sub sp, 0xC - ldr r0, _080FAFD8 @ =gUnknown_020388CC - ldr r3, [r0] - adds r2, r3, 0 - adds r2, 0x6E - ldrh r1, [r2] - adds r5, r0, 0 - cmp r1, 0xF - bls _080FAFDC - movs r0, 0 - b _080FB164 - .align 2, 0 -_080FAFD8: .4byte gUnknown_020388CC -_080FAFDC: - adds r0, r1, 0x1 - movs r1, 0 - strh r0, [r2] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x10 - bne _080FB050 - str r1, [r3, 0x44] - str r1, [r3, 0x48] - adds r0, r3, 0 - adds r0, 0x60 - ldrh r1, [r0] - subs r0, 0x4 - strh r1, [r0] - adds r0, 0x6 - ldrh r0, [r0] - adds r1, r3, 0 - adds r1, 0x5E - strh r0, [r1] - adds r1, 0x1A - ldrb r0, [r1] - movs r2, 0x80 - lsls r2, 9 - cmp r0, 0 - bne _080FB012 - movs r2, 0x80 - lsls r2, 8 -_080FB012: - str r2, [r3, 0x4C] - movs r2, 0 - ldrb r0, [r1] - cmp r0, 0 - bne _080FB01E - movs r2, 0x1 -_080FB01E: - strb r2, [r1] - ldr r1, [r5] - adds r0, r1, 0 - adds r0, 0x78 - ldrb r0, [r0] - ldr r2, _080FB048 @ =sub_80FAD04 - cmp r0, 0 - bne _080FB030 - ldr r2, _080FB04C @ =sub_80FAB78 -_080FB030: - str r2, [r1, 0x18] - adds r0, r1, 0 - adds r0, 0x58 - ldrh r0, [r0] - adds r1, 0x5A - ldrh r1, [r1] - bl sub_80FBB3C - bl sub_80FBE24 - movs r4, 0 - b _080FB132 - .align 2, 0 -_080FB048: .4byte sub_80FAD04 -_080FB04C: .4byte sub_80FAB78 -_080FB050: - ldr r2, [r3, 0x3C] - ldr r0, [r3, 0x44] - adds r2, r0 - str r2, [r3, 0x3C] - ldr r0, [r3, 0x40] - ldr r1, [r3, 0x48] - adds r0, r1 - str r0, [r3, 0x40] - asrs r2, 8 - adds r4, r3, 0 - adds r4, 0x5C - strh r2, [r4] - ldr r0, [r3, 0x40] - asrs r0, 8 - adds r1, r3, 0 - adds r1, 0x5E - strh r0, [r1] - ldr r0, [r3, 0x4C] - ldr r1, [r3, 0x50] - adds r0, r1 - str r0, [r3, 0x4C] - ldr r2, [r3, 0x44] - cmp r2, 0 - bge _080FB090 - adds r0, r3, 0 - adds r0, 0x60 - movs r6, 0 - ldrsh r1, [r4, r6] - movs r6, 0 - ldrsh r0, [r0, r6] - cmp r1, r0 - blt _080FB0A4 -_080FB090: - cmp r2, 0 - ble _080FB0B4 - adds r0, r3, 0 - adds r0, 0x60 - movs r2, 0 - ldrsh r1, [r4, r2] - movs r6, 0 - ldrsh r0, [r0, r6] - cmp r1, r0 - ble _080FB0B4 -_080FB0A4: - ldr r3, [r5] - adds r0, r3, 0 - adds r0, 0x60 - ldrh r2, [r0] - subs r0, 0x4 - movs r1, 0 - strh r2, [r0] - str r1, [r3, 0x44] -_080FB0B4: - ldr r2, [r5] - ldr r4, [r2, 0x48] - cmp r4, 0 - bge _080FB0D0 - adds r0, r2, 0 - adds r0, 0x5E - adds r3, r2, 0 - adds r3, 0x62 - movs r6, 0 - ldrsh r1, [r0, r6] - movs r6, 0 - ldrsh r0, [r3, r6] - cmp r1, r0 - blt _080FB0E8 -_080FB0D0: - cmp r4, 0 - ble _080FB0FA - adds r1, r2, 0 - adds r1, 0x5E - adds r0, r2, 0 - adds r0, 0x62 - movs r2, 0 - ldrsh r1, [r1, r2] - movs r6, 0 - ldrsh r0, [r0, r6] - cmp r1, r0 - ble _080FB0FA -_080FB0E8: - ldr r2, [r5] - adds r0, r2, 0 - adds r0, 0x62 - ldrh r1, [r0] - adds r3, r2, 0 - adds r3, 0x5E - movs r0, 0 - strh r1, [r3] - str r0, [r2, 0x48] -_080FB0FA: - ldr r0, _080FB118 @ =gUnknown_020388CC - ldr r2, [r0] - adds r0, r2, 0 - adds r0, 0x78 - ldrb r3, [r0] - cmp r3, 0 - bne _080FB120 - ldr r1, [r2, 0x4C] - ldr r0, _080FB11C @ =0x00007fff - cmp r1, r0 - bgt _080FB130 - adds r0, 0x1 - str r0, [r2, 0x4C] - str r3, [r2, 0x50] - b _080FB130 - .align 2, 0 -_080FB118: .4byte gUnknown_020388CC -_080FB11C: .4byte 0x00007fff -_080FB120: - ldr r0, [r2, 0x4C] - movs r1, 0x80 - lsls r1, 9 - cmp r0, r1 - ble _080FB130 - str r1, [r2, 0x4C] - movs r0, 0 - str r0, [r2, 0x50] -_080FB130: - movs r4, 0x1 -_080FB132: - ldr r0, _080FB16C @ =gUnknown_020388CC - ldr r3, [r0] - adds r0, r3, 0 - adds r0, 0x5C - movs r1, 0 - ldrsh r0, [r0, r1] - adds r1, r3, 0 - adds r1, 0x5E - movs r2, 0 - ldrsh r1, [r1, r2] - ldr r2, [r3, 0x4C] - lsls r2, 8 - lsrs r2, 16 - str r2, [sp] - ldr r2, [r3, 0x4C] - lsls r2, 8 - lsrs r2, 16 - str r2, [sp, 0x4] - movs r2, 0 - str r2, [sp, 0x8] - movs r2, 0x38 - movs r3, 0x48 - bl sub_80FB170 - adds r0, r4, 0 -_080FB164: - add sp, 0xC - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080FB16C: .4byte gUnknown_020388CC - thumb_func_end sub_80FAFC0 - thumb_func_start sub_80FB170 sub_80FB170: @ 80FB170 push {r4-r7,lr} diff --git a/src/region_map.c b/src/region_map.c index 301c3c082..0a50da51e 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -1,4 +1,5 @@ #include "global.h" +#include "main.h" #include "palette.h" #include "sprite.h" @@ -11,25 +12,37 @@ struct UnknownStruct1 u8 (*unk18)(void); struct Sprite *unk1C; struct Sprite *unk20; - u8 filler24[0x30]; - u16 unk54; - u16 unk56; + u8 filler24[0x18]; + s32 unk3C; + s32 unk40; + s32 unk44; + s32 unk48; + s32 unk4C; + u32 unk50; + u16 unk54; // cursor x + u16 unk56; // cursor y u16 unk58; u16 unk5A; s16 unk5C; s16 unk5E; - u8 filler60[4]; + s16 unk60; + s16 unk62; u16 unk64; u16 unk66; - u8 filler68[8]; + u16 unk68; + u16 unk6A; + u16 unk6C; + u16 unk6E; u16 unk70; u16 unk72; u16 unk74; u16 unk76; u8 unk78; u8 unk79; - u8 unk7A; - u8 filler7B[3]; + s8 unk7A; + s8 unk7B; // movement delta horizontal + s8 unk7C; // movement delta vertical + u8 unk7D; u8 unk7E; u8 filler7F[0x101]; u8 unk180[0x100]; @@ -52,13 +65,21 @@ const u8 gUnknown_083E6B04[] = INCBIN_U8("graphics/pokenav/region_map_map.bin.lz void sub_80FA904(struct UnknownStruct1 *, u8); bool8 sub_80FA940(void); u8 sub_80FAB78(void); +u8 _swiopen(void); u8 sub_80FAD04(void); -void sub_80FB170(); +u8 sub_80FADE4(void); +void sub_80FB170(int, int, int, int, u16, u16, int); +void sub_80FB238(); void sub_80FB260(void); +u16 GetRegionMapSectionAt(); void sub_80FB32C(void); u16 sub_80FB758(); u16 sub_80FB9C0(u16); void sub_80FBA18(); +void sub_80FBB3C(); +void sub_80FBCA0(void); +void sub_80FBDF8(void); +void sub_80FBE24(void); void sub_80FBFB4(); void sub_80FA8EC(struct UnknownStruct1 *a, u8 b) @@ -153,3 +174,238 @@ u8 sub_80FAB60(void) { return gUnknown_020388CC->unk18(); } + +u8 sub_80FAB78(void) +{ + u8 r4 = 0; + + gUnknown_020388CC->unk7B = 0; + gUnknown_020388CC->unk7C = 0; + if ((gMain.heldKeys & DPAD_UP) && gUnknown_020388CC->unk56 > 2) + { + gUnknown_020388CC->unk7C = -1; + r4 = 1; + } + if ((gMain.heldKeys & DPAD_DOWN) && gUnknown_020388CC->unk56 < 16) + { + gUnknown_020388CC->unk7C = 1; + r4 = 1; + } + if ((gMain.heldKeys & DPAD_LEFT) && gUnknown_020388CC->unk54 > 1) + { + gUnknown_020388CC->unk7B = -1; + r4 = 1; + } + if ((gMain.heldKeys & DPAD_RIGHT) && gUnknown_020388CC->unk54 < 0x1C) + { + gUnknown_020388CC->unk7B = 1; + r4 = 1; + } + if (gMain.newKeys & A_BUTTON) + r4 = 4; + else if (gMain.newKeys & B_BUTTON) + r4 = 5; + if (r4 == 1) + { + gUnknown_020388CC->unk7A = 4; + gUnknown_020388CC->unk18 = _swiopen; + } + return r4; +} + +u8 _swiopen(void) +{ + u16 r4; + + if (gUnknown_020388CC->unk7A != 0) + return 2; + + if (gUnknown_020388CC->unk7B > 0) + gUnknown_020388CC->unk54++; + + if (gUnknown_020388CC->unk7B < 0) + gUnknown_020388CC->unk54--; + + if (gUnknown_020388CC->unk7C > 0) + gUnknown_020388CC->unk56++; + + if (gUnknown_020388CC->unk7C < 0) + gUnknown_020388CC->unk56--; + + r4 = GetRegionMapSectionAt(gUnknown_020388CC->unk54, gUnknown_020388CC->unk56); + gUnknown_020388CC->unk16 = sub_80FB758(r4); + if (r4 != gUnknown_020388CC->unk14) + { + gUnknown_020388CC->unk14 = r4; + sub_80FBFB4(gUnknown_020388CC, gUnknown_020388CC->unk14, 16); + } + sub_80FBA18(); + gUnknown_020388CC->unk18 = sub_80FAB78; + return 3; +} + +u8 sub_80FAD04(void) +{ + u8 r4 = 0; + gUnknown_020388CC->unk6A = 0; + gUnknown_020388CC->unk68 = 0; + if ((gMain.heldKeys & 0x40) && gUnknown_020388CC->unk5E > -0x34) + { + gUnknown_020388CC->unk68 = -1; + r4 = 1; + } + if ((gMain.heldKeys & 0x80) && gUnknown_020388CC->unk5E < 0x3C) + { + gUnknown_020388CC->unk68 = 1; + r4 = 1; + } + if ((gMain.heldKeys & 0x20) && gUnknown_020388CC->unk5C > -0x2C) + { + gUnknown_020388CC->unk6A = -1; + r4 = 1; + } + if ((gMain.heldKeys & 0x10) && gUnknown_020388CC->unk5C < 0xAC) + { + gUnknown_020388CC->unk6A = 1; + r4 = 1; + } + if (gMain.newKeys & A_BUTTON) + r4 = 4; + if (gMain.newKeys & B_BUTTON) + r4 = 5; + if (r4 == 1) + { + gUnknown_020388CC->unk18 = sub_80FADE4; + gUnknown_020388CC->unk6C = 0; + } + return r4; +} + +u8 sub_80FADE4(void) +{ + gUnknown_020388CC->unk5E += gUnknown_020388CC->unk68; + gUnknown_020388CC->unk5C += gUnknown_020388CC->unk6A; + sub_80FB238(gUnknown_020388CC->unk5C, gUnknown_020388CC->unk5E); + gUnknown_020388CC->unk6C++; + if (gUnknown_020388CC->unk6C == 8) + { + u16 r3 = (gUnknown_020388CC->unk5C + 0x2C) / 8 + 1; + u16 r1 = (gUnknown_020388CC->unk5E + 0x34) / 8 + 2; + + if (r3 != gUnknown_020388CC->unk64 || r1 != gUnknown_020388CC->unk66) + { + u16 r4; + + gUnknown_020388CC->unk64 = r3; + gUnknown_020388CC->unk66 = r1; + r4 = GetRegionMapSectionAt(r3, r1); + gUnknown_020388CC->unk16 = sub_80FB758(r4); + if (r4 != gUnknown_020388CC->unk14) + { + gUnknown_020388CC->unk14 = r4; + sub_80FBFB4(gUnknown_020388CC, gUnknown_020388CC->unk14, 16); + } + sub_80FBA18(); + } + gUnknown_020388CC->unk6C = 0; + gUnknown_020388CC->unk18 = sub_80FAD04; + return 3; + } + return 2; +} + +void sub_80FAEC4(void) +{ + if (gUnknown_020388CC->unk78 == 0) + { + gUnknown_020388CC->unk5E = 0; + gUnknown_020388CC->unk5C = 0; + gUnknown_020388CC->unk40 = 0; + gUnknown_020388CC->unk3C = 0; + gUnknown_020388CC->unk60 = gUnknown_020388CC->unk54 * 8 - 0x34; + gUnknown_020388CC->unk62 = gUnknown_020388CC->unk56 * 8 - 0x44; + gUnknown_020388CC->unk44 = (gUnknown_020388CC->unk60 << 8) / 16; + gUnknown_020388CC->unk48 = (gUnknown_020388CC->unk62 << 8) / 16; + gUnknown_020388CC->unk64 = gUnknown_020388CC->unk54; + gUnknown_020388CC->unk66 = gUnknown_020388CC->unk56; + gUnknown_020388CC->unk4C = 0x10000; + gUnknown_020388CC->unk50 = -0x800; + } + else + { + gUnknown_020388CC->unk3C = gUnknown_020388CC->unk5C * 256; + gUnknown_020388CC->unk40 = gUnknown_020388CC->unk5E * 256; + gUnknown_020388CC->unk60 = 0; + gUnknown_020388CC->unk62 = 0; + gUnknown_020388CC->unk44 = -(gUnknown_020388CC->unk3C / 16); + gUnknown_020388CC->unk48 = -(gUnknown_020388CC->unk40 / 16); + gUnknown_020388CC->unk54 = gUnknown_020388CC->unk64; + gUnknown_020388CC->unk56 = gUnknown_020388CC->unk66; + gUnknown_020388CC->unk4C = 0x8000; + gUnknown_020388CC->unk50 = 0x800; + } + gUnknown_020388CC->unk6E = 0; + sub_80FBCA0(); + sub_80FBDF8(); +} + +u8 sub_80FAFC0(void) +{ + u8 r4; + + if (gUnknown_020388CC->unk6E > 15) + return 0; + gUnknown_020388CC->unk6E++; + if (gUnknown_020388CC->unk6E == 16) + { + gUnknown_020388CC->unk44 = 0; + gUnknown_020388CC->unk48 = 0; + gUnknown_020388CC->unk5C = gUnknown_020388CC->unk60; + gUnknown_020388CC->unk5E = gUnknown_020388CC->unk62; + gUnknown_020388CC->unk4C = (gUnknown_020388CC->unk78 == 0) ? 0x8000 : 0x10000; + gUnknown_020388CC->unk78 = (gUnknown_020388CC->unk78 == 0) ? 1 : 0; + gUnknown_020388CC->unk18 = (gUnknown_020388CC->unk78 == 0) ? sub_80FAB78 : sub_80FAD04; + sub_80FBB3C(gUnknown_020388CC->unk58, gUnknown_020388CC->unk5A); + sub_80FBE24(); + r4 = 0; + } + else + { + gUnknown_020388CC->unk3C += gUnknown_020388CC->unk44; + gUnknown_020388CC->unk40 += gUnknown_020388CC->unk48; + gUnknown_020388CC->unk5C = gUnknown_020388CC->unk3C >> 8; + gUnknown_020388CC->unk5E = gUnknown_020388CC->unk40 >> 8; + gUnknown_020388CC->unk4C += gUnknown_020388CC->unk50; + if ((gUnknown_020388CC->unk44 < 0 && gUnknown_020388CC->unk5C < gUnknown_020388CC->unk60) + || (gUnknown_020388CC->unk44 > 0 && gUnknown_020388CC->unk5C > gUnknown_020388CC->unk60)) + { + gUnknown_020388CC->unk5C = gUnknown_020388CC->unk60; + gUnknown_020388CC->unk44 = 0; + } + if ((gUnknown_020388CC->unk48 < 0 && gUnknown_020388CC->unk5E < gUnknown_020388CC->unk62) + || (gUnknown_020388CC->unk48 > 0 && gUnknown_020388CC->unk5E > gUnknown_020388CC->unk62)) + { + gUnknown_020388CC->unk5E = gUnknown_020388CC->unk62; + gUnknown_020388CC->unk48 = 0; + } + if (gUnknown_020388CC->unk78 == 0) + { + if (gUnknown_020388CC->unk4C < 0x8000) + { + gUnknown_020388CC->unk4C = 0x8000; + gUnknown_020388CC->unk50 = 0; + } + } + else + { + if (gUnknown_020388CC->unk4C > 0x10000) + { + gUnknown_020388CC->unk4C = 0x10000; + gUnknown_020388CC->unk50 = 0; + } + } + r4 = 1; + } + sub_80FB170(gUnknown_020388CC->unk5C, gUnknown_020388CC->unk5E, 0x38, 0x48, gUnknown_020388CC->unk4C >> 8, gUnknown_020388CC->unk4C >> 8, 0); + return r4; +} -- cgit v1.2.3 From 563d7591e46475e5429ef594b6058de7451f9ed4 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 15 Jul 2017 01:45:56 -0500 Subject: decompile sub_80FB170 - sub_80FB32C --- asm/region_map.s | 603 --------------------------------------- data-de/region_map_locations.inc | 327 --------------------- data/region_map.s | 5 +- data/region_map_locations.inc | 327 --------------------- data/region_map_sections.inc | 16 -- src/data/region_map_names_de.h | 79 +++++ src/data/region_map_names_en.h | 79 +++++ src/region_map.c | 330 ++++++++++++++++++++- 8 files changed, 484 insertions(+), 1282 deletions(-) delete mode 100644 data-de/region_map_locations.inc delete mode 100644 data/region_map_locations.inc delete mode 100644 data/region_map_sections.inc create mode 100644 src/data/region_map_names_de.h create mode 100644 src/data/region_map_names_en.h diff --git a/asm/region_map.s b/asm/region_map.s index ade656aa0..e4d4ad34c 100644 --- a/asm/region_map.s +++ b/asm/region_map.s @@ -6,609 +6,6 @@ .text - thumb_func_start sub_80FB170 -sub_80FB170: @ 80FB170 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - ldr r4, [sp, 0x24] - ldr r7, [sp, 0x28] - ldr r5, [sp, 0x2C] - lsls r4, 16 - lsrs r4, 16 - mov r8, r4 - lsls r7, 16 - adds r4, r7, 0 - lsrs r4, 16 - mov r9, r4 - lsls r5, 24 - lsrs r5, 24 - ldr r4, _080FB230 @ =gUnknown_020388CC - ldr r6, [r4] - ldr r7, _080FB234 @ =gSineTable - mov r12, r7 - adds r4, r5, 0 - adds r4, 0x40 - lsls r4, 1 - add r4, r12 - movs r7, 0 - ldrsh r4, [r4, r7] - str r4, [sp] - mov r7, r8 - muls r7, r4 - adds r4, r7, 0 - asrs r4, 8 - mov r10, r4 - str r4, [r6, 0x2C] - lsls r5, 1 - add r5, r12 - movs r7, 0 - ldrsh r5, [r5, r7] - negs r4, r5 - mov r7, r8 - muls r7, r4 - adds r4, r7, 0 - asrs r4, 8 - mov r12, r4 - str r4, [r6, 0x30] - mov r7, r9 - muls r7, r5 - adds r5, r7, 0 - asrs r5, 8 - str r5, [r6, 0x34] - ldr r7, [sp] - mov r4, r9 - muls r4, r7 - asrs r4, 8 - mov r8, r4 - str r4, [r6, 0x38] - lsls r0, 16 - asrs r0, 8 - lsls r2, 16 - asrs r2, 16 - lsls r4, r2, 8 - adds r0, r4 - lsls r3, 16 - asrs r3, 16 - adds r4, r3, 0 - muls r4, r5 - mov r5, r10 - muls r5, r2 - adds r4, r5 - subs r0, r4 - str r0, [r6, 0x24] - lsls r1, 16 - asrs r1, 8 - lsls r0, r3, 8 - adds r1, r0 - mov r0, r8 - muls r0, r3 - mov r3, r12 - muls r3, r2 - adds r2, r3, 0 - adds r0, r2 - subs r1, r0 - str r1, [r6, 0x28] - adds r6, 0x7D - movs r0, 0x1 - strb r0, [r6] - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080FB230: .4byte gUnknown_020388CC -_080FB234: .4byte gSineTable - thumb_func_end sub_80FB170 - - thumb_func_start sub_80FB238 -sub_80FB238: @ 80FB238 - ldr r2, _080FB25C @ =gUnknown_020388CC - ldr r2, [r2] - lsls r0, 16 - asrs r0, 8 - movs r3, 0xE0 - lsls r3, 5 - adds r0, r3 - str r0, [r2, 0x24] - lsls r1, 16 - asrs r1, 8 - movs r0, 0x90 - lsls r0, 6 - adds r1, r0 - str r1, [r2, 0x28] - adds r2, 0x7D - movs r0, 0x1 - strb r0, [r2] - bx lr - .align 2, 0 -_080FB25C: .4byte gUnknown_020388CC - thumb_func_end sub_80FB238 - - thumb_func_start sub_80FB260 -sub_80FB260: @ 80FB260 - push {lr} - ldr r0, _080FB29C @ =gUnknown_020388CC - ldr r2, [r0] - adds r3, r2, 0 - adds r3, 0x7D - ldrb r0, [r3] - cmp r0, 0 - beq _080FB298 - ldr r1, _080FB2A0 @ =REG_BG2PA - ldr r0, [r2, 0x2C] - strh r0, [r1] - adds r1, 0x2 - ldr r0, [r2, 0x34] - strh r0, [r1] - adds r1, 0x2 - ldr r0, [r2, 0x30] - strh r0, [r1] - adds r1, 0x2 - ldr r0, [r2, 0x38] - strh r0, [r1] - adds r1, 0x2 - ldr r0, [r2, 0x24] - str r0, [r1] - adds r1, 0x4 - ldr r0, [r2, 0x28] - str r0, [r1] - movs r0, 0 - strb r0, [r3] -_080FB298: - pop {r0} - bx r0 - .align 2, 0 -_080FB29C: .4byte gUnknown_020388CC -_080FB2A0: .4byte REG_BG2PA - thumb_func_end sub_80FB260 - - thumb_func_start sub_80FB2A4 -sub_80FB2A4: @ 80FB2A4 - push {r4,r5,lr} - sub sp, 0xC - lsls r0, 16 - asrs r4, r0, 16 - lsls r1, 16 - asrs r5, r1, 16 - movs r0, 0x80 - lsls r0, 1 - str r0, [sp] - str r0, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x8] - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0x38 - movs r3, 0x48 - bl sub_80FB170 - bl sub_80FB260 - ldr r0, _080FB2E8 @ =gUnknown_020388CC - ldr r2, [r0] - ldr r1, [r2, 0x20] - cmp r1, 0 - beq _080FB2E0 - negs r0, r4 - strh r0, [r1, 0x24] - ldr r1, [r2, 0x20] - negs r0, r5 - strh r0, [r1, 0x26] -_080FB2E0: - add sp, 0xC - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080FB2E8: .4byte gUnknown_020388CC - thumb_func_end sub_80FB2A4 - - thumb_func_start GetRegionMapSectionAt -GetRegionMapSectionAt: @ 80FB2EC - push {lr} - lsls r0, 16 - lsrs r3, r0, 16 - lsls r1, 16 - ldr r0, _080FB30C @ =0xfffe0000 - adds r1, r0 - lsrs r2, r1, 16 - cmp r2, 0xE - bhi _080FB306 - cmp r3, 0 - beq _080FB306 - cmp r3, 0x1C - bls _080FB310 -_080FB306: - movs r0, 0x58 - b _080FB324 - .align 2, 0 -_080FB30C: .4byte 0xfffe0000 -_080FB310: - subs r0, r3, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - ldr r1, _080FB328 @ =gRegionMapSections - lsls r0, r2, 3 - subs r0, r2 - lsls r0, 2 - adds r0, r3, r0 - adds r0, r1 - ldrb r0, [r0] -_080FB324: - pop {r1} - bx r1 - .align 2, 0 -_080FB328: .4byte gRegionMapSections - thumb_func_end GetRegionMapSectionAt - - thumb_func_start sub_80FB32C -sub_80FB32C: @ 80FB32C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - ldr r0, _080FB358 @ =gSaveBlock1 - movs r1, 0x4 - ldrsb r1, [r0, r1] - adds r2, r0, 0 - cmp r1, 0x19 - bne _080FB35C - ldrb r0, [r2, 0x5] - subs r0, 0x29 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - bhi _080FB35C - bl sub_80FB600 - b _080FB5E8 - .align 2, 0 -_080FB358: .4byte gSaveBlock1 -_080FB35C: - movs r0, 0x4 - ldrsb r0, [r2, r0] - movs r1, 0x5 - ldrsb r1, [r2, r1] - bl get_map_light_level_by_bank_and_number - lsls r0, 24 - lsrs r0, 24 - subs r0, 0x1 - cmp r0, 0x8 - bhi _080FB3A4 - lsls r0, 2 - ldr r1, _080FB37C @ =_080FB380 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080FB37C: .4byte _080FB380 - .align 2, 0 -_080FB380: - .4byte _080FB3A4 - .4byte _080FB3A4 - .4byte _080FB3A4 - .4byte _080FB3E0 - .4byte _080FB3A4 - .4byte _080FB3A4 - .4byte _080FB3E0 - .4byte _080FB464 - .4byte _080FB428 -_080FB3A4: - ldr r4, _080FB3D4 @ =gUnknown_020388CC - ldr r0, [r4] - ldr r3, _080FB3D8 @ =gMapHeader - ldrb r1, [r3, 0x14] - movs r2, 0 - strh r1, [r0, 0x14] - adds r0, 0x7F - strb r2, [r0] - ldr r0, [r3] - ldrh r2, [r0] - ldrh r0, [r0, 0x4] - mov r8, r0 - ldr r0, _080FB3DC @ =gSaveBlock1 - ldrh r6, [r0] - ldrh r3, [r0, 0x2] - ldr r1, [r4] - ldrh r0, [r1, 0x14] - cmp r0, 0x45 - beq _080FB3CC - b _080FB4CC -_080FB3CC: - adds r1, 0x7F - movs r0, 0x1 - strb r0, [r1] - b _080FB4CC - .align 2, 0 -_080FB3D4: .4byte gUnknown_020388CC -_080FB3D8: .4byte gMapHeader -_080FB3DC: .4byte gSaveBlock1 -_080FB3E0: - ldr r4, _080FB420 @ =gSaveBlock1 - adds r0, r4, 0 - adds r0, 0x24 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - lsls r0, 16 - lsrs r0, 16 - adds r1, r4, 0 - adds r1, 0x25 - ldrb r1, [r1] - lsls r1, 24 - asrs r1, 24 - lsls r1, 16 - lsrs r1, 16 - bl get_mapheader_by_bank_and_number - adds r2, r0, 0 - ldr r0, _080FB424 @ =gUnknown_020388CC - ldr r0, [r0] - ldrb r1, [r2, 0x14] - strh r1, [r0, 0x14] - adds r0, 0x7F - movs r1, 0x1 - strb r1, [r0] - ldr r0, [r2] - ldrh r2, [r0] - ldrh r0, [r0, 0x4] - mov r8, r0 - ldrh r6, [r4, 0x28] - ldrh r3, [r4, 0x2A] - b _080FB4CC - .align 2, 0 -_080FB420: .4byte gSaveBlock1 -_080FB424: .4byte gUnknown_020388CC -_080FB428: - ldr r4, _080FB45C @ =gSaveBlock1 - movs r0, 0x14 - ldrsb r0, [r4, r0] - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x15 - ldrsb r1, [r4, r1] - lsls r1, 16 - lsrs r1, 16 - bl get_mapheader_by_bank_and_number - adds r2, r0, 0 - ldr r0, _080FB460 @ =gUnknown_020388CC - ldr r0, [r0] - ldrb r1, [r2, 0x14] - strh r1, [r0, 0x14] - adds r0, 0x7F - movs r1, 0x1 - strb r1, [r0] - ldr r0, [r2] - ldrh r2, [r0] - ldrh r0, [r0, 0x4] - mov r8, r0 - ldrh r6, [r4, 0x18] - ldrh r3, [r4, 0x1A] - b _080FB4CC - .align 2, 0 -_080FB45C: .4byte gSaveBlock1 -_080FB460: .4byte gUnknown_020388CC -_080FB464: - ldr r5, _080FB48C @ =gUnknown_020388CC - ldr r0, [r5] - ldr r1, _080FB490 @ =gMapHeader - ldrb r1, [r1, 0x14] - strh r1, [r0, 0x14] - cmp r1, 0x57 - beq _080FB498 - ldr r4, _080FB494 @ =gSaveBlock1 + 0x24 - movs r0, 0 - ldrsb r0, [r4, r0] - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x1 - ldrsb r1, [r4, r1] - lsls r1, 16 - lsrs r1, 16 - bl get_mapheader_by_bank_and_number - adds r2, r0, 0 - b _080FB4B6 - .align 2, 0 -_080FB48C: .4byte gUnknown_020388CC -_080FB490: .4byte gMapHeader -_080FB494: .4byte gSaveBlock1 + 0x24 -_080FB498: - ldr r4, _080FB548 @ =gSaveBlock1 + 0x14 - movs r0, 0 - ldrsb r0, [r4, r0] - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x1 - ldrsb r1, [r4, r1] - lsls r1, 16 - lsrs r1, 16 - bl get_mapheader_by_bank_and_number - adds r2, r0, 0 - ldr r1, [r5] - ldrb r0, [r2, 0x14] - strh r0, [r1, 0x14] -_080FB4B6: - ldr r0, _080FB54C @ =gUnknown_020388CC - ldr r0, [r0] - adds r0, 0x7F - movs r1, 0 - strb r1, [r0] - ldr r0, [r2] - ldrh r2, [r0] - ldrh r0, [r0, 0x4] - mov r8, r0 - ldrh r6, [r4, 0x4] - ldrh r3, [r4, 0x6] -_080FB4CC: - mov r9, r6 - ldr r4, _080FB54C @ =gUnknown_020388CC - ldr r0, [r4] - ldrh r5, [r0, 0x14] - lsls r0, r5, 3 - ldr r1, _080FB550 @ =gRegionMapLocations - adds r0, r1 - mov r10, r0 - ldrb r7, [r0, 0x2] - adds r0, r2, 0 - adds r1, r7, 0 - str r3, [sp] - bl __divsi3 - lsls r0, 16 - lsrs r1, r0, 16 - ldr r3, [sp] - cmp r1, 0 - bne _080FB4F4 - movs r1, 0x1 -_080FB4F4: - adds r0, r6, 0 - str r3, [sp] - bl __udivsi3 - lsls r0, 16 - lsrs r6, r0, 16 - ldr r3, [sp] - cmp r6, r7 - bcc _080FB50C - subs r0, r7, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 -_080FB50C: - mov r2, r10 - ldrb r4, [r2, 0x3] - mov r0, r8 - adds r1, r4, 0 - str r3, [sp] - bl __divsi3 - lsls r0, 16 - lsrs r1, r0, 16 - ldr r3, [sp] - cmp r1, 0 - bne _080FB526 - movs r1, 0x1 -_080FB526: - adds r0, r3, 0 - bl __udivsi3 - lsls r0, 16 - lsrs r3, r0, 16 - cmp r3, r4 - bcc _080FB53A - subs r0, r4, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 -_080FB53A: - cmp r5, 0x24 - beq _080FB59C - cmp r5, 0x24 - bgt _080FB554 - cmp r5, 0x1D - beq _080FB55E - b _080FB5BE - .align 2, 0 -_080FB548: .4byte gSaveBlock1 + 0x14 -_080FB54C: .4byte gUnknown_020388CC -_080FB550: .4byte gRegionMapLocations -_080FB554: - cmp r5, 0x29 - beq _080FB566 - cmp r5, 0x33 - beq _080FB566 - b _080FB5BE -_080FB55E: - cmp r3, 0 - beq _080FB5BE - movs r6, 0 - b _080FB5BE -_080FB566: - movs r6, 0 - ldr r1, _080FB598 @ =gSaveBlock1 - movs r2, 0 - ldrsh r0, [r1, r2] - cmp r0, 0x20 - ble _080FB574 - movs r6, 0x1 -_080FB574: - cmp r0, 0x33 - ble _080FB57E - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 -_080FB57E: - movs r3, 0 - movs r2, 0x2 - ldrsh r0, [r1, r2] - cmp r0, 0x25 - ble _080FB58A - movs r3, 0x1 -_080FB58A: - cmp r0, 0x38 - ble _080FB5BE - adds r0, r3, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - b _080FB5BE - .align 2, 0 -_080FB598: .4byte gSaveBlock1 -_080FB59C: - movs r6, 0 - mov r0, r9 - cmp r0, 0xE - bls _080FB5A6 - movs r6, 0x1 -_080FB5A6: - mov r1, r9 - cmp r1, 0x1C - bls _080FB5B2 - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 -_080FB5B2: - mov r2, r9 - cmp r2, 0x36 - bls _080FB5BE - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 -_080FB5BE: - ldr r0, _080FB5F8 @ =gUnknown_020388CC - ldr r2, [r0] - ldrh r0, [r2, 0x14] - lsls r0, 3 - ldr r1, _080FB5FC @ =gRegionMapLocations - adds r0, r1 - ldrb r0, [r0] - adds r0, r6, r0 - adds r0, 0x1 - adds r1, r2, 0 - adds r1, 0x54 - strh r0, [r1] - ldrh r0, [r2, 0x14] - lsls r0, 3 - ldr r1, _080FB5FC @ =gRegionMapLocations - adds r0, r1 - ldrb r0, [r0, 0x1] - adds r0, r3, r0 - adds r0, 0x2 - adds r2, 0x56 - strh r0, [r2] -_080FB5E8: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080FB5F8: .4byte gUnknown_020388CC -_080FB5FC: .4byte gRegionMapLocations - thumb_func_end sub_80FB32C - thumb_func_start sub_80FB600 sub_80FB600: @ 80FB600 push {r4-r7,lr} diff --git a/data-de/region_map_locations.inc b/data-de/region_map_locations.inc deleted file mode 100644 index 1f4863206..000000000 --- a/data-de/region_map_locations.inc +++ /dev/null @@ -1,327 +0,0 @@ -gMapName_LittlerootTown: @ 83E6FF4 - .string "WURZELHEIM$" - -gMapName_OldaleTown: @ 83E7006 - .string "ROSALTSTADT$" - -gMapName_DewfordTown: @ 83E7014 - .string "FAUSTAUHAVEN$" - -gMapName_LavaridgeTown: @ 83E7023 - .string "BAD LAVASTADT$" - -gMapName_FallarborTown: @ 83E7034 - .string "LAUBWECHSEL{NAME_END}FELD$" - -gMapName_VerdanturfTown: @ 83E7045 - .string "WIESENFLUR$" - -gMapName_PacifidlogTown: @ 83E7057 - .string "FLOSSBRUNN$" - -gMapName_PetalburgCity: @ 83E7069 - .string "BLÜTENBURG{NAME_END} CITY$" - -gMapName_SlateportCity: @ 83E707A - .string "GRAPHITPORT{NAME_END} CITY$" - -gMapName_MauvilleCity: @ 83E708B - .string "MALVENFROH{NAME_END} CITY$" - -gMapName_RustboroCity: @ 83E709B - .string "METAROST{NAME_END} CITY$" - -gMapName_FortreeCity: @ 83E70AB - .string "BAUMHAUSEN{NAME_END} CITY$" - -gMapName_LilycoveCity: @ 83E70BA - .string "SEEGRASULB{NAME_END} CITY$" - -gMapName_MossdeepCity: @ 83E70CA - .string "MOOSBACH{NAME_END} CITY$" - -gMapName_SootopolisCity: @ 83E70DA - .string "XENEROVILLE$" - -gMapName_EverGrandeCity: @ 83E70EC - .string "PRACHTPOLIS{NAME_END} CITY$" - -gMapName_Route101: @ 83E70FF - .string "ROUTE 101$" - -gMapName_Route102: @ 83E7109 - .string "ROUTE 102$" - -gMapName_Route103: @ 83E7113 - .string "ROUTE 103$" - -gMapName_Route104: @ 83E711D - .string "ROUTE 104$" - -gMapName_Route105: @ 83E7127 - .string "ROUTE 105$" - -gMapName_Route106: @ 83E7131 - .string "ROUTE 106$" - -gMapName_Route107: @ 83E713B - .string "ROUTE 107$" - -gMapName_Route108: @ 83E7145 - .string "ROUTE 108$" - -gMapName_Route109: @ 83E714F - .string "ROUTE 109$" - -gMapName_Route110: @ 83E7159 - .string "ROUTE 110$" - -gMapName_Route111: @ 83E7163 - .string "ROUTE 111$" - -gMapName_Route112: @ 83E716D - .string "ROUTE 112$" - -gMapName_Route113: @ 83E7177 - .string "ROUTE 113$" - -gMapName_Route114: @ 83E7181 - .string "ROUTE 114$" - -gMapName_Route115: @ 83E718B - .string "ROUTE 115$" - -gMapName_Route116: @ 83E7195 - .string "ROUTE 116$" - -gMapName_Route117: @ 83E719F - .string "ROUTE 117$" - -gMapName_Route118: @ 83E71A9 - .string "ROUTE 118$" - -gMapName_Route119: @ 83E71B3 - .string "ROUTE 119$" - -gMapName_Route120: @ 83E71BD - .string "ROUTE 120$" - -gMapName_Route121: @ 83E71C7 - .string "ROUTE 121$" - -gMapName_Route122: @ 83E71D1 - .string "ROUTE 122$" - -gMapName_Route123: @ 83E71DB - .string "ROUTE 123$" - -gMapName_Route124: @ 83E71E5 - .string "ROUTE 124$" - -gMapName_Route125: @ 83E71EF - .string "ROUTE 125$" - -gMapName_Route126: @ 83E71F9 - .string "ROUTE 126$" - -gMapName_Route127: @ 83E7203 - .string "ROUTE 127$" - -gMapName_Route128: @ 83E720D - .string "ROUTE 128$" - -gMapName_Route129: @ 83E7217 - .string "ROUTE 129$" - -gMapName_Route130: @ 83E7221 - .string "ROUTE 130$" - -gMapName_Route131: @ 83E722B - .string "ROUTE 131$" - -gMapName_Route132: @ 83E7235 - .string "ROUTE 132$" - -gMapName_Route133: @ 83E723F - .string "ROUTE 133$" - -gMapName_Route134: @ 83E7249 - .string "ROUTE 134$" - -gMapName_Underwater: @ 83E7253 - .string "UNTERWASSER$" - -gMapName_GraniteCave: @ 83E725E - .string "GRANITHÖHLE$" - -gMapName_MtChimney: @ 83E726B - .string "SCHLOTBERG$" - -gMapName_SafariZone: @ 83E7277 - .string "SAFARI-ZONE$" - -gMapName_BattleTower: @ 83E7283 - .string "DUELLTURM$" - -gMapName_PetalburgWoods: @ 83E7290 - .string "BLÜTENBURGWALD$" - -gMapName_RusturfTunnel: @ 83E72A0 - .string "METAFLURTUNNEL$" - -gMapName_AbandonedShip: @ 83E72AF - .string "SCHIFFSWRACK$" - -gMapName_NewMauville: @ 83E72BE - .string "NEU MALVENFROH$" - -gMapName_MeteorFalls: @ 83E72CB - .string "METEORFÄLLE$" - -gMapName_MtPyre: @ 83E72D8 - .string "PYROBERG$" - -gMapName_EvilTeamHideout: @ 83E72E1 - .string "{EVIL_TEAM}s VERSTECK$" - -gMapName_ShoalCave: @ 83E72EC - .string "KÜSTENHÖHLE$" - -gMapName_SeafloorCavern: @ 83E72F7 - .string "TIEFSEEHÖHLE$" - -gMapName_VictoryRoad: @ 83E7307 - .string "SIEGESSTRASSE$" - -gMapName_MirageIsland: @ 83E7314 - .string "WUNDEREILAND$" - -gMapName_CaveOfOrigin: @ 83E7322 - .string "URZEITHÖHLE$" - -gMapName_SouthernIsland: @ 83E7331 - .string "INSEL IM SÜDEN$" - -gMapName_FieryPath: @ 83E7341 - .string "FEURIGER PFAD$" - -gMapName_JaggedPass: @ 83E734C - .string "STEILPASS$" - -gMapName_SealedChamber: @ 83E7358 - .string "SIEGELKAMMER$" - -gMapName_ScorchedSlab: @ 83E7367 - .string "SONNENGROTTE$" - -gMapName_IslandCave: @ 83E7375 - .string "INSELHÖHLE$" - -gMapName_DesertRuins: @ 83E7381 - .string "WÜSTENRUINE$" - -gMapName_AncientTomb: @ 83E738E - .string "GRABMAL$" - -gMapName_InsideOfTruck: @ 83E739B - .string "IM MÖBELWAGEN$" - -gMapName_SkyPillar: @ 83E73AB - .string "HIMMELTURM$" - -gMapName_SecretBase: @ 83E73B6 - .string "GEHEIMBASIS$" - -gMapName_None: @ 83E73C2 - .string "$" - - .align 2 -gRegionMapLocations:: @ 83E73C4 - region_map_location 4, 11, 1, 1, LittlerootTown - region_map_location 4, 9, 1, 1, OldaleTown - region_map_location 2, 14, 1, 1, DewfordTown - region_map_location 5, 3, 1, 1, LavaridgeTown - region_map_location 3, 0, 1, 1, FallarborTown - region_map_location 4, 6, 1, 1, VerdanturfTown - region_map_location 17, 10, 1, 1, PacifidlogTown - region_map_location 1, 9, 1, 1, PetalburgCity - region_map_location 8, 10, 1, 2, SlateportCity - region_map_location 8, 6, 2, 1, MauvilleCity - region_map_location 0, 5, 1, 2, RustboroCity - region_map_location 12, 0, 1, 1, FortreeCity - region_map_location 18, 3, 2, 1, LilycoveCity - region_map_location 24, 5, 2, 1, MossdeepCity - region_map_location 21, 7, 1, 1, SootopolisCity - region_map_location 27, 8, 1, 2, EverGrandeCity - region_map_location 4, 10, 1, 1, Route101 - region_map_location 2, 9, 2, 1, Route102 - region_map_location 4, 8, 4, 1, Route103 - region_map_location 0, 7, 1, 3, Route104 - region_map_location 0, 10, 1, 3, Route105 - region_map_location 0, 13, 2, 1, Route106 - region_map_location 3, 14, 3, 1, Route107 - region_map_location 6, 14, 2, 1, Route108 - region_map_location 8, 12, 1, 3, Route109 - region_map_location 8, 7, 1, 3, Route110 - region_map_location 8, 0, 1, 6, Route111 - region_map_location 6, 3, 2, 1, Route112 - region_map_location 4, 0, 4, 1, Route113 - region_map_location 1, 0, 2, 3, Route114 - region_map_location 0, 2, 1, 3, Route115 - region_map_location 1, 5, 4, 1, Route116 - region_map_location 5, 6, 3, 1, Route117 - region_map_location 10, 6, 2, 1, Route118 - region_map_location 11, 0, 1, 6, Route119 - region_map_location 13, 0, 1, 4, Route120 - region_map_location 14, 3, 4, 1, Route121 - region_map_location 16, 4, 1, 2, Route122 - region_map_location 12, 6, 5, 1, Route123 - region_map_location 20, 3, 4, 3, Route124 - region_map_location 24, 3, 2, 2, Route125 - region_map_location 20, 6, 3, 3, Route126 - region_map_location 23, 6, 3, 3, Route127 - region_map_location 23, 9, 4, 1, Route128 - region_map_location 24, 10, 2, 1, Route129 - region_map_location 21, 10, 3, 1, Route130 - region_map_location 18, 10, 3, 1, Route131 - region_map_location 15, 10, 2, 1, Route132 - region_map_location 12, 10, 3, 1, Route133 - region_map_location 9, 10, 3, 1, Route134 - region_map_location 20, 3, 4, 3, Underwater - region_map_location 20, 6, 3, 3, Underwater - region_map_location 23, 6, 3, 3, Underwater - region_map_location 23, 9, 4, 1, Underwater - region_map_location 21, 7, 1, 1, Underwater - region_map_location 1, 13, 1, 1, GraniteCave - region_map_location 6, 2, 1, 1, MtChimney - region_map_location 16, 2, 1, 1, SafariZone - region_map_location 22, 12, 1, 1, BattleTower - region_map_location 0, 8, 1, 1, PetalburgWoods - region_map_location 2, 5, 1, 1, RusturfTunnel - region_map_location 6, 14, 1, 1, AbandonedShip - region_map_location 8, 7, 1, 1, NewMauville - region_map_location 0, 3, 1, 1, MeteorFalls - region_map_location 1, 2, 1, 1, MeteorFalls - region_map_location 16, 4, 1, 1, MtPyre - region_map_location 19, 3, 1, 1, EvilTeamHideout - region_map_location 24, 4, 1, 1, ShoalCave - region_map_location 24, 9, 1, 1, SeafloorCavern - region_map_location 24, 9, 1, 1, Underwater - region_map_location 27, 9, 1, 1, VictoryRoad - region_map_location 17, 10, 1, 1, MirageIsland - region_map_location 21, 7, 1, 1, CaveOfOrigin - region_map_location 12, 14, 1, 1, SouthernIsland - region_map_location 6, 3, 1, 1, FieryPath - region_map_location 7, 3, 1, 1, FieryPath - region_map_location 6, 3, 1, 1, JaggedPass - region_map_location 7, 2, 1, 1, JaggedPass - region_map_location 11, 10, 1, 1, SealedChamber - region_map_location 11, 10, 1, 1, Underwater - region_map_location 13, 0, 1, 1, ScorchedSlab - region_map_location 0, 10, 1, 1, IslandCave - region_map_location 8, 3, 1, 1, DesertRuins - region_map_location 13, 2, 1, 1, AncientTomb - region_map_location 0, 0, 1, 1, InsideOfTruck - region_map_location 19, 10, 1, 1, SkyPillar - region_map_location 0, 0, 1, 1, SecretBase - region_map_location 0, 0, 1, 1, None diff --git a/data/region_map.s b/data/region_map.s index ea81477dd..78b467212 100644 --- a/data/region_map.s +++ b/data/region_map.s @@ -3,11 +3,8 @@ .section .rodata -@ 83E6E50 - .include "data/region_map_sections.inc" - @ 83E6FF4 - .include "data/region_map_locations.inc" +@ .include "data/region_map_locations.inc" gUnknown_083E7684:: @ 83E7684 .2byte 50, 39 diff --git a/data/region_map_locations.inc b/data/region_map_locations.inc deleted file mode 100644 index 389b5aa0c..000000000 --- a/data/region_map_locations.inc +++ /dev/null @@ -1,327 +0,0 @@ -gMapName_LittlerootTown: @ 83E6FF4 - .string "LITTLEROOT{NAME_END} TOWN$" - -gMapName_OldaleTown: @ 83E7006 - .string "OLDALE{NAME_END} TOWN$" - -gMapName_DewfordTown: @ 83E7014 - .string "DEWFORD{NAME_END} TOWN$" - -gMapName_LavaridgeTown: @ 83E7023 - .string "LAVARIDGE{NAME_END} TOWN$" - -gMapName_FallarborTown: @ 83E7034 - .string "FALLARBOR{NAME_END} TOWN$" - -gMapName_VerdanturfTown: @ 83E7045 - .string "VERDANTURF{NAME_END} TOWN$" - -gMapName_PacifidlogTown: @ 83E7057 - .string "PACIFIDLOG{NAME_END} TOWN$" - -gMapName_PetalburgCity: @ 83E7069 - .string "PETALBURG{NAME_END} CITY$" - -gMapName_SlateportCity: @ 83E707A - .string "SLATEPORT{NAME_END} CITY$" - -gMapName_MauvilleCity: @ 83E708B - .string "MAUVILLE{NAME_END} CITY$" - -gMapName_RustboroCity: @ 83E709B - .string "RUSTBORO{NAME_END} CITY$" - -gMapName_FortreeCity: @ 83E70AB - .string "FORTREE{NAME_END} CITY$" - -gMapName_LilycoveCity: @ 83E70BA - .string "LILYCOVE{NAME_END} CITY$" - -gMapName_MossdeepCity: @ 83E70CA - .string "MOSSDEEP{NAME_END} CITY$" - -gMapName_SootopolisCity: @ 83E70DA - .string "SOOTOPOLIS{NAME_END} CITY$" - -gMapName_EverGrandeCity: @ 83E70EC - .string "EVER GRANDE{NAME_END} CITY$" - -gMapName_Route101: @ 83E70FF - .string "ROUTE 101$" - -gMapName_Route102: @ 83E7109 - .string "ROUTE 102$" - -gMapName_Route103: @ 83E7113 - .string "ROUTE 103$" - -gMapName_Route104: @ 83E711D - .string "ROUTE 104$" - -gMapName_Route105: @ 83E7127 - .string "ROUTE 105$" - -gMapName_Route106: @ 83E7131 - .string "ROUTE 106$" - -gMapName_Route107: @ 83E713B - .string "ROUTE 107$" - -gMapName_Route108: @ 83E7145 - .string "ROUTE 108$" - -gMapName_Route109: @ 83E714F - .string "ROUTE 109$" - -gMapName_Route110: @ 83E7159 - .string "ROUTE 110$" - -gMapName_Route111: @ 83E7163 - .string "ROUTE 111$" - -gMapName_Route112: @ 83E716D - .string "ROUTE 112$" - -gMapName_Route113: @ 83E7177 - .string "ROUTE 113$" - -gMapName_Route114: @ 83E7181 - .string "ROUTE 114$" - -gMapName_Route115: @ 83E718B - .string "ROUTE 115$" - -gMapName_Route116: @ 83E7195 - .string "ROUTE 116$" - -gMapName_Route117: @ 83E719F - .string "ROUTE 117$" - -gMapName_Route118: @ 83E71A9 - .string "ROUTE 118$" - -gMapName_Route119: @ 83E71B3 - .string "ROUTE 119$" - -gMapName_Route120: @ 83E71BD - .string "ROUTE 120$" - -gMapName_Route121: @ 83E71C7 - .string "ROUTE 121$" - -gMapName_Route122: @ 83E71D1 - .string "ROUTE 122$" - -gMapName_Route123: @ 83E71DB - .string "ROUTE 123$" - -gMapName_Route124: @ 83E71E5 - .string "ROUTE 124$" - -gMapName_Route125: @ 83E71EF - .string "ROUTE 125$" - -gMapName_Route126: @ 83E71F9 - .string "ROUTE 126$" - -gMapName_Route127: @ 83E7203 - .string "ROUTE 127$" - -gMapName_Route128: @ 83E720D - .string "ROUTE 128$" - -gMapName_Route129: @ 83E7217 - .string "ROUTE 129$" - -gMapName_Route130: @ 83E7221 - .string "ROUTE 130$" - -gMapName_Route131: @ 83E722B - .string "ROUTE 131$" - -gMapName_Route132: @ 83E7235 - .string "ROUTE 132$" - -gMapName_Route133: @ 83E723F - .string "ROUTE 133$" - -gMapName_Route134: @ 83E7249 - .string "ROUTE 134$" - -gMapName_Underwater: @ 83E7253 - .string "UNDERWATER$" - -gMapName_GraniteCave: @ 83E725E - .string "GRANITE CAVE$" - -gMapName_MtChimney: @ 83E726B - .string "MT. CHIMNEY$" - -gMapName_SafariZone: @ 83E7277 - .string "SAFARI ZONE$" - -gMapName_BattleTower: @ 83E7283 - .string "BATTLE TOWER$" - -gMapName_PetalburgWoods: @ 83E7290 - .string "PETALBURG WOODS$" - -gMapName_RusturfTunnel: @ 83E72A0 - .string "RUSTURF TUNNEL$" - -gMapName_AbandonedShip: @ 83E72AF - .string "ABANDONED SHIP$" - -gMapName_NewMauville: @ 83E72BE - .string "NEW MAUVILLE$" - -gMapName_MeteorFalls: @ 83E72CB - .string "METEOR FALLS$" - -gMapName_MtPyre: @ 83E72D8 - .string "MT. PYRE$" - -gMapName_EvilTeamHideout: @ 83E72E1 - .string "{EVIL_TEAM} HIDEOUT$" - -gMapName_ShoalCave: @ 83E72EC - .string "SHOAL CAVE$" - -gMapName_SeafloorCavern: @ 83E72F7 - .string "SEAFLOOR CAVERN$" - -gMapName_VictoryRoad: @ 83E7307 - .string "VICTORY ROAD$" - -gMapName_MirageIsland: @ 83E7314 - .string "MIRAGE ISLAND$" - -gMapName_CaveOfOrigin: @ 83E7322 - .string "CAVE OF ORIGIN$" - -gMapName_SouthernIsland: @ 83E7331 - .string "SOUTHERN ISLAND$" - -gMapName_FieryPath: @ 83E7341 - .string "FIERY PATH$" - -gMapName_JaggedPass: @ 83E734C - .string "JAGGED PASS$" - -gMapName_SealedChamber: @ 83E7358 - .string "SEALED CHAMBER$" - -gMapName_ScorchedSlab: @ 83E7367 - .string "SCORCHED SLAB$" - -gMapName_IslandCave: @ 83E7375 - .string "ISLAND CAVE$" - -gMapName_DesertRuins: @ 83E7381 - .string "DESERT RUINS$" - -gMapName_AncientTomb: @ 83E738E - .string "ANCIENT TOMB$" - -gMapName_InsideOfTruck: @ 83E739B - .string "INSIDE OF TRUCK$" - -gMapName_SkyPillar: @ 83E73AB - .string "SKY PILLAR$" - -gMapName_SecretBase: @ 83E73B6 - .string "SECRET BASE$" - -gMapName_None: @ 83E73C2 - .string "$" - - .align 2 -gRegionMapLocations:: @ 83E73C4 - region_map_location 4, 11, 1, 1, LittlerootTown - region_map_location 4, 9, 1, 1, OldaleTown - region_map_location 2, 14, 1, 1, DewfordTown - region_map_location 5, 3, 1, 1, LavaridgeTown - region_map_location 3, 0, 1, 1, FallarborTown - region_map_location 4, 6, 1, 1, VerdanturfTown - region_map_location 17, 10, 1, 1, PacifidlogTown - region_map_location 1, 9, 1, 1, PetalburgCity - region_map_location 8, 10, 1, 2, SlateportCity - region_map_location 8, 6, 2, 1, MauvilleCity - region_map_location 0, 5, 1, 2, RustboroCity - region_map_location 12, 0, 1, 1, FortreeCity - region_map_location 18, 3, 2, 1, LilycoveCity - region_map_location 24, 5, 2, 1, MossdeepCity - region_map_location 21, 7, 1, 1, SootopolisCity - region_map_location 27, 8, 1, 2, EverGrandeCity - region_map_location 4, 10, 1, 1, Route101 - region_map_location 2, 9, 2, 1, Route102 - region_map_location 4, 8, 4, 1, Route103 - region_map_location 0, 7, 1, 3, Route104 - region_map_location 0, 10, 1, 3, Route105 - region_map_location 0, 13, 2, 1, Route106 - region_map_location 3, 14, 3, 1, Route107 - region_map_location 6, 14, 2, 1, Route108 - region_map_location 8, 12, 1, 3, Route109 - region_map_location 8, 7, 1, 3, Route110 - region_map_location 8, 0, 1, 6, Route111 - region_map_location 6, 3, 2, 1, Route112 - region_map_location 4, 0, 4, 1, Route113 - region_map_location 1, 0, 2, 3, Route114 - region_map_location 0, 2, 1, 3, Route115 - region_map_location 1, 5, 4, 1, Route116 - region_map_location 5, 6, 3, 1, Route117 - region_map_location 10, 6, 2, 1, Route118 - region_map_location 11, 0, 1, 6, Route119 - region_map_location 13, 0, 1, 4, Route120 - region_map_location 14, 3, 4, 1, Route121 - region_map_location 16, 4, 1, 2, Route122 - region_map_location 12, 6, 5, 1, Route123 - region_map_location 20, 3, 4, 3, Route124 - region_map_location 24, 3, 2, 2, Route125 - region_map_location 20, 6, 3, 3, Route126 - region_map_location 23, 6, 3, 3, Route127 - region_map_location 23, 9, 4, 1, Route128 - region_map_location 24, 10, 2, 1, Route129 - region_map_location 21, 10, 3, 1, Route130 - region_map_location 18, 10, 3, 1, Route131 - region_map_location 15, 10, 2, 1, Route132 - region_map_location 12, 10, 3, 1, Route133 - region_map_location 9, 10, 3, 1, Route134 - region_map_location 20, 3, 4, 3, Underwater - region_map_location 20, 6, 3, 3, Underwater - region_map_location 23, 6, 3, 3, Underwater - region_map_location 23, 9, 4, 1, Underwater - region_map_location 21, 7, 1, 1, Underwater - region_map_location 1, 13, 1, 1, GraniteCave - region_map_location 6, 2, 1, 1, MtChimney - region_map_location 16, 2, 1, 1, SafariZone - region_map_location 22, 12, 1, 1, BattleTower - region_map_location 0, 8, 1, 1, PetalburgWoods - region_map_location 2, 5, 1, 1, RusturfTunnel - region_map_location 6, 14, 1, 1, AbandonedShip - region_map_location 8, 7, 1, 1, NewMauville - region_map_location 0, 3, 1, 1, MeteorFalls - region_map_location 1, 2, 1, 1, MeteorFalls - region_map_location 16, 4, 1, 1, MtPyre - region_map_location 19, 3, 1, 1, EvilTeamHideout - region_map_location 24, 4, 1, 1, ShoalCave - region_map_location 24, 9, 1, 1, SeafloorCavern - region_map_location 24, 9, 1, 1, Underwater - region_map_location 27, 9, 1, 1, VictoryRoad - region_map_location 17, 10, 1, 1, MirageIsland - region_map_location 21, 7, 1, 1, CaveOfOrigin - region_map_location 12, 14, 1, 1, SouthernIsland - region_map_location 6, 3, 1, 1, FieryPath - region_map_location 7, 3, 1, 1, FieryPath - region_map_location 6, 3, 1, 1, JaggedPass - region_map_location 7, 2, 1, 1, JaggedPass - region_map_location 11, 10, 1, 1, SealedChamber - region_map_location 11, 10, 1, 1, Underwater - region_map_location 13, 0, 1, 1, ScorchedSlab - region_map_location 0, 10, 1, 1, IslandCave - region_map_location 8, 3, 1, 1, DesertRuins - region_map_location 13, 2, 1, 1, AncientTomb - region_map_location 0, 0, 1, 1, InsideOfTruck - region_map_location 19, 10, 1, 1, SkyPillar - region_map_location 0, 0, 1, 1, SecretBase - region_map_location 0, 0, 1, 1, None diff --git a/data/region_map_sections.inc b/data/region_map_sections.inc deleted file mode 100644 index 6336eac0e..000000000 --- a/data/region_map_sections.inc +++ /dev/null @@ -1,16 +0,0 @@ -gRegionMapSections:: @ 83E6E50 - .byte 0x58,0x1D,0x1D,0x04,0x1C,0x1C,0x1C,0x1C,0x1A,0x58,0x58,0x22,0x0B,0x23,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58 - .byte 0x58,0x1D,0x58,0x58,0x58,0x58,0x38,0x38,0x1A,0x58,0x58,0x22,0x58,0x23,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58 - .byte 0x1E,0x1D,0x58,0x58,0x58,0x58,0x38,0x38,0x1A,0x58,0x58,0x22,0x58,0x23,0x58,0x58,0x39,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58 - .byte 0x1E,0x58,0x58,0x58,0x58,0x03,0x1B,0x1B,0x1A,0x58,0x58,0x22,0x58,0x23,0x24,0x24,0x24,0x24,0x0C,0x0C,0x27,0x27,0x27,0x27,0x28,0x28,0x58,0x58 - .byte 0x1E,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x1A,0x58,0x58,0x22,0x58,0x58,0x58,0x58,0x25,0x58,0x58,0x58,0x27,0x27,0x27,0x27,0x28,0x28,0x58,0x58 - .byte 0x0A,0x1F,0x1F,0x1F,0x1F,0x58,0x58,0x58,0x1A,0x58,0x58,0x22,0x58,0x58,0x58,0x58,0x25,0x58,0x58,0x58,0x27,0x27,0x27,0x27,0x0D,0x0D,0x58,0x58 - .byte 0x0A,0x58,0x58,0x58,0x05,0x20,0x20,0x20,0x09,0x09,0x21,0x21,0x26,0x26,0x26,0x26,0x26,0x58,0x58,0x58,0x29,0x29,0x29,0x2A,0x2A,0x2A,0x58,0x58 - .byte 0x13,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x19,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x29,0x0E,0x29,0x2A,0x2A,0x2A,0x58,0x58 - .byte 0x13,0x58,0x58,0x58,0x12,0x12,0x12,0x12,0x19,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x29,0x29,0x29,0x2A,0x2A,0x2A,0x58,0x0F - .byte 0x13,0x07,0x11,0x11,0x01,0x58,0x58,0x58,0x19,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x2B,0x2B,0x2B,0x2B,0x0F - .byte 0x14,0x58,0x58,0x58,0x10,0x58,0x58,0x58,0x08,0x31,0x31,0x31,0x30,0x30,0x30,0x2F,0x2F,0x06,0x2E,0x2E,0x2E,0x2D,0x2D,0x2D,0x2C,0x2C,0x58,0x58 - .byte 0x14,0x58,0x58,0x58,0x00,0x58,0x58,0x58,0x08,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58 - .byte 0x14,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x18,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x3A,0x58,0x58,0x58,0x58,0x58 - .byte 0x15,0x15,0x15,0x58,0x58,0x58,0x58,0x58,0x18,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58 - .byte 0x58,0x58,0x02,0x16,0x16,0x16,0x17,0x17,0x18,0x58,0x58,0x58,0x49,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58 diff --git a/src/data/region_map_names_de.h b/src/data/region_map_names_de.h new file mode 100644 index 000000000..10f53c8ba --- /dev/null +++ b/src/data/region_map_names_de.h @@ -0,0 +1,79 @@ +const u8 gMapName_LittlerootTown[] = _("WURZELHEIM"); +const u8 gMapName_OldaleTown[] = _("ROSALTSTADT"); +const u8 gMapName_DewfordTown[] = _("FAUSTAUHAVEN"); +const u8 gMapName_LavaridgeTown[] = _("BAD LAVASTADT"); +const u8 gMapName_FallarborTown[] = _("LAUBWECHSEL{NAME_END}FELD"); +const u8 gMapName_VerdanturfTown[] = _("WIESENFLUR"); +const u8 gMapName_PacifidlogTown[] = _("FLOSSBRUNN"); +const u8 gMapName_PetalburgCity[] = _("BLÜTENBURG{NAME_END} CITY"); +const u8 gMapName_SlateportCity[] = _("GRAPHITPORT{NAME_END} CITY"); +const u8 gMapName_MauvilleCity[] = _("MALVENFROH{NAME_END} CITY"); +const u8 gMapName_RustboroCity[] = _("METAROST{NAME_END} CITY"); +const u8 gMapName_FortreeCity[] = _("BAUMHAUSEN{NAME_END} CITY"); +const u8 gMapName_LilycoveCity[] = _("SEEGRASULB{NAME_END} CITY"); +const u8 gMapName_MossdeepCity[] = _("MOOSBACH{NAME_END} CITY"); +const u8 gMapName_SootopolisCity[] = _("XENEROVILLE"); +const u8 gMapName_EverGrandeCity[] = _("PRACHTPOLIS{NAME_END} CITY"); +const u8 gMapName_Route101[] = _("ROUTE 101"); +const u8 gMapName_Route102[] = _("ROUTE 102"); +const u8 gMapName_Route103[] = _("ROUTE 103"); +const u8 gMapName_Route104[] = _("ROUTE 104"); +const u8 gMapName_Route105[] = _("ROUTE 105"); +const u8 gMapName_Route106[] = _("ROUTE 106"); +const u8 gMapName_Route107[] = _("ROUTE 107"); +const u8 gMapName_Route108[] = _("ROUTE 108"); +const u8 gMapName_Route109[] = _("ROUTE 109"); +const u8 gMapName_Route110[] = _("ROUTE 110"); +const u8 gMapName_Route111[] = _("ROUTE 111"); +const u8 gMapName_Route112[] = _("ROUTE 112"); +const u8 gMapName_Route113[] = _("ROUTE 113"); +const u8 gMapName_Route114[] = _("ROUTE 114"); +const u8 gMapName_Route115[] = _("ROUTE 115"); +const u8 gMapName_Route116[] = _("ROUTE 116"); +const u8 gMapName_Route117[] = _("ROUTE 117"); +const u8 gMapName_Route118[] = _("ROUTE 118"); +const u8 gMapName_Route119[] = _("ROUTE 119"); +const u8 gMapName_Route120[] = _("ROUTE 120"); +const u8 gMapName_Route121[] = _("ROUTE 121"); +const u8 gMapName_Route122[] = _("ROUTE 122"); +const u8 gMapName_Route123[] = _("ROUTE 123"); +const u8 gMapName_Route124[] = _("ROUTE 124"); +const u8 gMapName_Route125[] = _("ROUTE 125"); +const u8 gMapName_Route126[] = _("ROUTE 126"); +const u8 gMapName_Route127[] = _("ROUTE 127"); +const u8 gMapName_Route128[] = _("ROUTE 128"); +const u8 gMapName_Route129[] = _("ROUTE 129"); +const u8 gMapName_Route130[] = _("ROUTE 130"); +const u8 gMapName_Route131[] = _("ROUTE 131"); +const u8 gMapName_Route132[] = _("ROUTE 132"); +const u8 gMapName_Route133[] = _("ROUTE 133"); +const u8 gMapName_Route134[] = _("ROUTE 134"); +const u8 gMapName_Underwater[] = _("UNTERWASSER"); +const u8 gMapName_GraniteCave[] = _("GRANITHÖHLE"); +const u8 gMapName_MtChimney[] = _("SCHLOTBERG"); +const u8 gMapName_SafariZone[] = _("SAFARI-ZONE"); +const u8 gMapName_BattleTower[] = _("DUELLTURM"); +const u8 gMapName_PetalburgWoods[] = _("BLÜTENBURGWALD"); +const u8 gMapName_RusturfTunnel[] = _("METAFLURTUNNEL"); +const u8 gMapName_AbandonedShip[] = _("SCHIFFSWRACK"); +const u8 gMapName_NewMauville[] = _("NEU MALVENFROH"); +const u8 gMapName_MeteorFalls[] = _("METEORFÄLLE"); +const u8 gMapName_MtPyre[] = _("PYROBERG"); +const u8 gMapName_EvilTeamHideout[] = _("{EVIL_TEAM}s VERSTECK"); +const u8 gMapName_ShoalCave[] = _("KÜSTENHÖHLE"); +const u8 gMapName_SeafloorCavern[] = _("TIEFSEEHÖHLE"); +const u8 gMapName_VictoryRoad[] = _("SIEGESSTRASSE"); +const u8 gMapName_MirageIsland[] = _("WUNDEREILAND"); +const u8 gMapName_CaveOfOrigin[] = _("URZEITHÖHLE"); +const u8 gMapName_SouthernIsland[] = _("INSEL IM SÜDEN"); +const u8 gMapName_FieryPath[] = _("FEURIGER PFAD"); +const u8 gMapName_JaggedPass[] = _("STEILPASS"); +const u8 gMapName_SealedChamber[] = _("SIEGELKAMMER"); +const u8 gMapName_ScorchedSlab[] = _("SONNENGROTTE"); +const u8 gMapName_IslandCave[] = _("INSELHÖHLE"); +const u8 gMapName_DesertRuins[] = _("WÜSTENRUINE"); +const u8 gMapName_AncientTomb[] = _("GRABMAL"); +const u8 gMapName_InsideOfTruck[] = _("IM MÖBELWAGEN"); +const u8 gMapName_SkyPillar[] = _("HIMMELTURM"); +const u8 gMapName_SecretBase[] = _("GEHEIMBASIS"); +const u8 gMapName_None[] = _(""); diff --git a/src/data/region_map_names_en.h b/src/data/region_map_names_en.h new file mode 100644 index 000000000..9dde3d71a --- /dev/null +++ b/src/data/region_map_names_en.h @@ -0,0 +1,79 @@ +const u8 gMapName_LittlerootTown[] = _("LITTLEROOT{NAME_END} TOWN"); +const u8 gMapName_OldaleTown[] = _("OLDALE{NAME_END} TOWN"); +const u8 gMapName_DewfordTown[] = _("DEWFORD{NAME_END} TOWN"); +const u8 gMapName_LavaridgeTown[] = _("LAVARIDGE{NAME_END} TOWN"); +const u8 gMapName_FallarborTown[] = _("FALLARBOR{NAME_END} TOWN"); +const u8 gMapName_VerdanturfTown[] = _("VERDANTURF{NAME_END} TOWN"); +const u8 gMapName_PacifidlogTown[] = _("PACIFIDLOG{NAME_END} TOWN"); +const u8 gMapName_PetalburgCity[] = _("PETALBURG{NAME_END} CITY"); +const u8 gMapName_SlateportCity[] = _("SLATEPORT{NAME_END} CITY"); +const u8 gMapName_MauvilleCity[] = _("MAUVILLE{NAME_END} CITY"); +const u8 gMapName_RustboroCity[] = _("RUSTBORO{NAME_END} CITY"); +const u8 gMapName_FortreeCity[] = _("FORTREE{NAME_END} CITY"); +const u8 gMapName_LilycoveCity[] = _("LILYCOVE{NAME_END} CITY"); +const u8 gMapName_MossdeepCity[] = _("MOSSDEEP{NAME_END} CITY"); +const u8 gMapName_SootopolisCity[] = _("SOOTOPOLIS{NAME_END} CITY"); +const u8 gMapName_EverGrandeCity[] = _("EVER GRANDE{NAME_END} CITY"); +const u8 gMapName_Route101[] = _("ROUTE 101"); +const u8 gMapName_Route102[] = _("ROUTE 102"); +const u8 gMapName_Route103[] = _("ROUTE 103"); +const u8 gMapName_Route104[] = _("ROUTE 104"); +const u8 gMapName_Route105[] = _("ROUTE 105"); +const u8 gMapName_Route106[] = _("ROUTE 106"); +const u8 gMapName_Route107[] = _("ROUTE 107"); +const u8 gMapName_Route108[] = _("ROUTE 108"); +const u8 gMapName_Route109[] = _("ROUTE 109"); +const u8 gMapName_Route110[] = _("ROUTE 110"); +const u8 gMapName_Route111[] = _("ROUTE 111"); +const u8 gMapName_Route112[] = _("ROUTE 112"); +const u8 gMapName_Route113[] = _("ROUTE 113"); +const u8 gMapName_Route114[] = _("ROUTE 114"); +const u8 gMapName_Route115[] = _("ROUTE 115"); +const u8 gMapName_Route116[] = _("ROUTE 116"); +const u8 gMapName_Route117[] = _("ROUTE 117"); +const u8 gMapName_Route118[] = _("ROUTE 118"); +const u8 gMapName_Route119[] = _("ROUTE 119"); +const u8 gMapName_Route120[] = _("ROUTE 120"); +const u8 gMapName_Route121[] = _("ROUTE 121"); +const u8 gMapName_Route122[] = _("ROUTE 122"); +const u8 gMapName_Route123[] = _("ROUTE 123"); +const u8 gMapName_Route124[] = _("ROUTE 124"); +const u8 gMapName_Route125[] = _("ROUTE 125"); +const u8 gMapName_Route126[] = _("ROUTE 126"); +const u8 gMapName_Route127[] = _("ROUTE 127"); +const u8 gMapName_Route128[] = _("ROUTE 128"); +const u8 gMapName_Route129[] = _("ROUTE 129"); +const u8 gMapName_Route130[] = _("ROUTE 130"); +const u8 gMapName_Route131[] = _("ROUTE 131"); +const u8 gMapName_Route132[] = _("ROUTE 132"); +const u8 gMapName_Route133[] = _("ROUTE 133"); +const u8 gMapName_Route134[] = _("ROUTE 134"); +const u8 gMapName_Underwater[] = _("UNDERWATER"); +const u8 gMapName_GraniteCave[] = _("GRANITE CAVE"); +const u8 gMapName_MtChimney[] = _("MT. CHIMNEY"); +const u8 gMapName_SafariZone[] = _("SAFARI ZONE"); +const u8 gMapName_BattleTower[] = _("BATTLE TOWER"); +const u8 gMapName_PetalburgWoods[] = _("PETALBURG WOODS"); +const u8 gMapName_RusturfTunnel[] = _("RUSTURF TUNNEL"); +const u8 gMapName_AbandonedShip[] = _("ABANDONED SHIP"); +const u8 gMapName_NewMauville[] = _("NEW MAUVILLE"); +const u8 gMapName_MeteorFalls[] = _("METEOR FALLS"); +const u8 gMapName_MtPyre[] = _("MT. PYRE"); +const u8 gMapName_EvilTeamHideout[] = _("{EVIL_TEAM} HIDEOUT"); +const u8 gMapName_ShoalCave[] = _("SHOAL CAVE"); +const u8 gMapName_SeafloorCavern[] = _("SEAFLOOR CAVERN"); +const u8 gMapName_VictoryRoad[] = _("VICTORY ROAD"); +const u8 gMapName_MirageIsland[] = _("MIRAGE ISLAND"); +const u8 gMapName_CaveOfOrigin[] = _("CAVE OF ORIGIN"); +const u8 gMapName_SouthernIsland[] = _("SOUTHERN ISLAND"); +const u8 gMapName_FieryPath[] = _("FIERY PATH"); +const u8 gMapName_JaggedPass[] = _("JAGGED PASS"); +const u8 gMapName_SealedChamber[] = _("SEALED CHAMBER"); +const u8 gMapName_ScorchedSlab[] = _("SCORCHED SLAB"); +const u8 gMapName_IslandCave[] = _("ISLAND CAVE"); +const u8 gMapName_DesertRuins[] = _("DESERT RUINS"); +const u8 gMapName_AncientTomb[] = _("ANCIENT TOMB"); +const u8 gMapName_InsideOfTruck[] = _("INSIDE OF TRUCK"); +const u8 gMapName_SkyPillar[] = _("SKY PILLAR"); +const u8 gMapName_SecretBase[] = _("SECRET BASE"); +const u8 gMapName_None[] = _(""); diff --git a/src/region_map.c b/src/region_map.c index 0a50da51e..07c88ccd3 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -1,7 +1,9 @@ #include "global.h" #include "main.h" #include "palette.h" +#include "rom4.h" #include "sprite.h" +#include "trig.h" struct UnknownStruct1 { @@ -12,7 +14,12 @@ struct UnknownStruct1 u8 (*unk18)(void); struct Sprite *unk1C; struct Sprite *unk20; - u8 filler24[0x18]; + s32 unk24; + s32 unk28; + u32 unk2C; + u32 unk30; + u32 unk34; + u32 unk38; s32 unk3C; s32 unk40; s32 unk44; @@ -44,7 +51,8 @@ struct UnknownStruct1 s8 unk7C; // movement delta vertical u8 unk7D; u8 unk7E; - u8 filler7F[0x101]; + u8 unk7F; + u8 filler80[0x100]; u8 unk180[0x100]; u8 unk280[0x100]; }; @@ -62,17 +70,142 @@ const u16 gUnknown_083E5D60[] = INCBIN_U16("graphics/pokenav/region_map.gbapal") const u8 gUnknown_083E5DA0[] = INCBIN_U8("graphics/pokenav/region_map.8bpp.lz"); const u8 gUnknown_083E6B04[] = INCBIN_U8("graphics/pokenav/region_map_map.bin.lz"); +const u8 gRegionMapSections[] = +{ + 0x58, 0x1D, 0x1D, 0x04, 0x1C, 0x1C, 0x1C, 0x1C, 0x1A, 0x58, 0x58, 0x22, 0x0B, 0x23, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, + 0x58, 0x1D, 0x58, 0x58, 0x58, 0x58, 0x38, 0x38, 0x1A, 0x58, 0x58, 0x22, 0x58, 0x23, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, + 0x1E, 0x1D, 0x58, 0x58, 0x58, 0x58, 0x38, 0x38, 0x1A, 0x58, 0x58, 0x22, 0x58, 0x23, 0x58, 0x58, 0x39, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, + 0x1E, 0x58, 0x58, 0x58, 0x58, 0x03, 0x1B, 0x1B, 0x1A, 0x58, 0x58, 0x22, 0x58, 0x23, 0x24, 0x24, 0x24, 0x24, 0x0C, 0x0C, 0x27, 0x27, 0x27, 0x27, 0x28, 0x28, 0x58, 0x58, + 0x1E, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x1A, 0x58, 0x58, 0x22, 0x58, 0x58, 0x58, 0x58, 0x25, 0x58, 0x58, 0x58, 0x27, 0x27, 0x27, 0x27, 0x28, 0x28, 0x58, 0x58, + 0x0A, 0x1F, 0x1F, 0x1F, 0x1F, 0x58, 0x58, 0x58, 0x1A, 0x58, 0x58, 0x22, 0x58, 0x58, 0x58, 0x58, 0x25, 0x58, 0x58, 0x58, 0x27, 0x27, 0x27, 0x27, 0x0D, 0x0D, 0x58, 0x58, + 0x0A, 0x58, 0x58, 0x58, 0x05, 0x20, 0x20, 0x20, 0x09, 0x09, 0x21, 0x21, 0x26, 0x26, 0x26, 0x26, 0x26, 0x58, 0x58, 0x58, 0x29, 0x29, 0x29, 0x2A, 0x2A, 0x2A, 0x58, 0x58, + 0x13, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x19, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x29, 0x0E, 0x29, 0x2A, 0x2A, 0x2A, 0x58, 0x58, + 0x13, 0x58, 0x58, 0x58, 0x12, 0x12, 0x12, 0x12, 0x19, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x29, 0x29, 0x29, 0x2A, 0x2A, 0x2A, 0x58, 0x0F, + 0x13, 0x07, 0x11, 0x11, 0x01, 0x58, 0x58, 0x58, 0x19, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x2B, 0x2B, 0x2B, 0x2B, 0x0F, + 0x14, 0x58, 0x58, 0x58, 0x10, 0x58, 0x58, 0x58, 0x08, 0x31, 0x31, 0x31, 0x30, 0x30, 0x30, 0x2F, 0x2F, 0x06, 0x2E, 0x2E, 0x2E, 0x2D, 0x2D, 0x2D, 0x2C, 0x2C, 0x58, 0x58, + 0x14, 0x58, 0x58, 0x58, 0x00, 0x58, 0x58, 0x58, 0x08, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, + 0x14, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x18, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x3A, 0x58, 0x58, 0x58, 0x58, 0x58, + 0x15, 0x15, 0x15, 0x58, 0x58, 0x58, 0x58, 0x58, 0x18, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, + 0x58, 0x58, 0x02, 0x16, 0x16, 0x16, 0x17, 0x17, 0x18, 0x58, 0x58, 0x58, 0x49, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, +}; + +#if ENGLISH +#include "data/region_map_names_en.h" +#elif GERMAN +#include "data/region_map_names_de.h" +#endif + +struct RegionMapLocation +{ + u8 x, y; + u8 width, height; + const u8 *name; +}; + +const struct RegionMapLocation gRegionMapLocations[] = +{ + { 4, 11, 1, 1, gMapName_LittlerootTown}, + { 4, 9, 1, 1, gMapName_OldaleTown}, + { 2, 14, 1, 1, gMapName_DewfordTown}, + { 5, 3, 1, 1, gMapName_LavaridgeTown}, + { 3, 0, 1, 1, gMapName_FallarborTown}, + { 4, 6, 1, 1, gMapName_VerdanturfTown}, + {17, 10, 1, 1, gMapName_PacifidlogTown}, + { 1, 9, 1, 1, gMapName_PetalburgCity}, + { 8, 10, 1, 2, gMapName_SlateportCity}, + { 8, 6, 2, 1, gMapName_MauvilleCity}, + { 0, 5, 1, 2, gMapName_RustboroCity}, + {12, 0, 1, 1, gMapName_FortreeCity}, + {18, 3, 2, 1, gMapName_LilycoveCity}, + {24, 5, 2, 1, gMapName_MossdeepCity}, + {21, 7, 1, 1, gMapName_SootopolisCity}, + {27, 8, 1, 2, gMapName_EverGrandeCity}, + { 4, 10, 1, 1, gMapName_Route101}, + { 2, 9, 2, 1, gMapName_Route102}, + { 4, 8, 4, 1, gMapName_Route103}, + { 0, 7, 1, 3, gMapName_Route104}, + { 0, 10, 1, 3, gMapName_Route105}, + { 0, 13, 2, 1, gMapName_Route106}, + { 3, 14, 3, 1, gMapName_Route107}, + { 6, 14, 2, 1, gMapName_Route108}, + { 8, 12, 1, 3, gMapName_Route109}, + { 8, 7, 1, 3, gMapName_Route110}, + { 8, 0, 1, 6, gMapName_Route111}, + { 6, 3, 2, 1, gMapName_Route112}, + { 4, 0, 4, 1, gMapName_Route113}, + { 1, 0, 2, 3, gMapName_Route114}, + { 0, 2, 1, 3, gMapName_Route115}, + { 1, 5, 4, 1, gMapName_Route116}, + { 5, 6, 3, 1, gMapName_Route117}, + {10, 6, 2, 1, gMapName_Route118}, + {11, 0, 1, 6, gMapName_Route119}, + {13, 0, 1, 4, gMapName_Route120}, + {14, 3, 4, 1, gMapName_Route121}, + {16, 4, 1, 2, gMapName_Route122}, + {12, 6, 5, 1, gMapName_Route123}, + {20, 3, 4, 3, gMapName_Route124}, + {24, 3, 2, 2, gMapName_Route125}, + {20, 6, 3, 3, gMapName_Route126}, + {23, 6, 3, 3, gMapName_Route127}, + {23, 9, 4, 1, gMapName_Route128}, + {24, 10, 2, 1, gMapName_Route129}, + {21, 10, 3, 1, gMapName_Route130}, + {18, 10, 3, 1, gMapName_Route131}, + {15, 10, 2, 1, gMapName_Route132}, + {12, 10, 3, 1, gMapName_Route133}, + { 9, 10, 3, 1, gMapName_Route134}, + {20, 3, 4, 3, gMapName_Underwater}, + {20, 6, 3, 3, gMapName_Underwater}, + {23, 6, 3, 3, gMapName_Underwater}, + {23, 9, 4, 1, gMapName_Underwater}, + {21, 7, 1, 1, gMapName_Underwater}, + { 1, 13, 1, 1, gMapName_GraniteCave}, + { 6, 2, 1, 1, gMapName_MtChimney}, + {16, 2, 1, 1, gMapName_SafariZone}, + {22, 12, 1, 1, gMapName_BattleTower}, + { 0, 8, 1, 1, gMapName_PetalburgWoods}, + { 2, 5, 1, 1, gMapName_RusturfTunnel}, + { 6, 14, 1, 1, gMapName_AbandonedShip}, + { 8, 7, 1, 1, gMapName_NewMauville}, + { 0, 3, 1, 1, gMapName_MeteorFalls}, + { 1, 2, 1, 1, gMapName_MeteorFalls}, + {16, 4, 1, 1, gMapName_MtPyre}, + {19, 3, 1, 1, gMapName_EvilTeamHideout}, + {24, 4, 1, 1, gMapName_ShoalCave}, + {24, 9, 1, 1, gMapName_SeafloorCavern}, + {24, 9, 1, 1, gMapName_Underwater}, + {27, 9, 1, 1, gMapName_VictoryRoad}, + {17, 10, 1, 1, gMapName_MirageIsland}, + {21, 7, 1, 1, gMapName_CaveOfOrigin}, + {12, 14, 1, 1, gMapName_SouthernIsland}, + { 6, 3, 1, 1, gMapName_FieryPath}, + { 7, 3, 1, 1, gMapName_FieryPath}, + { 6, 3, 1, 1, gMapName_JaggedPass}, + { 7, 2, 1, 1, gMapName_JaggedPass}, + {11, 10, 1, 1, gMapName_SealedChamber}, + {11, 10, 1, 1, gMapName_Underwater}, + {13, 0, 1, 1, gMapName_ScorchedSlab}, + {0, 10, 1, 1, gMapName_IslandCave}, + { 8, 3, 1, 1, gMapName_DesertRuins}, + {13, 2, 1, 1, gMapName_AncientTomb}, + { 0, 0, 1, 1, gMapName_InsideOfTruck}, + {19, 10, 1, 1, gMapName_SkyPillar}, + { 0, 0, 1, 1, gMapName_SecretBase}, + { 0, 0, 1, 1, gMapName_None}, +}; + void sub_80FA904(struct UnknownStruct1 *, u8); bool8 sub_80FA940(void); u8 sub_80FAB78(void); u8 _swiopen(void); u8 sub_80FAD04(void); u8 sub_80FADE4(void); -void sub_80FB170(int, int, int, int, u16, u16, int); -void sub_80FB238(); +void sub_80FB170(s16, s16, s16, s16, u16, u16, u8); +void sub_80FB238(s16, s16); void sub_80FB260(void); -u16 GetRegionMapSectionAt(); +u16 GetRegionMapSectionAt(u16, u16); void sub_80FB32C(void); +void sub_80FB600(void); u16 sub_80FB758(); u16 sub_80FB9C0(u16); void sub_80FBA18(); @@ -409,3 +542,190 @@ u8 sub_80FAFC0(void) sub_80FB170(gUnknown_020388CC->unk5C, gUnknown_020388CC->unk5E, 0x38, 0x48, gUnknown_020388CC->unk4C >> 8, gUnknown_020388CC->unk4C >> 8, 0); return r4; } + +void sub_80FB170(s16 a, s16 b, s16 c, s16 d, u16 e, u16 f, u8 g) +{ + s32 var1; + s32 var2; + s32 var3; + s32 var4; + + gUnknown_020388CC->unk2C = e * gSineTable[g + 64] >> 8; + gUnknown_020388CC->unk30 = e * -gSineTable[g] >> 8; + gUnknown_020388CC->unk34 = f * gSineTable[g] >> 8; + gUnknown_020388CC->unk38 = f * gSineTable[g + 64] >> 8; + + var1 = (a << 8) + (c << 8); + var2 = d * gUnknown_020388CC->unk34 + gUnknown_020388CC->unk2C * c; + gUnknown_020388CC->unk24 = var1 - var2; + + var3 = (b << 8) + (d << 8); + var4 = gUnknown_020388CC->unk38 * d + gUnknown_020388CC->unk30 * c; + gUnknown_020388CC->unk28 = var3 - var4; + + gUnknown_020388CC->unk7D = 1; +} + +void sub_80FB238(s16 a, s16 b) +{ + gUnknown_020388CC->unk24 = 0x1C00 + (a << 8); + gUnknown_020388CC->unk28 = 0x2400 + (b << 8); + gUnknown_020388CC->unk7D = 1; +} + +void sub_80FB260(void) +{ + if (gUnknown_020388CC->unk7D != 0) + { + REG_BG2PA = gUnknown_020388CC->unk2C; + REG_BG2PB = gUnknown_020388CC->unk34; + REG_BG2PC = gUnknown_020388CC->unk30; + REG_BG2PD = gUnknown_020388CC->unk38; + REG_BG2X = gUnknown_020388CC->unk24; + REG_BG2Y = gUnknown_020388CC->unk28; + gUnknown_020388CC->unk7D = 0; + } +} + +void sub_80FB2A4(s16 a, s16 b) +{ + sub_80FB170(a, b, 0x38, 0x48, 0x100, 0x100, 0); + sub_80FB260(); + if (gUnknown_020388CC->unk20 != NULL) + { + gUnknown_020388CC->unk20->pos2.x = -a; + gUnknown_020388CC->unk20->pos2.y = -b; + } +} + +u16 GetRegionMapSectionAt(u16 x, u16 y) +{ + + if (y < 2 || y > 16 || x < 1 || x > 0x1C) + return 0x58; + y -= 2; + x -= 1; + return gRegionMapSections[x + y * 28]; +} + +void sub_80FB32C(void) +{ + struct MapHeader *mapHeader; + u16 mapWidth; + u16 mapHeight; + u16 x; + u16 y; + u16 r1; + u16 r9; + + if (gSaveBlock1.location.mapGroup == 0x19 && (gSaveBlock1.location.mapNum == 0x29 || gSaveBlock1.location.mapNum == 0x2A || gSaveBlock1.location.mapNum == 0x2B)) + { + sub_80FB600(); + return; + } + + switch (get_map_light_level_by_bank_and_number(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum) - 1) + { + default: + case 0: + case 1: + case 2: + case 4: + case 5: + gUnknown_020388CC->unk14 = gMapHeader.name; + gUnknown_020388CC->unk7F = 0; + mapWidth = gMapHeader.mapData->width; + mapHeight = gMapHeader.mapData->height; + x = gSaveBlock1.pos.x; + y = gSaveBlock1.pos.y; + if (gUnknown_020388CC->unk14 == 0x45) + gUnknown_020388CC->unk7F = 1; + break; + case 3: + case 6: + mapHeader = get_mapheader_by_bank_and_number(gSaveBlock1.warp4.mapGroup, gSaveBlock1.warp4.mapNum); + gUnknown_020388CC->unk14 = mapHeader->name; + gUnknown_020388CC->unk7F = 1; + mapWidth = mapHeader->mapData->width; + mapHeight = mapHeader->mapData->height; + x = gSaveBlock1.warp4.x; + y = gSaveBlock1.warp4.y; + break; + case 8: + mapHeader = get_mapheader_by_bank_and_number(gSaveBlock1.warp2.mapGroup, gSaveBlock1.warp2.mapNum); + gUnknown_020388CC->unk14 = mapHeader->name; + gUnknown_020388CC->unk7F = 1; + mapWidth = mapHeader->mapData->width; + mapHeight = mapHeader->mapData->height; + x = gSaveBlock1.warp2.x; + y = gSaveBlock1.warp2.y; + break; + case 7: + { + struct WarpData *r4; + + gUnknown_020388CC->unk14 = gMapHeader.name; + if (gUnknown_020388CC->unk14 != 0x57) + { + r4 = &gSaveBlock1.warp4; + mapHeader = get_mapheader_by_bank_and_number(r4->mapGroup, r4->mapNum); + } + else + { + r4 = &gSaveBlock1.warp2; + mapHeader = get_mapheader_by_bank_and_number(r4->mapGroup, r4->mapNum); + gUnknown_020388CC->unk14 = mapHeader->name; + } + gUnknown_020388CC->unk7F = 0; + mapWidth = mapHeader->mapData->width; + mapHeight = mapHeader->mapData->height; + x = r4->x; + y = r4->y; + } + break; + } + r9 = x; + r1 = mapWidth / gRegionMapLocations[gUnknown_020388CC->unk14].width; + if (r1 == 0) + r1 = 1; + x /= r1; + if (x >= gRegionMapLocations[gUnknown_020388CC->unk14].width) + x = gRegionMapLocations[gUnknown_020388CC->unk14].width - 1; + r1 = mapHeight / gRegionMapLocations[gUnknown_020388CC->unk14].height; + if (r1 == 0) + r1 = 1; + y /= r1; + if (y >= gRegionMapLocations[gUnknown_020388CC->unk14].height) + y = gRegionMapLocations[gUnknown_020388CC->unk14].height - 1; + switch (gUnknown_020388CC->unk14) + { + case 0x1D: + if (y != 0) + x = 0; + break; + case 0x29: + case 0x33: + x = 0; + if (gSaveBlock1.pos.x > 32) + x = 1; + if (gSaveBlock1.pos.x > 0x33) + x++; + y = 0; + if (gSaveBlock1.pos.y > 0x25) + y = 1; + if (gSaveBlock1.pos.y > 0x38) + y++; + break; + case 0x24: + x = 0; + if (r9 > 14) + x = 1; + if (r9 > 0x1C) + x++; + if (r9 > 0x36) + x++; + break; + } + gUnknown_020388CC->unk54 = gRegionMapLocations[gUnknown_020388CC->unk14].x + x + 1; + gUnknown_020388CC->unk56 = gRegionMapLocations[gUnknown_020388CC->unk14].y + y + 2; +} -- cgit v1.2.3 From 4d28489c65aba913e4169b3467dce49b54f38c87 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 15 Jul 2017 14:50:23 -0500 Subject: decompile sub_80FB600 - sub_80FBB3C --- asm/region_map.s | 809 ------------------------------------------------------ data/region_map.s | 51 ---- src/region_map.c | 356 +++++++++++++++++++++++- 3 files changed, 343 insertions(+), 873 deletions(-) diff --git a/asm/region_map.s b/asm/region_map.s index e4d4ad34c..6ed4185fc 100644 --- a/asm/region_map.s +++ b/asm/region_map.s @@ -6,815 +6,6 @@ .text - thumb_func_start sub_80FB600 -sub_80FB600: @ 80FB600 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - movs r7, 0 - movs r0, 0 - mov r8, r0 - mov r4, sp - adds r4, 0x1 - mov r5, sp - adds r5, 0x2 - add r6, sp, 0x4 - mov r0, sp - adds r1, r4, 0 - adds r2, r5, 0 - adds r3, r6, 0 - bl GetSSTidalLocation - lsls r0, 24 - lsrs r0, 24 - mov r10, r5 - cmp r0, 0x4 - bhi _080FB694 - lsls r0, 2 - ldr r1, _080FB63C @ =_080FB640 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080FB63C: .4byte _080FB640 - .align 2, 0 -_080FB640: - .4byte _080FB694 - .4byte _080FB654 - .4byte _080FB664 - .4byte _080FB674 - .4byte _080FB684 -_080FB654: - ldr r2, _080FB660 @ =gUnknown_020388CC - ldr r1, [r2] - movs r0, 0x8 - strh r0, [r1, 0x14] - b _080FB710 - .align 2, 0 -_080FB660: .4byte gUnknown_020388CC -_080FB664: - ldr r2, _080FB670 @ =gUnknown_020388CC - ldr r1, [r2] - movs r0, 0xC - strh r0, [r1, 0x14] - b _080FB710 - .align 2, 0 -_080FB670: .4byte gUnknown_020388CC -_080FB674: - ldr r2, _080FB680 @ =gUnknown_020388CC - ldr r1, [r2] - movs r0, 0x27 - strh r0, [r1, 0x14] - b _080FB710 - .align 2, 0 -_080FB680: .4byte gUnknown_020388CC -_080FB684: - ldr r2, _080FB690 @ =gUnknown_020388CC - ldr r1, [r2] - movs r0, 0x2E - strh r0, [r1, 0x14] - b _080FB710 - .align 2, 0 -_080FB690: .4byte gUnknown_020388CC -_080FB694: - mov r0, sp - ldrb r0, [r0] - ldrb r1, [r4] - bl get_mapheader_by_bank_and_number - ldr r1, _080FB750 @ =gUnknown_020388CC - mov r9, r1 - ldr r2, [r1] - ldrb r1, [r0, 0x14] - strh r1, [r2, 0x14] - ldr r6, [r0] - ldr r1, _080FB754 @ =gRegionMapLocations - ldrh r0, [r2, 0x14] - lsls r0, 3 - adds r5, r0, r1 - ldrb r4, [r5, 0x2] - ldr r0, [r6] - adds r1, r4, 0 - bl __divsi3 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0 - bne _080FB6C6 - movs r1, 0x1 -_080FB6C6: - mov r2, r10 - movs r3, 0 - ldrsh r0, [r2, r3] - bl __divsi3 - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - cmp r8, r4 - bcc _080FB6E2 - subs r0, r4, 0x1 - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 -_080FB6E2: - ldrb r4, [r5, 0x3] - ldr r0, [r6, 0x4] - adds r1, r4, 0 - bl __divsi3 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0 - bne _080FB6F6 - movs r1, 0x1 -_080FB6F6: - mov r2, sp - movs r3, 0x4 - ldrsh r0, [r2, r3] - bl __divsi3 - lsls r0, 16 - lsrs r7, r0, 16 - mov r2, r9 - cmp r7, r4 - bcc _080FB710 - subs r0, r4, 0x1 - lsls r0, 16 - lsrs r7, r0, 16 -_080FB710: - ldr r0, [r2] - adds r0, 0x7F - movs r1, 0 - strb r1, [r0] - ldr r2, [r2] - ldr r3, _080FB754 @ =gRegionMapLocations - ldrh r0, [r2, 0x14] - lsls r0, 3 - adds r0, r3 - ldrb r0, [r0] - add r0, r8 - adds r0, 0x1 - adds r1, r2, 0 - adds r1, 0x54 - strh r0, [r1] - ldrh r0, [r2, 0x14] - lsls r0, 3 - adds r0, r3 - ldrb r0, [r0, 0x1] - adds r0, r7, r0 - adds r0, 0x2 - adds r2, 0x56 - strh r0, [r2] - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080FB750: .4byte gUnknown_020388CC -_080FB754: .4byte gRegionMapLocations - thumb_func_end sub_80FB600 - - thumb_func_start sub_80FB758 -sub_80FB758: @ 80FB758 - push {lr} - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x58 - bls _080FB764 - b _080FB9A0 -_080FB764: - lsls r0, 2 - ldr r1, _080FB770 @ =_080FB774 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080FB770: .4byte _080FB774 - .align 2, 0 -_080FB774: - .4byte _080FB8DC - .4byte _080FB8E4 - .4byte _080FB8EA - .4byte _080FB8F4 - .4byte _080FB8FC - .4byte _080FB904 - .4byte _080FB90C - .4byte _080FB914 - .4byte _080FB91C - .4byte _080FB924 - .4byte _080FB92C - .4byte _080FB934 - .4byte _080FB93C - .4byte _080FB944 - .4byte _080FB94C - .4byte _080FB954 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB96C - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB988 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB9A0 - .4byte _080FB8D8 -_080FB8D8: - movs r0, 0 - b _080FB9A2 -_080FB8DC: - ldr r0, _080FB8E0 @ =0x0000080f - b _080FB956 - .align 2, 0 -_080FB8E0: .4byte 0x0000080f -_080FB8E4: - movs r0, 0x81 - lsls r0, 4 - b _080FB956 -_080FB8EA: - ldr r0, _080FB8F0 @ =0x00000811 - b _080FB956 - .align 2, 0 -_080FB8F0: .4byte 0x00000811 -_080FB8F4: - ldr r0, _080FB8F8 @ =0x00000812 - b _080FB956 - .align 2, 0 -_080FB8F8: .4byte 0x00000812 -_080FB8FC: - ldr r0, _080FB900 @ =0x00000813 - b _080FB956 - .align 2, 0 -_080FB900: .4byte 0x00000813 -_080FB904: - ldr r0, _080FB908 @ =0x00000814 - b _080FB956 - .align 2, 0 -_080FB908: .4byte 0x00000814 -_080FB90C: - ldr r0, _080FB910 @ =0x00000815 - b _080FB956 - .align 2, 0 -_080FB910: .4byte 0x00000815 -_080FB914: - ldr r0, _080FB918 @ =0x00000816 - b _080FB956 - .align 2, 0 -_080FB918: .4byte 0x00000816 -_080FB91C: - ldr r0, _080FB920 @ =0x00000817 - b _080FB956 - .align 2, 0 -_080FB920: .4byte 0x00000817 -_080FB924: - ldr r0, _080FB928 @ =0x00000818 - b _080FB956 - .align 2, 0 -_080FB928: .4byte 0x00000818 -_080FB92C: - ldr r0, _080FB930 @ =0x00000819 - b _080FB956 - .align 2, 0 -_080FB930: .4byte 0x00000819 -_080FB934: - ldr r0, _080FB938 @ =0x0000081a - b _080FB956 - .align 2, 0 -_080FB938: .4byte 0x0000081a -_080FB93C: - ldr r0, _080FB940 @ =0x0000081b - b _080FB956 - .align 2, 0 -_080FB940: .4byte 0x0000081b -_080FB944: - ldr r0, _080FB948 @ =0x0000081c - b _080FB956 - .align 2, 0 -_080FB948: .4byte 0x0000081c -_080FB94C: - ldr r0, _080FB950 @ =0x0000081d - b _080FB956 - .align 2, 0 -_080FB950: .4byte 0x0000081d -_080FB954: - ldr r0, _080FB968 @ =0x0000081e -_080FB956: - bl FlagGet - lsls r0, 24 - movs r1, 0x3 - cmp r0, 0 - beq _080FB964 - movs r1, 0x2 -_080FB964: - adds r0, r1, 0 - b _080FB9A2 - .align 2, 0 -_080FB968: .4byte 0x0000081e -_080FB96C: - ldr r0, _080FB984 @ =0x00000848 - bl FlagGet - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - negs r0, r1 - orrs r0, r1 - asrs r0, 31 - movs r1, 0x4 - ands r0, r1 - b _080FB9A2 - .align 2, 0 -_080FB984: .4byte 0x00000848 -_080FB988: - ldr r0, _080FB99C @ =0x00000849 - bl FlagGet - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - negs r0, r1 - orrs r0, r1 - lsrs r0, 31 - b _080FB9A2 - .align 2, 0 -_080FB99C: .4byte 0x00000849 -_080FB9A0: - movs r0, 0x1 -_080FB9A2: - pop {r1} - bx r1 - thumb_func_end sub_80FB758 - - thumb_func_start GetRegionMapSectionAt_ -GetRegionMapSectionAt_: @ 80FB9A8 - push {lr} - lsls r0, 16 - lsrs r0, 16 - lsls r1, 16 - lsrs r1, 16 - bl GetRegionMapSectionAt - lsls r0, 16 - lsrs r0, 16 - pop {r1} - bx r1 - thumb_func_end GetRegionMapSectionAt_ - - thumb_func_start sub_80FB9C0 -sub_80FB9C0: @ 80FB9C0 - push {r4-r6,lr} - lsls r0, 16 - lsrs r3, r0, 16 - movs r2, 0 - ldr r0, _080FB9E8 @ =gUnknown_083E7684 - ldrh r1, [r0] - adds r4, r0, 0 - cmp r1, 0x58 - beq _080FB9FC - adds r5, r4, 0 - adds r6, r4, 0x2 -_080FB9D6: - lsls r1, r2, 2 - adds r0, r1, r5 - ldrh r0, [r0] - cmp r0, r3 - bne _080FB9EC - adds r0, r1, r6 - ldrh r0, [r0] - b _080FB9FE - .align 2, 0 -_080FB9E8: .4byte gUnknown_083E7684 -_080FB9EC: - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - lsls r0, r2, 2 - adds r0, r4 - ldrh r0, [r0] - cmp r0, 0x58 - bne _080FB9D6 -_080FB9FC: - adds r0, r3, 0 -_080FB9FE: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_80FB9C0 - - thumb_func_start sub_80FBA04 -sub_80FBA04: @ 80FBA04 - push {lr} - lsls r0, 16 - lsrs r0, 16 - bl sub_80FB9C0 - lsls r0, 16 - lsrs r0, 16 - pop {r1} - bx r1 - thumb_func_end sub_80FBA04 - - thumb_func_start sub_80FBA18 -sub_80FBA18: @ 80FBA18 - push {r4-r6,lr} - ldr r0, _080FBA2C @ =gUnknown_020388CC - ldr r1, [r0] - ldrh r0, [r1, 0x14] - cmp r0, 0x58 - bne _080FBA30 - movs r0, 0 - strb r0, [r1, 0x17] - b _080FBA96 - .align 2, 0 -_080FBA2C: .4byte gUnknown_020388CC -_080FBA30: - adds r0, r1, 0 - adds r0, 0x78 - ldrb r0, [r0] - cmp r0, 0 - bne _080FBA40 - adds r0, r1, 0 - adds r0, 0x54 - b _080FBA44 -_080FBA40: - adds r0, r1, 0 - adds r0, 0x64 -_080FBA44: - ldrh r4, [r0] - adds r0, 0x2 - ldrh r5, [r0] - movs r6, 0 - b _080FBA70 -_080FBA4E: - subs r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - adds r0, r4, 0 - adds r1, r5, 0 - bl GetRegionMapSectionAt - ldr r1, _080FBA8C @ =gUnknown_020388CC - ldr r1, [r1] - lsls r0, 16 - lsrs r0, 16 - ldrh r1, [r1, 0x14] - cmp r0, r1 - bne _080FBA70 - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 -_080FBA70: - cmp r4, 0x1 - bhi _080FBA4E - adds r0, r5, 0 - bl sub_80FBAA0 - lsls r0, 24 - cmp r0, 0 - beq _080FBA90 - subs r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - movs r4, 0x1D - b _080FBA70 - .align 2, 0 -_080FBA8C: .4byte gUnknown_020388CC -_080FBA90: - ldr r0, _080FBA9C @ =gUnknown_020388CC - ldr r0, [r0] - strb r6, [r0, 0x17] -_080FBA96: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080FBA9C: .4byte gUnknown_020388CC - thumb_func_end sub_80FBA18 - - thumb_func_start sub_80FBAA0 -sub_80FBAA0: @ 80FBAA0 - push {r4,r5,lr} - lsls r0, 16 - ldr r1, _080FBAB4 @ =0xffff0000 - adds r0, r1 - lsrs r5, r0, 16 - ldr r0, _080FBAB8 @ =0x0000ffff - cmp r5, r0 - bne _080FBAC0 - b _080FBAE2 - .align 2, 0 -_080FBAB4: .4byte 0xffff0000 -_080FBAB8: .4byte 0x0000ffff -_080FBABC: - movs r0, 0x1 - b _080FBAE4 -_080FBAC0: - movs r4, 0x1 -_080FBAC2: - adds r0, r4, 0 - adds r1, r5, 0 - bl GetRegionMapSectionAt - ldr r1, _080FBAEC @ =gUnknown_020388CC - ldr r1, [r1] - lsls r0, 16 - lsrs r0, 16 - ldrh r1, [r1, 0x14] - cmp r0, r1 - beq _080FBABC - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x1C - bls _080FBAC2 -_080FBAE2: - movs r0, 0 -_080FBAE4: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080FBAEC: .4byte gUnknown_020388CC - thumb_func_end sub_80FBAA0 - - thumb_func_start sub_80FBAF0 -sub_80FBAF0: @ 80FBAF0 - push {r4,lr} - adds r2, r0, 0 - ldr r0, _080FBB34 @ =gUnknown_020388CC - ldr r1, [r0] - adds r3, r1, 0 - adds r3, 0x7A - movs r0, 0 - ldrsb r0, [r3, r0] - cmp r0, 0 - beq _080FBB2E - adds r0, r1, 0 - adds r0, 0x7B - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - lsls r0, 1 - ldrh r4, [r2, 0x20] - adds r0, r4 - strh r0, [r2, 0x20] - adds r0, r1, 0 - adds r0, 0x7C - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - lsls r0, 1 - ldrh r1, [r2, 0x22] - adds r0, r1 - strh r0, [r2, 0x22] - ldrb r0, [r3] - subs r0, 0x1 - strb r0, [r3] -_080FBB2E: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080FBB34: .4byte gUnknown_020388CC - thumb_func_end sub_80FBAF0 - - thumb_func_start nullsub_66 -nullsub_66: @ 80FBB38 - bx lr - thumb_func_end nullsub_66 - - thumb_func_start sub_80FBB3C -sub_80FBB3C: @ 80FBB3C - push {r4-r7,lr} - sub sp, 0x28 - lsls r0, 16 - lsls r1, 16 - lsrs r6, r1, 16 - ldr r1, _080FBBAC @ =gUnknown_083E76E8 - ldr r2, [r1, 0x4] - ldr r1, [r1] - str r1, [sp, 0x20] - str r2, [sp, 0x24] - mov r2, sp - ldr r1, _080FBBB0 @ =gSpriteTemplate_83E76F0 - ldm r1!, {r3-r5} - stm r2!, {r3-r5} - ldm r1!, {r3-r5} - stm r2!, {r3-r5} - lsrs r3, r0, 16 - add r2, sp, 0x18 - ldrh r1, [r2, 0x4] - orrs r1, r0 - str r1, [r2, 0x4] - mov r0, sp - strh r3, [r0] - ldr r0, _080FBBB4 @ =gUnknown_020388CC - ldr r4, [r0] - adds r0, r4, 0 - adds r0, 0x58 - strh r3, [r0] - ldr r5, _080FBBB8 @ =0xffff0000 - add r1, sp, 0x20 - ldr r0, [r1, 0x4] - ands r0, r5 - orrs r0, r6 - str r0, [r1, 0x4] - mov r0, sp - strh r6, [r0, 0x2] - adds r3, r4, 0 - adds r0, r3, 0 - adds r0, 0x5A - strh r6, [r0] - adds r0, 0x1E - ldrb r0, [r0] - adds r7, r1, 0 - cmp r0, 0 - bne _080FBBC0 - movs r1, 0xC0 - lsls r1, 1 - adds r0, r3, r1 - str r0, [sp, 0x18] - ldr r0, [r2, 0x4] - ands r0, r5 - subs r1, 0x80 - orrs r0, r1 - str r0, [r2, 0x4] - ldr r0, _080FBBBC @ =sub_80FBAF0 - b _080FBBD6 - .align 2, 0 -_080FBBAC: .4byte gUnknown_083E76E8 -_080FBBB0: .4byte gSpriteTemplate_83E76F0 -_080FBBB4: .4byte gUnknown_020388CC -_080FBBB8: .4byte 0xffff0000 -_080FBBBC: .4byte sub_80FBAF0 -_080FBBC0: - movs r3, 0xA0 - lsls r3, 2 - adds r0, r4, r3 - str r0, [sp, 0x18] - ldr r0, [r2, 0x4] - ands r0, r5 - movs r1, 0xC0 - lsls r1, 3 - orrs r0, r1 - str r0, [r2, 0x4] - ldr r0, _080FBC38 @ =nullsub_66 -_080FBBD6: - str r0, [sp, 0x14] - adds r0, r2, 0 - bl LoadSpriteSheet - adds r0, r7, 0 - bl LoadSpritePalette - mov r0, sp - movs r1, 0x38 - movs r2, 0x48 - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x40 - beq _080FBC90 - ldr r4, _080FBC3C @ =gUnknown_020388CC - ldr r2, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _080FBC40 @ =gSprites - adds r3, r0, r1 - str r3, [r2, 0x1C] - adds r2, 0x78 - ldrb r0, [r2] - cmp r0, 0x1 - bne _080FBC44 - ldrb r1, [r3, 0x3] - movs r0, 0x3F - ands r0, r1 - movs r1, 0x80 - orrs r0, r1 - strb r0, [r3, 0x3] - ldr r2, [r4] - ldr r1, [r2, 0x1C] - ldrh r0, [r1, 0x20] - subs r0, 0x8 - strh r0, [r1, 0x20] - ldr r1, [r2, 0x1C] - ldrh r0, [r1, 0x22] - subs r0, 0x8 - strh r0, [r1, 0x22] - ldr r0, [r2, 0x1C] - movs r1, 0x1 - bl StartSpriteAnim - b _080FBC6C - .align 2, 0 -_080FBC38: .4byte nullsub_66 -_080FBC3C: .4byte gUnknown_020388CC -_080FBC40: .4byte gSprites -_080FBC44: - ldrb r1, [r3, 0x3] - movs r0, 0x3F - ands r0, r1 - movs r1, 0x40 - orrs r0, r1 - strb r0, [r3, 0x3] - ldr r1, [r4] - ldr r2, [r1, 0x1C] - adds r0, r1, 0 - adds r0, 0x54 - ldrh r0, [r0] - lsls r0, 3 - adds r0, 0x4 - strh r0, [r2, 0x20] - ldr r2, [r1, 0x1C] - adds r1, 0x56 - ldrh r0, [r1] - lsls r0, 3 - adds r0, 0x4 - strh r0, [r2, 0x22] -_080FBC6C: - ldr r4, _080FBC98 @ =gUnknown_020388CC - ldr r0, [r4] - ldr r1, [r0, 0x1C] - movs r0, 0x2 - strh r0, [r1, 0x30] - adds r0, r6, 0 - bl IndexOfSpritePaletteTag - ldr r1, [r4] - ldr r2, [r1, 0x1C] - lsls r0, 24 - lsrs r0, 20 - ldr r4, _080FBC9C @ =0x00000101 - adds r0, r4 - strh r0, [r2, 0x32] - ldr r1, [r1, 0x1C] - movs r0, 0x1 - strh r0, [r1, 0x34] -_080FBC90: - add sp, 0x28 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080FBC98: .4byte gUnknown_020388CC -_080FBC9C: .4byte 0x00000101 - thumb_func_end sub_80FBB3C - thumb_func_start sub_80FBCA0 sub_80FBCA0: @ 80FBCA0 push {r4,lr} diff --git a/data/region_map.s b/data/region_map.s index 78b467212..1ffcc22fb 100644 --- a/data/region_map.s +++ b/data/region_map.s @@ -3,57 +3,6 @@ .section .rodata -@ 83E6FF4 -@ .include "data/region_map_locations.inc" - -gUnknown_083E7684:: @ 83E7684 - .2byte 50, 39 - .2byte 51, 41 - .2byte 52, 42 - .2byte 53, 43 - .2byte 54, 14 - .2byte 69, 43 - .2byte 66, 12 - .2byte 79, 49 - .2byte 59, 19 - .2byte 76, 27 - .2byte 65, 37 - .2byte 85, 46 - .2byte 88, 88 - - .align 2 -gOamData_83E76B8:: @ 83E76B8 - .2byte 0x0000 - .2byte 0x4000 - .2byte 0x0400 - - .align 2 -gSpriteAnim_83E76C0:: @ 83E76C0 - obj_image_anim_frame 0, 20 - obj_image_anim_frame 4, 20 - obj_image_anim_jump 0 - - .align 2 -gSpriteAnim_83E76CC:: @ 83E76CC - obj_image_anim_frame 0, 10 - obj_image_anim_frame 16, 10 - obj_image_anim_frame 32, 10 - obj_image_anim_frame 16, 10 - obj_image_anim_jump 0 - - .align 2 -gSpriteAnimTable_83E76E0:: @ 83E76E0 - .4byte gSpriteAnim_83E76C0 - .4byte gSpriteAnim_83E76CC - - .align 2 -gUnknown_083E76E8:: @ 83E76E8 - obj_pal gPokenavCursor_Pal, 0x0000 - - .align 2 -gSpriteTemplate_83E76F0:: @ 83E76F0 - spr_template 0, 0, gOamData_83E76B8, gSpriteAnimTable_83E76E0, NULL, gDummySpriteAffineAnimTable, sub_80FBAF0 - .align 2 gOamData_083E7708:: @ 83E7708 .2byte 0x0000 diff --git a/src/region_map.c b/src/region_map.c index 07c88ccd3..9e95c40d0 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -1,4 +1,6 @@ #include "global.h" +#include "event_data.h" +#include "field_specials.h" #include "main.h" #include "palette.h" #include "rom4.h" @@ -10,7 +12,7 @@ struct UnknownStruct1 u8 filler0[0x14]; u16 unk14; u8 unk16; - u8 filler17[1]; + u8 unk17; u8 (*unk18)(void); struct Sprite *unk1C; struct Sprite *unk20; @@ -54,7 +56,7 @@ struct UnknownStruct1 u8 unk7F; u8 filler80[0x100]; u8 unk180[0x100]; - u8 unk280[0x100]; + u8 unk280[0x100]; // possibly 0x600 }; extern struct UnknownStruct1 *gUnknown_020388CC; @@ -194,6 +196,23 @@ const struct RegionMapLocation gRegionMapLocations[] = { 0, 0, 1, 1, gMapName_None}, }; +const u16 gUnknown_083E7684[][2] = +{ + {50, 39}, + {51, 41}, + {52, 42}, + {53, 43}, + {54, 14}, + {69, 43}, + {66, 12}, + {79, 49}, + {59, 19}, + {76, 27}, + {65, 37}, + {85, 46}, + {88, 88}, +}; + void sub_80FA904(struct UnknownStruct1 *, u8); bool8 sub_80FA940(void); u8 sub_80FAB78(void); @@ -206,10 +225,11 @@ void sub_80FB260(void); u16 GetRegionMapSectionAt(u16, u16); void sub_80FB32C(void); void sub_80FB600(void); -u16 sub_80FB758(); +u16 sub_80FB758(u16); u16 sub_80FB9C0(u16); -void sub_80FBA18(); -void sub_80FBB3C(); +void sub_80FBA18(void); +u8 sub_80FBAA0(u16); +void sub_80FBB3C(u16, u16); void sub_80FBCA0(void); void sub_80FBDF8(void); void sub_80FBE24(void); @@ -549,20 +569,20 @@ void sub_80FB170(s16 a, s16 b, s16 c, s16 d, u16 e, u16 f, u8 g) s32 var2; s32 var3; s32 var4; - + gUnknown_020388CC->unk2C = e * gSineTable[g + 64] >> 8; gUnknown_020388CC->unk30 = e * -gSineTable[g] >> 8; gUnknown_020388CC->unk34 = f * gSineTable[g] >> 8; gUnknown_020388CC->unk38 = f * gSineTable[g + 64] >> 8; - + var1 = (a << 8) + (c << 8); var2 = d * gUnknown_020388CC->unk34 + gUnknown_020388CC->unk2C * c; gUnknown_020388CC->unk24 = var1 - var2; - + var3 = (b << 8) + (d << 8); var4 = gUnknown_020388CC->unk38 * d + gUnknown_020388CC->unk30 * c; gUnknown_020388CC->unk28 = var3 - var4; - + gUnknown_020388CC->unk7D = 1; } @@ -600,7 +620,7 @@ void sub_80FB2A4(s16 a, s16 b) u16 GetRegionMapSectionAt(u16 x, u16 y) { - + if (y < 2 || y > 16 || x < 1 || x > 0x1C) return 0x58; y -= 2; @@ -617,13 +637,13 @@ void sub_80FB32C(void) u16 y; u16 r1; u16 r9; - + if (gSaveBlock1.location.mapGroup == 0x19 && (gSaveBlock1.location.mapNum == 0x29 || gSaveBlock1.location.mapNum == 0x2A || gSaveBlock1.location.mapNum == 0x2B)) { sub_80FB600(); return; } - + switch (get_map_light_level_by_bank_and_number(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum) - 1) { default: @@ -663,7 +683,7 @@ void sub_80FB32C(void) case 7: { struct WarpData *r4; - + gUnknown_020388CC->unk14 = gMapHeader.name; if (gUnknown_020388CC->unk14 != 0x57) { @@ -684,19 +704,23 @@ void sub_80FB32C(void) } break; } + r9 = x; + r1 = mapWidth / gRegionMapLocations[gUnknown_020388CC->unk14].width; if (r1 == 0) r1 = 1; x /= r1; if (x >= gRegionMapLocations[gUnknown_020388CC->unk14].width) x = gRegionMapLocations[gUnknown_020388CC->unk14].width - 1; + r1 = mapHeight / gRegionMapLocations[gUnknown_020388CC->unk14].height; if (r1 == 0) r1 = 1; y /= r1; if (y >= gRegionMapLocations[gUnknown_020388CC->unk14].height) y = gRegionMapLocations[gUnknown_020388CC->unk14].height - 1; + switch (gUnknown_020388CC->unk14) { case 0x1D: @@ -729,3 +753,309 @@ void sub_80FB32C(void) gUnknown_020388CC->unk54 = gRegionMapLocations[gUnknown_020388CC->unk14].x + x + 1; gUnknown_020388CC->unk56 = gRegionMapLocations[gUnknown_020388CC->unk14].y + y + 2; } + +void sub_80FB600(void) +{ + u16 y = 0; + u16 x = 0; + u8 mapGroup; + u8 mapNum; + s16 sp2; + s16 sp4; + + switch (GetSSTidalLocation(&mapGroup, &mapNum, &sp2, &sp4)) + { + case 1: + gUnknown_020388CC->unk14 = 8; + break; + case 2: + gUnknown_020388CC->unk14 = 12; + break; + case 3: + gUnknown_020388CC->unk14 = 0x27; + break; + case 4: + gUnknown_020388CC->unk14 = 0x2E; + break; + default: + case 0: + { + struct MapHeader *mapHeader = get_mapheader_by_bank_and_number(mapGroup, mapNum); + u16 r1; + + gUnknown_020388CC->unk14 = mapHeader->name; + r1 = mapHeader->mapData->width / gRegionMapLocations[gUnknown_020388CC->unk14].width; + if (r1 == 0) + r1 = 1; + x = sp2 / r1; + if (x >= gRegionMapLocations[gUnknown_020388CC->unk14].width) + x = gRegionMapLocations[gUnknown_020388CC->unk14].width - 1; + + r1 = mapHeader->mapData->height / gRegionMapLocations[gUnknown_020388CC->unk14].height; + if (r1 == 0) + r1 = 1; + y = sp4 / r1; + if (y >= gRegionMapLocations[gUnknown_020388CC->unk14].height) + y = gRegionMapLocations[gUnknown_020388CC->unk14].height - 1; + } + break; + } + gUnknown_020388CC->unk7F = 0; + gUnknown_020388CC->unk54 = gRegionMapLocations[gUnknown_020388CC->unk14].x + x + 1; + gUnknown_020388CC->unk56 = gRegionMapLocations[gUnknown_020388CC->unk14].y + y + 2; +} + +u16 sub_80FB758(u16 a) +{ + switch (a) + { + case 88: + return 0; + case 0: + return FlagGet(0x80F) ? 2 : 3; + case 1: + return FlagGet(0x810) ? 2 : 3; + case 2: + return FlagGet(0x811) ? 2 : 3; + case 3: + return FlagGet(0x812) ? 2 : 3; + case 4: + return FlagGet(0x813) ? 2 : 3; + case 5: + return FlagGet(0x814) ? 2 : 3; + case 6: + return FlagGet(0x815) ? 2 : 3; + case 7: + return FlagGet(0x816) ? 2 : 3; + case 8: + return FlagGet(0x817) ? 2 : 3; + case 9: + return FlagGet(0x818) ? 2 : 3; + case 10: + return FlagGet(0x819) ? 2 : 3; + case 11: + return FlagGet(0x81A) ? 2 : 3; + case 12: + return FlagGet(0x81B) ? 2 : 3; + case 13: + return FlagGet(0x81C) ? 2 : 3; + case 14: + return FlagGet(0x81D) ? 2 : 3; + case 15: + return FlagGet(0x81E) ? 2 : 3; + case 58: + return FlagGet(0x848) ? 4 : 0; + case 73: + return FlagGet(0x849) ? 1 : 0; + default: + return 1; + } +} + +u16 GetRegionMapSectionAt_(u16 x, u16 y) +{ + return GetRegionMapSectionAt(x, y); +} + +u16 sub_80FB9C0(u16 a) +{ + u16 i = 0; + + while (gUnknown_083E7684[i][0] != 88) + { + if (gUnknown_083E7684[i][0] == a) + return gUnknown_083E7684[i][1]; + i++; + } + return a; +} + +u16 sub_80FBA04(u16 a) +{ + return sub_80FB9C0(a); +} + +void sub_80FBA18(void) +{ + u16 x; + u16 y; + u16 i; + + if (gUnknown_020388CC->unk14 == 88) + { + gUnknown_020388CC->unk17 = 0; + return; + } + + if (gUnknown_020388CC->unk78 == 0) + { + x = gUnknown_020388CC->unk54; + y = gUnknown_020388CC->unk56; + } + else + { + x = gUnknown_020388CC->unk64; + y = gUnknown_020388CC->unk66; + } + + i = 0; + while (1) + { + if (x <= 1) + { + if (sub_80FBAA0(y) != 0) + { + y--; + x = 0x1D; + } + else + { + break; + } + } + else + { + x--; + if (GetRegionMapSectionAt(x, y) == gUnknown_020388CC->unk14) + i++; + } + } + + gUnknown_020388CC->unk17 = i; +} + +u8 sub_80FBAA0(u16 a) +{ + u16 x; + u16 y; + + y = a - 1; + if (y == 0xFFFF) + return 0; + + x = 1; + while (x < 0x1D) + { + if (GetRegionMapSectionAt(x, y) == gUnknown_020388CC->unk14) + return 1; + x++; + } + return 0; +} + + + +const struct OamData gOamData_83E76B8 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0, +}; + +const union AnimCmd gSpriteAnim_83E76C0[] = +{ + ANIMCMD_FRAME(0, 20), + ANIMCMD_FRAME(4, 20), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gSpriteAnim_83E76CC[] = +{ + ANIMCMD_FRAME(0, 10), + ANIMCMD_FRAME(16, 10), + ANIMCMD_FRAME(32, 10), + ANIMCMD_FRAME(16, 10), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gSpriteAnimTable_83E76E0[] = +{ + gSpriteAnim_83E76C0, + gSpriteAnim_83E76CC, +}; + +void sub_80FBAF0(struct Sprite *sprite) +{ + if (gUnknown_020388CC->unk7A != 0) + { + sprite->pos1.x += gUnknown_020388CC->unk7B * 2; + sprite->pos1.y += gUnknown_020388CC->unk7C * 2; + gUnknown_020388CC->unk7A--; + } +} + +void nullsub_66(struct Sprite *sprite) +{ +} + +void sub_80FBB3C(u16 tileTag, u16 paletteTag) +{ + u8 spriteId; + struct SpriteSheet spriteSheet; + struct SpritePalette spritePalette = + { + .data = gPokenavCursor_Pal, + }; + struct SpriteTemplate spriteTemplate = + { + .oam = &gOamData_83E76B8, + .anims = gSpriteAnimTable_83E76E0, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80FBAF0, + }; + + spriteSheet.tag = tileTag; + spriteTemplate.tileTag = tileTag; + gUnknown_020388CC->unk58 = tileTag; + + spritePalette.tag = paletteTag; + spriteTemplate.paletteTag = paletteTag; + gUnknown_020388CC->unk5A = paletteTag; + + if (gUnknown_020388CC->unk78 == 0) + { + spriteSheet.data = gUnknown_020388CC->unk180; + spriteSheet.size = 0x100; + spriteTemplate.callback = sub_80FBAF0; + } + else + { + spriteSheet.data = gUnknown_020388CC->unk280; + spriteSheet.size = 0x600; + spriteTemplate.callback = nullsub_66; + } + LoadSpriteSheet(&spriteSheet); + LoadSpritePalette(&spritePalette); + spriteId = CreateSprite(&spriteTemplate, 0x38, 0x48, 0); + if (spriteId != 64) + { + gUnknown_020388CC->unk1C = &gSprites[spriteId]; + if (gUnknown_020388CC->unk78 == 1) + { + gUnknown_020388CC->unk1C->oam.size = 2; + gUnknown_020388CC->unk1C->pos1.x -= 8; + gUnknown_020388CC->unk1C->pos1.y -= 8; + StartSpriteAnim(gUnknown_020388CC->unk1C, 1); + } + else + { + gUnknown_020388CC->unk1C->oam.size = 1; + gUnknown_020388CC->unk1C->pos1.x = gUnknown_020388CC->unk54 * 8 + 4; + gUnknown_020388CC->unk1C->pos1.y = gUnknown_020388CC->unk56 * 8 + 4; + } + gUnknown_020388CC->unk1C->data1 = 2; + gUnknown_020388CC->unk1C->data2 = IndexOfSpritePaletteTag(paletteTag) * 16 + 0x0101; + gUnknown_020388CC->unk1C->data3 = 1; + } +} -- cgit v1.2.3 From 32a9e2ae445e6f5674357edc4e8b9ee90c927c43 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 15 Jul 2017 20:52:54 -0500 Subject: finish decompiling region_map --- asm/region_map.s | 1427 ------------------------------------------------ data/region_map.s | 165 ------ include/field_effect.h | 2 + include/menu.h | 2 +- include/pokemon_menu.h | 1 + include/rom4.h | 2 +- include/secret_base.h | 1 + ld_script.txt | 2 - src/menu.c | 2 +- src/region_map.c | 746 ++++++++++++++++++++++++- 10 files changed, 747 insertions(+), 1603 deletions(-) delete mode 100644 asm/region_map.s delete mode 100644 data/region_map.s diff --git a/asm/region_map.s b/asm/region_map.s deleted file mode 100644 index 6ed4185fc..000000000 --- a/asm/region_map.s +++ /dev/null @@ -1,1427 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_80FBCA0 -sub_80FBCA0: @ 80FBCA0 - push {r4,lr} - ldr r4, _080FBCCC @ =gUnknown_020388CC - ldr r0, [r4] - ldr r0, [r0, 0x1C] - cmp r0, 0 - beq _080FBCC4 - bl DestroySprite - ldr r0, [r4] - adds r0, 0x58 - ldrh r0, [r0] - bl FreeSpriteTilesByTag - ldr r0, [r4] - adds r0, 0x5A - ldrh r0, [r0] - bl FreeSpritePaletteByTag -_080FBCC4: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080FBCCC: .4byte gUnknown_020388CC - thumb_func_end sub_80FBCA0 - - thumb_func_start unref_sub_80FBCD0 -unref_sub_80FBCD0: @ 80FBCD0 - ldr r0, _080FBCDC @ =gUnknown_020388CC - ldr r0, [r0] - ldr r1, [r0, 0x1C] - movs r0, 0x1 - strh r0, [r1, 0x34] - bx lr - .align 2, 0 -_080FBCDC: .4byte gUnknown_020388CC - thumb_func_end unref_sub_80FBCD0 - - thumb_func_start unref_sub_80FBCE0 -unref_sub_80FBCE0: @ 80FBCE0 - ldr r0, _080FBCEC @ =gUnknown_020388CC - ldr r0, [r0] - ldr r1, [r0, 0x1C] - movs r0, 0 - strh r0, [r1, 0x34] - bx lr - .align 2, 0 -_080FBCEC: .4byte gUnknown_020388CC - thumb_func_end unref_sub_80FBCE0 - - thumb_func_start sub_80FBCF0 -sub_80FBCF0: @ 80FBCF0 - push {r4,r5,lr} - sub sp, 0x28 - lsls r0, 16 - lsls r1, 16 - lsrs r1, 16 - ldr r2, _080FBD98 @ =gRegionMapBrendanIconTiles - str r2, [sp, 0x18] - movs r2, 0x80 - add r5, sp, 0x18 - lsrs r3, r0, 16 - orrs r0, r2 - str r0, [r5, 0x4] - ldr r0, _080FBD9C @ =gRegionMapBrendanIconPalette - str r0, [sp, 0x20] - ldr r2, _080FBDA0 @ =0xffff0000 - add r4, sp, 0x20 - ldr r0, [r4, 0x4] - ands r0, r2 - orrs r0, r1 - str r0, [r4, 0x4] - mov r0, sp - movs r2, 0 - strh r3, [r0] - strh r1, [r0, 0x2] - ldr r0, _080FBDA4 @ =gOamData_083E7708 - str r0, [sp, 0x4] - ldr r0, _080FBDA8 @ =gSpriteAnimTable_083E7718 - str r0, [sp, 0x8] - str r2, [sp, 0xC] - ldr r0, _080FBDAC @ =gDummySpriteAffineAnimTable - str r0, [sp, 0x10] - ldr r0, _080FBDB0 @ =SpriteCallbackDummy - str r0, [sp, 0x14] - ldr r0, _080FBDB4 @ =gSaveBlock2 - ldrb r0, [r0, 0x8] - cmp r0, 0x1 - bne _080FBD42 - ldr r0, _080FBDB8 @ =gRegionMapMayIconTiles - str r0, [sp, 0x18] - ldr r0, _080FBDBC @ =gRegionMapMayIconPalette - str r0, [sp, 0x20] -_080FBD42: - adds r0, r5, 0 - bl LoadSpriteSheet - adds r0, r4, 0 - bl LoadSpritePalette - mov r0, sp - movs r1, 0 - movs r2, 0 - movs r3, 0x1 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r1, _080FBDC0 @ =gUnknown_020388CC - ldr r2, [r1] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _080FBDC4 @ =gSprites - adds r1, r0 - str r1, [r2, 0x20] - adds r0, r2, 0 - adds r0, 0x78 - ldrb r0, [r0] - cmp r0, 0 - bne _080FBDCC - adds r0, r2, 0 - adds r0, 0x74 - ldrh r0, [r0] - lsls r0, 3 - adds r0, 0x4 - strh r0, [r1, 0x20] - ldr r1, [r2, 0x20] - adds r0, r2, 0 - adds r0, 0x76 - ldrh r0, [r0] - lsls r0, 3 - adds r0, 0x4 - strh r0, [r1, 0x22] - ldr r1, [r2, 0x20] - ldr r0, _080FBDC8 @ =sub_80FBF34 - b _080FBDEA - .align 2, 0 -_080FBD98: .4byte gRegionMapBrendanIconTiles -_080FBD9C: .4byte gRegionMapBrendanIconPalette -_080FBDA0: .4byte 0xffff0000 -_080FBDA4: .4byte gOamData_083E7708 -_080FBDA8: .4byte gSpriteAnimTable_083E7718 -_080FBDAC: .4byte gDummySpriteAffineAnimTable -_080FBDB0: .4byte SpriteCallbackDummy -_080FBDB4: .4byte gSaveBlock2 -_080FBDB8: .4byte gRegionMapMayIconTiles -_080FBDBC: .4byte gRegionMapMayIconPalette -_080FBDC0: .4byte gUnknown_020388CC -_080FBDC4: .4byte gSprites -_080FBDC8: .4byte sub_80FBF34 -_080FBDCC: - adds r0, r2, 0 - adds r0, 0x74 - ldrh r0, [r0] - lsls r0, 4 - subs r0, 0x30 - strh r0, [r1, 0x20] - ldr r1, [r2, 0x20] - adds r0, r2, 0 - adds r0, 0x76 - ldrh r0, [r0] - lsls r0, 4 - subs r0, 0x42 - strh r0, [r1, 0x22] - ldr r1, [r2, 0x20] - ldr r0, _080FBDF4 @ =sub_80FBEA4 -_080FBDEA: - str r0, [r1, 0x1C] - add sp, 0x28 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080FBDF4: .4byte sub_80FBEA4 - thumb_func_end sub_80FBCF0 - - thumb_func_start sub_80FBDF8 -sub_80FBDF8: @ 80FBDF8 - push {lr} - ldr r3, _080FBE1C @ =gUnknown_020388CC - ldr r0, [r3] - ldr r2, [r0, 0x20] - cmp r2, 0 - beq _080FBE16 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] - ldr r0, [r3] - ldr r1, [r0, 0x20] - ldr r0, _080FBE20 @ =SpriteCallbackDummy - str r0, [r1, 0x1C] -_080FBE16: - pop {r0} - bx r0 - .align 2, 0 -_080FBE1C: .4byte gUnknown_020388CC -_080FBE20: .4byte SpriteCallbackDummy - thumb_func_end sub_80FBDF8 - - thumb_func_start sub_80FBE24 -sub_80FBE24: @ 80FBE24 - push {lr} - ldr r0, _080FBE5C @ =gUnknown_020388CC - ldr r3, [r0] - ldr r1, [r3, 0x20] - cmp r1, 0 - beq _080FBE9A - adds r0, r3, 0 - adds r0, 0x78 - ldrb r0, [r0] - cmp r0, 0x1 - bne _080FBE64 - adds r0, r3, 0 - adds r0, 0x74 - ldrh r0, [r0] - lsls r0, 4 - subs r0, 0x30 - strh r0, [r1, 0x20] - ldr r1, [r3, 0x20] - adds r0, r3, 0 - adds r0, 0x76 - ldrh r0, [r0] - lsls r0, 4 - subs r0, 0x42 - strh r0, [r1, 0x22] - ldr r1, [r3, 0x20] - ldr r0, _080FBE60 @ =sub_80FBEA4 - b _080FBE8C - .align 2, 0 -_080FBE5C: .4byte gUnknown_020388CC -_080FBE60: .4byte sub_80FBEA4 -_080FBE64: - adds r0, r3, 0 - adds r0, 0x74 - ldrh r0, [r0] - lsls r0, 3 - adds r0, 0x4 - movs r2, 0 - strh r0, [r1, 0x20] - ldr r1, [r3, 0x20] - adds r0, r3, 0 - adds r0, 0x76 - ldrh r0, [r0] - lsls r0, 3 - adds r0, 0x4 - strh r0, [r1, 0x22] - ldr r0, [r3, 0x20] - strh r2, [r0, 0x24] - ldr r0, [r3, 0x20] - strh r2, [r0, 0x26] - ldr r1, [r3, 0x20] - ldr r0, _080FBEA0 @ =sub_80FBF34 -_080FBE8C: - str r0, [r1, 0x1C] - adds r1, 0x3E - ldrb r2, [r1] - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - strb r0, [r1] -_080FBE9A: - pop {r0} - bx r0 - .align 2, 0 -_080FBEA0: .4byte sub_80FBF34 - thumb_func_end sub_80FBE24 - - thumb_func_start sub_80FBEA4 -sub_80FBEA4: @ 80FBEA4 - push {r4,lr} - adds r3, r0, 0 - ldr r0, _080FBF08 @ =gUnknown_020388CC - ldr r1, [r0] - adds r0, r1, 0 - adds r0, 0x5C - movs r4, 0 - ldrsh r2, [r0, r4] - lsls r2, 1 - negs r2, r2 - strh r2, [r3, 0x24] - adds r1, 0x5E - movs r4, 0 - ldrsh r0, [r1, r4] - lsls r0, 1 - negs r0, r0 - strh r0, [r3, 0x26] - ldrh r1, [r3, 0x22] - adds r1, r0 - adds r0, r3, 0 - adds r0, 0x29 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - adds r0, r1 - strh r0, [r3, 0x2E] - ldrh r1, [r3, 0x20] - adds r1, r2 - adds r2, r3, 0 - adds r2, 0x28 - ldrb r2, [r2] - lsls r2, 24 - asrs r2, 24 - adds r2, r1 - strh r2, [r3, 0x30] - adds r0, 0x8 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0xB0 - bhi _080FBF04 - lsls r0, r2, 16 - asrs r2, r0, 16 - movs r0, 0x8 - negs r0, r0 - cmp r2, r0 - blt _080FBF04 - cmp r2, 0xF8 - ble _080FBF0C -_080FBF04: - movs r0, 0 - b _080FBF0E - .align 2, 0 -_080FBF08: .4byte gUnknown_020388CC -_080FBF0C: - movs r0, 0x1 -_080FBF0E: - strh r0, [r3, 0x32] - movs r1, 0x32 - ldrsh r0, [r3, r1] - cmp r0, 0x1 - bne _080FBF20 - adds r0, r3, 0 - bl sub_80FBF40 - b _080FBF2C -_080FBF20: - adds r0, r3, 0 - adds r0, 0x3E - ldrb r1, [r0] - movs r2, 0x4 - orrs r1, r2 - strb r1, [r0] -_080FBF2C: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80FBEA4 - - thumb_func_start sub_80FBF34 -sub_80FBF34: @ 80FBF34 - push {lr} - bl sub_80FBF40 - pop {r0} - bx r0 - thumb_func_end sub_80FBF34 - - thumb_func_start sub_80FBF40 -sub_80FBF40: @ 80FBF40 - push {lr} - adds r2, r0, 0 - ldr r0, _080FBF80 @ =gUnknown_020388CC - ldr r0, [r0] - adds r0, 0x7E - ldrb r0, [r0] - cmp r0, 0 - beq _080FBF84 - ldrh r0, [r2, 0x3C] - adds r0, 0x1 - strh r0, [r2, 0x3C] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x10 - ble _080FBF90 - movs r0, 0 - strh r0, [r2, 0x3C] - adds r3, r2, 0 - adds r3, 0x3E - ldrb r2, [r3] - lsrs r1, r2, 2 - movs r0, 0x1 - eors r1, r0 - ands r1, r0 - lsls r1, 2 - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - b _080FBF90 - .align 2, 0 -_080FBF80: .4byte gUnknown_020388CC -_080FBF84: - adds r2, 0x3E - ldrb r1, [r2] - movs r0, 0x5 - negs r0, r0 - ands r0, r1 - strb r0, [r2] -_080FBF90: - pop {r0} - bx r0 - thumb_func_end sub_80FBF40 - - thumb_func_start sub_80FBF94 -sub_80FBF94: @ 80FBF94 - push {lr} - ldr r0, _080FBFB0 @ =gUnknown_020388CC - ldr r1, [r0] - adds r0, r1, 0 - adds r0, 0x7F - ldrb r0, [r0] - cmp r0, 0 - beq _080FBFAA - adds r1, 0x7E - movs r0, 0x1 - strb r0, [r1] -_080FBFAA: - pop {r0} - bx r0 - .align 2, 0 -_080FBFB0: .4byte gUnknown_020388CC - thumb_func_end sub_80FBF94 - - thumb_func_start sub_80FBFB4 -sub_80FBFB4: @ 80FBFB4 - push {lr} - adds r3, r0, 0 - lsls r1, 16 - lsrs r1, 16 - lsls r2, 16 - lsrs r2, 16 - cmp r1, 0x56 - bne _080FBFCA - bl GetSecretBaseMapName - b _080FBFF2 -_080FBFCA: - cmp r1, 0x57 - bhi _080FBFE4 - ldr r0, _080FBFE0 @ =gRegionMapLocations - lsls r1, 3 - adds r0, 0x4 - adds r1, r0 - ldr r1, [r1] - adds r0, r3, 0 - bl StringCopy - b _080FBFF2 - .align 2, 0 -_080FBFE0: .4byte gRegionMapLocations -_080FBFE4: - cmp r2, 0 - bne _080FBFEA - movs r2, 0x12 -_080FBFEA: - adds r0, r3, 0 - movs r1, 0 - bl StringFill -_080FBFF2: - pop {r1} - bx r1 - thumb_func_end sub_80FBFB4 - - thumb_func_start CopyMapName -CopyMapName: @ 80FBFF8 - push {lr} - lsls r1, 16 - lsrs r1, 16 - cmp r1, 0x56 - beq _080FC014 - cmp r1, 0x57 - bne _080FC020 - ldr r1, _080FC010 @ =gOtherText_Ferry - bl StringCopy - b _080FC026 - .align 2, 0 -_080FC010: .4byte gOtherText_Ferry -_080FC014: - ldr r1, _080FC01C @ =gOtherText_SecretBase - bl StringCopy - b _080FC026 - .align 2, 0 -_080FC01C: .4byte gOtherText_SecretBase -_080FC020: - movs r2, 0 - bl sub_80FBFB4 -_080FC026: - pop {r1} - bx r1 - thumb_func_end CopyMapName - - thumb_func_start CopyLocationName -CopyLocationName: @ 80FC02C - push {lr} - lsls r1, 16 - lsrs r1, 16 - cmp r1, 0x42 - beq _080FC03C - bl CopyMapName - b _080FC042 -_080FC03C: - ldr r1, _080FC048 @ =gOtherText_Hideout - bl StringCopy -_080FC042: - pop {r1} - bx r1 - .align 2, 0 -_080FC048: .4byte gOtherText_Hideout - thumb_func_end CopyLocationName - - thumb_func_start sub_80FC04C -sub_80FC04C: @ 80FC04C - push {r4,r5,lr} - ldr r5, [sp, 0xC] - lsls r0, 16 - ldr r4, _080FC070 @ =gRegionMapLocations - lsrs r0, 13 - adds r0, r4 - ldrb r4, [r0] - strh r4, [r1] - ldrb r1, [r0, 0x1] - strh r1, [r2] - ldrb r1, [r0, 0x2] - strh r1, [r3] - ldrb r0, [r0, 0x3] - strh r0, [r5] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080FC070: .4byte gRegionMapLocations - thumb_func_end sub_80FC04C - - thumb_func_start sub_80FC074 -sub_80FC074: @ 80FC074 - push {r4,lr} - ldr r0, _080FC090 @ =gMain - ldr r1, _080FC094 @ =0x0000043c - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x9 - bls _080FC084 - b _080FC1F2 -_080FC084: - lsls r0, 2 - ldr r1, _080FC098 @ =_080FC09C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080FC090: .4byte gMain -_080FC094: .4byte 0x0000043c -_080FC098: .4byte _080FC09C - .align 2, 0 -_080FC09C: - .4byte _080FC0C4 - .4byte _080FC104 - .4byte _080FC110 - .4byte _080FC120 - .4byte _080FC15C - .4byte _080FC170 - .4byte _080FC184 - .4byte _080FC1A4 - .4byte _080FC1AA - .4byte _080FC1C4 -_080FC0C4: - movs r0, 0 - bl SetVBlankCallback - movs r0, 0x80 - lsls r0, 19 - movs r1, 0 - strh r1, [r0] - adds r0, 0x10 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - adds r0, 0x4 - strh r1, [r0] - subs r0, 0x2 - strh r1, [r0] - adds r0, 0x4 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - bl ResetPaletteFade - bl ResetSpriteData - bl FreeSpriteTileRanges - bl FreeAllSpritePalettes - b _080FC1E6 -_080FC104: - ldr r0, _080FC10C @ =gWindowConfig_81E7224 - bl SetUpWindowConfig - b _080FC1E6 - .align 2, 0 -_080FC10C: .4byte gWindowConfig_81E7224 -_080FC110: - ldr r0, _080FC11C @ =gWindowConfig_81E7224 - bl InitMenuWindow - bl MenuZeroFillScreen - b _080FC1E6 - .align 2, 0 -_080FC11C: .4byte gWindowConfig_81E7224 -_080FC120: - ldr r4, _080FC158 @ =0x02000008 - adds r0, r4, 0 - movs r1, 0 - bl sub_80FA8EC - movs r0, 0 - movs r1, 0 - bl sub_80FBB3C - movs r0, 0x1 - movs r1, 0x1 - bl sub_80FBCF0 - adds r1, r4, 0 - subs r1, 0x8 - ldrh r0, [r1, 0x1C] - strh r0, [r1, 0x6] - movs r2, 0xA4 - lsls r2, 4 - adds r4, r2 - adds r0, r4, 0 - movs r1, 0 - movs r2, 0xC - bl StringFill - bl sub_80FC254 - b _080FC1E6 - .align 2, 0 -_080FC158: .4byte 0x02000008 -_080FC15C: - ldr r0, _080FC168 @ =gUnknown_083E773C - ldr r1, _080FC16C @ =0x0600c000 - bl LZ77UnCompVram - b _080FC1E6 - .align 2, 0 -_080FC168: .4byte gUnknown_083E773C -_080FC16C: .4byte 0x0600c000 -_080FC170: - ldr r0, _080FC17C @ =gUnknown_083E7774 - ldr r1, _080FC180 @ =0x0600f000 - bl LZ77UnCompVram - b _080FC1E6 - .align 2, 0 -_080FC17C: .4byte gUnknown_083E7774 -_080FC180: .4byte 0x0600f000 -_080FC184: - ldr r0, _080FC19C @ =gUnknown_083E771C - movs r1, 0x10 - movs r2, 0x20 - bl LoadPalette - ldr r0, _080FC1A0 @ =gOtherText_FlyToWhere - movs r1, 0x1 - movs r2, 0x90 - movs r3, 0x1 - bl MenuPrint_PixelCoords - b _080FC1E6 - .align 2, 0 -_080FC19C: .4byte gUnknown_083E771C -_080FC1A0: .4byte gOtherText_FlyToWhere -_080FC1A4: - bl sub_80FC31C - b _080FC1E6 -_080FC1AA: - movs r0, 0x1 - negs r0, r0 - movs r1, 0x10 - movs r2, 0 - bl BlendPalettes - ldr r0, _080FC1C0 @ =sub_80FC214 - bl SetVBlankCallback - b _080FC1E6 - .align 2, 0 -_080FC1C0: .4byte sub_80FC214 -_080FC1C4: - ldr r1, _080FC1F8 @ =REG_BLDCNT - movs r0, 0 - strh r0, [r1] - subs r1, 0x46 - ldr r2, _080FC1FC @ =0x00001e0d - adds r0, r2, 0 - strh r0, [r1] - subs r1, 0xA - ldr r2, _080FC200 @ =0x00001741 - adds r0, r2, 0 - strh r0, [r1] - ldr r0, _080FC204 @ =sub_80FC5B4 - bl sub_80FC244 - ldr r0, _080FC208 @ =sub_80FC228 - bl SetMainCallback2 -_080FC1E6: - ldr r1, _080FC20C @ =gMain - ldr r0, _080FC210 @ =0x0000043c - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] -_080FC1F2: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080FC1F8: .4byte REG_BLDCNT -_080FC1FC: .4byte 0x00001e0d -_080FC200: .4byte 0x00001741 -_080FC204: .4byte sub_80FC5B4 -_080FC208: .4byte sub_80FC228 -_080FC20C: .4byte gMain -_080FC210: .4byte 0x0000043c - thumb_func_end sub_80FC074 - - thumb_func_start sub_80FC214 -sub_80FC214: @ 80FC214 - push {lr} - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - pop {r0} - bx r0 - thumb_func_end sub_80FC214 - - thumb_func_start sub_80FC228 -sub_80FC228: @ 80FC228 - push {lr} - ldr r0, _080FC240 @ =0x02000000 - ldr r0, [r0] - bl _call_via_r0 - bl AnimateSprites - bl BuildOamBuffer - pop {r0} - bx r0 - .align 2, 0 -_080FC240: .4byte 0x02000000 - thumb_func_end sub_80FC228 - - thumb_func_start sub_80FC244 -sub_80FC244: @ 80FC244 - ldr r1, _080FC250 @ =0x02000000 - str r0, [r1] - movs r0, 0 - strh r0, [r1, 0x4] - bx lr - .align 2, 0 -_080FC250: .4byte 0x02000000 - thumb_func_end sub_80FC244 - - thumb_func_start sub_80FC254 -sub_80FC254: @ 80FC254 - push {r4,r5,lr} - ldr r4, _080FC2AC @ =0x02000000 - ldrb r0, [r4, 0x1E] - cmp r0, 0x2 - beq _080FC262 - cmp r0, 0x4 - bne _080FC2EC -_080FC262: - movs r1, 0 - ldr r2, _080FC2B0 @ =gUnknown_083E79C0 - adds r5, r4, 0 -_080FC268: - lsls r0, r1, 3 - adds r4, r0, r2 - ldrh r0, [r5, 0x1C] - ldrh r3, [r4, 0x4] - cmp r0, r3 - bne _080FC2B4 - ldrh r0, [r4, 0x6] - bl FlagGet - lsls r0, 24 - cmp r0, 0 - beq _080FC2BE - movs r0, 0x10 - movs r1, 0xE - movs r2, 0x1D - movs r3, 0x13 - bl MenuDrawTextWindow - adds r0, r5, 0 - adds r0, 0x8 - movs r1, 0x11 - movs r2, 0xF - bl MenuPrint - ldrb r0, [r5, 0x1F] - ldr r1, [r4] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x1D - movs r2, 0x11 - bl MenuPrint_RightAligned - b _080FC310 - .align 2, 0 -_080FC2AC: .4byte 0x02000000 -_080FC2B0: .4byte gUnknown_083E79C0 -_080FC2B4: - adds r0, r1, 0x1 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0 - beq _080FC268 -_080FC2BE: - movs r0, 0 - cmp r0, 0 - bne _080FC310 - movs r0, 0x10 - movs r1, 0x10 - movs r2, 0x1D - movs r3, 0x13 - bl MenuDrawTextWindow - ldr r0, _080FC2E8 @ =0x02000008 - movs r1, 0x11 - movs r2, 0x11 - bl MenuPrint - movs r0, 0x10 - movs r1, 0xE - movs r2, 0x1D - movs r3, 0xF - bl MenuZeroFillWindowRect - b _080FC310 - .align 2, 0 -_080FC2E8: .4byte 0x02000008 -_080FC2EC: - movs r0, 0x10 - movs r1, 0x10 - movs r2, 0x1D - movs r3, 0x13 - bl MenuDrawTextWindow - ldr r1, _080FC318 @ =0x00000a48 - adds r0, r4, r1 - movs r1, 0x11 - movs r2, 0x11 - bl MenuPrint - movs r0, 0x10 - movs r1, 0xE - movs r2, 0x1D - movs r3, 0xF - bl MenuZeroFillWindowRect -_080FC310: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080FC318: .4byte 0x00000a48 - thumb_func_end sub_80FC254 - - thumb_func_start sub_80FC31C -sub_80FC31C: @ 80FC31C - push {r4,lr} - sub sp, 0x8 - ldr r0, _080FC360 @ =gUnknown_083E784C - ldr r4, _080FC364 @ =0x02000888 - adds r1, r4, 0 - bl LZ77UnCompWram - str r4, [sp] - ldr r1, _080FC368 @ =0xffff0000 - ldr r0, [sp, 0x4] - ands r0, r1 - movs r1, 0xE0 - lsls r1, 1 - orrs r0, r1 - ldr r1, _080FC36C @ =0x0000ffff - ands r0, r1 - movs r1, 0x80 - lsls r1, 10 - orrs r0, r1 - str r0, [sp, 0x4] - mov r0, sp - bl LoadSpriteSheet - ldr r0, _080FC370 @ =gUnknown_083E79CC - bl LoadSpritePalette - bl sub_80FC374 - bl sub_80FC484 - add sp, 0x8 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080FC360: .4byte gUnknown_083E784C -_080FC364: .4byte 0x02000888 -_080FC368: .4byte 0xffff0000 -_080FC36C: .4byte 0x0000ffff -_080FC370: .4byte gUnknown_083E79CC - thumb_func_end sub_80FC31C - - thumb_func_start sub_80FC374 -sub_80FC374: @ 80FC374 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x1C - ldr r0, _080FC3D4 @ =0x0000080f - str r0, [sp, 0xC] - movs r1, 0 - mov r9, r1 - mov r2, sp - adds r2, 0x6 - str r2, [sp, 0x14] - mov r3, sp - adds r3, 0xA - str r3, [sp, 0x18] - mov r0, sp - adds r0, 0x8 - str r0, [sp, 0x10] - add r1, sp, 0x4 - mov r10, r1 -_080FC39E: - ldr r2, [sp, 0x18] - str r2, [sp] - mov r0, r9 - add r1, sp, 0x4 - mov r2, sp - adds r2, 0x6 - ldr r3, [sp, 0x10] - bl sub_80FC04C - mov r3, r10 - ldrh r0, [r3] - adds r0, 0x1 - lsls r0, 3 - adds r0, 0x4 - strh r0, [r3] - mov r1, sp - ldrh r0, [r1, 0x6] - adds r0, 0x2 - lsls r0, 3 - adds r0, 0x4 - strh r0, [r1, 0x6] - ldr r2, [sp, 0x10] - ldrh r0, [r2] - cmp r0, 0x2 - bne _080FC3D8 - movs r7, 0x1 - b _080FC3E4 - .align 2, 0 -_080FC3D4: .4byte 0x0000080f -_080FC3D8: - ldr r3, [sp, 0x18] - ldrh r0, [r3] - movs r7, 0 - cmp r0, 0x2 - bne _080FC3E4 - movs r7, 0x2 -_080FC3E4: - mov r0, r10 - movs r2, 0 - ldrsh r1, [r0, r2] - ldr r3, [sp, 0x14] - movs r0, 0 - ldrsh r2, [r3, r0] - ldr r0, _080FC430 @ =gSpriteTemplate_83E7A38 - movs r3, 0xA - bl CreateSprite - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x40 - beq _080FC458 - ldr r1, _080FC434 @ =gSprites - mov r8, r1 - lsls r4, r5, 4 - adds r0, r4, r5 - lsls r6, r0, 2 - adds r2, r6, r1 - lsls r3, r7, 6 - ldrb r1, [r2, 0x1] - movs r0, 0x3F - ands r0, r1 - orrs r0, r3 - strb r0, [r2, 0x1] - ldr r0, [sp, 0xC] - bl FlagGet - lsls r0, 24 - cmp r0, 0 - beq _080FC43C - mov r0, r8 - adds r0, 0x1C - adds r0, r6, r0 - ldr r1, _080FC438 @ =sub_80FC55C - str r1, [r0] - b _080FC442 - .align 2, 0 -_080FC430: .4byte gSpriteTemplate_83E7A38 -_080FC434: .4byte gSprites -_080FC438: .4byte sub_80FC55C -_080FC43C: - adds r0, r7, 0x3 - lsls r0, 16 - lsrs r7, r0, 16 -_080FC442: - adds r4, r5 - lsls r4, 2 - ldr r0, _080FC480 @ =gSprites - adds r4, r0 - lsls r1, r7, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl StartSpriteAnim - mov r2, r9 - strh r2, [r4, 0x2E] -_080FC458: - ldr r0, [sp, 0xC] - adds r0, 0x1 - lsls r0, 16 - lsrs r0, 16 - str r0, [sp, 0xC] - mov r0, r9 - adds r0, 0x1 - lsls r0, 16 - lsrs r0, 16 - mov r9, r0 - cmp r0, 0xF - bls _080FC39E - add sp, 0x1C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080FC480: .4byte gSprites - thumb_func_end sub_80FC374 - - thumb_func_start sub_80FC484 -sub_80FC484: @ 80FC484 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xC - movs r0, 0 - mov r8, r0 - ldr r6, _080FC54C @ =gUnknown_083E79D4 - ldrh r0, [r6, 0x2] - cmp r0, 0x58 - beq _080FC53C - mov r5, sp - adds r5, 0x6 - add r7, sp, 0x4 - ldr r1, _080FC550 @ =gSprites - mov r9, r1 - movs r0, 0x1C - add r0, r9 - mov r10, r0 -_080FC4AC: - mov r1, r8 - lsls r4, r1, 2 - adds r0, r4, r6 - ldrh r0, [r0] - bl FlagGet - lsls r0, 24 - cmp r0, 0 - beq _080FC524 - adds r0, r6, 0x2 - adds r0, r4, r0 - ldrh r6, [r0] - mov r0, sp - adds r0, 0xA - str r0, [sp] - adds r0, r6, 0 - add r1, sp, 0x4 - adds r2, r5, 0 - add r3, sp, 0x8 - bl sub_80FC04C - ldrh r0, [r7] - adds r0, 0x1 - lsls r0, 3 - strh r0, [r7] - ldrh r0, [r5] - adds r0, 0x2 - lsls r0, 3 - strh r0, [r5] - movs r0, 0 - ldrsh r1, [r7, r0] - movs r0, 0 - ldrsh r2, [r5, r0] - ldr r0, _080FC554 @ =gSpriteTemplate_83E7A38 - movs r3, 0xA - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x40 - beq _080FC524 - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - mov r1, r9 - adds r4, r2, r1 - ldrb r1, [r4, 0x3] - movs r0, 0x3F - ands r0, r1 - movs r1, 0x40 - orrs r0, r1 - strb r0, [r4, 0x3] - add r2, r10 - ldr r0, _080FC558 @ =sub_80FC55C - str r0, [r2] - adds r0, r4, 0 - movs r1, 0x6 - bl StartSpriteAnim - strh r6, [r4, 0x2E] -_080FC524: - mov r0, r8 - adds r0, 0x1 - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - ldr r6, _080FC54C @ =gUnknown_083E79D4 - lsls r0, 2 - adds r1, r6, 0x2 - adds r0, r1 - ldrh r0, [r0] - cmp r0, 0x58 - bne _080FC4AC -_080FC53C: - add sp, 0xC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080FC54C: .4byte gUnknown_083E79D4 -_080FC550: .4byte gSprites -_080FC554: .4byte gSpriteTemplate_83E7A38 -_080FC558: .4byte sub_80FC55C - thumb_func_end sub_80FC484 - - thumb_func_start sub_80FC55C -sub_80FC55C: @ 80FC55C - push {lr} - adds r2, r0, 0 - ldr r0, _080FC59C @ =0x02000000 - ldrh r1, [r0, 0x1C] - movs r3, 0x2E - ldrsh r0, [r2, r3] - cmp r1, r0 - bne _080FC5A0 - ldrh r0, [r2, 0x30] - adds r0, 0x1 - strh r0, [r2, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x10 - ble _080FC5AE - movs r0, 0 - strh r0, [r2, 0x30] - adds r3, r2, 0 - adds r3, 0x3E - ldrb r2, [r3] - lsrs r1, r2, 2 - movs r0, 0x1 - eors r1, r0 - ands r1, r0 - lsls r1, 2 - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - b _080FC5AE - .align 2, 0 -_080FC59C: .4byte 0x02000000 -_080FC5A0: - movs r0, 0x10 - strh r0, [r2, 0x30] - adds r2, 0x3E - ldrb r1, [r2] - subs r0, 0x15 - ands r0, r1 - strb r0, [r2] -_080FC5AE: - pop {r0} - bx r0 - thumb_func_end sub_80FC55C - - thumb_func_start sub_80FC5B4 -sub_80FC5B4: @ 80FC5B4 - push {r4,lr} - sub sp, 0x4 - ldr r4, _080FC5C8 @ =0x02000000 - ldrh r1, [r4, 0x4] - cmp r1, 0 - beq _080FC5CC - cmp r1, 0x1 - beq _080FC5E4 - b _080FC5F4 - .align 2, 0 -_080FC5C8: .4byte 0x02000000 -_080FC5CC: - movs r0, 0x1 - negs r0, r0 - str r1, [sp] - movs r1, 0 - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - ldrh r0, [r4, 0x4] - adds r0, 0x1 - strh r0, [r4, 0x4] - b _080FC5F4 -_080FC5E4: - bl UpdatePaletteFade - lsls r0, 24 - cmp r0, 0 - bne _080FC5F4 - ldr r0, _080FC5FC @ =sub_80FC600 - bl sub_80FC244 -_080FC5F4: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080FC5FC: .4byte sub_80FC600 - thumb_func_end sub_80FC5B4 - - thumb_func_start sub_80FC600 -sub_80FC600: @ 80FC600 - push {r4,lr} - ldr r0, _080FC620 @ =0x02000000 - ldrh r0, [r0, 0x4] - cmp r0, 0 - bne _080FC68A - bl sub_80FAB60 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x5 - bhi _080FC68A - lsls r0, 2 - ldr r1, _080FC624 @ =_080FC628 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080FC620: .4byte 0x02000000 -_080FC624: .4byte _080FC628 - .align 2, 0 -_080FC628: - .4byte _080FC68A - .4byte _080FC68A - .4byte _080FC68A - .4byte _080FC640 - .4byte _080FC646 - .4byte _080FC674 -_080FC640: - bl sub_80FC254 - b _080FC68A -_080FC646: - ldr r4, _080FC668 @ =0x02000000 - ldrb r0, [r4, 0x1E] - cmp r0, 0x2 - beq _080FC652 - cmp r0, 0x4 - bne _080FC68A -_080FC652: - movs r0, 0x5 - bl m4aSongNumStart - ldr r1, _080FC66C @ =0x00000a6e - adds r0, r4, r1 - movs r1, 0x1 - strb r1, [r0] - ldr r0, _080FC670 @ =sub_80FC69C - bl sub_80FC244 - b _080FC68A - .align 2, 0 -_080FC668: .4byte 0x02000000 -_080FC66C: .4byte 0x00000a6e -_080FC670: .4byte sub_80FC69C -_080FC674: - movs r0, 0x5 - bl m4aSongNumStart - ldr r0, _080FC690 @ =0x02000000 - ldr r1, _080FC694 @ =0x00000a6e - adds r0, r1 - movs r1, 0 - strb r1, [r0] - ldr r0, _080FC698 @ =sub_80FC69C - bl sub_80FC244 -_080FC68A: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080FC690: .4byte 0x02000000 -_080FC694: .4byte 0x00000a6e -_080FC698: .4byte sub_80FC69C - thumb_func_end sub_80FC600 - - thumb_func_start sub_80FC69C -sub_80FC69C: @ 80FC69C - push {r4,lr} - sub sp, 0x4 - ldr r4, _080FC6B0 @ =0x02000000 - ldrh r1, [r4, 0x4] - cmp r1, 0 - beq _080FC6B4 - cmp r1, 0x1 - beq _080FC6CC - b _080FC792 - .align 2, 0 -_080FC6B0: .4byte 0x02000000 -_080FC6B4: - movs r0, 0x1 - negs r0, r0 - str r1, [sp] - movs r1, 0 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldrh r0, [r4, 0x4] - adds r0, 0x1 - strh r0, [r4, 0x4] - b _080FC792 -_080FC6CC: - bl UpdatePaletteFade - lsls r0, 24 - cmp r0, 0 - bne _080FC792 - bl sub_80FAB10 - ldr r1, _080FC6F4 @ =0x00000a6e - adds r0, r4, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _080FC78C - ldrh r0, [r4, 0x1C] - cmp r0, 0xF - beq _080FC724 - cmp r0, 0xF - bgt _080FC6F8 - cmp r0, 0 - beq _080FC710 - b _080FC748 - .align 2, 0 -_080FC6F4: .4byte 0x00000a6e -_080FC6F8: - cmp r0, 0x3A - beq _080FC708 - cmp r0, 0x49 - bne _080FC748 - movs r0, 0x16 - bl sub_8053538 - b _080FC786 -_080FC708: - movs r0, 0x15 - bl sub_8053538 - b _080FC786 -_080FC710: - ldr r0, _080FC720 @ =gSaveBlock2 - ldrb r0, [r0, 0x8] - movs r1, 0xD - cmp r0, 0 - bne _080FC73A - movs r1, 0xC - b _080FC73A - .align 2, 0 -_080FC720: .4byte gSaveBlock2 -_080FC724: - ldr r0, _080FC744 @ =0x00000854 - bl FlagGet - lsls r0, 24 - movs r1, 0xB - cmp r0, 0 - beq _080FC73A - ldrb r0, [r4, 0x1F] - cmp r0, 0 - bne _080FC73A - movs r1, 0x14 -_080FC73A: - adds r0, r1, 0 - bl sub_8053538 - b _080FC786 - .align 2, 0 -_080FC744: .4byte 0x00000854 -_080FC748: - ldr r3, _080FC764 @ =gUnknown_083E7920 - ldr r0, _080FC768 @ =0x02000000 - ldrh r1, [r0, 0x1C] - lsls r0, r1, 1 - adds r2, r0, r1 - adds r0, r3, 0x2 - adds r1, r2, r0 - ldrb r0, [r1] - cmp r0, 0 - beq _080FC76C - bl sub_8053538 - b _080FC786 - .align 2, 0 -_080FC764: .4byte gUnknown_083E7920 -_080FC768: .4byte 0x02000000 -_080FC76C: - adds r0, r2, r3 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - adds r1, r3, 0x1 - adds r1, r2, r1 - ldrb r1, [r1] - lsls r1, 24 - asrs r1, 24 - movs r2, 0x1 - negs r2, r2 - bl warp1_set_2 -_080FC786: - bl sub_80865BC - b _080FC792 -_080FC78C: - ldr r0, _080FC79C @ =sub_808AD58 - bl SetMainCallback2 -_080FC792: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080FC79C: .4byte sub_808AD58 - thumb_func_end sub_80FC69C - - .align 2, 0 @ Don't pad with nop. diff --git a/data/region_map.s b/data/region_map.s deleted file mode 100644 index 1ffcc22fb..000000000 --- a/data/region_map.s +++ /dev/null @@ -1,165 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - - .align 2 -gOamData_083E7708:: @ 83E7708 - .2byte 0x0000 - .2byte 0x4000 - .2byte 0x0800 - - .align 2 -gSpriteAnim_83E7710: @ 83E7710 - obj_image_anim_frame 0, 5 - obj_image_anim_end - -gSpriteAnimTable_083E7718:: @ 83E7718 ANIMCMD - .4byte gSpriteAnim_83E7710 - -gUnknown_083E771C:: @ 83E771C - .incbin "graphics/pokenav/map_frame.gbapal" - -gUnknown_083E773C:: @ 83E773C - .incbin "graphics/pokenav/map_frame.4bpp.lz" - -gUnknown_083E7774:: @ 83E7774 - .incbin "graphics/pokenav/map_frame.bin.lz" - - .align 2 -gPokenavMapMisc_Pal:: - .incbin "graphics/pokenav/map_misc.gbapal" - -gUnknown_083E784C:: @ 83E784C - .incbin "graphics/pokenav/map_misc.4bpp.lz" - -gUnknown_083E7920:: @ 83E7920 - .byte 0, 9, 1 - .byte 0, 10, 14 - .byte 0, 11, 15 - .byte 0, 12, 16 - .byte 0, 13, 17 - .byte 0, 14, 18 - .byte 0, 15, 19 - .byte 0, 0, 3 - .byte 0, 1, 4 - .byte 0, 2, 5 - .byte 0, 3, 6 - .byte 0, 4, 7 - .byte 0, 5, 8 - .byte 0, 6, 9 - .byte 0, 7, 10 - .byte 0, 8, 11 - .byte 0, 16, 0 - .byte 0, 17, 0 - .byte 0, 18, 0 - .byte 0, 19, 0 - .byte 0, 20, 0 - .byte 0, 21, 0 - .byte 0, 22, 0 - .byte 0, 23, 0 - .byte 0, 24, 0 - .byte 0, 25, 0 - .byte 0, 26, 0 - .byte 0, 27, 0 - .byte 0, 28, 0 - .byte 0, 29, 0 - .byte 0, 30, 0 - .byte 0, 31, 0 - .byte 0, 32, 0 - .byte 0, 33, 0 - .byte 0, 34, 0 - .byte 0, 35, 0 - .byte 0, 36, 0 - .byte 0, 37, 0 - .byte 0, 38, 0 - .byte 0, 39, 0 - .byte 0, 40, 0 - .byte 0, 41, 0 - .byte 0, 42, 0 - .byte 0, 43, 0 - .byte 0, 44, 0 - .byte 0, 45, 0 - .byte 0, 46, 0 - .byte 0, 47, 0 - .byte 0, 48, 0 - .byte 0, 49, 0 - - .align 2 -Unknown_3E79B8: @ 83E79B8 - .4byte OtherText_PokeLeague - .4byte OtherText_PokeCenter - - .align 2 -gUnknown_083E79C0:: @ 83E79C0 - .4byte Unknown_3E79B8 - .2byte 0xF - .2byte 0x854 - -@ XXX: what is this? - .align 2 - .4byte 0x2000000 - - .align 2 -gUnknown_083E79CC:: @ 83E79CC - obj_pal gPokenavMapMisc_Pal, 0x0002 - - .align 2 -gUnknown_083E79D4:: @ 83E79D4 - .2byte 2120, 58 - .2byte 65535, 88 - - .align 2 -gOamData_83E79DC:: @ 83E79DC - .2byte 0x0000 - .2byte 0x0000 - .2byte 0x0800 - - .align 2 -gSpriteAnim_83E79E4:: @ 83E79E4 - obj_image_anim_frame 0, 5 - obj_image_anim_end - - .align 2 -gSpriteAnim_83E79EC:: @ 83E79EC - obj_image_anim_frame 1, 5 - obj_image_anim_end - - .align 2 -gSpriteAnim_83E79F4:: @ 83E79F4 - obj_image_anim_frame 3, 5 - obj_image_anim_end - - .align 2 -gSpriteAnim_83E79FC:: @ 83E79FC - obj_image_anim_frame 5, 5 - obj_image_anim_end - - .align 2 -gSpriteAnim_83E7A04:: @ 83E7A04 - obj_image_anim_frame 6, 5 - obj_image_anim_end - - .align 2 -gSpriteAnim_83E7A0C:: @ 83E7A0C - obj_image_anim_frame 8, 5 - obj_image_anim_end - - .align 2 -gSpriteAnim_83E7A14:: @ 83E7A14 - obj_image_anim_frame 10, 5 - obj_image_anim_end - - .align 2 -gSpriteAnimTable_83E7A1C:: @ 83E7A1C - .4byte gSpriteAnim_83E79E4 - .4byte gSpriteAnim_83E79EC - .4byte gSpriteAnim_83E79F4 - .4byte gSpriteAnim_83E79FC - .4byte gSpriteAnim_83E7A04 - .4byte gSpriteAnim_83E7A0C - .4byte gSpriteAnim_83E7A14 - - .align 2 -gSpriteTemplate_83E7A38:: @ 83E7A38 - spr_template 2, 2, gOamData_83E79DC, gSpriteAnimTable_83E7A1C, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy diff --git a/include/field_effect.h b/include/field_effect.h index cd84652b1..5edca21dc 100644 --- a/include/field_effect.h +++ b/include/field_effect.h @@ -109,6 +109,8 @@ void SpriteCB_PokeballGlow(struct Sprite *); void SpriteCB_PokecenterMonitor(struct Sprite *); void SpriteCB_HallOfFameMonitor(struct Sprite *); +void sub_80865BC(void); + void PokecenterHealEffect_0(struct Task *); void PokecenterHealEffect_1(struct Task *); void PokecenterHealEffect_2(struct Task *); diff --git a/include/menu.h b/include/menu.h index 9b48ab79b..25b1487d7 100755 --- a/include/menu.h +++ b/include/menu.h @@ -67,7 +67,7 @@ u8 MenuPrint_PixelCoords(const u8 *, u8, u16, u8); u8 sub_8072A18(const u8 *, u8, u16, u8, u32); u8 unref_sub_8072A5C(u8 *, u8 *, u8, u16, u8, u32); int sub_8072AB0(const u8 *, u8, u16, u8, u8, u32); -void MenuPrint_RightAligned(u8 *, u8, u8); +void MenuPrint_RightAligned(const u8 *, u8, u8); void sub_8072B80(const u8 *, u8, u8, const u8 *); void sub_8072BD8(const u8 *, u8, u8, u16); u8 *sub_8072C14(u8 *, s32, u8, u8); diff --git a/include/pokemon_menu.h b/include/pokemon_menu.h index d22dbb708..fc43a44c6 100644 --- a/include/pokemon_menu.h +++ b/include/pokemon_menu.h @@ -6,6 +6,7 @@ void sub_808A004(); void sub_808AB90(void); void sub_808AB90(void); // unknown args void sub_808AB90(void); +void sub_808AD58(void); void sub_808B020(void); void sub_808B0C0(u8); void sub_808B508(u8); diff --git a/include/rom4.h b/include/rom4.h index 803a38162..14a4cecfa 100644 --- a/include/rom4.h +++ b/include/rom4.h @@ -55,7 +55,7 @@ void warp1_set_2(s8 mapGroup, s8 mapNum, s8 warpId); void saved_warp2_set(int unused, s8 mapGroup, s8 mapNum, s8 warpId); void saved_warp2_set_2(int unused, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y); void copy_saved_warp2_bank_and_enter_x_to_warp1(u8 unused); -// sub_8053538 +void sub_8053538(u8); void sub_8053570(void); void sub_8053588(u8); void sub_80535C4(s16 a1, s16 a2); diff --git a/include/secret_base.h b/include/secret_base.h index 3ea75ce27..bb747bb02 100644 --- a/include/secret_base.h +++ b/include/secret_base.h @@ -7,6 +7,7 @@ u8 sub_80BBB24(void); void sub_80BBCCC(u8); void sub_80BC038(); u8 sub_80BC050(); +u8 *GetSecretBaseMapName(u8 *); void sub_80BC300(); const u8 sub_80BCCA4(u8); u8 *sub_80BCCE8(void); diff --git a/ld_script.txt b/ld_script.txt index 53acda103..c2d5ff272 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -200,7 +200,6 @@ SECTIONS { src/dewford_trend.o(.text); src/heal_location.o(.text); src/region_map.o(.text); - asm/region_map.o(.text); asm/cute_sketch.o(.text); src/decoration.o(.text); asm/slot_machine.o(.text); @@ -430,7 +429,6 @@ SECTIONS { data/menu_helpers.o(.rodata); src/heal_location.o(.rodata); src/region_map.o(.rodata); - data/region_map.o(.rodata); data/cute_sketch.o(.rodata); src/decoration.o(.rodata); data/slot_machine.o(.rodata); diff --git a/src/menu.c b/src/menu.c index d532fc602..8d80c35aa 100644 --- a/src/menu.c +++ b/src/menu.c @@ -710,7 +710,7 @@ _08072B3E:\n\ } #endif -void MenuPrint_RightAligned(u8 *str, u8 left, u8 top) +void MenuPrint_RightAligned(const u8 *str, u8 left, u8 top) { sub_8004D38(gMenuWindowPtr, str, gMenuTextTileOffset, left, top); } diff --git a/src/region_map.c b/src/region_map.c index 9e95c40d0..6318893ab 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -1,10 +1,19 @@ #include "global.h" #include "event_data.h" +#include "field_effect.h" #include "field_specials.h" +#include "m4a.h" #include "main.h" +#include "menu.h" #include "palette.h" +#include "pokemon_menu.h" #include "rom4.h" +#include "secret_base.h" +#include "songs.h" #include "sprite.h" +#include "strings.h" +#include "string_util.h" +#include "text.h" #include "trig.h" struct UnknownStruct1 @@ -233,7 +242,21 @@ void sub_80FBB3C(u16, u16); void sub_80FBCA0(void); void sub_80FBDF8(void); void sub_80FBE24(void); -void sub_80FBFB4(); +void sub_80FBF34(struct Sprite *); +void sub_80FBF40(struct Sprite *); +void sub_80FBEA4(struct Sprite *); +const u8 *sub_80FBFB4(u8 *, u16, u16); +void sub_80FC214(void); +void sub_80FC228(void); +void sub_80FC244(void (*func)(void)); +void sub_80FC254(void); +void sub_80FC31C(void); +void sub_80FC374(void); +void sub_80FC484(void); +void sub_80FC55C(struct Sprite *); +void sub_80FC5B4(void); +void sub_80FC600(void); +void sub_80FC69C(void); void sub_80FA8EC(struct UnknownStruct1 *a, u8 b) { @@ -275,7 +298,7 @@ bool8 sub_80FA940(void) gUnknown_020388CC->unk76 = gUnknown_020388CC->unk56; gUnknown_020388CC->unk16 = sub_80FB758(gUnknown_020388CC->unk14); gUnknown_020388CC->unk14 = sub_80FB9C0(gUnknown_020388CC->unk14); - sub_80FBFB4(gUnknown_020388CC, gUnknown_020388CC->unk14, 16); + sub_80FBFB4(gUnknown_020388CC->filler0, gUnknown_020388CC->unk14, 16); break; case 6: if (gUnknown_020388CC->unk78 == 0) @@ -390,7 +413,7 @@ u8 _swiopen(void) if (r4 != gUnknown_020388CC->unk14) { gUnknown_020388CC->unk14 = r4; - sub_80FBFB4(gUnknown_020388CC, gUnknown_020388CC->unk14, 16); + sub_80FBFB4(gUnknown_020388CC->filler0, gUnknown_020388CC->unk14, 16); } sub_80FBA18(); gUnknown_020388CC->unk18 = sub_80FAB78; @@ -456,7 +479,7 @@ u8 sub_80FADE4(void) if (r4 != gUnknown_020388CC->unk14) { gUnknown_020388CC->unk14 = r4; - sub_80FBFB4(gUnknown_020388CC, gUnknown_020388CC->unk14, 16); + sub_80FBFB4(gUnknown_020388CC->filler0, gUnknown_020388CC->unk14, 16); } sub_80FBA18(); } @@ -1018,11 +1041,11 @@ void sub_80FBB3C(u16 tileTag, u16 paletteTag) spriteSheet.tag = tileTag; spriteTemplate.tileTag = tileTag; gUnknown_020388CC->unk58 = tileTag; - + spritePalette.tag = paletteTag; spriteTemplate.paletteTag = paletteTag; gUnknown_020388CC->unk5A = paletteTag; - + if (gUnknown_020388CC->unk78 == 0) { spriteSheet.data = gUnknown_020388CC->unk180; @@ -1059,3 +1082,714 @@ void sub_80FBB3C(u16 tileTag, u16 paletteTag) gUnknown_020388CC->unk1C->data3 = 1; } } + +void sub_80FBCA0(void) +{ + if (gUnknown_020388CC->unk1C != NULL) + { + DestroySprite(gUnknown_020388CC->unk1C); + FreeSpriteTilesByTag(gUnknown_020388CC->unk58); + FreeSpritePaletteByTag(gUnknown_020388CC->unk5A); + } +} + +void unref_sub_80FBCD0(void) +{ + gUnknown_020388CC->unk1C->data3 = 1; +} + +void unref_sub_80FBCE0(void) +{ + gUnknown_020388CC->unk1C->data3 = 0; +} + +const struct OamData gOamData_083E7708 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const union AnimCmd gSpriteAnim_83E7710[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_083E7718[] = +{ + gSpriteAnim_83E7710, +}; + +void sub_80FBCF0(u16 tileTag, u16 paletteTag) +{ + u8 spriteId; + struct SpriteSheet spriteSheet = + { + .data = gRegionMapBrendanIconTiles, + .size = 128, + .tag = tileTag, + }; + struct SpritePalette spritePalette = + { + .data = gRegionMapBrendanIconPalette, + .tag = paletteTag, + }; + struct SpriteTemplate spriteTemplate = + { + .tileTag = tileTag, + .paletteTag = paletteTag, + .oam = &gOamData_083E7708, + .anims = gSpriteAnimTable_083E7718, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }; + + if (gSaveBlock2.playerGender == FEMALE) + { + spriteSheet.data = gRegionMapMayIconTiles; + spritePalette.data = gRegionMapMayIconPalette; + } + LoadSpriteSheet(&spriteSheet); + LoadSpritePalette(&spritePalette); + spriteId = CreateSprite(&spriteTemplate, 0, 0, 1); + gUnknown_020388CC->unk20 = &gSprites[spriteId]; + if (gUnknown_020388CC->unk78 == 0) + { + gUnknown_020388CC->unk20->pos1.x = gUnknown_020388CC->unk74 * 8 + 4; + gUnknown_020388CC->unk20->pos1.y = gUnknown_020388CC->unk76 * 8 + 4; + gUnknown_020388CC->unk20->callback = sub_80FBF34; + } + else + { + gUnknown_020388CC->unk20->pos1.x = gUnknown_020388CC->unk74 * 16 - 48; + gUnknown_020388CC->unk20->pos1.y = gUnknown_020388CC->unk76 * 16 - 66; + gUnknown_020388CC->unk20->callback = sub_80FBEA4; + } +} + +void sub_80FBDF8(void) +{ + if (gUnknown_020388CC->unk20 != NULL) + { + gUnknown_020388CC->unk20->invisible = TRUE; + gUnknown_020388CC->unk20->callback = SpriteCallbackDummy; + } +} + +void sub_80FBE24(void) +{ + if (gUnknown_020388CC->unk20 != NULL) + { + if (gUnknown_020388CC->unk78 == 1) + { + gUnknown_020388CC->unk20->pos1.x = gUnknown_020388CC->unk74 * 16 - 48; + gUnknown_020388CC->unk20->pos1.y = gUnknown_020388CC->unk76 * 16 - 66; + gUnknown_020388CC->unk20->callback = sub_80FBEA4; + gUnknown_020388CC->unk20->invisible = FALSE; + } + else + { + gUnknown_020388CC->unk20->pos1.x = gUnknown_020388CC->unk74 * 8 + 4; + gUnknown_020388CC->unk20->pos1.y = gUnknown_020388CC->unk76 * 8 + 4; + gUnknown_020388CC->unk20->pos2.x = 0; + gUnknown_020388CC->unk20->pos2.y = 0; + gUnknown_020388CC->unk20->callback = sub_80FBF34; + gUnknown_020388CC->unk20->invisible = FALSE; + } + } +} + +void sub_80FBEA4(struct Sprite *sprite) +{ + sprite->pos2.x = -(gUnknown_020388CC->unk5C * 2); + sprite->pos2.y = -(gUnknown_020388CC->unk5E * 2); + sprite->data0 = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY; + sprite->data1 = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX; + + if (sprite->data0 < -8 || sprite->data0 > 0xA8 || sprite->data1 < -8 || sprite->data1 > 0xF8) + sprite->data2 = 0; + else + sprite->data2 = 1; + + if (sprite->data2 == 1) + sub_80FBF40(sprite); + else + sprite->invisible = TRUE; +} + +void sub_80FBF34(struct Sprite *sprite) +{ + sub_80FBF40(sprite); +} + +void sub_80FBF40(struct Sprite *sprite) +{ + if (gUnknown_020388CC->unk7E != 0) + { + sprite->data7++; + if (sprite->data7 > 16) + { + sprite->data7 = 0; + sprite->invisible = !sprite->invisible; + } + } + else + { + sprite->invisible = FALSE; + } +} + +void sub_80FBF94(void) +{ + if (gUnknown_020388CC->unk7F != 0) + gUnknown_020388CC->unk7E = 1; +} + +const u8 *sub_80FBFB4(u8 *dest, u16 b, u16 length) +{ + if (b == 86) + return GetSecretBaseMapName(dest); + if (b < 88) + return StringCopy(dest, gRegionMapLocations[b].name); + if (length == 0) + length = 18; + return StringFill(dest, CHAR_SPACE, length); +} + +const u8 *CopyMapName(u8 *dest, u16 b) +{ + switch (b) + { + case 87: + return StringCopy(dest, gOtherText_Ferry); + case 86: + return StringCopy(dest, gOtherText_SecretBase); + default: + return sub_80FBFB4(dest, b, 0); + } +} + +const u8 *CopyLocationName(u8 *dest, u16 b) +{ + if (b == 66) + return StringCopy(dest, gOtherText_Hideout); + else + return CopyMapName(dest, b); +} + +void sub_80FC04C(u16 a, u16 *x, u16 *y, u16 *width, u16 *height) +{ + *x = gRegionMapLocations[a].x; + *y = gRegionMapLocations[a].y; + *width = gRegionMapLocations[a].width; + *height = gRegionMapLocations[a].height; +} + +struct UnknownStruct3 +{ + void (*unk0)(void); + u16 unk4; + u16 unk6; + struct UnknownStruct1 unk8; +}; + +extern u8 ewram[]; +#define ewram0 (*(struct UnknownStruct3 *)(ewram + 0)) +#define ewram888 (ewram + 0x888) +#define ewramA6E (ewram[0xA6E]) +#define ewramA48 (ewram + 0xA48) + +const u16 gUnknown_083E771C[] = INCBIN_U16("graphics/pokenav/map_frame.gbapal"); +const u8 gUnknown_083E773C[] = INCBIN_U8("graphics/pokenav/map_frame.4bpp.lz"); +const u8 gUnknown_083E7774[] = INCBIN_U8("graphics/pokenav/map_frame.bin.lz"); +const u16 gPokenavMapMisc_Pal[] = INCBIN_U16("graphics/pokenav/map_misc.gbapal"); +const u8 gUnknown_083E784C[] = INCBIN_U8("graphics/pokenav/map_misc.4bpp.lz"); + +const u8 gUnknown_083E7920[][3] = +{ + {0, 9, 1}, + {0, 10, 14}, + {0, 11, 15}, + {0, 12, 16}, + {0, 13, 17}, + {0, 14, 18}, + {0, 15, 19}, + {0, 0, 3}, + {0, 1, 4}, + {0, 2, 5}, + {0, 3, 6}, + {0, 4, 7}, + {0, 5, 8}, + {0, 6, 9}, + {0, 7, 10}, + {0, 8, 11}, + {0, 16, 0}, + {0, 17, 0}, + {0, 18, 0}, + {0, 19, 0}, + {0, 20, 0}, + {0, 21, 0}, + {0, 22, 0}, + {0, 23, 0}, + {0, 24, 0}, + {0, 25, 0}, + {0, 26, 0}, + {0, 27, 0}, + {0, 28, 0}, + {0, 29, 0}, + {0, 30, 0}, + {0, 31, 0}, + {0, 32, 0}, + {0, 33, 0}, + {0, 34, 0}, + {0, 35, 0}, + {0, 36, 0}, + {0, 37, 0}, + {0, 38, 0}, + {0, 39, 0}, + {0, 40, 0}, + {0, 41, 0}, + {0, 42, 0}, + {0, 43, 0}, + {0, 44, 0}, + {0, 45, 0}, + {0, 46, 0}, + {0, 47, 0}, + {0, 48, 0}, + {0, 49, 0}, +}; + +struct UnknownStruct4 +{ + const u8 *const *unk0; + u16 unk4; + u16 unk6; +}; + +const u8 *const Unknown_3E79B8[] = {OtherText_PokeLeague, OtherText_PokeCenter}; + +const struct UnknownStruct4 gUnknown_083E79C0[1] = +{ + {Unknown_3E79B8, 15, 0x854}, +}; + +// XXX: what is this? +static u8 *const ewram_ = ewram; + +const struct SpritePalette gUnknown_083E79CC = {gPokenavMapMisc_Pal, 2}; + +const u16 gUnknown_083E79D4[][2] = +{ + {0x848, 58}, + {0xFFFF, 88}, +}; + +const struct OamData gOamData_83E79DC = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const union AnimCmd gSpriteAnim_83E79E4[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83E79EC[] = +{ + ANIMCMD_FRAME(1, 5), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83E79F4[] = +{ + ANIMCMD_FRAME(3, 5), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83E79FC[] = +{ + ANIMCMD_FRAME(5, 5), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83E7A04[] = +{ + ANIMCMD_FRAME(6, 5), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83E7A0C[] = +{ + ANIMCMD_FRAME(8, 5), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83E7A14[] = +{ + ANIMCMD_FRAME(10, 5), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83E7A1C[] = +{ + gSpriteAnim_83E79E4, + gSpriteAnim_83E79EC, + gSpriteAnim_83E79F4, + gSpriteAnim_83E79FC, + gSpriteAnim_83E7A04, + gSpriteAnim_83E7A0C, + gSpriteAnim_83E7A14, +}; + +const struct SpriteTemplate gSpriteTemplate_83E7A38 = +{ + .tileTag = 2, + .paletteTag = 2, + .oam = &gOamData_83E79DC, + .anims = gSpriteAnimTable_83E7A1C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +void sub_80FC074(void) +{ + switch (gMain.state) + { + case 0: + SetVBlankCallback(NULL); + REG_DISPCNT = 0; + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + REG_BG2VOFS = 0; + REG_BG2HOFS = 0; + REG_BG3HOFS = 0; + REG_BG3VOFS = 0; + ResetPaletteFade(); + ResetSpriteData(); + FreeSpriteTileRanges(); + FreeAllSpritePalettes(); + break; + case 1: + SetUpWindowConfig(&gWindowConfig_81E7224); + break; + case 2: + InitMenuWindow(&gWindowConfig_81E7224); + MenuZeroFillScreen(); + break; + case 3: + sub_80FA8EC(&ewram0.unk8, 0); + sub_80FBB3C(0, 0); + sub_80FBCF0(1, 1); + ewram0.unk6 = ewram0.unk8.unk14; + StringFill(ewramA48, CHAR_SPACE, 12); + sub_80FC254(); + break; + case 4: + LZ77UnCompVram(gUnknown_083E773C, (void *)(VRAM + 0xC000)); + break; + case 5: + LZ77UnCompVram(gUnknown_083E7774, (void *)(VRAM + 0xF000)); + break; + case 6: + LoadPalette(gUnknown_083E771C, 16, 32); + MenuPrint_PixelCoords(gOtherText_FlyToWhere, 1, 0x90, 1); + break; + case 7: + sub_80FC31C(); + break; + case 8: + BlendPalettes(0xFFFFFFFF, 16, 0); + SetVBlankCallback(sub_80FC214); + break; + case 9: + REG_BLDCNT = 0; + REG_BG1CNT = 0x1E0D; + REG_DISPCNT = 0x1741; + sub_80FC244(sub_80FC5B4); + SetMainCallback2(sub_80FC228); + break; + default: + return; + } + gMain.state++; +} + +void sub_80FC214(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void sub_80FC228(void) +{ + ewram0.unk0(); + AnimateSprites(); + BuildOamBuffer(); +} + +void sub_80FC244(void (*func)(void)) +{ + ewram0.unk0 = func; + ewram0.unk4 = 0; +} + +void sub_80FC254(void) +{ + if (ewram0.unk8.unk16 == 2 || ewram0.unk8.unk16 == 4) + { + u16 i = 0; + int zero; + + for (i = 0; i < 1; i++) + { + const struct UnknownStruct4 *r4 = &gUnknown_083E79C0[i]; + + if (ewram0.unk8.unk14 == r4->unk4) + { + if (FlagGet(r4->unk6)) + { + MenuDrawTextWindow(16, 14, 29, 19); + MenuPrint(ewram0.unk8.filler0, 17, 15); + MenuPrint_RightAligned(r4->unk0[ewram0.unk8.unk17], 29, 17); + return; + } + break; + } + } + // This check is always true, but somehow the compiler still performed it. + asm("mov %0, #0\n":"=r"(zero)); // zero = 0 + if (zero == 0) + { + MenuDrawTextWindow(16, 16, 29, 19); + MenuPrint(ewram0.unk8.filler0, 17, 17); + MenuZeroFillWindowRect(16, 14, 29, 15); + } + } + else + { + MenuDrawTextWindow(16, 16, 29, 19); + MenuPrint(ewramA48, 17, 17); + MenuZeroFillWindowRect(16, 14, 29, 15); + } +} + +void sub_80FC31C(void) +{ + struct SpriteSheet spriteSheet; + + LZ77UnCompWram(gUnknown_083E784C, ewram888); + spriteSheet.data = ewram888; + spriteSheet.size = 0x1C0; + spriteSheet.tag = 2; + LoadSpriteSheet(&spriteSheet); + LoadSpritePalette(&gUnknown_083E79CC); + sub_80FC374(); + sub_80FC484(); +} + +void sub_80FC374(void) +{ + u16 flag = 0x80F; + u16 i; + + for (i = 0; i < 16; i++) + { + u16 x; + u16 y; + u16 width; + u16 height; + u16 r7; + u8 spriteId; + + sub_80FC04C(i, &x, &y, &width, &height); + x = (x + 1) * 8 + 4; + y = (y + 2) * 8 + 4; + if (width == 2) + r7 = 1; + else if (height == 2) + r7 = 2; + else + r7 = 0; + spriteId = CreateSprite(&gSpriteTemplate_83E7A38, x, y, 10); + if (spriteId != 64) + { + gSprites[spriteId].oam.shape = r7; + if (FlagGet(flag)) + gSprites[spriteId].callback = sub_80FC55C; + else + r7 += 3; + StartSpriteAnim(&gSprites[spriteId], r7); + gSprites[spriteId].data0 = i; + } + flag++; + } +} + +void sub_80FC484(void) +{ + u16 i; + + for (i = 0; gUnknown_083E79D4[i][1] != 88; i++) + { + u16 x; + u16 y; + u16 width; + u16 height; + + if (FlagGet(gUnknown_083E79D4[i][0])) + { + u16 r6 = gUnknown_083E79D4[i][1]; + u8 spriteId; + + sub_80FC04C(r6, &x, &y, &width, &height); + x = (x + 1) * 8; + y = (y + 2) * 8; + spriteId = CreateSprite(&gSpriteTemplate_83E7A38, x, y, 10); + if (spriteId != 64) + { + gSprites[spriteId].oam.size = 1; + gSprites[spriteId].callback = sub_80FC55C; + StartSpriteAnim(&gSprites[spriteId], 6); + gSprites[spriteId].data0 = r6; + } + } + } +} + +void sub_80FC55C(struct Sprite *sprite) +{ + if (ewram0.unk8.unk14 == sprite->data0) + { + sprite->data1++; + if (sprite->data1 > 16) + { + sprite->data1 = 0; + sprite->invisible = !sprite->invisible; + } + } + else + { + sprite->data1 = 16; + sprite->invisible = FALSE; + } +} + +void sub_80FC5B4(void) +{ + switch (ewram0.unk4) + { + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); + ewram0.unk4++; + break; + case 1: + if (UpdatePaletteFade() != 0) + break; + sub_80FC244(sub_80FC600); + break; + } +} + +void sub_80FC600(void) +{ + if (ewram0.unk4 == 0) + { + switch (sub_80FAB60()) + { + case 0: + case 1: + case 2: + break; + case 3: + sub_80FC254(); + break; + case 4: + if (ewram0.unk8.unk16 == 2 || ewram0.unk8.unk16 == 4) + { + m4aSongNumStart(SE_SELECT); + ewramA6E = 1; + sub_80FC244(sub_80FC69C); + } + break; + case 5: + m4aSongNumStart(SE_SELECT); + ewramA6E = 0; + sub_80FC244(sub_80FC69C); + break; + } + } +} + +void sub_80FC69C(void) +{ + switch (ewram0.unk4) + { + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + ewram0.unk4++; + break; + case 1: + if (UpdatePaletteFade() != 0) + break; + sub_80FAB10(); + if (ewramA6E != 0) + { + switch (ewram0.unk8.unk14) + { + case 0x49: + sub_8053538(22); + break; + case 0x3A: + sub_8053538(21); + break; + case 0: + sub_8053538((gSaveBlock2.playerGender == MALE) ? 12 : 13); + break; + case 15: + sub_8053538((FlagGet(0x854) && ewram0.unk8.unk17 == 0) ? 20 : 11); + break; + default: + if (gUnknown_083E7920[ewram0.unk8.unk14][2] != 0) + sub_8053538(gUnknown_083E7920[ewram0.unk8.unk14][2]); + else + warp1_set_2(gUnknown_083E7920[ewram0.unk8.unk14][0], gUnknown_083E7920[ewram0.unk8.unk14][1], -1); + break; + } + sub_80865BC(); + } + else + { + SetMainCallback2(sub_808AD58); + } + break; + } +} -- cgit v1.2.3 From b03a51e034df8513456043dabf23596c8daba2c1 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 16 Jul 2017 10:35:31 -0500 Subject: labeling --- asm/pokedex_area_screen.s | 12 +- asm/pokemon_menu.s | 4 +- asm/pokenav.s | 10 +- include/flags.h | 21 + include/global.fieldmap.h | 2 +- include/region_map.h | 66 ++- src/field_region_map.c | 13 +- src/field_specials.c | 2 +- src/map_name_popup.c | 2 +- src/region_map.c | 1207 ++++++++++++++++++++++++--------------------- src/rom4.c | 4 +- src/save_menu_util.c | 2 +- src/secret_base.c | 2 +- src/tv.c | 18 +- sym_ewram.txt | 2 +- 15 files changed, 758 insertions(+), 609 deletions(-) diff --git a/asm/pokedex_area_screen.s b/asm/pokedex_area_screen.s index bd8db8a2c..542eed201 100644 --- a/asm/pokedex_area_screen.s +++ b/asm/pokedex_area_screen.s @@ -92,7 +92,7 @@ _08110720: ldr r4, _0811073C @ =0x020006e8 adds r0, r4, 0 movs r1, 0 - bl sub_80FA8EC + bl InitRegionMap movs r0, 0x88 lsls r0, 4 adds r4, r0 @@ -115,7 +115,7 @@ _08110746: _08110752: movs r0, 0x1 movs r1, 0x1 - bl sub_80FBCF0 + bl CreateRegionMapPlayerIcon movs r1, 0x8 negs r1, r1 movs r0, 0 @@ -1700,7 +1700,7 @@ _08111344: lsls r0, 24 cmp r0, 0 bne _08111358 - bl sub_80FAB10 + bl FreeRegionMapIconResources ldr r0, [r4, 0x4] bl SetMainCallback2 _08111358: @@ -1740,7 +1740,7 @@ _08111390: lsls r0, 24 cmp r0, 0 bne _081113A4 - bl sub_80FAB10 + bl FreeRegionMapIconResources ldr r0, [r4, 0x8] bl SetMainCallback2 _081113A4: @@ -1859,7 +1859,7 @@ _08111496: ldr r4, _081114B4 @ =0x020006e8 adds r0, r4, 0 movs r1, 0 - bl sub_80FA8EC + bl InitRegionMap movs r0, 0x88 lsls r0, 4 adds r4, r0 @@ -1882,7 +1882,7 @@ _081114BE: _081114CA: movs r0, 0x1 movs r1, 0x1 - bl sub_80FBCF0 + bl CreateRegionMapPlayerIcon movs r1, 0x8 negs r1, r1 movs r0, 0 diff --git a/asm/pokemon_menu.s b/asm/pokemon_menu.s index 3a1552f70..fe1b41724 100644 --- a/asm/pokemon_menu.s +++ b/asm/pokemon_menu.s @@ -2093,7 +2093,7 @@ _0808AB6C: .4byte gPaletteFade _0808AB70: .4byte gTasks _0808AB74: .4byte c2_exit_to_overworld_2_switch _0808AB78: - ldr r0, _0808AB8C @ =sub_80FC074 + ldr r0, _0808AB8C @ =CB2_InitFlyRegionMap bl SetMainCallback2 _0808AB7E: adds r0, r4, 0 @@ -2103,7 +2103,7 @@ _0808AB84: pop {r0} bx r0 .align 2, 0 -_0808AB8C: .4byte sub_80FC074 +_0808AB8C: .4byte CB2_InitFlyRegionMap thumb_func_end sub_808AB34 thumb_func_start sub_808AB90 diff --git a/asm/pokenav.s b/asm/pokenav.s index 757a2a5a2..e12e9801c 100644 --- a/asm/pokenav.s +++ b/asm/pokenav.s @@ -340,7 +340,7 @@ sub_80EBD30: @ 80EBD30 bl LoadOam bl ProcessSpriteCopyRequests bl TransferPlttBuffer - bl sub_80FB260 + bl UpdateRegionMapVideoRegs bl sub_80EFE7C pop {r0} bx r0 @@ -10523,7 +10523,7 @@ sub_80F0FFC: @ 80F0FFC ldrh r1, [r0] adds r0, r5, 0 movs r2, 0 - bl sub_80FBFB4 + bl GetMapSectionName ldr r0, _080F1054 @ =gWindowConfig_81E710C bl BasicInitMenuWindow adds r0, r5, 0 @@ -14321,10 +14321,10 @@ sub_80F2DD8: @ 80F2DD8 push {lr} movs r0, 0x7 movs r1, 0x7 - bl sub_80FBB3C + bl CreateRegionMapCursorIcon movs r0, 0x8 movs r1, 0x8 - bl sub_80FBCF0 + bl CreateRegionMapPlayerIcon bl sub_80FBF94 pop {r0} bx r0 @@ -14333,7 +14333,7 @@ sub_80F2DD8: @ 80F2DD8 thumb_func_start sub_80F2DF4 sub_80F2DF4: @ 80F2DF4 push {lr} - bl sub_80FAB10 + bl FreeRegionMapIconResources pop {r0} bx r0 thumb_func_end sub_80F2DF4 diff --git a/include/flags.h b/include/flags.h index 0e408a833..e8c23b538 100644 --- a/include/flags.h +++ b/include/flags.h @@ -22,6 +22,24 @@ #define BADGE07_GET 0x80D #define BADGE08_GET 0x80E +// cities and towns +#define FLAG_VISITED_LITTLEROOT_TOWN 0x80F +#define FLAG_VISITED_OLDALE_TOWN 0x810 +#define FLAG_VISITED_DEWFORD_TOWN 0x811 +#define FLAG_VISITED_LAVARIDGE_TOWN 0x812 +#define FLAG_VISITED_FALLARBOR_TOWN 0x813 +#define FLAG_VISITED_VERDANTURF_TOWN 0x814 +#define FLAG_VISITED_PACIFIDLOG_TOWN 0x815 +#define FLAG_VISITED_PETALBURG_CITY 0x816 +#define FLAG_VISITED_SLATEPORT_CITY 0x817 +#define FLAG_VISITED_MAUVILLE_CITY 0x818 +#define FLAG_VISITED_RUSTBORO_CITY 0x819 +#define FLAG_VISITED_FORTREE_CITY 0x81A +#define FLAG_VISITED_LILYCOVE_CITY 0x81B +#define FLAG_VISITED_MOSSDEEP_CITY 0x81C +#define FLAG_VISITED_SOOTOPOLIS_CITY 0x81D +#define FLAG_VISITED_EVER_GRANDE_CITY 0x81E + #define SYS_USE_FLASH 0x828 #define SYS_USE_STRENGTH 0x829 #define SYS_WEATHER_CTRL 0x82A @@ -42,6 +60,9 @@ #define SYS_SHOAL_TIDE 0x83A #define SYS_RIBBON_GET 0x83B +#define FLAG_UNLOCK_BATTLE_TOWER 0x848 +#define FLAG_UNLOCK_SOUTHERN_ISLAND 0x849 + #define SYS_PC_LANETTE 0x84B #define SYS_EXDATA_ENABLE 0x84C #define SYS_ENC_UP_ITEM 0x84D diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index 7589de029..4029132e8 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -166,7 +166,7 @@ struct MapHeader /* 0x0C */ struct MapConnections *connections; /* 0x10 */ u16 music; /* 0x12 */ u16 mapDataId; - /* 0x14 */ u8 name; + /* 0x14 */ u8 regionMapSectionId; /* 0x15 */ u8 cave; /* 0x16 */ u8 weather; /* 0x17 */ u8 mapType; diff --git a/include/region_map.h b/include/region_map.h index 6dfa4dcf0..88e0ee21f 100755 --- a/include/region_map.h +++ b/include/region_map.h @@ -1,13 +1,65 @@ #ifndef GUARD_REGION_MAP_H #define GUARD_REGION_MAP_H -void sub_80FA8EC(u32, u8); -void sub_80FAB10(void); +struct RegionMap +{ + u8 mapSecName[0x14]; + u16 mapSecId; + u8 unk16; + u8 everGrandeCityArea; + u8 (*inputCallback)(void); + struct Sprite *cursorIconSprite; + struct Sprite *playerIconSprite; + s32 bg2x; + s32 bg2y; + u32 unk2C; // + u32 unk30; // Map rotation parameters + u32 unk34; // Likely a scrapped feature + u32 unk38; // + s32 unk3C; + s32 unk40; + s32 unk44; + s32 unk48; + s32 unk4C; + s32 unk50; + u16 cursorPosX; + u16 cursorPosY; + u16 cursorIconTileTag; + u16 cursorIconPaletteTag; + s16 scrollX; + s16 scrollY; + s16 unk60; + s16 unk62; + u16 unk64; + u16 unk66; + u16 unk68; + u16 unk6A; + u16 unk6C; + u16 unk6E; + u16 playerIconTileTag; + u16 playerIconPaletteTag; + u16 unk74; + u16 unk76; + bool8 zoomed; + u8 initStep; + s8 unk7A; + s8 cursorDeltaX; + s8 cursorDeltaY; + bool8 needUpdateVideoRegs; + bool8 blinkPlayerIcon; + bool8 playerIsInCave; + u8 filler80[0x100]; + u8 unk180[0x100]; + u8 unk280[0x600]; +}; + +void InitRegionMap(struct RegionMap *regionMap, bool8 b); +void FreeRegionMapIconResources(void); u8 sub_80FAB60(void); -void sub_80FBB3C(u16, u16); -void sub_80FBCF0(u32, u8); -void sub_80FBFB4(u8 *str, u16 region, u8); -void CopyMapName(); -u8 *CopyLocationName(u8 *dest, u8 location); +void CreateRegionMapCursorIcon(u16, u16); +void CreateRegionMapPlayerIcon(u16, u16); +const u8 *GetMapSectionName(u8 *dest, u16 mapSecId, u16 length); +const u8 *CopyMapName(u8 *dest, u16 b); +const u8 *CopyLocationName(u8 *dest, u16 b); #endif // GUARD_REGION_MAP_H diff --git a/src/field_region_map.c b/src/field_region_map.c index 58b0e37bc..2b324ca1e 100644 --- a/src/field_region_map.c +++ b/src/field_region_map.c @@ -19,11 +19,13 @@ struct UnkStruct { MainCallback callback; u8 filler[4]; + // This should be RegionMap, but I can't do that because it overlaps unk888. struct RegionMapStruct unk8; u16 unk888; }; -extern struct UnkStruct unk_2000000; +extern u8 ewram[]; +#define unk_2000000 (*(struct UnkStruct *)(ewram)) void FieldInitRegionMap(MainCallback callback) { @@ -46,9 +48,10 @@ void CB2_FieldInitRegionMap(void) REG_BG3VOFS = 0; ResetSpriteData(); FreeAllSpritePalettes(); - sub_80FA8EC((u32)&unk_2000000.unk8, 0); - sub_80FBCF0(0, 0); - sub_80FBB3C(1, 1); + // TODO: remove this cast + InitRegionMap((void *)&unk_2000000.unk8, 0); + CreateRegionMapPlayerIcon(0, 0); + CreateRegionMapCursorIcon(1, 1); SetUpWindowConfig(&gWindowConfig_81E709C); InitMenuWindow(&gWindowConfig_81E709C); MenuZeroFillScreen(); @@ -107,7 +110,7 @@ void sub_813EFDC(void) case 4: if (!gPaletteFade.active) { - sub_80FAB10(); + FreeRegionMapIconResources(); SetMainCallback2(unk_2000000.callback); } break; diff --git a/src/field_specials.c b/src/field_specials.c index 2b505bbfe..71de04f55 100755 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -1761,7 +1761,7 @@ u8 GetPokeblockNameByMonNature(void) void GetSecretBaseNearbyMapName(void) { - sub_80FBFB4(gStringVar1, VarGet(VAR_SECRET_BASE_MAP), 0); + GetMapSectionName(gStringVar1, VarGet(VAR_SECRET_BASE_MAP), 0); } u16 sub_810F404(void) diff --git a/src/map_name_popup.c b/src/map_name_popup.c index 303cc3d07..01105d0db 100644 --- a/src/map_name_popup.c +++ b/src/map_name_popup.c @@ -101,7 +101,7 @@ void DrawMapNamePopup(void) u8 name[20]; MenuLoadTextWindowGraphics_OverrideFrameType(0); - sub_80FBFB4(name, gMapHeader.name, 0); + GetMapSectionName(name, gMapHeader.regionMapSectionId, 0); MenuDrawTextWindow(0, 0, 13, 3); sub_8072BD8(name, 1, 1, 0x60); } diff --git a/src/region_map.c b/src/region_map.c index 6318893ab..a0739ecef 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -4,9 +4,11 @@ #include "field_specials.h" #include "m4a.h" #include "main.h" +#include "map_constants.h" #include "menu.h" #include "palette.h" #include "pokemon_menu.h" +#include "region_map.h" #include "rom4.h" #include "secret_base.h" #include "songs.h" @@ -16,59 +18,116 @@ #include "text.h" #include "trig.h" -struct UnknownStruct1 -{ - u8 filler0[0x14]; - u16 unk14; - u8 unk16; - u8 unk17; - u8 (*unk18)(void); - struct Sprite *unk1C; - struct Sprite *unk20; - s32 unk24; - s32 unk28; - u32 unk2C; - u32 unk30; - u32 unk34; - u32 unk38; - s32 unk3C; - s32 unk40; - s32 unk44; - s32 unk48; - s32 unk4C; - u32 unk50; - u16 unk54; // cursor x - u16 unk56; // cursor y - u16 unk58; - u16 unk5A; - s16 unk5C; - s16 unk5E; - s16 unk60; - s16 unk62; - u16 unk64; - u16 unk66; - u16 unk68; - u16 unk6A; - u16 unk6C; - u16 unk6E; - u16 unk70; - u16 unk72; - u16 unk74; - u16 unk76; - u8 unk78; - u8 unk79; - s8 unk7A; - s8 unk7B; // movement delta horizontal - s8 unk7C; // movement delta vertical - u8 unk7D; - u8 unk7E; - u8 unk7F; - u8 filler80[0x100]; - u8 unk180[0x100]; - u8 unk280[0x100]; // possibly 0x600 +#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 +#define MAPCURSOR_Y_MIN 2 +#define MAPCURSOR_X_MAX 28 +#define MAPCURSOR_Y_MAX 16 + +// Input events +enum +{ + INPUT_EVENT_NONE, + INPUT_EVENT_DPAD, + INPUT_EVENT_2, + INPUT_EVENT_3, + INPUT_EVENT_A_BUTTON, + INPUT_EVENT_B_BUTTON, }; -extern struct UnknownStruct1 *gUnknown_020388CC; +extern struct RegionMap *gRegionMap; const u16 gPokenavCursor_Pal[] = INCBIN_U16("graphics/pokenav/cursor.gbapal"); const u8 gUnknown_083E5AF0[] = INCBIN_U8("graphics/pokenav/cursor_small.4bpp.lz"); @@ -110,7 +169,7 @@ struct RegionMapLocation { u8 x, y; u8 width, height; - const u8 *name; + const u8 *regionMapSectionId; }; const struct RegionMapLocation gRegionMapLocations[] = @@ -207,75 +266,75 @@ const struct RegionMapLocation gRegionMapLocations[] = const u16 gUnknown_083E7684[][2] = { - {50, 39}, - {51, 41}, - {52, 42}, - {53, 43}, - {54, 14}, - {69, 43}, - {66, 12}, - {79, 49}, - {59, 19}, - {76, 27}, - {65, 37}, - {85, 46}, - {88, 88}, + {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_EVIL_TEAM_HIDEOUT, MAPSEC_LILYCOVE_CITY}, + {MAPSEC_UNDERWATER7, MAPSEC_ROUTE_134}, + {MAPSEC_PETALBURG_WOODS, MAPSEC_ROUTE_104}, + {MAPSEC_JAGGED_PASS_1, MAPSEC_ROUTE_112}, + {MAPSEC_MT_PYRE, MAPSEC_ROUTE_122}, + {MAPSEC_SKY_PILLAR, MAPSEC_ROUTE_131}, + {MAPSEC_NONE, MAPSEC_NONE}, }; -void sub_80FA904(struct UnknownStruct1 *, u8); +void sub_80FA904(struct RegionMap *, u8); bool8 sub_80FA940(void); u8 sub_80FAB78(void); u8 _swiopen(void); u8 sub_80FAD04(void); u8 sub_80FADE4(void); -void sub_80FB170(s16, s16, s16, s16, u16, u16, u8); +void CalcZoomScrollParams(s16, s16, s16, s16, u16, u16, u8); void sub_80FB238(s16, s16); -void sub_80FB260(void); +void UpdateRegionMapVideoRegs(void); u16 GetRegionMapSectionAt(u16, u16); -void sub_80FB32C(void); +void InitializeCursorPosition(void); void sub_80FB600(void); u16 sub_80FB758(u16); u16 sub_80FB9C0(u16); void sub_80FBA18(void); -u8 sub_80FBAA0(u16); -void sub_80FBB3C(u16, u16); +bool8 sub_80FBAA0(u16); +void CreateRegionMapCursorIcon(u16, u16); void sub_80FBCA0(void); void sub_80FBDF8(void); void sub_80FBE24(void); -void sub_80FBF34(struct Sprite *); -void sub_80FBF40(struct Sprite *); -void sub_80FBEA4(struct Sprite *); -const u8 *sub_80FBFB4(u8 *, u16, u16); +void SpriteCB_PlayerIconZoomedOut(struct Sprite *); +void UpdateIconBlink(struct Sprite *); +void SpriteCB_PlayerIconZoomedIn(struct Sprite *); +const u8 *GetMapSectionName(u8 *, u16, u16); void sub_80FC214(void); void sub_80FC228(void); void sub_80FC244(void (*func)(void)); -void sub_80FC254(void); -void sub_80FC31C(void); -void sub_80FC374(void); -void sub_80FC484(void); -void sub_80FC55C(struct Sprite *); +void PrintFlyTargetName(void); +void CreateFlyTargetGraphics(void); +void CreateCityTownFlyTargetIcons(void); +void CreateSpecialAreaFlyTargetIcons(void); +void SpriteCB_FlyTargetIcons(struct Sprite *); void sub_80FC5B4(void); void sub_80FC600(void); void sub_80FC69C(void); -void sub_80FA8EC(struct UnknownStruct1 *a, u8 b) +void InitRegionMap(struct RegionMap *regionMap, bool8 zoomed) { - sub_80FA904(a, b); + sub_80FA904(regionMap, zoomed); while (sub_80FA940()) ; } -void sub_80FA904(struct UnknownStruct1 *a, u8 b) +void sub_80FA904(struct RegionMap *regionMap, bool8 zoomed) { - gUnknown_020388CC = a; - gUnknown_020388CC->unk79 = 0; - gUnknown_020388CC->unk78 = b; - gUnknown_020388CC->unk18 = (b == 0) ? sub_80FAB78 : sub_80FAD04; + gRegionMap = regionMap; + gRegionMap->initStep = 0; + gRegionMap->zoomed = zoomed; + gRegionMap->inputCallback = (zoomed == 0) ? sub_80FAB78 : sub_80FAD04; } bool8 sub_80FA940(void) { - switch (gUnknown_020388CC->unk79) + switch (gRegionMap->initStep) { case 0: LZ77UnCompVram(gUnknown_083E5DA0, (void *)(VRAM + 0x8000)); @@ -287,240 +346,245 @@ bool8 sub_80FA940(void) LoadPalette(gUnknown_083E5D60, 0x70, 0x60); // Why isn't this the right size? break; case 3: - LZ77UnCompWram(gUnknown_083E5AF0, gUnknown_020388CC->unk180); + LZ77UnCompWram(gUnknown_083E5AF0, gRegionMap->unk180); break; case 4: - LZ77UnCompWram(gUnknown_083E5B34, gUnknown_020388CC->unk280); + LZ77UnCompWram(gUnknown_083E5B34, gRegionMap->unk280); break; case 5: - sub_80FB32C(); - gUnknown_020388CC->unk74 = gUnknown_020388CC->unk54; - gUnknown_020388CC->unk76 = gUnknown_020388CC->unk56; - gUnknown_020388CC->unk16 = sub_80FB758(gUnknown_020388CC->unk14); - gUnknown_020388CC->unk14 = sub_80FB9C0(gUnknown_020388CC->unk14); - sub_80FBFB4(gUnknown_020388CC->filler0, gUnknown_020388CC->unk14, 16); + InitializeCursorPosition(); + gRegionMap->unk74 = gRegionMap->cursorPosX; + gRegionMap->unk76 = gRegionMap->cursorPosY; + gRegionMap->unk16 = sub_80FB758(gRegionMap->mapSecId); + gRegionMap->mapSecId = sub_80FB9C0(gRegionMap->mapSecId); + GetMapSectionName(gRegionMap->mapSecName, gRegionMap->mapSecId, 16); break; case 6: - if (gUnknown_020388CC->unk78 == 0) + if (gRegionMap->zoomed == FALSE) { - sub_80FB170(0, 0, 0, 0, 0x100, 0x100, 0); + CalcZoomScrollParams(0, 0, 0, 0, 0x100, 0x100, 0); } else { - gUnknown_020388CC->unk5C = gUnknown_020388CC->unk54 * 8 - 0x34; - gUnknown_020388CC->unk5E = gUnknown_020388CC->unk56 * 8 - 0x44; - gUnknown_020388CC->unk64 = gUnknown_020388CC->unk54; - gUnknown_020388CC->unk66 = gUnknown_020388CC->unk56; - sub_80FB170(gUnknown_020388CC->unk5C, gUnknown_020388CC->unk5E, 0x38, 0x48, 0x80, 0x80, 0); + gRegionMap->scrollX = gRegionMap->cursorPosX * 8 - 52; + gRegionMap->scrollY = gRegionMap->cursorPosY * 8 - 68; + gRegionMap->unk64 = gRegionMap->cursorPosX; + gRegionMap->unk66 = gRegionMap->cursorPosY; + CalcZoomScrollParams(gRegionMap->scrollX, gRegionMap->scrollY, 0x38, 0x48, 0x80, 0x80, 0); } break; case 7: sub_80FBA18(); - sub_80FB260(); - gUnknown_020388CC->unk1C = NULL; - gUnknown_020388CC->unk20 = NULL; - gUnknown_020388CC->unk7A = 0; - gUnknown_020388CC->unk7E = 0; + UpdateRegionMapVideoRegs(); + gRegionMap->cursorIconSprite = NULL; + gRegionMap->playerIconSprite = NULL; + gRegionMap->unk7A = 0; + gRegionMap->blinkPlayerIcon = FALSE; REG_BG2CNT = 0xBC8A; - gUnknown_020388CC->unk79++; + gRegionMap->initStep++; default: return FALSE; } - gUnknown_020388CC->unk79++; + gRegionMap->initStep++; return TRUE; } -void sub_80FAB10(void) +void FreeRegionMapIconResources(void) { - if (gUnknown_020388CC->unk1C != NULL) + if (gRegionMap->cursorIconSprite != NULL) { - DestroySprite(gUnknown_020388CC->unk1C); - FreeSpriteTilesByTag(gUnknown_020388CC->unk58); - FreeSpritePaletteByTag(gUnknown_020388CC->unk5A); + DestroySprite(gRegionMap->cursorIconSprite); + FreeSpriteTilesByTag(gRegionMap->cursorIconTileTag); + FreeSpritePaletteByTag(gRegionMap->cursorIconPaletteTag); } - if (gUnknown_020388CC->unk20 != NULL) + if (gRegionMap->playerIconSprite != NULL) { - DestroySprite(gUnknown_020388CC->unk20); - FreeSpriteTilesByTag(gUnknown_020388CC->unk70); - FreeSpritePaletteByTag(gUnknown_020388CC->unk72); + DestroySprite(gRegionMap->playerIconSprite); + FreeSpriteTilesByTag(gRegionMap->playerIconTileTag); + FreeSpritePaletteByTag(gRegionMap->playerIconPaletteTag); } } u8 sub_80FAB60(void) { - return gUnknown_020388CC->unk18(); + return gRegionMap->inputCallback(); } u8 sub_80FAB78(void) { - u8 r4 = 0; + u8 event = INPUT_EVENT_NONE; - gUnknown_020388CC->unk7B = 0; - gUnknown_020388CC->unk7C = 0; - if ((gMain.heldKeys & DPAD_UP) && gUnknown_020388CC->unk56 > 2) + gRegionMap->cursorDeltaX = 0; + gRegionMap->cursorDeltaY = 0; + if ((gMain.heldKeys & DPAD_UP) && gRegionMap->cursorPosY > MAPCURSOR_Y_MIN) { - gUnknown_020388CC->unk7C = -1; - r4 = 1; + gRegionMap->cursorDeltaY = -1; + event = INPUT_EVENT_DPAD; } - if ((gMain.heldKeys & DPAD_DOWN) && gUnknown_020388CC->unk56 < 16) + if ((gMain.heldKeys & DPAD_DOWN) && gRegionMap->cursorPosY < MAPCURSOR_Y_MAX) { - gUnknown_020388CC->unk7C = 1; - r4 = 1; + gRegionMap->cursorDeltaY = 1; + event = INPUT_EVENT_DPAD; } - if ((gMain.heldKeys & DPAD_LEFT) && gUnknown_020388CC->unk54 > 1) + if ((gMain.heldKeys & DPAD_LEFT) && gRegionMap->cursorPosX > MAPCURSOR_X_MIN) { - gUnknown_020388CC->unk7B = -1; - r4 = 1; + gRegionMap->cursorDeltaX = -1; + event = INPUT_EVENT_DPAD; } - if ((gMain.heldKeys & DPAD_RIGHT) && gUnknown_020388CC->unk54 < 0x1C) + if ((gMain.heldKeys & DPAD_RIGHT) && gRegionMap->cursorPosX < MAPCURSOR_X_MAX) { - gUnknown_020388CC->unk7B = 1; - r4 = 1; + gRegionMap->cursorDeltaX = 1; + event = INPUT_EVENT_DPAD; } + if (gMain.newKeys & A_BUTTON) - r4 = 4; + event = INPUT_EVENT_A_BUTTON; else if (gMain.newKeys & B_BUTTON) - r4 = 5; - if (r4 == 1) + event = INPUT_EVENT_B_BUTTON; + + if (event == INPUT_EVENT_DPAD) { - gUnknown_020388CC->unk7A = 4; - gUnknown_020388CC->unk18 = _swiopen; + gRegionMap->unk7A = 4; + gRegionMap->inputCallback = _swiopen; } - return r4; + return event; } u8 _swiopen(void) { - u16 r4; + u16 mapSecId; - if (gUnknown_020388CC->unk7A != 0) - return 2; + if (gRegionMap->unk7A != 0) + return INPUT_EVENT_2; - if (gUnknown_020388CC->unk7B > 0) - gUnknown_020388CC->unk54++; + if (gRegionMap->cursorDeltaX > 0) + gRegionMap->cursorPosX++; - if (gUnknown_020388CC->unk7B < 0) - gUnknown_020388CC->unk54--; + if (gRegionMap->cursorDeltaX < 0) + gRegionMap->cursorPosX--; - if (gUnknown_020388CC->unk7C > 0) - gUnknown_020388CC->unk56++; + if (gRegionMap->cursorDeltaY > 0) + gRegionMap->cursorPosY++; - if (gUnknown_020388CC->unk7C < 0) - gUnknown_020388CC->unk56--; + if (gRegionMap->cursorDeltaY < 0) + gRegionMap->cursorPosY--; - r4 = GetRegionMapSectionAt(gUnknown_020388CC->unk54, gUnknown_020388CC->unk56); - gUnknown_020388CC->unk16 = sub_80FB758(r4); - if (r4 != gUnknown_020388CC->unk14) + mapSecId = GetRegionMapSectionAt(gRegionMap->cursorPosX, gRegionMap->cursorPosY); + gRegionMap->unk16 = sub_80FB758(mapSecId); + if (mapSecId != gRegionMap->mapSecId) { - gUnknown_020388CC->unk14 = r4; - sub_80FBFB4(gUnknown_020388CC->filler0, gUnknown_020388CC->unk14, 16); + gRegionMap->mapSecId = mapSecId; + GetMapSectionName(gRegionMap->mapSecName, gRegionMap->mapSecId, 16); } sub_80FBA18(); - gUnknown_020388CC->unk18 = sub_80FAB78; - return 3; + gRegionMap->inputCallback = sub_80FAB78; + return INPUT_EVENT_3; } u8 sub_80FAD04(void) { - u8 r4 = 0; - gUnknown_020388CC->unk6A = 0; - gUnknown_020388CC->unk68 = 0; - if ((gMain.heldKeys & 0x40) && gUnknown_020388CC->unk5E > -0x34) + u8 event = INPUT_EVENT_NONE; + + gRegionMap->unk6A = 0; + gRegionMap->unk68 = 0; + if ((gMain.heldKeys & DPAD_UP) && gRegionMap->scrollY > -52) { - gUnknown_020388CC->unk68 = -1; - r4 = 1; + gRegionMap->unk68 = -1; + event = INPUT_EVENT_DPAD; } - if ((gMain.heldKeys & 0x80) && gUnknown_020388CC->unk5E < 0x3C) + if ((gMain.heldKeys & DPAD_DOWN) && gRegionMap->scrollY < 60) { - gUnknown_020388CC->unk68 = 1; - r4 = 1; + gRegionMap->unk68 = 1; + event = INPUT_EVENT_DPAD; } - if ((gMain.heldKeys & 0x20) && gUnknown_020388CC->unk5C > -0x2C) + if ((gMain.heldKeys & DPAD_LEFT) && gRegionMap->scrollX > -44) { - gUnknown_020388CC->unk6A = -1; - r4 = 1; + gRegionMap->unk6A = -1; + event = INPUT_EVENT_DPAD; } - if ((gMain.heldKeys & 0x10) && gUnknown_020388CC->unk5C < 0xAC) + if ((gMain.heldKeys & DPAD_RIGHT) && gRegionMap->scrollX < 172) { - gUnknown_020388CC->unk6A = 1; - r4 = 1; + gRegionMap->unk6A = 1; + event = INPUT_EVENT_DPAD; } + if (gMain.newKeys & A_BUTTON) - r4 = 4; + event = INPUT_EVENT_A_BUTTON; if (gMain.newKeys & B_BUTTON) - r4 = 5; - if (r4 == 1) + event = INPUT_EVENT_B_BUTTON; + + if (event == INPUT_EVENT_DPAD) { - gUnknown_020388CC->unk18 = sub_80FADE4; - gUnknown_020388CC->unk6C = 0; + gRegionMap->inputCallback = sub_80FADE4; + gRegionMap->unk6C = 0; } - return r4; + return event; } u8 sub_80FADE4(void) { - gUnknown_020388CC->unk5E += gUnknown_020388CC->unk68; - gUnknown_020388CC->unk5C += gUnknown_020388CC->unk6A; - sub_80FB238(gUnknown_020388CC->unk5C, gUnknown_020388CC->unk5E); - gUnknown_020388CC->unk6C++; - if (gUnknown_020388CC->unk6C == 8) + gRegionMap->scrollY += gRegionMap->unk68; + gRegionMap->scrollX += gRegionMap->unk6A; + sub_80FB238(gRegionMap->scrollX, gRegionMap->scrollY); + gRegionMap->unk6C++; + if (gRegionMap->unk6C == 8) { - u16 r3 = (gUnknown_020388CC->unk5C + 0x2C) / 8 + 1; - u16 r1 = (gUnknown_020388CC->unk5E + 0x34) / 8 + 2; + u16 r3 = (gRegionMap->scrollX + 44) / 8 + 1; + u16 r1 = (gRegionMap->scrollY + 52) / 8 + 2; - if (r3 != gUnknown_020388CC->unk64 || r1 != gUnknown_020388CC->unk66) + if (r3 != gRegionMap->unk64 || r1 != gRegionMap->unk66) { - u16 r4; + u16 mapSecId; - gUnknown_020388CC->unk64 = r3; - gUnknown_020388CC->unk66 = r1; - r4 = GetRegionMapSectionAt(r3, r1); - gUnknown_020388CC->unk16 = sub_80FB758(r4); - if (r4 != gUnknown_020388CC->unk14) + gRegionMap->unk64 = r3; + gRegionMap->unk66 = r1; + mapSecId = GetRegionMapSectionAt(r3, r1); + gRegionMap->unk16 = sub_80FB758(mapSecId); + if (mapSecId != gRegionMap->mapSecId) { - gUnknown_020388CC->unk14 = r4; - sub_80FBFB4(gUnknown_020388CC->filler0, gUnknown_020388CC->unk14, 16); + gRegionMap->mapSecId = mapSecId; + GetMapSectionName(gRegionMap->mapSecName, gRegionMap->mapSecId, 16); } sub_80FBA18(); } - gUnknown_020388CC->unk6C = 0; - gUnknown_020388CC->unk18 = sub_80FAD04; - return 3; + gRegionMap->unk6C = 0; + gRegionMap->inputCallback = sub_80FAD04; + return INPUT_EVENT_3; } - return 2; + return INPUT_EVENT_2; } void sub_80FAEC4(void) { - if (gUnknown_020388CC->unk78 == 0) + if (gRegionMap->zoomed == FALSE) { - gUnknown_020388CC->unk5E = 0; - gUnknown_020388CC->unk5C = 0; - gUnknown_020388CC->unk40 = 0; - gUnknown_020388CC->unk3C = 0; - gUnknown_020388CC->unk60 = gUnknown_020388CC->unk54 * 8 - 0x34; - gUnknown_020388CC->unk62 = gUnknown_020388CC->unk56 * 8 - 0x44; - gUnknown_020388CC->unk44 = (gUnknown_020388CC->unk60 << 8) / 16; - gUnknown_020388CC->unk48 = (gUnknown_020388CC->unk62 << 8) / 16; - gUnknown_020388CC->unk64 = gUnknown_020388CC->unk54; - gUnknown_020388CC->unk66 = gUnknown_020388CC->unk56; - gUnknown_020388CC->unk4C = 0x10000; - gUnknown_020388CC->unk50 = -0x800; + gRegionMap->scrollY = 0; + gRegionMap->scrollX = 0; + gRegionMap->unk40 = 0; + gRegionMap->unk3C = 0; + gRegionMap->unk60 = gRegionMap->cursorPosX * 8 - 52; + gRegionMap->unk62 = gRegionMap->cursorPosY * 8 - 68; + gRegionMap->unk44 = (gRegionMap->unk60 << 8) / 16; + gRegionMap->unk48 = (gRegionMap->unk62 << 8) / 16; + gRegionMap->unk64 = gRegionMap->cursorPosX; + gRegionMap->unk66 = gRegionMap->cursorPosY; + gRegionMap->unk4C = (256 << 8); + gRegionMap->unk50 = -0x800; } else { - gUnknown_020388CC->unk3C = gUnknown_020388CC->unk5C * 256; - gUnknown_020388CC->unk40 = gUnknown_020388CC->unk5E * 256; - gUnknown_020388CC->unk60 = 0; - gUnknown_020388CC->unk62 = 0; - gUnknown_020388CC->unk44 = -(gUnknown_020388CC->unk3C / 16); - gUnknown_020388CC->unk48 = -(gUnknown_020388CC->unk40 / 16); - gUnknown_020388CC->unk54 = gUnknown_020388CC->unk64; - gUnknown_020388CC->unk56 = gUnknown_020388CC->unk66; - gUnknown_020388CC->unk4C = 0x8000; - gUnknown_020388CC->unk50 = 0x800; + gRegionMap->unk3C = gRegionMap->scrollX * 256; + gRegionMap->unk40 = gRegionMap->scrollY * 256; + gRegionMap->unk60 = 0; + gRegionMap->unk62 = 0; + gRegionMap->unk44 = -(gRegionMap->unk3C / 16); + gRegionMap->unk48 = -(gRegionMap->unk40 / 16); + gRegionMap->cursorPosX = gRegionMap->unk64; + gRegionMap->cursorPosY = gRegionMap->unk66; + gRegionMap->unk4C = (128 << 8); + gRegionMap->unk50 = 0x800; } - gUnknown_020388CC->unk6E = 0; + gRegionMap->unk6E = 0; sub_80FBCA0(); sub_80FBDF8(); } @@ -529,129 +593,128 @@ u8 sub_80FAFC0(void) { u8 r4; - if (gUnknown_020388CC->unk6E > 15) + if (gRegionMap->unk6E >= 16) return 0; - gUnknown_020388CC->unk6E++; - if (gUnknown_020388CC->unk6E == 16) + gRegionMap->unk6E++; + if (gRegionMap->unk6E == 16) { - gUnknown_020388CC->unk44 = 0; - gUnknown_020388CC->unk48 = 0; - gUnknown_020388CC->unk5C = gUnknown_020388CC->unk60; - gUnknown_020388CC->unk5E = gUnknown_020388CC->unk62; - gUnknown_020388CC->unk4C = (gUnknown_020388CC->unk78 == 0) ? 0x8000 : 0x10000; - gUnknown_020388CC->unk78 = (gUnknown_020388CC->unk78 == 0) ? 1 : 0; - gUnknown_020388CC->unk18 = (gUnknown_020388CC->unk78 == 0) ? sub_80FAB78 : sub_80FAD04; - sub_80FBB3C(gUnknown_020388CC->unk58, gUnknown_020388CC->unk5A); + gRegionMap->unk44 = 0; + gRegionMap->unk48 = 0; + gRegionMap->scrollX = gRegionMap->unk60; + gRegionMap->scrollY = gRegionMap->unk62; + gRegionMap->unk4C = (gRegionMap->zoomed == FALSE) ? (128 << 8) : (256 << 8); + gRegionMap->zoomed = !gRegionMap->zoomed; + gRegionMap->inputCallback = (gRegionMap->zoomed == FALSE) ? sub_80FAB78 : sub_80FAD04; + CreateRegionMapCursorIcon(gRegionMap->cursorIconTileTag, gRegionMap->cursorIconPaletteTag); sub_80FBE24(); r4 = 0; } else { - gUnknown_020388CC->unk3C += gUnknown_020388CC->unk44; - gUnknown_020388CC->unk40 += gUnknown_020388CC->unk48; - gUnknown_020388CC->unk5C = gUnknown_020388CC->unk3C >> 8; - gUnknown_020388CC->unk5E = gUnknown_020388CC->unk40 >> 8; - gUnknown_020388CC->unk4C += gUnknown_020388CC->unk50; - if ((gUnknown_020388CC->unk44 < 0 && gUnknown_020388CC->unk5C < gUnknown_020388CC->unk60) - || (gUnknown_020388CC->unk44 > 0 && gUnknown_020388CC->unk5C > gUnknown_020388CC->unk60)) + gRegionMap->unk3C += gRegionMap->unk44; + gRegionMap->unk40 += gRegionMap->unk48; + gRegionMap->scrollX = gRegionMap->unk3C >> 8; + gRegionMap->scrollY = gRegionMap->unk40 >> 8; + gRegionMap->unk4C += gRegionMap->unk50; + if ((gRegionMap->unk44 < 0 && gRegionMap->scrollX < gRegionMap->unk60) + || (gRegionMap->unk44 > 0 && gRegionMap->scrollX > gRegionMap->unk60)) { - gUnknown_020388CC->unk5C = gUnknown_020388CC->unk60; - gUnknown_020388CC->unk44 = 0; + gRegionMap->scrollX = gRegionMap->unk60; + gRegionMap->unk44 = 0; } - if ((gUnknown_020388CC->unk48 < 0 && gUnknown_020388CC->unk5E < gUnknown_020388CC->unk62) - || (gUnknown_020388CC->unk48 > 0 && gUnknown_020388CC->unk5E > gUnknown_020388CC->unk62)) + if ((gRegionMap->unk48 < 0 && gRegionMap->scrollY < gRegionMap->unk62) + || (gRegionMap->unk48 > 0 && gRegionMap->scrollY > gRegionMap->unk62)) { - gUnknown_020388CC->unk5E = gUnknown_020388CC->unk62; - gUnknown_020388CC->unk48 = 0; + gRegionMap->scrollY = gRegionMap->unk62; + gRegionMap->unk48 = 0; } - if (gUnknown_020388CC->unk78 == 0) + if (gRegionMap->zoomed == FALSE) { - if (gUnknown_020388CC->unk4C < 0x8000) + if (gRegionMap->unk4C < (128 << 8)) { - gUnknown_020388CC->unk4C = 0x8000; - gUnknown_020388CC->unk50 = 0; + gRegionMap->unk4C = (128 << 8); + gRegionMap->unk50 = 0; } } else { - if (gUnknown_020388CC->unk4C > 0x10000) + if (gRegionMap->unk4C > (256 << 8)) { - gUnknown_020388CC->unk4C = 0x10000; - gUnknown_020388CC->unk50 = 0; + gRegionMap->unk4C = (256 << 8); + gRegionMap->unk50 = 0; } } r4 = 1; } - sub_80FB170(gUnknown_020388CC->unk5C, gUnknown_020388CC->unk5E, 0x38, 0x48, gUnknown_020388CC->unk4C >> 8, gUnknown_020388CC->unk4C >> 8, 0); + CalcZoomScrollParams(gRegionMap->scrollX, gRegionMap->scrollY, 0x38, 0x48, gRegionMap->unk4C >> 8, gRegionMap->unk4C >> 8, 0); return r4; } -void sub_80FB170(s16 a, s16 b, s16 c, s16 d, u16 e, u16 f, u8 g) +void CalcZoomScrollParams(s16 a, s16 b, s16 c, s16 d, u16 e, u16 f, u8 rotation) { s32 var1; s32 var2; s32 var3; s32 var4; - gUnknown_020388CC->unk2C = e * gSineTable[g + 64] >> 8; - gUnknown_020388CC->unk30 = e * -gSineTable[g] >> 8; - gUnknown_020388CC->unk34 = f * gSineTable[g] >> 8; - gUnknown_020388CC->unk38 = f * gSineTable[g + 64] >> 8; + gRegionMap->unk2C = e * gSineTable[rotation + 64] >> 8; + gRegionMap->unk30 = e * -gSineTable[rotation] >> 8; + gRegionMap->unk34 = f * gSineTable[rotation] >> 8; + gRegionMap->unk38 = f * gSineTable[rotation + 64] >> 8; var1 = (a << 8) + (c << 8); - var2 = d * gUnknown_020388CC->unk34 + gUnknown_020388CC->unk2C * c; - gUnknown_020388CC->unk24 = var1 - var2; + var2 = d * gRegionMap->unk34 + gRegionMap->unk2C * c; + gRegionMap->bg2x = var1 - var2; var3 = (b << 8) + (d << 8); - var4 = gUnknown_020388CC->unk38 * d + gUnknown_020388CC->unk30 * c; - gUnknown_020388CC->unk28 = var3 - var4; + var4 = gRegionMap->unk38 * d + gRegionMap->unk30 * c; + gRegionMap->bg2y = var3 - var4; - gUnknown_020388CC->unk7D = 1; + gRegionMap->needUpdateVideoRegs = TRUE; } -void sub_80FB238(s16 a, s16 b) +void sub_80FB238(s16 x, s16 y) { - gUnknown_020388CC->unk24 = 0x1C00 + (a << 8); - gUnknown_020388CC->unk28 = 0x2400 + (b << 8); - gUnknown_020388CC->unk7D = 1; + gRegionMap->bg2x = (0x1C << 8) + (x << 8); + gRegionMap->bg2y = (0x24 << 8) + (y << 8); + gRegionMap->needUpdateVideoRegs = TRUE; } -void sub_80FB260(void) +void UpdateRegionMapVideoRegs(void) { - if (gUnknown_020388CC->unk7D != 0) + if (gRegionMap->needUpdateVideoRegs) { - REG_BG2PA = gUnknown_020388CC->unk2C; - REG_BG2PB = gUnknown_020388CC->unk34; - REG_BG2PC = gUnknown_020388CC->unk30; - REG_BG2PD = gUnknown_020388CC->unk38; - REG_BG2X = gUnknown_020388CC->unk24; - REG_BG2Y = gUnknown_020388CC->unk28; - gUnknown_020388CC->unk7D = 0; + REG_BG2PA = gRegionMap->unk2C; + REG_BG2PB = gRegionMap->unk34; + REG_BG2PC = gRegionMap->unk30; + REG_BG2PD = gRegionMap->unk38; + REG_BG2X = gRegionMap->bg2x; + REG_BG2Y = gRegionMap->bg2y; + gRegionMap->needUpdateVideoRegs = FALSE; } } void sub_80FB2A4(s16 a, s16 b) { - sub_80FB170(a, b, 0x38, 0x48, 0x100, 0x100, 0); - sub_80FB260(); - if (gUnknown_020388CC->unk20 != NULL) + CalcZoomScrollParams(a, b, 0x38, 0x48, 0x100, 0x100, 0); + UpdateRegionMapVideoRegs(); + if (gRegionMap->playerIconSprite != NULL) { - gUnknown_020388CC->unk20->pos2.x = -a; - gUnknown_020388CC->unk20->pos2.y = -b; + gRegionMap->playerIconSprite->pos2.x = -a; + gRegionMap->playerIconSprite->pos2.y = -b; } } u16 GetRegionMapSectionAt(u16 x, u16 y) { - - if (y < 2 || y > 16 || x < 1 || x > 0x1C) - return 0x58; - y -= 2; - x -= 1; + if (y < MAPCURSOR_Y_MIN || y > MAPCURSOR_Y_MAX || x < MAPCURSOR_X_MIN || x > MAPCURSOR_X_MAX) + return MAPSEC_NONE; + y -= MAPCURSOR_Y_MIN; + x -= MAPCURSOR_X_MIN; return gRegionMapSections[x + y * 28]; } -void sub_80FB32C(void) +void InitializeCursorPosition(void) { struct MapHeader *mapHeader; u16 mapWidth; @@ -661,7 +724,10 @@ void sub_80FB32C(void) u16 r1; u16 r9; - if (gSaveBlock1.location.mapGroup == 0x19 && (gSaveBlock1.location.mapNum == 0x29 || gSaveBlock1.location.mapNum == 0x2A || gSaveBlock1.location.mapNum == 0x2B)) + if (gSaveBlock1.location.mapGroup == 25 + && (gSaveBlock1.location.mapNum == MAP_ID_SS_TIDAL_CORRIDOR + || gSaveBlock1.location.mapNum == MAP_ID_SS_TIDAL_LOWER_DECK + || gSaveBlock1.location.mapNum == MAP_ID_SS_TIDAL_ROOMS)) { sub_80FB600(); return; @@ -675,20 +741,20 @@ void sub_80FB32C(void) case 2: case 4: case 5: - gUnknown_020388CC->unk14 = gMapHeader.name; - gUnknown_020388CC->unk7F = 0; + gRegionMap->mapSecId = gMapHeader.regionMapSectionId; + gRegionMap->playerIsInCave = FALSE; mapWidth = gMapHeader.mapData->width; mapHeight = gMapHeader.mapData->height; x = gSaveBlock1.pos.x; y = gSaveBlock1.pos.y; - if (gUnknown_020388CC->unk14 == 0x45) - gUnknown_020388CC->unk7F = 1; + if (gRegionMap->mapSecId == MAPSEC_UNDERWATER6) + gRegionMap->playerIsInCave = TRUE; break; case 3: case 6: mapHeader = get_mapheader_by_bank_and_number(gSaveBlock1.warp4.mapGroup, gSaveBlock1.warp4.mapNum); - gUnknown_020388CC->unk14 = mapHeader->name; - gUnknown_020388CC->unk7F = 1; + gRegionMap->mapSecId = mapHeader->regionMapSectionId; + gRegionMap->playerIsInCave = TRUE; mapWidth = mapHeader->mapData->width; mapHeight = mapHeader->mapData->height; x = gSaveBlock1.warp4.x; @@ -696,8 +762,8 @@ void sub_80FB32C(void) break; case 8: mapHeader = get_mapheader_by_bank_and_number(gSaveBlock1.warp2.mapGroup, gSaveBlock1.warp2.mapNum); - gUnknown_020388CC->unk14 = mapHeader->name; - gUnknown_020388CC->unk7F = 1; + gRegionMap->mapSecId = mapHeader->regionMapSectionId; + gRegionMap->playerIsInCave = TRUE; mapWidth = mapHeader->mapData->width; mapHeight = mapHeader->mapData->height; x = gSaveBlock1.warp2.x; @@ -707,8 +773,8 @@ void sub_80FB32C(void) { struct WarpData *r4; - gUnknown_020388CC->unk14 = gMapHeader.name; - if (gUnknown_020388CC->unk14 != 0x57) + gRegionMap->mapSecId = gMapHeader.regionMapSectionId; + if (gRegionMap->mapSecId != MAPSEC_UNK_0x57) { r4 = &gSaveBlock1.warp4; mapHeader = get_mapheader_by_bank_and_number(r4->mapGroup, r4->mapNum); @@ -717,9 +783,9 @@ void sub_80FB32C(void) { r4 = &gSaveBlock1.warp2; mapHeader = get_mapheader_by_bank_and_number(r4->mapGroup, r4->mapNum); - gUnknown_020388CC->unk14 = mapHeader->name; + gRegionMap->mapSecId = mapHeader->regionMapSectionId; } - gUnknown_020388CC->unk7F = 0; + gRegionMap->playerIsInCave = FALSE; mapWidth = mapHeader->mapData->width; mapHeight = mapHeader->mapData->height; x = r4->x; @@ -730,28 +796,28 @@ void sub_80FB32C(void) r9 = x; - r1 = mapWidth / gRegionMapLocations[gUnknown_020388CC->unk14].width; + r1 = mapWidth / gRegionMapLocations[gRegionMap->mapSecId].width; if (r1 == 0) r1 = 1; x /= r1; - if (x >= gRegionMapLocations[gUnknown_020388CC->unk14].width) - x = gRegionMapLocations[gUnknown_020388CC->unk14].width - 1; + if (x >= gRegionMapLocations[gRegionMap->mapSecId].width) + x = gRegionMapLocations[gRegionMap->mapSecId].width - 1; - r1 = mapHeight / gRegionMapLocations[gUnknown_020388CC->unk14].height; + r1 = mapHeight / gRegionMapLocations[gRegionMap->mapSecId].height; if (r1 == 0) r1 = 1; y /= r1; - if (y >= gRegionMapLocations[gUnknown_020388CC->unk14].height) - y = gRegionMapLocations[gUnknown_020388CC->unk14].height - 1; + if (y >= gRegionMapLocations[gRegionMap->mapSecId].height) + y = gRegionMapLocations[gRegionMap->mapSecId].height - 1; - switch (gUnknown_020388CC->unk14) + switch (gRegionMap->mapSecId) { - case 0x1D: + case MAPSEC_ROUTE_114: if (y != 0) x = 0; break; - case 0x29: - case 0x33: + case MAPSEC_ROUTE_126: + case MAPSEC_UNDERWATER2: x = 0; if (gSaveBlock1.pos.x > 32) x = 1; @@ -763,7 +829,7 @@ void sub_80FB32C(void) if (gSaveBlock1.pos.y > 0x38) y++; break; - case 0x24: + case MAPSEC_ROUTE_121: x = 0; if (r9 > 14) x = 1; @@ -773,8 +839,8 @@ void sub_80FB32C(void) x++; break; } - gUnknown_020388CC->unk54 = gRegionMapLocations[gUnknown_020388CC->unk14].x + x + 1; - gUnknown_020388CC->unk56 = gRegionMapLocations[gUnknown_020388CC->unk14].y + y + 2; + gRegionMap->cursorPosX = gRegionMapLocations[gRegionMap->mapSecId].x + x + MAPCURSOR_X_MIN; + gRegionMap->cursorPosY = gRegionMapLocations[gRegionMap->mapSecId].y + y + MAPCURSOR_Y_MIN; } void sub_80FB600(void) @@ -789,16 +855,16 @@ void sub_80FB600(void) switch (GetSSTidalLocation(&mapGroup, &mapNum, &sp2, &sp4)) { case 1: - gUnknown_020388CC->unk14 = 8; + gRegionMap->mapSecId = MAPSEC_SLATEPORT_CITY; break; case 2: - gUnknown_020388CC->unk14 = 12; + gRegionMap->mapSecId = MAPSEC_LILYCOVE_CITY; break; case 3: - gUnknown_020388CC->unk14 = 0x27; + gRegionMap->mapSecId = MAPSEC_ROUTE_124; break; case 4: - gUnknown_020388CC->unk14 = 0x2E; + gRegionMap->mapSecId = MAPSEC_ROUTE_131; break; default: case 0: @@ -806,70 +872,71 @@ void sub_80FB600(void) struct MapHeader *mapHeader = get_mapheader_by_bank_and_number(mapGroup, mapNum); u16 r1; - gUnknown_020388CC->unk14 = mapHeader->name; - r1 = mapHeader->mapData->width / gRegionMapLocations[gUnknown_020388CC->unk14].width; + gRegionMap->mapSecId = mapHeader->regionMapSectionId; + r1 = mapHeader->mapData->width / gRegionMapLocations[gRegionMap->mapSecId].width; if (r1 == 0) r1 = 1; x = sp2 / r1; - if (x >= gRegionMapLocations[gUnknown_020388CC->unk14].width) - x = gRegionMapLocations[gUnknown_020388CC->unk14].width - 1; + if (x >= gRegionMapLocations[gRegionMap->mapSecId].width) + x = gRegionMapLocations[gRegionMap->mapSecId].width - 1; - r1 = mapHeader->mapData->height / gRegionMapLocations[gUnknown_020388CC->unk14].height; + r1 = mapHeader->mapData->height / gRegionMapLocations[gRegionMap->mapSecId].height; if (r1 == 0) r1 = 1; y = sp4 / r1; - if (y >= gRegionMapLocations[gUnknown_020388CC->unk14].height) - y = gRegionMapLocations[gUnknown_020388CC->unk14].height - 1; + if (y >= gRegionMapLocations[gRegionMap->mapSecId].height) + y = gRegionMapLocations[gRegionMap->mapSecId].height - 1; } break; } - gUnknown_020388CC->unk7F = 0; - gUnknown_020388CC->unk54 = gRegionMapLocations[gUnknown_020388CC->unk14].x + x + 1; - gUnknown_020388CC->unk56 = gRegionMapLocations[gUnknown_020388CC->unk14].y + y + 2; + gRegionMap->playerIsInCave = FALSE; + gRegionMap->cursorPosX = gRegionMapLocations[gRegionMap->mapSecId].x + x + MAPCURSOR_X_MIN; + gRegionMap->cursorPosY = gRegionMapLocations[gRegionMap->mapSecId].y + y + MAPCURSOR_Y_MIN; } -u16 sub_80FB758(u16 a) +u16 sub_80FB758(u16 mapSecId) { - switch (a) + switch (mapSecId) { - case 88: + case MAPSEC_NONE: return 0; - case 0: - return FlagGet(0x80F) ? 2 : 3; - case 1: - return FlagGet(0x810) ? 2 : 3; - case 2: - return FlagGet(0x811) ? 2 : 3; - case 3: - return FlagGet(0x812) ? 2 : 3; - case 4: - return FlagGet(0x813) ? 2 : 3; - case 5: - return FlagGet(0x814) ? 2 : 3; - case 6: - return FlagGet(0x815) ? 2 : 3; - case 7: - return FlagGet(0x816) ? 2 : 3; - case 8: - return FlagGet(0x817) ? 2 : 3; - case 9: - return FlagGet(0x818) ? 2 : 3; - case 10: - return FlagGet(0x819) ? 2 : 3; - case 11: - return FlagGet(0x81A) ? 2 : 3; - case 12: - return FlagGet(0x81B) ? 2 : 3; - case 13: - return FlagGet(0x81C) ? 2 : 3; - case 14: - return FlagGet(0x81D) ? 2 : 3; - case 15: - return FlagGet(0x81E) ? 2 : 3; - case 58: - return FlagGet(0x848) ? 4 : 0; - case 73: - return FlagGet(0x849) ? 1 : 0; + case MAPSEC_LITTLEROOT_TOWN: + return FlagGet(FLAG_VISITED_LITTLEROOT_TOWN) ? 2 : 3; + case MAPSEC_OLDALE_TOWN: + return FlagGet(FLAG_VISITED_OLDALE_TOWN) ? 2 : 3; + case MAPSEC_DEWFORD_TOWN: + return FlagGet(FLAG_VISITED_DEWFORD_TOWN) ? 2 : 3; + case MAPSEC_LAVARIDGE_TOWN: + return FlagGet(FLAG_VISITED_LAVARIDGE_TOWN) ? 2 : 3; + case MAPSEC_FALLARBOR_TOWN: + return FlagGet(FLAG_VISITED_FALLARBOR_TOWN) ? 2 : 3; + case MAPSEC_VERDANTURF_TOWN: + return FlagGet(FLAG_VISITED_VERDANTURF_TOWN) ? 2 : 3; + case MAPSEC_PACIFIDLOG_TOWN: + return FlagGet(FLAG_VISITED_PACIFIDLOG_TOWN) ? 2 : 3; + case MAPSEC_PETALBURG_CITY: + return FlagGet(FLAG_VISITED_PETALBURG_CITY) ? 2 : 3; + case MAPSEC_SLATEPORT_CITY: + return FlagGet(FLAG_VISITED_SLATEPORT_CITY) ? 2 : 3; + case MAPSEC_MAUVILLE_CITY: + return FlagGet(FLAG_VISITED_MAUVILLE_CITY) ? 2 : 3; + case MAPSEC_RUSTBORO_CITY: + return FlagGet(FLAG_VISITED_RUSTBORO_CITY) ? 2 : 3; + case MAPSEC_FORTREE_CITY: + return FlagGet(FLAG_VISITED_FORTREE_CITY) ? 2 : 3; + case MAPSEC_LILYCOVE_CITY: + return FlagGet(FLAG_VISITED_LILYCOVE_CITY) ? 2 : 3; + case MAPSEC_MOSSDEEP_CITY: + return FlagGet(FLAG_VISITED_MOSSDEEP_CITY) ? 2 : 3; + case MAPSEC_SOOTOPOLIS_CITY: + return FlagGet(FLAG_VISITED_SOOTOPOLIS_CITY) ? 2 : 3; + case MAPSEC_EVER_GRANDE_CITY: + return FlagGet(FLAG_VISITED_EVER_GRANDE_CITY) ? 2 : 3; + + case MAPSEC_BATTLE_TOWER: + return FlagGet(FLAG_UNLOCK_BATTLE_TOWER) ? 4 : 0; + case MAPSEC_SOUTHERN_ISLAND: + return FlagGet(FLAG_UNLOCK_SOUTHERN_ISLAND) ? 1 : 0; default: return 1; } @@ -880,22 +947,21 @@ u16 GetRegionMapSectionAt_(u16 x, u16 y) return GetRegionMapSectionAt(x, y); } -u16 sub_80FB9C0(u16 a) +u16 sub_80FB9C0(u16 mapSecId) { - u16 i = 0; + u16 i; - while (gUnknown_083E7684[i][0] != 88) + for (i = 0; gUnknown_083E7684[i][0] != MAPSEC_NONE; i++) { - if (gUnknown_083E7684[i][0] == a) + if (gUnknown_083E7684[i][0] == mapSecId) return gUnknown_083E7684[i][1]; - i++; } - return a; + return mapSecId; } -u16 sub_80FBA04(u16 a) +u16 sub_80FBA04(u16 mapSecId) { - return sub_80FB9C0(a); + return sub_80FB9C0(mapSecId); } void sub_80FBA18(void) @@ -904,21 +970,21 @@ void sub_80FBA18(void) u16 y; u16 i; - if (gUnknown_020388CC->unk14 == 88) + if (gRegionMap->mapSecId == MAPSEC_NONE) { - gUnknown_020388CC->unk17 = 0; + gRegionMap->everGrandeCityArea = 0; return; } - if (gUnknown_020388CC->unk78 == 0) + if (gRegionMap->zoomed == FALSE) { - x = gUnknown_020388CC->unk54; - y = gUnknown_020388CC->unk56; + x = gRegionMap->cursorPosX; + y = gRegionMap->cursorPosY; } else { - x = gUnknown_020388CC->unk64; - y = gUnknown_020388CC->unk66; + x = gRegionMap->unk64; + y = gRegionMap->unk66; } i = 0; @@ -926,7 +992,7 @@ void sub_80FBA18(void) { if (x <= 1) { - if (sub_80FBAA0(y) != 0) + if (sub_80FBAA0(y)) { y--; x = 0x1D; @@ -939,36 +1005,34 @@ void sub_80FBA18(void) else { x--; - if (GetRegionMapSectionAt(x, y) == gUnknown_020388CC->unk14) + if (GetRegionMapSectionAt(x, y) == gRegionMap->mapSecId) i++; } } - gUnknown_020388CC->unk17 = i; + gRegionMap->everGrandeCityArea = i; } -u8 sub_80FBAA0(u16 a) +bool8 sub_80FBAA0(u16 a) { u16 x; u16 y; y = a - 1; if (y == 0xFFFF) - return 0; + return FALSE; - x = 1; - while (x < 0x1D) + for (x = MAPCURSOR_X_MIN; x <= MAPCURSOR_X_MAX; x++) { - if (GetRegionMapSectionAt(x, y) == gUnknown_020388CC->unk14) - return 1; - x++; + if (GetRegionMapSectionAt(x, y) == gRegionMap->mapSecId) + return TRUE; } - return 0; + return FALSE; } -const struct OamData gOamData_83E76B8 = +const struct OamData gCursorIconOamData = { .y = 0, .affineMode = 0, @@ -1001,19 +1065,19 @@ const union AnimCmd gSpriteAnim_83E76CC[] = ANIMCMD_JUMP(0), }; -const union AnimCmd *const gSpriteAnimTable_83E76E0[] = +const union AnimCmd *const gCursorIconAnimTable[] = { gSpriteAnim_83E76C0, gSpriteAnim_83E76CC, }; -void sub_80FBAF0(struct Sprite *sprite) +void SpriteCB_CursorIcon(struct Sprite *sprite) { - if (gUnknown_020388CC->unk7A != 0) + if (gRegionMap->unk7A != 0) { - sprite->pos1.x += gUnknown_020388CC->unk7B * 2; - sprite->pos1.y += gUnknown_020388CC->unk7C * 2; - gUnknown_020388CC->unk7A--; + sprite->pos1.x += gRegionMap->cursorDeltaX * 2; + sprite->pos1.y += gRegionMap->cursorDeltaY * 2; + gRegionMap->unk7A--; } } @@ -1021,7 +1085,7 @@ void nullsub_66(struct Sprite *sprite) { } -void sub_80FBB3C(u16 tileTag, u16 paletteTag) +void CreateRegionMapCursorIcon(u16 tileTag, u16 paletteTag) { u8 spriteId; struct SpriteSheet spriteSheet; @@ -1031,30 +1095,30 @@ void sub_80FBB3C(u16 tileTag, u16 paletteTag) }; struct SpriteTemplate spriteTemplate = { - .oam = &gOamData_83E76B8, - .anims = gSpriteAnimTable_83E76E0, + .oam = &gCursorIconOamData, + .anims = gCursorIconAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80FBAF0, + .callback = SpriteCB_CursorIcon, }; spriteSheet.tag = tileTag; spriteTemplate.tileTag = tileTag; - gUnknown_020388CC->unk58 = tileTag; + gRegionMap->cursorIconTileTag = tileTag; spritePalette.tag = paletteTag; spriteTemplate.paletteTag = paletteTag; - gUnknown_020388CC->unk5A = paletteTag; + gRegionMap->cursorIconPaletteTag = paletteTag; - if (gUnknown_020388CC->unk78 == 0) + if (gRegionMap->zoomed == FALSE) { - spriteSheet.data = gUnknown_020388CC->unk180; + spriteSheet.data = gRegionMap->unk180; spriteSheet.size = 0x100; - spriteTemplate.callback = sub_80FBAF0; + spriteTemplate.callback = SpriteCB_CursorIcon; } else { - spriteSheet.data = gUnknown_020388CC->unk280; + spriteSheet.data = gRegionMap->unk280; spriteSheet.size = 0x600; spriteTemplate.callback = nullsub_66; } @@ -1063,44 +1127,44 @@ void sub_80FBB3C(u16 tileTag, u16 paletteTag) spriteId = CreateSprite(&spriteTemplate, 0x38, 0x48, 0); if (spriteId != 64) { - gUnknown_020388CC->unk1C = &gSprites[spriteId]; - if (gUnknown_020388CC->unk78 == 1) + gRegionMap->cursorIconSprite = &gSprites[spriteId]; + if (gRegionMap->zoomed == TRUE) { - gUnknown_020388CC->unk1C->oam.size = 2; - gUnknown_020388CC->unk1C->pos1.x -= 8; - gUnknown_020388CC->unk1C->pos1.y -= 8; - StartSpriteAnim(gUnknown_020388CC->unk1C, 1); + gRegionMap->cursorIconSprite->oam.size = 2; + gRegionMap->cursorIconSprite->pos1.x -= 8; + gRegionMap->cursorIconSprite->pos1.y -= 8; + StartSpriteAnim(gRegionMap->cursorIconSprite, 1); } else { - gUnknown_020388CC->unk1C->oam.size = 1; - gUnknown_020388CC->unk1C->pos1.x = gUnknown_020388CC->unk54 * 8 + 4; - gUnknown_020388CC->unk1C->pos1.y = gUnknown_020388CC->unk56 * 8 + 4; + gRegionMap->cursorIconSprite->oam.size = 1; + gRegionMap->cursorIconSprite->pos1.x = gRegionMap->cursorPosX * 8 + 4; + gRegionMap->cursorIconSprite->pos1.y = gRegionMap->cursorPosY * 8 + 4; } - gUnknown_020388CC->unk1C->data1 = 2; - gUnknown_020388CC->unk1C->data2 = IndexOfSpritePaletteTag(paletteTag) * 16 + 0x0101; - gUnknown_020388CC->unk1C->data3 = 1; + gRegionMap->cursorIconSprite->data1 = 2; + gRegionMap->cursorIconSprite->data2 = IndexOfSpritePaletteTag(paletteTag) * 16 + 0x0101; + gRegionMap->cursorIconSprite->data3 = 1; } } void sub_80FBCA0(void) { - if (gUnknown_020388CC->unk1C != NULL) + if (gRegionMap->cursorIconSprite != NULL) { - DestroySprite(gUnknown_020388CC->unk1C); - FreeSpriteTilesByTag(gUnknown_020388CC->unk58); - FreeSpritePaletteByTag(gUnknown_020388CC->unk5A); + DestroySprite(gRegionMap->cursorIconSprite); + FreeSpriteTilesByTag(gRegionMap->cursorIconTileTag); + FreeSpritePaletteByTag(gRegionMap->cursorIconPaletteTag); } } void unref_sub_80FBCD0(void) { - gUnknown_020388CC->unk1C->data3 = 1; + gRegionMap->cursorIconSprite->data3 = 1; } void unref_sub_80FBCE0(void) { - gUnknown_020388CC->unk1C->data3 = 0; + gRegionMap->cursorIconSprite->data3 = 0; } const struct OamData gOamData_083E7708 = @@ -1131,7 +1195,7 @@ const union AnimCmd *const gSpriteAnimTable_083E7718[] = gSpriteAnim_83E7710, }; -void sub_80FBCF0(u16 tileTag, u16 paletteTag) +void CreateRegionMapPlayerIcon(u16 tileTag, u16 paletteTag) { u8 spriteId; struct SpriteSheet spriteSheet = @@ -1164,80 +1228,82 @@ void sub_80FBCF0(u16 tileTag, u16 paletteTag) LoadSpriteSheet(&spriteSheet); LoadSpritePalette(&spritePalette); spriteId = CreateSprite(&spriteTemplate, 0, 0, 1); - gUnknown_020388CC->unk20 = &gSprites[spriteId]; - if (gUnknown_020388CC->unk78 == 0) + gRegionMap->playerIconSprite = &gSprites[spriteId]; + if (gRegionMap->zoomed == FALSE) { - gUnknown_020388CC->unk20->pos1.x = gUnknown_020388CC->unk74 * 8 + 4; - gUnknown_020388CC->unk20->pos1.y = gUnknown_020388CC->unk76 * 8 + 4; - gUnknown_020388CC->unk20->callback = sub_80FBF34; + gRegionMap->playerIconSprite->pos1.x = gRegionMap->unk74 * 8 + 4; + gRegionMap->playerIconSprite->pos1.y = gRegionMap->unk76 * 8 + 4; + gRegionMap->playerIconSprite->callback = SpriteCB_PlayerIconZoomedOut; } else { - gUnknown_020388CC->unk20->pos1.x = gUnknown_020388CC->unk74 * 16 - 48; - gUnknown_020388CC->unk20->pos1.y = gUnknown_020388CC->unk76 * 16 - 66; - gUnknown_020388CC->unk20->callback = sub_80FBEA4; + gRegionMap->playerIconSprite->pos1.x = gRegionMap->unk74 * 16 - 48; + gRegionMap->playerIconSprite->pos1.y = gRegionMap->unk76 * 16 - 66; + gRegionMap->playerIconSprite->callback = SpriteCB_PlayerIconZoomedIn; } } void sub_80FBDF8(void) { - if (gUnknown_020388CC->unk20 != NULL) + if (gRegionMap->playerIconSprite != NULL) { - gUnknown_020388CC->unk20->invisible = TRUE; - gUnknown_020388CC->unk20->callback = SpriteCallbackDummy; + gRegionMap->playerIconSprite->invisible = TRUE; + gRegionMap->playerIconSprite->callback = SpriteCallbackDummy; } } void sub_80FBE24(void) { - if (gUnknown_020388CC->unk20 != NULL) + if (gRegionMap->playerIconSprite != NULL) { - if (gUnknown_020388CC->unk78 == 1) + if (gRegionMap->zoomed == TRUE) { - gUnknown_020388CC->unk20->pos1.x = gUnknown_020388CC->unk74 * 16 - 48; - gUnknown_020388CC->unk20->pos1.y = gUnknown_020388CC->unk76 * 16 - 66; - gUnknown_020388CC->unk20->callback = sub_80FBEA4; - gUnknown_020388CC->unk20->invisible = FALSE; + gRegionMap->playerIconSprite->pos1.x = gRegionMap->unk74 * 16 - 48; + gRegionMap->playerIconSprite->pos1.y = gRegionMap->unk76 * 16 - 66; + gRegionMap->playerIconSprite->callback = SpriteCB_PlayerIconZoomedIn; + gRegionMap->playerIconSprite->invisible = FALSE; } else { - gUnknown_020388CC->unk20->pos1.x = gUnknown_020388CC->unk74 * 8 + 4; - gUnknown_020388CC->unk20->pos1.y = gUnknown_020388CC->unk76 * 8 + 4; - gUnknown_020388CC->unk20->pos2.x = 0; - gUnknown_020388CC->unk20->pos2.y = 0; - gUnknown_020388CC->unk20->callback = sub_80FBF34; - gUnknown_020388CC->unk20->invisible = FALSE; + gRegionMap->playerIconSprite->pos1.x = gRegionMap->unk74 * 8 + 4; + gRegionMap->playerIconSprite->pos1.y = gRegionMap->unk76 * 8 + 4; + gRegionMap->playerIconSprite->pos2.x = 0; + gRegionMap->playerIconSprite->pos2.y = 0; + gRegionMap->playerIconSprite->callback = SpriteCB_PlayerIconZoomedOut; + gRegionMap->playerIconSprite->invisible = FALSE; } } } -void sub_80FBEA4(struct Sprite *sprite) +void SpriteCB_PlayerIconZoomedIn(struct Sprite *sprite) { - sprite->pos2.x = -(gUnknown_020388CC->unk5C * 2); - sprite->pos2.y = -(gUnknown_020388CC->unk5E * 2); + sprite->pos2.x = -(gRegionMap->scrollX * 2); + sprite->pos2.y = -(gRegionMap->scrollY * 2); sprite->data0 = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY; sprite->data1 = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX; + // Determine if sprite is on screen if (sprite->data0 < -8 || sprite->data0 > 0xA8 || sprite->data1 < -8 || sprite->data1 > 0xF8) - sprite->data2 = 0; + sprite->data2 = FALSE; else - sprite->data2 = 1; + sprite->data2 = TRUE; - if (sprite->data2 == 1) - sub_80FBF40(sprite); + if (sprite->data2 == TRUE) + UpdateIconBlink(sprite); else sprite->invisible = TRUE; } -void sub_80FBF34(struct Sprite *sprite) +void SpriteCB_PlayerIconZoomedOut(struct Sprite *sprite) { - sub_80FBF40(sprite); + UpdateIconBlink(sprite); } -void sub_80FBF40(struct Sprite *sprite) +void UpdateIconBlink(struct Sprite *sprite) { - if (gUnknown_020388CC->unk7E != 0) + if (gRegionMap->blinkPlayerIcon) { + // Toggle visibility every 16 frames sprite->data7++; if (sprite->data7 > 16) { @@ -1253,48 +1319,48 @@ void sub_80FBF40(struct Sprite *sprite) void sub_80FBF94(void) { - if (gUnknown_020388CC->unk7F != 0) - gUnknown_020388CC->unk7E = 1; + if (gRegionMap->playerIsInCave) + gRegionMap->blinkPlayerIcon = TRUE; } -const u8 *sub_80FBFB4(u8 *dest, u16 b, u16 length) +const u8 *GetMapSectionName(u8 *dest, u16 mapSecId, u16 length) { - if (b == 86) + if (mapSecId == MAPSEC_SECRET_BASE) return GetSecretBaseMapName(dest); - if (b < 88) - return StringCopy(dest, gRegionMapLocations[b].name); + if (mapSecId < MAPSEC_NONE) + return StringCopy(dest, gRegionMapLocations[mapSecId].regionMapSectionId); if (length == 0) length = 18; return StringFill(dest, CHAR_SPACE, length); } -const u8 *CopyMapName(u8 *dest, u16 b) +const u8 *CopyMapName(u8 *dest, u16 mapSecId) { - switch (b) + switch (mapSecId) { - case 87: + case MAPSEC_UNK_0x57: return StringCopy(dest, gOtherText_Ferry); - case 86: + case MAPSEC_SECRET_BASE: return StringCopy(dest, gOtherText_SecretBase); default: - return sub_80FBFB4(dest, b, 0); + return GetMapSectionName(dest, mapSecId, 0); } } -const u8 *CopyLocationName(u8 *dest, u16 b) +const u8 *CopyLocationName(u8 *dest, u16 mapSecId) { - if (b == 66) + if (mapSecId == MAPSEC_EVIL_TEAM_HIDEOUT) return StringCopy(dest, gOtherText_Hideout); else - return CopyMapName(dest, b); + return CopyMapName(dest, mapSecId); } -void sub_80FC04C(u16 a, u16 *x, u16 *y, u16 *width, u16 *height) +void GetRegionMapLocationPosition(u16 mapSecId, u16 *x, u16 *y, u16 *width, u16 *height) { - *x = gRegionMapLocations[a].x; - *y = gRegionMapLocations[a].y; - *width = gRegionMapLocations[a].width; - *height = gRegionMapLocations[a].height; + *x = gRegionMapLocations[mapSecId].x; + *y = gRegionMapLocations[mapSecId].y; + *width = gRegionMapLocations[mapSecId].width; + *height = gRegionMapLocations[mapSecId].height; } struct UnknownStruct3 @@ -1302,14 +1368,14 @@ struct UnknownStruct3 void (*unk0)(void); u16 unk4; u16 unk6; - struct UnknownStruct1 unk8; + struct RegionMap regionMap; }; extern u8 ewram[]; #define ewram0 (*(struct UnknownStruct3 *)(ewram + 0)) #define ewram888 (ewram + 0x888) #define ewramA6E (ewram[0xA6E]) -#define ewramA48 (ewram + 0xA48) +#define ewramBlankMapName (ewram + 0xA48) const u16 gUnknown_083E771C[] = INCBIN_U16("graphics/pokenav/map_frame.gbapal"); const u8 gUnknown_083E773C[] = INCBIN_U8("graphics/pokenav/map_frame.4bpp.lz"); @@ -1374,15 +1440,15 @@ const u8 gUnknown_083E7920[][3] = struct UnknownStruct4 { const u8 *const *unk0; - u16 unk4; - u16 unk6; + u16 mapSecId; + u16 flag; }; -const u8 *const Unknown_3E79B8[] = {OtherText_PokeLeague, OtherText_PokeCenter}; +const u8 *const sEverGrandeCityAreaNames[] = {OtherText_PokeLeague, OtherText_PokeCenter}; const struct UnknownStruct4 gUnknown_083E79C0[1] = { - {Unknown_3E79B8, 15, 0x854}, + {sEverGrandeCityAreaNames, MAPSEC_EVER_GRANDE_CITY, 0x854}, }; // XXX: what is this? @@ -1390,13 +1456,15 @@ static u8 *const ewram_ = ewram; const struct SpritePalette gUnknown_083E79CC = {gPokenavMapMisc_Pal, 2}; -const u16 gUnknown_083E79D4[][2] = +// Fly targets that are not cities or towns +const u16 gSpecialFlyAreas[][2] = { - {0x848, 58}, - {0xFFFF, 88}, + // flag, mapSecId + {0x848, MAPSEC_BATTLE_TOWER}, + {0xFFFF, MAPSEC_NONE}, }; -const struct OamData gOamData_83E79DC = +const struct OamData gFlyTargetOamData = { .y = 0, .affineMode = 0, @@ -1413,71 +1481,71 @@ const struct OamData gOamData_83E79DC = .affineParam = 0, }; -const union AnimCmd gSpriteAnim_83E79E4[] = +const union AnimCmd gFlyTargetAnimSeq0[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; -const union AnimCmd gSpriteAnim_83E79EC[] = +const union AnimCmd gFlyTargetAnimSeq1[] = { ANIMCMD_FRAME(1, 5), ANIMCMD_END, }; -const union AnimCmd gSpriteAnim_83E79F4[] = +const union AnimCmd gFlyTargetAnimSeq2[] = { ANIMCMD_FRAME(3, 5), ANIMCMD_END, }; -const union AnimCmd gSpriteAnim_83E79FC[] = +const union AnimCmd gFlyTargetAnimSeq3[] = { ANIMCMD_FRAME(5, 5), ANIMCMD_END, }; -const union AnimCmd gSpriteAnim_83E7A04[] = +const union AnimCmd gFlyTargetAnimSeq4[] = { ANIMCMD_FRAME(6, 5), ANIMCMD_END, }; -const union AnimCmd gSpriteAnim_83E7A0C[] = +const union AnimCmd gFlyTargetAnimSeq5[] = { ANIMCMD_FRAME(8, 5), ANIMCMD_END, }; -const union AnimCmd gSpriteAnim_83E7A14[] = +const union AnimCmd gFlyTargetAnimSeq6[] = { ANIMCMD_FRAME(10, 5), ANIMCMD_END, }; -const union AnimCmd *const gSpriteAnimTable_83E7A1C[] = +const union AnimCmd *const gFlyTargetAnimTable[] = { - gSpriteAnim_83E79E4, - gSpriteAnim_83E79EC, - gSpriteAnim_83E79F4, - gSpriteAnim_83E79FC, - gSpriteAnim_83E7A04, - gSpriteAnim_83E7A0C, - gSpriteAnim_83E7A14, + gFlyTargetAnimSeq0, + gFlyTargetAnimSeq1, + gFlyTargetAnimSeq2, + gFlyTargetAnimSeq3, + gFlyTargetAnimSeq4, + gFlyTargetAnimSeq5, + gFlyTargetAnimSeq6, }; -const struct SpriteTemplate gSpriteTemplate_83E7A38 = +const struct SpriteTemplate gFlyTargetSpriteTemplate = { .tileTag = 2, .paletteTag = 2, - .oam = &gOamData_83E79DC, - .anims = gSpriteAnimTable_83E7A1C, + .oam = &gFlyTargetOamData, + .anims = gFlyTargetAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy, }; -void sub_80FC074(void) +void CB2_InitFlyRegionMap(void) { switch (gMain.state) { @@ -1505,12 +1573,12 @@ void sub_80FC074(void) MenuZeroFillScreen(); break; case 3: - sub_80FA8EC(&ewram0.unk8, 0); - sub_80FBB3C(0, 0); - sub_80FBCF0(1, 1); - ewram0.unk6 = ewram0.unk8.unk14; - StringFill(ewramA48, CHAR_SPACE, 12); - sub_80FC254(); + InitRegionMap(&ewram0.regionMap, 0); + CreateRegionMapCursorIcon(0, 0); + CreateRegionMapPlayerIcon(1, 1); + ewram0.unk6 = ewram0.regionMap.mapSecId; + StringFill(ewramBlankMapName, CHAR_SPACE, 12); + PrintFlyTargetName(); break; case 4: LZ77UnCompVram(gUnknown_083E773C, (void *)(VRAM + 0xC000)); @@ -1523,7 +1591,7 @@ void sub_80FC074(void) MenuPrint_PixelCoords(gOtherText_FlyToWhere, 1, 0x90, 1); break; case 7: - sub_80FC31C(); + CreateFlyTargetGraphics(); break; case 8: BlendPalettes(0xFFFFFFFF, 16, 0); @@ -1562,24 +1630,24 @@ void sub_80FC244(void (*func)(void)) ewram0.unk4 = 0; } -void sub_80FC254(void) +void PrintFlyTargetName(void) { - if (ewram0.unk8.unk16 == 2 || ewram0.unk8.unk16 == 4) + if (ewram0.regionMap.unk16 == 2 || ewram0.regionMap.unk16 == 4) { u16 i = 0; int zero; - for (i = 0; i < 1; i++) + for (i = 0; i < ARRAY_COUNT(gUnknown_083E79C0); i++) { const struct UnknownStruct4 *r4 = &gUnknown_083E79C0[i]; - if (ewram0.unk8.unk14 == r4->unk4) + if (ewram0.regionMap.mapSecId == r4->mapSecId) { - if (FlagGet(r4->unk6)) + if (FlagGet(r4->flag)) { MenuDrawTextWindow(16, 14, 29, 19); - MenuPrint(ewram0.unk8.filler0, 17, 15); - MenuPrint_RightAligned(r4->unk0[ewram0.unk8.unk17], 29, 17); + MenuPrint(ewram0.regionMap.mapSecName, 17, 15); + MenuPrint_RightAligned(r4->unk0[ewram0.regionMap.everGrandeCityArea], 29, 17); return; } break; @@ -1590,19 +1658,19 @@ void sub_80FC254(void) if (zero == 0) { MenuDrawTextWindow(16, 16, 29, 19); - MenuPrint(ewram0.unk8.filler0, 17, 17); + MenuPrint(ewram0.regionMap.mapSecName, 17, 17); MenuZeroFillWindowRect(16, 14, 29, 15); } } else { MenuDrawTextWindow(16, 16, 29, 19); - MenuPrint(ewramA48, 17, 17); + MenuPrint(ewramBlankMapName, 17, 17); MenuZeroFillWindowRect(16, 14, 29, 15); } } -void sub_80FC31C(void) +void CreateFlyTargetGraphics(void) { struct SpriteSheet spriteSheet; @@ -1612,13 +1680,14 @@ void sub_80FC31C(void) spriteSheet.tag = 2; LoadSpriteSheet(&spriteSheet); LoadSpritePalette(&gUnknown_083E79CC); - sub_80FC374(); - sub_80FC484(); + CreateCityTownFlyTargetIcons(); + CreateSpecialAreaFlyTargetIcons(); } -void sub_80FC374(void) +// Draws a light overlay on cities and towns that the player can fly to +void CreateCityTownFlyTargetIcons(void) { - u16 flag = 0x80F; + u16 canFlyFlag = 0x80F; u16 i; for (i = 0; i < 16; i++) @@ -1630,7 +1699,7 @@ void sub_80FC374(void) u16 r7; u8 spriteId; - sub_80FC04C(i, &x, &y, &width, &height); + GetRegionMapLocationPosition(i, &x, &y, &width, &height); x = (x + 1) * 8 + 4; y = (y + 2) * 8 + 4; if (width == 2) @@ -1639,56 +1708,60 @@ void sub_80FC374(void) r7 = 2; else r7 = 0; - spriteId = CreateSprite(&gSpriteTemplate_83E7A38, x, y, 10); + spriteId = CreateSprite(&gFlyTargetSpriteTemplate, x, y, 10); if (spriteId != 64) { gSprites[spriteId].oam.shape = r7; - if (FlagGet(flag)) - gSprites[spriteId].callback = sub_80FC55C; + if (FlagGet(canFlyFlag)) + gSprites[spriteId].callback = SpriteCB_FlyTargetIcons; else r7 += 3; StartSpriteAnim(&gSprites[spriteId], r7); gSprites[spriteId].data0 = i; } - flag++; + canFlyFlag++; } } -void sub_80FC484(void) +// Draws a red box on other fly targets +// The Battle Tower is the only one of these +void CreateSpecialAreaFlyTargetIcons(void) { u16 i; - for (i = 0; gUnknown_083E79D4[i][1] != 88; i++) + for (i = 0; gSpecialFlyAreas[i][1] != MAPSEC_NONE; i++) { u16 x; u16 y; u16 width; u16 height; - if (FlagGet(gUnknown_083E79D4[i][0])) + if (FlagGet(gSpecialFlyAreas[i][0])) { - u16 r6 = gUnknown_083E79D4[i][1]; + u16 mapSecId = gSpecialFlyAreas[i][1]; u8 spriteId; - sub_80FC04C(r6, &x, &y, &width, &height); + GetRegionMapLocationPosition(mapSecId, &x, &y, &width, &height); x = (x + 1) * 8; y = (y + 2) * 8; - spriteId = CreateSprite(&gSpriteTemplate_83E7A38, x, y, 10); + spriteId = CreateSprite(&gFlyTargetSpriteTemplate, x, y, 10); if (spriteId != 64) { gSprites[spriteId].oam.size = 1; - gSprites[spriteId].callback = sub_80FC55C; + gSprites[spriteId].callback = SpriteCB_FlyTargetIcons; StartSpriteAnim(&gSprites[spriteId], 6); - gSprites[spriteId].data0 = r6; + gSprites[spriteId].data0 = mapSecId; } } } } -void sub_80FC55C(struct Sprite *sprite) +void SpriteCB_FlyTargetIcons(struct Sprite *sprite) { - if (ewram0.unk8.unk14 == sprite->data0) + // Blink if our mapSecId is the one selected on the map + if (ewram0.regionMap.mapSecId == sprite->data0) { + // Toggle visibility every 16 frames sprite->data1++; if (sprite->data1 > 16) { @@ -1725,22 +1798,22 @@ void sub_80FC600(void) { switch (sub_80FAB60()) { - case 0: - case 1: - case 2: + case INPUT_EVENT_NONE: + case INPUT_EVENT_DPAD: + case INPUT_EVENT_2: break; - case 3: - sub_80FC254(); + case INPUT_EVENT_3: + PrintFlyTargetName(); break; - case 4: - if (ewram0.unk8.unk16 == 2 || ewram0.unk8.unk16 == 4) + case INPUT_EVENT_A_BUTTON: + if (ewram0.regionMap.unk16 == 2 || ewram0.regionMap.unk16 == 4) { m4aSongNumStart(SE_SELECT); ewramA6E = 1; sub_80FC244(sub_80FC69C); } break; - case 5: + case INPUT_EVENT_B_BUTTON: m4aSongNumStart(SE_SELECT); ewramA6E = 0; sub_80FC244(sub_80FC69C); @@ -1760,28 +1833,28 @@ void sub_80FC69C(void) case 1: if (UpdatePaletteFade() != 0) break; - sub_80FAB10(); + FreeRegionMapIconResources(); if (ewramA6E != 0) { - switch (ewram0.unk8.unk14) + switch (ewram0.regionMap.mapSecId) { - case 0x49: + case MAPSEC_SOUTHERN_ISLAND: sub_8053538(22); break; - case 0x3A: + case MAPSEC_BATTLE_TOWER: sub_8053538(21); break; - case 0: + case MAPSEC_LITTLEROOT_TOWN: sub_8053538((gSaveBlock2.playerGender == MALE) ? 12 : 13); break; - case 15: - sub_8053538((FlagGet(0x854) && ewram0.unk8.unk17 == 0) ? 20 : 11); + case MAPSEC_EVER_GRANDE_CITY: + sub_8053538((FlagGet(0x854) && ewram0.regionMap.everGrandeCityArea == 0) ? 20 : 11); break; default: - if (gUnknown_083E7920[ewram0.unk8.unk14][2] != 0) - sub_8053538(gUnknown_083E7920[ewram0.unk8.unk14][2]); + if (gUnknown_083E7920[ewram0.regionMap.mapSecId][2] != 0) + sub_8053538(gUnknown_083E7920[ewram0.regionMap.mapSecId][2]); else - warp1_set_2(gUnknown_083E7920[ewram0.unk8.unk14][0], gUnknown_083E7920[ewram0.unk8.unk14][1], -1); + warp1_set_2(gUnknown_083E7920[ewram0.regionMap.mapSecId][0], gUnknown_083E7920[ewram0.regionMap.mapSecId][1], -1); break; } sub_80865BC(); diff --git a/src/rom4.c b/src/rom4.c index bfc8e0e44..b2e30e292 100644 --- a/src/rom4.c +++ b/src/rom4.c @@ -993,12 +993,12 @@ bool8 is_light_level_8_or_9(u8 a1) u8 unref_sub_8054260(void) { - return get_mapheader_by_bank_and_number(gSaveBlock1.warp2.mapGroup, gSaveBlock1.warp2.mapNum)->name; + return get_mapheader_by_bank_and_number(gSaveBlock1.warp2.mapGroup, gSaveBlock1.warp2.mapNum)->regionMapSectionId; } u8 sav1_map_get_name(void) { - return get_mapheader_by_bank_and_number(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum)->name; + return get_mapheader_by_bank_and_number(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum)->regionMapSectionId; } u8 sav1_map_get_battletype(void) diff --git a/src/save_menu_util.c b/src/save_menu_util.c index b2dd662d6..a2d17bd36 100644 --- a/src/save_menu_util.c +++ b/src/save_menu_util.c @@ -70,7 +70,7 @@ void PrintSaveMapName(s16 x, s16 y) { char name[32]; - CopyMapName(name, gMapHeader.name); + CopyMapName(name, gMapHeader.regionMapSectionId); MenuPrint(name, x, y); } diff --git a/src/secret_base.c b/src/secret_base.c index d88d2c66a..4e8331f5c 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -205,7 +205,7 @@ void sub_80BB8CC(void) memset(gSaveBlock1.secretBases[0].sbr_field_2, 0xFF, 7); StringCopyN(gSaveBlock1.secretBases[0].sbr_field_2, gSaveBlock2.playerName, nameLength); gSaveBlock1.secretBases[0].gender = gSaveBlock2.playerGender; - VarSet(VAR_SECRET_BASE_MAP, gMapHeader.name); + VarSet(VAR_SECRET_BASE_MAP, gMapHeader.regionMapSectionId); } void sub_80BB970(struct MapEvents *events) diff --git a/src/tv.c b/src/tv.c index 27fe9b84c..529537366 100644 --- a/src/tv.c +++ b/src/tv.c @@ -479,7 +479,7 @@ void sub_80BDC14(void) gSaveBlock1.gabbyAndTyData.valB_2 = gSaveBlock1.gabbyAndTyData.valA_2; gSaveBlock1.gabbyAndTyData.valB_3 = gSaveBlock1.gabbyAndTyData.valA_3; gSaveBlock1.gabbyAndTyData.valA_4 = 1; - gSaveBlock1.gabbyAndTyData.mapnum = gMapHeader.name; + gSaveBlock1.gabbyAndTyData.mapnum = gMapHeader.regionMapSectionId; IncrementGameStat(GAME_STAT_GOT_INTERVIEWED); } @@ -664,7 +664,7 @@ void sub_80BE028(void) { buffer->worldOfMasters.var02++; buffer->worldOfMasters.var04 = gBattleResults.CaughtPoke; buffer->worldOfMasters.var08 = gBattleResults.Poke1Species; - buffer->worldOfMasters.var0a = gMapHeader.name; + buffer->worldOfMasters.var0a = gMapHeader.regionMapSectionId; } #ifdef NONMATCHING @@ -692,7 +692,7 @@ void sub_80BE074(void) { show->pokemonTodayFailed.species2 = gBattleResults.unk20; show->pokemonTodayFailed.var10 = total; show->pokemonTodayFailed.var11 = gBattleOutcome; - show->pokemonTodayFailed.var12 = gMapHeader.name; + show->pokemonTodayFailed.var12 = gMapHeader.regionMapSectionId; StringCopy(show->pokemonTodayFailed.playerName, gSaveBlock2.playerName); sub_80BE138(show); show->pokemonTodayFailed.language = GAME_LANGUAGE; @@ -905,7 +905,7 @@ void sub_80BE3BC(void) { tvShow = &gSaveBlock1.tvShows[gUnknown_03005D38.var0]; tvShow->smartshopperShow.var00 = TVSHOW_SMART_SHOPPER; tvShow->smartshopperShow.var01 = rval; - tvShow->smartshopperShow.shopLocation = gMapHeader.name; + tvShow->smartshopperShow.shopLocation = gMapHeader.regionMapSectionId; for (i=0; i<3; i++) { tvShow->smartshopperShow.itemIds[i] = gUnknown_02038724[i].item_id; tvShow->smartshopperShow.itemAmounts[i] = gUnknown_02038724[i].item_amount; @@ -3216,7 +3216,7 @@ void DoTVShowTodaysSmartShopper(void) { case 0: TVShowConvertInternationalString(gStringVar1, tvShow->smartshopperShow.playerName, tvShow->smartshopperShow.language); - sub_80FBFB4(gStringVar2, tvShow->smartshopperShow.shopLocation, 0); + GetMapSectionName(gStringVar2, tvShow->smartshopperShow.shopLocation, 0); if (tvShow->smartshopperShow.itemAmounts[0] >= 0xff) { gUnknown_020387E8 = 11; @@ -3498,7 +3498,7 @@ void DoTVShowPokemonTodayFailedCapture(void) { break; case 1: TVShowConvertInternationalString(gStringVar1, tvShow->pokemonTodayFailed.playerName, tvShow->pokemonTodayFailed.language); - sub_80FBFB4(gStringVar2, tvShow->pokemonTodayFailed.var12, 0); + GetMapSectionName(gStringVar2, tvShow->pokemonTodayFailed.var12, 0); StringCopy(gStringVar3, gSpeciesNames[tvShow->pokemonTodayFailed.species2]); if (tvShow->pokemonTodayFailed.var11 == 1) { gUnknown_020387E8 = 3; @@ -3653,7 +3653,7 @@ void DoTVShowPokemonNewsMassOutbreak(void) tvShow = &gSaveBlock1.tvShows[gSpecialVar_0x8004]; - sub_80FBFB4(gStringVar1, tvShow->massOutbreak.locationMapNum, 0); + GetMapSectionName(gStringVar1, tvShow->massOutbreak.locationMapNum, 0); StringCopy(gStringVar2, gSpeciesNames[tvShow->massOutbreak.species]); @@ -3669,7 +3669,7 @@ void DoTVShowInSearchOfTrainers(void) { switchval = gUnknown_020387E8; switch (switchval) { case 0: - sub_80FBFB4(gStringVar1, gSaveBlock1.gabbyAndTyData.mapnum, 0); + GetMapSectionName(gStringVar1, gSaveBlock1.gabbyAndTyData.mapnum, 0); if (gSaveBlock1.gabbyAndTyData.battleNum > 1) { gUnknown_020387E8 = 1; } else { @@ -3765,7 +3765,7 @@ void DoTVShowTheWorldOfMasters(void) { case 2: TVShowConvertInternationalString(gStringVar1, tvShow->worldOfMasters.playerName, tvShow->worldOfMasters.language); - sub_80FBFB4(gStringVar2, tvShow->worldOfMasters.var0a, 0); + GetMapSectionName(gStringVar2, tvShow->worldOfMasters.var0a, 0); StringCopy(gStringVar3, gSpeciesNames[tvShow->worldOfMasters.var04]); TVShowDone(); break; diff --git a/sym_ewram.txt b/sym_ewram.txt index ecb18decb..b31404984 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -808,7 +808,7 @@ gUnknown_020388C0: @ 20388C0 gUnknown_020388C4: @ 20388C4 .space 0x8 -gUnknown_020388CC: @ 20388CC +gRegionMap: @ 20388CC .space 0x4 gUnknown_020388D0: @ 20388D0 -- cgit v1.2.3 From 9000ea3277d7c030e5830f5ca5206665b1c5be25 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 16 Jul 2017 11:30:26 -0500 Subject: visual region map layout --- src/data/region_map_layout.h | 42 ++++++++++++++++++++++++++++++++++++++++++ src/region_map.c | 21 ++------------------- 2 files changed, 44 insertions(+), 19 deletions(-) create mode 100644 src/data/region_map_layout.h diff --git a/src/data/region_map_layout.h b/src/data/region_map_layout.h new file mode 100644 index 000000000..7b7c1df2a --- /dev/null +++ b/src/data/region_map_layout.h @@ -0,0 +1,42 @@ +// Abbreviated definitions to make the map layout more visual +#define R(routeNum) MAPSEC_ROUTE_##routeNum +#define LITT_T MAPSEC_LITTLEROOT_TOWN +#define OLDA_T MAPSEC_OLDALE_TOWN +#define DEWF_T MAPSEC_DEWFORD_TOWN +#define LAVA_T MAPSEC_LAVARIDGE_TOWN +#define FALL_T MAPSEC_FALLARBOR_TOWN +#define VERD_T MAPSEC_VERDANTURF_TOWN +#define PACI_T MAPSEC_PACIFIDLOG_TOWN +#define PETA_C MAPSEC_PETALBURG_CITY +#define SLAT_C MAPSEC_SLATEPORT_CITY +#define MAUV_C MAPSEC_MAUVILLE_CITY +#define RUST_T MAPSEC_RUSTBORO_CITY +#define FORT_C MAPSEC_FORTREE_CITY +#define LILY_C MAPSEC_LILYCOVE_CITY +#define MOSS_C MAPSEC_MOSSDEEP_CITY +#define SOOT_C MAPSEC_SOOTOPOLIS_CITY +#define EVER_C MAPSEC_EVER_GRANDE_CITY +#define MTCHIM MAPSEC_MT_CHIMNEY +#define SAFARI MAPSEC_SAFARI_ZONE +#define BTLTWR MAPSEC_BATTLE_TOWER +#define S_ISLD MAPSEC_SOUTHERN_ISLAND +#define ______ MAPSEC_NONE + +const u8 gRegionMapLayout[] = +{ + ______, R(114), R(114), FALL_T, R(113), R(113), R(113), R(113), R(111), ______, ______, R(119), FORT_C, R(120), ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, + ______, R(114), ______, ______, ______, ______, MTCHIM, MTCHIM, R(111), ______, ______, R(119), ______, R(120), ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, + R(115), R(114), ______, ______, ______, ______, MTCHIM, MTCHIM, R(111), ______, ______, R(119), ______, R(120), ______, ______, SAFARI, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, + R(115), ______, ______, ______, ______, LAVA_T, R(112), R(112), R(111), ______, ______, R(119), ______, R(120), R(121), R(121), R(121), R(121), LILY_C, LILY_C, R(124), R(124), R(124), R(124), R(125), R(125), ______, ______, + R(115), ______, ______, ______, ______, ______, ______, ______, R(111), ______, ______, R(119), ______, ______, ______, ______, R(122), ______, ______, ______, R(124), R(124), R(124), R(124), R(125), R(125), ______, ______, + RUST_T, R(116), R(116), R(116), R(116), ______, ______, ______, R(111), ______, ______, R(119), ______, ______, ______, ______, R(122), ______, ______, ______, R(124), R(124), R(124), R(124), MOSS_C, MOSS_C, ______, ______, + RUST_T, ______, ______, ______, VERD_T, R(117), R(117), R(117), MAUV_C, MAUV_C, R(118), R(118), R(123), R(123), R(123), R(123), R(123), ______, ______, ______, R(126), R(126), R(126), R(127), R(127), R(127), ______, ______, + R(104), ______, ______, ______, ______, ______, ______, ______, R(110), ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, R(126), SOOT_C, R(126), R(127), R(127), R(127), ______, ______, + R(104), ______, ______, ______, R(103), R(103), R(103), R(103), R(110), ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, R(126), R(126), R(126), R(127), R(127), R(127), ______, EVER_C, + R(104), PETA_C, R(102), R(102), OLDA_T, ______, ______, ______, R(110), ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, R(128), R(128), R(128), R(128), EVER_C, + R(105), ______, ______, ______, R(101), ______, ______, ______, SLAT_C, R(134), R(134), R(134), R(133), R(133), R(133), R(132), R(132), PACI_T, R(131), R(131), R(131), R(130), R(130), R(130), R(129), R(129), ______, ______, + R(105), ______, ______, ______, LITT_T, ______, ______, ______, SLAT_C, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, + R(105), ______, ______, ______, ______, ______, ______, ______, R(109), ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, BTLTWR, ______, ______, ______, ______, ______, + R(106), R(106), R(106), ______, ______, ______, ______, ______, R(109), ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, + ______, ______, DEWF_T, R(107), R(107), R(107), R(108), R(108), R(109), ______, ______, ______, S_ISLD, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, +}; diff --git a/src/region_map.c b/src/region_map.c index a0739ecef..418be8663 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -140,24 +140,7 @@ const u16 gUnknown_083E5D60[] = INCBIN_U16("graphics/pokenav/region_map.gbapal") const u8 gUnknown_083E5DA0[] = INCBIN_U8("graphics/pokenav/region_map.8bpp.lz"); const u8 gUnknown_083E6B04[] = INCBIN_U8("graphics/pokenav/region_map_map.bin.lz"); -const u8 gRegionMapSections[] = -{ - 0x58, 0x1D, 0x1D, 0x04, 0x1C, 0x1C, 0x1C, 0x1C, 0x1A, 0x58, 0x58, 0x22, 0x0B, 0x23, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, - 0x58, 0x1D, 0x58, 0x58, 0x58, 0x58, 0x38, 0x38, 0x1A, 0x58, 0x58, 0x22, 0x58, 0x23, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, - 0x1E, 0x1D, 0x58, 0x58, 0x58, 0x58, 0x38, 0x38, 0x1A, 0x58, 0x58, 0x22, 0x58, 0x23, 0x58, 0x58, 0x39, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, - 0x1E, 0x58, 0x58, 0x58, 0x58, 0x03, 0x1B, 0x1B, 0x1A, 0x58, 0x58, 0x22, 0x58, 0x23, 0x24, 0x24, 0x24, 0x24, 0x0C, 0x0C, 0x27, 0x27, 0x27, 0x27, 0x28, 0x28, 0x58, 0x58, - 0x1E, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x1A, 0x58, 0x58, 0x22, 0x58, 0x58, 0x58, 0x58, 0x25, 0x58, 0x58, 0x58, 0x27, 0x27, 0x27, 0x27, 0x28, 0x28, 0x58, 0x58, - 0x0A, 0x1F, 0x1F, 0x1F, 0x1F, 0x58, 0x58, 0x58, 0x1A, 0x58, 0x58, 0x22, 0x58, 0x58, 0x58, 0x58, 0x25, 0x58, 0x58, 0x58, 0x27, 0x27, 0x27, 0x27, 0x0D, 0x0D, 0x58, 0x58, - 0x0A, 0x58, 0x58, 0x58, 0x05, 0x20, 0x20, 0x20, 0x09, 0x09, 0x21, 0x21, 0x26, 0x26, 0x26, 0x26, 0x26, 0x58, 0x58, 0x58, 0x29, 0x29, 0x29, 0x2A, 0x2A, 0x2A, 0x58, 0x58, - 0x13, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x19, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x29, 0x0E, 0x29, 0x2A, 0x2A, 0x2A, 0x58, 0x58, - 0x13, 0x58, 0x58, 0x58, 0x12, 0x12, 0x12, 0x12, 0x19, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x29, 0x29, 0x29, 0x2A, 0x2A, 0x2A, 0x58, 0x0F, - 0x13, 0x07, 0x11, 0x11, 0x01, 0x58, 0x58, 0x58, 0x19, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x2B, 0x2B, 0x2B, 0x2B, 0x0F, - 0x14, 0x58, 0x58, 0x58, 0x10, 0x58, 0x58, 0x58, 0x08, 0x31, 0x31, 0x31, 0x30, 0x30, 0x30, 0x2F, 0x2F, 0x06, 0x2E, 0x2E, 0x2E, 0x2D, 0x2D, 0x2D, 0x2C, 0x2C, 0x58, 0x58, - 0x14, 0x58, 0x58, 0x58, 0x00, 0x58, 0x58, 0x58, 0x08, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, - 0x14, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x18, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x3A, 0x58, 0x58, 0x58, 0x58, 0x58, - 0x15, 0x15, 0x15, 0x58, 0x58, 0x58, 0x58, 0x58, 0x18, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, - 0x58, 0x58, 0x02, 0x16, 0x16, 0x16, 0x17, 0x17, 0x18, 0x58, 0x58, 0x58, 0x49, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, -}; +#include "data/region_map_layout.h" #if ENGLISH #include "data/region_map_names_en.h" @@ -711,7 +694,7 @@ u16 GetRegionMapSectionAt(u16 x, u16 y) return MAPSEC_NONE; y -= MAPCURSOR_Y_MIN; x -= MAPCURSOR_X_MIN; - return gRegionMapSections[x + y * 28]; + return gRegionMapLayout[x + y * 28]; } void InitializeCursorPosition(void) -- cgit v1.2.3 From d4bd4c393e59bb66a8d4f69f23dce694982723e1 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 16 Jul 2017 12:41:13 -0500 Subject: more labeling and use static --- asm/pokenav.s | 2 +- graphics/pokenav/fly_target_icons.pal | 19 ++ graphics/pokenav/fly_target_icons.png | Bin 0 -> 291 bytes graphics/pokenav/map_misc.pal | 19 -- graphics/pokenav/map_misc.png | Bin 291 -> 0 bytes include/flags.h | 2 + include/region_map.h | 23 ++- src/data/region_map_layout.h | 8 +- src/field_region_map.c | 2 +- src/region_map.c | 374 +++++++++++++++++----------------- 10 files changed, 227 insertions(+), 222 deletions(-) create mode 100644 graphics/pokenav/fly_target_icons.pal create mode 100644 graphics/pokenav/fly_target_icons.png delete mode 100644 graphics/pokenav/map_misc.pal delete mode 100644 graphics/pokenav/map_misc.png diff --git a/asm/pokenav.s b/asm/pokenav.s index e12e9801c..cb6a40450 100644 --- a/asm/pokenav.s +++ b/asm/pokenav.s @@ -14321,7 +14321,7 @@ sub_80F2DD8: @ 80F2DD8 push {lr} movs r0, 0x7 movs r1, 0x7 - bl CreateRegionMapCursorIcon + bl CreateRegionMapCursor movs r0, 0x8 movs r1, 0x8 bl CreateRegionMapPlayerIcon diff --git a/graphics/pokenav/fly_target_icons.pal b/graphics/pokenav/fly_target_icons.pal new file mode 100644 index 000000000..c0f2cc4e9 --- /dev/null +++ b/graphics/pokenav/fly_target_icons.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 0 0 +0 0 0 +0 0 0 +205 205 205 +0 0 0 +0 0 0 +255 213 222 +255 164 197 +197 98 115 +131 131 123 +98 90 90 +49 49 65 +0 0 0 +0 0 0 +255 255 255 diff --git a/graphics/pokenav/fly_target_icons.png b/graphics/pokenav/fly_target_icons.png new file mode 100644 index 000000000..7a997afc5 Binary files /dev/null and b/graphics/pokenav/fly_target_icons.png differ diff --git a/graphics/pokenav/map_misc.pal b/graphics/pokenav/map_misc.pal deleted file mode 100644 index c0f2cc4e9..000000000 --- a/graphics/pokenav/map_misc.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -0 0 0 -255 0 0 -0 0 0 -0 0 0 -205 205 205 -0 0 0 -0 0 0 -255 213 222 -255 164 197 -197 98 115 -131 131 123 -98 90 90 -49 49 65 -0 0 0 -0 0 0 -255 255 255 diff --git a/graphics/pokenav/map_misc.png b/graphics/pokenav/map_misc.png deleted file mode 100644 index 7a997afc5..000000000 Binary files a/graphics/pokenav/map_misc.png and /dev/null differ diff --git a/include/flags.h b/include/flags.h index e8c23b538..8ed15cb99 100644 --- a/include/flags.h +++ b/include/flags.h @@ -72,6 +72,8 @@ #define SYS_BRAILLE_WAIT 0x851 #define SYS_BRAILLE_FLY 0x852 +#define SYS_POKEMON_LEAGUE_FLY 0x854 + #define SYS_TV_LATI 0x85D #define SYS_SHOAL_ITEM 0x85F diff --git a/include/region_map.h b/include/region_map.h index 88e0ee21f..3d970fa0a 100755 --- a/include/region_map.h +++ b/include/region_map.h @@ -8,7 +8,7 @@ struct RegionMap u8 unk16; u8 everGrandeCityArea; u8 (*inputCallback)(void); - struct Sprite *cursorIconSprite; + struct Sprite *cursorSprite; struct Sprite *playerIconSprite; s32 bg2x; s32 bg2y; @@ -24,8 +24,8 @@ struct RegionMap s32 unk50; u16 cursorPosX; u16 cursorPosY; - u16 cursorIconTileTag; - u16 cursorIconPaletteTag; + u16 cursorTileTag; + u16 cursorPaletteTag; s16 scrollX; s16 scrollY; s16 unk60; @@ -48,15 +48,22 @@ struct RegionMap bool8 needUpdateVideoRegs; bool8 blinkPlayerIcon; bool8 playerIsInCave; - u8 filler80[0x100]; - u8 unk180[0x100]; - u8 unk280[0x600]; + /*0x080*/ u8 filler80[0x100]; + /*0x180*/ u8 cursorSmallImage[0x100]; + /*0x280*/ u8 cursorLargeImage[0x600]; }; -void InitRegionMap(struct RegionMap *regionMap, bool8 b); +void InitRegionMap(struct RegionMap *regionMap, bool8 zoomed); +void sub_80FA904(struct RegionMap *regionMap, bool8 zoomed); +bool8 sub_80FA940(void); void FreeRegionMapIconResources(void); u8 sub_80FAB60(void); -void CreateRegionMapCursorIcon(u16, u16); +void sub_80FAEC4(void); +u8 sub_80FAFC0(void); +void UpdateRegionMapVideoRegs(void); +void sub_80FB2A4(s16, s16); +u16 sub_80FBA04(u16 mapSecId); +void CreateRegionMapCursor(u16, u16); void CreateRegionMapPlayerIcon(u16, u16); const u8 *GetMapSectionName(u8 *dest, u16 mapSecId, u16 length); const u8 *CopyMapName(u8 *dest, u16 b); diff --git a/src/data/region_map_layout.h b/src/data/region_map_layout.h index 7b7c1df2a..ca33ef37a 100644 --- a/src/data/region_map_layout.h +++ b/src/data/region_map_layout.h @@ -10,7 +10,7 @@ #define PETA_C MAPSEC_PETALBURG_CITY #define SLAT_C MAPSEC_SLATEPORT_CITY #define MAUV_C MAPSEC_MAUVILLE_CITY -#define RUST_T MAPSEC_RUSTBORO_CITY +#define RUST_C MAPSEC_RUSTBORO_CITY #define FORT_C MAPSEC_FORTREE_CITY #define LILY_C MAPSEC_LILYCOVE_CITY #define MOSS_C MAPSEC_MOSSDEEP_CITY @@ -22,15 +22,15 @@ #define S_ISLD MAPSEC_SOUTHERN_ISLAND #define ______ MAPSEC_NONE -const u8 gRegionMapLayout[] = +static const u8 sRegionMapLayout[] = { ______, R(114), R(114), FALL_T, R(113), R(113), R(113), R(113), R(111), ______, ______, R(119), FORT_C, R(120), ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, R(114), ______, ______, ______, ______, MTCHIM, MTCHIM, R(111), ______, ______, R(119), ______, R(120), ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, R(115), R(114), ______, ______, ______, ______, MTCHIM, MTCHIM, R(111), ______, ______, R(119), ______, R(120), ______, ______, SAFARI, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, R(115), ______, ______, ______, ______, LAVA_T, R(112), R(112), R(111), ______, ______, R(119), ______, R(120), R(121), R(121), R(121), R(121), LILY_C, LILY_C, R(124), R(124), R(124), R(124), R(125), R(125), ______, ______, R(115), ______, ______, ______, ______, ______, ______, ______, R(111), ______, ______, R(119), ______, ______, ______, ______, R(122), ______, ______, ______, R(124), R(124), R(124), R(124), R(125), R(125), ______, ______, - RUST_T, R(116), R(116), R(116), R(116), ______, ______, ______, R(111), ______, ______, R(119), ______, ______, ______, ______, R(122), ______, ______, ______, R(124), R(124), R(124), R(124), MOSS_C, MOSS_C, ______, ______, - RUST_T, ______, ______, ______, VERD_T, R(117), R(117), R(117), MAUV_C, MAUV_C, R(118), R(118), R(123), R(123), R(123), R(123), R(123), ______, ______, ______, R(126), R(126), R(126), R(127), R(127), R(127), ______, ______, + RUST_C, R(116), R(116), R(116), R(116), ______, ______, ______, R(111), ______, ______, R(119), ______, ______, ______, ______, R(122), ______, ______, ______, R(124), R(124), R(124), R(124), MOSS_C, MOSS_C, ______, ______, + RUST_C, ______, ______, ______, VERD_T, R(117), R(117), R(117), MAUV_C, MAUV_C, R(118), R(118), R(123), R(123), R(123), R(123), R(123), ______, ______, ______, R(126), R(126), R(126), R(127), R(127), R(127), ______, ______, R(104), ______, ______, ______, ______, ______, ______, ______, R(110), ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, R(126), SOOT_C, R(126), R(127), R(127), R(127), ______, ______, R(104), ______, ______, ______, R(103), R(103), R(103), R(103), R(110), ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, R(126), R(126), R(126), R(127), R(127), R(127), ______, EVER_C, R(104), PETA_C, R(102), R(102), OLDA_T, ______, ______, ______, R(110), ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, R(128), R(128), R(128), R(128), EVER_C, diff --git a/src/field_region_map.c b/src/field_region_map.c index 2b324ca1e..7cb22e5df 100644 --- a/src/field_region_map.c +++ b/src/field_region_map.c @@ -51,7 +51,7 @@ void CB2_FieldInitRegionMap(void) // TODO: remove this cast InitRegionMap((void *)&unk_2000000.unk8, 0); CreateRegionMapPlayerIcon(0, 0); - CreateRegionMapCursorIcon(1, 1); + CreateRegionMapCursor(1, 1); SetUpWindowConfig(&gWindowConfig_81E709C); InitMenuWindow(&gWindowConfig_81E709C); MenuZeroFillScreen(); diff --git a/src/region_map.c b/src/region_map.c index 418be8663..097417357 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -18,6 +18,7 @@ #include "text.h" #include "trig.h" +// Map Section IDs #define MAPSEC_LITTLEROOT_TOWN 0 #define MAPSEC_OLDALE_TOWN 1 #define MAPSEC_DEWFORD_TOWN 2 @@ -110,11 +111,10 @@ #define MAP_WIDTH 28 #define MAP_HEIGHT 15 - #define MAPCURSOR_X_MIN 1 #define MAPCURSOR_Y_MIN 2 -#define MAPCURSOR_X_MAX 28 -#define MAPCURSOR_Y_MAX 16 +#define MAPCURSOR_X_MAX (MAPCURSOR_X_MIN + MAP_WIDTH - 1) +#define MAPCURSOR_Y_MAX (MAPCURSOR_Y_MIN + MAP_HEIGHT - 1) // Input events enum @@ -129,16 +129,16 @@ enum extern struct RegionMap *gRegionMap; -const u16 gPokenavCursor_Pal[] = INCBIN_U16("graphics/pokenav/cursor.gbapal"); -const u8 gUnknown_083E5AF0[] = INCBIN_U8("graphics/pokenav/cursor_small.4bpp.lz"); -const u8 gUnknown_083E5B34[] = INCBIN_U8("graphics/pokenav/cursor_large.4bpp.lz"); -const u16 gRegionMapBrendanIconPalette[] = INCBIN_U16("graphics/pokenav/brendan_icon.gbapal"); -const u8 gRegionMapBrendanIconTiles[] = INCBIN_U8("graphics/pokenav/brendan_icon.4bpp"); -const u16 gRegionMapMayIconPalette[] = INCBIN_U16("graphics/pokenav/may_icon.gbapal"); -const u8 gRegionMapMayIconTiles[] = INCBIN_U8("graphics/pokenav/may_icon.4bpp"); -const u16 gUnknown_083E5D60[] = INCBIN_U16("graphics/pokenav/region_map.gbapal"); -const u8 gUnknown_083E5DA0[] = INCBIN_U8("graphics/pokenav/region_map.8bpp.lz"); -const u8 gUnknown_083E6B04[] = INCBIN_U8("graphics/pokenav/region_map_map.bin.lz"); +static const u16 sRegionMapCursor_Pal[] = INCBIN_U16("graphics/pokenav/cursor.gbapal"); +static const u8 sRegionMapCursorSmall_ImageLZ[] = INCBIN_U8("graphics/pokenav/cursor_small.4bpp.lz"); +static const u8 sRegionMapCursorLarge_ImageLZ[] = INCBIN_U8("graphics/pokenav/cursor_large.4bpp.lz"); +static const u16 sRegionMapBrendanIcon_Pal[] = INCBIN_U16("graphics/pokenav/brendan_icon.gbapal"); +static const u8 sRegionMapBrendanIcon_Image[] = INCBIN_U8("graphics/pokenav/brendan_icon.4bpp"); +static const u16 sRegionMapMayIcon_Pal[] = INCBIN_U16("graphics/pokenav/may_icon.gbapal"); +static const u8 sRegionMapMayIcon_Image[] = INCBIN_U8("graphics/pokenav/may_icon.4bpp"); +static const u16 sRegionMapBkgnd_Pal[] = INCBIN_U16("graphics/pokenav/region_map.gbapal"); +static const u8 sRegionMapBkgnd_ImageLZ[] = INCBIN_U8("graphics/pokenav/region_map.8bpp.lz"); +static const u8 sRegionMapBkgnd_TilemapLZ[] = INCBIN_U8("graphics/pokenav/region_map_map.bin.lz"); #include "data/region_map_layout.h" @@ -247,7 +247,7 @@ const struct RegionMapLocation gRegionMapLocations[] = { 0, 0, 1, 1, gMapName_None}, }; -const u16 gUnknown_083E7684[][2] = +static const u16 gUnknown_083E7684[][2] = { {MAPSEC_UNDERWATER1, MAPSEC_ROUTE_124}, {MAPSEC_UNDERWATER2, MAPSEC_ROUTE_126}, @@ -264,41 +264,39 @@ const u16 gUnknown_083E7684[][2] = {MAPSEC_NONE, MAPSEC_NONE}, }; -void sub_80FA904(struct RegionMap *, u8); -bool8 sub_80FA940(void); -u8 sub_80FAB78(void); -u8 _swiopen(void); -u8 sub_80FAD04(void); -u8 sub_80FADE4(void); -void CalcZoomScrollParams(s16, s16, s16, s16, u16, u16, u8); -void sub_80FB238(s16, s16); +static u8 sub_80FAB78(void); +static u8 _swiopen(void); +static u8 sub_80FAD04(void); +static u8 sub_80FADE4(void); +static void CalcZoomScrollParams(s16, s16, s16, s16, u16, u16, u8); +static void sub_80FB238(s16, s16); void UpdateRegionMapVideoRegs(void); -u16 GetRegionMapSectionAt(u16, u16); -void InitializeCursorPosition(void); -void sub_80FB600(void); -u16 sub_80FB758(u16); -u16 sub_80FB9C0(u16); -void sub_80FBA18(void); -bool8 sub_80FBAA0(u16); -void CreateRegionMapCursorIcon(u16, u16); -void sub_80FBCA0(void); -void sub_80FBDF8(void); -void sub_80FBE24(void); -void SpriteCB_PlayerIconZoomedOut(struct Sprite *); -void UpdateIconBlink(struct Sprite *); -void SpriteCB_PlayerIconZoomedIn(struct Sprite *); +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 void sub_80FBA18(void); +static bool8 sub_80FBAA0(u16); +void CreateRegionMapCursor(u16, u16); +static void sub_80FBCA0(void); +static void sub_80FBDF8(void); +static void sub_80FBE24(void); +static void SpriteCB_PlayerIconZoomedOut(struct Sprite *); +static void UpdateIconBlink(struct Sprite *); +static void SpriteCB_PlayerIconZoomedIn(struct Sprite *); const u8 *GetMapSectionName(u8 *, u16, u16); -void sub_80FC214(void); -void sub_80FC228(void); -void sub_80FC244(void (*func)(void)); -void PrintFlyTargetName(void); -void CreateFlyTargetGraphics(void); -void CreateCityTownFlyTargetIcons(void); -void CreateSpecialAreaFlyTargetIcons(void); -void SpriteCB_FlyTargetIcons(struct Sprite *); -void sub_80FC5B4(void); -void sub_80FC600(void); -void sub_80FC69C(void); +static void VBlankCB_FlyRegionMap(void); +static void CB2_FlyRegionMap(void); +static void sub_80FC244(void (*func)(void)); +static void PrintFlyTargetName(void); +static void CreateFlyTargetGraphics(void); +static void CreateCityTownFlyTargetIcons(void); +static void CreateSpecialAreaFlyTargetIcons(void); +static void SpriteCB_FlyTargetIcons(struct Sprite *); +static void sub_80FC5B4(void); +static void sub_80FC600(void); +static void sub_80FC69C(void); void InitRegionMap(struct RegionMap *regionMap, bool8 zoomed) { @@ -320,19 +318,19 @@ bool8 sub_80FA940(void) switch (gRegionMap->initStep) { case 0: - LZ77UnCompVram(gUnknown_083E5DA0, (void *)(VRAM + 0x8000)); + LZ77UnCompVram(sRegionMapBkgnd_ImageLZ, (void *)(VRAM + 0x8000)); break; case 1: - LZ77UnCompVram(gUnknown_083E6B04, (void *)(VRAM + 0xE000)); + LZ77UnCompVram(sRegionMapBkgnd_TilemapLZ, (void *)(VRAM + 0xE000)); break; case 2: - LoadPalette(gUnknown_083E5D60, 0x70, 0x60); // Why isn't this the right size? + LoadPalette(sRegionMapBkgnd_Pal, 0x70, 0x60); // Why isn't this the right size? break; case 3: - LZ77UnCompWram(gUnknown_083E5AF0, gRegionMap->unk180); + LZ77UnCompWram(sRegionMapCursorSmall_ImageLZ, gRegionMap->cursorSmallImage); break; case 4: - LZ77UnCompWram(gUnknown_083E5B34, gRegionMap->unk280); + LZ77UnCompWram(sRegionMapCursorLarge_ImageLZ, gRegionMap->cursorLargeImage); break; case 5: InitializeCursorPosition(); @@ -359,7 +357,7 @@ bool8 sub_80FA940(void) case 7: sub_80FBA18(); UpdateRegionMapVideoRegs(); - gRegionMap->cursorIconSprite = NULL; + gRegionMap->cursorSprite = NULL; gRegionMap->playerIconSprite = NULL; gRegionMap->unk7A = 0; gRegionMap->blinkPlayerIcon = FALSE; @@ -374,11 +372,11 @@ bool8 sub_80FA940(void) void FreeRegionMapIconResources(void) { - if (gRegionMap->cursorIconSprite != NULL) + if (gRegionMap->cursorSprite != NULL) { - DestroySprite(gRegionMap->cursorIconSprite); - FreeSpriteTilesByTag(gRegionMap->cursorIconTileTag); - FreeSpritePaletteByTag(gRegionMap->cursorIconPaletteTag); + DestroySprite(gRegionMap->cursorSprite); + FreeSpriteTilesByTag(gRegionMap->cursorTileTag); + FreeSpritePaletteByTag(gRegionMap->cursorPaletteTag); } if (gRegionMap->playerIconSprite != NULL) { @@ -393,7 +391,7 @@ u8 sub_80FAB60(void) return gRegionMap->inputCallback(); } -u8 sub_80FAB78(void) +static u8 sub_80FAB78(void) { u8 event = INPUT_EVENT_NONE; @@ -433,7 +431,7 @@ u8 sub_80FAB78(void) return event; } -u8 _swiopen(void) +static u8 _swiopen(void) { u16 mapSecId; @@ -464,7 +462,7 @@ u8 _swiopen(void) return INPUT_EVENT_3; } -u8 sub_80FAD04(void) +static u8 sub_80FAD04(void) { u8 event = INPUT_EVENT_NONE; @@ -504,7 +502,7 @@ u8 sub_80FAD04(void) return event; } -u8 sub_80FADE4(void) +static u8 sub_80FADE4(void) { gRegionMap->scrollY += gRegionMap->unk68; gRegionMap->scrollX += gRegionMap->unk6A; @@ -588,7 +586,7 @@ u8 sub_80FAFC0(void) gRegionMap->unk4C = (gRegionMap->zoomed == FALSE) ? (128 << 8) : (256 << 8); gRegionMap->zoomed = !gRegionMap->zoomed; gRegionMap->inputCallback = (gRegionMap->zoomed == FALSE) ? sub_80FAB78 : sub_80FAD04; - CreateRegionMapCursorIcon(gRegionMap->cursorIconTileTag, gRegionMap->cursorIconPaletteTag); + CreateRegionMapCursor(gRegionMap->cursorTileTag, gRegionMap->cursorPaletteTag); sub_80FBE24(); r4 = 0; } @@ -633,7 +631,7 @@ u8 sub_80FAFC0(void) return r4; } -void CalcZoomScrollParams(s16 a, s16 b, s16 c, s16 d, u16 e, u16 f, u8 rotation) +static void CalcZoomScrollParams(s16 a, s16 b, s16 c, s16 d, u16 e, u16 f, u8 rotation) { s32 var1; s32 var2; @@ -656,7 +654,7 @@ void CalcZoomScrollParams(s16 a, s16 b, s16 c, s16 d, u16 e, u16 f, u8 rotation) gRegionMap->needUpdateVideoRegs = TRUE; } -void sub_80FB238(s16 x, s16 y) +static void sub_80FB238(s16 x, s16 y) { gRegionMap->bg2x = (0x1C << 8) + (x << 8); gRegionMap->bg2y = (0x24 << 8) + (y << 8); @@ -688,16 +686,16 @@ void sub_80FB2A4(s16 a, s16 b) } } -u16 GetRegionMapSectionAt(u16 x, u16 y) +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; y -= MAPCURSOR_Y_MIN; x -= MAPCURSOR_X_MIN; - return gRegionMapLayout[x + y * 28]; + return sRegionMapLayout[x + y * 28]; } -void InitializeCursorPosition(void) +static void InitializeCursorPosition(void) { struct MapHeader *mapHeader; u16 mapWidth; @@ -826,7 +824,7 @@ void InitializeCursorPosition(void) gRegionMap->cursorPosY = gRegionMapLocations[gRegionMap->mapSecId].y + y + MAPCURSOR_Y_MIN; } -void sub_80FB600(void) +static void sub_80FB600(void) { u16 y = 0; u16 x = 0; @@ -877,7 +875,7 @@ void sub_80FB600(void) gRegionMap->cursorPosY = gRegionMapLocations[gRegionMap->mapSecId].y + y + MAPCURSOR_Y_MIN; } -u16 sub_80FB758(u16 mapSecId) +static u16 sub_80FB758(u16 mapSecId) { switch (mapSecId) { @@ -930,7 +928,7 @@ u16 GetRegionMapSectionAt_(u16 x, u16 y) return GetRegionMapSectionAt(x, y); } -u16 sub_80FB9C0(u16 mapSecId) +static u16 sub_80FB9C0(u16 mapSecId) { u16 i; @@ -947,7 +945,7 @@ u16 sub_80FBA04(u16 mapSecId) return sub_80FB9C0(mapSecId); } -void sub_80FBA18(void) +static void sub_80FBA18(void) { u16 x; u16 y; @@ -996,7 +994,7 @@ void sub_80FBA18(void) gRegionMap->everGrandeCityArea = i; } -bool8 sub_80FBAA0(u16 a) +static bool8 sub_80FBAA0(u16 a) { u16 x; u16 y; @@ -1013,9 +1011,7 @@ bool8 sub_80FBAA0(u16 a) return FALSE; } - - -const struct OamData gCursorIconOamData = +static const struct OamData sCursorOamData = { .y = 0, .affineMode = 0, @@ -1032,14 +1028,14 @@ const struct OamData gCursorIconOamData = .affineParam = 0, }; -const union AnimCmd gSpriteAnim_83E76C0[] = +static const union AnimCmd sCursorAnimSeq0[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(4, 20), ANIMCMD_JUMP(0), }; -const union AnimCmd gSpriteAnim_83E76CC[] = +static const union AnimCmd sCursorAnimSeq1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(16, 10), @@ -1048,13 +1044,13 @@ const union AnimCmd gSpriteAnim_83E76CC[] = ANIMCMD_JUMP(0), }; -const union AnimCmd *const gCursorIconAnimTable[] = +static const union AnimCmd *const sCursorAnimTable[] = { - gSpriteAnim_83E76C0, - gSpriteAnim_83E76CC, + sCursorAnimSeq0, + sCursorAnimSeq1, }; -void SpriteCB_CursorIcon(struct Sprite *sprite) +static void SpriteCB_Cursor(struct Sprite *sprite) { if (gRegionMap->unk7A != 0) { @@ -1064,44 +1060,44 @@ void SpriteCB_CursorIcon(struct Sprite *sprite) } } -void nullsub_66(struct Sprite *sprite) +static void nullsub_66(struct Sprite *sprite) { } -void CreateRegionMapCursorIcon(u16 tileTag, u16 paletteTag) +void CreateRegionMapCursor(u16 tileTag, u16 paletteTag) { u8 spriteId; struct SpriteSheet spriteSheet; struct SpritePalette spritePalette = { - .data = gPokenavCursor_Pal, + .data = sRegionMapCursor_Pal, }; struct SpriteTemplate spriteTemplate = { - .oam = &gCursorIconOamData, - .anims = gCursorIconAnimTable, + .oam = &sCursorOamData, + .anims = sCursorAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_CursorIcon, + .callback = SpriteCB_Cursor, }; spriteSheet.tag = tileTag; spriteTemplate.tileTag = tileTag; - gRegionMap->cursorIconTileTag = tileTag; + gRegionMap->cursorTileTag = tileTag; spritePalette.tag = paletteTag; spriteTemplate.paletteTag = paletteTag; - gRegionMap->cursorIconPaletteTag = paletteTag; + gRegionMap->cursorPaletteTag = paletteTag; if (gRegionMap->zoomed == FALSE) { - spriteSheet.data = gRegionMap->unk180; + spriteSheet.data = gRegionMap->cursorSmallImage; spriteSheet.size = 0x100; - spriteTemplate.callback = SpriteCB_CursorIcon; + spriteTemplate.callback = SpriteCB_Cursor; } else { - spriteSheet.data = gRegionMap->unk280; + spriteSheet.data = gRegionMap->cursorLargeImage; spriteSheet.size = 0x600; spriteTemplate.callback = nullsub_66; } @@ -1110,47 +1106,47 @@ void CreateRegionMapCursorIcon(u16 tileTag, u16 paletteTag) spriteId = CreateSprite(&spriteTemplate, 0x38, 0x48, 0); if (spriteId != 64) { - gRegionMap->cursorIconSprite = &gSprites[spriteId]; + gRegionMap->cursorSprite = &gSprites[spriteId]; if (gRegionMap->zoomed == TRUE) { - gRegionMap->cursorIconSprite->oam.size = 2; - gRegionMap->cursorIconSprite->pos1.x -= 8; - gRegionMap->cursorIconSprite->pos1.y -= 8; - StartSpriteAnim(gRegionMap->cursorIconSprite, 1); + gRegionMap->cursorSprite->oam.size = 2; + gRegionMap->cursorSprite->pos1.x -= 8; + gRegionMap->cursorSprite->pos1.y -= 8; + StartSpriteAnim(gRegionMap->cursorSprite, 1); } else { - gRegionMap->cursorIconSprite->oam.size = 1; - gRegionMap->cursorIconSprite->pos1.x = gRegionMap->cursorPosX * 8 + 4; - gRegionMap->cursorIconSprite->pos1.y = gRegionMap->cursorPosY * 8 + 4; + gRegionMap->cursorSprite->oam.size = 1; + gRegionMap->cursorSprite->pos1.x = gRegionMap->cursorPosX * 8 + 4; + gRegionMap->cursorSprite->pos1.y = gRegionMap->cursorPosY * 8 + 4; } - gRegionMap->cursorIconSprite->data1 = 2; - gRegionMap->cursorIconSprite->data2 = IndexOfSpritePaletteTag(paletteTag) * 16 + 0x0101; - gRegionMap->cursorIconSprite->data3 = 1; + gRegionMap->cursorSprite->data1 = 2; + gRegionMap->cursorSprite->data2 = IndexOfSpritePaletteTag(paletteTag) * 16 + 0x0101; + gRegionMap->cursorSprite->data3 = 1; } } -void sub_80FBCA0(void) +static void sub_80FBCA0(void) { - if (gRegionMap->cursorIconSprite != NULL) + if (gRegionMap->cursorSprite != NULL) { - DestroySprite(gRegionMap->cursorIconSprite); - FreeSpriteTilesByTag(gRegionMap->cursorIconTileTag); - FreeSpritePaletteByTag(gRegionMap->cursorIconPaletteTag); + DestroySprite(gRegionMap->cursorSprite); + FreeSpriteTilesByTag(gRegionMap->cursorTileTag); + FreeSpritePaletteByTag(gRegionMap->cursorPaletteTag); } } void unref_sub_80FBCD0(void) { - gRegionMap->cursorIconSprite->data3 = 1; + gRegionMap->cursorSprite->data3 = 1; } void unref_sub_80FBCE0(void) { - gRegionMap->cursorIconSprite->data3 = 0; + gRegionMap->cursorSprite->data3 = 0; } -const struct OamData gOamData_083E7708 = +static const struct OamData sPlayerIconOamData = { .y = 0, .affineMode = 0, @@ -1167,37 +1163,37 @@ const struct OamData gOamData_083E7708 = .affineParam = 0, }; -const union AnimCmd gSpriteAnim_83E7710[] = +static const union AnimCmd sPlayerIconAnimSeq0[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; -const union AnimCmd *const gSpriteAnimTable_083E7718[] = +static const union AnimCmd *const sPlayerIconAnimTable[] = { - gSpriteAnim_83E7710, + sPlayerIconAnimSeq0, }; void CreateRegionMapPlayerIcon(u16 tileTag, u16 paletteTag) { u8 spriteId; - struct SpriteSheet spriteSheet = + struct SpriteSheet playerIconSpriteSheet = { - .data = gRegionMapBrendanIconTiles, + .data = sRegionMapBrendanIcon_Image, .size = 128, .tag = tileTag, }; - struct SpritePalette spritePalette = + struct SpritePalette playerIconSpritePalette = { - .data = gRegionMapBrendanIconPalette, + .data = sRegionMapBrendanIcon_Pal, .tag = paletteTag, }; - struct SpriteTemplate spriteTemplate = + struct SpriteTemplate playerIconSpriteTemplate = { .tileTag = tileTag, .paletteTag = paletteTag, - .oam = &gOamData_083E7708, - .anims = gSpriteAnimTable_083E7718, + .oam = &sPlayerIconOamData, + .anims = sPlayerIconAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy, @@ -1205,12 +1201,12 @@ void CreateRegionMapPlayerIcon(u16 tileTag, u16 paletteTag) if (gSaveBlock2.playerGender == FEMALE) { - spriteSheet.data = gRegionMapMayIconTiles; - spritePalette.data = gRegionMapMayIconPalette; + playerIconSpriteSheet.data = sRegionMapMayIcon_Image; + playerIconSpritePalette.data = sRegionMapMayIcon_Pal; } - LoadSpriteSheet(&spriteSheet); - LoadSpritePalette(&spritePalette); - spriteId = CreateSprite(&spriteTemplate, 0, 0, 1); + LoadSpriteSheet(&playerIconSpriteSheet); + LoadSpritePalette(&playerIconSpritePalette); + spriteId = CreateSprite(&playerIconSpriteTemplate, 0, 0, 1); gRegionMap->playerIconSprite = &gSprites[spriteId]; if (gRegionMap->zoomed == FALSE) { @@ -1226,7 +1222,7 @@ void CreateRegionMapPlayerIcon(u16 tileTag, u16 paletteTag) } } -void sub_80FBDF8(void) +static void sub_80FBDF8(void) { if (gRegionMap->playerIconSprite != NULL) { @@ -1235,7 +1231,7 @@ void sub_80FBDF8(void) } } -void sub_80FBE24(void) +static void sub_80FBE24(void) { if (gRegionMap->playerIconSprite != NULL) { @@ -1258,7 +1254,7 @@ void sub_80FBE24(void) } } -void SpriteCB_PlayerIconZoomedIn(struct Sprite *sprite) +static void SpriteCB_PlayerIconZoomedIn(struct Sprite *sprite) { sprite->pos2.x = -(gRegionMap->scrollX * 2); sprite->pos2.y = -(gRegionMap->scrollY * 2); @@ -1277,12 +1273,12 @@ void SpriteCB_PlayerIconZoomedIn(struct Sprite *sprite) sprite->invisible = TRUE; } -void SpriteCB_PlayerIconZoomedOut(struct Sprite *sprite) +static void SpriteCB_PlayerIconZoomedOut(struct Sprite *sprite) { UpdateIconBlink(sprite); } -void UpdateIconBlink(struct Sprite *sprite) +static void UpdateIconBlink(struct Sprite *sprite) { if (gRegionMap->blinkPlayerIcon) { @@ -1338,7 +1334,7 @@ const u8 *CopyLocationName(u8 *dest, u16 mapSecId) return CopyMapName(dest, mapSecId); } -void GetRegionMapLocationPosition(u16 mapSecId, u16 *x, u16 *y, u16 *width, u16 *height) +static void GetRegionMapLocationPosition(u16 mapSecId, u16 *x, u16 *y, u16 *width, u16 *height) { *x = gRegionMapLocations[mapSecId].x; *y = gRegionMapLocations[mapSecId].y; @@ -1360,13 +1356,13 @@ extern u8 ewram[]; #define ewramA6E (ewram[0xA6E]) #define ewramBlankMapName (ewram + 0xA48) -const u16 gUnknown_083E771C[] = INCBIN_U16("graphics/pokenav/map_frame.gbapal"); -const u8 gUnknown_083E773C[] = INCBIN_U8("graphics/pokenav/map_frame.4bpp.lz"); -const u8 gUnknown_083E7774[] = INCBIN_U8("graphics/pokenav/map_frame.bin.lz"); -const u16 gPokenavMapMisc_Pal[] = INCBIN_U16("graphics/pokenav/map_misc.gbapal"); -const u8 gUnknown_083E784C[] = INCBIN_U8("graphics/pokenav/map_misc.4bpp.lz"); +static const u16 sFlyRegionMapFrame_Pal[] = INCBIN_U16("graphics/pokenav/map_frame.gbapal"); +static const u8 sFlyRegionMapFrame_ImageLZ[] = INCBIN_U8("graphics/pokenav/map_frame.4bpp.lz"); +static const u8 sFlyRegionMapFrame_TilemapLZ[] = INCBIN_U8("graphics/pokenav/map_frame.bin.lz"); +static const u16 sFlyTargetIcons_Pal[] = INCBIN_U16("graphics/pokenav/fly_target_icons.gbapal"); +static const u8 sFlyTargetIcons_ImageLZ[] = INCBIN_U8("graphics/pokenav/fly_target_icons.4bpp.lz"); -const u8 gUnknown_083E7920[][3] = +static const u8 sUnknown_083E7920[][3] = { {0, 9, 1}, {0, 10, 14}, @@ -1427,27 +1423,27 @@ struct UnknownStruct4 u16 flag; }; -const u8 *const sEverGrandeCityAreaNames[] = {OtherText_PokeLeague, OtherText_PokeCenter}; +static const u8 *const sEverGrandeCityAreaNames[] = {OtherText_PokeLeague, OtherText_PokeCenter}; -const struct UnknownStruct4 gUnknown_083E79C0[1] = +static const struct UnknownStruct4 sUnknown_083E79C0[1] = { - {sEverGrandeCityAreaNames, MAPSEC_EVER_GRANDE_CITY, 0x854}, + {sEverGrandeCityAreaNames, MAPSEC_EVER_GRANDE_CITY, SYS_POKEMON_LEAGUE_FLY}, }; // XXX: what is this? static u8 *const ewram_ = ewram; -const struct SpritePalette gUnknown_083E79CC = {gPokenavMapMisc_Pal, 2}; +static const struct SpritePalette sFlyTargetIconSpritePalette = {sFlyTargetIcons_Pal, 2}; // Fly targets that are not cities or towns -const u16 gSpecialFlyAreas[][2] = +static const u16 sSpecialFlyAreas[][2] = { // flag, mapSecId {0x848, MAPSEC_BATTLE_TOWER}, {0xFFFF, MAPSEC_NONE}, }; -const struct OamData gFlyTargetOamData = +static const struct OamData sFlyTargetOamData = { .y = 0, .affineMode = 0, @@ -1464,65 +1460,65 @@ const struct OamData gFlyTargetOamData = .affineParam = 0, }; -const union AnimCmd gFlyTargetAnimSeq0[] = +static const union AnimCmd sFlyTargetAnimSeq0[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; -const union AnimCmd gFlyTargetAnimSeq1[] = +static const union AnimCmd sFlyTargetAnimSeq1[] = { ANIMCMD_FRAME(1, 5), ANIMCMD_END, }; -const union AnimCmd gFlyTargetAnimSeq2[] = +static const union AnimCmd sFlyTargetAnimSeq2[] = { ANIMCMD_FRAME(3, 5), ANIMCMD_END, }; -const union AnimCmd gFlyTargetAnimSeq3[] = +static const union AnimCmd sFlyTargetAnimSeq3[] = { ANIMCMD_FRAME(5, 5), ANIMCMD_END, }; -const union AnimCmd gFlyTargetAnimSeq4[] = +static const union AnimCmd sFlyTargetAnimSeq4[] = { ANIMCMD_FRAME(6, 5), ANIMCMD_END, }; -const union AnimCmd gFlyTargetAnimSeq5[] = +static const union AnimCmd sFlyTargetAnimSeq5[] = { ANIMCMD_FRAME(8, 5), ANIMCMD_END, }; -const union AnimCmd gFlyTargetAnimSeq6[] = +static const union AnimCmd sFlyTargetAnimSeq6[] = { ANIMCMD_FRAME(10, 5), ANIMCMD_END, }; -const union AnimCmd *const gFlyTargetAnimTable[] = +static const union AnimCmd *const sFlyTargetAnimTable[] = { - gFlyTargetAnimSeq0, - gFlyTargetAnimSeq1, - gFlyTargetAnimSeq2, - gFlyTargetAnimSeq3, - gFlyTargetAnimSeq4, - gFlyTargetAnimSeq5, - gFlyTargetAnimSeq6, + sFlyTargetAnimSeq0, + sFlyTargetAnimSeq1, + sFlyTargetAnimSeq2, + sFlyTargetAnimSeq3, + sFlyTargetAnimSeq4, + sFlyTargetAnimSeq5, + sFlyTargetAnimSeq6, }; -const struct SpriteTemplate gFlyTargetSpriteTemplate = +static const struct SpriteTemplate gFlyTargetSpriteTemplate = { .tileTag = 2, .paletteTag = 2, - .oam = &gFlyTargetOamData, - .anims = gFlyTargetAnimTable, + .oam = &sFlyTargetOamData, + .anims = sFlyTargetAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy, @@ -1557,20 +1553,20 @@ void CB2_InitFlyRegionMap(void) break; case 3: InitRegionMap(&ewram0.regionMap, 0); - CreateRegionMapCursorIcon(0, 0); + CreateRegionMapCursor(0, 0); CreateRegionMapPlayerIcon(1, 1); ewram0.unk6 = ewram0.regionMap.mapSecId; StringFill(ewramBlankMapName, CHAR_SPACE, 12); PrintFlyTargetName(); break; case 4: - LZ77UnCompVram(gUnknown_083E773C, (void *)(VRAM + 0xC000)); + LZ77UnCompVram(sFlyRegionMapFrame_ImageLZ, (void *)(VRAM + 0xC000)); break; case 5: - LZ77UnCompVram(gUnknown_083E7774, (void *)(VRAM + 0xF000)); + LZ77UnCompVram(sFlyRegionMapFrame_TilemapLZ, (void *)(VRAM + 0xF000)); break; case 6: - LoadPalette(gUnknown_083E771C, 16, 32); + LoadPalette(sFlyRegionMapFrame_Pal, 16, 32); MenuPrint_PixelCoords(gOtherText_FlyToWhere, 1, 0x90, 1); break; case 7: @@ -1578,14 +1574,14 @@ void CB2_InitFlyRegionMap(void) break; case 8: BlendPalettes(0xFFFFFFFF, 16, 0); - SetVBlankCallback(sub_80FC214); + SetVBlankCallback(VBlankCB_FlyRegionMap); break; case 9: REG_BLDCNT = 0; REG_BG1CNT = 0x1E0D; REG_DISPCNT = 0x1741; sub_80FC244(sub_80FC5B4); - SetMainCallback2(sub_80FC228); + SetMainCallback2(CB2_FlyRegionMap); break; default: return; @@ -1593,36 +1589,36 @@ void CB2_InitFlyRegionMap(void) gMain.state++; } -void sub_80FC214(void) +static void VBlankCB_FlyRegionMap(void) { LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); } -void sub_80FC228(void) +static void CB2_FlyRegionMap(void) { ewram0.unk0(); AnimateSprites(); BuildOamBuffer(); } -void sub_80FC244(void (*func)(void)) +static void sub_80FC244(void (*func)(void)) { ewram0.unk0 = func; ewram0.unk4 = 0; } -void PrintFlyTargetName(void) +static void PrintFlyTargetName(void) { if (ewram0.regionMap.unk16 == 2 || ewram0.regionMap.unk16 == 4) { u16 i = 0; int zero; - for (i = 0; i < ARRAY_COUNT(gUnknown_083E79C0); i++) + for (i = 0; i < ARRAY_COUNT(sUnknown_083E79C0); i++) { - const struct UnknownStruct4 *r4 = &gUnknown_083E79C0[i]; + const struct UnknownStruct4 *r4 = &sUnknown_083E79C0[i]; if (ewram0.regionMap.mapSecId == r4->mapSecId) { @@ -1653,22 +1649,22 @@ void PrintFlyTargetName(void) } } -void CreateFlyTargetGraphics(void) +static void CreateFlyTargetGraphics(void) { struct SpriteSheet spriteSheet; - LZ77UnCompWram(gUnknown_083E784C, ewram888); + LZ77UnCompWram(sFlyTargetIcons_ImageLZ, ewram888); spriteSheet.data = ewram888; spriteSheet.size = 0x1C0; spriteSheet.tag = 2; LoadSpriteSheet(&spriteSheet); - LoadSpritePalette(&gUnknown_083E79CC); + LoadSpritePalette(&sFlyTargetIconSpritePalette); CreateCityTownFlyTargetIcons(); CreateSpecialAreaFlyTargetIcons(); } // Draws a light overlay on cities and towns that the player can fly to -void CreateCityTownFlyTargetIcons(void) +static void CreateCityTownFlyTargetIcons(void) { u16 canFlyFlag = 0x80F; u16 i; @@ -1708,20 +1704,20 @@ void CreateCityTownFlyTargetIcons(void) // Draws a red box on other fly targets // The Battle Tower is the only one of these -void CreateSpecialAreaFlyTargetIcons(void) +static void CreateSpecialAreaFlyTargetIcons(void) { u16 i; - for (i = 0; gSpecialFlyAreas[i][1] != MAPSEC_NONE; i++) + for (i = 0; sSpecialFlyAreas[i][1] != MAPSEC_NONE; i++) { u16 x; u16 y; u16 width; u16 height; - if (FlagGet(gSpecialFlyAreas[i][0])) + if (FlagGet(sSpecialFlyAreas[i][0])) { - u16 mapSecId = gSpecialFlyAreas[i][1]; + u16 mapSecId = sSpecialFlyAreas[i][1]; u8 spriteId; GetRegionMapLocationPosition(mapSecId, &x, &y, &width, &height); @@ -1739,7 +1735,7 @@ void CreateSpecialAreaFlyTargetIcons(void) } } -void SpriteCB_FlyTargetIcons(struct Sprite *sprite) +static void SpriteCB_FlyTargetIcons(struct Sprite *sprite) { // Blink if our mapSecId is the one selected on the map if (ewram0.regionMap.mapSecId == sprite->data0) @@ -1759,7 +1755,7 @@ void SpriteCB_FlyTargetIcons(struct Sprite *sprite) } } -void sub_80FC5B4(void) +static void sub_80FC5B4(void) { switch (ewram0.unk4) { @@ -1775,7 +1771,7 @@ void sub_80FC5B4(void) } } -void sub_80FC600(void) +static void sub_80FC600(void) { if (ewram0.unk4 == 0) { @@ -1805,7 +1801,7 @@ void sub_80FC600(void) } } -void sub_80FC69C(void) +static void sub_80FC69C(void) { switch (ewram0.unk4) { @@ -1834,10 +1830,10 @@ void sub_80FC69C(void) sub_8053538((FlagGet(0x854) && ewram0.regionMap.everGrandeCityArea == 0) ? 20 : 11); break; default: - if (gUnknown_083E7920[ewram0.regionMap.mapSecId][2] != 0) - sub_8053538(gUnknown_083E7920[ewram0.regionMap.mapSecId][2]); + if (sUnknown_083E7920[ewram0.regionMap.mapSecId][2] != 0) + sub_8053538(sUnknown_083E7920[ewram0.regionMap.mapSecId][2]); else - warp1_set_2(gUnknown_083E7920[ewram0.regionMap.mapSecId][0], gUnknown_083E7920[ewram0.regionMap.mapSecId][1], -1); + warp1_set_2(sUnknown_083E7920[ewram0.regionMap.mapSecId][0], sUnknown_083E7920[ewram0.regionMap.mapSecId][1], -1); break; } sub_80865BC(); -- cgit v1.2.3